semiotic 2.0.2 → 3.0.0-beta.1
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 +530 -0
- package/README.md +190 -37
- package/ai/cli.js +48 -0
- package/ai/dist/ai/componentRegistry.js +45 -0
- package/ai/dist/ai/mcp-server.js +99 -0
- package/ai/dist/ai/renderHOCToSVG.js +77 -0
- package/ai/dist/src/components/Annotation.js +358 -0
- package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +369 -0
- package/ai/dist/src/components/Axis/Axis.js +373 -0
- package/ai/dist/src/components/Axis/axisTitle.js +14 -0
- package/ai/dist/src/components/Axis/index.js +7 -0
- package/ai/dist/src/components/Axis/summaryGraphic.js +37 -0
- package/ai/dist/src/components/Brush.js +84 -0
- package/ai/dist/src/components/DividedLine.js +65 -0
- package/ai/dist/src/components/FacetController.js +259 -0
- package/ai/dist/src/components/Frame.js +139 -0
- package/ai/dist/src/components/InteractionLayer.js +328 -0
- package/ai/dist/src/components/Legend.js +140 -0
- package/ai/dist/src/components/MiniMap.js +75 -0
- package/ai/dist/src/components/MinimapXYFrame.js +99 -0
- package/ai/dist/src/components/NetworkFrame.js +335 -0
- package/ai/dist/src/components/OrdinalFrame.js +437 -0
- package/ai/dist/src/components/ResponsiveFrame.js +68 -0
- package/ai/dist/src/components/ResponsiveMinimapXYFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveNetworkFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveOrdinalFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveXYFrame.js +10 -0
- package/ai/dist/src/components/SparkFrame.js +113 -0
- package/ai/dist/src/components/SparkNetworkFrame.js +11 -0
- package/ai/dist/src/components/SparkOrdinalFrame.js +11 -0
- package/ai/dist/src/components/SparkXYFrame.js +11 -0
- package/ai/dist/src/components/Tooltip/Tooltip.js +304 -0
- package/ai/dist/src/components/TooltipPositioner/index.js +132 -0
- package/ai/dist/src/components/VisualizationLayer.js +395 -0
- package/ai/dist/src/components/XYFrame.js +524 -0
- package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +73 -0
- package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +254 -0
- package/ai/dist/src/components/annotationRules/baseRules.js +150 -0
- package/ai/dist/src/components/annotationRules/networkframeRules.js +198 -0
- package/ai/dist/src/components/annotationRules/orframeRules.js +695 -0
- package/ai/dist/src/components/annotationRules/xyframeRules.js +299 -0
- package/ai/dist/src/components/batchWork.js +35 -0
- package/ai/dist/src/components/charts/index.js +96 -0
- package/ai/dist/src/components/charts/network/ChordDiagram.js +245 -0
- package/ai/dist/src/components/charts/network/CirclePack.js +177 -0
- package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +248 -0
- package/ai/dist/src/components/charts/network/SankeyDiagram.js +305 -0
- package/ai/dist/src/components/charts/network/TreeDiagram.js +268 -0
- package/ai/dist/src/components/charts/network/Treemap.js +177 -0
- package/ai/dist/src/components/charts/ordinal/BarChart.js +191 -0
- package/ai/dist/src/components/charts/ordinal/BoxPlot.js +235 -0
- package/ai/dist/src/components/charts/ordinal/DonutChart.js +178 -0
- package/ai/dist/src/components/charts/ordinal/DotPlot.js +194 -0
- package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +194 -0
- package/ai/dist/src/components/charts/ordinal/PieChart.js +155 -0
- package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +213 -0
- package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +219 -0
- package/ai/dist/src/components/charts/realtime/RealtimeBarChart.js +91 -0
- package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +73 -0
- package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +85 -0
- package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +86 -0
- package/ai/dist/src/components/charts/shared/ChartError.js +72 -0
- package/ai/dist/src/components/charts/shared/colorUtils.js +138 -0
- package/ai/dist/src/components/charts/shared/formatUtils.js +176 -0
- package/ai/dist/src/components/charts/shared/hooks.js +49 -0
- package/ai/dist/src/components/charts/shared/legendUtils.js +57 -0
- package/ai/dist/src/components/charts/shared/types.js +2 -0
- package/ai/dist/src/components/charts/shared/validateChartData.js +82 -0
- package/ai/dist/src/components/charts/shared/validateProps.js +640 -0
- package/ai/dist/src/components/charts/xy/AreaChart.js +220 -0
- package/ai/dist/src/components/charts/xy/BubbleChart.js +222 -0
- package/ai/dist/src/components/charts/xy/Heatmap.js +230 -0
- package/ai/dist/src/components/charts/xy/LineChart.js +302 -0
- package/ai/dist/src/components/charts/xy/Scatterplot.js +136 -0
- package/ai/dist/src/components/charts/xy/StackedAreaChart.js +220 -0
- package/ai/dist/src/components/constants/coordinateNames.js +11 -0
- package/ai/dist/src/components/constants/frame_props.js +251 -0
- package/ai/dist/src/components/constants/jsx.js +71 -0
- package/ai/dist/src/components/data/dataFunctions.js +473 -0
- package/ai/dist/src/components/data/multiAccessorUtils.js +14 -0
- package/ai/dist/src/components/data/networkPipelineCache.js +43 -0
- package/ai/dist/src/components/data/ordinalPipelineCache.js +53 -0
- package/ai/dist/src/components/data/unflowedFunctions.js +5 -0
- package/ai/dist/src/components/data/xyPipelineCache.js +49 -0
- package/ai/dist/src/components/generic_utilities/functions.js +5 -0
- package/ai/dist/src/components/index.js +145 -0
- package/ai/dist/src/components/interactionLayerBehavior/InteractionCanvas.js +128 -0
- package/ai/dist/src/components/processing/InteractionItems.js +223 -0
- package/ai/dist/src/components/processing/hierarchyUtils.js +104 -0
- package/ai/dist/src/components/processing/layouts/chordLayout.js +58 -0
- package/ai/dist/src/components/processing/layouts/forceLayout.js +142 -0
- package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +31 -0
- package/ai/dist/src/components/processing/layouts/index.js +32 -0
- package/ai/dist/src/components/processing/layouts/sankeyLayout.js +96 -0
- package/ai/dist/src/components/processing/layouts/simpleLayouts.js +34 -0
- package/ai/dist/src/components/processing/layouts/types.js +2 -0
- package/ai/dist/src/components/processing/network.js +771 -0
- package/ai/dist/src/components/processing/networkDefaults.js +39 -0
- package/ai/dist/src/components/processing/networkLayoutHelpers.js +98 -0
- package/ai/dist/src/components/processing/ordinal.js +889 -0
- package/ai/dist/src/components/processing/ordinalConstants.js +23 -0
- package/ai/dist/src/components/processing/ordinalOverlays.js +88 -0
- package/ai/dist/src/components/processing/ordinalRenderPipeline.js +196 -0
- package/ai/dist/src/components/processing/xyDrawing.js +484 -0
- package/ai/dist/src/components/realtime/BinAccumulator.js +36 -0
- package/ai/dist/src/components/realtime/IncrementalExtent.js +55 -0
- package/ai/dist/src/components/realtime/RealtimeFrame.js +710 -0
- package/ai/dist/src/components/realtime/RingBuffer.js +104 -0
- package/ai/dist/src/components/realtime/renderers/barRenderer.js +133 -0
- package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +7 -0
- package/ai/dist/src/components/realtime/renderers/lineRenderer.js +164 -0
- package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +91 -0
- package/ai/dist/src/components/realtime/renderers/types.js +2 -0
- package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +163 -0
- package/ai/dist/src/components/realtime/types.js +2 -0
- package/ai/dist/src/components/semiotic-ai.js +66 -0
- package/ai/dist/src/components/semiotic-network.js +30 -0
- package/ai/dist/src/components/semiotic-ordinal.js +28 -0
- package/ai/dist/src/components/semiotic-realtime.js +37 -0
- package/ai/dist/src/components/semiotic-server.js +8 -0
- package/ai/dist/src/components/semiotic-xy.js +41 -0
- package/ai/dist/src/components/semiotic.js +101 -0
- package/ai/dist/src/components/server/renderToStaticSVG.js +392 -0
- package/ai/dist/src/components/store/TooltipStore.js +13 -0
- package/ai/dist/src/components/store/createStore.js +77 -0
- package/ai/dist/src/components/svg/SvgHelper.js +308 -0
- package/ai/dist/src/components/svg/areaDrawing.js +312 -0
- package/ai/dist/src/components/svg/boxplotRenderer.js +441 -0
- package/ai/dist/src/components/svg/bucketizedRenderer.js +677 -0
- package/ai/dist/src/components/svg/ckbinsRenderer.js +92 -0
- package/ai/dist/src/components/svg/ckmeans.js +238 -0
- package/ai/dist/src/components/svg/contourLayout.js +73 -0
- package/ai/dist/src/components/svg/contourRenderer.js +53 -0
- package/ai/dist/src/components/svg/edgeGenerators.js +181 -0
- package/ai/dist/src/components/svg/frameFunctions.js +579 -0
- package/ai/dist/src/components/svg/graphAlgorithms.js +138 -0
- package/ai/dist/src/components/svg/hexbinLayout.js +163 -0
- package/ai/dist/src/components/svg/lineDrawing.js +427 -0
- package/ai/dist/src/components/svg/networkDrawing.js +207 -0
- package/ai/dist/src/components/svg/nodeGenerators.js +131 -0
- package/ai/dist/src/components/svg/pieceDrawing.js +110 -0
- package/ai/dist/src/components/svg/pieceLayouts.js +588 -0
- package/ai/dist/src/components/svg/sankeyLinks.js +143 -0
- package/ai/dist/src/components/svg/summaryAxis.js +48 -0
- package/ai/dist/src/components/svg/summaryLayouts.js +202 -0
- package/ai/dist/src/components/svg/swarmLayout.js +128 -0
- package/ai/dist/src/components/types/annotationTypes.js +2 -0
- package/ai/dist/src/components/types/canvasTypes.js +2 -0
- package/ai/dist/src/components/types/generalTypes.js +2 -0
- package/ai/dist/src/components/types/interactionTypes.js +2 -0
- package/ai/dist/src/components/types/legendTypes.js +2 -0
- package/ai/dist/src/components/types/networkTypes.js +2 -0
- package/ai/dist/src/components/types/ordinalTypes.js +2 -0
- package/ai/dist/src/components/types/xyTypes.js +2 -0
- package/ai/dist/src/components/useBoundingRect.js +24 -0
- package/ai/dist/src/components/useDerivedStateFromProps.js +25 -0
- package/ai/dist/src/components/useLegacyUnmountCallback.js +21 -0
- package/ai/dist/src/components/visualizationLayerBehavior/axis.js +249 -0
- package/ai/dist/src/components/visualizationLayerBehavior/general.js +435 -0
- package/ai/dist/src/setupTests.js +4 -0
- package/ai/examples.md +394 -0
- package/ai/schema.json +1178 -0
- package/ai/system-prompt.md +38 -0
- package/dist/Annotation.d.ts +3 -0
- package/dist/AnnotationLayer/AnnotationLayer.d.ts +25 -0
- package/dist/Axis/Axis.d.ts +7 -0
- package/dist/Axis/axisTitle.d.ts +10 -0
- package/dist/Axis/index.d.ts +2 -0
- package/dist/Axis/summaryGraphic.d.ts +17 -0
- package/dist/Brush.d.ts +12 -0
- package/dist/DividedLine.d.ts +16 -0
- package/dist/FacetController.d.ts +12 -0
- package/dist/Frame.d.ts +2 -0
- package/dist/InteractionLayer.d.ts +3 -0
- package/dist/Legend.d.ts +3 -0
- package/dist/MiniMap.d.ts +14 -0
- package/dist/MinimapXYFrame.d.ts +10 -0
- package/dist/NetworkFrame.d.ts +8 -0
- package/dist/OrdinalFrame.d.ts +8 -0
- package/dist/ResponsiveFrame.d.ts +22 -0
- package/dist/ResponsiveMinimapXYFrame.d.ts +3 -0
- package/dist/ResponsiveNetworkFrame.d.ts +3 -0
- package/dist/ResponsiveOrdinalFrame.d.ts +3 -0
- package/dist/ResponsiveXYFrame.d.ts +3 -0
- package/dist/SparkFrame.d.ts +14 -0
- package/dist/SparkNetworkFrame.d.ts +5 -0
- package/dist/SparkOrdinalFrame.d.ts +5 -0
- package/dist/SparkXYFrame.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts +141 -0
- package/dist/TooltipPositioner/index.d.ts +7 -0
- package/dist/VisualizationLayer.d.ts +33 -0
- package/dist/XYFrame.d.ts +8 -0
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +19 -0
- package/dist/annotationLayerBehavior/d3labeler.d.ts +9 -0
- package/dist/annotationRules/baseRules.d.ts +25 -0
- package/dist/annotationRules/networkframeRules.d.ts +48 -0
- package/dist/annotationRules/orframeRules.d.ts +103 -0
- package/dist/annotationRules/xyframeRules.d.ts +117 -0
- package/dist/batchWork.d.ts +6 -0
- package/dist/charts/index.d.ts +62 -0
- package/dist/charts/network/ChordDiagram.d.ts +181 -0
- package/dist/charts/network/CirclePack.d.ts +103 -0
- package/dist/charts/network/ForceDirectedGraph.d.ts +192 -0
- package/dist/charts/network/SankeyDiagram.d.ts +195 -0
- package/dist/charts/network/TreeDiagram.d.ts +200 -0
- package/dist/charts/network/Treemap.d.ts +98 -0
- package/dist/charts/ordinal/BarChart.d.ts +119 -0
- package/dist/charts/ordinal/BoxPlot.d.ts +125 -0
- package/dist/charts/ordinal/DonutChart.d.ts +95 -0
- package/dist/charts/ordinal/DotPlot.d.ts +128 -0
- package/dist/charts/ordinal/GroupedBarChart.d.ts +113 -0
- package/dist/charts/ordinal/PieChart.d.ts +83 -0
- package/dist/charts/ordinal/StackedBarChart.d.ts +119 -0
- package/dist/charts/ordinal/SwarmPlot.d.ts +137 -0
- package/dist/charts/realtime/RealtimeBarChart.d.ts +102 -0
- package/dist/charts/realtime/RealtimeLineChart.d.ts +78 -0
- package/dist/charts/realtime/RealtimeSwarmChart.d.ts +88 -0
- package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +85 -0
- package/dist/charts/shared/ChartError.d.ts +19 -0
- package/dist/charts/shared/colorUtils.d.ts +62 -0
- package/dist/charts/shared/formatUtils.d.ts +82 -0
- package/dist/charts/shared/hooks.d.ts +20 -0
- package/dist/charts/shared/legendUtils.d.ts +32 -0
- package/dist/charts/shared/types.d.ts +58 -0
- package/dist/charts/shared/validateChartData.d.ts +41 -0
- package/dist/charts/shared/validateProps.d.ts +18 -0
- package/dist/charts/xy/AreaChart.d.ts +127 -0
- package/dist/charts/xy/BubbleChart.d.ts +157 -0
- package/dist/charts/xy/Heatmap.d.ts +153 -0
- package/dist/charts/xy/LineChart.d.ts +193 -0
- package/dist/charts/xy/Scatterplot.d.ts +50 -0
- package/dist/charts/xy/StackedAreaChart.d.ts +131 -0
- package/dist/constants/coordinateNames.d.ts +8 -0
- package/dist/constants/frame_props.d.ts +13 -0
- package/dist/constants/jsx.d.ts +19 -0
- package/dist/data/dataFunctions.d.ts +45 -0
- package/dist/data/multiAccessorUtils.d.ts +1 -0
- package/dist/data/networkPipelineCache.d.ts +27 -0
- package/dist/data/ordinalPipelineCache.d.ts +33 -0
- package/dist/data/unflowedFunctions.d.ts +1 -0
- package/dist/data/xyPipelineCache.d.ts +35 -0
- package/dist/generic_utilities/functions.d.ts +1 -0
- package/dist/index.d.ts +133 -0
- package/dist/interactionLayerBehavior/InteractionCanvas.d.ts +20 -0
- package/dist/network.js +8520 -0
- package/dist/network.js.map +1 -0
- package/dist/network.min.js +1 -0
- package/dist/network.module.js +8484 -0
- package/dist/network.module.js.map +1 -0
- package/dist/network.module.min.js +1 -0
- package/dist/ordinal.js +9276 -0
- package/dist/ordinal.js.map +1 -0
- package/dist/ordinal.min.js +1 -0
- package/dist/ordinal.module.js +9242 -0
- package/dist/ordinal.module.js.map +1 -0
- package/dist/ordinal.module.min.js +1 -0
- package/dist/processing/InteractionItems.d.ts +13 -0
- package/dist/processing/hierarchyUtils.d.ts +16 -0
- package/dist/processing/layouts/chordLayout.d.ts +2 -0
- package/dist/processing/layouts/forceLayout.d.ts +3 -0
- package/dist/processing/layouts/hierarchyLayout.d.ts +10 -0
- package/dist/processing/layouts/index.d.ts +8 -0
- package/dist/processing/layouts/sankeyLayout.d.ts +8 -0
- package/dist/processing/layouts/simpleLayouts.d.ts +7 -0
- package/dist/processing/layouts/types.d.ts +17 -0
- package/dist/processing/network.d.ts +111 -0
- package/dist/processing/networkDefaults.d.ts +36 -0
- package/dist/processing/networkLayoutHelpers.d.ts +54 -0
- package/dist/processing/ordinal.d.ts +102 -0
- package/dist/processing/ordinalConstants.d.ts +33 -0
- package/dist/processing/ordinalOverlays.d.ts +33 -0
- package/dist/processing/ordinalRenderPipeline.d.ts +148 -0
- package/dist/processing/xyDrawing.d.ts +140 -0
- package/dist/realtime/BinAccumulator.d.ts +8 -0
- package/dist/realtime/IncrementalExtent.d.ts +13 -0
- package/dist/realtime/RealtimeFrame.d.ts +4 -0
- package/dist/realtime/RingBuffer.d.ts +19 -0
- package/dist/realtime/renderers/barRenderer.d.ts +2 -0
- package/dist/realtime/renderers/candlestickRenderer.d.ts +2 -0
- package/dist/realtime/renderers/lineRenderer.d.ts +2 -0
- package/dist/realtime/renderers/swarmRenderer.d.ts +2 -0
- package/dist/realtime/renderers/types.d.ts +9 -0
- package/dist/realtime/renderers/waterfallRenderer.d.ts +3 -0
- package/dist/realtime/types.d.ts +113 -0
- package/dist/realtime.js +1598 -0
- package/dist/realtime.js.map +1 -0
- package/dist/realtime.min.js +1 -0
- package/dist/realtime.module.js +1566 -0
- package/dist/realtime.module.js.map +1 -0
- package/dist/realtime.module.min.js +1 -0
- package/dist/semiotic-ai.d.ts +28 -0
- package/dist/semiotic-ai.js +18722 -0
- package/dist/semiotic-ai.js.map +1 -0
- package/dist/semiotic-ai.min.js +1 -0
- package/dist/semiotic-ai.module.js +18668 -0
- package/dist/semiotic-ai.module.js.map +1 -0
- package/dist/semiotic-ai.module.min.js +1 -0
- package/dist/semiotic-network.d.ts +19 -0
- package/dist/semiotic-ordinal.d.ts +18 -0
- package/dist/semiotic-realtime.d.ts +23 -0
- package/dist/semiotic-server.d.ts +1 -0
- package/dist/semiotic-xy.d.ts +24 -0
- package/dist/semiotic.d.ts +51 -0
- package/dist/semiotic.js +18723 -12996
- package/dist/semiotic.js.map +1 -0
- package/dist/semiotic.min.js +1 -0
- package/dist/semiotic.module.js +18666 -12965
- package/dist/semiotic.module.js.map +1 -0
- package/dist/semiotic.module.min.js +1 -0
- package/dist/server/renderToStaticSVG.d.ts +9 -0
- package/dist/server.js +8360 -0
- package/dist/server.js.map +1 -0
- package/dist/server.min.js +1 -0
- package/dist/server.module.js +8331 -0
- package/dist/server.module.js.map +1 -0
- package/dist/server.module.min.js +1 -0
- package/dist/store/TooltipStore.d.ts +2 -0
- package/dist/store/createStore.d.ts +1 -0
- package/dist/svg/SvgHelper.d.ts +33 -0
- package/dist/svg/areaDrawing.d.ts +21 -0
- package/dist/svg/boxplotRenderer.d.ts +15 -0
- package/dist/svg/bucketizedRenderer.d.ts +16 -0
- package/dist/svg/ckbinsRenderer.d.ts +20 -0
- package/dist/svg/ckmeans.d.ts +69 -0
- package/dist/svg/contourLayout.d.ts +6 -0
- package/dist/svg/contourRenderer.d.ts +12 -0
- package/dist/svg/edgeGenerators.d.ts +51 -0
- package/dist/svg/frameFunctions.d.ts +108 -0
- package/dist/svg/graphAlgorithms.d.ts +14 -0
- package/dist/svg/hexbinLayout.d.ts +7 -0
- package/dist/svg/lineDrawing.d.ts +99 -0
- package/dist/svg/networkDrawing.d.ts +16 -0
- package/dist/svg/nodeGenerators.d.ts +58 -0
- package/dist/svg/pieceDrawing.d.ts +12 -0
- package/dist/svg/pieceLayouts.d.ts +53 -0
- package/dist/svg/sankeyLinks.d.ts +3 -0
- package/dist/svg/summaryAxis.d.ts +6 -0
- package/dist/svg/summaryLayouts.d.ts +53 -0
- package/dist/svg/swarmLayout.d.ts +13 -0
- package/dist/types/annotationTypes.d.ts +135 -0
- package/dist/types/canvasTypes.d.ts +9 -0
- package/dist/types/generalTypes.d.ts +238 -0
- package/dist/types/interactionTypes.d.ts +72 -0
- package/dist/types/legendTypes.d.ts +20 -0
- package/dist/types/networkTypes.d.ts +175 -0
- package/dist/types/ordinalTypes.d.ts +112 -0
- package/dist/types/xyTypes.d.ts +115 -0
- package/dist/useBoundingRect.d.ts +2 -0
- package/dist/useDerivedStateFromProps.d.ts +1 -0
- package/dist/useLegacyUnmountCallback.d.ts +2 -0
- package/dist/visualizationLayerBehavior/axis.d.ts +36 -0
- package/dist/visualizationLayerBehavior/general.d.ts +80 -0
- package/dist/xy.js +7944 -0
- package/dist/xy.js.map +1 -0
- package/dist/xy.min.js +1 -0
- package/dist/xy.module.js +7903 -0
- package/dist/xy.module.js.map +1 -0
- package/dist/xy.module.min.js +1 -0
- package/package.json +116 -65
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.module.js","sources":["../src/components/realtime/RingBuffer.ts","../src/components/realtime/IncrementalExtent.ts","../src/components/realtime/renderers/lineRenderer.ts","../src/components/realtime/renderers/swarmRenderer.ts","../src/components/realtime/renderers/candlestickRenderer.ts","../src/components/realtime/renderers/waterfallRenderer.ts","../src/components/realtime/BinAccumulator.ts","../src/components/realtime/renderers/barRenderer.ts","../src/components/realtime/RealtimeFrame.tsx","../src/components/charts/realtime/RealtimeLineChart.tsx","../src/components/charts/realtime/RealtimeBarChart.tsx","../src/components/charts/realtime/RealtimeSwarmChart.tsx","../src/components/charts/realtime/RealtimeWaterfallChart.tsx"],"sourcesContent":["export class RingBuffer<T> {\n private buffer: (T | undefined)[]\n private head: number = 0\n private _size: number = 0\n\n constructor(private _capacity: number) {\n if (_capacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n this.buffer = new Array(_capacity)\n }\n\n push(value: T): T | undefined {\n let evicted: T | undefined\n if (this._size === this._capacity) {\n // Buffer is full — the slot at head is the oldest item\n evicted = this.buffer[this.head]\n } else {\n this._size++\n }\n this.buffer[this.head] = value\n this.head = (this.head + 1) % this._capacity\n return evicted\n }\n\n pushMany(values: T[]): T[] {\n const evicted: T[] = []\n for (const v of values) {\n const e = this.push(v)\n if (e !== undefined) {\n evicted.push(e)\n }\n }\n return evicted\n }\n\n get(index: number): T | undefined {\n if (index < 0 || index >= this._size) return undefined\n const realIndex =\n (this.head - this._size + index + this._capacity) % this._capacity\n return this.buffer[realIndex]\n }\n\n peek(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - 1 + this._capacity) % this._capacity]\n }\n\n peekOldest(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - this._size + this._capacity) % this._capacity]\n }\n\n [Symbol.iterator](): Iterator<T> {\n let i = 0\n const self = this\n return {\n next(): IteratorResult<T> {\n if (i >= self._size) return { done: true, value: undefined } as IteratorReturnResult<undefined>\n return { done: false, value: self.get(i++)! }\n }\n }\n }\n\n toArray(): T[] {\n const result: T[] = []\n for (const item of this) {\n result.push(item)\n }\n return result\n }\n\n resize(newCapacity: number): T[] {\n if (newCapacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n const items = this.toArray()\n const evicted: T[] = []\n while (items.length > newCapacity) {\n evicted.push(items.shift()!)\n }\n this._capacity = newCapacity\n this.buffer = new Array(newCapacity)\n this.head = 0\n this._size = 0\n for (const item of items) {\n this.push(item)\n }\n return evicted\n }\n\n clear(): void {\n this.buffer = new Array(this._capacity)\n this.head = 0\n this._size = 0\n }\n\n get size(): number {\n return this._size\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n get full(): boolean {\n return this._size === this._capacity\n }\n}\n","export class IncrementalExtent {\n private _min: number = Infinity\n private _max: number = -Infinity\n private _dirty: boolean = false\n\n push(value: number): void {\n if (Number.isNaN(value)) return\n if (value < this._min) this._min = value\n if (value > this._max) this._max = value\n }\n\n evict(value: number): void {\n if (value === this._min || value === this._max) {\n this._dirty = true\n }\n }\n\n recalculate<T>(\n values: Iterable<T>,\n accessor?: (v: T) => number\n ): void {\n this._min = Infinity\n this._max = -Infinity\n for (const v of values) {\n const n = accessor ? accessor(v) : (v as number)\n if (Number.isNaN(n)) continue\n if (n < this._min) this._min = n\n if (n > this._max) this._max = n\n }\n this._dirty = false\n }\n\n clear(): void {\n this._min = Infinity\n this._max = -Infinity\n this._dirty = false\n }\n\n get extent(): [number, number] {\n return [this._min, this._max]\n }\n\n get min(): number {\n return this._min\n }\n\n get max(): number {\n return this._max\n }\n\n get dirty(): boolean {\n return this._dirty\n }\n}\n","import type { RendererFn } from \"./types\"\n\ninterface ColorThreshold {\n value: number\n color: string\n thresholdType: \"greater\" | \"lesser\"\n}\n\nfunction resolveColor(\n value: number,\n thresholds: ColorThreshold[],\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\nexport const lineRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis } = layout\n const { time: getTime, value: getValue } = accessors\n\n const baseColor = style.stroke || \"#007bff\"\n\n // Extract color thresholds from annotations\n const colorThresholds: ColorThreshold[] | null =\n annotations\n ? annotations\n .filter((a) => a.type === \"threshold\" && a.color)\n .map((a) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n : null\n\n const hasColorThresholds = colorThresholds && colorThresholds.length > 0\n\n // Fast path: no color thresholds — single-path draw, zero overhead\n if (!hasColorThresholds) {\n ctx.beginPath()\n ctx.strokeStyle = baseColor\n ctx.lineWidth = style.strokeWidth || 2\n if (style.strokeDasharray) {\n ctx.setLineDash(style.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([])\n }\n\n let started = false\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)) {\n started = false\n continue\n }\n\n const tPixel = timeScale(t)\n const vPixel = valueScale(v)\n\n const x = timeAxis === \"x\" ? tPixel : vPixel\n const y = timeAxis === \"x\" ? vPixel : tPixel\n\n if (!started) {\n ctx.moveTo(x, y)\n started = true\n } else {\n ctx.lineTo(x, y)\n }\n }\n\n ctx.stroke()\n return\n }\n\n // Threshold mode: segment-based drawing\n ctx.lineWidth = style.strokeWidth || 2\n if (style.strokeDasharray) {\n ctx.setLineDash(style.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([])\n }\n\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 toPixel(t: number, v: number): [number, number] {\n const tPixel = timeScale(t)\n const vPixel = valueScale(v)\n return timeAxis === \"x\" ? [tPixel, vPixel] : [vPixel, tPixel]\n }\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 (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)) {\n endSegment()\n prevX = null\n prevY = null\n prevValue = null\n prevColor = null\n continue\n }\n\n const [x, y] = toPixel(t, v)\n const currColor = resolveColor(v, colorThresholds, baseColor)\n\n if (prevX === null || prevColor === null || prevValue === null) {\n // First valid point\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 all thresholds crossed between prevValue and v, sorted by interpolation t\n const crossings: Array<{ t: number; color: string }> = []\n\n for (const threshold of colorThresholds) {\n const tv = threshold.value\n // Check if the threshold value lies between prevValue and v\n if ((prevValue <= tv && v >= tv) || (prevValue >= tv && v <= tv)) {\n // Don't add crossing at exact endpoints\n if (prevValue !== tv && v !== tv) {\n const interpT = (tv - prevValue) / (v - prevValue)\n crossings.push({ t: interpT, color: \"\" }) // color resolved after sorting\n }\n }\n }\n\n // Sort crossings by interpolation parameter\n crossings.sort((a, b) => a.t - b.t)\n\n // Walk through crossings\n let lastT = 0\n let runningColor = prevColor\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 // Determine value at crossing point to resolve next color\n const midValue = prevValue + (v - prevValue) * crossing.t\n // Nudge slightly past the crossing to determine the color on the other side\n const nudgedValue = prevValue + (v - prevValue) * Math.min(crossing.t + 0.0001, 1)\n const nextColor = resolveColor(nudgedValue, colorThresholds, baseColor)\n\n ctx.lineTo(midX, midY)\n endSegment()\n startSegment(nextColor, midX, midY)\n runningColor = nextColor\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","import type { RendererFn } from \"./types\"\n\nconst DEFAULT_PALETTE = [\n \"#007bff\", \"#28a745\", \"#dc3545\", \"#fd7e14\", \"#6f42c1\",\n \"#20c997\", \"#e83e8c\", \"#17a2b8\", \"#6610f2\", \"#ffc107\"\n]\n\ninterface ColorThreshold {\n value: number\n color: string\n thresholdType: \"greater\" | \"lesser\"\n}\n\nfunction resolveColor(\n value: number,\n thresholds: ColorThreshold[],\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\nexport const swarmRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis } = layout\n const { time: getTime, value: getValue, category: getCategory } = accessors\n const ss = options?.swarmStyle\n const barColors = options?.barColors\n\n const radius = ss?.radius ?? 3\n const defaultFill = ss?.fill ?? style.stroke ?? \"#007bff\"\n const opacity = ss?.opacity ?? 0.7\n const hasStroke = ss?.stroke != null\n\n // Extract color thresholds from annotations\n const colorThresholds: ColorThreshold[] | null =\n annotations\n ? annotations\n .filter((a) => a.type === \"threshold\" && a.color)\n .map((a) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n : null\n\n const hasColorThresholds = colorThresholds && colorThresholds.length > 0\n\n ctx.globalAlpha = opacity\n\n let paletteIndex = 0\n const categoryColorCache: Record<string, string> = {}\n\n for (const d of data) {\n const t = getTime(d)\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n\n let x: number, y: number\n if (timeAxis === \"x\") {\n x = timeScale(t)\n y = valueScale(v)\n } else {\n x = valueScale(v)\n y = timeScale(t)\n }\n\n // Determine fill color\n let fill = defaultFill\n if (getCategory) {\n const cat = getCategory(d)\n if (barColors && barColors[cat]) {\n fill = barColors[cat]\n } else {\n if (!(cat in categoryColorCache)) {\n categoryColorCache[cat] = DEFAULT_PALETTE[paletteIndex % DEFAULT_PALETTE.length]\n paletteIndex++\n }\n fill = categoryColorCache[cat]\n }\n }\n\n // Threshold coloring overrides category/default fill\n if (hasColorThresholds) {\n fill = resolveColor(v, colorThresholds, fill)\n }\n\n ctx.fillStyle = fill\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, Math.PI * 2)\n ctx.fill()\n\n if (hasStroke) {\n ctx.strokeStyle = ss!.stroke!\n ctx.lineWidth = ss?.strokeWidth ?? 1\n ctx.stroke()\n }\n }\n\n ctx.globalAlpha = 1\n}\n","import type { RendererFn } from \"./types\"\n\nexport const candlestickRenderer: RendererFn = () => {\n throw new Error(\"candlestickRenderer: Not yet implemented\")\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","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\"\nimport { computeBins } from \"../BinAccumulator\"\n\nconst DEFAULT_PALETTE = [\n \"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\",\n \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\",\n \"#9c755f\", \"#bab0ac\"\n]\n\nexport const barRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const binSize = options?.binSize\n if (!binSize) return\n\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis } = layout\n const { time: getTime, value: getValue, category: getCategory } = accessors\n const barColors = options?.barColors\n const barStyle = options?.barStyle\n\n const bins = computeBins(data, getTime, getValue, binSize, getCategory)\n if (bins.size === 0) return\n\n const [domainMin, domainMax] = timeScale.domain() as [number, number]\n\n const gap = barStyle?.gap ?? 1\n const hasCategories = getCategory != null\n\n // Determine category order: barColors keys first, then alphabetical for unlisted\n let categoryOrder: string[] | null = null\n if (hasCategories) {\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 = barColors ? Object.keys(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 // Bar stroke settings\n const hasBarStroke = barStyle?.stroke != null\n if (hasBarStroke) {\n ctx.strokeStyle = barStyle!.stroke!\n ctx.lineWidth = barStyle?.strokeWidth ?? 1\n }\n\n for (const bin of bins.values()) {\n if (timeAxis === \"x\") {\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 = timeScale(clampedStart)\n const rawX1 = timeScale(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 (hasCategories && categoryOrder) {\n let cumulativeBase = 0\n let paletteIdx = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n\n const yBottom = valueScale(cumulativeBase)\n const yTop = valueScale(cumulativeBase + catVal)\n const rectY = Math.min(yBottom, yTop)\n const rectH = Math.abs(yBottom - yTop)\n\n ctx.fillStyle = (barColors && barColors[cat]) || DEFAULT_PALETTE[paletteIdx % DEFAULT_PALETTE.length]\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasBarStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n\n cumulativeBase += catVal\n paletteIdx++\n }\n } else {\n const yZero = valueScale(0)\n const yTop = valueScale(bin.total)\n const rectY = Math.min(yZero, yTop)\n const rectH = Math.abs(yZero - yTop)\n\n ctx.fillStyle = barStyle?.fill || style.stroke || \"#007bff\"\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasBarStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n }\n } else {\n // timeAxis === \"y\": horizontal bars\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n if (clampedStart >= clampedEnd) continue\n\n const rawY0 = timeScale(clampedStart)\n const rawY1 = timeScale(clampedEnd)\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) continue\n\n if (hasCategories && categoryOrder) {\n let cumulativeBase = 0\n let paletteIdx = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n\n const xLeft = valueScale(cumulativeBase)\n const xRight = valueScale(cumulativeBase + catVal)\n const rectX = Math.min(xLeft, xRight)\n const rectW = Math.abs(xRight - xLeft)\n\n ctx.fillStyle = (barColors && barColors[cat]) || DEFAULT_PALETTE[paletteIdx % DEFAULT_PALETTE.length]\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasBarStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n\n cumulativeBase += catVal\n paletteIdx++\n }\n } else {\n const xZero = valueScale(0)\n const xEnd = valueScale(bin.total)\n const rectX = Math.min(xZero, xEnd)\n const rectW = Math.abs(xEnd - xZero)\n\n ctx.fillStyle = barStyle?.fill || style.stroke || \"#007bff\"\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasBarStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n }\n }\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 { scaleLinear, type ScaleLinear } from \"d3-scale\"\n\nimport { RingBuffer } from \"./RingBuffer\"\nimport { IncrementalExtent } from \"./IncrementalExtent\"\nimport { lineRenderer } from \"./renderers/lineRenderer\"\nimport { swarmRenderer } from \"./renderers/swarmRenderer\"\nimport { candlestickRenderer } from \"./renderers/candlestickRenderer\"\nimport { waterfallRenderer, computeWaterfallExtent } from \"./renderers/waterfallRenderer\"\nimport { barRenderer } from \"./renderers/barRenderer\"\nimport { computeBins, computeBinExtent } from \"./BinAccumulator\"\nimport type { RendererFn } from \"./renderers/types\"\nimport type {\n RealtimeFrameProps,\n RealtimeFrameHandle,\n ArrowOfTime,\n LineStyle,\n HoverData,\n HoverAnnotationConfig\n} from \"./types\"\n\nconst RENDERERS: Record<string, RendererFn> = {\n line: lineRenderer,\n swarm: swarmRenderer,\n candlestick: candlestickRenderer,\n waterfall: waterfallRenderer,\n bar: barRenderer\n}\n\nconst DEFAULT_MARGIN = { top: 20, right: 20, bottom: 30, left: 40 }\nconst DEFAULT_LINE_STYLE: LineStyle = {}\n\nfunction resolveAccessor(\n accessor: string | ((d: Record<string, any>) => number) | undefined,\n fallback: string\n): (d: Record<string, any>) => number {\n if (typeof accessor === \"function\") return (d: Record<string, any>) => +accessor(d)\n const key = accessor || fallback\n return (d: Record<string, any>) => +d[key]\n}\n\nfunction getTimeAxis(arrowOfTime: ArrowOfTime): \"x\" | \"y\" {\n return arrowOfTime === \"up\" || arrowOfTime === \"down\" ? \"y\" : \"x\"\n}\n\nfunction buildScales(\n arrowOfTime: ArrowOfTime,\n timeExtent: [number, number],\n valueExtent: [number, number],\n width: number,\n height: number\n) {\n const timeAxis = getTimeAxis(arrowOfTime)\n\n let timeRange: [number, number]\n let valueRange: [number, number]\n\n if (timeAxis === \"x\") {\n timeRange = arrowOfTime === \"right\" ? [0, width] : [width, 0]\n valueRange = [height, 0]\n } else {\n timeRange = arrowOfTime === \"down\" ? [0, height] : [height, 0]\n valueRange = [0, width]\n }\n\n return {\n time: scaleLinear().domain(timeExtent).range(timeRange),\n value: scaleLinear().domain(valueExtent).range(valueRange)\n }\n}\n\nfunction defaultTickFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\n/** Colors resolved from CSS custom properties for theme-aware canvas rendering */\ninterface ThemeColors {\n axisStroke: string // axis lines and tick marks\n tickText: string // tick label text\n crosshair: string // crosshair lines\n hoverFill: string // hover highlight fill\n hoverStroke: string // hover highlight stroke\n pointRing: string // ring around hover point indicator\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\n/** Read CSS custom properties from an element to build theme-aware colors */\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 no CSS custom properties are found, fall back to light defaults\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\nfunction drawAxes(\n ctx: CanvasRenderingContext2D,\n arrowOfTime: ArrowOfTime,\n timeScale: ScaleLinear<number, number>,\n valueScale: ScaleLinear<number, number>,\n width: number,\n height: number,\n tickFormatTime?: (value: number) => string,\n tickFormatValue?: (value: number) => string,\n theme?: ThemeColors\n) {\n const timeAxis = getTimeAxis(arrowOfTime)\n const fmtValue = tickFormatValue || defaultTickFormat\n const colors = theme || LIGHT_THEME\n\n ctx.strokeStyle = colors.axisStroke\n ctx.lineWidth = 1\n ctx.fillStyle = colors.tickText\n ctx.font = \"10px sans-serif\"\n ctx.textAlign = \"center\"\n ctx.textBaseline = \"top\"\n\n if (timeAxis === \"x\") {\n ctx.beginPath()\n ctx.moveTo(0, height)\n ctx.lineTo(width, height)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(0, height)\n ctx.stroke()\n\n const timeTicks = timeScale.ticks(5)\n ctx.textAlign = \"center\"\n ctx.textBaseline = \"top\"\n for (const tick of timeTicks) {\n const x = timeScale(tick)\n ctx.beginPath()\n ctx.moveTo(x, height)\n ctx.lineTo(x, height + 5)\n ctx.stroke()\n if (tickFormatTime) {\n ctx.fillText(tickFormatTime(tick), x, height + 7)\n }\n }\n\n ctx.textAlign = \"right\"\n ctx.textBaseline = \"middle\"\n const valueTicks = valueScale.ticks(5)\n for (const tick of valueTicks) {\n const y = valueScale(tick)\n ctx.beginPath()\n ctx.moveTo(-5, y)\n ctx.lineTo(0, y)\n ctx.stroke()\n ctx.fillText(fmtValue(tick), -8, y)\n }\n } else {\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(0, height)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.moveTo(0, timeAxis === \"y\" && arrowOfTime === \"down\" ? 0 : height)\n ctx.lineTo(width, timeAxis === \"y\" && arrowOfTime === \"down\" ? 0 : height)\n ctx.stroke()\n\n ctx.textAlign = \"center\"\n ctx.textBaseline = \"top\"\n const valueTicks = valueScale.ticks(5)\n for (const tick of valueTicks) {\n const x = valueScale(tick)\n ctx.beginPath()\n ctx.moveTo(x, height)\n ctx.lineTo(x, height + 5)\n ctx.stroke()\n ctx.fillText(fmtValue(tick), x, height + 7)\n }\n\n ctx.textAlign = \"right\"\n ctx.textBaseline = \"middle\"\n const timeTicks = timeScale.ticks(5)\n for (const tick of timeTicks) {\n const y = timeScale(tick)\n ctx.beginPath()\n ctx.moveTo(-5, y)\n ctx.lineTo(0, y)\n ctx.stroke()\n if (tickFormatTime) {\n ctx.fillText(tickFormatTime(tick), -8, y)\n }\n }\n }\n}\n\n// Binary search: find the index of the nearest point by time value\nfunction 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 // lo is first point with time >= targetTime; check if lo-1 is closer\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\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 const colors = theme || LIGHT_THEME\n\n ctx.save()\n const crossStyle = typeof config.crosshair === \"object\" ? config.crosshair : {}\n ctx.strokeStyle = crossStyle.stroke || colors.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 // Vertical guide\n ctx.beginPath()\n ctx.moveTo(hover.x, 0)\n ctx.lineTo(hover.x, height)\n ctx.stroke()\n\n // Horizontal guide\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 = colors.pointRing\n ctx.lineWidth = 2\n ctx.stroke()\n}\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, formatTime }: { hover: HoverData; formatTime?: (v: number) => string }) {\n const fmtValue = (v: number) =>\n Number.isInteger(v) ? String(v) : v.toFixed(2)\n const fmtTime = formatTime || fmtValue\n\n const colorMap: Record<string, string> | undefined = hover.data.barColors\n const hoveredCat: string | undefined = hover.data.hoveredCategory\n const hoveredCatVal: number | undefined = hover.data.hoveredCategoryValue\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {hoveredCat != null && hoveredCatVal != null ? (\n <>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 5, fontWeight: 600, marginBottom: 2 }}>\n {colorMap && colorMap[hoveredCat] && (\n <span style={{ width: 8, height: 8, borderRadius: \"50%\", background: colorMap[hoveredCat], flexShrink: 0 }} />\n )}\n <span>{hoveredCat}</span>\n <span style={{ marginLeft: \"auto\" }}>{fmtValue(hoveredCatVal)}</span>\n </div>\n <div style={{ opacity: 0.6, fontSize: 11 }}>\n total {fmtValue(hover.value)}\n </div>\n </>\n ) : (\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {fmtValue(hover.value)}\n </div>\n )}\n <div style={{ opacity: 0.7, fontSize: 11 }}>\n {fmtTime(hover.time)}\n </div>\n </div>\n )\n}\n\nconst RealtimeFrame = forwardRef<RealtimeFrameHandle, RealtimeFrameProps>(\n function RealtimeFrame(props, ref) {\n const {\n chartType = \"line\",\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent: fixedTimeExtent,\n valueExtent: fixedValueExtent,\n extentPadding = 0.1,\n size = [500, 300],\n margin: marginProp,\n className,\n lineStyle = DEFAULT_LINE_STYLE,\n annotations,\n svgAnnotationRules,\n hoverAnnotation,\n tooltipContent,\n customHoverBehavior,\n showAxes = true,\n background,\n categoryAccessor,\n binSize,\n barColors,\n barStyle,\n waterfallStyle,\n swarmStyle,\n tickFormatTime,\n tickFormatValue\n } = props\n\n const margin = { ...DEFAULT_MARGIN, ...marginProp }\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n // Memoize accessors so they don't change every render.\n // Without this, the data effect re-runs on every render\n // (new function reference), which triggers cascading re-renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const getTime = useMemo(() => resolveAccessor(timeAccessor, \"time\"), [timeAccessor])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const getValue = useMemo(() => resolveAccessor(valueAccessor, \"value\"), [valueAccessor])\n\n const getCategory = useMemo(\n () => categoryAccessor\n ? (typeof categoryAccessor === \"function\" ? categoryAccessor : (d: Record<string, any>) => d[categoryAccessor])\n : undefined,\n [categoryAccessor]\n )\n\n const bufferRef = useRef<RingBuffer<Record<string, any>>>(\n new RingBuffer(windowSize)\n )\n const timeExtentRef = useRef(new IncrementalExtent())\n const valueExtentRef = useRef(new IncrementalExtent())\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const dirtyRef = useRef(false)\n const scalesRef = useRef<ReturnType<typeof buildScales> | null>(null)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n const growingCapRef = useRef(windowSize)\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 // Store the render function in a ref so scheduleRender is stable\n // and never goes stale. The ref is updated every React render\n // (below the hooks) so it always captures fresh props/closures.\n const renderFnRef = useRef<() => void>(() => {})\n\n // Stable scheduleRender — never recreated, so no stale closure chain\n const scheduleRender = useCallback(() => {\n if (rafRef.current) return\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }, [])\n\n const pushPoint = useCallback(\n (point: Record<string, any>) => {\n const buf = bufferRef.current\n const t = getTime(point)\n const v = getValue(point)\n\n if (windowMode === \"growing\" && buf.full) {\n growingCapRef.current *= 2\n buf.resize(growingCapRef.current)\n }\n\n const evicted = buf.push(point)\n\n timeExtentRef.current.push(t)\n valueExtentRef.current.push(v)\n\n if (evicted != null) {\n timeExtentRef.current.evict(getTime(evicted))\n valueExtentRef.current.evict(getValue(evicted))\n }\n\n dirtyRef.current = true\n scheduleRender()\n },\n [windowMode, getTime, getValue, scheduleRender]\n )\n\n const pushManyPoints = useCallback(\n (points: Record<string, any>[]) => {\n for (const p of points) {\n pushPoint(p)\n }\n },\n [pushPoint]\n )\n\n const clearAll = useCallback(() => {\n bufferRef.current.clear()\n timeExtentRef.current.clear()\n valueExtentRef.current.clear()\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n useImperativeHandle(\n ref,\n () => ({\n push: pushPoint,\n pushMany: pushManyPoints,\n clear: clearAll,\n getData: () => bufferRef.current.toArray()\n }),\n [pushPoint, pushManyPoints, clearAll]\n )\n\n // Controlled data prop\n useEffect(() => {\n if (!data) return\n bufferRef.current.clear()\n timeExtentRef.current.clear()\n valueExtentRef.current.clear()\n for (const d of data) {\n bufferRef.current.push(d)\n timeExtentRef.current.push(getTime(d))\n valueExtentRef.current.push(getValue(d))\n }\n dirtyRef.current = true\n scheduleRender()\n }, [data, getTime, getValue, scheduleRender])\n\n // Hover mouse handler — stored in ref so it always captures fresh closures\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!hoverAnnotation) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n // Mouse position in chart coordinates (canvas is full-size, ctx translated by margin)\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n // Outside chart area → clear hover\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 scales = scalesRef.current\n if (!scales) return\n\n const buf = bufferRef.current\n if (buf.size === 0) return\n\n const timeAxis = getTimeAxis(arrowOfTime)\n const timePixel = timeAxis === \"x\" ? chartX : chartY\n const targetTime = scales.time.invert(timePixel)\n\n let hover: HoverData\n\n if (chartType === \"bar\" && binSize) {\n // Snap to the bin the cursor is in\n const bins = computeBins(buf, getTime, getValue, binSize, getCategory)\n const binStart = Math.floor(targetTime / binSize) * binSize\n const bin = bins.get(binStart)\n if (!bin) return\n\n const [domainMin, domainMax] = scales.time.domain() as [number, number]\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n const midTime = clampedStart + (clampedEnd - clampedStart) / 2\n const tPixel = scales.time(midTime)\n const vPixel = scales.value(bin.total)\n const x = timeAxis === \"x\" ? tPixel : vPixel\n const y = timeAxis === \"x\" ? vPixel : tPixel\n\n // Hit-test which category segment the cursor is in\n let hoveredCategory: string | undefined\n let hoveredCategoryValue: number | undefined\n if (getCategory && bin.categories.size > 0) {\n const colorKeys = barColors ? Object.keys(barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Array.from(bin.categories.keys()).filter(c => !listed.has(c)).sort()\n const catOrder = [...colorKeys.filter(k => bin.categories.has(k)), ...unlisted]\n\n const valuePixel = timeAxis === \"x\" ? chartY : chartX\n let cumBase = 0\n for (const cat of catOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n const edgeA = scales.value(cumBase)\n const edgeB = scales.value(cumBase + catVal)\n const lo = Math.min(edgeA, edgeB)\n const hi = Math.max(edgeA, edgeB)\n if (valuePixel >= lo && valuePixel <= hi) {\n hoveredCategory = cat\n hoveredCategoryValue = catVal\n break\n }\n cumBase += catVal\n }\n }\n\n hover = {\n data: {\n binStart: bin.start, binEnd: bin.end, total: bin.total,\n categories: Object.fromEntries(bin.categories),\n barColors: barColors || {},\n hoveredCategory,\n hoveredCategoryValue\n },\n time: midTime,\n value: bin.total,\n x,\n y\n }\n } else {\n const idx = findNearestIndex(buf, targetTime, getTime)\n if (idx < 0) return\n\n const d = buf.get(idx)!\n const t = getTime(d)\n const v = getValue(d)\n\n const tPixel = scales.time(t)\n const vPixel = scales.value(v)\n const x = timeAxis === \"x\" ? tPixel : vPixel\n const y = timeAxis === \"x\" ? vPixel : tPixel\n\n hover = { data: d, time: t, value: v, x, y }\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 // Stable event handlers that delegate to refs\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // Update the render function ref on every React render.\n // This captures the latest props (arrowOfTime, chartType, lineStyle,\n // annotations, etc.) without needing useCallback dependency chains.\n // The rAF loop calls this via renderFnRef, so it always sees fresh values.\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 buf = bufferRef.current\n const tExtent = timeExtentRef.current\n const vExtent = valueExtentRef.current\n\n if (tExtent.dirty) {\n tExtent.recalculate(buf, getTime)\n }\n if (vExtent.dirty) {\n vExtent.recalculate(buf, getValue)\n }\n\n let tDomain = fixedTimeExtent || tExtent.extent\n let vDomain = fixedValueExtent || vExtent.extent\n\n if (chartType === \"bar\" && binSize && !fixedValueExtent && buf.size > 0) {\n const [, maxTotal] = computeBinExtent(buf, getTime, getValue, binSize, getCategory)\n vDomain = [0, maxTotal + maxTotal * extentPadding]\n } else if (chartType === \"waterfall\" && !fixedValueExtent && buf.size > 0) {\n const [minCum, maxCum] = computeWaterfallExtent(buf, getValue)\n const range = maxCum - minCum\n const pad = range > 0 ? range * extentPadding : 1\n vDomain = [\n Math.min(0, minCum - Math.abs(pad)),\n Math.max(0, maxCum + Math.abs(pad))\n ]\n } else if (!fixedValueExtent && vDomain[0] !== Infinity) {\n const range = vDomain[1] - vDomain[0]\n const pad = range > 0 ? range * extentPadding : 1\n vDomain = [vDomain[0] - pad, vDomain[1] + pad]\n }\n\n if (tDomain[0] === Infinity || tDomain[1] === -Infinity) {\n tDomain = [0, 1]\n }\n if (vDomain[0] === Infinity || vDomain[1] === -Infinity) {\n vDomain = [0, 1]\n }\n\n const scales = buildScales(\n arrowOfTime,\n tDomain,\n vDomain,\n adjustedWidth,\n adjustedHeight\n )\n scalesRef.current = scales\n\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\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n // Resolve theme colors from CSS custom properties for theme-aware rendering\n const theme = resolveThemeColors(canvas)\n\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n if (showAxes) {\n ctx.save()\n drawAxes(ctx, arrowOfTime, scales.time, scales.value, adjustedWidth, adjustedHeight, tickFormatTime, tickFormatValue, theme)\n ctx.restore()\n }\n\n const renderer = RENDERERS[chartType]\n if (renderer) {\n const layout = {\n width: adjustedWidth,\n height: adjustedHeight,\n timeAxis: getTimeAxis(arrowOfTime)\n }\n renderer(\n ctx, buf, scales, layout, lineStyle,\n { time: getTime, value: getValue, category: getCategory },\n annotations,\n chartType === \"bar\" ? { binSize, barColors, barStyle }\n : chartType === \"waterfall\" ? { waterfallStyle }\n : chartType === \"swarm\" ? { swarmStyle, barColors }\n : undefined\n )\n }\n\n // Draw bar highlight on hovered bin/segment\n if (hoverAnnotation && hoverRef.current && chartType === \"bar\" && binSize) {\n const hd = hoverRef.current.data\n if (hd.binStart != null) {\n const gap = barStyle?.gap ?? 1\n const tAxis = getTimeAxis(arrowOfTime)\n\n // Determine which segment to highlight\n const segBase = hd.hoveredCategory != null\n ? (() => {\n // Walk categories to find the cumulative base of the hovered segment\n const cats: Record<string, number> = hd.categories || {}\n const colorKeys = barColors ? Object.keys(barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Object.keys(cats).filter((c: string) => !listed.has(c)).sort()\n const catOrder = [...colorKeys.filter((k: string) => k in cats), ...unlisted]\n let base = 0\n for (const cat of catOrder) {\n if (cat === hd.hoveredCategory) return base\n base += cats[cat] || 0\n }\n return base\n })()\n : 0\n const segTop = hd.hoveredCategory != null\n ? segBase + (hd.hoveredCategoryValue || 0)\n : hd.total\n\n const [domainMin, domainMax] = scales.time.domain() as [number, number]\n const clampedBinStart = Math.max(hd.binStart, domainMin)\n const clampedBinEnd = Math.min(hd.binEnd, domainMax)\n\n if (tAxis === \"x\") {\n const rawX0 = scales.time(clampedBinStart)\n const rawX1 = scales.time(clampedBinEnd)\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const yBot = scales.value(segBase)\n const yTop = scales.value(segTop)\n const ry = Math.min(yBot, yTop)\n const rh = Math.abs(yBot - yTop)\n ctx.fillStyle = theme.hoverFill\n ctx.fillRect(x0, ry, x1 - x0, rh)\n ctx.strokeStyle = theme.hoverStroke\n ctx.lineWidth = 1\n ctx.setLineDash([])\n ctx.strokeRect(x0, ry, x1 - x0, rh)\n } else {\n const rawY0 = scales.time(clampedBinStart)\n const rawY1 = scales.time(clampedBinEnd)\n const y0 = Math.min(rawY0, rawY1) + gap / 2\n const y1 = Math.max(rawY0, rawY1) - gap / 2\n const xLeft = scales.value(segBase)\n const xRight = scales.value(segTop)\n const rx = Math.min(xLeft, xRight)\n const rw = Math.abs(xRight - xLeft)\n ctx.fillStyle = theme.hoverFill\n ctx.fillRect(rx, y0, rw, y1 - y0)\n ctx.strokeStyle = theme.hoverStroke\n ctx.lineWidth = 1\n ctx.setLineDash([])\n ctx.strokeRect(rx, y0, rw, y1 - y0)\n }\n }\n }\n\n // Draw crosshair after chart data so it renders on top\n if (hoverAnnotation && hoverRef.current) {\n const config: HoverAnnotationConfig =\n typeof hoverAnnotation === \"object\" ? hoverAnnotation : {}\n drawCrosshair(\n ctx,\n hoverRef.current,\n adjustedWidth,\n adjustedHeight,\n config,\n lineStyle.stroke || \"#007bff\",\n theme\n )\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Trigger React re-render so SVG annotations recompute positions\n // using the scales we just stored in scalesRef.\n // Only do this when data actually changed (wasDirty) to avoid\n // setAnnotationFrame → re-render → effect → scheduleRender → loop.\n if (wasDirty && annotations && annotations.length > 0 && svgAnnotationRules) {\n setAnnotationFrame(f => f + 1)\n }\n }\n\n // Initial render and cleanup\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current)\n }\n }\n }, [scheduleRender])\n\n // Re-render canvas when visual props change\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [arrowOfTime, chartType, adjustedWidth, adjustedHeight, showAxes, background, lineStyle, scheduleRender])\n\n // Compute annotation elements during React render using latest scales\n const renderedAnnotations = React.useMemo(() => {\n if (!annotations || annotations.length === 0 || !svgAnnotationRules) {\n return null\n }\n const scales = scalesRef.current\n const timeAxis = getTimeAxis(arrowOfTime)\n return annotations\n .map((annotation, i) =>\n svgAnnotationRules(annotation, i, {\n scales,\n timeAxis,\n width: adjustedWidth,\n height: adjustedHeight\n })\n )\n .filter(Boolean)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [annotations, svgAnnotationRules, arrowOfTime, adjustedWidth, adjustedHeight, annotationFrame])\n\n const hasAnnotations = renderedAnnotations && renderedAnnotations.length > 0\n\n // Tooltip positioning: anchor at the hovered point, flip if near edges\n const tooltipElement = hoverAnnotation && hoverPoint ? (\n <div\n className=\"realtime-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 {tooltipContent\n ? tooltipContent(hoverPoint)\n : <DefaultTooltip hover={hoverPoint} formatTime={tickFormatTime} />}\n </div>\n ) : null\n\n return (\n <div\n className={`realtime-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={hoverAnnotation ? onMouseMove : undefined}\n onMouseLeave={hoverAnnotation ? onMouseLeave : undefined}\n >\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0\n }}\n />\n {hasAnnotations && (\n <svg\n width={size[0]}\n height={size[1]}\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 {renderedAnnotations}\n </g>\n </svg>\n )}\n {tooltipElement}\n </div>\n )\n }\n)\n\nexport default RealtimeFrame\n","import * as React from \"react\"\nimport { useRef, useEffect, useImperativeHandle, forwardRef } from \"react\"\nimport RealtimeFrame from \"../../realtime/RealtimeFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n LineStyle,\n HoverAnnotationConfig,\n HoverData,\n RealtimeFrameHandle,\n AnnotationContext\n} from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeLineChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Line color */\n stroke?: string\n /** Line width */\n strokeWidth?: number\n /** Dash pattern (e.g. \"4,2\") */\n strokeDasharray?: string\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n}\n\n/**\n * RealtimeLineChart - Simplified wrapper for streaming line charts.\n *\n * Wraps RealtimeFrame with `chartType=\"line\"` and exposes stroke/strokeWidth\n * as top-level props instead of requiring a `lineStyle` object.\n *\n * @example\n * ```tsx\n * const ref = useRef<RealtimeFrameHandle>(null)\n *\n * <RealtimeLineChart\n * ref={ref}\n * stroke=\"#007bff\"\n * strokeWidth={2}\n * windowSize={200}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeLineChart = forwardRef<RealtimeFrameHandle, RealtimeLineChartProps>(\n function RealtimeLineChart(props, ref) {\n const {\n size = [500, 300],\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n stroke = \"#007bff\",\n strokeWidth = 2,\n strokeDasharray,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue\n } = props\n\n const frameRef = useRef<RealtimeFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const lineStyle: LineStyle = { stroke, strokeWidth, strokeDasharray }\n\n return (\n <RealtimeFrame\n ref={frameRef}\n chartType=\"line\"\n size={size}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n timeExtent={timeExtent}\n valueExtent={valueExtent}\n extentPadding={extentPadding}\n lineStyle={lineStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={tooltipContent}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef } from \"react\"\nimport RealtimeFrame from \"../../realtime/RealtimeFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n BarStyle,\n HoverAnnotationConfig,\n HoverData,\n RealtimeFrameHandle,\n AnnotationContext\n} from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeBarChartProps {\n /** Time interval for binning */\n binSize: number\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /**\n * Category accessor for stacked bars.\n * When provided, bars are stacked by category within each bin.\n */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /**\n * Category-to-color map for stacked bars.\n * Keys also determine stack order (listed keys first, then alphabetical).\n */\n colors?: Record<string, string>\n /** Bar fill color (non-stacked mode) */\n fill?: string\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n}\n\n/**\n * RealtimeBarChart - Simplified wrapper for streaming temporal histograms.\n *\n * Wraps RealtimeFrame with `chartType=\"bar\"` and exposes bar styling as\n * top-level props. Supports both simple and stacked (categorical) modes.\n *\n * Edge bins that only partially fall within the visible time window are\n * rendered at proportionally narrower widths (Datadog-style).\n *\n * @example\n * ```tsx\n * // Simple histogram\n * <RealtimeBarChart\n * ref={ref}\n * binSize={20}\n * fill=\"#007bff\"\n * enableHover\n * />\n *\n * // Stacked by category\n * <RealtimeBarChart\n * ref={ref}\n * binSize={25}\n * categoryAccessor=\"category\"\n * colors={{ errors: \"#dc3545\", warnings: \"#fd7e14\", info: \"#007bff\" }}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeBarChart = forwardRef<RealtimeFrameHandle, RealtimeBarChartProps>(\n function RealtimeBarChart(props, ref) {\n const {\n binSize,\n size = [500, 300],\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n fill,\n stroke,\n strokeWidth,\n gap,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue\n } = props\n\n const frameRef = useRef<RealtimeFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const barStyle: BarStyle = {}\n if (fill != null) barStyle.fill = fill\n if (stroke != null) barStyle.stroke = stroke\n if (strokeWidth != null) barStyle.strokeWidth = strokeWidth\n if (gap != null) barStyle.gap = gap\n\n return (\n <RealtimeFrame\n ref={frameRef}\n chartType=\"bar\"\n size={size}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n timeExtent={timeExtent}\n valueExtent={valueExtent}\n extentPadding={extentPadding}\n binSize={binSize}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n barStyle={barStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={tooltipContent}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef } from \"react\"\nimport RealtimeFrame from \"../../realtime/RealtimeFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n SwarmStyle,\n HoverAnnotationConfig,\n HoverData,\n RealtimeFrameHandle,\n AnnotationContext\n} from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeSwarmChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Category accessor for color-coding dots */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /** Category-to-color map */\n colors?: Record<string, string>\n /** Dot radius */\n radius?: number\n /** Dot fill color (when no categoryAccessor) */\n fill?: string\n /** Dot opacity */\n opacity?: number\n /** Dot stroke color */\n stroke?: string\n /** Dot stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects (including threshold coloring) */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n}\n\n/**\n * RealtimeSwarmChart - Simplified wrapper for streaming dot/swarm charts.\n *\n * Wraps RealtimeFrame with `chartType=\"swarm\"` and exposes dot styling as\n * top-level props. Each data point renders as an individual dot at its\n * (time, value) coordinates.\n *\n * Supports threshold coloring via annotations to recolor dots that cross\n * value boundaries.\n *\n * @example\n * ```tsx\n * <RealtimeSwarmChart\n * ref={ref}\n * radius={4}\n * opacity={0.8}\n * categoryAccessor=\"sensor\"\n * colors={{ sensor1: \"#007bff\", sensor2: \"#28a745\" }}\n * />\n * ```\n */\nexport const RealtimeSwarmChart = forwardRef<RealtimeFrameHandle, RealtimeSwarmChartProps>(\n function RealtimeSwarmChart(props, ref) {\n const {\n size = [500, 300],\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n radius,\n fill,\n opacity,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue\n } = props\n\n const frameRef = useRef<RealtimeFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const swarmStyle: SwarmStyle = {}\n if (radius != null) swarmStyle.radius = radius\n if (fill != null) swarmStyle.fill = fill\n if (opacity != null) swarmStyle.opacity = opacity\n if (stroke != null) swarmStyle.stroke = stroke\n if (strokeWidth != null) swarmStyle.strokeWidth = strokeWidth\n\n return (\n <RealtimeFrame\n ref={frameRef}\n chartType=\"swarm\"\n size={size}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n timeExtent={timeExtent}\n valueExtent={valueExtent}\n extentPadding={extentPadding}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n swarmStyle={swarmStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={tooltipContent}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef } from \"react\"\nimport RealtimeFrame from \"../../realtime/RealtimeFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n WaterfallStyle,\n HoverAnnotationConfig,\n HoverData,\n RealtimeFrameHandle,\n AnnotationContext\n} from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeWaterfallChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor (positive = gain, negative = loss) */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Color for positive (gain) bars */\n positiveColor?: string\n /** Color for negative (loss) bars */\n negativeColor?: string\n /** Connector line stroke color (omit to hide connectors) */\n connectorStroke?: string\n /** Connector line width */\n connectorWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n}\n\n/**\n * RealtimeWaterfallChart - Simplified wrapper for streaming waterfall charts.\n *\n * Wraps RealtimeFrame with `chartType=\"waterfall\"` and exposes waterfall styling\n * as top-level props. Visualizes cumulative deltas as connected bars rising and\n * falling from a running baseline.\n *\n * @example\n * ```tsx\n * <RealtimeWaterfallChart\n * ref={ref}\n * positiveColor=\"#28a745\"\n * negativeColor=\"#dc3545\"\n * connectorStroke=\"#999\"\n * windowSize={300}\n * />\n * ```\n */\nexport const RealtimeWaterfallChart = forwardRef<RealtimeFrameHandle, RealtimeWaterfallChartProps>(\n function RealtimeWaterfallChart(props, ref) {\n const {\n size = [500, 300],\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n positiveColor,\n negativeColor,\n connectorStroke,\n connectorWidth,\n gap,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue\n } = props\n\n const frameRef = useRef<RealtimeFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const waterfallStyle: WaterfallStyle = {}\n if (positiveColor != null) waterfallStyle.positiveColor = positiveColor\n if (negativeColor != null) waterfallStyle.negativeColor = negativeColor\n if (connectorStroke != null) waterfallStyle.connectorStroke = connectorStroke\n if (connectorWidth != null) waterfallStyle.connectorWidth = connectorWidth\n if (gap != null) waterfallStyle.gap = gap\n if (stroke != null) waterfallStyle.stroke = stroke\n if (strokeWidth != null) waterfallStyle.strokeWidth = strokeWidth\n\n return (\n <RealtimeFrame\n ref={frameRef}\n chartType=\"waterfall\"\n size={size}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n timeExtent={timeExtent}\n valueExtent={valueExtent}\n extentPadding={extentPadding}\n waterfallStyle={waterfallStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={tooltipContent}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\n"],"names":["resolveColor","DEFAULT_PALETTE"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as t from"react";import{forwardRef as e,useMemo as o,useRef as n,useState as r,useCallback as i,useImperativeHandle as l,useEffect as a}from"react";import{scaleLinear as s}from"d3-scale";class c{constructor(t){if(this._capacity=t,this.head=0,this._size=0,1>t)throw Error("RingBuffer capacity must be at least 1");this.buffer=Array(t)}push(t){let e;return this._size===this._capacity?e=this.buffer[this.head]:this._size++,this.buffer[this.head]=t,this.head=(this.head+1)%this._capacity,e}pushMany(t){const e=[];for(const o of t){const t=this.push(o);void 0!==t&&e.push(t)}return e}get(t){if(t>=0&&this._size>t)return this.buffer[(this.head-this._size+t+this._capacity)%this._capacity]}peek(){if(0!==this._size)return this.buffer[(this.head-1+this._capacity)%this._capacity]}peekOldest(){if(0!==this._size)return this.buffer[(this.head-this._size+this._capacity)%this._capacity]}[Symbol.iterator](){let t=0;const e=this;return{next:()=>e._size>t?{done:!1,value:e.get(t++)}:{done:!0,value:void 0}}}toArray(){const t=[];for(const e of this)t.push(e);return t}resize(t){if(1>t)throw Error("RingBuffer capacity must be at least 1");const e=this.toArray(),o=[];for(;e.length>t;)o.push(e.shift());this._capacity=t,this.buffer=Array(t),this.head=0,this._size=0;for(const t of e)this.push(t);return o}clear(){this.buffer=Array(this._capacity),this.head=0,this._size=0}get size(){return this._size}get capacity(){return this._capacity}get full(){return this._size===this._capacity}}class u{constructor(){this._min=1/0,this._max=-1/0,this._dirty=!1}push(t){Number.isNaN(t)||(this._min>t&&(this._min=t),t>this._max&&(this._max=t))}evict(t){t!==this._min&&t!==this._max||(this._dirty=!0)}recalculate(t,e){this._min=1/0,this._max=-1/0;for(const o of t){const t=e?e(o):o;Number.isNaN(t)||(this._min>t&&(this._min=t),t>this._max&&(this._max=t))}this._dirty=!1}clear(){this._min=1/0,this._max=-1/0,this._dirty=!1}get extent(){return[this._min,this._max]}get min(){return this._min}get max(){return this._max}get dirty(){return this._dirty}}function h(t,e,o){let n=o;for(const o of e)"lesser"===o.thresholdType?o.value>t&&(n=o.color):t>o.value&&(n=o.color);return n}const d=(t,e,o,n,r,i,l)=>{const{time:a,value:s}=o,{timeAxis:c}=n,{time:u,value:d}=i,f=r.stroke||"#007bff",m=l?l.filter(t=>"threshold"===t.type&&t.color).map(t=>({value:t.value,color:t.color,thresholdType:t.thresholdType||"greater"})):null;if(!m||0>=m.length){t.beginPath(),t.strokeStyle=f,t.lineWidth=r.strokeWidth||2,t.setLineDash(r.strokeDasharray?r.strokeDasharray.split(/[\s,]+/).map(Number):[]);let o=!1;for(const n of e){const e=u(n),r=d(n);if(null==e||null==r||Number.isNaN(e)||Number.isNaN(r)){o=!1;continue}const i=a(e),l=s(r),h="x"===c?i:l,f="x"===c?l:i;o?t.lineTo(h,f):(t.moveTo(h,f),o=!0)}return void t.stroke()}t.lineWidth=r.strokeWidth||2,t.setLineDash(r.strokeDasharray?r.strokeDasharray.split(/[\s,]+/).map(Number):[]);let v=null,g=null,y=null,p=null,k=!1;function b(t,e){const o=a(t),n=s(e);return"x"===c?[o,n]:[n,o]}function x(e,o,n){t.beginPath(),t.strokeStyle=e,t.moveTo(o,n),k=!0}function w(){k&&(t.stroke(),k=!1)}for(const o of e){const e=u(o),n=d(o);if(null==e||null==n||Number.isNaN(e)||Number.isNaN(n)){w(),v=null,g=null,y=null,p=null;continue}const[r,i]=b(e,n),l=h(n,m,f);if(null!==v&&null!==p&&null!==y){if(l===p)t.lineTo(r,i);else{const e=[];for(const t of m){const o=t.value;(y>o||o>n)&&(o>y||n>o)||y===o||n===o||e.push({t:(o-y)/(n-y),color:""})}e.sort((t,e)=>t.t-e.t);for(const o of e){const e=v+(r-v)*o.t,l=g+(i-g)*o.t,a=h(y+(n-y)*Math.min(o.t+1e-4,1),m,f);t.lineTo(e,l),w(),x(a,e,l)}t.lineTo(r,i)}v=r,g=i,y=n,p=l}else x(l,r,i),v=r,g=i,y=n,p=l}w()},f=["#007bff","#28a745","#dc3545","#fd7e14","#6f42c1","#20c997","#e83e8c","#17a2b8","#6610f2","#ffc107"];function m(t,e,o){let n=o;for(const o of e)"lesser"===o.thresholdType?o.value>t&&(n=o.color):t>o.value&&(n=o.color);return n}const v=(t,e,o,n,r,i,l,a)=>{var s,c,u,h,d;const{time:v,value:g}=o,{timeAxis:y}=n,{time:p,value:k,category:b}=i,x=null==a?void 0:a.swarmStyle,w=null==a?void 0:a.barColors,S=null!==(s=null==x?void 0:x.radius)&&void 0!==s?s:3,M=null!==(u=null!==(c=null==x?void 0:x.fill)&&void 0!==c?c:r.stroke)&&void 0!==u?u:"#007bff",A=null!==(h=null==x?void 0:x.opacity)&&void 0!==h?h:.7,T=null!=(null==x?void 0:x.stroke),z=l?l.filter(t=>"threshold"===t.type&&t.color).map(t=>({value:t.value,color:t.color,thresholdType:t.thresholdType||"greater"})):null,_=z&&z.length>0;t.globalAlpha=A;let N=0;const E={};for(const o of e){const e=p(o),n=k(o);if(null==n||Number.isNaN(n))continue;let r,i;"x"===y?(r=v(e),i=g(n)):(r=g(n),i=v(e));let l=M;if(b){const t=b(o);w&&w[t]?l=w[t]:(t in E||(E[t]=f[N%f.length],N++),l=E[t])}_&&(l=m(n,z,l)),t.fillStyle=l,t.beginPath(),t.arc(r,i,S,0,2*Math.PI),t.fill(),T&&(t.strokeStyle=x.stroke,t.lineWidth=null!==(d=null==x?void 0:x.strokeWidth)&&void 0!==d?d:1,t.stroke())}t.globalAlpha=1},g=()=>{throw Error("candlestickRenderer: Not yet implemented")},y=(t,e,o,n,r,i,l,a)=>{var s,c,u,h,d,f,m;const{time:v,value:g}=o,{timeAxis:y,width:p,height:k}=n,{time:b,value:x}=i,w=null==a?void 0:a.waterfallStyle,S=null!==(s=null==w?void 0:w.positiveColor)&&void 0!==s?s:"#28a745",M=null!==(c=null==w?void 0:w.negativeColor)&&void 0!==c?c:"#dc3545",A=null!==(u=null==w?void 0:w.gap)&&void 0!==u?u:1,T=null==w?void 0:w.connectorStroke,z=null!==(h=null==w?void 0:w.connectorWidth)&&void 0!==h?h:1,_=null!=(null==w?void 0:w.stroke);_&&(t.strokeStyle=w.stroke,t.lineWidth=null!==(d=null==w?void 0:w.strokeWidth)&&void 0!==d?d:1);const N=[];for(const t of e){const e=x(t);null==e||Number.isNaN(e)||N.push(t)}if(0===N.length)return;let E=0,R=null,C=null;for(let e=0;N.length>e;e++){const o=N[e],n=b(o),r=x(o),i=E+r;let l;if(l=N.length-1>e?b(N[e+1])-n:e>0?n-b(N[e-1]):0,t.fillStyle=0>r?M:S,"x"===y){let e,o;0!==l?(e=v(n),o=v(n+l)):(e=v(n),o=e+p/10);const r=Math.min(e,o)+A/2,a=Math.max(e,o)-A/2,s=a-r;if(0>=s){E=i,R=a,C=i;continue}const c=g(E),u=g(i),h=Math.min(c,u),d=Math.abs(c-u);if(T&&null!=R&&null!=C){t.save(),t.strokeStyle=T,t.lineWidth=z;const e=g(C);t.beginPath(),t.moveTo(R,e),t.lineTo(r,e),t.stroke(),t.restore(),_&&(t.strokeStyle=w.stroke,t.lineWidth=null!==(f=null==w?void 0:w.strokeWidth)&&void 0!==f?f:1)}t.fillRect(r,h,s,d),_&&t.strokeRect(r,h,s,d),R=a}else{let e,o;0!==l?(e=v(n),o=v(n+l)):(e=v(n),o=e+k/10);const r=Math.min(e,o)+A/2,a=Math.max(e,o)-A/2,s=a-r;if(0>=s){E=i,R=a,C=i;continue}const c=g(E),u=g(i),h=Math.min(c,u),d=Math.abs(u-c);if(T&&null!=R&&null!=C){t.save(),t.strokeStyle=T,t.lineWidth=z;const e=g(C);t.beginPath(),t.moveTo(e,R),t.lineTo(e,r),t.stroke(),t.restore(),_&&(t.strokeStyle=w.stroke,t.lineWidth=null!==(m=null==w?void 0:w.strokeWidth)&&void 0!==m?m:1)}t.fillRect(h,r,d,s),_&&t.strokeRect(h,r,d,s),R=a}E=i,C=i}};function p(t,e,o,n,r){const i=new Map;for(const l of t){const t=e(l),a=o(l);if(null==t||null==a||Number.isNaN(t)||Number.isNaN(a))continue;const s=Math.floor(t/n)*n;let c=i.get(s);if(c||(c={start:s,end:s+n,total:0,categories:new Map},i.set(s,c)),c.total+=a,r){const t=r(l);c.categories.set(t,(c.categories.get(t)||0)+a)}}return i}const k=["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f","#edc948","#b07aa1","#ff9da7","#9c755f","#bab0ac"],b=(t,e,o,n,r,i,l,a)=>{var s,c;const u=null==a?void 0:a.binSize;if(!u)return;const{time:h,value:d}=o,{timeAxis:f}=n,{time:m,value:v,category:g}=i,y=null==a?void 0:a.barColors,b=null==a?void 0:a.barStyle,x=p(e,m,v,u,g);if(0===x.size)return;const[w,S]=h.domain(),M=null!==(s=null==b?void 0:b.gap)&&void 0!==s?s:1,A=null!=g;let T=null;if(A){const t=new Set;for(const e of x.values())for(const o of e.categories.keys())t.add(o);const e=y?Object.keys(y):[],o=new Set(e),n=Array.from(t).filter(t=>!o.has(t)).sort();T=[...e.filter(e=>t.has(e)),...n]}const z=null!=(null==b?void 0:b.stroke);z&&(t.strokeStyle=b.stroke,t.lineWidth=null!==(c=null==b?void 0:b.strokeWidth)&&void 0!==c?c:1);for(const e of x.values())if("x"===f){const o=Math.max(e.start,w),n=Math.min(e.end,S);if(o>=n)continue;const i=h(o),l=h(n),a=Math.min(i,l)+M/2,s=Math.max(i,l)-M/2-a;if(0>=s)continue;if(A&&T){let o=0,n=0;for(const r of T){const i=e.categories.get(r)||0;if(0===i)continue;const l=d(o),c=d(o+i),u=Math.min(l,c),h=Math.abs(l-c);t.fillStyle=y&&y[r]||k[n%k.length],t.fillRect(a,u,s,h),z&&t.strokeRect(a,u,s,h),o+=i,n++}}else{const o=d(0),n=d(e.total),i=Math.min(o,n),l=Math.abs(o-n);t.fillStyle=(null==b?void 0:b.fill)||r.stroke||"#007bff",t.fillRect(a,i,s,l),z&&t.strokeRect(a,i,s,l)}}else{const o=Math.max(e.start,w),n=Math.min(e.end,S);if(o>=n)continue;const i=h(o),l=h(n),a=Math.min(i,l)+M/2,s=Math.max(i,l)-M/2-a;if(0>=s)continue;if(A&&T){let o=0,n=0;for(const r of T){const i=e.categories.get(r)||0;if(0===i)continue;const l=d(o),c=d(o+i),u=Math.min(l,c),h=Math.abs(c-l);t.fillStyle=y&&y[r]||k[n%k.length],t.fillRect(u,a,h,s),z&&t.strokeRect(u,a,h,s),o+=i,n++}}else{const o=d(0),n=d(e.total),i=Math.min(o,n),l=Math.abs(n-o);t.fillStyle=(null==b?void 0:b.fill)||r.stroke||"#007bff",t.fillRect(i,a,l,s),z&&t.strokeRect(i,a,l,s)}}},x={line:d,swarm:v,candlestick:g,waterfall:y,bar:b},w={top:20,right:20,bottom:30,left:40},S={};function M(t,e){if("function"==typeof t)return e=>+t(e);const o=t||e;return t=>+t[o]}function A(t){return"up"===t||"down"===t?"y":"x"}function T(t){return Math.round(100*t)/100+""}const z={axisStroke:"#ccc",tickText:"#666",crosshair:"rgba(0, 0, 0, 0.25)",hoverFill:"rgba(255, 255, 255, 0.3)",hoverStroke:"rgba(0, 0, 0, 0.4)",pointRing:"white"},_={background:"rgba(0, 0, 0, 0.85)",color:"white",padding:"6px 10px",borderRadius:4,fontSize:12,lineHeight:1.5,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.15)",pointerEvents:"none",whiteSpace:"nowrap"};function N({hover:e,formatTime:o}){const n=t=>Number.isInteger(t)?t+"":t.toFixed(2),r=o||n,i=e.data.barColors,l=e.data.hoveredCategory,a=e.data.hoveredCategoryValue;return t.createElement("div",{className:"semiotic-tooltip",style:_},null!=l&&null!=a?t.createElement(t.Fragment,null,t.createElement("div",{style:{display:"flex",alignItems:"center",gap:5,fontWeight:600,marginBottom:2}},i&&i[l]&&t.createElement("span",{style:{width:8,height:8,borderRadius:"50%",background:i[l],flexShrink:0}}),t.createElement("span",null,l),t.createElement("span",{style:{marginLeft:"auto"}},n(a))),t.createElement("div",{style:{opacity:.6,fontSize:11}},"total ",n(e.value))):t.createElement("div",{style:{fontWeight:600,marginBottom:2}},n(e.value)),t.createElement("div",{style:{opacity:.7,fontSize:11}},r(e.time)))}const E=e(function(e,h){const{chartType:d="line",arrowOfTime:f="right",windowMode:m="sliding",windowSize:v=200,data:g,timeAccessor:y,valueAccessor:k,timeExtent:b,valueExtent:_,extentPadding:E=.1,size:R=[500,300],margin:C,className:W,lineStyle:P=S,annotations:F,svgAnnotationRules:D,hoverAnnotation:O,tooltipContent:B,customHoverBehavior:V,showAxes:H=!0,background:j,categoryAccessor:L,binSize:I,barColors:$,barStyle:q,waterfallStyle:X,swarmStyle:Y,tickFormatTime:G,tickFormatValue:J}=e,K=Object.assign(Object.assign({},w),C),Q=R[0]-K.left-K.right,U=R[1]-K.top-K.bottom,Z=o(()=>M(y,"time"),[y]),tt=o(()=>M(k,"value"),[k]),et=o(()=>L?"function"==typeof L?L:t=>t[L]:void 0,[L]),ot=n(new c(v)),nt=n(new u),rt=n(new u),it=n(null),lt=n(0),at=n(!1),st=n(null),[ct,ut]=r(0),ht=n(v),dt=n(null),[ft,mt]=r(null),vt=n(()=>{}),gt=i(()=>{lt.current||(lt.current=requestAnimationFrame(()=>vt.current()))},[]),yt=i(t=>{const e=ot.current,o=Z(t),n=tt(t);"growing"===m&&e.full&&(ht.current*=2,e.resize(ht.current));const r=e.push(t);nt.current.push(o),rt.current.push(n),null!=r&&(nt.current.evict(Z(r)),rt.current.evict(tt(r))),at.current=!0,gt()},[m,Z,tt,gt]),pt=i(t=>{for(const e of t)yt(e)},[yt]),kt=i(()=>{ot.current.clear(),nt.current.clear(),rt.current.clear(),at.current=!0,gt()},[gt]);l(h,()=>({push:yt,pushMany:pt,clear:kt,getData:()=>ot.current.toArray()}),[yt,pt,kt]),a(()=>{if(g){ot.current.clear(),nt.current.clear(),rt.current.clear();for(const t of g)ot.current.push(t),nt.current.push(Z(t)),rt.current.push(tt(t));at.current=!0,gt()}},[g,Z,tt,gt]);const bt=n(()=>{}),xt=n(()=>{});bt.current=t=>{if(!O)return;const e=it.current;if(!e)return;const o=e.getBoundingClientRect(),n=t.clientX-o.left-K.left,r=t.clientY-o.top-K.top;if(0>n||n>Q||0>r||r>U)return void(dt.current&&(dt.current=null,mt(null),V&&V(null),gt()));const i=st.current;if(!i)return;const l=ot.current;if(0===l.size)return;const a=A(f),s=i.time.invert("x"===a?n:r);let c;if("bar"===d&&I){const t=p(l,Z,tt,I,et).get(Math.floor(s/I)*I);if(!t)return;const[e,o]=i.time.domain(),u=Math.max(t.start,e),h=u+(Math.min(t.end,o)-u)/2,d=i.time(h),f=i.value(t.total),m="x"===a?d:f,v="x"===a?f:d;let g,y;if(et&&t.categories.size>0){const e=$?Object.keys($):[],o=new Set(e),l=Array.from(t.categories.keys()).filter(t=>!o.has(t)).sort(),s=[...e.filter(e=>t.categories.has(e)),...l],c="x"===a?r:n;let u=0;for(const e of s){const o=t.categories.get(e)||0;if(0===o)continue;const n=i.value(u),r=i.value(u+o);if(c>=Math.min(n,r)&&Math.max(n,r)>=c){g=e,y=o;break}u+=o}}c={data:{binStart:t.start,binEnd:t.end,total:t.total,categories:Object.fromEntries(t.categories),barColors:$||{},hoveredCategory:g,hoveredCategoryValue:y},time:h,value:t.total,x:m,y:v}}else{const t=function(t,e,o){if(0===t.size)return-1;let n=0,r=t.size-1;for(;r>n;){const i=n+r>>1;e>o(t.get(i))?n=i+1:r=i}if(n>0){const r=o(t.get(n)),i=o(t.get(n-1));if(Math.abs(r-e)>=Math.abs(i-e))return n-1}return n}(l,s,Z);if(0>t)return;const e=l.get(t),o=Z(e),n=tt(e),r=i.time(o),u=i.value(n);c={data:e,time:o,value:n,x:"x"===a?r:u,y:"x"===a?u:r}}dt.current=c,mt(c),V&&V(c),gt()},xt.current=()=>{dt.current&&(dt.current=null,mt(null),V&&V(null),gt())};const wt=i(t=>bt.current(t),[]),St=i(()=>xt.current(),[]);vt.current=()=>{var t;lt.current=0;const e=it.current;if(!e)return;const o=e.getContext("2d");if(!o)return;const n=ot.current,r=nt.current,i=rt.current;r.dirty&&r.recalculate(n,Z),i.dirty&&i.recalculate(n,tt);let l=b||r.extent,a=_||i.extent;if("bar"===d&&I&&!_&&n.size>0){const[,t]=function(t,e,o,n,r){const i=p(t,e,o,n,r);if(0===i.size)return[0,0];let l=0;for(const t of i.values())t.total>l&&(l=t.total);return[0,l]}(n,Z,tt,I,et);a=[0,t+t*E]}else if("waterfall"===d&&!_&&n.size>0){const[t,e]=function(t,e){let o=0,n=0,r=0;for(const i of t){const t=e(i);null==t||Number.isNaN(t)||(r+=t,o>r&&(o=r),r>n&&(n=r))}return[o,n]}(n,tt),o=e-t,r=o>0?o*E:1;a=[Math.min(0,t-Math.abs(r)),Math.max(0,e+Math.abs(r))]}else if(!_&&a[0]!==1/0){const t=a[1]-a[0],e=t>0?t*E:1;a=[a[0]-e,a[1]+e]}l[0]!==1/0&&l[1]!==-1/0||(l=[0,1]),a[0]!==1/0&&a[1]!==-1/0||(a=[0,1]);const c=function(t,e,o,n,r){let i,l;return"x"===A(t)?(i="right"===t?[0,n]:[n,0],l=[r,0]):(i="down"===t?[0,r]:[r,0],l=[0,n]),{time:s().domain(e).range(i),value:s().domain(o).range(l)}}(f,l,a,Q,U);st.current=c;const u="undefined"!=typeof window&&window.devicePixelRatio||1;e.width=R[0]*u,e.height=R[1]*u,e.style.width=R[0]+"px",e.style.height=R[1]+"px",o.scale(u,u),o.translate(K.left,K.top),o.clearRect(-K.left,-K.top,R[0],R[1]);const h=function(t){if(!t)return z;const e=getComputedStyle(t),o=e.getPropertyValue("--text-secondary").trim(),n=e.getPropertyValue("--text-primary").trim(),r=e.getPropertyValue("--surface-3").trim(),i=e.getPropertyValue("--surface-0").trim();return o||n?{axisStroke:r||z.axisStroke,tickText:o||z.tickText,crosshair:o?o+"66":z.crosshair,hoverFill:i?i+"4D":z.hoverFill,hoverStroke:o?o+"99":z.hoverStroke,pointRing:i||z.pointRing}:z}(e);j&&(o.fillStyle=j,o.fillRect(0,0,Q,U)),H&&(o.save(),function(t,e,o,n,r,i,l,a,s){const c=A(e),u=a||T,h=s||z;if(t.strokeStyle=h.axisStroke,t.lineWidth=1,t.fillStyle=h.tickText,t.font="10px sans-serif",t.textAlign="center",t.textBaseline="top","x"===c){t.beginPath(),t.moveTo(0,i),t.lineTo(r,i),t.stroke(),t.beginPath(),t.moveTo(0,0),t.lineTo(0,i),t.stroke();const e=o.ticks(5);t.textAlign="center",t.textBaseline="top";for(const n of e){const e=o(n);t.beginPath(),t.moveTo(e,i),t.lineTo(e,i+5),t.stroke(),l&&t.fillText(l(n),e,i+7)}t.textAlign="right",t.textBaseline="middle";const a=n.ticks(5);for(const e of a){const o=n(e);t.beginPath(),t.moveTo(-5,o),t.lineTo(0,o),t.stroke(),t.fillText(u(e),-8,o)}}else{t.beginPath(),t.moveTo(0,0),t.lineTo(0,i),t.stroke(),t.beginPath(),t.moveTo(0,"y"===c&&"down"===e?0:i),t.lineTo(r,"y"===c&&"down"===e?0:i),t.stroke(),t.textAlign="center",t.textBaseline="top";const a=n.ticks(5);for(const e of a){const o=n(e);t.beginPath(),t.moveTo(o,i),t.lineTo(o,i+5),t.stroke(),t.fillText(u(e),o,i+7)}t.textAlign="right",t.textBaseline="middle";const s=o.ticks(5);for(const e of s){const n=o(e);t.beginPath(),t.moveTo(-5,n),t.lineTo(0,n),t.stroke(),l&&t.fillText(l(e),-8,n)}}}(o,f,c.time,c.value,Q,U,G,J,h),o.restore());const m=x[d];if(m&&m(o,n,c,{width:Q,height:U,timeAxis:A(f)},P,{time:Z,value:tt,category:et},F,"bar"===d?{binSize:I,barColors:$,barStyle:q}:"waterfall"===d?{waterfallStyle:X}:"swarm"===d?{swarmStyle:Y,barColors:$}:void 0),O&&dt.current&&"bar"===d&&I){const e=dt.current.data;if(null!=e.binStart){const n=null!==(t=null==q?void 0:q.gap)&&void 0!==t?t:1,r=A(f),i=null!=e.hoveredCategory?(()=>{const t=e.categories||{},o=$?Object.keys($):[],n=new Set(o),r=Object.keys(t).filter(t=>!n.has(t)).sort(),i=[...o.filter(e=>e in t),...r];let l=0;for(const o of i){if(o===e.hoveredCategory)return l;l+=t[o]||0}return l})():0,l=null!=e.hoveredCategory?i+(e.hoveredCategoryValue||0):e.total,[a,s]=c.time.domain(),u=Math.max(e.binStart,a),d=Math.min(e.binEnd,s);if("x"===r){const t=c.time(u),e=c.time(d),r=Math.min(t,e)+n/2,a=Math.max(t,e)-n/2,s=c.value(i),f=c.value(l),m=Math.min(s,f),v=Math.abs(s-f);o.fillStyle=h.hoverFill,o.fillRect(r,m,a-r,v),o.strokeStyle=h.hoverStroke,o.lineWidth=1,o.setLineDash([]),o.strokeRect(r,m,a-r,v)}else{const t=c.time(u),e=c.time(d),r=Math.min(t,e)+n/2,a=Math.max(t,e)-n/2,s=c.value(i),f=c.value(l),m=Math.min(s,f),v=Math.abs(f-s);o.fillStyle=h.hoverFill,o.fillRect(m,r,v,a-r),o.strokeStyle=h.hoverStroke,o.lineWidth=1,o.setLineDash([]),o.strokeRect(m,r,v,a-r)}}}O&&dt.current&&function(t,e,o,n,r,i,l){if(!1===r.crosshair)return;const a=l||z;t.save();const s="object"==typeof r.crosshair?r.crosshair:{};t.strokeStyle=s.stroke||a.crosshair,t.lineWidth=s.strokeWidth||1,t.setLineDash(s.strokeDasharray?s.strokeDasharray.split(/[\s,]+/).map(Number):[4,4]),t.beginPath(),t.moveTo(e.x,0),t.lineTo(e.x,n),t.stroke(),t.beginPath(),t.moveTo(0,e.y),t.lineTo(o,e.y),t.stroke(),t.restore(),t.beginPath(),t.arc(e.x,e.y,4,0,2*Math.PI),t.fillStyle=i,t.fill(),t.strokeStyle=a.pointRing,t.lineWidth=2,t.stroke()}(o,dt.current,Q,U,"object"==typeof O?O:{},P.stroke||"#007bff",h);const v=at.current;at.current=!1,v&&F&&F.length>0&&D&&ut(t=>t+1)},a(()=>(gt(),()=>{lt.current&&cancelAnimationFrame(lt.current)}),[gt]),a(()=>{at.current=!0,gt()},[f,d,Q,U,H,j,P,gt]);const Mt=t.useMemo(()=>{if(!F||0===F.length||!D)return null;const t=st.current,e=A(f);return F.map((o,n)=>D(o,n,{scales:t,timeAxis:e,width:Q,height:U})).filter(Boolean)},[F,D,f,Q,U,ct]),At=Mt&&Mt.length>0,Tt=O&&ft?t.createElement("div",{className:"realtime-frame-tooltip",style:{position:"absolute",left:K.left+ft.x,top:K.top+ft.y,transform:`translate(${ft.x>.7*Q?"calc(-100% - 12px)":"12px"}, ${.3*U>ft.y?"4px":"calc(-100% - 4px)"})`,pointerEvents:"none",zIndex:1}},B?B(ft):t.createElement(N,{hover:ft,formatTime:G})):null;return t.createElement("div",{className:"realtime-frame"+(W?" "+W:""),style:{position:"relative",width:R[0],height:R[1]},onMouseMove:O?wt:void 0,onMouseLeave:O?St:void 0},t.createElement("canvas",{ref:it,style:{position:"absolute",left:0,top:0}}),At&&t.createElement("svg",{width:R[0],height:R[1],style:{position:"absolute",top:0,left:0,pointerEvents:"none"}},t.createElement("g",{transform:`translate(${K.left},${K.top})`},Mt)),Tt)}),R=e(function(e,o){const{size:r=[500,300],margin:i,className:a,arrowOfTime:s="right",windowMode:c="sliding",windowSize:u=200,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,stroke:y="#007bff",strokeWidth:p=2,strokeDasharray:k,showAxes:b=!0,background:x,enableHover:w,tooltipContent:S,onHover:M,annotations:A,svgAnnotationRules:T,tickFormatTime:z,tickFormatValue:_}=e,N=n(null);return l(o,()=>({push:t=>{var e;return null===(e=N.current)||void 0===e?void 0:e.push(t)},pushMany:t=>{var e;return null===(e=N.current)||void 0===e?void 0:e.pushMany(t)},clear:()=>{var t;return null===(t=N.current)||void 0===t?void 0:t.clear()},getData:()=>{var t,e;return null!==(e=null===(t=N.current)||void 0===t?void 0:t.getData())&&void 0!==e?e:[]}})),t.createElement(E,{ref:N,chartType:"line",size:r,margin:i,className:a,arrowOfTime:s,windowMode:c,windowSize:u,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,lineStyle:{stroke:y,strokeWidth:p,strokeDasharray:k},showAxes:b,background:x,hoverAnnotation:w,tooltipContent:S,customHoverBehavior:M,annotations:A,svgAnnotationRules:T,tickFormatTime:z,tickFormatValue:_})}),C=e(function(e,o){const{binSize:r,size:i=[500,300],margin:a,className:s,arrowOfTime:c="right",windowMode:u="sliding",windowSize:h=200,data:d,timeAccessor:f,valueAccessor:m,timeExtent:v,valueExtent:g,extentPadding:y,categoryAccessor:p,colors:k,fill:b,stroke:x,strokeWidth:w,gap:S,showAxes:M=!0,background:A,enableHover:T,tooltipContent:z,onHover:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W}=e,P=n(null);l(o,()=>({push:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.push(t)},pushMany:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.pushMany(t)},clear:()=>{var t;return null===(t=P.current)||void 0===t?void 0:t.clear()},getData:()=>{var t,e;return null!==(e=null===(t=P.current)||void 0===t?void 0:t.getData())&&void 0!==e?e:[]}}));const F={};return null!=b&&(F.fill=b),null!=x&&(F.stroke=x),null!=w&&(F.strokeWidth=w),null!=S&&(F.gap=S),t.createElement(E,{ref:P,chartType:"bar",size:i,margin:a,className:s,arrowOfTime:c,windowMode:u,windowSize:h,data:d,timeAccessor:f,valueAccessor:m,timeExtent:v,valueExtent:g,extentPadding:y,binSize:r,categoryAccessor:p,barColors:k,barStyle:F,showAxes:M,background:A,hoverAnnotation:T,tooltipContent:z,customHoverBehavior:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W})}),W=e(function(e,o){const{size:r=[500,300],margin:i,className:a,arrowOfTime:s="right",windowMode:c="sliding",windowSize:u=200,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,categoryAccessor:y,colors:p,radius:k,fill:b,opacity:x,stroke:w,strokeWidth:S,showAxes:M=!0,background:A,enableHover:T,tooltipContent:z,onHover:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W}=e,P=n(null);l(o,()=>({push:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.push(t)},pushMany:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.pushMany(t)},clear:()=>{var t;return null===(t=P.current)||void 0===t?void 0:t.clear()},getData:()=>{var t,e;return null!==(e=null===(t=P.current)||void 0===t?void 0:t.getData())&&void 0!==e?e:[]}}));const F={};return null!=k&&(F.radius=k),null!=b&&(F.fill=b),null!=x&&(F.opacity=x),null!=w&&(F.stroke=w),null!=S&&(F.strokeWidth=S),t.createElement(E,{ref:P,chartType:"swarm",size:r,margin:i,className:a,arrowOfTime:s,windowMode:c,windowSize:u,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,categoryAccessor:y,barColors:p,swarmStyle:F,showAxes:M,background:A,hoverAnnotation:T,tooltipContent:z,customHoverBehavior:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W})}),P=e(function(e,o){const{size:r=[500,300],margin:i,className:a,arrowOfTime:s="right",windowMode:c="sliding",windowSize:u=200,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,positiveColor:y,negativeColor:p,connectorStroke:k,connectorWidth:b,gap:x,stroke:w,strokeWidth:S,showAxes:M=!0,background:A,enableHover:T,tooltipContent:z,onHover:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W}=e,P=n(null);l(o,()=>({push:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.push(t)},pushMany:t=>{var e;return null===(e=P.current)||void 0===e?void 0:e.pushMany(t)},clear:()=>{var t;return null===(t=P.current)||void 0===t?void 0:t.clear()},getData:()=>{var t,e;return null!==(e=null===(t=P.current)||void 0===t?void 0:t.getData())&&void 0!==e?e:[]}}));const F={};return null!=y&&(F.positiveColor=y),null!=p&&(F.negativeColor=p),null!=k&&(F.connectorStroke=k),null!=b&&(F.connectorWidth=b),null!=x&&(F.gap=x),null!=w&&(F.stroke=w),null!=S&&(F.strokeWidth=S),t.createElement(E,{ref:P,chartType:"waterfall",size:r,margin:i,className:a,arrowOfTime:s,windowMode:c,windowSize:u,data:h,timeAccessor:d,valueAccessor:f,timeExtent:m,valueExtent:v,extentPadding:g,waterfallStyle:F,showAxes:M,background:A,hoverAnnotation:T,tooltipContent:z,customHoverBehavior:_,annotations:N,svgAnnotationRules:R,tickFormatTime:C,tickFormatValue:W})});export{u as IncrementalExtent,C as RealtimeBarChart,E as RealtimeFrame,R as RealtimeLineChart,W as RealtimeSwarmChart,P as RealtimeWaterfallChart,c as RingBuffer,b as barRenderer,g as candlestickRenderer,d as lineRenderer,v as swarmRenderer,y as waterfallRenderer};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { LineChart } from "./charts/xy/LineChart";
|
|
2
|
+
export { AreaChart } from "./charts/xy/AreaChart";
|
|
3
|
+
export { StackedAreaChart } from "./charts/xy/StackedAreaChart";
|
|
4
|
+
export { Scatterplot } from "./charts/xy/Scatterplot";
|
|
5
|
+
export { BubbleChart } from "./charts/xy/BubbleChart";
|
|
6
|
+
export { Heatmap } from "./charts/xy/Heatmap";
|
|
7
|
+
export { BarChart } from "./charts/ordinal/BarChart";
|
|
8
|
+
export { StackedBarChart } from "./charts/ordinal/StackedBarChart";
|
|
9
|
+
export { GroupedBarChart } from "./charts/ordinal/GroupedBarChart";
|
|
10
|
+
export { SwarmPlot } from "./charts/ordinal/SwarmPlot";
|
|
11
|
+
export { BoxPlot } from "./charts/ordinal/BoxPlot";
|
|
12
|
+
export { DotPlot } from "./charts/ordinal/DotPlot";
|
|
13
|
+
export { PieChart } from "./charts/ordinal/PieChart";
|
|
14
|
+
export { DonutChart } from "./charts/ordinal/DonutChart";
|
|
15
|
+
export { ForceDirectedGraph } from "./charts/network/ForceDirectedGraph";
|
|
16
|
+
export { ChordDiagram } from "./charts/network/ChordDiagram";
|
|
17
|
+
export { SankeyDiagram } from "./charts/network/SankeyDiagram";
|
|
18
|
+
export { TreeDiagram } from "./charts/network/TreeDiagram";
|
|
19
|
+
export { Treemap } from "./charts/network/Treemap";
|
|
20
|
+
export { CirclePack } from "./charts/network/CirclePack";
|
|
21
|
+
export { RealtimeLineChart } from "./charts/realtime/RealtimeLineChart";
|
|
22
|
+
export { RealtimeBarChart } from "./charts/realtime/RealtimeBarChart";
|
|
23
|
+
export { RealtimeSwarmChart } from "./charts/realtime/RealtimeSwarmChart";
|
|
24
|
+
export { RealtimeWaterfallChart } from "./charts/realtime/RealtimeWaterfallChart";
|
|
25
|
+
export { TooltipProvider } from "./store/TooltipStore";
|
|
26
|
+
export { MultiLineTooltip } from "./Tooltip/Tooltip";
|
|
27
|
+
export { validateProps } from "./charts/shared/validateProps";
|
|
28
|
+
export type { ValidationResult } from "./charts/shared/validateProps";
|