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
package/dist/xy.module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xy.module.js","sources":["../src/components/stream/DataSourceAdapter.ts","../src/components/realtime/RingBuffer.ts","../src/components/realtime/IncrementalExtent.ts","../src/components/realtime/BinAccumulator.ts","../src/components/realtime/renderers/waterfallRenderer.ts","../src/components/stream/SceneGraph.ts","../src/components/stream/accessorUtils.ts","../src/components/stream/PipelineStore.ts","../src/components/stream/CanvasHitTester.ts","../src/components/Legend.tsx","../src/components/stream/MarginalGraphics.tsx","../src/components/stream/SVGOverlay.tsx","../src/components/stream/renderers/lineCanvasRenderer.ts","../src/components/stream/renderers/areaCanvasRenderer.ts","../src/components/stream/renderers/pointCanvasRenderer.ts","../src/components/stream/renderers/barCanvasRenderer.ts","../src/components/stream/renderers/swarmCanvasRenderer.ts","../src/components/stream/renderers/waterfallCanvasRenderer.ts","../src/components/stream/renderers/heatmapCanvasRenderer.ts","../src/components/stream/renderers/candlestickCanvasRenderer.ts","../src/components/stream/StreamXYFrame.tsx","../src/components/charts/shared/colorUtils.ts","../src/components/charts/shared/hooks.ts","../src/components/charts/shared/legendUtils.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/charts/shared/ChartError.tsx","../src/components/charts/shared/validateChartData.ts","../src/components/charts/xy/MinimapChart.tsx","../src/components/visualizationLayerBehavior/axis.tsx","../src/components/Axis/summaryGraphic.tsx","../src/components/Axis/axisTitle.tsx","../src/components/charts/shared/formatUtils.ts","../src/components/geometry/summaryLayouts.tsx","../src/components/Axis/Axis.tsx","../src/components/Annotation.tsx","../src/components/annotationLayerBehavior/d3labeler.ts","../src/components/annotationLayerBehavior/annotationHandling.ts","../src/components/store/createStore.tsx","../src/components/store/TooltipStore.ts","../src/components/AnnotationLayer/helpers.js","../src/components/AnnotationLayer/AnnotationLayer.tsx","../src/components/Brush.tsx","../src/components/geometry/lineDrawing.ts","../src/components/DividedLine.tsx","../src/components/constants/coordinateNames.ts","../src/components/geometry/contourLayout.ts","../src/components/geometry/hexbinLayout.tsx","../src/components/geometry/areaDrawing.tsx","../src/components/data/unflowedFunctions.ts","../src/components/data/dataFunctions.ts"],"sourcesContent":["import type { Changeset } from \"./types\"\n\n/**\n * DataSourceAdapter normalizes all data ingestion paths into uniform changesets:\n *\n * 1. Bounded (props): `data` array → changeset(s) with `bounded: true`\n * 2. Streaming (push): `ref.push()` → micro-changeset with `bounded: false`\n * 3. Hybrid: `data` prop first, then `push()` — seamless transition\n *\n * For large bounded datasets (above CHUNK_THRESHOLD), data is automatically\n * chunked and ingested progressively across multiple animation frames. This\n * keeps the UI responsive while the chart draws incrementally. The first chunk\n * renders immediately so the user sees data right away.\n */\n\n/** Datasets larger than this are chunked for progressive rendering */\nconst CHUNK_THRESHOLD = 5000\n/** Number of items per progressive chunk */\nconst CHUNK_SIZE = 5000\n\nexport type ChangesetCallback<T> = (changeset: Changeset<T>) => void\n\nexport class DataSourceAdapter<T = Record<string, any>> {\n private callback: ChangesetCallback<T>\n private lastBoundedData: T[] | null = null\n private chunkTimer: number = 0\n\n constructor(callback: ChangesetCallback<T>) {\n this.callback = callback\n }\n\n /**\n * Ingest a bounded data array (from props).\n *\n * Small datasets emit a single changeset synchronously.\n * Large datasets (> CHUNK_THRESHOLD) are split into chunks that render\n * progressively: the first chunk fires immediately (bounded: true to\n * reset + seed the buffer), subsequent chunks arrive on successive\n * animation frames (bounded: false so they append without clearing).\n */\n setBoundedData(data: T[]): void {\n if (data === this.lastBoundedData) return\n this.lastBoundedData = data\n\n // Cancel any in-flight progressive ingestion\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n\n if (data.length <= CHUNK_THRESHOLD) {\n // Small dataset — ingest all at once\n this.callback({ inserts: data, bounded: true })\n return\n }\n\n // Large dataset — progressive chunked ingestion.\n // First chunk is bounded: true (resets buffer and sizes it to full length).\n // Subsequent chunks are bounded: false (appends without clearing).\n this.callback({ inserts: data.slice(0, CHUNK_SIZE), bounded: true, totalSize: data.length })\n\n let offset = CHUNK_SIZE\n const scheduleNext = () => {\n if (offset >= data.length) return\n // Check that this is still the active dataset\n if (data !== this.lastBoundedData) return\n\n const end = Math.min(offset + CHUNK_SIZE, data.length)\n this.callback({ inserts: data.slice(offset, end), bounded: false })\n offset = end\n\n if (offset < data.length) {\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n } else {\n this.chunkTimer = 0\n }\n }\n\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n }\n\n /**\n * Push a single datum (streaming mode).\n * Emits a micro-changeset with `bounded: false`.\n */\n push(datum: T): void {\n this.callback({ inserts: [datum], bounded: false })\n }\n\n /**\n * Push multiple data (streaming batch).\n * Emits a single changeset with `bounded: false`.\n */\n pushMany(data: T[]): void {\n if (data.length === 0) return\n this.callback({ inserts: data, bounded: false })\n }\n\n /**\n * Reset the adapter state.\n */\n clear(): void {\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n this.lastBoundedData = null\n }\n}\n","export class RingBuffer<T> {\n private buffer: (T | undefined)[]\n private head: number = 0\n private _size: number = 0\n\n constructor(private _capacity: number) {\n if (_capacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n this.buffer = new Array(_capacity)\n }\n\n push(value: T): T | undefined {\n let evicted: T | undefined\n if (this._size === this._capacity) {\n // Buffer is full — the slot at head is the oldest item\n evicted = this.buffer[this.head]\n } else {\n this._size++\n }\n this.buffer[this.head] = value\n this.head = (this.head + 1) % this._capacity\n return evicted\n }\n\n pushMany(values: T[]): T[] {\n const evicted: T[] = []\n for (const v of values) {\n const e = this.push(v)\n if (e !== undefined) {\n evicted.push(e)\n }\n }\n return evicted\n }\n\n get(index: number): T | undefined {\n if (index < 0 || index >= this._size) return undefined\n const realIndex =\n (this.head - this._size + index + this._capacity) % this._capacity\n return this.buffer[realIndex]\n }\n\n peek(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - 1 + this._capacity) % this._capacity]\n }\n\n peekOldest(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - this._size + this._capacity) % this._capacity]\n }\n\n [Symbol.iterator](): Iterator<T> {\n let i = 0\n const self = this\n return {\n next(): IteratorResult<T> {\n if (i >= self._size) return { done: true, value: undefined } as IteratorReturnResult<undefined>\n return { done: false, value: self.get(i++)! }\n }\n }\n }\n\n toArray(): T[] {\n const result: T[] = []\n for (const item of this) {\n result.push(item)\n }\n return result\n }\n\n resize(newCapacity: number): T[] {\n if (newCapacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n const items = this.toArray()\n const evicted: T[] = []\n while (items.length > newCapacity) {\n evicted.push(items.shift()!)\n }\n this._capacity = newCapacity\n this.buffer = new Array(newCapacity)\n this.head = 0\n this._size = 0\n for (const item of items) {\n this.push(item)\n }\n return evicted\n }\n\n clear(): void {\n this.buffer = new Array(this._capacity)\n this.head = 0\n this._size = 0\n }\n\n get size(): number {\n return this._size\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n get full(): boolean {\n return this._size === this._capacity\n }\n}\n","export class IncrementalExtent {\n private _min: number = Infinity\n private _max: number = -Infinity\n private _dirty: boolean = false\n\n push(value: number): void {\n if (Number.isNaN(value)) return\n if (value < this._min) this._min = value\n if (value > this._max) this._max = value\n }\n\n evict(value: number): void {\n if (value === this._min || value === this._max) {\n this._dirty = true\n }\n }\n\n recalculate<T>(\n values: Iterable<T>,\n accessor?: (v: T) => number\n ): void {\n this._min = Infinity\n this._max = -Infinity\n for (const v of values) {\n const n = accessor ? accessor(v) : (v as number)\n if (Number.isNaN(n)) continue\n if (n < this._min) this._min = n\n if (n > this._max) this._max = n\n }\n this._dirty = false\n }\n\n clear(): void {\n this._min = Infinity\n this._max = -Infinity\n this._dirty = false\n }\n\n get extent(): [number, number] {\n return [this._min, this._max]\n }\n\n get min(): number {\n return this._min\n }\n\n get max(): number {\n return this._max\n }\n\n get dirty(): boolean {\n return this._dirty\n }\n}\n","export interface Bin {\n start: number\n end: number\n total: number\n categories: Map<string, number>\n}\n\nexport function computeBins(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): Map<number, Bin> {\n const bins = new Map<number, Bin>()\n\n for (const d of data) {\n const t = getTime(d)\n const v = getValue(d)\n\n if (t == null || v == null || Number.isNaN(t) || Number.isNaN(v)) continue\n\n const binStart = Math.floor(t / binSize) * binSize\n\n let bin = bins.get(binStart)\n if (!bin) {\n bin = { start: binStart, end: binStart + binSize, total: 0, categories: new Map() }\n bins.set(binStart, bin)\n }\n\n bin.total += v\n\n if (getCategory) {\n const cat = getCategory(d)\n bin.categories.set(cat, (bin.categories.get(cat) || 0) + v)\n }\n }\n\n return bins\n}\n\nexport function computeBinExtent(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): [number, number] {\n const bins = computeBins(data, getTime, getValue, binSize, getCategory)\n\n if (bins.size === 0) return [0, 0]\n\n let maxTotal = 0\n for (const bin of bins.values()) {\n if (bin.total > maxTotal) maxTotal = bin.total\n }\n\n return [0, maxTotal]\n}\n","import type { RendererFn } from \"./types\"\n\nconst DEFAULT_POSITIVE_COLOR = \"#28a745\"\nconst DEFAULT_NEGATIVE_COLOR = \"#dc3545\"\n\nexport function computeWaterfallExtent(\n data: Iterable<Record<string, any>>,\n getValue: (d: Record<string, any>) => number\n): [number, number] {\n let min = 0\n let max = 0\n let cumulative = 0\n\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n cumulative += v\n if (cumulative < min) min = cumulative\n if (cumulative > max) max = cumulative\n }\n\n return [min, max]\n}\n\nexport const waterfallRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis, width, height } = layout\n const { time: getTime, value: getValue } = accessors\n const ws = options?.waterfallStyle\n\n const positiveColor = ws?.positiveColor ?? DEFAULT_POSITIVE_COLOR\n const negativeColor = ws?.negativeColor ?? DEFAULT_NEGATIVE_COLOR\n const gap = ws?.gap ?? 1\n const connectorStroke = ws?.connectorStroke\n const connectorWidth = ws?.connectorWidth ?? 1\n const hasStroke = ws?.stroke != null\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n\n // Collect into array for random access (skip NaN/null values)\n const arr: Record<string, any>[] = []\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n arr.push(d)\n }\n\n if (arr.length === 0) return\n\n let baseline = 0\n // Track the end edge of the previous bar and its cumulative value for connectors\n let prevEdge: number | null = null\n let prevCumulative: number | null = null\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = getTime(d)\n const delta = getValue(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap to next point\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = getTime(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - getTime(arr[i - 1])\n } else {\n // Single point fallback: use 0 to trigger pixel fallback\n barWidthTime = 0\n }\n\n ctx.fillStyle = delta >= 0 ? positiveColor : negativeColor\n\n if (timeAxis === \"x\") {\n let rawX0: number, rawX1: number\n\n if (barWidthTime !== 0) {\n rawX0 = timeScale(t)\n rawX1 = timeScale(t + barWidthTime)\n } else {\n rawX0 = timeScale(t)\n rawX1 = rawX0 + width / 10\n }\n\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n prevEdge = x1\n prevCumulative = cumEnd\n continue\n }\n\n const yBaseline = valueScale(baseline)\n const yTop = valueScale(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n // Connector line at the baseline level from previous bar's right edge to this bar's left edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connY = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(prevEdge, connY)\n ctx.lineTo(x0, connY)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n\n prevEdge = x1\n } else {\n // timeAxis === \"y\": horizontal bars\n let rawY0: number, rawY1: number\n\n if (barWidthTime !== 0) {\n rawY0 = timeScale(t)\n rawY1 = timeScale(t + barWidthTime)\n } else {\n rawY0 = timeScale(t)\n rawY1 = rawY0 + height / 10\n }\n\n const y0 = Math.min(rawY0, rawY1) + gap / 2\n const y1 = Math.max(rawY0, rawY1) - gap / 2\n const barHeight = y1 - y0\n if (barHeight <= 0) {\n baseline = cumEnd\n prevEdge = y1\n prevCumulative = cumEnd\n continue\n }\n\n const xBaseline = valueScale(baseline)\n const xEnd = valueScale(cumEnd)\n const rectX = Math.min(xBaseline, xEnd)\n const rectW = Math.abs(xEnd - xBaseline)\n\n // Connector line at the baseline level from previous bar's bottom edge to this bar's top edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connX = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(connX, prevEdge)\n ctx.lineTo(connX, y0)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n\n prevEdge = y1\n }\n\n baseline = cumEnd\n prevCumulative = cumEnd\n }\n}\n","import type {\n SceneNode,\n LineSceneNode,\n AreaSceneNode,\n PointSceneNode,\n RectSceneNode,\n HeatcellSceneNode,\n Style,\n StreamScales,\n StreamLayout\n} from \"./types\"\n\n// ── Scene node builders ────────────────────────────────────────────────\n\nexport function buildLineNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n style: Style,\n group?: string\n): LineSceneNode {\n const path: [number, number][] = []\n const rawValues: number[] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n path.push([scales.x(xVal), scales.y(yVal)])\n rawValues.push(yVal)\n }\n return { type: \"line\", path, rawValues, style, datum: data, group }\n}\n\nexport function buildAreaNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n baselineY: number,\n style: Style,\n group?: string\n): AreaSceneNode {\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n const px = scales.x(xVal)\n topPath.push([px, scales.y(yVal)])\n bottomPath.push([px, scales.y(baselineY)])\n }\n return { type: \"area\", topPath, bottomPath, style, datum: data, group }\n}\n\nexport function buildStackedAreaNodes(\n groups: { key: string; data: Record<string, any>[] }[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n styleFn: (group: string, sampleDatum?: Record<string, any>) => Style,\n normalize?: boolean\n): AreaSceneNode[] {\n // Collect all unique x values\n const xSet = new Set<number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = xGet(d)\n if (x != null && !Number.isNaN(x)) xSet.add(x)\n }\n }\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n\n // Build value lookup per group per x\n const valueMaps: Map<string, Map<number, number>> = new Map()\n for (const g of groups) {\n const m = new Map<number, number>()\n for (const d of g.data) {\n const x = xGet(d)\n const y = yGet(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n m.set(x, (m.get(x) || 0) + y)\n }\n }\n valueMaps.set(g.key, m)\n }\n\n // Compute totals per x for normalization\n let totals: Map<number, number> | undefined\n if (normalize) {\n totals = new Map()\n for (const x of xValues) {\n let sum = 0\n for (const g of groups) {\n sum += valueMaps.get(g.key)?.get(x) || 0\n }\n totals.set(x, sum || 1) // avoid div by 0\n }\n }\n\n // Build stacked area nodes bottom-up\n const nodes: AreaSceneNode[] = []\n const baselines = new Map<number, number>() // x → cumulative y\n for (const x of xValues) baselines.set(x, 0)\n\n for (const g of groups) {\n const vMap = valueMaps.get(g.key)!\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const x of xValues) {\n let rawY = vMap.get(x) || 0\n const base = baselines.get(x)!\n\n if (normalize) {\n const total = totals!.get(x)!\n rawY = rawY / total\n }\n\n const px = scales.x(x)\n bottomPath.push([px, scales.y(base)])\n topPath.push([px, scales.y(base + rawY)])\n baselines.set(x, base + rawY)\n }\n\n nodes.push({\n type: \"area\",\n topPath,\n bottomPath,\n style: styleFn(g.key, g.data[0]),\n datum: g.data,\n group: g.key\n })\n }\n\n return nodes\n}\n\nexport function buildPointNode(\n datum: Record<string, any>,\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n r: number,\n style: Style\n): PointSceneNode | null {\n const xVal = xGet(datum)\n const yVal = yGet(datum)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) return null\n return {\n type: \"point\",\n x: scales.x(xVal),\n y: scales.y(yVal),\n r,\n style,\n datum\n }\n}\n\nexport function buildRectNode(\n x: number,\n y: number,\n w: number,\n h: number,\n style: Style,\n datum: any,\n group?: string\n): RectSceneNode {\n return { type: \"rect\", x, y, w, h, style, datum, group }\n}\n\nexport function buildHeatcellNode(\n x: number,\n y: number,\n w: number,\n h: number,\n fill: string,\n datum: any\n): HeatcellSceneNode {\n return { type: \"heatcell\", x, y, w, h, fill, datum }\n}\n\n// ── Scene graph container ──────────────────────────────────────────────\n\nexport interface SceneGraphData {\n nodes: SceneNode[]\n version: number\n}\n\nexport function createSceneGraph(): SceneGraphData {\n return { nodes: [], version: 0 }\n}\n\nexport function updateSceneGraph(\n scene: SceneGraphData,\n nodes: SceneNode[]\n): SceneGraphData {\n return { nodes, version: scene.version + 1 }\n}\n","// ── Accessor resolution ────────────────────────────────────────────────\n\nexport function resolveAccessor<T>(\n accessor: string | ((d: T) => number) | undefined,\n fallback: string\n): (d: T) => number {\n if (typeof accessor === \"function\") return (d: T) => +accessor(d)\n const key = accessor || fallback\n return (d: T) => +(d as any)[key]\n}\n\nexport function resolveStringAccessor<T>(\n accessor: string | ((d: T) => string) | undefined,\n fallback?: string\n): ((d: T) => string) | undefined {\n if (typeof accessor === \"function\") return accessor\n if (accessor) return (d: T) => String((d as any)[accessor])\n if (fallback) return (d: T) => String((d as any)[fallback])\n return undefined\n}\n","import { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport { computeBins, computeBinExtent } from \"../realtime/BinAccumulator\"\nimport { computeWaterfallExtent } from \"../realtime/renderers/waterfallRenderer\"\nimport type {\n Changeset,\n StreamChartType,\n StreamScales,\n StreamLayout,\n SceneNode,\n AreaSceneNode,\n CandlestickSceneNode,\n CandlestickStyle,\n Style,\n ArrowOfTime,\n WindowMode,\n DecayConfig,\n PulseConfig,\n TransitionConfig,\n StalenessConfig\n} from \"./types\"\nimport {\n buildLineNode,\n buildAreaNode,\n buildStackedAreaNodes,\n buildPointNode,\n buildRectNode,\n buildHeatcellNode\n} from \"./SceneGraph\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\n\n// ── Axis direction helpers ─────────────────────────────────────────────\n\nfunction getTimeAxis(arrowOfTime: ArrowOfTime): \"x\" | \"y\" {\n return arrowOfTime === \"up\" || arrowOfTime === \"down\" ? \"y\" : \"x\"\n}\n\n// ── PipelineStore config ───────────────────────────────────────────────\n\nexport interface PipelineConfig {\n chartType: StreamChartType\n runtimeMode?: \"streaming\" | \"bounded\"\n windowSize: number\n windowMode: WindowMode\n arrowOfTime: ArrowOfTime\n extentPadding: number\n\n // Accessors\n xAccessor?: string | ((d: any) => number)\n yAccessor?: string | ((d: any) => number)\n timeAccessor?: string | ((d: any) => number)\n valueAccessor?: string | ((d: any) => number)\n colorAccessor?: string | ((d: any) => string)\n sizeAccessor?: string | ((d: any) => number)\n groupAccessor?: string | ((d: any) => string)\n categoryAccessor?: string | ((d: any) => string)\n lineDataAccessor?: string\n\n // Fixed extents (partial: [min] or [min, undefined] to set only min)\n xExtent?: [number | undefined, number | undefined] | [number]\n yExtent?: [number | undefined, number | undefined] | [number]\n sizeRange?: [number, number]\n\n // Bar/heatmap specifics\n binSize?: number\n normalize?: boolean\n\n // Candlestick accessors\n openAccessor?: string | ((d: any) => number)\n highAccessor?: string | ((d: any) => number)\n lowAccessor?: string | ((d: any) => number)\n closeAccessor?: string | ((d: any) => number)\n candlestickStyle?: CandlestickStyle\n\n // Bounds/uncertainty\n boundsAccessor?: string | ((d: any) => number)\n boundsStyle?: any\n\n // Style\n lineStyle?: any\n pointStyle?: (d: any) => Style & { r?: number }\n areaStyle?: (d: any) => Style\n swarmStyle?: { radius?: number; fill?: string; opacity?: number; stroke?: string; strokeWidth?: number }\n colorScheme?: string | string[]\n barColors?: Record<string, string>\n\n // Annotations (threshold coloring uses these)\n annotations?: Record<string, any>[]\n\n // Realtime encoding\n decay?: DecayConfig\n pulse?: PulseConfig\n transition?: TransitionConfig\n staleness?: StalenessConfig\n\n // Streaming heatmap\n heatmapAggregation?: \"count\" | \"sum\" | \"mean\"\n heatmapXBins?: number\n heatmapYBins?: number\n}\n\n// ── PipelineStore ──────────────────────────────────────────────────────\n\nexport class PipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private xExtent = new IncrementalExtent()\n private yExtent = new IncrementalExtent()\n private config: PipelineConfig\n private growingCap: number\n\n private getX: (d: any) => number\n private getY: (d: any) => number\n private getGroup: ((d: any) => string) | undefined\n private getCategory: ((d: any) => string) | undefined\n private getSize: ((d: any) => number) | undefined\n private getColor: ((d: any) => string) | undefined\n private getBounds: ((d: any) => number) | undefined\n private getOpen: ((d: any) => number) | undefined\n private getHigh: ((d: any) => number) | undefined\n private getLow: ((d: any) => number) | undefined\n private getClose: ((d: any) => number) | undefined\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: StreamScales | null = null\n scene: SceneNode[] = []\n version = 0\n\n constructor(config: PipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n this.growingCap = config.windowSize\n\n // Resolve accessors based on streaming vs bounded mode.\n // Streaming types use time/value defaults; bounded types use x/y defaults.\n const isStreamingType = [\"bar\", \"swarm\", \"waterfall\"].includes(config.chartType)\n const useStreamingDefaults = isStreamingType || config.runtimeMode === \"streaming\"\n\n if (useStreamingDefaults) {\n this.getX = resolveAccessor(config.timeAccessor || config.xAccessor, \"time\")\n this.getY = resolveAccessor(\n config.valueAccessor || config.yAccessor,\n \"value\"\n )\n } else {\n this.getX = resolveAccessor(config.xAccessor, \"x\")\n this.getY = resolveAccessor(config.yAccessor, \"y\")\n }\n\n this.getGroup = resolveStringAccessor(config.groupAccessor)\n this.getCategory = resolveStringAccessor(config.categoryAccessor)\n this.getSize = config.sizeAccessor\n ? resolveAccessor(config.sizeAccessor, \"size\")\n : undefined\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getBounds = config.boundsAccessor\n ? resolveAccessor(config.boundsAccessor, \"bounds\")\n : undefined\n\n // Candlestick accessors\n if (config.chartType === \"candlestick\") {\n this.getOpen = resolveAccessor(config.openAccessor, \"open\")\n this.getHigh = resolveAccessor(config.highAccessor, \"high\")\n this.getLow = resolveAccessor(config.lowAccessor, \"low\")\n this.getClose = resolveAccessor(config.closeAccessor, \"close\")\n }\n\n // Pulse: parallel timestamp buffer\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n /**\n * Process a changeset from DataSourceAdapter.\n * Returns true if the scene needs re-rendering.\n */\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n // Full replacement for bounded data\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n // Auto-resize buffer to fit all bounded data.\n // totalSize is set when data is progressively chunked — pre-allocate\n // for the full dataset so subsequent append chunks don't evict.\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n if (this.config.windowMode === \"growing\" && this.buffer.full) {\n this.growingCap *= 2\n this.buffer.resize(this.growingCap)\n if (this.timestampBuffer) this.timestampBuffer.resize(this.growingCap)\n }\n\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n\n if (evicted != null) {\n this.xExtent.evict(this.getX(evicted))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.evict(this.getHigh(evicted))\n this.yExtent.evict(this.getLow(evicted))\n } else {\n this.yExtent.evict(this.getY(evicted))\n }\n }\n }\n }\n\n return true\n }\n\n /**\n * Recompute scales and scene graph for the current buffer contents.\n */\n computeScene(layout: StreamLayout): void {\n const { config, buffer } = this\n\n // Recalculate dirty extents\n if (this.xExtent.dirty) {\n this.xExtent.recalculate(buffer, this.getX)\n }\n if (this.yExtent.dirty) {\n if (config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n // Candlestick y-extent spans high→low, not a single y accessor\n this.yExtent.clear()\n for (const d of buffer) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n }\n } else {\n this.yExtent.recalculate(buffer, this.getY)\n }\n }\n\n // Resolve domains — merge user-specified extents with data extents\n const dataXDomain = this.xExtent.extent\n const dataYDomain = this.yExtent.extent\n let xDomain: [number, number] = config.xExtent\n ? [\n config.xExtent[0] ?? dataXDomain[0],\n config.xExtent[1] ?? dataXDomain[1]\n ]\n : dataXDomain\n let yDomain: [number, number] = config.yExtent\n ? [\n config.yExtent[0] ?? dataYDomain[0],\n config.yExtent[1] ?? dataYDomain[1]\n ]\n : dataYDomain\n\n // Determine if extents are fully user-specified (no padding needed)\n const yFullySpecified = config.yExtent && config.yExtent[0] != null && config.yExtent[1] != null\n const xFullySpecified = config.xExtent && config.xExtent[0] != null && config.xExtent[1] != null\n\n // Chart-type specific extent adjustments\n if (config.chartType === \"stackedarea\" && !yFullySpecified && buffer.size > 0) {\n // Stacked areas: y-extent must cover the cumulative sums, not raw values\n if (config.normalize) {\n // Normalized: all stacks sum to 1.0\n yDomain = [0, 1 + config.extentPadding]\n } else {\n const data = buffer.toArray()\n const groups = this.groupData(data)\n\n // Build per-x-value totals across all groups\n const xTotals = new Map<number, number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n xTotals.set(x, (xTotals.get(x) || 0) + y)\n }\n }\n }\n\n let maxStacked = 0\n for (const total of xTotals.values()) {\n if (total > maxStacked) maxStacked = total\n }\n\n const pad = maxStacked > 0 ? maxStacked * config.extentPadding : 1\n yDomain = [0, maxStacked + pad]\n }\n } else if (config.chartType === \"bar\" && config.binSize && !yFullySpecified && buffer.size > 0) {\n const [, maxTotal] = computeBinExtent(\n buffer, this.getX, this.getY, config.binSize, this.getCategory\n )\n yDomain = [0, maxTotal + maxTotal * config.extentPadding]\n } else if (config.chartType === \"waterfall\" && !yFullySpecified && buffer.size > 0) {\n const [minCum, maxCum] = computeWaterfallExtent(buffer, this.getY)\n const range = maxCum - minCum\n const pad = range > 0 ? range * config.extentPadding : 1\n yDomain = [\n Math.min(0, minCum - Math.abs(pad)),\n Math.max(0, maxCum + Math.abs(pad))\n ]\n } else if (!yFullySpecified && yDomain[0] !== Infinity) {\n // Expand extent to include bounds/uncertainty offsets\n if (this.getBounds) {\n const data = buffer.toArray()\n for (const d of data) {\n const y = this.getY(d)\n const offset = this.getBounds(d)\n if (y == null || Number.isNaN(y) || !offset) continue\n if (y + offset > yDomain[1]) yDomain[1] = y + offset\n if (y - offset < yDomain[0]) yDomain[0] = y - offset\n }\n }\n const range = yDomain[1] - yDomain[0]\n const pad = range > 0 ? range * config.extentPadding : 1\n // Only pad the data-derived side; preserve user-specified bounds\n const userMin = config.yExtent?.[0]\n const userMax = config.yExtent?.[1]\n yDomain = [\n userMin != null ? yDomain[0] : yDomain[0] - pad,\n userMax != null ? yDomain[1] : yDomain[1] + pad\n ]\n }\n\n // Handle degenerate extents\n if (xDomain[0] === Infinity || xDomain[1] === -Infinity) xDomain = [0, 1]\n if (yDomain[0] === Infinity || yDomain[1] === -Infinity) yDomain = [0, 1]\n\n // Build scales\n // For streaming charts, use time/value axes based on arrowOfTime\n const isStreaming = config.arrowOfTime !== undefined\n if (isStreaming) {\n const timeAxis = getTimeAxis(config.arrowOfTime)\n if (timeAxis === \"x\") {\n const xRange: [number, number] = config.arrowOfTime === \"right\"\n ? [0, layout.width]\n : [layout.width, 0]\n this.scales = {\n x: scaleLinear().domain(xDomain).range(xRange),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n } else {\n const yRange: [number, number] = config.arrowOfTime === \"down\"\n ? [0, layout.height]\n : [layout.height, 0]\n this.scales = {\n x: scaleLinear().domain(yDomain).range([0, layout.width]),\n y: scaleLinear().domain(xDomain).range(yRange)\n }\n }\n } else {\n this.scales = {\n x: scaleLinear().domain(xDomain).range([0, layout.width]),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n }\n\n // Snapshot positions for transition animation (before rebuild)\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // Build scene graph based on chart type\n const data = buffer.toArray()\n this.scene = this.buildSceneNodes(layout)\n\n // Apply decay opacity to discrete nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n\n // Apply pulse glow to discrete nodes\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation from old to new positions\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private buildSceneNodes(layout: StreamLayout): SceneNode[] {\n const { config, buffer, scales } = this\n if (!scales || buffer.size === 0) return []\n\n const data = buffer.toArray()\n\n switch (config.chartType) {\n case \"line\":\n return this.buildLineScene(data)\n case \"area\":\n return this.buildAreaScene(data)\n case \"stackedarea\":\n return this.buildStackedAreaScene(data)\n case \"scatter\":\n case \"bubble\":\n return this.buildPointScene(data)\n case \"heatmap\":\n return this.buildHeatmapScene(data, layout)\n case \"bar\":\n return this.buildBarScene(data)\n case \"swarm\":\n return this.buildSwarmScene(data)\n case \"waterfall\":\n return this.buildWaterfallScene(data, layout)\n case \"candlestick\":\n return this.buildCandlestickScene(data, layout)\n default:\n return []\n }\n }\n\n private buildLineScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Extract color thresholds from annotations (if any)\n const colorThresholds = this.config.annotations\n ?.filter((a: any) => a.type === \"threshold\" && a.color)\n .map((a: any) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n\n // Build bounds areas first so they render behind lines\n if (this.getBounds) {\n for (const g of groups) {\n const boundsNode = this.buildBoundsForGroup(g.data, g.key)\n if (boundsNode) nodes.push(boundsNode)\n }\n }\n\n for (const g of groups) {\n const style = this.resolveLineStyle(g.key, g.data[0])\n const lineNode = buildLineNode(g.data, this.scales!, this.getX, this.getY, style, g.key)\n // Attach threshold info for the renderer\n if (colorThresholds && colorThresholds.length > 0) {\n lineNode.colorThresholds = colorThresholds\n }\n nodes.push(lineNode)\n }\n\n return nodes\n }\n\n private buildAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Use the bottom of the y domain as the baseline so areas fill to the chart edge\n const yDomain = this.scales!.y.domain() as [number, number]\n const baseline = yDomain[0]\n\n for (const g of groups) {\n const style = this.resolveAreaStyle(g.key, g.data[0])\n nodes.push(buildAreaNode(g.data, this.scales!, this.getX, this.getY, baseline, style, g.key))\n }\n\n return nodes\n }\n\n private buildStackedAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const styleFn = (group: string, sampleDatum?: Record<string, any>) =>\n this.resolveAreaStyle(group, sampleDatum)\n return buildStackedAreaNodes(\n groups,\n this.scales!,\n this.getX,\n this.getY,\n styleFn,\n this.config.normalize\n )\n }\n\n private buildPointScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const defaultR = this.config.chartType === \"bubble\" ? 10 : 5\n const sizeRange = this.config.sizeRange || [3, 15]\n\n // Compute size scale if sizeAccessor is set and no pointStyle handles it\n let sizeScale: ((v: number) => number) | null = null\n if (this.getSize && !this.config.pointStyle) {\n const sizes = data.map(d => this.getSize!(d)).filter(s => s != null && !Number.isNaN(s))\n if (sizes.length > 0) {\n const minSize = Math.min(...sizes)\n const maxSize = Math.max(...sizes)\n sizeScale = (s: number) => {\n if (minSize === maxSize) return (sizeRange[0] + sizeRange[1]) / 2\n return sizeRange[0] + ((s - minSize) / (maxSize - minSize)) * (sizeRange[1] - sizeRange[0])\n }\n }\n }\n\n // Build color map from colorAccessor if no pointStyle handles it\n let colorMap: Map<string, string> | null = null\n if (this.getColor && !this.config.pointStyle) {\n const categories = new Set<string>()\n for (const d of data) {\n const c = this.getColor(d)\n if (c) categories.add(c)\n }\n const palette = Array.isArray(this.config.colorScheme) ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n colorMap = new Map()\n let ci = 0\n for (const cat of categories) {\n colorMap.set(cat, palette[ci % palette.length])\n ci++\n }\n }\n\n for (const d of data) {\n let style = this.config.pointStyle ? this.config.pointStyle(d) : { fill: \"#4e79a7\", opacity: 0.8 }\n\n // Apply size from accessor if pointStyle doesn't provide it\n let r = style.r || defaultR\n if (sizeScale && this.getSize) {\n const sizeVal = this.getSize(d)\n if (sizeVal != null && !Number.isNaN(sizeVal)) {\n r = sizeScale(sizeVal)\n }\n }\n\n // Apply color from accessor if pointStyle doesn't provide a custom fill\n if (colorMap && this.getColor) {\n const colorVal = this.getColor(d)\n if (colorVal && colorMap.has(colorVal)) {\n style = { ...style, fill: colorMap.get(colorVal)! }\n }\n }\n\n const node = buildPointNode(d, this.scales!, this.getX, this.getY, r, style)\n if (node) nodes.push(node)\n }\n\n return nodes\n }\n\n private buildHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n\n // Streaming heatmap: 2D grid binning with aggregation\n if (this.config.heatmapAggregation) {\n return this.buildStreamingHeatmapScene(data, layout)\n }\n\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n // Determine grid dimensions from unique x/y values\n const xSet = new Set<number>()\n const ySet = new Set<number>()\n for (const d of data) {\n xSet.add(this.getX(d))\n ySet.add(this.getY(d))\n }\n\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n const yValues = Array.from(ySet).sort((a, b) => a - b)\n if (xValues.length === 0 || yValues.length === 0) return nodes\n\n const cellW = layout.width / xValues.length\n const cellH = layout.height / yValues.length\n\n // Build value lookup\n const valueMap = new Map<string, { val: number; datum: any }>()\n for (const d of data) {\n const key = `${this.getX(d)}_${this.getY(d)}`\n valueMap.set(key, { val: getVal(d), datum: d })\n }\n\n // Compute value range for color\n let minVal = Infinity\n let maxVal = -Infinity\n for (const { val } of valueMap.values()) {\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n for (let xi = 0; xi < xValues.length; xi++) {\n for (let yi = 0; yi < yValues.length; yi++) {\n const key = `${xValues[xi]}_${yValues[yi]}`\n const entry = valueMap.get(key)\n if (!entry) continue\n\n const t = (entry.val - minVal) / valRange\n // Default to blues interpolation\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yValues.length - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n entry.datum\n ))\n }\n }\n\n return nodes\n }\n\n /**\n * Streaming heatmap: discretize continuous x/y into a grid and aggregate.\n */\n private buildStreamingHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const xBins = this.config.heatmapXBins ?? 20\n const yBins = this.config.heatmapYBins ?? 20\n const agg = this.config.heatmapAggregation ?? \"count\"\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n if (!this.scales || data.length === 0) return nodes\n\n const [xMin, xMax] = this.scales.x.domain() as [number, number]\n const [yMin, yMax] = this.scales.y.domain() as [number, number]\n const xRange = xMax - xMin || 1\n const yRange = yMax - yMin || 1\n const xBinSize = xRange / xBins\n const yBinSize = yRange / yBins\n\n // Grid cells: [xi][yi] → { sum, count }\n const grid = new Map<string, { sum: number; count: number; data: any[] }>()\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n const xi = Math.min(Math.floor((xVal - xMin) / xBinSize), xBins - 1)\n const yi = Math.min(Math.floor((yVal - yMin) / yBinSize), yBins - 1)\n if (xi < 0 || yi < 0) continue\n\n const key = `${xi}_${yi}`\n let cell = grid.get(key)\n if (!cell) {\n cell = { sum: 0, count: 0, data: [] }\n grid.set(key, cell)\n }\n cell.count++\n cell.sum += getVal(d)\n cell.data.push(d)\n }\n\n // Compute aggregated values and find range\n let minVal = Infinity\n let maxVal = -Infinity\n const cellValues = new Map<string, number>()\n for (const [key, cell] of grid) {\n let val: number\n switch (agg) {\n case \"sum\": val = cell.sum; break\n case \"mean\": val = cell.count > 0 ? cell.sum / cell.count : 0; break\n default: val = cell.count; break\n }\n cellValues.set(key, val)\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n const cellW = layout.width / xBins\n const cellH = layout.height / yBins\n\n for (const [key, val] of cellValues) {\n const [xiStr, yiStr] = key.split(\"_\")\n const xi = +xiStr\n const yi = +yiStr\n\n const t = (val - minVal) / valRange\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n const cell = grid.get(key)!\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yBins - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n { xi, yi, value: val, count: cell.count, sum: cell.sum, data: cell.data }\n ))\n }\n\n return nodes\n }\n\n private buildBarScene(data: Record<string, any>[]): SceneNode[] {\n if (!this.config.binSize) return []\n\n const bins = computeBins(data, this.getX, this.getY, this.config.binSize, this.getCategory)\n if (bins.size === 0) return []\n\n // Establish a global category order that is stable across frames.\n // Use barColors keys first (preserves user-specified order), then any\n // additional categories sorted alphabetically. This prevents flicker\n // when bins partially exit the sliding window and their per-category\n // values shrink/disappear — without a fixed order the Map iteration\n // order shifts and stacked segments jump around.\n let categoryOrder: string[] | null = null\n if (this.getCategory) {\n const allCategories = new Set<string>()\n for (const bin of bins.values()) {\n for (const cat of bin.categories.keys()) {\n allCategories.add(cat)\n }\n }\n const colorKeys = this.config.barColors ? Object.keys(this.config.barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Array.from(allCategories).filter(c => !listed.has(c)).sort()\n categoryOrder = [...colorKeys.filter(k => allCategories.has(k)), ...unlisted]\n }\n\n const nodes: SceneNode[] = []\n const scales = this.scales!\n const [domainMin, domainMax] = scales.x.domain() as [number, number]\n const gap = this.config.barColors ? 1 : 1\n\n for (const bin of bins.values()) {\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n if (clampedStart >= clampedEnd) continue\n\n const rawX0 = scales.x(clampedStart)\n const rawX1 = scales.x(clampedEnd)\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) continue\n\n if (categoryOrder && bin.categories.size > 0) {\n let cumulativeBase = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n const yBottom = scales.y(cumulativeBase)\n const yTop = scales.y(cumulativeBase + catVal)\n const rectY = Math.min(yBottom, yTop)\n const rectH = Math.abs(yBottom - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: this.config.barColors?.[cat] || \"#4e79a7\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total, category: cat, categoryValue: catVal },\n cat\n ))\n cumulativeBase += catVal\n }\n } else {\n const yZero = scales.y(0)\n const yTop = scales.y(bin.total)\n const rectY = Math.min(yZero, yTop)\n const rectH = Math.abs(yZero - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: \"#007bff\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total }\n ))\n }\n }\n\n return nodes\n }\n\n private buildSwarmScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const swarm = this.config.swarmStyle || {}\n const radius = swarm.radius ?? 3\n const defaultFill = swarm.fill ?? \"#007bff\"\n const opacity = swarm.opacity ?? 0.7\n const stroke = swarm.stroke\n const strokeWidth = swarm.strokeWidth\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n if (yVal == null || Number.isNaN(yVal)) continue\n\n const x = this.scales!.x(xVal)\n const y = this.scales!.y(yVal)\n\n let fill = defaultFill\n if (this.getCategory) {\n const cat = this.getCategory(d)\n fill = this.config.barColors?.[cat] || fill\n }\n\n nodes.push({\n type: \"point\",\n x, y, r: radius,\n style: { fill, opacity, stroke, strokeWidth },\n datum: d\n })\n }\n\n return nodes\n }\n\n private buildWaterfallScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const scales = this.scales!\n\n // Filter valid data\n const arr = data.filter(d => {\n const v = this.getY(d)\n return v != null && !Number.isNaN(v)\n })\n if (arr.length === 0) return nodes\n\n const gap = 1\n let baseline = 0\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = this.getX(d)\n const delta = this.getY(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = this.getX(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - this.getX(arr[i - 1])\n } else {\n barWidthTime = 0\n }\n\n const rawX0 = scales.x(t)\n const rawX1 = barWidthTime !== 0 ? scales.x(t + barWidthTime) : rawX0 + layout.width / 10\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n continue\n }\n\n const yBaseline = scales.y(baseline)\n const yTop = scales.y(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n const fill = delta >= 0 ? \"#28a745\" : \"#dc3545\"\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill },\n { ...d, baseline, cumEnd, delta }\n ))\n\n baseline = cumEnd\n }\n\n return nodes\n }\n\n private buildCandlestickScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n if (!this.getOpen || !this.getHigh || !this.getLow || !this.getClose || !this.scales) return []\n\n const nodes: SceneNode[] = []\n const cs = this.config.candlestickStyle || {}\n const upColor = cs.upColor || \"#28a745\"\n const downColor = cs.downColor || \"#dc3545\"\n const wickColor = cs.wickColor || \"#333\"\n const wickWidth = cs.wickWidth || 1\n\n // Compute body width from data spacing\n const sortedX = data\n .map(d => this.getX(d))\n .filter(x => x != null && !Number.isNaN(x))\n .sort((a, b) => a - b)\n\n let bodyWidth = cs.bodyWidth || 6\n if (!cs.bodyWidth && sortedX.length > 1) {\n // Auto-size: 60% of the minimum gap between adjacent x values\n let minGap = Infinity\n for (let i = 1; i < sortedX.length; i++) {\n const gap = Math.abs(this.scales!.x(sortedX[i]) - this.scales!.x(sortedX[i - 1]))\n if (gap > 0 && gap < minGap) minGap = gap\n }\n if (minGap !== Infinity) {\n bodyWidth = Math.max(2, Math.min(minGap * 0.6, 20))\n }\n }\n\n for (const d of data) {\n const xVal = this.getX(d)\n if (xVal == null || Number.isNaN(xVal)) continue\n\n const open = this.getOpen(d)\n const high = this.getHigh(d)\n const low = this.getLow(d)\n const close = this.getClose(d)\n if ([open, high, low, close].some(v => v == null || Number.isNaN(v))) continue\n\n const isUp = close >= open\n\n nodes.push({\n type: \"candlestick\",\n x: this.scales!.x(xVal),\n openY: this.scales!.y(open),\n closeY: this.scales!.y(close),\n highY: this.scales!.y(high),\n lowY: this.scales!.y(low),\n bodyWidth,\n upColor,\n downColor,\n wickColor,\n wickWidth,\n isUp,\n datum: d\n } as CandlestickSceneNode)\n }\n\n return nodes\n }\n\n // ── Bounds helpers ───────────────────────────────────────────────────\n\n private buildBoundsForGroup(data: Record<string, any>[], group: string): AreaSceneNode | null {\n if (!this.getBounds || !this.scales) return null\n\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const d of data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x == null || y == null || Number.isNaN(x) || Number.isNaN(y)) continue\n\n const offset = this.getBounds(d)\n const px = this.scales!.x(x)\n\n if (!offset || offset === 0) {\n // No bounds at this point — collapse to the line\n const py = this.scales!.y(y)\n topPath.push([px, py])\n bottomPath.push([px, py])\n } else {\n topPath.push([px, this.scales!.y(y + offset)])\n bottomPath.push([px, this.scales!.y(y - offset)])\n }\n }\n\n if (topPath.length < 2) return null\n\n return {\n type: \"area\",\n topPath,\n bottomPath,\n style: this.resolveBoundsStyle(group, data[0]),\n datum: data,\n group,\n interactive: false\n }\n }\n\n private resolveBoundsStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const bs = this.config.boundsStyle\n if (typeof bs === \"function\") {\n return bs(sampleDatum || {}, group)\n }\n if (bs && typeof bs === \"object\") {\n return bs\n }\n // Default: match line color with low opacity\n const lineStyle = this.resolveLineStyle(group, sampleDatum)\n return {\n fill: lineStyle.stroke || \"#4e79a7\",\n fillOpacity: 0.2,\n stroke: \"none\"\n }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n /**\n * Compute decay opacity for a datum at `bufferIndex` out of `bufferSize` items.\n * Index 0 = oldest, bufferSize-1 = newest. Returns 0–1.\n */\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n // age: 0 = newest, bufferSize-1 = oldest\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n /**\n * Apply decay opacity to a list of discrete scene nodes.\n * Uses the datum's index in the buffer data array.\n */\n private applyDecay(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n if (node.type === \"heatcell\") {\n ;(node as any).style = { opacity: decayOpacity }\n } else if (node.type === \"candlestick\") {\n // Candlestick doesn't have a style object — store opacity for renderer\n ;(node as any)._decayOpacity = decayOpacity\n } else {\n const baseOpacity = node.style?.opacity ?? 1\n node.style = { ...node.style, opacity: baseOpacity * decayOpacity }\n }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n /**\n * Compute pulse intensity for a datum inserted at `insertTime`.\n * Returns 0–1 (1 = just inserted, 0 = pulse expired).\n */\n private computePulseIntensity(insertTime: number, now: number): number {\n const pulse = this.config.pulse\n if (!pulse) return 0\n const duration = pulse.duration ?? 500\n const age = now - insertTime\n if (age >= duration) return 0\n return 1 - age / duration\n }\n\n /**\n * Apply pulse glow to discrete scene nodes.\n */\n private applyPulse(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const intensity = this.computePulseIntensity(insertTime, now)\n if (intensity > 0) {\n (node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n /**\n * Returns true if there are active pulse animations that need continuous rendering.\n */\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n /**\n * Snapshot current scene node positions before rebuild.\n */\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n if (node.type === \"point\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"heatcell\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"candlestick\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.openY })\n }\n }\n }\n\n /**\n * Get a stable identity key for a scene node.\n */\n private getNodeIdentity(node: SceneNode, index: number): string | null {\n switch (node.type) {\n case \"point\":\n return `p:${node.datum === undefined ? index : this.getX(node.datum)}_${this.getY(node.datum)}`\n case \"rect\":\n return `r:${node.group || \"\"}:${node.datum?.binStart ?? node.datum?.category ?? index}`\n case \"heatcell\":\n return `h:${node.x}_${node.y}`\n case \"candlestick\":\n return `c:${this.getX(node.datum)}`\n default:\n return null\n }\n }\n\n /**\n * After scene rebuild, set up transition from old to new positions.\n */\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n // Store target positions and restore previous for animation start\n if (node.type === \"point\") {\n const target = { x: node.x, y: node.y, r: node.r }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetR = target.r\n node.x = prev.x\n node.y = prev.y\n node.r = prev.r ?? node.r\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y || prev.w !== target.w || prev.h !== target.h) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n } else if (node.type === \"heatcell\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n // Ease-out cubic (or linear)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (node._targetR !== undefined && prev.r !== undefined) {\n node.r = prev.r + (node._targetR - prev.r) * t\n }\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n }\n }\n\n if (rawT >= 1) {\n // Snap to targets and clear transition\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n if (node._targetR !== undefined) node.r = node._targetR\n node._targetX = undefined\n node._targetY = undefined\n node._targetR = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────\n\n private groupData(data: Record<string, any>[]): { key: string; data: Record<string, any>[] }[] {\n if (!this.getGroup) {\n return [{ key: \"_default\", data }]\n }\n\n const groups = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const key = this.getGroup(d)\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(d)\n }\n\n return Array.from(groups.entries()).map(([key, data]) => ({ key, data }))\n }\n\n private resolveLineStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n stroke: ls.stroke || \"#007bff\",\n strokeWidth: ls.strokeWidth || 2,\n strokeDasharray: ls.strokeDasharray,\n fill: ls.fill,\n fillOpacity: ls.fillOpacity,\n opacity: ls.opacity\n }\n }\n return { stroke: \"#007bff\", strokeWidth: 2 }\n }\n\n private resolveAreaStyle(group: string, sampleDatum?: Record<string, any>): Style {\n if (this.config.areaStyle) {\n return this.config.areaStyle(sampleDatum || {})\n }\n // Fall back to lineStyle — AreaChart passes area styling via lineStyle\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n fill: ls.fill || ls.stroke || \"#4e79a7\",\n fillOpacity: ls.fillOpacity ?? 0.7,\n stroke: ls.stroke || \"#4e79a7\",\n strokeWidth: ls.strokeWidth || 2\n }\n }\n return { fill: \"#4e79a7\", fillOpacity: 0.7, stroke: \"#4e79a7\", strokeWidth: 2 }\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n getExtents(): { x: [number, number]; y: [number, number] } | null {\n if (this.xExtent.min === Infinity) return null\n return {\n x: this.xExtent.extent,\n y: this.yExtent.extent\n }\n }\n\n clear(): void {\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getBuffer(): RingBuffer<Record<string, any>> {\n return this.buffer\n }\n\n getXAccessor(): (d: any) => number {\n return this.getX\n }\n\n getYAccessor(): (d: any) => number {\n return this.getY\n }\n\n getCategoryAccessor(): ((d: any) => string) | undefined {\n return this.getCategory\n }\n\n updateConfig(config: Partial<PipelineConfig>): void {\n Object.assign(this.config, config)\n }\n}\n","import type { SceneNode, PointSceneNode, RectSceneNode, LineSceneNode, AreaSceneNode, HeatcellSceneNode, CandlestickSceneNode, StreamScales } from \"./types\"\nimport type { RingBuffer } from \"../realtime/RingBuffer\"\n\nexport interface HitResult {\n node: SceneNode\n datum: any\n x: number\n y: number\n distance: number\n}\n\n/**\n * Find the nearest scene node to the given pixel coordinates.\n * Dispatches to type-specific hit testers for optimal performance.\n */\nexport function findNearestNode(\n scene: SceneNode[],\n px: number,\n py: number,\n maxDistance: number = 30\n): HitResult | null {\n let best: HitResult | null = null\n\n for (const node of scene) {\n let result: HitResult | null = null\n\n switch (node.type) {\n case \"point\":\n result = hitTestPoint(node, px, py)\n break\n case \"line\":\n result = hitTestLine(node, px, py)\n break\n case \"rect\":\n result = hitTestRect(node, px, py)\n break\n case \"heatcell\":\n result = hitTestHeatcell(node, px, py)\n break\n case \"area\":\n // Skip non-interactive areas (e.g. decorative bounds bands)\n if (node.interactive === false) break\n // Areas are hit-tested by finding nearest x on the top path\n result = hitTestAreaPath(node, px, py)\n break\n case \"candlestick\":\n result = hitTestCandlestick(node, px, py)\n break\n }\n\n if (result && result.distance < maxDistance) {\n if (!best || result.distance < best.distance) {\n best = result\n }\n }\n }\n\n return best\n}\n\nfunction hitTestPoint(node: PointSceneNode, px: number, py: number): HitResult | null {\n const dx = px - node.x\n const dy = py - node.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n // Hit radius includes the point's visual radius plus a tolerance\n if (dist > node.r + 5) return null\n return { node, datum: node.datum, x: node.x, y: node.y, distance: dist }\n}\n\nfunction hitTestLine(node: LineSceneNode, px: number, py: number): HitResult | null {\n if (node.path.length === 0) return null\n\n // Binary search for nearest x in the path\n const idx = binarySearchPath(node.path, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.path[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // For line data, the datum is the array; return the index as well\n const datum = Array.isArray(node.datum) && node.datum[idx]\n ? node.datum[idx]\n : node.datum\n\n return { node, datum, x: nx, y: ny, distance: dist }\n}\n\nfunction hitTestRect(node: RectSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n // Center of rect\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestHeatcell(node: HeatcellSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestCandlestick(node: CandlestickSceneNode, px: number, py: number): HitResult | null {\n const halfBody = node.bodyWidth / 2\n // Hit the body area (wider target)\n const bodyTop = Math.min(node.openY, node.closeY)\n const bodyBottom = Math.max(node.openY, node.closeY)\n const bodyHeight = Math.max(bodyBottom - bodyTop, 1)\n\n if (px >= node.x - halfBody - 3 && px <= node.x + halfBody + 3 &&\n py >= node.highY - 3 && py <= node.lowY + 3) {\n // Hover target: center of the body\n const cy = bodyTop + bodyHeight / 2\n const dx = px - node.x\n const dy = py - cy\n return { node, datum: node.datum, x: node.x, y: cy, distance: Math.sqrt(dx * dx + dy * dy) }\n }\n return null\n}\n\nfunction hitTestAreaPath(node: { type: \"area\"; topPath: [number, number][]; datum: any }, px: number, py: number): HitResult | null {\n if (node.topPath.length === 0) return null\n const idx = binarySearchPath(node.topPath, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.topPath[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n return { node: node as SceneNode, datum: node.datum, x: nx, y: ny, distance: dist }\n}\n\n/**\n * Binary search for the nearest point by x-coordinate in a sorted path.\n */\nfunction binarySearchPath(path: [number, number][], targetX: number): number {\n if (path.length === 0) return -1\n\n let lo = 0\n let hi = path.length - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (path[mid][0] < targetX) lo = mid + 1\n else hi = mid\n }\n\n // Check if lo-1 is closer\n if (lo > 0) {\n const dLo = Math.abs(path[lo][0] - targetX)\n const dPrev = Math.abs(path[lo - 1][0] - targetX)\n if (dPrev <= dLo) return lo - 1\n }\n\n return lo\n}\n\n/**\n * Binary search for nearest point by time value in a RingBuffer.\n */\nexport function findNearestIndex(\n buf: RingBuffer<Record<string, any>>,\n targetTime: number,\n getTime: (d: Record<string, any>) => number\n): number {\n if (buf.size === 0) return -1\n\n let lo = 0\n let hi = buf.size - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n const t = getTime(buf.get(mid)!)\n if (t < targetTime) lo = mid + 1\n else hi = mid\n }\n\n if (lo > 0) {\n const tLo = getTime(buf.get(lo)!)\n const tPrev = getTime(buf.get(lo - 1)!)\n if (Math.abs(tPrev - targetTime) <= Math.abs(tLo - targetTime)) {\n return lo - 1\n }\n }\n\n return lo\n}\n","import * as React from \"react\"\n\nimport { LegendGroup, ItemType, LegendProps } from \"./types/legendTypes\"\n\nconst typeHash = {\n fill: (style: Object) => <rect style={style} width={20} height={20} />,\n line: (style: Object) => <line style={style} x1={0} y1={0} x2={20} y2={20} />\n}\n\nfunction renderType(\n item: Object,\n i: number,\n type: ItemType,\n styleFn: Function\n) {\n let renderedType\n if (typeof type === \"function\") {\n renderedType = type(item)\n } else {\n const Type = typeHash[type]\n const style = styleFn(item, i)\n renderedType = Type(style)\n }\n return renderedType\n}\n\nconst renderLegendGroupVertical = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(0,${itemOffset})`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={30}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 25\n })\n return renderedItems\n}\n\nconst renderLegendGroupHorizontal = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(${itemOffset},0)`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={25}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 35\n itemOffset += item.label.length * 8\n })\n return { items: renderedItems, offset: itemOffset }\n}\n\nconst renderVerticalGroup = ({\n legendGroups,\n width,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n width: number\n customClickBehavior?: Function\n}) => {\n let offset = 30\n\n const renderedGroups = []\n\n legendGroups.forEach((l, i) => {\n offset += 5\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={0}\n y1={offset}\n x2={width}\n y2={offset}\n />\n )\n offset += 10\n if (l.label) {\n offset += 20\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n y={offset}\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 10\n }\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(0,${offset})`}\n >\n {renderLegendGroupVertical(l, customClickBehavior)}\n </g>\n )\n offset += l.items.length * 25 + 10\n })\n\n return renderedGroups\n}\n\nconst renderHorizontalGroup = ({\n legendGroups,\n title,\n height,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n title: string | boolean\n height: number\n customClickBehavior?: Function\n}) => {\n let offset = 0\n\n const renderedGroups = []\n\n const verticalOffset = title === false ? 10 : 40\n\n legendGroups.forEach((l, i) => {\n if (l.label) {\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n transform={`translate(${offset},${verticalOffset}) rotate(90)`}\n textAnchor=\"start\"\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 20\n }\n\n const renderedItems = renderLegendGroupHorizontal(l, customClickBehavior)\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(${offset},${verticalOffset})`}\n >\n {renderedItems.items}\n </g>\n )\n offset += renderedItems.offset + 5\n\n if (legendGroups[i + 1]) {\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={offset}\n y1={verticalOffset - 10}\n x2={offset}\n y2={height + verticalOffset + 10}\n />\n )\n }\n offset += 15\n })\n\n return (\n <g>\n {title !== false && (\n <line\n x1={0}\n x2={offset + 10}\n y1={verticalOffset - 10}\n y2={verticalOffset - 10}\n stroke=\"gray\"\n className=\"title-neatline\"\n />\n )}\n {renderedGroups}\n </g>\n )\n}\n\nexport default function Legend(props: LegendProps) {\n const {\n legendGroups,\n customClickBehavior,\n title = \"Legend\",\n width = 100,\n height = 20,\n orientation = \"vertical\"\n } = props\n const renderedGroups =\n orientation === \"vertical\"\n ? renderVerticalGroup({\n legendGroups,\n width,\n customClickBehavior\n })\n : renderHorizontalGroup({\n legendGroups,\n title,\n height,\n customClickBehavior\n })\n\n return (\n <g>\n {title !== undefined && (\n <text\n className=\"legend-title\"\n y={20}\n x={orientation === \"horizontal\" ? 0 : width / 2}\n textAnchor={orientation === \"horizontal\" ? \"start\" : \"middle\"}\n >\n {title}\n </text>\n )}\n {renderedGroups}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport { bin as d3Bin } from \"d3-array\"\nimport type { ScaleLinear } from \"d3-scale\"\nimport type { MarginalConfig, MarginalType } from \"./types\"\n\nexport type MarginalOrient = \"top\" | \"bottom\" | \"left\" | \"right\"\n\nexport interface MarginalGraphicsProps {\n orient: MarginalOrient\n config: MarginalConfig\n /** Raw numeric values along the relevant axis */\n values: number[]\n /** The chart's scale for the axis this marginal summarizes */\n scale: ScaleLinear<number, number>\n /** Available pixel space in the margin (perpendicular to axis) */\n size: number\n /** Chart width (top/bottom) or height (left/right) */\n length: number\n}\n\n/** Resolve a string shorthand or full config into a MarginalConfig */\nexport function normalizeMarginalConfig(\n input: MarginalConfig | MarginalType\n): MarginalConfig {\n if (typeof input === \"string\") {\n return { type: input }\n }\n return input\n}\n\nconst DEFAULTS = {\n bins: 20,\n fill: \"#4e79a7\",\n fillOpacity: 0.5,\n stroke: \"none\",\n strokeWidth: 1\n}\n\nfunction resolveConfig(config: MarginalConfig) {\n return {\n type: config.type,\n bins: config.bins ?? DEFAULTS.bins,\n fill: config.fill ?? DEFAULTS.fill,\n fillOpacity: config.fillOpacity ?? DEFAULTS.fillOpacity,\n stroke: config.stroke ?? DEFAULTS.stroke,\n strokeWidth: config.strokeWidth ?? DEFAULTS.strokeWidth\n }\n}\n\n/** Compute quartiles and whiskers for boxplot */\nfunction boxplotStats(values: number[]) {\n const sorted = [...values].sort((a, b) => a - b)\n const n = sorted.length\n if (n === 0) return null\n\n const q1 = sorted[Math.floor(n * 0.25)]\n const median = sorted[Math.floor(n * 0.5)]\n const q3 = sorted[Math.floor(n * 0.75)]\n const iqr = q3 - q1\n const whiskerLow = Math.max(sorted[0], q1 - 1.5 * iqr)\n const whiskerHigh = Math.min(sorted[n - 1], q3 + 1.5 * iqr)\n\n return { q1, median, q3, whiskerLow, whiskerHigh }\n}\n\nexport function MarginalGraphics({\n orient,\n config: rawConfig,\n values,\n scale,\n size,\n length\n}: MarginalGraphicsProps) {\n const config = resolveConfig(rawConfig)\n const padding = 4\n\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n\n const content = useMemo(() => {\n if (values.length === 0) return null\n\n const domain = scale.domain() as [number, number]\n const availableSize = size - padding * 2\n\n if (config.type === \"boxplot\") {\n const stats = boxplotStats(values)\n if (!stats) return null\n\n const { q1, median, q3, whiskerLow, whiskerHigh } = stats\n const boxThickness = Math.min(availableSize * 0.5, 20)\n const offset = (availableSize - boxThickness) / 2 + padding\n\n if (isHorizontal) {\n const x1 = scale(q1)\n const x2 = scale(q3)\n const xMed = scale(median)\n const xWLow = scale(whiskerLow)\n const xWHigh = scale(whiskerHigh)\n const growDir = orient === \"top\" ? -1 : 1\n const baseY = orient === \"top\" ? 0 : 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n {/* Whisker line */}\n <line\n x1={xWLow} y1={baseY + growDir * (offset + boxThickness / 2)}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness / 2)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Whisker caps */}\n <line\n x1={xWLow} y1={baseY + growDir * offset}\n x2={xWLow} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={xWHigh} y1={baseY + growDir * offset}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Box */}\n <rect\n x={Math.min(x1, x2)}\n y={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n width={Math.abs(x2 - x1)}\n height={boxThickness}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n {/* Median line */}\n <line\n x1={xMed} y1={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n x2={xMed} y2={orient === \"top\" ? baseY - offset : baseY + offset + boxThickness}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n } else {\n // Vertical: left/right\n const y1 = scale(q1)\n const y2 = scale(q3)\n const yMed = scale(median)\n const yWLow = scale(whiskerLow)\n const yWHigh = scale(whiskerHigh)\n const growDir = orient === \"left\" ? -1 : 1\n const baseX = 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n <line\n x1={baseX + growDir * (offset + boxThickness / 2)}\n y1={yWLow} x2={baseX + growDir * (offset + boxThickness / 2)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWLow}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWLow}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWHigh}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <rect\n x={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y={Math.min(y1, y2)}\n width={boxThickness}\n height={Math.abs(y2 - y1)}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n <line\n x1={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y1={yMed}\n x2={orient === \"left\" ? baseX - offset : baseX + offset + boxThickness}\n y2={yMed}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n }\n }\n\n // Binned types: histogram, violin, ridgeline\n const binner = d3Bin()\n .domain(domain)\n .thresholds(config.bins)\n\n const bins = binner(values)\n if (bins.length === 0) return null\n\n const maxCount = Math.max(...bins.map(b => b.length))\n if (maxCount === 0) return null\n\n if (config.type === \"histogram\") {\n return (\n <g data-testid={`marginal-histogram-${orient}`}>\n {bins.map((bin, i) => {\n if (bin.x0 == null || bin.x1 == null) return null\n const count = bin.length\n const barSize = (count / maxCount) * availableSize\n\n if (isHorizontal) {\n const x = scale(bin.x0)\n const w = scale(bin.x1) - scale(bin.x0)\n const y = orient === \"top\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={y} width={Math.max(w, 0.5)} height={barSize}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n } else {\n const y = scale(bin.x0)\n const h = scale(bin.x1) - scale(bin.x0)\n const x = orient === \"left\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={Math.min(y, y + h)} width={barSize} height={Math.abs(h)}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n }\n })}\n </g>\n )\n }\n\n if (config.type === \"violin\") {\n // Symmetric density path around the midline\n const midline = availableSize / 2 + padding\n\n const points: string[] = []\n // Forward pass (one side)\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline - w) : midline - w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline - w) : midline - w\n points.push(`${x},${pos}`)\n }\n }\n // Reverse pass (other side)\n for (let i = bins.length - 1; i >= 0; i--) {\n const bin = bins[i]\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline + w) : midline + w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline + w) : midline + w\n points.push(`${x},${pos}`)\n }\n }\n\n return (\n <g data-testid={`marginal-violin-${orient}`}>\n <polygon\n points={points.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n if (config.type === \"ridgeline\") {\n // One-sided area fill from baseline into the margin\n const pathParts: string[] = []\n\n if (isHorizontal) {\n const baseY = orient === \"top\" ? 0 : 0\n // Start at baseline\n const startX = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${startX},${baseY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const h = (bin.length / maxCount) * availableSize\n const x = scale(mid)\n const y = orient === \"top\" ? -h - padding : h + padding\n pathParts.push(`L${x},${y}`)\n }\n\n // Close back to baseline\n const endX = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${endX},${baseY}`)\n pathParts.push(\"Z\")\n } else {\n const baseX = 0\n const startY = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${baseX},${startY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * availableSize\n const y = scale(mid)\n const x = orient === \"left\" ? -w - padding : w + padding\n pathParts.push(`L${x},${y}`)\n }\n\n const endY = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${baseX},${endY}`)\n pathParts.push(\"Z\")\n }\n\n return (\n <g data-testid={`marginal-ridgeline-${orient}`}>\n <path\n d={pathParts.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n return null\n }, [values, scale, config, size, length, orient, isHorizontal, padding])\n\n if (!content) return null\n\n // Position the <g> at the margin edge\n let transform: string\n switch (orient) {\n case \"top\":\n transform = `translate(0, 0)` // top edge of chart area\n break\n case \"bottom\":\n transform = `translate(0, ${length})` // wait — length is chart width for top/bottom\n break\n case \"left\":\n transform = `translate(0, 0)` // left edge of chart area\n break\n case \"right\":\n transform = `translate(${length}, 0)` // length is chart width for left/right? No.\n break\n }\n\n // For top/bottom: length = chart width. The g is already inside the margin-translated group.\n // For left/right: length = chart height.\n // orient=bottom means we're at y=chartHeight (bottom of chart area)\n // orient=right means we're at x=chartWidth (right of chart area)\n // Actually, let the parent handle positioning. This component just draws relative to origin.\n\n return (\n <g className={`marginal-${orient}`} data-testid={`marginal-${orient}`}>\n {content}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport type { StreamScales, AnnotationContext, MarginalGraphicsConfig, MarginalConfig, MarginalType } from \"./types\"\nimport type { ReactNode } from \"react\"\nimport Legend from \"../Legend\"\nimport type { LegendGroup } from \"../types/legendTypes\"\nimport { MarginalGraphics, normalizeMarginalConfig } from \"./MarginalGraphics\"\n\ninterface SVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: StreamScales | null\n\n // Axes\n showAxes?: boolean\n xLabel?: string\n yLabel?: string\n xFormat?: (d: any) => string\n yFormat?: (d: any) => string\n\n // Grid\n showGrid?: boolean\n\n // Title\n title?: string | ReactNode\n\n // Legend\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n // Foreground graphics (rendered on top in SVG overlay)\n foregroundGraphics?: ReactNode\n\n // Marginal graphics\n marginalGraphics?: MarginalGraphicsConfig\n xValues?: number[]\n yValues?: number[]\n\n // Annotations\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n annotationFrame?: number\n\n children?: ReactNode\n}\n\nfunction isLegendConfig(value: unknown): value is { legendGroups: LegendGroup[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !React.isValidElement(value) &&\n \"legendGroups\" in value\n )\n}\n\nfunction defaultTickFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\nexport function SVGOverlay(props: SVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n scales,\n showAxes,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n showGrid,\n title,\n legend,\n foregroundGraphics,\n marginalGraphics,\n xValues,\n yValues,\n annotations,\n svgAnnotationRules,\n annotationFrame,\n children\n } = props\n\n // Generate axis ticks\n const xTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.x.ticks(5).map(v => ({\n value: v,\n pixel: scales.x(v),\n label: (xFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, xFormat])\n\n const yTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.y.ticks(5).map(v => ({\n value: v,\n pixel: scales.y(v),\n label: (yFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, yFormat])\n\n // Render annotations\n const renderedAnnotations = useMemo(() => {\n if (!annotations || annotations.length === 0 || !svgAnnotationRules) return null\n return annotations\n .map((annotation, i) =>\n svgAnnotationRules(annotation, i, {\n scales: scales ? { time: scales.x, value: scales.y } : null,\n timeAxis: \"x\",\n width,\n height\n })\n )\n .filter(Boolean)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [annotations, svgAnnotationRules, width, height, annotationFrame])\n\n const hasContent = showAxes || title || legend || foregroundGraphics || marginalGraphics || (renderedAnnotations && renderedAnnotations.length > 0) || showGrid || children\n\n if (!hasContent) return null\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Grid lines */}\n {showGrid && scales && (\n <g className=\"stream-grid\">\n {xTicks.map((tick, i) => (\n <line\n key={`xgrid-${i}`}\n x1={tick.pixel}\n y1={0}\n x2={tick.pixel}\n y2={height}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n {yTicks.map((tick, i) => (\n <line\n key={`ygrid-${i}`}\n x1={0}\n y1={tick.pixel}\n x2={width}\n y2={tick.pixel}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n </g>\n )}\n\n {/* Axes */}\n {showAxes && scales && (\n <g className=\"stream-axes\">\n {/* X axis */}\n <line x1={0} y1={height} x2={width} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {xTicks.map((tick, i) => (\n <g key={`xtick-${i}`} transform={`translate(${tick.pixel},${height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n y={18}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {xLabel && (\n <text\n x={width / 2}\n y={height + 40}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {xLabel}\n </text>\n )}\n\n {/* Y axis */}\n <line x1={0} y1={0} x2={0} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {yTicks.map((tick, i) => (\n <g key={`ytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n x={-8}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {yLabel && (\n <text\n x={-margin.left + 15}\n y={height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-margin.left + 15}, ${height / 2})`}\n style={{ userSelect: \"none\" }}\n >\n {yLabel}\n </text>\n )}\n </g>\n )}\n\n {/* Annotations */}\n {renderedAnnotations}\n\n {/* Marginal graphics */}\n {marginalGraphics && scales && xValues && yValues && (\n <>\n {marginalGraphics.top && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"top\"\n config={normalizeMarginalConfig(marginalGraphics.top)}\n values={xValues}\n scale={scales.x}\n size={margin.top}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.bottom && (\n <g transform={`translate(0, ${height})`}>\n <MarginalGraphics\n orient=\"bottom\"\n config={normalizeMarginalConfig(marginalGraphics.bottom)}\n values={xValues}\n scale={scales.x}\n size={margin.bottom}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.left && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"left\"\n config={normalizeMarginalConfig(marginalGraphics.left)}\n values={yValues}\n scale={scales.y}\n size={margin.left}\n length={height}\n />\n </g>\n )}\n {marginalGraphics.right && (\n <g transform={`translate(${width}, 0)`}>\n <MarginalGraphics\n orient=\"right\"\n config={normalizeMarginalConfig(marginalGraphics.right)}\n values={yValues}\n scale={scales.y}\n size={margin.right}\n length={height}\n />\n </g>\n )}\n </>\n )}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n\n {children}\n </g>\n\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={20}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {typeof title === \"string\" ? title : null}\n </text>\n )}\n\n {/* Legend */}\n {legend && (\n <g transform={`translate(${totalWidth - margin.right + 10}, ${margin.top})`}>\n {isLegendConfig(legend)\n ? <Legend legendGroups={legend.legendGroups} title=\"\" width={100} />\n : (legend as ReactNode)}\n </g>\n )}\n </svg>\n )\n}\n","import type { SceneNode, LineSceneNode, LineColorThreshold } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nfunction resolveColor(\n value: number,\n thresholds: LineColorThreshold[],\n baseColor: string\n): string {\n let color = baseColor\n for (const t of thresholds) {\n if (t.thresholdType === \"lesser\") {\n if (value < t.value) color = t.color\n } else {\n if (value > t.value) color = t.color\n }\n }\n return color\n}\n\n/**\n * Canvas line renderer.\n * Renders LineSceneNode paths using moveTo/lineTo.\n * Supports threshold-based segment coloring when colorThresholds + rawValues\n * are present on the node.\n */\nexport const lineCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const lineNodes = nodes.filter((n): n is LineSceneNode => n.type === \"line\")\n\n for (const node of lineNodes) {\n if (node.path.length < 2) continue\n\n const baseColor = node.style.stroke || \"#007bff\"\n const lineWidth = node.style.strokeWidth || 2\n const thresholds = node.colorThresholds\n const rawValues = node.rawValues\n\n if (node.style.strokeDasharray) {\n ctx.setLineDash(node.style.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([])\n }\n\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n ctx.lineWidth = lineWidth\n\n // Fast path: no color thresholds — single-path draw\n if (!thresholds || thresholds.length === 0 || !rawValues || rawValues.length !== node.path.length) {\n ctx.beginPath()\n ctx.strokeStyle = baseColor\n\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n ctx.stroke()\n } else {\n // Threshold mode: segment-based drawing with interpolated crossings\n let prevX: number | null = null\n let prevY: number | null = null\n let prevValue: number | null = null\n let prevColor: string | null = null\n let pathStarted = false\n\n function startSegment(color: string, x: number, y: number) {\n ctx.beginPath()\n ctx.strokeStyle = color\n ctx.moveTo(x, y)\n pathStarted = true\n }\n\n function endSegment() {\n if (pathStarted) {\n ctx.stroke()\n pathStarted = false\n }\n }\n\n for (let i = 0; i < node.path.length; i++) {\n const [x, y] = node.path[i]\n const v = rawValues[i]\n const currColor = resolveColor(v, thresholds, baseColor)\n\n if (prevX === null || prevColor === null || prevValue === null) {\n startSegment(currColor, x, y)\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n continue\n }\n\n if (currColor === prevColor) {\n ctx.lineTo(x, y)\n } else {\n // Find threshold crossings between prevValue and v\n const crossings: Array<{ t: number }> = []\n\n for (const threshold of thresholds) {\n const tv = threshold.value\n if ((prevValue <= tv && v >= tv) || (prevValue >= tv && v <= tv)) {\n if (prevValue !== tv && v !== tv) {\n const interpT = (tv - prevValue) / (v - prevValue)\n crossings.push({ t: interpT })\n }\n }\n }\n\n crossings.sort((a, b) => a.t - b.t)\n\n for (const crossing of crossings) {\n const midX = prevX + (x - prevX) * crossing.t\n const midY = prevY! + (y - prevY!) * crossing.t\n\n const nudgedValue = prevValue + (v - prevValue) * Math.min(crossing.t + 0.0001, 1)\n const nextColor = resolveColor(nudgedValue, thresholds, baseColor)\n\n ctx.lineTo(midX, midY)\n endSegment()\n startSegment(nextColor, midX, midY)\n }\n\n ctx.lineTo(x, y)\n }\n\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n }\n\n endSegment()\n }\n\n // Fill area under line if fillOpacity is set\n if (node.style.fill && node.style.fillOpacity && node.style.fillOpacity > 0) {\n ctx.beginPath()\n ctx.globalAlpha = node.style.fillOpacity\n ctx.fillStyle = node.style.fill\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n const lastX = node.path[node.path.length - 1][0]\n const firstX = node.path[0][0]\n ctx.lineTo(lastX, layout.height)\n ctx.lineTo(firstX, layout.height)\n ctx.closePath()\n ctx.fill()\n }\n\n ctx.globalAlpha = 1\n ctx.setLineDash([])\n }\n}\n","import type { SceneNode, AreaSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas area renderer.\n * Renders AreaSceneNode as filled regions between topPath and bottomPath.\n * Supports both overlapping areas and stacked areas.\n */\nexport const areaCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const areaNodes = nodes.filter((n): n is AreaSceneNode => n.type === \"area\")\n\n for (const node of areaNodes) {\n if (node.topPath.length < 2) continue\n\n ctx.beginPath()\n\n // Draw top path forward\n const [startX, startY] = node.topPath[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n\n // Draw bottom path backward to close the area\n for (let i = node.bottomPath.length - 1; i >= 0; i--) {\n ctx.lineTo(node.bottomPath[i][0], node.bottomPath[i][1])\n }\n\n ctx.closePath()\n\n // Fill\n const fillOpacity = node.style.fillOpacity ?? 0.7\n ctx.globalAlpha = fillOpacity\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n // Stroke on top\n if (node.style.stroke && node.style.stroke !== \"none\") {\n ctx.globalAlpha = 1\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 2\n ctx.setLineDash([])\n\n // Only stroke the top path (not the baseline)\n ctx.beginPath()\n ctx.moveTo(node.topPath[0][0], node.topPath[0][1])\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, PointSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas point renderer.\n * Renders PointSceneNode as circles. Used for Scatterplot, BubbleChart, and SwarmChart.\n * Supports pulse glow effect via _pulseIntensity/_pulseColor fields.\n */\nexport const pointCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const pointNodes = nodes.filter((n): n is PointSceneNode => n.type === \"point\")\n\n for (const node of pointNodes) {\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r, 0, Math.PI * 2)\n\n const alpha = node.style.opacity ?? node.style.fillOpacity\n if (alpha != null) {\n ctx.globalAlpha = alpha\n }\n\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.stroke()\n }\n\n // Pulse glow ring\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n const glowRadius = 4\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r + glowRadius * node._pulseIntensity, 0, Math.PI * 2)\n ctx.strokeStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.lineWidth = 2 * node._pulseIntensity\n ctx.globalAlpha = node._pulseIntensity * 0.5\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, RectSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas bar renderer.\n * Renders RectSceneNode as filled rectangles. Supports icon/isotype mode\n * where an image is stamped repeatedly to fill the bar instead of a solid fill.\n */\nexport const barCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const rectNodes = nodes.filter((n): n is RectSceneNode => n.type === \"rect\")\n\n for (const node of rectNodes) {\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n if (node.style.icon) {\n // Icon/isotype mode: stamp the image to fill the bar\n drawIconBar(ctx, node)\n } else {\n // Standard solid fill\n ctx.fillStyle = node.style.fill || \"#007bff\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n }\n }\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n\nfunction drawIconBar(ctx: CanvasRenderingContext2D, node: RectSceneNode): void {\n const icon = node.style.icon!\n const padding = node.style.iconPadding || 2\n\n // Determine icon size: fit within the bar width\n const iconSize = Math.min(node.w, node.w) - padding\n if (iconSize <= 0) return\n\n // Determine if bar is primarily vertical or horizontal\n const isVerticalBar = node.h > node.w\n\n ctx.save()\n ctx.beginPath()\n ctx.rect(node.x, node.y, node.w, node.h)\n ctx.clip()\n\n if (isVerticalBar) {\n // Stamp icons from bottom to top\n const step = iconSize + padding\n const startY = node.y + node.h - iconSize\n const centerX = node.x + (node.w - iconSize) / 2\n\n for (let y = startY; y >= node.y - iconSize; y -= step) {\n ctx.drawImage(icon, centerX, y, iconSize, iconSize)\n }\n } else {\n // Stamp icons from left to right\n const step = iconSize + padding\n const centerY = node.y + (node.h - iconSize) / 2\n\n for (let x = node.x; x < node.x + node.w; x += step) {\n ctx.drawImage(icon, x, centerY, iconSize, iconSize)\n }\n }\n\n ctx.restore()\n}\n","import type { StreamRendererFn } from \"./types\"\nimport { pointCanvasRenderer } from \"./pointCanvasRenderer\"\n\n/**\n * Canvas swarm renderer.\n * Identical to point renderer — swarm data points are pre-computed as PointSceneNodes.\n * Separated for semantic clarity and potential future swarm-specific logic.\n */\nexport const swarmCanvasRenderer: StreamRendererFn = pointCanvasRenderer\n","import type { StreamRendererFn } from \"./types\"\nimport { barCanvasRenderer } from \"./barCanvasRenderer\"\n\n/**\n * Canvas waterfall renderer.\n * Waterfall bars are pre-computed as RectSceneNodes by PipelineStore,\n * so the rendering is identical to the bar renderer.\n * Connector lines between bars are handled separately if needed.\n */\nexport const waterfallCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n // Render the bar segments\n barCanvasRenderer(ctx, nodes, scales, layout)\n\n // Draw connector lines between consecutive waterfall bars\n const rects = nodes.filter(n => n.type === \"rect\")\n if (rects.length < 2) return\n\n ctx.save()\n ctx.strokeStyle = \"#999\"\n ctx.lineWidth = 1\n ctx.setLineDash([])\n\n for (let i = 0; i < rects.length - 1; i++) {\n const curr = rects[i] as any\n const next = rects[i + 1] as any\n if (!curr.datum?.cumEnd || !next.datum?.baseline) continue\n\n // Connect from end of current bar to start of next bar at cumEnd level\n const yConn = scales.y(curr.datum.cumEnd)\n const x1 = curr.x + curr.w\n const x2 = next.x\n\n ctx.beginPath()\n ctx.moveTo(x1, yConn)\n ctx.lineTo(x2, yConn)\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","import type { SceneNode, HeatcellSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas heatmap renderer.\n * Renders HeatcellSceneNode as filled rectangles with color encoding.\n */\nexport const heatmapCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const heatNodes = nodes.filter((n): n is HeatcellSceneNode => n.type === \"heatcell\")\n\n for (const node of heatNodes) {\n // Apply decay opacity if present (stored as style.opacity by applyDecay)\n const nodeStyle = (node as any).style\n if (nodeStyle?.opacity != null) {\n ctx.globalAlpha = nodeStyle.opacity\n }\n\n ctx.fillStyle = node.fill\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n // Cell border\n ctx.strokeStyle = \"#fff\"\n ctx.lineWidth = 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, StreamScales, StreamLayout, CandlestickSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nexport const candlestickCanvasRenderer: StreamRendererFn = (\n ctx: CanvasRenderingContext2D,\n nodes: SceneNode[],\n _scales: StreamScales,\n _layout: StreamLayout\n) => {\n for (const node of nodes) {\n if (node.type !== \"candlestick\") continue\n const n = node as CandlestickSceneNode\n\n // Draw wick (high-low line)\n ctx.beginPath()\n ctx.moveTo(n.x, n.highY)\n ctx.lineTo(n.x, n.lowY)\n ctx.strokeStyle = n.wickColor\n ctx.lineWidth = n.wickWidth\n ctx.stroke()\n\n // Draw body (open-close rect)\n const bodyTop = Math.min(n.openY, n.closeY)\n const bodyHeight = Math.abs(n.openY - n.closeY)\n const bodyColor = n.isUp ? n.upColor : n.downColor\n\n ctx.fillStyle = bodyColor\n ctx.fillRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n\n // Body border\n ctx.strokeStyle = bodyColor\n ctx.lineWidth = 1\n ctx.strokeRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n }\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamXYFrameProps,\n StreamXYFrameHandle,\n StreamChartType,\n HoverData,\n HoverAnnotationConfig,\n SceneNode,\n StreamScales,\n MarginalGraphicsConfig\n} from \"./types\"\nimport { brush as d3Brush, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\"\nimport { select as d3Select } from \"d3-selection\"\nimport { DataSourceAdapter } from \"./DataSourceAdapter\"\nimport { PipelineStore, type PipelineConfig } from \"./PipelineStore\"\nimport { findNearestNode, type HitResult } from \"./CanvasHitTester\"\nimport { SVGOverlay } from \"./SVGOverlay\"\n\n// Canvas renderers\nimport { lineCanvasRenderer } from \"./renderers/lineCanvasRenderer\"\nimport { areaCanvasRenderer } from \"./renderers/areaCanvasRenderer\"\nimport { pointCanvasRenderer } from \"./renderers/pointCanvasRenderer\"\nimport { barCanvasRenderer } from \"./renderers/barCanvasRenderer\"\nimport { swarmCanvasRenderer } from \"./renderers/swarmCanvasRenderer\"\nimport { waterfallCanvasRenderer } from \"./renderers/waterfallCanvasRenderer\"\nimport { heatmapCanvasRenderer } from \"./renderers/heatmapCanvasRenderer\"\nimport { candlestickCanvasRenderer } from \"./renderers/candlestickCanvasRenderer\"\nimport type { StreamRendererFn } from \"./renderers/types\"\n\n// ── Renderer dispatch ──────────────────────────────────────────────────\n\nconst RENDERERS: Record<StreamChartType, StreamRendererFn[]> = {\n line: [areaCanvasRenderer, lineCanvasRenderer],\n area: [areaCanvasRenderer],\n stackedarea: [areaCanvasRenderer],\n scatter: [pointCanvasRenderer],\n bubble: [pointCanvasRenderer],\n heatmap: [heatmapCanvasRenderer],\n bar: [barCanvasRenderer],\n swarm: [swarmCanvasRenderer],\n waterfall: [waterfallCanvasRenderer],\n candlestick: [candlestickCanvasRenderer]\n}\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 20, right: 20, bottom: 30, left: 40 }\n\n// ── Theme ─────────────────────────────────────────\n\ninterface ThemeColors {\n axisStroke: string\n tickText: string\n crosshair: string\n hoverFill: string\n hoverStroke: string\n pointRing: string\n}\n\nconst LIGHT_THEME: ThemeColors = {\n axisStroke: \"#ccc\",\n tickText: \"#666\",\n crosshair: \"rgba(0, 0, 0, 0.25)\",\n hoverFill: \"rgba(255, 255, 255, 0.3)\",\n hoverStroke: \"rgba(0, 0, 0, 0.4)\",\n pointRing: \"white\"\n}\n\nfunction resolveThemeColors(el: HTMLElement | null): ThemeColors {\n if (!el) return LIGHT_THEME\n const style = getComputedStyle(el)\n const textSecondary = style.getPropertyValue(\"--text-secondary\").trim()\n const textPrimary = style.getPropertyValue(\"--text-primary\").trim()\n const surface3 = style.getPropertyValue(\"--surface-3\").trim()\n const surface0 = style.getPropertyValue(\"--surface-0\").trim()\n\n if (!textSecondary && !textPrimary) return LIGHT_THEME\n\n return {\n axisStroke: surface3 || LIGHT_THEME.axisStroke,\n tickText: textSecondary || LIGHT_THEME.tickText,\n crosshair: textSecondary ? `${textSecondary}66` : LIGHT_THEME.crosshair,\n hoverFill: surface0 ? `${surface0}4D` : LIGHT_THEME.hoverFill,\n hoverStroke: textSecondary ? `${textSecondary}99` : LIGHT_THEME.hoverStroke,\n pointRing: surface0 || LIGHT_THEME.pointRing\n }\n}\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: 4,\n fontSize: 12,\n lineHeight: 1.5,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultTooltip({ hover }: { hover: HoverData }) {\n const fmtValue = (v: number) =>\n Number.isInteger(v) ? String(v) : v.toFixed(2)\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {fmtValue(hover.value)}\n </div>\n <div style={{ opacity: 0.7, fontSize: 11 }}>\n {fmtValue(hover.time)}\n </div>\n </div>\n )\n}\n\n// ── Crosshair drawing ──────────────────────────────────────────────────\n\nfunction drawCrosshair(\n ctx: CanvasRenderingContext2D,\n hover: HoverData,\n width: number,\n height: number,\n config: HoverAnnotationConfig,\n pointColor: string,\n theme: ThemeColors\n) {\n const showCrosshair = config.crosshair !== false\n if (!showCrosshair) return\n\n ctx.save()\n const crossStyle = typeof config.crosshair === \"object\" ? config.crosshair : {}\n ctx.strokeStyle = crossStyle.stroke || theme.crosshair\n ctx.lineWidth = crossStyle.strokeWidth || 1\n if (crossStyle.strokeDasharray) {\n ctx.setLineDash(crossStyle.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([4, 4])\n }\n\n ctx.beginPath()\n ctx.moveTo(hover.x, 0)\n ctx.lineTo(hover.x, height)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.moveTo(0, hover.y)\n ctx.lineTo(width, hover.y)\n ctx.stroke()\n\n ctx.restore()\n\n // Point indicator\n ctx.beginPath()\n ctx.arc(hover.x, hover.y, 4, 0, Math.PI * 2)\n ctx.fillStyle = pointColor\n ctx.fill()\n ctx.strokeStyle = theme.pointRing\n ctx.lineWidth = 2\n ctx.stroke()\n}\n\n// ── Brush Overlay ─────────────────────────────────────────────────────\n\ninterface BrushOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n dimension: \"x\" | \"y\" | \"xy\"\n scales: StreamScales | null\n onBrush: (extent: { x: [number, number]; y: [number, number] } | null) => void\n}\n\nfunction BrushOverlay({\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n dimension,\n scales,\n onBrush\n}: BrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const brushRef = useRef<any>(null)\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const g = d3Select(svgRef.current).select<SVGGElement>(\".brush-g\")\n\n const brushFn =\n dimension === \"x\"\n ? d3BrushX()\n : dimension === \"y\"\n ? d3BrushY()\n : d3Brush()\n\n brushFn.extent([[0, 0], [width, height]])\n\n brushFn.on(\"brush end\", (event: any) => {\n if (!scales) return\n\n if (!event.selection) {\n onBrush(null)\n return\n }\n\n let xRange: [number, number]\n let yRange: [number, number]\n\n if (dimension === \"x\") {\n const [px0, px1] = event.selection as [number, number]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(height), scales.y.invert(0)]\n } else if (dimension === \"y\") {\n const [py0, py1] = event.selection as [number, number]\n xRange = [scales.x.invert(0), scales.x.invert(width)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n } else {\n const [[px0, py0], [px1, py1]] = event.selection as [[number, number], [number, number]]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n }\n\n onBrush({ x: xRange, y: yRange })\n })\n\n g.call(brushFn as any)\n brushRef.current = brushFn\n\n // Style the brush selection rectangle\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.15)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brushFn.on(\"brush end\", null)\n brushRef.current = null\n }\n }, [width, height, dimension, scales, onBrush])\n\n return (\n <svg\n ref={svgRef}\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n // Allow pointer events only on the brush overlay itself\n pointerEvents: \"all\"\n }}\n >\n <g className=\"brush-g\" transform={`translate(${margin.left},${margin.top})`} />\n </svg>\n )\n}\n\n// ── StreamXYFrame ──────────────────────────────────────────────────────\n\nconst StreamXYFrame = forwardRef<StreamXYFrameHandle, StreamXYFrameProps>(\n function StreamXYFrame(props, ref) {\n const {\n chartType,\n runtimeMode,\n data,\n xAccessor,\n yAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n lineDataAccessor,\n curve,\n normalize,\n binSize,\n valueAccessor,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n timeAccessor,\n xExtent,\n yExtent,\n extentPadding = 0.1,\n sizeRange,\n size = [500, 300],\n margin: marginProp,\n className,\n background,\n lineStyle,\n pointStyle,\n areaStyle,\n barStyle,\n waterfallStyle,\n swarmStyle,\n barColors,\n colorScheme,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n showAxes = true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n tickFormatTime,\n tickFormatValue,\n hoverAnnotation,\n tooltipContent,\n customHoverBehavior,\n enableHover,\n annotations,\n svgAnnotationRules,\n showGrid,\n legend,\n backgroundGraphics,\n foregroundGraphics,\n title,\n categoryAccessor,\n brush,\n onBrush,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins,\n marginalGraphics\n } = props\n\n const margin = { ...DEFAULT_MARGIN, ...marginProp }\n\n // Auto-expand margins to at least 60px when marginals are configured\n if (marginalGraphics) {\n const MIN_MARGINAL = 60\n if (marginalGraphics.top && margin.top < MIN_MARGINAL) margin.top = MIN_MARGINAL\n if (marginalGraphics.bottom && margin.bottom < MIN_MARGINAL) margin.bottom = MIN_MARGINAL\n if (marginalGraphics.left && margin.left < MIN_MARGINAL) margin.left = MIN_MARGINAL\n if (marginalGraphics.right && margin.right < MIN_MARGINAL) margin.right = MIN_MARGINAL\n }\n\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n // Determine effective hover annotation config\n const effectiveHoverAnnotation = hoverAnnotation ?? enableHover\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const dirtyRef = useRef(false)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n // Scales state: updated after each scene computation so SVGOverlay re-renders\n const [currentScales, setCurrentScales] = useState<StreamScales | null>(null)\n\n // Hover state: ref for canvas (sync), React state for tooltip (async)\n const hoverRef = useRef<HoverData | null>(null)\n const [hoverPoint, setHoverPoint] = useState<HoverData | null>(null)\n\n // Staleness state\n const [isStale, setIsStale] = useState(false)\n\n // Marginal data values\n const [marginalXValues, setMarginalXValues] = useState<number[]>([])\n const [marginalYValues, setMarginalYValues] = useState<number[]>([])\n\n\n // Render function ref (always-fresh closure)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── Pipeline ─────────────────────────────────────────────────────────\n\n const isStreaming = runtimeMode === \"streaming\" || [\"bar\", \"swarm\", \"waterfall\"].includes(chartType)\n\n const pipelineConfig = useMemo((): PipelineConfig => ({\n chartType,\n runtimeMode: isStreaming ? \"streaming\" : \"bounded\",\n windowSize,\n windowMode,\n arrowOfTime: isStreaming ? arrowOfTime : \"right\",\n extentPadding,\n xAccessor: isStreaming ? undefined : xAccessor,\n yAccessor: isStreaming ? undefined : yAccessor,\n timeAccessor: isStreaming ? timeAccessor : undefined,\n valueAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n categoryAccessor,\n lineDataAccessor,\n xExtent,\n yExtent,\n sizeRange,\n binSize,\n normalize,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n lineStyle,\n pointStyle,\n areaStyle,\n swarmStyle,\n colorScheme,\n barColors,\n annotations,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins\n }), [\n chartType, windowSize, windowMode, arrowOfTime, extentPadding,\n xAccessor, yAccessor, timeAccessor, valueAccessor,\n colorAccessor, sizeAccessor, groupAccessor, categoryAccessor,\n lineDataAccessor, xExtent, yExtent, sizeRange, binSize, normalize,\n boundsAccessor, boundsStyle,\n openAccessor, highAccessor, lowAccessor, closeAccessor, candlestickStyle,\n lineStyle, pointStyle, areaStyle, swarmStyle, colorScheme, barColors, annotations,\n decay, pulse, transition, staleness,\n heatmapAggregation, heatmapXBins, heatmapYBins,\n isStreaming\n ])\n\n const storeRef = useRef<PipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new PipelineStore(pipelineConfig)\n }\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current) return\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }, [])\n\n // Update config when it changes — also schedule re-render since style\n // callbacks (pointStyle, areaStyle, etc.) may have changed.\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── DataSourceAdapter ────────────────────────────────────────────────\n\n const adapterRef = useRef<DataSourceAdapter | null>(null)\n if (!adapterRef.current) {\n adapterRef.current = new DataSourceAdapter((changeset) => {\n const store = storeRef.current\n if (!store) return\n const needsRender = store.ingest(changeset)\n if (needsRender) {\n dirtyRef.current = true\n scheduleRender()\n }\n })\n }\n\n // ── Push API (ref handle) ────────────────────────────────────────────\n\n const pushPoint = useCallback((datum: Record<string, any>) => {\n adapterRef.current?.push(datum)\n }, [])\n\n const pushManyPoints = useCallback((data: Record<string, any>[]) => {\n adapterRef.current?.pushMany(data)\n }, [])\n\n const clearAll = useCallback(() => {\n adapterRef.current?.clear()\n storeRef.current?.clear()\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n useImperativeHandle(ref, () => ({\n push: pushPoint,\n pushMany: pushManyPoints,\n clear: clearAll,\n getData: () => storeRef.current?.getData() ?? [],\n getScales: () => storeRef.current?.scales ?? null,\n getExtents: () => storeRef.current?.getExtents() ?? null\n }), [pushPoint, pushManyPoints, clearAll])\n\n // ── Controlled data prop ─────────────────────────────────────────────\n\n useEffect(() => {\n if (!data) return\n adapterRef.current?.setBoundedData(data)\n }, [data])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!effectiveHoverAnnotation) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (chartX < 0 || chartX > adjustedWidth || chartY < 0 || chartY > adjustedHeight) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store || store.scene.length === 0) return\n\n // Hit test against scene graph\n const hit = findNearestNode(store.scene, chartX, chartY)\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const hover: HoverData = {\n data: hit.datum,\n time: hit.x,\n value: hit.y,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverPoint(hover)\n if (customHoverBehavior) customHoverBehavior(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n\n // Advance transition animation (before scene rebuild)\n const isTransitioning = store.advanceTransition(now)\n\n // Compute scene graph (scales + scene nodes) — skip if mid-transition\n if (!isTransitioning) {\n store.computeScene({ width: adjustedWidth, height: adjustedHeight })\n }\n\n // DPR setup\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n ctx.translate(margin.left, margin.top)\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n const theme = resolveThemeColors(canvas)\n\n // Staleness dimming\n const staleThreshold = staleness?.threshold ?? 5000\n const currentlyStale = staleness && store.lastIngestTime > 0 &&\n (now - store.lastIngestTime) > staleThreshold\n\n if (currentlyStale) {\n ctx.globalAlpha = staleness?.dimOpacity ?? 0.5\n }\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n // Render data marks via canvas renderers\n const renderers = RENDERERS[chartType]\n if (renderers && store.scales) {\n for (const renderer of renderers) {\n renderer(\n ctx,\n store.scene,\n store.scales,\n { width: adjustedWidth, height: adjustedHeight }\n )\n }\n }\n\n // Reset alpha after staleness dimming\n if (currentlyStale) {\n ctx.globalAlpha = 1\n }\n\n // Draw crosshair on hover\n if (effectiveHoverAnnotation && hoverRef.current && store.scales) {\n const config: HoverAnnotationConfig =\n typeof effectiveHoverAnnotation === \"object\" ? effectiveHoverAnnotation : {}\n drawCrosshair(\n ctx,\n hoverRef.current,\n adjustedWidth,\n adjustedHeight,\n config,\n \"#007bff\",\n theme\n )\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Push scales into React state so SVGOverlay renders axes/grid\n if (wasDirty && store.scales) {\n setCurrentScales(store.scales)\n\n // Extract x/y values for marginal graphics\n if (marginalGraphics) {\n const rawData = store.getData()\n const getX = typeof xAccessor === \"function\"\n ? xAccessor\n : (d: Record<string, any>) => d[xAccessor || \"x\"]\n const getY = typeof yAccessor === \"function\"\n ? yAccessor\n : (d: Record<string, any>) => d[yAccessor || \"y\"]\n setMarginalXValues(rawData.map(d => getX(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n setMarginalYValues(rawData.map(d => getY(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n }\n }\n\n // Trigger React re-render for SVG annotations\n if (wasDirty && annotations && annotations.length > 0 && svgAnnotationRules) {\n setAnnotationFrame(f => f + 1)\n }\n\n // Update staleness React state for badge\n if (staleness?.showBadge) {\n setIsStale(!!currentlyStale)\n }\n\n // Schedule next frame for continuous rendering (pulse/transitions)\n if (isTransitioning || store.hasActivePulses) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n // Re-render when visual props change\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, showAxes, background, lineStyle, scheduleRender])\n\n // Staleness check timer\n useEffect(() => {\n if (!staleness) return\n const interval = setInterval(() => {\n const store = storeRef.current\n if (!store || store.lastIngestTime === 0) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const threshold = staleness.threshold ?? 5000\n const stale = (now - store.lastIngestTime) > threshold\n if (stale !== isStale) {\n setIsStale(stale)\n dirtyRef.current = true\n scheduleRender()\n }\n }, 1000)\n return () => clearInterval(interval)\n }, [staleness, isStale, scheduleRender])\n\n // ── Tooltip positioning ──────────────────────────────────────────────\n\n const tooltipRendered = effectiveHoverAnnotation && hoverPoint\n ? (tooltipContent ? tooltipContent(hoverPoint) : <DefaultTooltip hover={hoverPoint} />)\n : null\n\n const tooltipElement = tooltipRendered ? (\n <div\n className=\"stream-frame-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + hoverPoint!.x,\n top: margin.top + hoverPoint!.y,\n transform: `translate(${\n hoverPoint!.x > adjustedWidth * 0.7 ? \"calc(-100% - 12px)\" : \"12px\"\n }, ${\n hoverPoint!.y < adjustedHeight * 0.3 ? \"4px\" : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 1\n }}\n >\n {tooltipRendered}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n return (\n <div\n className={`stream-xy-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={effectiveHoverAnnotation ? onMouseMove : undefined}\n onMouseLeave={effectiveHoverAnnotation ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n {backgroundGraphics}\n </svg>\n )}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0\n }}\n />\n <SVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n scales={currentScales}\n showAxes={showAxes}\n xLabel={xLabel}\n yLabel={yLabel}\n xFormat={xFormat || tickFormatTime}\n yFormat={yFormat || tickFormatValue}\n showGrid={showGrid}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n marginalGraphics={marginalGraphics}\n xValues={marginalXValues}\n yValues={marginalYValues}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n {(brush || onBrush) && (\n <BrushOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n dimension={brush?.dimension ?? \"xy\"}\n scales={currentScales}\n onBrush={onBrush ?? (() => {})}\n />\n )}\n {staleness?.showBadge && (\n <div\n className=\"stream-staleness-badge\"\n style={{\n position: \"absolute\",\n ...(staleness.badgePosition === \"top-left\" ? { top: 4, left: 4 } :\n staleness.badgePosition === \"bottom-left\" ? { bottom: 4, left: 4 } :\n staleness.badgePosition === \"bottom-right\" ? { bottom: 4, right: 4 } :\n { top: 4, right: 4 }),\n padding: \"2px 8px\",\n borderRadius: 4,\n fontSize: 11,\n fontWeight: 600,\n pointerEvents: \"none\",\n background: isStale ? \"#dc3545\" : \"#28a745\",\n color: \"white\"\n }}\n >\n {isStale ? \"STALE\" : \"LIVE\"}\n </div>\n )}\n {tooltipElement}\n </div>\n )\n }\n)\n\nStreamXYFrame.displayName = \"StreamXYFrame\"\nexport default StreamXYFrame\n","import { scaleOrdinal, scaleSequential } from \"d3-scale\"\nimport {\n schemeCategory10,\n schemeTableau10,\n schemeSet3,\n interpolateBlues,\n interpolateReds,\n interpolateGreens,\n interpolateOranges,\n interpolatePurples,\n interpolateViridis,\n interpolatePlasma\n} from \"d3-scale-chromatic\"\n\n/**\n * Predefined color schemes\n */\nexport const COLOR_SCHEMES = {\n // Categorical schemes\n category10: schemeCategory10,\n tableau10: schemeTableau10,\n set3: schemeSet3,\n\n // Sequential schemes (for continuous data)\n blues: interpolateBlues,\n reds: interpolateReds,\n greens: interpolateGreens,\n oranges: interpolateOranges,\n purples: interpolatePurples,\n viridis: interpolateViridis,\n plasma: interpolatePlasma\n}\n\n/**\n * Default colors for charts\n */\nexport const DEFAULT_COLORS = schemeCategory10\n\n/**\n * Gets a color for a data point based on the colorBy configuration\n *\n * @param dataPoint - The data point\n * @param colorBy - Field name or function to determine color\n * @param colorScale - Optional custom color scale\n * @returns Color string\n *\n * @example\n * ```ts\n * // Using a field name\n * getColor({category: 'A', value: 10}, 'category', colorScale)\n *\n * // Using a function\n * getColor({value: 10}, d => d.value > 5 ? 'red' : 'blue')\n * ```\n */\nexport function getColor(\n dataPoint: any,\n colorBy: string | ((d: any) => string),\n colorScale?: (v: any) => string\n): string {\n if (typeof colorBy === \"function\") {\n return colorBy(dataPoint)\n }\n\n const colorValue = dataPoint[colorBy]\n\n if (colorScale) {\n return colorScale(colorValue)\n }\n\n // Default: return a hash-based color\n return DEFAULT_COLORS[Math.abs(hashString(String(colorValue))) % DEFAULT_COLORS.length]\n}\n\n/**\n * Creates a color scale function from data\n *\n * @param data - Array of data points\n * @param colorBy - Field name to use for coloring\n * @param scheme - Color scheme name or custom palette\n * @returns Color scale function\n *\n * @example\n * ```ts\n * const colorScale = createColorScale(data, 'category')\n * const color = colorScale('A') // Returns color for category 'A'\n * ```\n */\nexport function createColorScale(\n data: Array<Record<string, any>>,\n colorBy: string,\n scheme: string | string[] = \"category10\"\n): (v: string) => string {\n // Get unique values\n const uniqueValues = Array.from(new Set(data.map(d => d[colorBy])))\n\n // Check if values are numeric for sequential scale\n const isNumeric = uniqueValues.every(v => typeof v === \"number\" || !isNaN(Number(v)))\n\n // Handle custom color array\n if (Array.isArray(scheme)) {\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(scheme)\n .unknown(\"#999\") as (v: any) => string\n }\n\n const colorScheme = COLOR_SCHEMES[scheme] || COLOR_SCHEMES.category10\n\n if (isNumeric && typeof colorScheme === \"function\") {\n // Use sequential scale for numeric data\n return (v: any) => colorScheme(Number(v) / Math.max(...uniqueValues.map(Number)))\n } else {\n // Use ordinal scale for categorical data\n const colors = Array.isArray(colorScheme) ? colorScheme : DEFAULT_COLORS\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(colors)\n .unknown(\"#999\") as (v: any) => string\n }\n}\n\n/**\n * Simple string hash function for deterministic color assignment\n */\nfunction hashString(str: string): number {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash)\n}\n\n/**\n * Generates a size function based on sizeBy configuration\n *\n * @param dataPoint - The data point\n * @param sizeBy - Field name or function to determine size\n * @param sizeRange - Min and max size range [min, max]\n * @param domain - Optional domain for scaling [minValue, maxValue]\n * @returns Size value\n */\nexport function getSize(\n dataPoint: any,\n sizeBy: string | ((d: any) => number),\n sizeRange: [number, number] = [3, 20],\n domain?: [number, number]\n): number {\n let value: number\n\n if (typeof sizeBy === \"function\") {\n value = sizeBy(dataPoint)\n } else {\n value = dataPoint[sizeBy]\n }\n\n if (!domain) {\n return value\n }\n\n // Scale value to size range\n const [minDomain, maxDomain] = domain\n const [minSize, maxSize] = sizeRange\n\n if (maxDomain === minDomain) {\n return (minSize + maxSize) / 2\n }\n\n const normalized = (value - minDomain) / (maxDomain - minDomain)\n return minSize + normalized * (maxSize - minSize)\n}\n","import { useMemo } from \"react\"\nimport { createColorScale } from \"./colorUtils\"\nimport type { Accessor } from \"./types\"\n\n/**\n * Default fill color used when no colorBy is specified\n */\nexport const DEFAULT_COLOR = \"#007bff\"\n\n/**\n * Resolve an accessor (string key or function) into a function.\n * Used across chart components to normalize `valueAccessor`, `categoryAccessor`, etc.\n */\nexport function resolveAccessor<T = any>(\n accessor: string | ((d: Record<string, any>, i?: number) => T)\n): (d: Record<string, any>) => T {\n return typeof accessor === \"function\"\n ? accessor\n : (d: Record<string, any>) => d[accessor]\n}\n\n/**\n * Hook to create a color scale from data and colorBy configuration.\n * Returns undefined when colorBy is absent or is a function accessor.\n */\nexport function useColorScale(\n data: Array<Record<string, any>>,\n colorBy: Accessor<string> | undefined,\n colorScheme: string | string[] = \"category10\"\n): ((v: string) => string) | undefined {\n return useMemo(() => {\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(data, colorBy as string, colorScheme)\n }, [data, colorBy, colorScheme])\n}\n\n/**\n * Hook to sort data by a value accessor.\n * Used by BarChart and DotPlot.\n */\nexport function useSortedData(\n data: Array<Record<string, any>>,\n sort: boolean | \"asc\" | \"desc\" | ((a: Record<string, any>, b: Record<string, any>) => number),\n valueAccessor: Accessor<number>\n): Array<Record<string, any>> {\n return useMemo(() => {\n if (!sort) return data\n const copy = [...data]\n if (typeof sort === \"function\") return copy.sort(sort)\n const getValue = resolveAccessor<number>(valueAccessor)\n return sort === \"asc\"\n ? copy.sort((a, b) => getValue(a) - getValue(b))\n : copy.sort((a, b) => getValue(b) - getValue(a))\n }, [data, sort, valueAccessor])\n}\n","import type { Accessor } from \"./types\"\n\n/**\n * Create a legend configuration for HOC components\n *\n * @param data - Array of data points\n * @param colorBy - Field or function to determine color categories\n * @param colorScale - Optional d3 color scale function\n * @param getColor - Function to get color for a data point\n * @param strokeColor - Optional stroke color for legend items\n * @param strokeWidth - Optional stroke width for legend items\n * @returns Legend configuration object for Semiotic frames\n */\nexport function createLegend({\n data,\n colorBy,\n colorScale,\n getColor,\n strokeColor,\n strokeWidth\n}: {\n data: Array<Record<string, any>>\n colorBy: Accessor<string>\n colorScale?: ((v: string) => string)\n getColor: (d: Record<string, any>, accessor: Accessor<string>, scale?: ((v: string) => string)) => string\n strokeColor?: string\n strokeWidth?: number\n}) {\n // Get unique category values\n const uniqueValues = Array.from(\n new Set(\n data.map((d) => {\n if (typeof colorBy === \"function\") {\n return colorBy(d)\n }\n return d[colorBy as string]\n })\n )\n )\n\n // Create items array for the legend\n const items = uniqueValues.map((value) => {\n const sampleData =\n typeof colorBy === \"function\"\n ? data.find((d) => colorBy(d) === value)\n : data.find((d) => d[colorBy as string] === value)\n\n const color = sampleData\n ? getColor(sampleData, colorBy, colorScale)\n : colorScale\n ? colorScale(value)\n : \"#000000\"\n\n return {\n label: String(value),\n color\n }\n })\n\n return {\n legendGroups: [\n {\n styleFn: (d: { color: string }) => {\n const style: Record<string, string | number> = { fill: d.color, stroke: d.color }\n if (strokeColor !== undefined) {\n style.stroke = strokeColor\n }\n if (strokeWidth !== undefined) {\n style.strokeWidth = strokeWidth\n }\n return style\n },\n type: \"fill\" as const,\n items,\n label: \"\" // Required by LegendGroup interface\n }\n ]\n }\n}\n","import * as React from \"react\"\nimport type { Accessor } from \"../charts/shared/types\"\n\n/**\n * Configuration for a single tooltip field\n */\nexport interface TooltipField {\n /**\n * Label for this field\n */\n label?: string\n\n /**\n * Field name or accessor function to get the value\n * (alias for 'accessor')\n */\n key?: Accessor\n\n /**\n * Field name or accessor function to get the value\n */\n accessor?: Accessor\n\n /**\n * Optional format function for the value\n */\n format?: (value: unknown) => string\n}\n\n/**\n * Base tooltip configuration\n */\nexport interface TooltipConfig {\n /**\n * Array of fields to display in the tooltip\n * Can be simple field names or full TooltipField objects\n */\n fields?: Array<string | TooltipField>\n\n /**\n * Custom title accessor (field name or function)\n */\n title?: Accessor<string>\n\n /**\n * Custom format function for all values (if fields don't specify their own)\n */\n format?: (value: unknown) => string\n\n /**\n * Custom style object for the tooltip container\n */\n style?: React.CSSProperties\n\n /**\n * Custom className for the tooltip container\n */\n className?: string\n}\n\n/**\n * Multi-line tooltip configuration\n */\nexport interface MultiLineTooltipConfig extends TooltipConfig {\n /**\n * Show field labels (default: true)\n */\n showLabels?: boolean\n\n /**\n * Separator between label and value (default: \": \")\n */\n separator?: string\n}\n\n/**\n * Default tooltip styles following best practices\n */\nexport const defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n fontSize: \"14px\",\n lineHeight: \"1.5\",\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n maxWidth: \"300px\",\n wordWrap: \"break-word\"\n}\n\n/**\n * Extract value from data using accessor\n */\nfunction getValue(data: Record<string, unknown>, accessor: Accessor): unknown {\n if (typeof accessor === \"function\") {\n return accessor(data)\n }\n return data[accessor]\n}\n\n/**\n * Format a value for display\n */\nfunction formatValue(value: unknown, format?: (value: unknown) => string): string {\n if (format) {\n return format(value)\n }\n\n if (value === null || value === undefined) {\n return \"\"\n }\n\n // Format numbers with commas\n if (typeof value === \"number\") {\n return value.toLocaleString()\n }\n\n // Format dates\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n // Handle objects (e.g. resolved network nodes with an id property)\n if (typeof value === \"object\" && value !== null) {\n const obj = value as Record<string, unknown>\n if (obj.id !== undefined) return String(obj.id)\n if (obj.name !== undefined) return String(obj.name)\n return JSON.stringify(value)\n }\n\n return String(value)\n}\n\n/**\n * Create a simple tooltip that displays a single value or title\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={Tooltip({ title: \"name\" })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={Tooltip({\n * title: d => `${d.category}: ${d.value}`,\n * style: { background: \"#333\" }\n * })}\n * />\n * ```\n */\nexport function Tooltip(config: TooltipConfig = {}) {\n const {\n fields,\n title,\n format,\n style = {},\n className = \"\"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n let titleContent: React.ReactNode\n const fieldLines: Array<{ label?: string; value: string }> = []\n\n if (title) {\n const titleValue = getValue(data, title)\n titleContent = formatValue(titleValue, format)\n }\n\n if (fields && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n label = field\n accessor = field\n fieldFormat = format\n } else {\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n fieldLines.push({\n label,\n value: formatValue(value, fieldFormat)\n })\n })\n } else if (!title) {\n // Default: try common field names (only when no title or fields specified)\n const commonFields = [\"value\", \"y\", \"name\", \"id\", \"label\"]\n for (const field of commonFields) {\n if (data[field] !== undefined) {\n titleContent = formatValue(data[field], format)\n break\n }\n }\n\n // If still nothing, show first non-internal property\n if (!titleContent) {\n const keys = Object.keys(data).filter(k => !k.startsWith(\"_\"))\n if (keys.length > 0) {\n titleContent = formatValue(data[keys[0]], format)\n }\n }\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n return (\n <div\n className={`semiotic-tooltip ${className}`.trim()}\n style={mergedStyle}\n >\n {titleContent && <div style={{ fontWeight: fieldLines.length > 0 ? \"bold\" : \"normal\" }}>{titleContent}</div>}\n {fieldLines.map((line, index) => (\n <div key={index} style={{ marginTop: index === 0 && titleContent ? \"4px\" : 0 }}>\n {line.label && <span>{line.label}: </span>}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Create a multi-line tooltip that displays multiple fields\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\"name\", \"value\", \"category\"]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <LineChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * title: \"series\",\n * fields: [\n * { label: \"X\", accessor: \"x\", format: v => v.toFixed(2) },\n * { label: \"Y\", accessor: \"y\", format: v => v.toFixed(2) },\n * { label: \"Category\", accessor: \"category\" }\n * ]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\n * { label: \"Category\", accessor: \"category\" },\n * { label: \"Sales\", accessor: \"value\", format: v => `$${v.toLocaleString()}` }\n * ],\n * showLabels: true\n * })}\n * />\n * ```\n */\nexport function MultiLineTooltip(config: MultiLineTooltipConfig = {}) {\n const {\n fields = [],\n title,\n format,\n style = {},\n className = \"\",\n showLabels = true,\n separator = \": \"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n const lines: Array<{ label?: string; value: string }> = []\n\n // Add title line if specified\n if (title) {\n const titleValue = getValue(data, title)\n lines.push({\n value: formatValue(titleValue, format)\n })\n }\n\n // Add field lines\n if (fields && Array.isArray(fields) && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n // Simple string field name\n label = field\n accessor = field\n fieldFormat = format\n } else {\n // Full TooltipField object\n // Support both 'key' and 'accessor' for backward compatibility\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n const formattedValue = formatValue(value, fieldFormat)\n\n lines.push({\n label: showLabels ? label : undefined,\n value: formattedValue\n })\n })\n } else {\n // Default: show all non-internal properties\n const keys = Object.keys(data).filter(\n (k) => !k.startsWith(\"_\") && k !== \"data\"\n )\n keys.forEach((key) => {\n lines.push({\n label: showLabels ? key : undefined,\n value: formatValue(data[key], format)\n })\n })\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n // Safety check: ensure lines is an array\n if (!Array.isArray(lines) || lines.length === 0) {\n return null\n }\n\n return (\n <div\n className={`semiotic-tooltip semiotic-tooltip-multiline ${className}`.trim()}\n style={mergedStyle}\n >\n {lines.map((line, index) => (\n <div key={index} style={{ marginBottom: index < lines.length - 1 ? \"4px\" : 0 }}>\n {line.label && (\n <strong>\n {line.label}\n {separator}\n </strong>\n )}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Type for tooltip prop that chart components accept\n */\nexport type TooltipProp =\n | boolean\n | ((data: Record<string, unknown>) => React.ReactNode)\n | ReturnType<typeof Tooltip>\n | ReturnType<typeof MultiLineTooltip>\n | TooltipConfig\n\n/**\n * Convert a tooltip prop to the format Semiotic expects\n */\nexport function normalizeTooltip(tooltip: TooltipProp): boolean | Function {\n if (tooltip === true) {\n // Enable default tooltip\n return true\n }\n\n if (typeof tooltip === \"function\") {\n // Already a tooltip function, use it as tooltipContent\n return tooltip\n }\n\n if (tooltip === false || tooltip === undefined) {\n // No tooltip\n return false\n }\n\n // Config object with fields/title — convert to a tooltip function\n if (typeof tooltip === \"object\" && tooltip !== null && (\"fields\" in tooltip || \"title\" in tooltip)) {\n const config = tooltip as TooltipConfig\n return Tooltip(config)\n }\n\n // Should not reach here but return true to enable default tooltip\n return true\n}\n","\"use client\"\nimport * as React from \"react\"\n\nexport interface ChartErrorProps {\n /** Component name for the error message */\n componentName: string\n /** The error message to display */\n message: string\n /** Chart width */\n width: number\n /** Chart height */\n height: number\n}\n\n/**\n * Renders a visible, styled error state inside the chart's dimensions.\n * Shows the component name, error message, and a hint for developers.\n *\n * Designed to be obvious in development but not alarming in production —\n * uses muted colors that adapt to light/dark backgrounds.\n */\nexport default function ChartError({\n componentName,\n message,\n width,\n height,\n}: ChartErrorProps) {\n return (\n <div\n role=\"alert\"\n style={{\n width,\n height: Math.max(height, 120),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px dashed rgba(128, 128, 128, 0.4)\",\n borderRadius: 8,\n background: \"rgba(128, 128, 128, 0.04)\",\n padding: 24,\n boxSizing: \"border-box\",\n }}\n >\n <div style={{ textAlign: \"center\", maxWidth: 400 }}>\n <div\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"rgba(128, 128, 128, 0.7)\",\n marginBottom: 6,\n fontFamily: \"monospace\",\n }}\n >\n {componentName}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"rgba(128, 128, 128, 0.9)\",\n lineHeight: 1.5,\n }}\n >\n {message}\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Validates chart data and accessors at render time.\n * Returns null if data is valid, or an error message string if not.\n *\n * Validation is intentionally lightweight — it checks the first data point\n * to catch common mistakes (wrong field names, missing data) without\n * iterating the entire dataset.\n */\n\ntype AccessorLike = string | ((...args: any[]) => any)\n\ninterface ArrayDataValidation {\n componentName: string\n data: any[] | undefined | null\n accessors?: Record<string, AccessorLike | undefined>\n requiredProps?: Record<string, any>\n}\n\ninterface ObjectDataValidation {\n componentName: string\n data: any | undefined | null\n dataLabel?: string\n}\n\ninterface NetworkDataValidation {\n componentName: string\n nodes?: any[] | undefined | null\n edges?: any[] | undefined | null\n nodesRequired?: boolean\n edgesRequired?: boolean\n accessors?: Record<string, AccessorLike | undefined>\n}\n\n/**\n * Validate array-based chart data (LineChart, BarChart, Scatterplot, etc.)\n */\nexport function validateArrayData({\n componentName,\n data,\n accessors,\n requiredProps,\n}: ArrayDataValidation): string | null {\n // Check required props first\n if (requiredProps) {\n for (const [name, value] of Object.entries(requiredProps)) {\n if (value === undefined || value === null) {\n return `${name} is required. Provide a field name or function.`\n }\n }\n }\n\n // Check data exists and is non-empty\n if (!data || !Array.isArray(data) || data.length === 0) {\n return \"No data provided. Pass a non-empty array to the data prop.\"\n }\n\n // Check accessors against the first data point\n if (accessors) {\n const sample = data[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n\n return null\n}\n\n/**\n * Validate object/hierarchical data (TreeDiagram, Treemap, CirclePack)\n */\nexport function validateObjectData({\n componentName,\n data,\n dataLabel = \"data\",\n}: ObjectDataValidation): string | null {\n if (data === undefined || data === null) {\n return `No ${dataLabel} provided. Pass a hierarchical data object to the ${dataLabel} prop.`\n }\n return null\n}\n\n/**\n * Validate network data (ForceDirectedGraph, ChordDiagram, SankeyDiagram)\n */\nexport function validateNetworkData({\n componentName,\n nodes,\n edges,\n nodesRequired = false,\n edgesRequired = true,\n accessors,\n}: NetworkDataValidation): string | null {\n if (edgesRequired && (!edges || !Array.isArray(edges) || edges.length === 0)) {\n return \"No edges provided. Pass a non-empty array to the edges prop.\"\n }\n\n if (nodesRequired && (!nodes || !Array.isArray(nodes) || nodes.length === 0)) {\n return \"No nodes provided. Pass a non-empty array to the nodes prop.\"\n }\n\n // Check accessors against first data point\n if (accessors) {\n if (nodes && nodes.length > 0) {\n const sample = nodes[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in node data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n }\n\n return null\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useState, useRef, useEffect, useMemo, useCallback } from \"react\"\nimport { brushX, brushY } from \"d3-brush\"\nimport { select } from \"d3-selection\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps, StreamScales } from \"../../stream/types\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\n\n// ── Types ──────────────────────────────────────────────────────────────\n\nexport interface MinimapConfig {\n /** Height of the minimap overview (default: 60) */\n height?: number\n /** Margin for the minimap chart */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Line style override for the minimap */\n lineStyle?: (d: Record<string, any>) => Record<string, any>\n /** Show axes in minimap (default: false) */\n showAxes?: boolean\n /** Background color for minimap */\n background?: string\n /** Brush direction: \"x\" (default) or \"y\" */\n brushDirection?: \"x\" | \"y\"\n}\n\nexport interface MinimapChartProps<TDatum extends Record<string, any> = Record<string, any>>\n extends BaseChartProps,\n AxisConfig {\n /** Array of data points or line objects with coordinates */\n data: TDatum[]\n\n /** X accessor (default: \"x\") */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /** Y accessor (default: \"y\") */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /** Group data into multiple lines */\n lineBy?: ChartAccessor<TDatum, string>\n\n /** Field containing coordinate arrays in line objects (default: \"coordinates\") */\n lineDataAccessor?: string\n\n /** Color-by field or function */\n colorBy?: ChartAccessor<TDatum, string>\n\n /** Color scheme (default: \"category10\") */\n colorScheme?: string | string[]\n\n /** Curve type (default: \"linear\") */\n curve?: \"linear\" | \"monotoneX\" | \"monotoneY\" | \"step\" | \"stepAfter\" | \"stepBefore\" | \"basis\" | \"cardinal\" | \"catmullRom\"\n\n /** Line stroke width (default: 2) */\n lineWidth?: number\n\n /** Fill area under lines */\n fillArea?: boolean\n\n /** Area opacity when fillArea is true (default: 0.3) */\n areaOpacity?: number\n\n /** Show points on lines */\n showPoints?: boolean\n\n /** Point radius (default: 3) */\n pointRadius?: number\n\n /** Enable hover (default: true) */\n enableHover?: boolean\n\n /** Show grid (default: false) */\n showGrid?: boolean\n\n /** Show legend */\n showLegend?: boolean\n\n /** Tooltip config */\n tooltip?: TooltipProp\n\n /** Minimap configuration */\n minimap?: MinimapConfig\n\n /** Show minimap above the main chart (default: false — below) */\n renderBefore?: boolean\n\n /** Callback when brush extent changes */\n onBrush?: (extent: [number, number] | null) => void\n\n /** Controlled brush extent */\n brushExtent?: [number, number]\n\n /** Additional StreamXYFrame props */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n// ── Brush overlay ──────────────────────────────────────────────────────\n\ninterface BrushOverlayProps {\n width: number\n height: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: StreamScales | null\n brushDirection: \"x\" | \"y\"\n extent: [number, number] | null\n onBrush: (extent: [number, number] | null) => void\n}\n\nfunction BrushOverlay({\n width,\n height,\n margin,\n scales,\n brushDirection,\n extent,\n onBrush\n}: BrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const brushRef = useRef<any>(null)\n const isUpdatingRef = useRef(false)\n\n const totalWidth = width + margin.left + margin.right\n const totalHeight = height + margin.top + margin.bottom\n\n useEffect(() => {\n if (!svgRef.current || !scales) return\n\n const g = select(svgRef.current).select<SVGGElement>(\".brush-group\")\n\n const brush = brushDirection === \"x\"\n ? brushX().extent([[0, 0], [width, height]])\n : brushY().extent([[0, 0], [width, height]])\n\n brush.on(\"brush end\", (event: any) => {\n if (isUpdatingRef.current) return\n if (!event.sourceEvent) return // programmatic — skip\n\n const sel = event.selection\n if (!sel) {\n onBrush(null)\n return\n }\n\n const scale = brushDirection === \"x\" ? scales.x : scales.y\n const inv = scale.invert\n if (!inv) return\n\n const domain: [number, number] = brushDirection === \"x\"\n ? [inv(sel[0]), inv(sel[1])]\n : [inv(sel[0]), inv(sel[1])]\n\n onBrush(domain)\n })\n\n g.call(brush)\n brushRef.current = brush\n\n // Style the brush selection\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.2)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brush.on(\"brush end\", null)\n }\n }, [scales, width, height, brushDirection, onBrush])\n\n // Sync controlled extent to brush position\n useEffect(() => {\n if (!brushRef.current || !scales || !svgRef.current) return\n\n const g = select(svgRef.current).select<SVGGElement>(\".brush-group\")\n const scale = brushDirection === \"x\" ? scales.x : scales.y\n\n isUpdatingRef.current = true\n if (extent) {\n const pixelExtent: [number, number] = [scale(extent[0]), scale(extent[1])]\n g.call(brushRef.current.move, pixelExtent)\n } else {\n g.call(brushRef.current.move, null)\n }\n isUpdatingRef.current = false\n }, [extent, scales, brushDirection])\n\n return (\n <svg\n ref={svgRef}\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"all\"\n }}\n >\n <g className=\"brush-group\" transform={`translate(${margin.left},${margin.top})`} />\n </svg>\n )\n}\n\n// ── MinimapChart ────────────────────────────────────────────────────────\n\nexport function MinimapChart<TDatum extends Record<string, any> = Record<string, any>>(\n props: MinimapChartProps<TDatum>\n) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n lineBy,\n lineDataAccessor = \"coordinates\",\n colorBy,\n colorScheme = \"category10\",\n curve = \"linear\",\n lineWidth = 2,\n fillArea = false,\n areaOpacity = 0.3,\n showPoints = false,\n pointRadius = 3,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n minimap: minimapConfig = {},\n renderBefore = false,\n onBrush,\n brushExtent: controlledExtent,\n frameProps = {}\n } = props\n\n const safeData = data || []\n\n // ── Brush state ─────────────────────────────────────────────────────\n const [internalExtent, setInternalExtent] = useState<[number, number] | null>(null)\n const brushExtent = controlledExtent ?? internalExtent\n\n const handleBrush = useCallback(\n (ext: [number, number] | null) => {\n if (!controlledExtent) {\n setInternalExtent(ext)\n }\n onBrush?.(ext)\n },\n [controlledExtent, onBrush]\n )\n\n // ── Overview ref to get scales ──────────────────────────────────────\n const overviewRef = useRef<any>(null)\n const [overviewScales, setOverviewScales] = useState<StreamScales | null>(null)\n\n // Poll for scales after mount (overview sets them async via rAF)\n useEffect(() => {\n const check = () => {\n const s = overviewRef.current?.getScales?.()\n if (s) {\n setOverviewScales(s)\n } else {\n requestAnimationFrame(check)\n }\n }\n requestAnimationFrame(check)\n }, [data])\n\n // ── Data normalization (same as LineChart) ──────────────────────────\n\n const isLineObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined\n\n const lineData = useMemo(() => {\n if (isLineObjectFormat) return safeData\n\n if (lineBy) {\n const grouped = safeData.reduce((acc, d) => {\n const key = typeof lineBy === \"function\" ? lineBy(d) : d[lineBy as string]\n if (!acc[key]) {\n const lineObj: Record<string, any> = { [lineDataAccessor]: [] }\n if (typeof lineBy === \"string\") lineObj[lineBy] = key\n acc[key] = lineObj\n }\n acc[key][lineDataAccessor].push(d)\n return acc\n }, {} as Record<string, Record<string, any>>)\n return Object.values(grouped)\n }\n\n return [{ [lineDataAccessor]: safeData }]\n }, [safeData, lineBy, lineDataAccessor, isLineObjectFormat])\n\n const flattenedData = useMemo(() => {\n if (isLineObjectFormat || lineBy) {\n return lineData.flatMap((line: Record<string, any>) => {\n const coords = line[lineDataAccessor] || []\n if (lineBy && typeof lineBy === \"string\") {\n return coords.map((c: Record<string, any>) => ({ ...c, [lineBy]: line[lineBy] }))\n }\n return coords\n })\n }\n return safeData\n }, [lineData, lineDataAccessor, isLineObjectFormat, lineBy, safeData])\n\n // ── Color / style ───────────────────────────────────────────────────\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const mainLineStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { strokeWidth: lineWidth }\n style.stroke = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n if (fillArea) {\n style.fill = style.stroke\n style.fillOpacity = areaOpacity\n }\n return style\n }\n }, [colorBy, colorScale, lineWidth, fillArea, areaOpacity])\n\n const overviewLineStyle = useMemo(() => {\n if (minimapConfig.lineStyle) return minimapConfig.lineStyle\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { strokeWidth: 1 }\n style.stroke = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return style\n }\n }, [colorBy, colorScale, minimapConfig.lineStyle])\n\n const pointStyle = useMemo(() => {\n if (!showPoints) return undefined\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { r: pointRadius, fillOpacity: 1 }\n style.fill = colorBy ? getColor(d.parentLine || d, colorBy, colorScale) : DEFAULT_COLOR\n return style\n }\n }, [showPoints, pointRadius, colorBy, colorScale])\n\n // ── Legend ───────────────────────────────────────────────────────────\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : lineData.length > 1\n\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: lineData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, lineData, colorScale])\n\n // ── Margins ─────────────────────────────────────────────────────────\n\n const mainMargin = useMemo(() => {\n const def = { top: 50, bottom: 60, left: 70, right: 40 }\n const m = { ...def, ...userMargin }\n if (legend && m.right < 120) m.right = 120\n return m\n }, [userMargin, legend])\n\n const minimapHeight = minimapConfig.height || 60\n const minimapMargin = useMemo(() => {\n return {\n top: minimapConfig.margin?.top ?? 0,\n bottom: minimapConfig.margin?.bottom ?? 20,\n left: minimapConfig.margin?.left ?? mainMargin.left,\n right: minimapConfig.margin?.right ?? mainMargin.right\n }\n }, [minimapConfig.margin, mainMargin])\n\n const brushDirection = minimapConfig.brushDirection || \"x\"\n\n // ── Validation ──────────────────────────────────────────────────────\n\n const error = validateArrayData({\n componentName: \"MinimapChart\",\n data: safeData,\n accessors: { xAccessor, yAccessor }\n })\n if (error) return <ChartError componentName=\"MinimapChart\" message={error} width={width} height={height} />\n\n // ── Chart type ──────────────────────────────────────────────────────\n\n const chartType = fillArea ? \"area\" as const : \"line\" as const\n\n // ── Build StreamXYFrame props ───────────────────────────────────────\n\n const mainProps: StreamXYFrameProps = {\n chartType,\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: lineBy || undefined,\n curve,\n lineStyle: mainLineStyle,\n ...(showPoints && { pointStyle }),\n size: [width, height],\n margin: mainMargin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(tooltip && { tooltipContent: normalizeTooltip(tooltip) as any }),\n // Apply brush extent to main chart\n ...(brushExtent && { xExtent: brushExtent }),\n ...frameProps\n }\n\n const overviewProps: StreamXYFrameProps = {\n chartType,\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: lineBy || undefined,\n curve,\n lineStyle: overviewLineStyle,\n size: [width, minimapHeight + minimapMargin.top + minimapMargin.bottom],\n margin: minimapMargin,\n showAxes: minimapConfig.showAxes ?? false,\n background: minimapConfig.background,\n enableHover: false\n }\n\n // ── Render ──────────────────────────────────────────────────────────\n\n const overviewChart = (\n <div\n key=\"minimap\"\n style={{ position: \"relative\", width }}\n >\n <StreamXYFrame ref={overviewRef} {...overviewProps} />\n <BrushOverlay\n width={width - minimapMargin.left - minimapMargin.right}\n height={minimapHeight}\n margin={minimapMargin}\n scales={overviewScales}\n brushDirection={brushDirection}\n extent={brushExtent}\n onBrush={handleBrush}\n />\n </div>\n )\n\n const mainChart = (\n <div key=\"main\">\n <StreamXYFrame {...mainProps} />\n </div>\n )\n\n return (\n <div className={`minimap-chart${className ? ` ${className}` : \"\"}`}>\n {renderBefore ? overviewChart : mainChart}\n {renderBefore ? mainChart : overviewChart}\n </div>\n )\n}\nMinimapChart.displayName = \"MinimapChart\"\n","import * as React from \"react\"\n\n\nimport { ScaleLinear } from \"d3-scale\"\n\ntype RenderModeFnType = (d: number, i: number) => string | Record<string, any>\n\ntype AxisPiecesFnType = {\n renderMode?: RenderModeFnType\n padding: number\n scale: ScaleLinear<number, number>\n ticks: number\n tickValues: number[] | Function\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n size: number[]\n footer: boolean\n tickSize: number\n baseline?: boolean | \"under\"\n jaggedBase?: boolean\n}\n\nconst horizontalTornTickGenerator = (width, ticks, y, orient) => {\n const step = width / ticks\n let currentStep = 0\n let tickPath = `M0,${y}`\n const mod = orient === \"right\" ? -1 : 1\n while (currentStep <= width) {\n tickPath += `L${currentStep},${y}`\n if (currentStep < width) {\n tickPath += `L${currentStep + step / 2},${y + 10 * mod}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst verticalTornTickGenerator = (height, ticks, x, orient) => {\n const step = height / ticks\n let currentStep = 0\n let tickPath = `M${x},0`\n const mod = orient === \"bottom\" ? -1 : 1\n while (currentStep <= height) {\n tickPath += `L${x},${currentStep}`\n if (currentStep < height) {\n tickPath += `L${x + 10 * mod},${currentStep + step / 2}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst generateTornBaseline = (orient, baselineSettings) => {\n let tornD = \"\"\n const { x1, x2, y1, y2 } = baselineSettings\n if (orient === \"left\" || orient === \"right\") {\n const calcWidth = Math.abs(x2 - x1)\n const ticks = Math.ceil(calcWidth / 40)\n tornD = horizontalTornTickGenerator(\n calcWidth,\n ticks,\n orient === \"right\" ? 0 : y1,\n orient\n )\n } else {\n const calcHeight = Math.abs(y2 - y1)\n const ticks = Math.ceil(calcHeight / 40)\n tornD = verticalTornTickGenerator(calcHeight, ticks, x1, orient)\n }\n return tornD\n}\n\nconst defaultTickLineGenerator = ({\n xy,\n orient,\n i,\n \n className = \"\",\n jaggedBase\n}) => {\n let genD = `M${xy.x1},${xy.y1}L${xy.x2},${xy.y2}`\n if (jaggedBase && i === 0) {\n genD = generateTornBaseline(orient, xy)\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nconst outboundTickLineGenerator = ({ xy, orient, i, className = \"\" }) => {\n const tickLength = 8\n let genD = `M-4,${xy.y1}L${xy.x1},${xy.y2}`\n if (orient === \"left\") {\n genD = `M${xy.x1 - tickLength},${xy.y1}L${xy.x1},${xy.y2}`\n } else if (orient === \"right\") {\n genD = `M${xy.x2},${xy.y1}L${xy.x2 + tickLength},${xy.y2}`\n } else if (orient === \"top\") {\n genD = `M${xy.x1},${xy.y1 - tickLength}L${xy.x1},${xy.y1}`\n } else if (orient === \"bottom\") {\n genD = `M${xy.x1},${xy.y2}L${xy.x1},${xy.y2 + tickLength}`\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`outbound-tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nexport function generateTickValues(tickValues, ticks, scale) {\n const axisSize = Math.abs(scale.range()[1] - scale.range()[0])\n\n if (!tickValues) {\n if (!ticks) {\n ticks = Math.max(1, Math.floor(axisSize / 40))\n }\n tickValues = (scale.ticks && scale.ticks(ticks)) || scale.domain()\n }\n\n return tickValues\n}\n\nexport function axisPieces({\n renderMode = () => undefined,\n padding = 5,\n scale,\n ticks,\n tickValues = generateTickValues(undefined, ticks, scale),\n orient = \"left\",\n size,\n footer = false,\n tickSize = footer\n ? -10\n : [\"top\", \"bottom\"].find((d) => d === orient)\n ? (size ? size[1] : 0)\n : (size ? size[0] : 0),\n jaggedBase\n}: AxisPiecesFnType) {\n //returns x1 (start of line), x2 (end of line) associated with the value of the tick\n let axisDomain = [],\n position1,\n position2,\n domain1,\n domain2,\n tposition1,\n tposition2,\n textPositionMod = 0,\n textPositionMod2 = 0,\n defaultAnchor = \"middle\"\n\n switch (orient) {\n case \"top\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y1\"\n domain2 = \"y2\"\n axisDomain = [0, tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod -= 20 - padding\n break\n case \"bottom\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y2\"\n domain2 = \"y1\"\n axisDomain = size ? [size[1], size[1] - tickSize] : [0, -tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod += 20 + padding\n break\n case \"right\":\n position1 = \"y2\"\n position2 = \"y1\"\n domain1 = \"x2\"\n domain2 = \"x1\"\n axisDomain = size ? [size[0], size[0] - tickSize] : [0, -tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod += 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"start\"\n break\n //left\n default:\n position1 = \"y1\"\n position2 = \"y2\"\n domain1 = \"x1\"\n domain2 = \"x2\"\n axisDomain = [0, tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod -= 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"end\"\n break\n }\n let generatedTicks =\n tickValues instanceof Function ? tickValues({ orient }) : tickValues\n\n if (\n jaggedBase &&\n generatedTicks.find((t) => t === scale.domain()[0]) === undefined\n ) {\n generatedTicks = [scale.domain()[0], ...generatedTicks]\n }\n\n return generatedTicks.map((tick, i) => {\n const tickPosition = scale(tick)\n\n return {\n [position1]: tickPosition,\n [position2]: tickPosition,\n [domain1]: axisDomain[0],\n [domain2]: axisDomain[1],\n [tposition1]: tickPosition + textPositionMod2,\n [tposition2]: axisDomain[0] + textPositionMod,\n defaultAnchor,\n renderMode: renderMode(tick, i),\n value: tick\n }\n })\n}\n\nexport const axisLabels = ({\n axisParts,\n tickFormat,\n rotate = 0,\n center = false,\n orient\n}) => {\n // Pre-format all values\n const entries = axisParts.map((axisPart, i) => ({\n axisPart,\n i,\n formatted: tickFormat(axisPart.value, i)\n }))\n\n // Collision-aware filtering: skip labels that would overlap.\n // Only applies to non-rotated text labels (rotation changes bounding box).\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n const isVertical = orient === \"left\" || orient === \"right\"\n let visible = entries\n\n if (!rotate && entries.length > 1) {\n const CHAR_WIDTH = 8\n const LINE_HEIGHT = 14\n const MIN_GAP = 8\n\n const textOf = (formatted) => {\n if (typeof formatted === \"string\") return formatted\n if (typeof formatted === \"number\") return String(formatted)\n return null // React element — can't estimate width, always keep\n }\n\n if (isHorizontal) {\n const sorted = [...entries].sort((a, b) => a.axisPart.tx - b.axisPart.tx)\n let lastRight = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n const text = textOf(entry.formatted)\n if (!text) { keep.add(entry.i); continue }\n const halfW = (text.length * CHAR_WIDTH) / 2\n if (entry.axisPart.tx - halfW >= lastRight + MIN_GAP) {\n keep.add(entry.i)\n lastRight = entry.axisPart.tx + halfW\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n } else if (isVertical) {\n const sorted = [...entries].sort((a, b) => a.axisPart.ty - b.axisPart.ty)\n let lastBottom = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n if (entry.axisPart.ty >= lastBottom + LINE_HEIGHT + MIN_GAP) {\n keep.add(entry.i)\n lastBottom = entry.axisPart.ty\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n }\n }\n\n return visible.map(({ axisPart, i, formatted: renderedValue }) => {\n if (typeof renderedValue !== \"object\" || renderedValue instanceof Date) {\n renderedValue = (\n <text textAnchor={axisPart.defaultAnchor} className=\"axis-label\">\n {renderedValue.toString ? renderedValue.toString() : renderedValue}\n </text>\n )\n }\n\n let textX = axisPart.tx\n let textY = axisPart.ty\n if (center) {\n switch (orient) {\n case \"right\":\n textX -= (axisPart.x2 - axisPart.x1) / 2\n break\n case \"left\":\n textX += (axisPart.x2 - axisPart.x1) / 2\n break\n case \"top\":\n textY += (axisPart.y2 - axisPart.y1) / 2\n break\n case \"bottom\":\n textY -= (axisPart.y2 - axisPart.y1) / 2\n break\n }\n }\n\n return (\n <g\n key={i}\n pointerEvents=\"none\"\n transform={`translate(${textX},${textY}) rotate(${rotate})`}\n className=\"axis-label\"\n >\n {renderedValue}\n </g>\n )\n })\n}\n\nexport const baselineGenerator = (orient, size, className) => {\n const offsets = {\n left: { x: 0, y: 0, width: 0, height: size ? size[1] : 0 },\n right: { x: size ? size[0] : 0, y: 0, width: 0, height: size ? size[1] : 0 },\n top: { x: 0, y: 0, width: size ? size[0] : 0, height: 0 },\n bottom: { x: 0, y: size ? size[1] : 0, width: size ? size[0] : 0, height: 0 }\n }\n\n const orientOffset = offsets[orient]\n\n return (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"currentColor\"\n strokeLinecap=\"square\"\n x1={orientOffset.x}\n x2={orientOffset.x + orientOffset.width}\n y1={orientOffset.y}\n y2={orientOffset.y + orientOffset.height}\n />\n )\n}\n\nexport const axisLines = ({\n axisParts,\n orient,\n tickLineGenerator = defaultTickLineGenerator,\n \n className,\n jaggedBase,\n scale,\n showOutboundTickLines = false\n}: {\n axisParts: object[]\n orient: string\n tickLineGenerator: Function\n className: string\n jaggedBase?: boolean\n scale: ScaleLinear<number, number>\n showOutboundTickLines?: boolean\n}) => {\n const axisLines = axisParts.map((axisPart, i) =>\n tickLineGenerator({\n xy: axisPart,\n orient,\n i,\n \n className,\n jaggedBase,\n scale\n })\n ) as React.ReactNode[]\n\n const outboundAxisLines = showOutboundTickLines\n ? (axisParts.map((axisPart, i) =>\n outboundTickLineGenerator({\n xy: axisPart,\n orient,\n i,\n className\n })\n ) as React.ReactNode)\n : []\n\n return [...axisLines, outboundAxisLines]\n}\n","import React from \"react\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\nexport interface SummaryGraphicProps {\n translation: {\n left: Array<number>\n right: Array<number>\n top: Array<number>\n bottom: Array<number>\n }\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n decoratedSummaryType: {\n type: string\n }\n summaryWidth: number\n renderedSummary: any\n points?: React.ReactNode\n}\n\nfunction translateX({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"left\" || o === \"right\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nfunction translateY({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"top\" || o === \"bottom\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nexport default function SummaryGraphic(props: SummaryGraphicProps) {\n const {\n translation,\n orient,\n decoratedSummaryType,\n summaryWidth,\n renderedSummary,\n points\n } = props\n return (\n <g\n className=\"marginal-graphics\"\n transform={`translate(${translation[orient]})`}\n >\n <g\n transform={`translate(${translateX({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })},${translateY({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })})`}\n >\n {renderedSummary}\n </g>\n {points}\n </g>\n )\n}\n","import React from 'react';\n\nexport interface AxisTitleProps {\n className: string,\n translation: Array<number>,\n position: Array<number>,\n rotation: number | string,\n labelName: any,\n anchorMod: \"inherit\" | \"middle\" | \"end\" | \"start\"\n}\n\nexport default function AxisTitle(props: AxisTitleProps) { \n const { className, translation, position, rotation, labelName, anchorMod } = props;\n return (\n <g\n className={`axis-title ${className}`}\n transform={`translate(${[\n translation[0] + position[0],\n translation[1] + position[1]\n ]}) rotate(${rotation})`}\n >\n {React.isValidElement(labelName) ? (\n labelName\n ) : (\n <text textAnchor={anchorMod}>{labelName}</text>\n )}\n </g>\n )\n}","import * as React from \"react\"\nimport { timeFormat } from \"d3-time-format\"\nimport { format as d3Format } from \"d3-format\"\n\n/**\n * Format number with specified format string\n *\n * @param value - Number to format\n * @param formatString - D3 format string (e.g., \".2f\", \",.0f\", \".1%\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-format#format for format string options\n */\nexport function formatNumber(value: number, formatString: string = \",.0f\"): string {\n try {\n return d3Format(formatString)(value)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Format date with specified format string\n *\n * @param value - Date to format\n * @param formatString - D3 time format string (e.g., \"%Y-%m-%d\", \"%b %d\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-time-format#timeFormat for format string options\n */\nexport function formatDate(value: Date | number | string, formatString: string = \"%b %d, %Y\"): string {\n try {\n const date = value instanceof Date ? value : new Date(value)\n return timeFormat(formatString)(date)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Creates a formatting function based on the type\n *\n * @param type - Type of formatting: 'number', 'date', 'percent', or 'currency'\n * @param options - Optional configuration for the formatter\n * @returns Formatting function\n *\n * @example\n * ```ts\n * const fmt = formatAxis('number', { decimals: 2 })\n * fmt(1234.567) // \"1,234.57\"\n *\n * const dateFmt = formatAxis('date', { format: '%b %Y' })\n * dateFmt(new Date()) // \"Jan 2024\"\n * ```\n */\nexport function formatAxis(\n type: \"number\" | \"date\" | \"percent\" | \"currency\" = \"number\",\n options?: {\n decimals?: number\n format?: string\n currency?: string\n }\n): (d: any) => string {\n const { decimals = 0, format: customFormat, currency = \"$\" } = options || {}\n\n switch (type) {\n case \"date\":\n return (d) => formatDate(d, customFormat || \"%b %d\")\n\n case \"percent\":\n return (d) => formatNumber(d, customFormat || `.${decimals}%`)\n\n case \"currency\":\n return (d) => `${currency}${formatNumber(d, customFormat || `,.${decimals}f`)}`\n\n case \"number\":\n default:\n return (d) => formatNumber(d, customFormat || `,.${decimals}f`)\n }\n}\n\n/**\n * Creates a tooltip content generator\n *\n * @param fields - Array of field names to display\n * @param formatters - Optional map of field names to formatting functions\n * @param labels - Optional map of field names to display labels\n * @returns React element generator function\n *\n * @example\n * ```ts\n * const tooltip = createTooltip(\n * ['category', 'value'],\n * { value: d => formatNumber(d, ',.2f') },\n * { category: 'Category', value: 'Value' }\n * )\n * ```\n */\nexport function createTooltip(\n fields: string[],\n formatters?: Record<string, (v: any) => string>,\n labels?: Record<string, string>\n): (d: any) => JSX.Element {\n return (d: any) => {\n return React.createElement(\n \"div\",\n { className: \"tooltip-content\", style: { padding: \"8px\" } },\n fields.map((field) => {\n const label = labels?.[field] || field\n const value = d[field]\n const formatter = formatters?.[field]\n const displayValue = formatter ? formatter(value) : String(value)\n\n return React.createElement(\n \"div\",\n { key: field, style: { marginBottom: \"4px\" } },\n React.createElement(\"strong\", null, `${label}: `),\n displayValue\n )\n })\n )\n }\n}\n\n/**\n * Formats large numbers with K/M/B suffixes\n *\n * @param value - Number to format\n * @param decimals - Number of decimal places\n * @returns Formatted string with suffix\n *\n * @example\n * ```ts\n * formatLargeNumber(1234) // \"1.2K\"\n * formatLargeNumber(1234567) // \"1.2M\"\n * formatLargeNumber(1234567890) // \"1.2B\"\n * ```\n */\nexport function formatLargeNumber(value: number, decimals: number = 1): string {\n if (value >= 1e9) {\n return (value / 1e9).toFixed(decimals) + \"B\"\n }\n if (value >= 1e6) {\n return (value / 1e6).toFixed(decimals) + \"M\"\n }\n if (value >= 1e3) {\n return (value / 1e3).toFixed(decimals) + \"K\"\n }\n return value.toFixed(decimals)\n}\n\n/**\n * Smart default tick format for axis labels.\n *\n * Handles the common problems with raw number-to-string conversion:\n * - Floating-point noise (0.30000000000000004 → \"0.3\")\n * - Excessive precision (62.123456789 → \"62.1235\")\n * - Large numbers (1500000 → \"1.5M\")\n * - Strings/non-numbers pass through unchanged\n *\n * Used as the default axis tickFormat when no explicit format is provided.\n */\nexport function smartTickFormat(value: any): string {\n if (value == null) return \"\"\n if (typeof value !== \"number\") return String(value)\n if (!isFinite(value)) return String(value)\n if (value === 0) return \"0\"\n\n // Clean floating-point noise (e.g., 0.30000000000000004 → 0.3)\n const cleaned = parseFloat(value.toPrecision(12))\n const abs = Math.abs(cleaned)\n\n // Large numbers: compact suffixes\n if (abs >= 1e9) return `${parseFloat((cleaned / 1e9).toPrecision(3))}B`\n if (abs >= 1e6) return `${parseFloat((cleaned / 1e6).toPrecision(3))}M`\n if (abs >= 1e4) return `${parseFloat((cleaned / 1e3).toPrecision(3))}K`\n\n // Integers: no decimals needed\n if (Number.isInteger(cleaned)) return String(cleaned)\n\n // Floats: up to 6 significant digits, trailing zeros stripped\n return String(parseFloat(cleaned.toPrecision(6)))\n}\n\n/**\n * Truncates text to specified length with ellipsis\n *\n * @param text - Text to truncate\n * @param maxLength - Maximum length before truncation\n * @returns Truncated text\n */\nexport function truncateText(text: string, maxLength: number = 20): string {\n if (text.length <= maxLength) {\n return text\n }\n return text.slice(0, maxLength - 3) + \"...\"\n}\n","import * as React from \"react\"\n\nimport { ProjectionTypes } from \"../types/generalTypes\"\n\ntype SummaryType = { type: string | Function }\n\ntype ORFrameSummaryRendererTypes = {\n data: Array<object>\n type: SummaryType\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: Array<number>\n chartSize: number\n margin: object\n axisCreator?: Function\n}\n\nexport function orFrameSummaryRenderer({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n}: ORFrameSummaryRendererTypes) {\n if (typeof type.type === \"function\") {\n return type.type({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n }\n console.error(\n `Invalid summary type: ${type.type} - Must be a function`\n )\n return {}\n}\n\n/**\n * Main drawing function for summary visualizations\n */\nexport const drawSummaries = ({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n margin,\n axisCreator\n}: {\n data: object\n type: { type?: string | Function }\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: number[]\n margin: object\n axisCreator?: Function\n}) => {\n if (!type || !type.type) return\n type = typeof type === \"string\" ? { type } : type\n const chartSize =\n projection === \"vertical\" ? adjustedSize[1] : adjustedSize[0]\n\n return orFrameSummaryRenderer({\n data: data as unknown as Array<object>,\n type: type as SummaryType,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n}\n\ninterface summaryInstruction {\n Mark?: JSX.Element\n containerProps?: object\n elements: object[]\n}\n\n/**\n * Converts summary instructions to rendered SVG elements\n */\nexport function summaryInstructionsToMarks(data: summaryInstruction[]) {\n const renderedSummaries: JSX.Element[] = []\n for (const container of data) {\n const renderedElements: JSX.Element[] = []\n const { elements, containerProps} = container\n if (container.Mark) {\n renderedSummaries.push(container.Mark)\n } else {\n for (let i = 0; i < elements.length; i++) {\n const element: Record<string, any> = elements[i] as Record<string, any>\n const { markType, style = {}, ...restProps } = element\n\n // Merge style object into direct props for cleaner SVG\n const elementProps: Record<string, any> = { ...restProps }\n if (style.fill !== undefined) elementProps.fill = style.fill\n if (style.stroke !== undefined) elementProps.stroke = style.stroke\n if (style.strokeWidth !== undefined) elementProps.strokeWidth = style.strokeWidth\n if (style.opacity !== undefined) elementProps.opacity = style.opacity\n if (style.fillOpacity !== undefined) elementProps.fillOpacity = style.fillOpacity\n if (style.strokeOpacity !== undefined) elementProps.strokeOpacity = style.strokeOpacity\n\n // Keep remaining styles\n const remainingStyles: Record<string, any> = { ...style }\n delete remainingStyles.fill\n delete remainingStyles.stroke\n delete remainingStyles.strokeWidth\n delete remainingStyles.opacity\n delete remainingStyles.fillOpacity\n delete remainingStyles.strokeOpacity\n if (Object.keys(remainingStyles).length > 0) {\n elementProps.style = remainingStyles\n }\n\n elementProps.key = element.key || i\n\n if (markType) {\n renderedElements.push(React.createElement(markType, elementProps))\n }\n }\n if (containerProps) {\n renderedSummaries.push(<g {...containerProps}>{renderedElements}</g>)\n } else {\n renderedSummaries.push(...renderedElements)\n }\n }\n }\n return renderedSummaries\n}\n\n","import * as React from \"react\"\nimport { useEffect, useState, useRef } from \"react\"\n\nimport {\n axisLabels,\n axisPieces,\n axisLines\n} from \"./../visualizationLayerBehavior/axis\"\n\nimport SummaryGraphic from \"./summaryGraphic\"\nimport AxisTitle from \"./axisTitle\"\n\nimport { AxisProps } from \"./../types/annotationTypes\"\nimport { smartTickFormat } from \"./../charts/shared/formatUtils\"\n\nimport {\n drawSummaries,\n summaryInstructionsToMarks\n} from \"./../geometry/summaryLayouts\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\n// components\n\nconst marginalPointMapper = (orient, width, data) => {\n const xMod = orient === \"left\" || orient === \"right\" ? width / 2 : 0\n const yMod = orient === \"bottom\" || orient === \"top\" ? width / 2 : 0\n return data.map((p) => [p.xy.x + xMod, p.xy.y + yMod])\n}\n\nfunction formatValue(value, props) {\n if (props.tickFormat) {\n return props.tickFormat(value)\n }\n if (value.toString) {\n return value.toString()\n }\n return value\n}\n\nconst boundingBoxMax = (axisNode, orient) => {\n const axisRef = axisNode.current\n if (!axisRef) return 30\n\n const positionType =\n orient === \"left\" || orient === \"right\" ? \"width\" : \"height\"\n\n const axisLabelMax =\n Math.max(\n ...[...axisRef.querySelectorAll(\".axis-label\")]\n .map(\n (l: { getBBox: Function }) =>\n (l.getBBox && l.getBBox()) || { height: 30, width: 30 }\n )\n .map((d) => d[positionType])\n ) + 25\n\n return axisLabelMax\n}\n\nexport default function Axis(props: AxisProps) {\n const {\n rotate,\n label,\n dynamicLabelPosition,\n orient = \"left\",\n marginalSummaryType,\n tickFormat = marginalSummaryType ? () => \"\" : smartTickFormat,\n size,\n width = (size && size[0]) || 0,\n height = (size && size[1]) || 0,\n className,\n padding,\n tickValues,\n scale,\n ticks,\n footer,\n tickSize,\n tickLineGenerator,\n baseline = true,\n margin = { top: 0, bottom: 0, left: 0, right: 0 },\n center = false,\n annotationFunction,\n glyphFunction,\n xyPoints\n } = props\n\n const [hoverPosition, changeHoverPosition] = useState(0)\n const [calculatedLabelPosition, changeCalculatedLabelPosition] =\n useState(undefined)\n\n const axisNode = useRef(null)\n\n useEffect(() => {\n if (!label?.position && dynamicLabelPosition) {\n const newBBMax = boundingBoxMax(axisNode, orient)\n if (newBBMax !== calculatedLabelPosition) {\n changeCalculatedLabelPosition(newBBMax)\n }\n }\n }, [label, dynamicLabelPosition])\n\n let { axisParts, position = [0, 0] } = props\n\n let axisTickLines\n\n if (!axisParts) {\n axisParts = axisPieces({\n padding: padding,\n tickValues,\n scale,\n ticks,\n orient,\n size: [width, height],\n footer,\n tickSize\n })\n axisTickLines = (\n <g className={`axis ${className}`}>\n {axisLines({\n axisParts,\n orient,\n tickLineGenerator,\n className,\n scale\n })}\n </g>\n )\n }\n if (axisParts.length === 0) {\n return null\n }\n\n let hoverWidth = 50\n let hoverHeight = height\n let hoverX = -50\n let hoverY = 0\n let baselineX = 0\n let baselineY = 0\n let baselineX2 = 0\n let baselineY2 = height\n // hoverFunction is set is switch(orient) below\n let hoverFunction\n let circleX = 25\n let textX = -25\n let textY = 18\n let lineWidth = width + 25\n let lineHeight = 0\n let circleY = hoverPosition\n let annotationOffset = 0\n let annotationType = \"y\"\n\n switch (orient) {\n case \"right\":\n position = [position[0], position[1]]\n hoverX = width\n baselineX2 = baselineX = width\n annotationOffset = margin.top\n lineWidth = -width - 25\n textX = 5\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n break\n case \"top\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n hoverY = -50\n hoverX = 0\n annotationOffset = margin.left\n annotationType = \"x\"\n baselineX2 = width\n baselineY2 = 0\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = -10\n lineWidth = 0\n lineHeight = height + 25\n break\n case \"bottom\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n baselineY = baselineY2 = hoverY = height\n baselineX = hoverX = 0\n baselineX2 = width\n annotationOffset = margin.left\n\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = 15\n lineWidth = 0\n lineHeight = -height - 25\n annotationType = \"x\"\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n break\n default:\n position = [position[0], position[1]]\n annotationOffset = margin.top\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n }\n\n let annotationBrush\n\n if (annotationFunction) {\n const formattedValue = formatValue(scale.invert(hoverPosition), props)\n const hoverGlyph: any = glyphFunction ? (\n glyphFunction({\n lineHeight,\n lineWidth,\n value: scale.invert(hoverPosition)\n })\n ) : (\n <g>\n {React.isValidElement(formattedValue) ? (\n <g transform={`translate(${textX},${textY})`}>{formattedValue}</g>\n ) : (\n <text x={textX} y={textY}>\n {formattedValue}\n </text>\n )}\n <circle r={5} />\n <line x1={lineWidth} y1={lineHeight} style={{ stroke: \"black\" }} />\n </g>\n )\n const annotationSymbol = hoverPosition ? (\n <g\n style={{ pointerEvents: \"none\" }}\n transform={`translate(${circleX},${circleY})`}\n >\n {hoverGlyph}\n </g>\n ) : null\n\n annotationBrush = (\n <g\n className=\"annotation-brush\"\n transform={`translate(${hoverX},${hoverY})`}\n >\n <rect\n style={{ fillOpacity: 0 }}\n height={hoverHeight}\n width={hoverWidth}\n onMouseMove={hoverFunction}\n onClick={(e) =>\n annotationFunction({\n className: \"dynamic-axis-annotation\",\n type: annotationType,\n value: scale.invert(hoverPosition),\n e\n })\n }\n onMouseOut={() => {\n changeHoverPosition(undefined)\n }}\n />\n {annotationSymbol}\n </g>\n )\n }\n\n let summaryGraphic\n\n if (marginalSummaryType && xyPoints) {\n const summaryWidth = Math.max(margin[orient] - 6, 5)\n\n const decoratedSummaryType: AxisSummaryTypeSettings =\n typeof marginalSummaryType === \"string\"\n ? { type: marginalSummaryType }\n : marginalSummaryType\n\n if (\n decoratedSummaryType.flip === undefined &&\n (orient === \"bottom\" || orient === \"right\")\n ) {\n decoratedSummaryType.flip = true\n }\n\n const summaryStyle = decoratedSummaryType.summaryStyle\n ? () => decoratedSummaryType.summaryStyle\n : () => ({\n fill: \"black\",\n fillOpacity: 0.5,\n stroke: \"black\",\n strokeDasharray: \"0\"\n })\n\n const summaryRenderMode = decoratedSummaryType.renderMode\n ? () => decoratedSummaryType.renderMode\n : () => undefined\n\n const summaryClass = decoratedSummaryType.summaryClass\n ? () => decoratedSummaryType.summaryClass\n : () => \"\"\n\n const dataFilter = decoratedSummaryType.filter || (() => true)\n\n const forSummaryData = xyPoints\n .filter(\n (p: { x?: number; y?: number; data?: object }) =>\n p.x !== undefined && p.y !== undefined && dataFilter(p.data)\n )\n .map((d: { x: number; y: number }) => ({\n ...d,\n xy: {\n x: orient === \"top\" || orient === \"bottom\" ? scale(d.x) : 0,\n y: orient === \"left\" || orient === \"right\" ? scale(d.y) : 0\n },\n piece: {\n scaledVerticalValue: scale(d.y),\n scaledValue: scale(d.x)\n },\n value:\n orient === \"top\" || orient === \"bottom\" ? scale(d.y) : scale(d.x),\n scaledValue: scale(d.x),\n scaledVerticalValue: scale(d.y)\n }))\n\n const calculatedSummary = drawSummaries({\n data: {\n column: {\n middle: summaryWidth / 2,\n pieceData: forSummaryData,\n width: summaryWidth,\n xyData: forSummaryData\n }\n },\n type: decoratedSummaryType,\n renderMode: summaryRenderMode,\n eventListenersGenerator:\n decoratedSummaryType.eventListenersGenerator || (() => ({})),\n styleFn: summaryStyle,\n classFn: summaryClass,\n projection:\n orient === \"top\" || orient === \"bottom\" ? \"horizontal\" : \"vertical\",\n adjustedSize: size,\n margin: { top: 0, bottom: 0, left: 0, right: 0 }\n })\n\n const renderedSummary = summaryInstructionsToMarks(calculatedSummary.marks)\n\n let points\n\n if (decoratedSummaryType.showPoints === true) {\n const mappedPoints = marginalPointMapper(\n orient,\n summaryWidth,\n forSummaryData\n )\n\n points = mappedPoints.map((d, i) => (\n <circle\n key={`axis-summary-point-${i}`}\n cx={d[0]}\n cy={d[1]}\n r={decoratedSummaryType.r || 3}\n style={\n decoratedSummaryType.pointStyle || {\n fill: \"black\",\n fillOpacity: 0.1\n }\n }\n />\n ))\n }\n\n const translation = {\n left: [-margin.left + 2, 0],\n right: [size[0] + 2, 0],\n top: [0, -margin.top + 2],\n bottom: [0, size[1] + 2]\n }\n\n summaryGraphic = (\n <SummaryGraphic\n translation={translation}\n orient={orient}\n decoratedSummaryType={decoratedSummaryType}\n summaryWidth={summaryWidth}\n renderedSummary={renderedSummary}\n points={points}\n />\n )\n }\n\n let axisTitle\n\n const axisTickLabels = axisLabels({\n tickFormat,\n axisParts,\n orient,\n rotate,\n center\n })\n if (label) {\n const labelName: any = label.name || label\n const labelPosition = label.position || {}\n const locationMod = labelPosition.location || \"outside\"\n let anchorMod = (labelPosition.anchor || \"middle\") as \"inherit\" | \"middle\" | \"end\" | \"start\"\n const distance = label.locationDistance || calculatedLabelPosition\n\n const rotateHash = {\n left: -90,\n right: 90,\n top: 0,\n bottom: 0\n }\n\n const rotation = labelPosition.rotation || rotateHash[orient]\n\n const positionHash = {\n left: {\n start: [0, size[1]],\n middle: [0, size[1] / 2],\n end: [0, 0],\n inside: [distance || 15, 0],\n outside: [-(distance || 45), 0]\n },\n right: {\n start: [size[0] + 0, size[1]],\n middle: [size[0] + 0, size[1] / 2],\n end: [size[0] + 0, 0],\n inside: [-(distance || 15), 0],\n outside: [distance || 45, 0]\n },\n top: {\n start: [0, 0],\n middle: [0 + size[0] / 2, 0],\n end: [0 + size[0], 0],\n inside: [0, distance || 15],\n outside: [0, -(distance || 40)]\n },\n bottom: {\n start: [0, size[1]],\n middle: [0 + size[0] / 2, size[1]],\n end: [0 + size[0], size[1]],\n inside: [0, -(distance || 5)],\n outside: [0, distance || 50]\n }\n }\n\n const translation = positionHash[orient][anchorMod]\n const location = positionHash[orient][locationMod]\n\n translation[0] = translation[0] + location[0]\n translation[1] = translation[1] + location[1]\n\n if (anchorMod === \"start\" && orient === \"right\") {\n anchorMod = \"end\"\n } else if (anchorMod === \"end\" && orient === \"right\") {\n anchorMod = \"start\"\n }\n\n axisTitle = (\n <AxisTitle\n className={className}\n translation={translation}\n position={position}\n rotation={rotation}\n labelName={labelName}\n anchorMod={anchorMod}\n />\n )\n }\n\n const axisAriaLabel = `${orient} axis ${\n (axisParts &&\n axisParts.length > 0 &&\n `from ${tickFormat(axisParts[0].value, 0)} to ${tickFormat(\n axisParts[axisParts.length - 1].value,\n axisParts.length - 1\n )}`) ||\n \"without ticks\"\n }`\n\n return (\n <g className={className} aria-label={axisAriaLabel} ref={axisNode}>\n {annotationBrush}\n {axisTickLabels}\n {axisTickLines}\n {baseline === true ? (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"black\"\n strokeLinecap=\"square\"\n x1={baselineX}\n x2={baselineX2}\n y1={baselineY}\n y2={baselineY2}\n />\n ) : null}\n {axisTitle}\n {summaryGraphic}\n </g>\n )\n}\n\nexport { marginalPointMapper, formatValue, boundingBoxMax }\n","import * as React from \"react\"\n\nimport { AnnotationProps } from \"./types/annotationTypes\"\n\nfunction wrapText(\n text: string,\n wrap: number = 120,\n charWidth: number = 8\n): string[] {\n if (!text) return []\n const maxChars = Math.max(1, Math.floor(wrap / charWidth))\n const words = text.split(/\\s+/)\n const lines: string[] = []\n let currentLine = \"\"\n\n for (const word of words) {\n if (currentLine && currentLine.length + 1 + word.length > maxChars) {\n lines.push(currentLine)\n currentLine = word\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word\n }\n }\n if (currentLine) lines.push(currentLine)\n return lines\n}\n\nfunction bracketPath(\n type: string,\n span: number,\n depth: number,\n isVertical: boolean\n): string {\n if (type === \"curly\") {\n if (isVertical) {\n return `M0,0 C${depth * 0.6},0 ${depth * 0.4},${span / 2} ${depth},${span / 2} C${depth * 0.4},${span / 2} ${depth * 0.6},${span} 0,${span}`\n }\n return `M0,0 C0,${depth * 0.6} ${span / 2},${depth * 0.4} ${span / 2},${depth} C${span / 2},${depth * 0.4} ${span},${depth * 0.6} ${span},0`\n }\n // square bracket\n if (isVertical) {\n return `M0,0 L${depth},0 L${depth},${span} L0,${span}`\n }\n return `M0,0 L0,${depth} L${span},${depth} L${span},0`\n}\n\nfunction renderNote(\n note: {\n label?: string\n title?: string\n orientation?: string\n align?: string\n wrap?: number\n noWrap?: boolean\n },\n dx: number,\n dy: number,\n color?: string\n) {\n if (!note) return <g className=\"annotation-note\" />\n const {\n label,\n title,\n orientation: explicitOrientation,\n align: explicitAlign,\n wrap = 120,\n noWrap\n } = note\n\n if (!label && !title) return <g className=\"annotation-note\" />\n\n let orientation = explicitOrientation\n if (!orientation) {\n orientation = Math.abs(dx) > Math.abs(dy) ? \"leftRight\" : \"topBottom\"\n }\n\n let align = explicitAlign\n if (!align || align === \"dynamic\") {\n if (orientation === \"topBottom\") {\n align = dx >= 0 ? \"left\" : \"right\"\n } else {\n align = dy >= 0 ? \"top\" : \"bottom\"\n }\n }\n\n let textAnchor: \"start\" | \"middle\" | \"end\" = \"start\"\n if (orientation === \"topBottom\") {\n if (align === \"right\") textAnchor = \"end\"\n else if (align === \"middle\") textAnchor = \"middle\"\n } else {\n textAnchor = dx >= 0 ? \"start\" : \"end\"\n }\n\n const lineHeight = 16\n const padding = 4\n const titleLines =\n title ? (noWrap ? [title] : wrapText(title, wrap)) : []\n const labelLines =\n label ? (noWrap ? [label] : wrapText(label, wrap)) : []\n\n // For leftRight orientation, offset text horizontally away from the note-line\n const textX = orientation === \"leftRight\"\n ? (textAnchor === \"end\" ? -padding : padding)\n : 0\n\n let yOffset = 0\n const textElements: React.ReactElement[] = []\n\n if (titleLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-title\"\n className=\"annotation-note-title\"\n fill={color || undefined}\n textAnchor={textAnchor}\n fontWeight=\"bold\"\n >\n {titleLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? 0 : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n yOffset = titleLines.length * lineHeight\n }\n\n if (labelLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-label\"\n className=\"annotation-note-label\"\n fill={color || undefined}\n textAnchor={textAnchor}\n y={yOffset}\n >\n {labelLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? lineHeight : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n }\n\n let noteLine = null\n if ((title || label) && (dx !== 0 || dy !== 0)) {\n if (orientation === \"topBottom\") {\n const lineWidth = Math.min(wrap, 120)\n let x1 = 0\n let x2 = lineWidth\n if (textAnchor === \"end\") {\n x1 = -lineWidth\n x2 = 0\n } else if (textAnchor === \"middle\") {\n x1 = -lineWidth / 2\n x2 = lineWidth / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={x1}\n x2={x2}\n y1={0}\n y2={0}\n stroke={color || \"currentColor\"}\n />\n )\n } else {\n const totalHeight =\n (titleLines.length + labelLines.length) * lineHeight +\n (labelLines.length > 0 ? lineHeight : 0)\n let y1 = 0\n let y2 = totalHeight\n if (align === \"bottom\") {\n y1 = -totalHeight\n y2 = 0\n } else if (align === \"middle\") {\n y1 = -totalHeight / 2\n y2 = totalHeight / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={0}\n x2={0}\n y1={y1}\n y2={y2}\n stroke={color || \"currentColor\"}\n />\n )\n }\n }\n\n // Compute vertical offset for note content based on orientation and alignment.\n // The label's first tspan adds an extra lineHeight gap below the title,\n // so total visual height is larger when a label is present.\n const totalLines = titleLines.length + labelLines.length\n const totalTextHeight = totalLines * lineHeight\n const labelGap = labelLines.length > 0 ? lineHeight : 0\n const visualHeight = totalTextHeight + labelGap\n let contentYOffset = 0\n\n if (orientation === \"topBottom\") {\n if (dy < 0) {\n contentYOffset = -visualHeight\n }\n } else if (orientation === \"leftRight\") {\n if (align === \"middle\") {\n contentYOffset = -(visualHeight / 2)\n } else if (align === \"bottom\" || dy < 0) {\n contentYOffset = -visualHeight\n }\n }\n\n const contentTransform = contentYOffset !== 0\n ? `translate(0,${contentYOffset})`\n : undefined\n\n return (\n <g className=\"annotation-note\" transform={`translate(${dx},${dy})`}>\n <g className=\"annotation-note-content\" transform={contentTransform}>{textElements}</g>\n {noteLine}\n </g>\n )\n}\n\nfunction renderSubject(\n type: string,\n subject: any,\n color?: string,\n annotX?: number,\n annotY?: number\n) {\n const elements: React.ReactElement[] = []\n\n switch (type) {\n case \"callout-circle\": {\n const totalRadius =\n (subject?.radius || 0) + (subject?.radiusPadding || 0)\n if (totalRadius > 0) {\n elements.push(\n <circle\n key=\"subject-circle\"\n r={totalRadius}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-rect\": {\n const width = subject?.width || 0\n const height = subject?.height || 0\n if (width > 0 || height > 0) {\n elements.push(\n <rect\n key=\"subject-rect\"\n width={width}\n height={height}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-custom\": {\n if (subject?.custom) {\n const customElements = Array.isArray(subject.custom)\n ? subject.custom\n : [subject.custom]\n elements.push(...customElements)\n }\n break\n }\n case \"xy-threshold\": {\n const x = annotX || 0\n const y = annotY || 0\n\n if (subject?.x !== undefined) {\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n const sx = (subject.x || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={sx}\n y1={y1}\n x2={sx}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y !== undefined) {\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n const sy = (subject.y || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={sy}\n x2={x2}\n y2={sy}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.x1 !== undefined || subject?.x2 !== undefined) {\n // Horizontal threshold line when only x1/x2 provided (no subject.x or subject.y)\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={0}\n x2={x2}\n y2={0}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y1 !== undefined || subject?.y2 !== undefined) {\n // Vertical threshold line when only y1/y2 provided (no subject.x or subject.y)\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={0}\n y1={y1}\n x2={0}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n }\n break\n }\n case \"bracket\": {\n const bracketType = subject?.type || \"curly\"\n const span = subject?.width ?? subject?.height\n const depth = subject?.depth || 30\n const isVertical = subject?.width === undefined\n\n if (span !== undefined) {\n elements.push(\n <path\n key=\"bracket-path\"\n d={bracketPath(bracketType, span, depth, isVertical)}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n }\n\n return <g className=\"annotation-subject\">{elements}</g>\n}\n\nfunction renderConnector(\n dx: number,\n dy: number,\n connector: any,\n color?: string,\n type?: string,\n subject?: any\n) {\n const elements: React.ReactElement[] = []\n\n let startX = 0\n let startY = 0\n\n if (\n (type === \"callout-circle\" || type === \"label\") &&\n subject?.radius\n ) {\n const totalRadius =\n (subject.radius || 0) + (subject.radiusPadding || 0)\n if (totalRadius > 0 && (dx !== 0 || dy !== 0)) {\n const angle = Math.atan2(dy, dx)\n startX = Math.cos(angle) * totalRadius\n startY = Math.sin(angle) * totalRadius\n }\n } else if (type === \"callout-rect\" && subject) {\n const w = subject.width || 0\n const h = subject.height || 0\n if (w > 0 || h > 0) {\n const cx = w / 2\n const cy = h / 2\n const tdx = dx - cx\n const tdy = dy - cy\n if (tdx !== 0 || tdy !== 0) {\n const absTdx = Math.abs(tdx)\n const absTdy = Math.abs(tdy)\n const hw = w / 2\n const hh = h / 2\n const t =\n absTdx * hh > absTdy * hw ? hw / absTdx : hh / absTdy\n startX = cx + tdx * t\n startY = cy + tdy * t\n }\n }\n } else if (type === \"bracket\" && subject) {\n const width = subject.width\n const height = subject.height\n const depth = subject.depth || 30\n if (width !== undefined) {\n startX = width / 2\n startY = depth\n } else if (height !== undefined) {\n startX = depth\n startY = height / 2\n }\n }\n\n const connectorLength = Math.sqrt(\n (dx - startX) ** 2 + (dy - startY) ** 2\n )\n\n if (connectorLength > 0.5) {\n elements.push(\n <line\n key=\"connector-line\"\n x1={startX}\n y1={startY}\n x2={dx}\n y2={dy}\n stroke={color || \"currentColor\"}\n />\n )\n\n if (connector?.end === \"arrow\") {\n const arrowSize = 10\n const angleOffset = 16 / 180 * Math.PI\n const angle = Math.atan2(dy - startY, dx - startX)\n const a1x = startX + arrowSize * Math.cos(angle + angleOffset)\n const a1y = startY + arrowSize * Math.sin(angle + angleOffset)\n const a2x = startX + arrowSize * Math.cos(angle - angleOffset)\n const a2y = startY + arrowSize * Math.sin(angle - angleOffset)\n\n elements.push(\n <path\n key=\"connector-arrow\"\n d={`M${startX},${startY}L${a1x},${a1y}L${a2x},${a2y}Z`}\n fill={color || \"currentColor\"}\n stroke=\"none\"\n />\n )\n }\n }\n\n return <g className=\"annotation-connector\">{elements}</g>\n}\n\nfunction AnnotationRenderer(props: any) {\n const {\n x = 0,\n y = 0,\n dx: baseDx,\n dy: baseDy,\n nx,\n ny,\n note,\n connector,\n subject,\n type,\n color,\n className,\n disable,\n events = {},\n \"data-testid\": dataTestId\n } = props\n\n const disableSet = new Set(Array.isArray(disable) ? disable : [])\n\n let dx = baseDx || 0\n let dy = baseDy || 0\n\n if (nx !== undefined && nx !== null) dx = nx - x\n if (ny !== undefined && ny !== null) dy = ny - y\n\n const resolvedType = typeof type === \"string\" ? type : \"label\"\n\n // For bracket type, auto-position note at bracket midpoint tip\n if (resolvedType === \"bracket\" && subject && dx === 0 && dy === 0) {\n if (subject.width !== undefined) {\n dx = subject.width / 2\n const depthVal = subject.depth || 30\n dy = depthVal + (depthVal >= 0 ? 5 : -5)\n } else if (subject.height !== undefined) {\n const depthVal = subject.depth || 30\n dx = depthVal + (depthVal >= 0 ? 5 : -5)\n dy = subject.height / 2\n }\n }\n\n return (\n <g\n className={`annotation ${className || \"\"}`.trim()}\n transform={`translate(${x},${y})`}\n data-testid={dataTestId}\n {...events}\n >\n {!disableSet.has(\"connector\") && renderConnector(dx, dy, connector, color, resolvedType, subject)}\n {!disableSet.has(\"subject\") && renderSubject(resolvedType, subject, color, x, y)}\n {!disableSet.has(\"note\") && renderNote(note, dx, dy, color)}\n </g>\n )\n}\n\nexport default function SemioticAnnotation(props: AnnotationProps) {\n const { noteData } = props\n const { screenCoordinates } = noteData\n\n const annotationType =\n typeof noteData.type === \"string\" ? noteData.type : \"label\"\n\n const eventListeners = noteData.eventListeners || noteData.events || {}\n\n if (noteData.coordinates && screenCoordinates) {\n const setNX = noteData.nx || screenCoordinates[0][0] + noteData.dx\n const setNY = noteData.ny || screenCoordinates[0][1] + noteData.dy\n const notes = screenCoordinates.map((d, i) => {\n const subjectNote = Object.assign({}, noteData, {\n note: i === 0 ? noteData.note : { label: \"\" },\n x: d[0],\n y: d[1],\n nx: setNX,\n ny: setNY\n })\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={`multi-annotation-${i}`}\n {...subjectNote}\n type={annotationType}\n />\n )\n })\n\n return <g>{notes}</g>\n }\n\n const keyData = noteData.note || { title: \"none\", label: noteData.label }\n const annotationKey = `${keyData.label}-${keyData.title}-${noteData.i}`\n\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={annotationKey}\n events={eventListeners}\n {...noteData}\n type={annotationType}\n />\n )\n}\n","// from Evan Wang's https://github.com/tinker10/D3-Labeler\nexport default function() {\n let lab = [],\n anc = [],\n w = 1, // box width\n h = 1, // box width\n labeler = {\n start: x => {},\n width: x => {},\n height: x => {},\n label: x => {},\n anchor: x => {},\n alt_energy: x => {},\n alt_schedule: x => {}\n }\n\n let max_move = 5.0,\n max_angle = 0.5\n\n // weights\n let w_len = 0.2, // leader line length\n w_inter = 1.0, // leader line intersection\n w_lab2 = 30.0, // label-label overlap\n w_lab_anc = 30.0, // label-anchor overlap\n w_orient = 3.0 // orientation bias\n\n // booleans for user defined functions\n let user_energy = false,\n user_schedule = false\n\n let user_defined_energy, user_defined_schedule\n\n const energy = function(index) {\n // energy function, tailored for label placement\n\n let m = lab.length,\n ener = 0,\n dx = lab[index].x - anc[index].x,\n dy = anc[index].y - lab[index].y,\n dist = Math.sqrt(dx * dx + dy * dy),\n overlap = true,\n amount = 0,\n theta = 0\n\n // penalty for length of leader line\n if (dist > 0) ener += dist * w_len\n\n // label orientation bias\n dx /= dist\n dy /= dist\n if (dx > 0 && dy > 0) {\n ener += 0 * w_orient\n } else if (dx < 0 && dy > 0) {\n ener += 1 * w_orient\n } else if (dx < 0 && dy < 0) {\n ener += 2 * w_orient\n } else {\n ener += 3 * w_orient\n }\n\n let x21 = lab[index].x,\n y21 = lab[index].y - lab[index].height + 2.0,\n x22 = lab[index].x + lab[index].width,\n y22 = lab[index].y + 2.0\n let x11, x12, y11, y12, x_overlap, y_overlap, overlap_area\n\n for (let i = 0; i < m; i++) {\n if (i !== index) {\n // penalty for intersection of leader lines\n const overlap = intersect(\n anc[index].x,\n lab[index].x,\n anc[i].x,\n lab[i].x,\n anc[index].y,\n lab[index].y,\n anc[i].y,\n lab[i].y\n )\n if (overlap) ener += w_inter\n\n // penalty for label-label overlap\n x11 = lab[i].x\n y11 = lab[i].y - lab[i].height + 2.0\n x12 = lab[i].x + lab[i].width\n y12 = lab[i].y + 2.0\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab2\n }\n\n // penalty for label-anchor overlap\n x11 = anc[i].x - anc[i].r\n y11 = anc[i].y - anc[i].r\n x12 = anc[i].x + anc[i].r\n y12 = anc[i].y + anc[i].r\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab_anc\n }\n return ener\n }\n\n const mcmove = function(currT) {\n // Monte Carlo translation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random translation\n lab[i].x += (Math.random() - 0.5) * max_move\n lab[i].y += (Math.random() - 0.5) * max_move\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const mcrotate = function(currT) {\n // Monte Carlo rotation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random angle\n let angle = (Math.random() - 0.5) * max_angle\n\n let s = Math.sin(angle)\n let c = Math.cos(angle)\n\n // translate label (relative to anchor at origin):\n lab[i].x -= anc[i].x\n lab[i].y -= anc[i].y\n\n // rotate label\n let x_new = lab[i].x * c - lab[i].y * s,\n y_new = lab[i].x * s + lab[i].y * c\n\n // translate label back\n lab[i].x = x_new + anc[i].x\n lab[i].y = y_new + anc[i].y\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const intersect = function(x1, x2, x3, x4, y1, y2, y3, y4) {\n // returns true if two lines intersect, else false\n // from http://paulbourke.net/geometry/lineline2d/\n\n let mua, mub\n let denom, numera, numerb\n\n denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)\n numera = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)\n numerb = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)\n\n /* Is the intersection along the the segments */\n mua = numera / denom\n mub = numerb / denom\n if (!(mua < 0 || mua > 1 || mub < 0 || mub > 1)) {\n return true\n }\n return false\n }\n\n const cooling_schedule = function(currT, initialT, nsweeps) {\n // linear cooling\n return currT - initialT / nsweeps\n }\n\n labeler.start = function(nsweeps) {\n // main simulated annealing function\n let m = lab.length,\n currT = 1.0,\n initialT = 1.0\n\n for (let i = 0; i < nsweeps; i++) {\n for (let j = 0; j < m; j++) {\n if (Math.random() < 0.5) {\n mcmove(currT)\n } else {\n mcrotate(currT)\n }\n }\n currT = cooling_schedule(currT, initialT, nsweeps)\n }\n }\n\n labeler.width = function(x) {\n // users insert graph width\n if (!arguments.length) return w\n w = x\n return labeler\n }\n\n labeler.height = function(x) {\n // users insert graph height\n if (!arguments.length) return h\n h = x\n return labeler\n }\n\n labeler.label = function(x) {\n // users insert label positions\n if (!arguments.length) return lab\n lab = x\n return labeler\n }\n\n labeler.anchor = function(x) {\n // users insert anchor positions\n if (!arguments.length) return anc\n anc = x\n return labeler\n }\n\n labeler.alt_energy = function(x) {\n // user defined energy\n if (!arguments.length) return energy\n user_defined_energy = x\n user_energy = true\n return labeler\n }\n\n labeler.alt_schedule = function(x) {\n // user defined cooling_schedule\n if (!arguments.length) return cooling_schedule\n user_defined_schedule = x\n user_schedule = true\n return labeler\n }\n\n return labeler\n}\n/*eslint-enable */\n","import labeler from \"./d3labeler\"\nimport { AnnotationProps } from \"../types/annotationTypes\"\n\ntype NoteType = {\n props: AnnotationProps\n}\n\ntype AnnotationTypes = \"marginalia\" | \"bump\" | false\n\ninterface Layout {\n type: AnnotationTypes\n orient?: \"nearest\" | \"left\" | \"right\" | \"top\" | \"bottom\" | string[]\n characterWidth?: number\n lineWidth?: number\n lineHeight?: number\n padding?: number\n iterations?: number\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n marginOffset?: number\n}\n\nconst basicLabelSizeFunction = (\n noteData,\n characterWidth,\n lineHeight,\n padding\n) => {\n const text = noteData.note.label || noteData.note.title\n\n const textLength = text.length\n const wrap = noteData.note.wrap || 120\n const width = Math.min(wrap, textLength * characterWidth) + padding * 2\n const height =\n Math.ceil((textLength * characterWidth) / 120) * lineHeight + padding * 2\n return [width, height]\n}\n\nexport function bumpAnnotations(\n adjustableNotes: NoteType[],\n processor: Layout,\n size: number[],\n propsPointSizeFunction?: Function,\n propsLabelSizeFunction?: Function\n) {\n const {\n padding = 1,\n characterWidth = 8,\n lineHeight = 20,\n iterations = 500,\n pointSizeFunction = propsPointSizeFunction,\n labelSizeFunction = propsLabelSizeFunction || basicLabelSizeFunction\n } = processor\n\n const labels = adjustableNotes.map((d, i) => {\n const anchorX =\n (d.props.noteData.x[0] || d.props.noteData.x) +\n (d.props.noteData.dx !== undefined\n ? d.props.noteData.dx\n : ((i % 3) - 1) * -10)\n const anchorY =\n (d.props.noteData.y[0] || d.props.noteData.y) +\n (d.props.noteData.dy !== undefined\n ? d.props.noteData.dy\n : ((i % 3) - 1) * 10)\n\n const [labelWidth, labelHeight] = labelSizeFunction(\n d.props.noteData,\n characterWidth,\n lineHeight,\n padding\n )\n return {\n x: anchorX,\n y: anchorY,\n above: anchorY < d.props.noteData.y,\n left: anchorX < d.props.noteData.x,\n width: labelWidth,\n height: labelHeight,\n type: \"label\",\n name: \"\",\n originalNote: d\n }\n })\n\n const points = adjustableNotes.map(d => ({\n x: d.props.noteData.x,\n y: d.props.noteData.y,\n fx: d.props.noteData.x,\n fy: d.props.noteData.y,\n r: (pointSizeFunction && pointSizeFunction(d.props.noteData)) || 5,\n type: \"point\",\n originalNote: d\n }))\n\n const instantiatedLabeler = labeler()\n\n instantiatedLabeler.label(labels)\n instantiatedLabeler.anchor(points)\n instantiatedLabeler.width(size[0])\n instantiatedLabeler.height(size[1])\n instantiatedLabeler.start(iterations)\n\n labels.forEach(d => {\n if (d.type === \"label\") {\n const adjusted = adjustedXY(d.originalNote.props.noteData, d, padding)\n d.originalNote.props.noteData.nx = adjusted[0]\n d.originalNote.props.noteData.ny = adjusted[1]\n }\n })\n\n return adjustableNotes\n}\n\nfunction adjustedXY(note, calculated, padding) {\n if (note.y > calculated.y) {\n //below\n return [\n calculated.x + calculated.width / 2 + padding / 2,\n calculated.y - calculated.height + padding / 2\n ]\n }\n return [calculated.x + calculated.width / 2, calculated.y]\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useLayoutEffect\n} from \"react\"\n\nfunction useSyncExternalStoreShim<T>(\n subscribe: (cb: Function) => () => void,\n getSnapshot: () => T\n): T {\n const [value, setValue] = useState<T>(getSnapshot)\n useLayoutEffect(() => {\n return subscribe(() => setValue(getSnapshot))\n }, [subscribe])\n return value\n}\n\nexport function createStore(fn) {\n let Ctx = createContext(null)\n // Shared fallback source for when there's no provider in the tree.\n // This allows hooks to be called unconditionally (rules of hooks)\n // without crashing. The fallback state is inert (empty selections, etc.).\n let fallbackSource = createSource(fn)\n\n function Provider({ children }) {\n let source = useMemo(() => createSource(fn), [])\n\n return <Ctx.Provider value={source} children={children} />\n }\n\n let useSelector = (selector) => {\n let source = useContext(Ctx) ?? fallbackSource\n let getSnapshot = () => selector(source.getState())\n return useSyncExternalStoreShim(source.subscribe, getSnapshot)\n }\n\n return [Provider, useSelector]\n}\n\nfunction createSource(fn) {\n let events = new EventTarget()\n let state = fn(set)\n\n function set(fn) {\n state = Object.assign(state, fn(state))\n events.dispatchEvent(new CustomEvent(\"update\"))\n }\n\n function subscribe(cb) {\n events.addEventListener(\"update\", cb)\n return () => events.removeEventListener(\"update\", cb)\n }\n\n return {\n getState() {\n return state\n },\n subscribe\n }\n}\n","\"use client\"\nimport { createStore } from \"./createStore\"\n\nlet [TooltipProvider, useTooltip] = createStore((set) => ({\n tooltip: null,\n changeTooltip(tooltip) {\n set(() => ({ tooltip }))\n }\n}))\n\nexport { TooltipProvider, useTooltip }\n","import React from 'react'\n\nfunction marginOffsetFn(orient, axisSettings, marginOffset) {\n if (typeof marginOffset === \"number\") {\n return marginOffset\n }\n if (axisSettings && axisSettings.find((d) => d.props.orient === orient)) {\n return 50\n }\n return 10\n}\n\nconst keyFromSVGAnnotations = (\n adjustableAnnotations,\n annotationProcessor,\n size\n) => {\n return `${adjustableAnnotations\n .map(adjustedAnnotationKeyMapper)\n .join(\",\")}${JSON.stringify(annotationProcessor)}${size.join(\",\")}`\n}\n\nfunction adjustedAnnotationKeyMapper(d) {\n if (!d || !d.props || !d.props.noteData) {\n return \"\"\n }\n const { note = {} } = d.props.noteData\n const { label, title } = note\n const id =\n d.props.noteData.id || `${d.props.noteData.x}-${d.props.noteData.y}`\n return `${id}-${label}=${title}`\n}\n\nfunction safeStringify(value) {\n const seen = new Set()\n return JSON.stringify(value, (k, v) => {\n if (seen.has(v)) {\n return \"...\"\n }\n if (typeof v === \"object\") {\n seen.add(v)\n if (k === \"note\") {\n return `${v.label}-${v.title}`\n }\n if (k === \"connector\") {\n return `${v.end}-${v.type}`\n }\n if (k === \"subject\") {\n return `${v.radius}`\n }\n if (typeof v.column === \"object\") {\n return `${v.column.x}-${v.column.y}-${v.column.name}`\n }\n\n if (\n v.voronoiX ||\n v.voronoiY ||\n v.x ||\n v.y ||\n v.dx ||\n v.dy ||\n v.label ||\n v.type ||\n v.key ||\n v.hierarchicalID ||\n v.id ||\n v.name\n ) {\n return `${v.voronoiX}-${v.voronoiY}-${v.dx}-${v.dy}-${v.x}-${v.y}-${v.label}-${v.type}-${v.key}-${v.hierarchicalID}-${v.id}-${v.name}`\n }\n\n return \"...\"\n }\n return v\n })\n}\n\nfunction noteDataWidth(noteData, charWidth = 8, layoutNoteWidth) {\n const { noteWidth = layoutNoteWidth } = noteData\n\n let noteWidthFn = noteWidth\n\n if (typeof noteWidth === \"number\") {\n noteWidthFn = () => noteWidth\n }\n\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const noteText = noteData.note.label || noteData.note.label || \"\"\n const width =\n (noteWidth && noteWidthFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 100\n : Math.min(wrap, noteText.length * charWidth))\n return width\n}\n\nfunction noteDataHeight(\n noteData,\n charWidth = 8,\n lineHeight = 20,\n layoutNoteHeight\n) {\n const { noteHeight = layoutNoteHeight } = noteData\n\n let noteHeightFn = noteHeight\n\n if (typeof noteHeight === \"number\") {\n noteHeightFn = () => noteHeight\n }\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const text = noteData.note.label || noteData.note.title || \"\"\n \n const height =\n (noteHeight && noteHeightFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 30\n : Math.ceil((text.length * charWidth) / wrap) * lineHeight +\n (noteData.note.label && noteData.note.title ? lineHeight : 0))\n\n return height\n}\n\nexport {\n marginOffsetFn,\n adjustedAnnotationKeyMapper,\n safeStringify,\n noteDataWidth,\n noteDataHeight,\n keyFromSVGAnnotations\n}\n","\"use client\"\n// modules\nimport * as React from \"react\"\nimport { useState, useEffect } from \"react\"\nimport { bumpAnnotations } from \"./../annotationLayerBehavior/annotationHandling\"\n\nimport Legend from \"./../Legend\"\nimport Annotation from \"./../Annotation\"\nimport labella from \"labella\"\nimport {\n AnnotationHandling,\n AnnotationTypes,\n AnnotationProps,\n AnnotationType\n} from \"./../types/annotationTypes\"\n\nimport { LegendProps } from \"./../types/legendTypes\"\n\nimport { useTooltip } from \"./../store/TooltipStore\"\nimport { marginOffsetFn, adjustedAnnotationKeyMapper, safeStringify, noteDataWidth, noteDataHeight, keyFromSVGAnnotations } from './helpers';\n\ninterface NoteType {\n key: string\n props: AnnotationProps\n}\n\nexport interface AnnotationLayerProps {\n legendSettings?: LegendProps\n margin: { top?: number; left?: number; right?: number; bottom?: number }\n size: number[]\n axes?: React.ReactNode[]\n annotationHandling?: AnnotationHandling | AnnotationTypes\n annotations: AnnotationType[]\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n svgAnnotationRule: Function\n htmlAnnotationRule: Function\n position?: number[]\n}\n\nexport interface UpdatedAnnotationLayerProps extends AnnotationLayerProps {\n voronoiHover: Function\n}\n\ninterface AnnotationLayerState {\n adjustedAnnotationsKey?: string\n adjustedAnnotationsDataVersion?: string\n adjustedAnnotations: Object[]\n fixedAnnotations: NoteType[]\n adjustableAnnotations: NoteType[]\n}\n\nconst processAnnotations = (\n adjustableAnnotations: NoteType[],\n annotationProcessor: AnnotationHandling,\n props: AnnotationLayerProps\n) => {\n \n const {\n layout = { type: false, noteHeight: undefined, noteWidth: undefined }\n } = annotationProcessor\n\n if (layout.type === false) {\n return adjustableAnnotations\n }\n\n const { noteWidth: layoutNoteHeight, noteHeight: layoutNoteWidth } = layout\n\n let { margin = { top: 0, bottom: 0, left: 0, right: 0 } } = props\n\n const { size, axes = [] } = props\n\n margin =\n typeof margin === \"number\"\n ? { top: margin, left: margin, right: margin, bottom: margin }\n : margin\n\n if (layout.type === \"bump\") {\n const adjustedAnnotations = bumpAnnotations(\n adjustableAnnotations,\n layout,\n size,\n props.pointSizeFunction,\n props.labelSizeFunction\n )\n return adjustedAnnotations\n } else if (layout.type === \"marginalia\") {\n const {\n marginOffset,\n orient = \"nearest\",\n characterWidth = 8,\n lineHeight = 20,\n padding = 2,\n axisMarginOverride = {}\n } = layout\n const finalOrientation =\n orient === \"nearest\"\n ? [\"left\", \"right\", \"top\", \"bottom\"]\n : Array.isArray(orient)\n ? orient\n : [orient]\n\n const leftOn = finalOrientation.find((d) => d === \"left\")\n const rightOn = finalOrientation.find((d) => d === \"right\")\n const topOn = finalOrientation.find((d) => d === \"top\")\n const bottomOn = finalOrientation.find((d) => d === \"bottom\")\n\n const leftNodes = []\n const rightNodes = []\n const topNodes = []\n const bottomNodes = []\n\n for (const aNote of adjustableAnnotations) {\n const noteData = aNote.props.noteData\n\n const noteX = noteData.x[0] || noteData.x\n const noteY = noteData.y[0] || noteData.y\n\n const leftDist = leftOn ? noteX : Infinity\n const rightDist = rightOn ? size[0] - noteX : Infinity\n const topDist = topOn ? noteY : Infinity\n const bottomDist = bottomOn ? size[1] - noteY : Infinity\n\n const minDist = Math.min(leftDist, rightDist, topDist, bottomDist)\n\n if (leftDist === minDist) {\n leftNodes.push(aNote)\n } else if (rightDist === minDist) {\n rightNodes.push(aNote)\n } else if (topDist === minDist) {\n topNodes.push(aNote)\n } else {\n bottomNodes.push(aNote)\n }\n }\n\n //Adjust the margins based on which regions are active\n\n const leftForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : bottomOn\n ? size[1]\n : size[1] + margin.bottom\n })\n .nodes(\n leftNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const rightForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : topOn\n ? 0\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : size[1] + margin.bottom\n })\n .nodes(\n rightNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const topForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : leftOn\n ? 0\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : size[0] + margin.right\n })\n .nodes(\n topNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : rightOn\n ? size[0]\n : size[0] + margin.right\n })\n .nodes(\n bottomNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomOffset = Math.max(\n ...bottomNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const topOffset = Math.max(\n ...topNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const leftOffset = Math.max(\n ...leftNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n const rightOffset = Math.max(\n ...rightNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n\n // const nodeOffsetHeight = Math.max()\n\n const leftSortedNodes = leftForce.nodes()\n const rightSortedNodes = rightForce.nodes()\n const topSortedNodes = topForce.nodes()\n const bottomSortedNodes = bottomForce.nodes()\n\n leftNodes.forEach((note, i) => {\n const x =\n 0 -\n leftSortedNodes[i].layerIndex * leftOffset -\n marginOffsetFn(\"left\", axes, marginOffset)\n\n const y = leftSortedNodes[i].currentPos\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"right\"\n }\n })\n\n rightNodes.forEach((note, i) => {\n const x =\n size[0] +\n rightSortedNodes[i].layerIndex * rightOffset +\n marginOffsetFn(\"right\", axes, marginOffset)\n const y = rightSortedNodes[i].currentPos\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"left\"\n }\n })\n\n topNodes.forEach((note, i) => {\n const x = topSortedNodes[i].currentPos\n const y =\n 0 -\n topSortedNodes[i].layerIndex * topOffset -\n marginOffsetFn(\"top\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n bottomNodes.forEach((note, i) => {\n const x = bottomSortedNodes[i].currentPos\n const y =\n size[1] +\n bottomSortedNodes[i].layerIndex * bottomOffset +\n marginOffsetFn(\"bottom\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n return adjustableAnnotations\n }\n return adjustableAnnotations\n}\n\nconst generateSVGAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): NoteType[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.svgAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst generateHTMLAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): Object[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.htmlAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst createAnnotations = (\n props: AnnotationLayerProps,\n state: AnnotationLayerState\n) => {\n let adjustedAnnotations = state.adjustedAnnotations,\n adjustableAnnotationsKey = state.adjustedAnnotationsKey,\n adjustableAnnotations = state.adjustableAnnotations,\n fixedAnnotations = state.fixedAnnotations\n\n let renderedSVGAnnotations = []\n let renderedHTMLAnnotations = []\n\n const adjustedAnnotationsKey = state.adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion = state.adjustedAnnotationsDataVersion\n\n const {\n annotations,\n annotationHandling = false,\n size,\n svgAnnotationRule,\n htmlAnnotationRule\n } = props\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n if (svgAnnotationRule) {\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n props,\n annotations\n )\n\n adjustableAnnotationsKey = keyFromSVGAnnotations(\n initialSVGAnnotations,\n annotationProcessor,\n size\n )\n\n if (annotationHandling === false) {\n adjustedAnnotations = adjustableAnnotations\n }\n\n if (\n adjustedAnnotations.length !== adjustableAnnotations.length ||\n adjustedAnnotationsKey !== adjustableAnnotationsKey ||\n adjustedAnnotationsDataVersion !== dataVersion\n ) {\n adjustedAnnotations = processAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n props\n )\n } else {\n //Handle when style or other attributes change\n adjustedAnnotations = adjustableAnnotations.map((d: NoteType, i) => {\n const oldAnnotation = adjustedAnnotations[i] as NoteType\n const newNoteData = {\n ...oldAnnotation.props.noteData,\n ...d.props.noteData\n }\n\n return <Annotation key={d.key} noteData={newNoteData} />\n })\n }\n\n renderedSVGAnnotations = [...adjustedAnnotations, ...fixedAnnotations]\n }\n\n if (htmlAnnotationRule) {\n renderedHTMLAnnotations = generateHTMLAnnotations(props, annotations)\n }\n\n return {\n svgAnnotations: renderedSVGAnnotations,\n htmlAnnotations: renderedHTMLAnnotations,\n adjustedAnnotations: adjustedAnnotations,\n adjustedAnnotationsKey: adjustableAnnotationsKey,\n adjustedAnnotationsDataVersion: dataVersion\n }\n}\n\nexport default function AnnotationLayer(props: AnnotationLayerProps) {\n const {\n legendSettings,\n margin,\n size,\n annotations: baseAnnotations,\n annotationHandling\n } = props\n\n const tooltip = useTooltip((store) => {\n return store.tooltip\n })\n\n let annotations =\n tooltip != null ? baseAnnotations.concat(tooltip) : baseAnnotations\n\n let changeTooltip = useTooltip((state) => state.changeTooltip)\n\n const voronoiHover = (d) => {\n changeTooltip(d)\n }\n\n const updatedAnnotationProps: UpdatedAnnotationLayerProps = {\n ...props,\n annotations,\n voronoiHover\n }\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n const [adjustedAnnotations, changeAdjustedAnnotations] = useState([])\n const [svgAnnotations, changeSVGAnnotations] = useState([])\n const [htmlAnnotations, changeHTMLAnnotations] = useState([])\n const [adjustedAnnotationsKey, changeAdjustedAnnotationsKey] = useState(\"\")\n const [adjustedAnnotationsDataVersion, changeAdjustedAnnotationsDataVersion] =\n useState(dataVersion)\n\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n updatedAnnotationProps,\n annotations\n )\n\n const adjustableAnnotations = initialSVGAnnotations.filter(\n (d) => d.props && d.props.noteData && !d.props.noteData.fixedPosition\n )\n\n const updatedAnnotationsKey = keyFromSVGAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n size\n )\n\n useEffect(() => {\n const fixedAnnotations = initialSVGAnnotations.filter(\n (d) => !d.props || !d.props.noteData || d.props.noteData.fixedPosition\n )\n\n const updatedState = createAnnotations(updatedAnnotationProps, {\n adjustedAnnotations,\n adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion,\n adjustableAnnotations,\n fixedAnnotations\n })\n\n changeAdjustedAnnotations(updatedState.adjustedAnnotations)\n changeAdjustedAnnotationsKey(updatedState.adjustedAnnotationsKey)\n changeAdjustedAnnotationsDataVersion(\n updatedState.adjustedAnnotationsDataVersion\n )\n changeSVGAnnotations(updatedState.svgAnnotations)\n changeHTMLAnnotations(updatedState.htmlAnnotations) \n }, [\n updatedAnnotationsKey,\n dataVersion,\n annotations.length,\n annotations.map((a) => safeStringify(a)).join(\"-\")\n ])\n\n let renderedLegend\n if (legendSettings) {\n const positionHash = {\n left: [15, 15],\n right: [size[0] + 15, 15]\n }\n const { position = \"right\", title = \"Legend\" } = legendSettings\n const legendPosition = positionHash[position]\n renderedLegend = (\n <g transform={`translate(${legendPosition.join(\",\")})`}>\n <Legend {...legendSettings} title={title} position={position} />\n </g>\n )\n }\n\n // If there are no annotations but we have a legend, render just the legend\n if (annotations.length === 0 && !legendSettings) {\n return null\n }\n\n return (\n <div\n className=\"annotation-layer\"\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n background: \"none\"\n }}\n >\n <svg\n className=\"annotation-layer-svg\"\n height={size[1]}\n width={size[0]}\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n left: `${margin.left}px`,\n top: `${margin.top}px`,\n overflow: \"visible\"\n }}\n >\n <g>\n {renderedLegend}\n {svgAnnotations}\n </g>\n </svg>\n <div\n className=\"annotation-layer-html\"\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n height: `${size[1]}px`,\n width: `${size[0]}px`,\n left: `${margin.left}px`,\n top: `${margin.top}px`\n }}\n >\n {htmlAnnotations}\n </div>\n </div>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useEffect, useRef } from \"react\"\nimport { select } from \"d3-selection\"\n\nconst flatten = (list) =>\n list.reduce(\n (a, b) =>\n a.concat(Array.isArray(b) ? flatten(b.slice().sort((a, b) => a - b)) : b),\n []\n )\n\nfunction flatShortArray(baseArray = []) {\n if (!Array.isArray(baseArray)) return \"not-array\"\n let array = baseArray.slice()\n if (!Array.isArray(array[0])) {\n array = array.slice().sort((a, b) => a - b)\n }\n const flat = flatten(array)\n\n const stringifiedFlattened = flat\n .map(\n (d) =>\n (d instanceof Date && d.toString()) ||\n (d !== undefined && d.toFixed && d.toFixed(2)) ||\n \"empty\"\n )\n .toString()\n return stringifiedFlattened\n}\n\nconst createBrush = (node, props) => {\n const { svgBrush: brush, selectedExtent: baseSelectedExtent } = props\n select(node).call(brush)\n if (baseSelectedExtent) {\n let selectedExtent = baseSelectedExtent\n if (Array.isArray(baseSelectedExtent[0])) {\n const sortedY = [selectedExtent[0][1], selectedExtent[1][1]].sort(\n (a, b) => a - b\n )\n selectedExtent = [\n [selectedExtent[0][0], sortedY[0]],\n [selectedExtent[1][0], sortedY[1]]\n ]\n }\n\n select(node).call(brush.move, selectedExtent)\n }\n}\n\ninterface BrushProps {\n extent?: number[] | number[][]\n selectedExtent?: number[] | number[][]\n svgBrush: { (): () => void; move: Function }\n position?: number[]\n}\n\nexport default function Brush(props: BrushProps) {\n const { extent, selectedExtent } = props\n\n const node = useRef(null)\n const flatExtent = flatShortArray(extent)\n const flatSelectedExtent = flatShortArray(selectedExtent)\n\n useEffect(() => {\n if (node?.current) {\n createBrush(node.current, props)\n }\n }, [flatExtent, flatSelectedExtent, node])\n\n const { position = [0, 0] } = props\n return (\n <g transform={`translate(${position})`} ref={node} className=\"xybrush\" />\n )\n}\n","import { sum } from \"d3-array\"\n\nimport { findFirstAccessorValue } from \"../data/multiAccessorUtils\"\n\nimport {\n ProjectedLine,\n ProjectedPoint,\n RawLine,\n RawSummary\n} from \"../types/generalTypes\"\nimport { AnnotationType } from \"../types/annotationTypes\"\n\nconst datesForUnique = (d) => (d instanceof Date ? d.getTime() : d)\n\ntype SummaryProjectionTypes = {\n data: Array<RawSummary>\n summaryDataAccessor: Array<Function>\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype LineProjectionTypes = {\n data: Array<RawLine>\n lineDataAccessor: Array<Function>\n xProp: string\n xPropTop?: string\n xPropBottom?: string\n yProp: string\n yPropTop?: string\n yPropBottom?: string\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype DifferenceLineProps = {\n data: Array<ProjectedLine>\n yProp: string\n yPropTop: string\n yPropBottom: string\n}\n\ntype StackedAreaTypes = {\n type: string\n data: Array<ProjectedLine>\n xProp: string\n yProp: string\n yPropMiddle: string\n sort?: (a: ProjectedLine, b: ProjectedLine) => number\n yPropTop: string\n yPropBottom: string\n}\n\ntype CumulativeLineTypes = {\n type: string\n data: Array<ProjectedLine>\n yPropMiddle: string\n yPropTop: string\n yPropBottom: string\n y1?: Function\n}\n\ntype LineChartTypes = {\n data: Array<ProjectedLine>\n y1?: Function\n x1?: Function\n yPropTop: string\n yPropMiddle: string\n yPropBottom: string\n xPropTop: string\n xPropMiddle: string\n xPropBottom: string\n}\n\nexport const projectSummaryData = ({\n data,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n}: SummaryProjectionTypes) => {\n const projectedData = []\n summaryDataAccessor.forEach((actualSummaryAccessor) => {\n xAccessor.forEach((actualXAccessor) => {\n yAccessor.forEach((actualYAccessor) => {\n const projection = (d: Object) =>\n actualSummaryAccessor(d).map((p, q) => [\n actualXAccessor(p, q),\n actualYAccessor(p, q)\n ])\n\n data.forEach((d) => {\n projectedData.push({\n ...d,\n _baseData: actualSummaryAccessor(d),\n _xyfCoordinates: projection(d)\n })\n })\n })\n })\n })\n\n return projectedData\n}\n\nexport const projectLineData = ({\n data,\n lineDataAccessor,\n xProp,\n xPropTop,\n xPropBottom,\n yProp,\n yPropTop,\n yPropBottom,\n xAccessor,\n yAccessor\n}: LineProjectionTypes) => {\n if (!Array.isArray(data)) {\n data = [data]\n }\n const projectedLine: Array<ProjectedLine> = []\n\n lineDataAccessor.forEach((actualLineAccessor, lineIndex) => {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n data.forEach((d: ProjectedLine) => {\n const originalLineData = { ...d, xIndex, yIndex, lineIndex }\n\n originalLineData.data = actualLineAccessor(d).map((p, q) => {\n const originalCoords = { data: p }\n\n originalCoords[xProp] = actualXAccessor(p, q)\n originalCoords[xPropTop] = originalCoords[xProp]\n originalCoords[xPropBottom] = originalCoords[xProp]\n originalCoords[yProp] = actualYAccessor(p, q)\n originalCoords[yPropTop] = originalCoords[yProp]\n originalCoords[yPropBottom] = originalCoords[yProp]\n\n return originalCoords\n })\n originalLineData.key = originalLineData.key || projectedLine.length\n projectedLine.push(originalLineData)\n })\n })\n })\n })\n\n return projectedLine\n}\n\nexport const differenceLine = ({\n data,\n yProp,\n yPropTop,\n yPropBottom\n}: DifferenceLineProps) => {\n data.forEach((l, i) => {\n l.data.forEach((point, q) => {\n const otherLine = i === 0 ? 1 : 0\n if (point[yProp] > data[otherLine].data[q][yProp]) {\n point[yPropBottom] = data[otherLine].data[q][yProp]\n point[yPropTop] = point[yProp]\n } else {\n point[yPropTop] = point[yProp]\n point[yPropBottom] = point[yProp]\n }\n })\n })\n\n return data\n}\n\nexport const stackedArea = ({\n type = \"stackedarea\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n sort,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const valueMap = new Map()\n const lineSums = data.map(() => 0)\n\n let lineIndex = 0\n for (const line of data) {\n /*\n After we calculate this, we then sort the lines (and the value used for the sorting is in this for loop)\n So, we need to know their original index order in order to use the naively populated coordinate array in valueMap\n Otherwise the coordinates in the map will be in different order than the sorted order of the lines\n */\n line.__lineIndex = lineIndex\n for (const coord of line.data) {\n const coordX = datesForUnique(coord[xProp])\n lineSums[lineIndex] += coord[yProp]\n if (!valueMap.has(coordX)) {\n valueMap.set(coordX, [])\n }\n valueMap.get(coordX)[lineIndex] = coord\n }\n lineIndex++\n }\n\n let stackSort = (a, b) => lineSums[b.key] - lineSums[a.key]\n if (type === \"stackedpercent-invert\" || type === \"stackedarea-invert\") {\n stackSort = (a, b) => lineSums[a.key] - lineSums[b.key]\n }\n sort = sort === undefined ? stackSort : sort\n\n if (sort !== null) {\n data = data.sort(sort)\n }\n\n const lineIndexSortLookup = data.map((line) => line.__lineIndex)\n\n for (const [, coordsAtX] of valueMap) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n const positiveStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] > 0 ? d[yProp] : 0\n )\n const negativeStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] < 0 ? d[yProp] : 0\n )\n\n for (const newIndex of lineIndexSortLookup) {\n const l = coordsAtX[newIndex]\n if (l) {\n if (l[yProp] < 0) {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / negativeStepTotal\n l.percent = percent\n if (type === \"linepercent\") {\n l[yPropBottom] =\n l[yPropBottom] =\n l[yPropTop] =\n l[yPropMiddle] =\n percent\n } else {\n const adjustment = negativeStepTotal >= 0 ? 0 : percent\n l[yPropBottom] =\n negativeStepTotal === 0\n ? 0\n : -(negativeOffset / negativeStepTotal)\n l[yPropTop] = l[yPropBottom] - adjustment\n l[yPropMiddle] = l[yPropBottom] - adjustment / 2\n }\n } else {\n l[yPropBottom] = negativeOffset\n l[yPropTop] = negativeOffset + l[yProp]\n l[yPropMiddle] = negativeOffset + l[yProp] / 2\n }\n negativeOffset += l[yProp]\n } else {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / positiveStepTotal\n l.percent = percent\n\n if (type === \"linepercent\") {\n l[yPropBottom] = l[yPropTop] = l[yPropMiddle] = percent\n } else {\n const adjustment = positiveStepTotal <= 0 ? 0 : percent\n l[yPropBottom] =\n positiveStepTotal === 0 ? 0 : positiveOffset / positiveStepTotal\n l[yPropTop] = l[yPropBottom] + adjustment\n l[yPropMiddle] = l[yPropBottom] + adjustment / 2\n }\n } else {\n l[yPropBottom] = positiveOffset\n l[yPropTop] = positiveOffset + l[yProp]\n l[yPropMiddle] = positiveOffset + l[yProp] / 2\n }\n positiveOffset += l[yProp]\n }\n }\n }\n }\n\n return data\n}\n\nexport const lineChart = ({\n data,\n y1,\n x1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n xPropTop,\n xPropMiddle,\n xPropBottom\n}: LineChartTypes) => {\n if (y1) {\n for (const line of data) {\n for (const point of line.data) {\n point[yPropBottom] = y1(point)\n // Use top position for hover so overlapping-area hover points\n // align with the visible line rather than compressing toward the baseline.\n point[yPropMiddle] = point[yPropTop]\n }\n }\n }\n\n if (x1) {\n for (const line of data) {\n for (const point of line.data) {\n point[xPropBottom] = x1(point)\n point[xPropMiddle] = (point[xPropBottom] + point[xPropTop]) / 2\n }\n }\n }\n\n return data\n}\n\nexport const cumulativeLine = ({\n data,\n y1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n type = \"cumulative\"\n}: CumulativeLineTypes) => {\n for (const line of data) {\n let cumulativeValue = 0\n const dataArray =\n type === \"cumulative-reverse\" ? line.data.reverse() : line.data\n\n for (const point of dataArray) {\n cumulativeValue += point[yPropTop]\n point[yPropBottom] =\n point[yPropTop] =\n point[yPropMiddle] =\n cumulativeValue\n if (y1) {\n point[yPropBottom] = y1(point)\n point[yPropMiddle] = point[yPropBottom] + point[yPropTop] / 2\n }\n }\n }\n\n return data\n}\n\nexport const bumpChart = ({\n type = \"bumpline\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const uniqXValues = new Map()\n for (const line of data) {\n for (const point of line.data) {\n const xValue = datesForUnique(point[xProp])\n if (!uniqXValues.has(xValue)) {\n uniqXValues.set(xValue, [])\n }\n uniqXValues.get(xValue).push(point)\n }\n }\n\n let bumpSort = (a, b) => {\n if (a[yProp] > b[yProp]) {\n return 1\n }\n if (a[yProp] < b[yProp]) {\n return -1\n }\n return -1\n }\n if (type === \"bumparea-invert\" || type === \"bumpline-invert\") {\n bumpSort = (a, b) => {\n if (a[yProp] < b[yProp]) {\n return 1\n }\n if (a[yProp] > b[yProp]) {\n return -1\n }\n return -1\n }\n }\n\n for (const [, pointsAtXArray] of uniqXValues) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n pointsAtXArray.sort(bumpSort)\n\n let rank = 1\n for (const point of pointsAtXArray) {\n point._XYFrameRank\n if (type === \"bumparea\" || type === \"bumparea-invert\") {\n if (point[yProp] < 0) {\n point[yPropTop] = negativeOffset + point[yProp]\n point[yPropMiddle] = negativeOffset + point[yProp] / 2\n point[yPropBottom] = negativeOffset\n negativeOffset += point[yProp]\n } else {\n point[yPropTop] = positiveOffset + point[yProp]\n point[yPropMiddle] = positiveOffset + point[yProp] / 2\n point[yPropBottom] = positiveOffset\n positiveOffset += point[yProp]\n }\n } else {\n point[yProp] = rank\n point[yPropTop] = rank\n point[yPropBottom] = rank\n }\n rank++\n }\n }\n\n return data\n}\n\nexport const dividedLine = (\n parameters: Function,\n points: Array<Object>,\n searchIterations: number = 10\n) => {\n let currentParameters = parameters(points[0], 0)\n let currentPointsArray = []\n const dividedLinesData = [\n { key: currentParameters, points: currentPointsArray }\n ]\n points.forEach((point, pointI) => {\n const newParameters = parameters(point, pointI)\n\n let matchingParams = newParameters === currentParameters\n const stringNewParams = JSON.stringify(newParameters)\n const stringCurrentParams = JSON.stringify(currentParameters)\n\n if (typeof currentParameters === \"object\") {\n matchingParams = stringNewParams === stringCurrentParams\n }\n\n if (matchingParams) {\n currentPointsArray.push(point)\n } else {\n const lastPoint = currentPointsArray[currentPointsArray.length - 1]\n let pointA = lastPoint\n let pointB = point\n let stringBParams = stringNewParams\n\n let x = 0\n while (x < searchIterations && stringNewParams === stringBParams) {\n const keys = Object.keys(pointA)\n const findPoints = simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n })\n pointA = findPoints[0]\n pointB = findPoints[1]\n stringBParams = JSON.stringify(parameters(pointB))\n x++\n }\n currentPointsArray.push(pointB)\n currentPointsArray = [pointB, point]\n dividedLinesData.push({ key: newParameters, points: currentPointsArray })\n currentParameters = newParameters\n }\n })\n return dividedLinesData\n}\n\nfunction simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n}: {\n pointA: Object\n pointB: Object\n currentParameters: Object\n parameters: Function\n keys: Array<string>\n}) {\n const betweenPoint = {}\n keys.forEach((key) => {\n betweenPoint[key] =\n typeof pointA[key] === \"number\"\n ? (pointA[key] + pointB[key]) / 2\n : undefined\n })\n const stringBetween = JSON.stringify(parameters(betweenPoint))\n const stringCurrent = JSON.stringify(currentParameters)\n\n if (stringBetween === stringCurrent) {\n return [betweenPoint, pointB]\n }\n return [pointA, betweenPoint]\n}\n\nexport function funnelize({\n data,\n steps,\n key\n}: {\n data: Array<Object>\n steps: Array<string>\n key: string\n}) {\n const funnelData = []\n if (!Array.isArray(data)) {\n data = [data]\n }\n if (!steps) {\n steps = data.map((d) => Object.keys(d)).reduce((a, b) => a.concat(b), [])\n }\n\n data.forEach((datum, i) => {\n const datumKey = key ? datum[key] : i\n steps.forEach((step) => {\n const funnelDatum = { funnelKey: datumKey, stepName: \"\", stepValue: 0 }\n funnelDatum.stepName = step\n funnelDatum.stepValue = datum[step] ? datum[step] : 0\n funnelData.push(funnelDatum)\n })\n })\n\n return funnelData\n}\n\n","import * as React from \"react\"\n\nimport { line, curveLinear } from \"d3-shape\"\n\nimport { dividedLine, projectLineData } from \"./geometry/lineDrawing\"\n\n// components\n\nimport { ProjectedLine } from \"./types/generalTypes\"\n\ninterface DividedLineProps {\n parameters: Function\n className: string\n customAccessors: { x: Function; y: Function }\n lineDataAccessor: Function\n data: ProjectedLine[]\n interpolate?: Function\n searchIterations?: number\n}\n\nconst createLineSegments = (props) => {\n const {\n parameters,\n className,\n interpolate = curveLinear,\n customAccessors,\n lineDataAccessor,\n data,\n searchIterations,\n ...rest\n } = props\n\n const { x, y } = customAccessors\n\n const lineData = projectLineData({\n data: data,\n lineDataAccessor: [lineDataAccessor],\n xProp: \"x\",\n yProp: \"y\",\n xAccessor: [x],\n yAccessor: [y]\n })\n\n //Compatibility before Semiotic 2\n for (const projectedD of lineData) {\n projectedD.data = projectedD.data.map((d) => ({ ...d.data, ...d }))\n }\n\n const lines = dividedLine(parameters, lineData[0].data, searchIterations)\n\n const lineRender = line()\n .curve(interpolate)\n .x((d) => d.x)\n .y((d) => d.y)\n\n return lines.map((d, i) => (\n <path {...rest}\n className={className}\n \n key={`DividedLine-${i}`}\n style={d.key}\n d={lineRender(d.points)}\n />\n ))\n}\n\nexport default function DividedLine(props: DividedLineProps) {\n const lines = createLineSegments(props)\n\n return <g>{lines}</g>\n}\n","export const projectedX = \"x\"\nexport const projectedY = \"y\"\nexport const projectedYMiddle = \"yMiddle\"\nexport const projectedYTop = \"yTop\"\nexport const projectedYBottom = \"yBottom\"\nexport const projectedXMiddle = \"xMiddle\"\nexport const projectedXTop = \"xTop\"\nexport const projectedXBottom = \"xBottom\"\n","import { contourDensity } from \"d3-contour\"\nimport { scaleLinear } from \"d3-scale\"\n\nfunction shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n\nexport function contouring({ summaryType, data, finalXExtent, finalYExtent }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n resolution = 500,\n thresholds = 10,\n bandwidth = 20,\n neighborhood\n } = summaryType\n\n const xScale = scaleLinear()\n .domain(finalXExtent)\n .rangeRound([0, resolution])\n .nice()\n const yScale = scaleLinear()\n .domain(finalYExtent)\n .rangeRound([resolution, 0])\n .nice()\n\n data.forEach((contourData) => {\n let contourProjectedSummaries = contourDensity()\n .size([resolution, resolution])\n .x((d) => xScale(d[0]))\n .y((d) => yScale(d[1]))\n .thresholds(thresholds)\n .bandwidth(bandwidth)(contourData._xyfCoordinates)\n\n if (neighborhood) {\n contourProjectedSummaries = [contourProjectedSummaries[0]]\n }\n\n const max = Math.max(...contourProjectedSummaries.map((d) => d.value))\n\n contourProjectedSummaries.forEach((summary) => {\n summary.parentSummary = contourData\n summary.bounds = []\n summary.percent = summary.value / max\n summary.coordinates.forEach((poly) => {\n poly.forEach((subpoly, i) => {\n poly[i] = subpoly.map((coordpair) => {\n coordpair = [\n xScale.invert(coordpair[0]),\n yScale.invert(coordpair[1])\n ]\n return coordpair\n })\n //Only push bounds for the main poly, not its interior rings, otherwise you end up labeling interior cutouts\n if (i === 0) {\n summary.bounds.push(shapeBounds(poly[i]))\n }\n })\n })\n })\n projectedSummaries = [...projectedSummaries, ...contourProjectedSummaries]\n })\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { hexbin } from \"d3-hexbin\"\nimport { scaleLinear } from \"d3-scale\"\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\n\ninterface BinArray {\n [position: number]: number\n x?: number\n y?: number\n}\n\nexport function hexbinning({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent: baseXExtent,\n finalYExtent: baseYExtent,\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n let finalXExtent = baseXExtent\n let finalYExtent = baseYExtent\n\n if (!finalXExtent) {\n const xData = baseData.coordinates.map((p) => p.x)\n finalXExtent = [Math.min(...xData), Math.max(...xData)]\n }\n\n if (!finalYExtent) {\n const yData = baseData.coordinates.map((p) => p.y)\n finalYExtent = [Math.min(...yData), Math.max(...yData)]\n }\n\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n let projectedSummaries = []\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n bins = 0.05,\n cellPx,\n binValue = (d) => d.length,\n binMax,\n customMark\n } = summaryType\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const hexBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const hexBinYScale = yScaleType.domain(finalYExtent).range([0, size[1]])\n\n const actualResolution =\n (cellPx && cellPx / 2) || ((bins > 1 ? 1 / bins : bins) * size[0]) / 2\n\n const hexbinner = hexbin()\n .x((d) => hexBinXScale(d._xyfPoint[0]))\n .y((d) => hexBinYScale(d._xyfPoint[1]))\n .radius(actualResolution)\n .size(size)\n\n let hexMax\n const allHexes: ProjectedPoint[] = hexbinner.centers()\n\n data.forEach((hexbinData) => {\n hexMax = 0\n const hexes = hexbinner(\n hexbinData._xyfCoordinates.map((d, i) => ({\n _xyfPoint: d,\n ...hexbinData.coordinates[i]\n }))\n )\n\n const centerHash = {}\n\n hexes.forEach((d) => {\n centerHash[`${parseInt(d.x)}-${parseInt(d.y)}`] = true\n })\n\n allHexes.forEach((hexCenter) => {\n if (!centerHash[`${parseInt(hexCenter[0])}-${parseInt(hexCenter[1])}`]) {\n const newHex: BinArray = []\n newHex.x = hexCenter[0]\n newHex.y = hexCenter[1]\n hexes.push(newHex)\n }\n })\n\n hexMax = Math.max(...hexes.map((d) => binValue(d)))\n\n if (binMax) {\n binMax(hexMax)\n }\n\n const hexBase = [\n [0, -1],\n [0.866, -0.5],\n [0.866, 0.5],\n [0, 1],\n [-0.866, 0.5],\n [-0.866, -0.5]\n ]\n\n const hexWidth = hexBinXScale.invert(actualResolution) - finalXExtent[0]\n const hexHeight = hexBinYScale.invert(actualResolution) - finalYExtent[0]\n\n const hexacoordinates = hexBase.map((d) => [\n d[0] * hexWidth,\n d[1] * hexHeight\n ])\n\n const hexbinProjectedSummaries = hexes.map((d: Record<string, any>) => {\n const hexValue = binValue(d)\n const gx = d.x\n const gy = d.y\n d.x = hexBinXScale.invert(d.x)\n d.y = hexBinYScale.invert(d.y)\n const percent = hexValue / hexMax\n return {\n customMark: customMark && (\n <g transform={`translate(${gx},${size[1] - gy})`}>\n {customMark({\n d: {\n ...d,\n binItems: d,\n percent,\n value: hexValue,\n radius: actualResolution,\n hexCoordinates: hexBase.map((d) => [\n d[0] * actualResolution,\n d[1] * actualResolution\n ])\n },\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n ),\n _xyfCoordinates: hexacoordinates.map((p) => [p[0] + d.x, p[1] + d.y]),\n value: hexValue,\n percent,\n data: d,\n parentSummary: hexbinData,\n centroid: true\n }\n })\n projectedSummaries = [...projectedSummaries, ...hexbinProjectedSummaries]\n })\n\n if (preprocess) {\n projectedSummaries.forEach((d) => {\n d.x = d.data.x\n d.y = d.data.y\n })\n return {\n type: \"hexbin\",\n processedData: true,\n coordinates: projectedSummaries,\n binMax: hexMax\n }\n }\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { scaleLinear } from \"d3-scale\"\nimport regression from \"regression\"\nimport { curveCardinal } from \"d3-shape\"\n\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\nimport { ProjectedSummary } from \"../types/generalTypes\"\n\n// Re-export from new locations for backwards compatibility\nexport { contouring } from \"./contourLayout\"\nexport { hexbinning } from \"./hexbinLayout\"\n\nconst generateLineBounds = (\n xydata,\n basedata,\n topBoundingAccessor,\n bottomBoundingAccessor\n) => {\n const tops = xydata.map((d, i) => [\n d[0],\n d[1] + topBoundingAccessor(basedata[i])\n ])\n const bottoms = xydata.map((d, i) => [\n d[0],\n d[1] - bottomBoundingAccessor(basedata[i])\n ])\n return [...tops, ...bottoms.reverse()]\n}\n\nexport function lineBounding({ summaryType, data, defined }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n boundingAccessor,\n topBoundingAccessor = boundingAccessor,\n bottomBoundingAccessor = boundingAccessor\n } = summaryType\n\n data.forEach((lineData) => {\n const definedData = lineData._baseData.map(defined)\n let currentBaseData = []\n let currentXYFC = []\n const boundingPieces = [\n {\n xyf: currentXYFC,\n base: currentBaseData\n }\n ]\n definedData.forEach((d, i) => {\n if (d === true) {\n currentBaseData.push(lineData._baseData[i])\n currentXYFC.push(lineData._xyfCoordinates[i])\n } else if (definedData[i + 1]) {\n currentBaseData = []\n currentXYFC = []\n boundingPieces.push({\n xyf: currentXYFC,\n base: currentBaseData\n })\n }\n })\n\n boundingPieces.forEach(({ xyf, base }) => {\n const boundingProjectedSummary = {\n data: lineData,\n parentSummary: lineData,\n _xyfCoordinates: generateLineBounds(\n xyf,\n base,\n topBoundingAccessor,\n bottomBoundingAccessor\n )\n }\n\n projectedSummaries = [...projectedSummaries, boundingProjectedSummary]\n })\n })\n\n return projectedSummaries\n}\n\nexport function heatmapping({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n finalYExtent = [\n Math.min(...baseData.coordinates.map((d) => d.y)),\n Math.max(...baseData.coordinates.map((d) => d.y))\n ],\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n let projectedSummaries: ProjectedSummary[] = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n // binGraphic = \"square\",\n binValue = (d) => d.length,\n xBins = summaryType.yBins || 0.05,\n yBins = xBins,\n xCellPx = !summaryType.xBins && summaryType.xCellPx,\n yCellPx = !summaryType.yBins && summaryType.yCellPx,\n customMark,\n binMax\n } = summaryType\n const xBinPercent = xBins < 1 ? xBins : 1 / xBins\n const yBinPercent = yBins < 1 ? yBins : 1 / yBins\n\n const heatmapBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const heatmapBinYScale = yScaleType.domain(finalYExtent).range([size[1], 0])\n\n const actualResolution = [\n Math.ceil(((xCellPx && xCellPx / size[0]) || xBinPercent) * size[0] * 10) /\n 10,\n Math.ceil(((yCellPx && yCellPx / size[1]) || yBinPercent) * size[1] * 10) /\n 10\n ]\n let maxValue = -Infinity\n\n data.forEach((heatmapData) => {\n const grid = []\n const flatGrid = []\n\n let cell\n let gridColumn\n\n for (let i = 0; Math.ceil(i) < size[0]; i += actualResolution[0]) {\n const x = heatmapBinXScale.invert(i)\n const x1 = heatmapBinXScale.invert(i + actualResolution[0])\n\n gridColumn = []\n grid.push(gridColumn)\n for (let j = 0; Math.ceil(j) < size[1]; j += actualResolution[1]) {\n const y = heatmapBinYScale.invert(j)\n const y1 = heatmapBinYScale.invert(j + actualResolution[1])\n cell = {\n gx: i,\n gy: j,\n gw: actualResolution[0],\n gh: actualResolution[1],\n x: (x + x1) / 2,\n y: (y + y1) / 2,\n binItems: [],\n value: 0,\n _xyfCoordinates: [\n [x, y],\n [x1, y],\n [x1, y1],\n [x, y1]\n ],\n parentSummary: heatmapData\n }\n gridColumn.push(cell)\n flatGrid.push(cell)\n }\n gridColumn.push(cell)\n }\n grid.push(gridColumn)\n\n heatmapData._xyfCoordinates.forEach((d: [number, number], di: number) => {\n const baseX = heatmapBinXScale(d[0]) as number\n const baseY = heatmapBinYScale(d[1]) as number\n\n const xCoordinate = Math.floor(baseX / actualResolution[0])\n const yCoordinate = Math.floor(baseY / actualResolution[1])\n\n if (grid[xCoordinate][yCoordinate]) {\n grid[xCoordinate][yCoordinate].binItems.push(\n heatmapData.coordinates[di]\n )\n }\n })\n\n flatGrid.forEach((d) => {\n d.value = binValue(d.binItems)\n maxValue = Math.max(maxValue, d.value)\n })\n\n flatGrid.forEach((d) => {\n d.percent = d.value / maxValue\n d.customMark = customMark && (\n <g transform={`translate(${d.gx},${d.gy})`}>\n {customMark({\n d,\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n )\n })\n\n projectedSummaries = [...projectedSummaries, ...flatGrid]\n })\n if (binMax) {\n binMax(maxValue)\n }\n if (preprocess) {\n const preprocessedSummary: ProjectedSummary = {\n type: \"heatmap\",\n processedData: true,\n _baseData: [],\n _xyfCoordinates: [],\n data: [],\n bounds: [],\n x: 0,\n y: 0,\n coordinates: projectedSummaries,\n binMax: maxValue\n }\n return preprocessedSummary\n }\n\n return projectedSummaries\n}\n\nexport function trendlining({\n preprocess = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n xScaleType = scaleLinear()\n}: SummaryLayoutType) {\n if (preprocess) {\n return baseData[0].coordinates\n }\n\n let projectedSummaries = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n regressionType: baseRegressionType = \"linear\",\n order = 2,\n precision = 4,\n controlPoints = 20,\n curve = curveCardinal\n } = summaryType\n\n let regressionType = baseRegressionType\n\n if (\n finalXExtent[0] < 0 &&\n (baseRegressionType === \"logarithmic\" ||\n baseRegressionType === \"power\" ||\n baseRegressionType === \"exponential\")\n ) {\n console.error(\n `Cannot use this ${baseRegressionType} regressionType type with value range that goes below 0, defaulting to linear`\n )\n regressionType = \"linear\"\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const xScale = xScaleType.domain([0, 1]).range(finalXExtent)\n\n projectedSummaries = []\n data.forEach((bdata) => {\n const regressionLine = regression[regressionType](\n bdata._xyfCoordinates.map((d) => {\n let x = d[0]\n let y = d[1]\n\n if (typeof x !== \"number\") {\n x = x.getTime()\n }\n if (typeof y !== \"number\") {\n y = y.getTime()\n }\n\n return [x, y]\n }),\n {\n order,\n precision\n }\n )\n const controlStep = 1 / controlPoints\n\n let steps = [0, 1]\n\n if (regressionType !== \"linear\") {\n steps = []\n for (let step = 0; step < 1 + controlStep; step += controlStep) {\n steps.push(step)\n }\n }\n\n const controlPointArray = []\n\n steps.forEach((controlPoint) => {\n controlPointArray.push(regressionLine.predict(xScale(controlPoint)))\n })\n\n projectedSummaries.push({\n centroid: false,\n customMark: undefined,\n data: bdata,\n parentSummary: bdata,\n value: regressionLine.string,\n r2: regressionLine.r2,\n curve,\n _xyfCoordinates: controlPointArray\n })\n })\n\n return projectedSummaries\n}\n\nexport function shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n","export const extentValue = extent =>\n (extent && extent.extent) || (Array.isArray(extent) && extent) || []\n","import { projectLineData, projectSummaryData } from \"../geometry/lineDrawing\"\nimport {\n projectedX,\n projectedY,\n projectedYTop,\n projectedYMiddle,\n projectedYBottom,\n projectedXBottom,\n projectedXMiddle,\n projectedXTop\n} from \"../constants/coordinateNames\"\nimport {\n differenceLine,\n stackedArea,\n bumpChart,\n lineChart,\n cumulativeLine\n} from \"../geometry/lineDrawing\"\n\nimport {\n contouring,\n hexbinning,\n heatmapping,\n trendlining,\n lineBounding\n} from \"../geometry/areaDrawing\"\nimport { max, min } from \"d3-array\"\n\nimport { extentValue } from \"./unflowedFunctions\"\n\nimport {\n ProjectedPoint,\n ProjectedLine,\n ProjectedSummary,\n ProjectedBin,\n RawSummary,\n RawPoint,\n RawLine,\n LineTypeSettings,\n SummaryTypeSettings,\n ExtentType,\n MarginType\n} from \"../types/generalTypes\"\n\nconst baseDefinedFunction = () => true\n\nconst whichPointsHashY = {\n top: projectedYTop,\n bottom: projectedYBottom,\n orphan: projectedY\n}\n\nconst whichPointsHashX = {\n top: projectedXTop,\n bottom: projectedXBottom,\n orphan: projectedX\n}\n\nconst builtInTransformations = {\n stackedarea: stackedArea,\n \"stackedarea-invert\": stackedArea,\n stackedpercent: stackedArea,\n \"stackedpercent-invert\": stackedArea,\n linepercent: stackedArea,\n difference: differenceLine,\n bumparea: bumpChart,\n bumpline: bumpChart,\n \"bumparea-invert\": bumpChart,\n line: lineChart,\n area: lineChart,\n cumulative: cumulativeLine,\n \"cumulative-reverse\": cumulativeLine\n}\n\ntype validStrFnTypes =\n | boolean\n | string\n | number\n | Record<string, any>\n | Record<string, any>[]\n | RawPoint\n | RawPoint[]\n\nexport function stringToFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((args?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType,\n defaultAccessor?: (arg?: Record<string, any>, i?: number) => StrFnType,\n raw?: boolean\n): (d?: Record<string, any>, i?: number) => StrFnType {\n if (!accessor && defaultAccessor) {\n return defaultAccessor\n } else if (typeof accessor === \"object\") {\n return () => accessor\n } else if (accessor instanceof Function) {\n return accessor\n } else if (raw === true) {\n const castAccessor = accessor as unknown as StrFnType\n return () => castAccessor\n } else if (typeof accessor === \"string\") {\n return (d: Record<string, any>) => (d ? d[accessor] : undefined)\n }\n\n return () => undefined\n}\n\nexport function stringToArrayFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n | Array<\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n >,\n defaultAccessor?: (arg?: Record<string, any>, index?: number) => StrFnType,\n raw?: boolean\n): Array<(arg?: Record<string, any>, index?: number) => StrFnType> {\n if (accessor === undefined) {\n return [stringToFn<StrFnType>(undefined, defaultAccessor, raw)]\n }\n let arrayOfAccessors = []\n if (Array.isArray(accessor)) {\n arrayOfAccessors = accessor\n } else {\n arrayOfAccessors = [accessor]\n }\n\n return arrayOfAccessors.map((a) =>\n stringToFn<StrFnType>(a, defaultAccessor, raw)\n )\n}\n\nfunction rebuildFullDatasetWithSummaries(\n fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary>,\n projectedSummaries: ProjectedSummary[]\n): Array<ProjectedPoint | ProjectedBin | ProjectedSummary> {\n const rebuilt: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n for (const d of projectedSummaries) {\n rebuilt.push({ ...d })\n }\n for (const d of fullDataset) {\n if (!(d as ProjectedPoint).parentSummary) {\n rebuilt.push(d)\n }\n }\n return rebuilt\n}\n\ntype CalculateDataTypes = {\n lineDataAccessor: Array<Function>\n summaryDataAccessor: Array<Function>\n summaryStyleFn: Function\n summaryClassFn: Function\n summaryRenderModeFn: Function\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n summaries?: Array<RawSummary>\n points?: Array<RawPoint>\n lines?: Array<RawLine>\n lineType: LineTypeSettings\n showLinePoints?: boolean | string\n showSummaryPoints?: boolean\n xExtent?: ExtentType\n yExtent?: ExtentType\n invertX?: boolean\n invertY?: boolean\n summaryType: SummaryTypeSettings\n adjustedSize: Array<number>\n chartSize: Array<number>\n xScaleType: Function\n yScaleType: Function\n margin: MarginType\n defined?: Function\n annotations: object[]\n filterRenderedLines: (\n value: ProjectedLine,\n index: number,\n array: ProjectedLine[]\n ) => any\n filterRenderedSummaries: (\n value: ProjectedSummary,\n index: number,\n array: ProjectedSummary[]\n ) => any\n filterRenderedPoints: (\n value: ProjectedPoint | ProjectedBin | ProjectedSummary,\n index: number,\n array: (ProjectedPoint | ProjectedBin | ProjectedSummary)[]\n ) => any\n}\n\nexport const calculateDataExtent = ({\n lineDataAccessor,\n xAccessor,\n yAccessor,\n summaries,\n points,\n lines,\n lineType,\n showLinePoints,\n showSummaryPoints,\n xExtent,\n yExtent,\n invertX,\n invertY,\n summaryDataAccessor,\n summaryType,\n adjustedSize: size,\n margin,\n summaryStyleFn,\n summaryClassFn,\n summaryRenderModeFn,\n chartSize,\n filterRenderedLines,\n filterRenderedSummaries,\n filterRenderedPoints,\n defined = baseDefinedFunction,\n annotations = []\n}: CalculateDataTypes) => {\n let fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n let initialProjectedLines = []\n\n let projectedPoints: Array<ProjectedPoint> = [],\n projectedLines: Array<ProjectedLine> = [],\n projectedSummaries: Array<ProjectedSummary> = []\n if (points) {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n let i = 0\n for (const d of points) {\n const x = actualXAccessor(d, i)\n const y = actualYAccessor(d, i)\n const projectedPoint = { x, y, data: d, xIndex, yIndex }\n if (Array.isArray(y)) {\n projectedPoint[projectedYBottom] = Math.min(...y)\n projectedPoint[projectedYTop] = Math.max(...y)\n projectedPoint[projectedYMiddle] =\n (projectedPoint[projectedYBottom] +\n projectedPoint[projectedYTop]) /\n 2\n }\n if (Array.isArray(x)) {\n projectedPoint[projectedXBottom] = Math.min(...x)\n projectedPoint[projectedXTop] = Math.max(...x)\n projectedPoint[projectedXMiddle] =\n (projectedPoint[projectedXBottom] +\n projectedPoint[projectedXTop]) /\n 2\n }\n projectedPoints.push(projectedPoint)\n i++\n }\n })\n })\n\n for (const d of projectedPoints) {\n fullDataset.push({\n ...d,\n [projectedX]: d[projectedXTop] || d[projectedXBottom] || d.x,\n [projectedY]: d[projectedYTop] || d[projectedYBottom] || d.y\n })\n }\n }\n if (lines) {\n initialProjectedLines = projectLineData({\n data: lines,\n lineDataAccessor,\n xProp: projectedX,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom,\n yProp: projectedY,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xAccessor,\n yAccessor\n })\n\n const optionsObject = {\n xProp: projectedX,\n yProp: projectedY,\n yPropMiddle: projectedYMiddle,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xPropMiddle: projectedXMiddle,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom\n }\n\n projectedLines = lineTransformation(\n lineType,\n optionsObject\n )(initialProjectedLines)\n\n for (const d of projectedLines) {\n for (let q = 0; q < d.data.length; q++) {\n const p = d.data[q]\n if (!defined(Object.assign({}, p.data, p), q)) continue\n const mappedP: ProjectedPoint = {\n parentLine: d,\n y: p.y,\n x: p.x,\n xTop: p.xTop,\n xMiddle: p.xMiddle,\n xBottom: p.xBottom,\n yTop: p.yTop,\n yMiddle: p.yMiddle,\n yBottom: p.yBottom,\n data: p.data\n }\n if (p.percent) {\n mappedP.percent = p.percent\n }\n fullDataset.push(mappedP)\n }\n }\n if (showLinePoints) {\n const whichPointsX =\n showLinePoints === true\n ? projectedXMiddle\n : whichPointsHashX[showLinePoints]\n\n const whichPointsY =\n showLinePoints === true\n ? projectedYMiddle\n : whichPointsHashY[showLinePoints]\n\n projectedLines.forEach((d: ProjectedLine) => {\n d.data\n .filter((p, q) => {\n const isDefined = defined(Object.assign({}, p.data, p))\n if (isDefined) {\n if (showLinePoints === \"orphan\") {\n const prePoint = d.data[q - 1]\n const postPoint = d.data[q + 1]\n\n if (\n (!prePoint ||\n !defined(Object.assign({}, prePoint.data, prePoint))) &&\n (!postPoint ||\n !defined(Object.assign({}, postPoint.data, postPoint)))\n ) {\n return true\n } else {\n return false\n }\n } else {\n return true\n }\n } else {\n return false\n }\n })\n .forEach((p) => {\n projectedPoints.push({\n ...p,\n parentLine: d,\n [projectedY]:\n p[whichPointsY] !== undefined\n ? p[whichPointsY]\n : p[projectedYMiddle] !== undefined\n ? p[projectedYMiddle]\n : p[projectedYBottom] !== undefined\n ? p[projectedYBottom]\n : p.y,\n [projectedX]:\n p[whichPointsX] !== undefined\n ? p[whichPointsX]\n : p[projectedXMiddle] !== undefined\n ? p[projectedXMiddle]\n : p[projectedXBottom] !== undefined\n ? p[projectedXBottom]\n : p.y\n })\n })\n })\n }\n }\n\n if (summaries) {\n projectedSummaries = projectSummaryData({\n data: summaries,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n })\n\n projectedSummaries.forEach((d) => {\n const baseData = d._baseData\n\n if (d._xyfCoordinates.length > 0 && d._xyfCoordinates[0][0][0]) {\n d._xyfCoordinates[0].forEach((multi) => {\n if (Array.isArray(multi)) {\n multi\n .map((p, q) =>\n Object.assign({ parentSummary: d }, baseData[q], {\n [projectedX]: p[0],\n [projectedY]: p[1]\n })\n )\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n })\n } else if (d._xyfCoordinates.length > 0) {\n if (Array.isArray(d._xyfCoordinates)) {\n const coordArray: [number, number][] = d._xyfCoordinates as [\n number,\n number\n ][]\n coordArray\n .map((p, q) => ({\n parentSummary: d,\n ...baseData[q],\n [projectedX]: p[0],\n [projectedY]: p[1]\n }))\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n }\n })\n }\n\n let suitableXAnnotations = []\n let suitableYAnnotations = []\n\n if (\n xExtent &&\n !Array.isArray(xExtent) &&\n xExtent.includeAnnotations === true\n ) {\n xAccessor.forEach((actualXAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const x = actualXAccessor(annotation, annotationIndex)\n if (isFinite(x)) {\n suitableXAnnotations.push({\n [projectedX]: x\n })\n }\n })\n })\n }\n\n if (\n yExtent &&\n !Array.isArray(yExtent) &&\n yExtent.includeAnnotations === true\n ) {\n yAccessor.forEach((actualYAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const y = actualYAccessor(annotation, annotationIndex)\n if (isFinite(y)) {\n suitableYAnnotations.push({\n [projectedY]: y\n })\n }\n })\n })\n }\n\n // Single-pass extent calculation over fullDataset + annotations\n let xMinVal: number | undefined\n let xMaxVal: number | undefined\n let yMinVal: number | undefined\n let yMaxVal: number | undefined\n\n for (const d of fullDataset) {\n const xLo = d[projectedXBottom] === undefined\n ? d[projectedX]\n : Math.min(d[projectedXTop], d[projectedXBottom])\n const xHi = d[projectedXTop] === undefined\n ? d[projectedX]\n : Math.max(d[projectedXBottom], d[projectedXTop])\n const yLo = d[projectedYBottom] === undefined\n ? d[projectedY]\n : Math.min(d[projectedYTop], d[projectedYBottom])\n const yHi = d[projectedYTop] === undefined\n ? d[projectedY]\n : Math.max(d[projectedYBottom], d[projectedYTop])\n\n if (xLo !== undefined && (xMinVal === undefined || xLo < xMinVal)) xMinVal = xLo\n if (xHi !== undefined && (xMaxVal === undefined || xHi > xMaxVal)) xMaxVal = xHi\n if (yLo !== undefined && (yMinVal === undefined || yLo < yMinVal)) yMinVal = yLo\n if (yHi !== undefined && (yMaxVal === undefined || yHi > yMaxVal)) yMaxVal = yHi\n }\n\n for (const d of suitableXAnnotations) {\n const v = d[projectedX]\n if (v !== undefined && (xMinVal === undefined || v < xMinVal)) xMinVal = v\n if (v !== undefined && (xMaxVal === undefined || v > xMaxVal)) xMaxVal = v\n }\n\n for (const d of suitableYAnnotations) {\n const v = d[projectedY]\n if (v !== undefined && (yMinVal === undefined || v < yMinVal)) yMinVal = v\n if (v !== undefined && (yMaxVal === undefined || v > yMaxVal)) yMaxVal = v\n }\n\n const calculatedXExtent = [xMinVal, xMaxVal]\n const calculatedYExtent = [yMinVal, yMaxVal]\n\n const actualXExtent: number[] = extentValue(xExtent)\n const actualYExtent: number[] = extentValue(yExtent)\n\n const xMin =\n actualXExtent && actualXExtent[0] !== undefined\n ? actualXExtent[0]\n : calculatedXExtent[0]\n const xMax =\n actualXExtent && actualXExtent[1] !== undefined\n ? actualXExtent[1]\n : calculatedXExtent[1]\n\n const yMin =\n actualYExtent && actualYExtent[0] !== undefined\n ? actualYExtent[0]\n : calculatedYExtent[0]\n const yMax =\n actualYExtent && actualYExtent[1] !== undefined\n ? actualYExtent[1]\n : calculatedYExtent[1]\n\n let finalYExtent = [yMin, yMax]\n let finalXExtent = [xMin, xMax]\n\n if (invertX && !(actualXExtent && actualXExtent.length === 2)) {\n finalXExtent = [finalXExtent[1], finalXExtent[0]]\n }\n\n if (\n (lineType.type === \"bumpline\" || invertY) &&\n !(actualYExtent && actualYExtent.length === 2)\n ) {\n finalYExtent = [finalYExtent[1], finalYExtent[0]]\n }\n\n if (summaryType.type && summaryType.type === \"contour\") {\n projectedSummaries = contouring({\n summaryType,\n data: projectedSummaries,\n finalXExtent,\n finalYExtent\n })\n } else if (summaryType.type && summaryType.type === \"linebounds\") {\n projectedSummaries = lineBounding({\n summaryType,\n data: projectedSummaries,\n defined\n })\n\n // Expand y extent to include the bounds so they aren't clipped\n if (!(actualYExtent && actualYExtent.length === 2)) {\n for (const summary of projectedSummaries) {\n for (const coord of summary._xyfCoordinates) {\n const yVal = coord[1] as number\n if (yVal !== undefined && isFinite(yVal)) {\n if (yVal < finalYExtent[0]) finalYExtent[0] = yVal\n if (yVal > finalYExtent[1]) finalYExtent[1] = yVal\n }\n }\n }\n }\n } else if (summaryType.type && summaryType.type === \"hexbin\") {\n projectedSummaries = hexbinning({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"heatmap\") {\n projectedSummaries = heatmapping({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"trendline\") {\n projectedSummaries = trendlining({\n summaryType,\n data: projectedSummaries[0],\n preprocess: summaries && !!summaries[0].processedData,\n finalXExtent\n })\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n }\n\n if (filterRenderedLines) {\n projectedLines = projectedLines.filter(filterRenderedLines)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentLine || filterRenderedLines(d.parentLine, i, [])\n })\n }\n if (filterRenderedPoints) {\n fullDataset = fullDataset.filter(filterRenderedPoints)\n }\n if (filterRenderedSummaries) {\n projectedSummaries = projectedSummaries.filter(filterRenderedSummaries)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentSummary || filterRenderedSummaries(d.parentSummary, i, [])\n })\n }\n\n return {\n xExtent: finalXExtent,\n yExtent: finalYExtent,\n projectedLines,\n projectedPoints,\n projectedSummaries,\n fullDataset,\n calculatedXExtent,\n calculatedYExtent\n }\n}\n\nconst differenceCatch = (olineType, data) => {\n if (\n !builtInTransformations[olineType] ||\n (olineType === \"difference\" && data.length !== 2)\n ) {\n return \"line\"\n }\n return olineType\n}\n\nfunction lineTransformation(lineType, options) {\n return (data) =>\n builtInTransformations[differenceCatch(lineType.type, data)]({\n ...lineType,\n ...options,\n data\n })\n}\n"],"names":["d3Bin","defaultTooltipStyle","BrushOverlay","d3Select","d3BrushX","d3BrushY","d3Brush","formatValue","React","Annotation"],"mappings":"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"}
|