semiotic 2.0.3 → 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/AnnotationLayer/AnnotationLayer.d.ts +0 -1
- package/dist/Axis/axisTitle.d.ts +3 -3
- package/dist/Axis/summaryGraphic.d.ts +1 -1
- package/dist/FacetController.d.ts +1 -1
- package/dist/MinimapXYFrame.d.ts +2 -2
- package/dist/NetworkFrame.d.ts +5 -1
- package/dist/OrdinalFrame.d.ts +5 -1
- package/dist/ResponsiveFrame.d.ts +2 -2
- package/dist/ResponsiveMinimapXYFrame.d.ts +3 -6
- package/dist/ResponsiveNetworkFrame.d.ts +3 -6
- package/dist/ResponsiveOrdinalFrame.d.ts +3 -6
- package/dist/ResponsiveXYFrame.d.ts +3 -6
- package/dist/SparkFrame.d.ts +1 -1
- package/dist/SparkNetworkFrame.d.ts +3 -3
- package/dist/SparkOrdinalFrame.d.ts +3 -3
- package/dist/SparkXYFrame.d.ts +3 -3
- package/dist/Tooltip/Tooltip.d.ts +141 -0
- package/dist/TooltipPositioner/index.d.ts +1 -1
- package/dist/VisualizationLayer.d.ts +3 -3
- package/dist/XYFrame.d.ts +5 -1
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +2 -2
- package/dist/annotationRules/networkframeRules.d.ts +2 -2
- package/dist/annotationRules/orframeRules.d.ts +2 -4
- package/dist/annotationRules/xyframeRules.d.ts +2 -2
- package/dist/batchWork.d.ts +1 -1
- 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/frame_props.d.ts +9 -0
- package/dist/constants/jsx.d.ts +2 -2
- package/dist/data/dataFunctions.d.ts +11 -12
- package/dist/data/networkPipelineCache.d.ts +27 -0
- package/dist/data/ordinalPipelineCache.d.ts +33 -0
- package/dist/data/xyPipelineCache.d.ts +35 -0
- package/dist/index.d.ts +70 -62
- package/dist/interactionLayerBehavior/InteractionCanvas.d.ts +1 -1
- 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 +5 -4
- 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 +25 -28
- package/dist/processing/networkDefaults.d.ts +36 -0
- package/dist/processing/networkLayoutHelpers.d.ts +54 -0
- package/dist/processing/ordinal.d.ts +43 -43
- 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 +46 -41
- 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 +19 -3
- package/dist/semiotic.js +18707 -12983
- package/dist/semiotic.js.map +1 -0
- package/dist/semiotic.min.js +1 -0
- package/dist/semiotic.module.js +18651 -12953
- 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/svg/SvgHelper.d.ts +1 -5
- package/dist/svg/areaDrawing.d.ts +3 -13
- 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/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 +17 -28
- package/dist/svg/graphAlgorithms.d.ts +14 -0
- package/dist/svg/hexbinLayout.d.ts +7 -0
- package/dist/svg/lineDrawing.d.ts +8 -8
- package/dist/svg/networkDrawing.d.ts +5 -123
- package/dist/svg/nodeGenerators.d.ts +58 -0
- package/dist/svg/pieceDrawing.d.ts +1 -2
- package/dist/svg/pieceLayouts.d.ts +5 -23
- package/dist/svg/sankeyLinks.d.ts +3 -0
- package/dist/svg/summaryAxis.d.ts +6 -0
- package/dist/svg/summaryLayouts.d.ts +36 -57
- package/dist/svg/swarmLayout.d.ts +13 -0
- package/dist/types/annotationTypes.d.ts +13 -18
- package/dist/types/canvasTypes.d.ts +1 -1
- package/dist/types/generalTypes.d.ts +37 -35
- package/dist/types/interactionTypes.d.ts +7 -9
- package/dist/types/legendTypes.d.ts +2 -2
- package/dist/types/networkTypes.d.ts +40 -30
- package/dist/types/ordinalTypes.d.ts +27 -18
- package/dist/types/xyTypes.d.ts +13 -16
- package/dist/useLegacyUnmountCallback.d.ts +2 -1
- package/dist/visualizationLayerBehavior/axis.d.ts +3 -5
- package/dist/visualizationLayerBehavior/general.d.ts +8 -12
- 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 -66
- package/dist/AnnotationLayer/helpers.d.ts +0 -6
- package/dist/AnnotationLayer/index.d.ts +0 -2
- package/dist/Mark/Mark.d.ts +0 -3
- package/dist/Mark/Mark.types.d.ts +0 -10
- package/dist/Mark/constants/markTransition.d.ts +0 -10
- package/dist/Mark/markBehavior/drawing.d.ts +0 -13
- package/dist/SpanOrDiv.d.ts +0 -10
- package/dist/components/Annotation.d.ts +0 -3
- package/dist/components/AnnotationLayer/AnnotationLayer.d.ts +0 -26
- package/dist/components/Axis/Axis.d.ts +0 -7
- package/dist/components/Axis/axisTitle.d.ts +0 -10
- package/dist/components/Axis/index.d.ts +0 -2
- package/dist/components/Axis/summaryGraphic.d.ts +0 -17
- package/dist/components/Brush.d.ts +0 -12
- package/dist/components/DividedLine.d.ts +0 -16
- package/dist/components/FacetController.d.ts +0 -12
- package/dist/components/Frame.d.ts +0 -2
- package/dist/components/InteractionLayer.d.ts +0 -3
- package/dist/components/Legend.d.ts +0 -3
- package/dist/components/Mark/Mark.d.ts +0 -3
- package/dist/components/Mark/Mark.types.d.ts +0 -10
- package/dist/components/Mark/markBehavior/drawing.d.ts +0 -13
- package/dist/components/MiniMap.d.ts +0 -14
- package/dist/components/MinimapXYFrame.d.ts +0 -10
- package/dist/components/NetworkFrame.d.ts +0 -4
- package/dist/components/OrdinalFrame.d.ts +0 -4
- package/dist/components/ResponsiveFrame.d.ts +0 -22
- package/dist/components/ResponsiveMinimapXYFrame.d.ts +0 -6
- package/dist/components/ResponsiveNetworkFrame.d.ts +0 -6
- package/dist/components/ResponsiveOrdinalFrame.d.ts +0 -6
- package/dist/components/ResponsiveXYFrame.d.ts +0 -6
- package/dist/components/SpanOrDiv.d.ts +0 -10
- package/dist/components/SparkFrame.d.ts +0 -14
- package/dist/components/SparkNetworkFrame.d.ts +0 -5
- package/dist/components/SparkOrdinalFrame.d.ts +0 -5
- package/dist/components/SparkXYFrame.d.ts +0 -5
- package/dist/components/TooltipPositioner/index.d.ts +0 -7
- package/dist/components/VisualizationLayer.d.ts +0 -33
- package/dist/components/XYFrame.d.ts +0 -4
- package/dist/components/annotationLayerBehavior/annotationHandling.d.ts +0 -19
- package/dist/components/annotationLayerBehavior/d3labeler.d.ts +0 -9
- package/dist/components/annotationRules/baseRules.d.ts +0 -25
- package/dist/components/annotationRules/networkframeRules.d.ts +0 -48
- package/dist/components/annotationRules/orframeRules.d.ts +0 -105
- package/dist/components/annotationRules/xyframeRules.d.ts +0 -117
- package/dist/components/batchWork.d.ts +0 -6
- package/dist/components/constants/coordinateNames.d.ts +0 -8
- package/dist/components/constants/frame_props.d.ts +0 -4
- package/dist/components/constants/jsx.d.ts +0 -19
- package/dist/components/data/dataFunctions.d.ts +0 -46
- package/dist/components/data/multiAccessorUtils.d.ts +0 -1
- package/dist/components/data/unflowedFunctions.d.ts +0 -1
- package/dist/components/generic_utilities/functions.d.ts +0 -1
- package/dist/components/index.d.ts +0 -125
- package/dist/components/interactionLayerBehavior/InteractionCanvas.d.ts +0 -20
- package/dist/components/processing/InteractionItems.d.ts +0 -12
- package/dist/components/processing/network.d.ts +0 -114
- package/dist/components/processing/ordinal.d.ts +0 -102
- package/dist/components/processing/xyDrawing.d.ts +0 -135
- package/dist/components/semiotic.d.ts +0 -35
- package/dist/components/store/TooltipStore.d.ts +0 -2
- package/dist/components/store/createStore.d.ts +0 -1
- package/dist/components/svg/SvgHelper.d.ts +0 -37
- package/dist/components/svg/areaDrawing.d.ts +0 -31
- package/dist/components/svg/ckmeans.d.ts +0 -69
- package/dist/components/svg/frameFunctions.d.ts +0 -119
- package/dist/components/svg/lineDrawing.d.ts +0 -99
- package/dist/components/svg/networkDrawing.d.ts +0 -134
- package/dist/components/svg/pieceDrawing.d.ts +0 -13
- package/dist/components/svg/pieceLayouts.d.ts +0 -71
- package/dist/components/svg/summaryLayouts.d.ts +0 -74
- package/dist/components/types/annotationTypes.d.ts +0 -140
- package/dist/components/types/canvasTypes.d.ts +0 -9
- package/dist/components/types/generalTypes.d.ts +0 -236
- package/dist/components/types/interactionTypes.d.ts +0 -74
- package/dist/components/types/legendTypes.d.ts +0 -20
- package/dist/components/types/networkTypes.d.ts +0 -165
- package/dist/components/types/ordinalTypes.d.ts +0 -103
- package/dist/components/types/xyTypes.d.ts +0 -118
- package/dist/components/useBoundingRect.d.ts +0 -2
- package/dist/components/useDerivedStateFromProps.d.ts +0 -1
- package/dist/components/useLegacyUnmountCallback.d.ts +0 -1
- package/dist/components/visualizationLayerBehavior/axis.d.ts +0 -38
- package/dist/components/visualizationLayerBehavior/general.d.ts +0 -84
- package/dist/setupTests.d.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.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","scaleLinear","React","forwardRef","useMemo","useRef","useState","useCallback","useImperativeHandle","useEffect"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react"),t=require("d3-scale");function r(e){if(e&&e.__esModule)return e;const t=Object.create(null);if(e)for(const r in e)if("default"!==r){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}return t.default=e,Object.freeze(t)}const o=r(e);class n{constructor(e){if(this._capacity=e,this.head=0,this._size=0,1>e)throw Error("RingBuffer capacity must be at least 1");this.buffer=Array(e)}push(e){let t;return this._size===this._capacity?t=this.buffer[this.head]:this._size++,this.buffer[this.head]=e,this.head=(this.head+1)%this._capacity,t}pushMany(e){const t=[];for(const r of e){const e=this.push(r);void 0!==e&&t.push(e)}return t}get(e){if(e>=0&&this._size>e)return this.buffer[(this.head-this._size+e+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 e=0;const t=this;return{next:()=>t._size>e?{done:!1,value:t.get(e++)}:{done:!0,value:void 0}}}toArray(){const e=[];for(const t of this)e.push(t);return e}resize(e){if(1>e)throw Error("RingBuffer capacity must be at least 1");const t=this.toArray(),r=[];for(;t.length>e;)r.push(t.shift());this._capacity=e,this.buffer=Array(e),this.head=0,this._size=0;for(const e of t)this.push(e);return r}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 i{constructor(){this._min=1/0,this._max=-1/0,this._dirty=!1}push(e){Number.isNaN(e)||(this._min>e&&(this._min=e),e>this._max&&(this._max=e))}evict(e){e!==this._min&&e!==this._max||(this._dirty=!0)}recalculate(e,t){this._min=1/0,this._max=-1/0;for(const r of e){const e=t?t(r):r;Number.isNaN(e)||(this._min>e&&(this._min=e),e>this._max&&(this._max=e))}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 l(e,t,r){let o=r;for(const r of t)"lesser"===r.thresholdType?r.value>e&&(o=r.color):e>r.value&&(o=r.color);return o}const a=(e,t,r,o,n,i,a)=>{const{time:s,value:c}=r,{timeAxis:u}=o,{time:h,value:f}=i,d=n.stroke||"#007bff",m=a?a.filter(e=>"threshold"===e.type&&e.color).map(e=>({value:e.value,color:e.color,thresholdType:e.thresholdType||"greater"})):null;if(!m||0>=m.length){e.beginPath(),e.strokeStyle=d,e.lineWidth=n.strokeWidth||2,e.setLineDash(n.strokeDasharray?n.strokeDasharray.split(/[\s,]+/).map(Number):[]);let r=!1;for(const o of t){const t=h(o),n=f(o);if(null==t||null==n||Number.isNaN(t)||Number.isNaN(n)){r=!1;continue}const i=s(t),l=c(n),a="x"===u?i:l,d="x"===u?l:i;r?e.lineTo(a,d):(e.moveTo(a,d),r=!0)}return void e.stroke()}e.lineWidth=n.strokeWidth||2,e.setLineDash(n.strokeDasharray?n.strokeDasharray.split(/[\s,]+/).map(Number):[]);let v=null,g=null,p=null,y=null,k=!1;function b(e,t){const r=s(e),o=c(t);return"x"===u?[r,o]:[o,r]}function x(t,r,o){e.beginPath(),e.strokeStyle=t,e.moveTo(r,o),k=!0}function w(){k&&(e.stroke(),k=!1)}for(const r of t){const t=h(r),o=f(r);if(null==t||null==o||Number.isNaN(t)||Number.isNaN(o)){w(),v=null,g=null,p=null,y=null;continue}const[n,i]=b(t,o),a=l(o,m,d);if(null!==v&&null!==y&&null!==p){if(a===y)e.lineTo(n,i);else{const t=[];for(const e of m){const r=e.value;(p>r||r>o)&&(r>p||o>r)||p===r||o===r||t.push({t:(r-p)/(o-p),color:""})}t.sort((e,t)=>e.t-t.t);for(const r of t){const t=v+(n-v)*r.t,a=g+(i-g)*r.t,s=l(p+(o-p)*Math.min(r.t+1e-4,1),m,d);e.lineTo(t,a),w(),x(s,t,a)}e.lineTo(n,i)}v=n,g=i,p=o,y=a}else x(a,n,i),v=n,g=i,p=o,y=a}w()},s=["#007bff","#28a745","#dc3545","#fd7e14","#6f42c1","#20c997","#e83e8c","#17a2b8","#6610f2","#ffc107"];function c(e,t,r){let o=r;for(const r of t)"lesser"===r.thresholdType?r.value>e&&(o=r.color):e>r.value&&(o=r.color);return o}const u=(e,t,r,o,n,i,l,a)=>{var u,h,f,d,m;const{time:v,value:g}=r,{timeAxis:p}=o,{time:y,value:k,category:b}=i,x=null==a?void 0:a.swarmStyle,w=null==a?void 0:a.barColors,S=null!==(u=null==x?void 0:x.radius)&&void 0!==u?u:3,M=null!==(f=null!==(h=null==x?void 0:x.fill)&&void 0!==h?h:n.stroke)&&void 0!==f?f:"#007bff",R=null!==(d=null==x?void 0:x.opacity)&&void 0!==d?d:.7,A=null!=(null==x?void 0:x.stroke),T=l?l.filter(e=>"threshold"===e.type&&e.color).map(e=>({value:e.value,color:e.color,thresholdType:e.thresholdType||"greater"})):null,_=T&&T.length>0;e.globalAlpha=R;let z=0;const E={};for(const r of t){const t=y(r),o=k(r);if(null==o||Number.isNaN(o))continue;let n,i;"x"===p?(n=v(t),i=g(o)):(n=g(o),i=v(t));let l=M;if(b){const e=b(r);w&&w[e]?l=w[e]:(e in E||(E[e]=s[z%s.length],z++),l=E[e])}_&&(l=c(o,T,l)),e.fillStyle=l,e.beginPath(),e.arc(n,i,S,0,2*Math.PI),e.fill(),A&&(e.strokeStyle=x.stroke,e.lineWidth=null!==(m=null==x?void 0:x.strokeWidth)&&void 0!==m?m:1,e.stroke())}e.globalAlpha=1},h=()=>{throw Error("candlestickRenderer: Not yet implemented")},f=(e,t,r,o,n,i,l,a)=>{var s,c,u,h,f,d,m;const{time:v,value:g}=r,{timeAxis:p,width:y,height:k}=o,{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",R=null!==(u=null==w?void 0:w.gap)&&void 0!==u?u:1,A=null==w?void 0:w.connectorStroke,T=null!==(h=null==w?void 0:w.connectorWidth)&&void 0!==h?h:1,_=null!=(null==w?void 0:w.stroke);_&&(e.strokeStyle=w.stroke,e.lineWidth=null!==(f=null==w?void 0:w.strokeWidth)&&void 0!==f?f:1);const z=[];for(const e of t){const t=x(e);null==t||Number.isNaN(t)||z.push(e)}if(0===z.length)return;let E=0,N=null,C=null;for(let t=0;z.length>t;t++){const r=z[t],o=b(r),n=x(r),i=E+n;let l;if(l=z.length-1>t?b(z[t+1])-o:t>0?o-b(z[t-1]):0,e.fillStyle=0>n?M:S,"x"===p){let t,r;0!==l?(t=v(o),r=v(o+l)):(t=v(o),r=t+y/10);const n=Math.min(t,r)+R/2,a=Math.max(t,r)-R/2,s=a-n;if(0>=s){E=i,N=a,C=i;continue}const c=g(E),u=g(i),h=Math.min(c,u),f=Math.abs(c-u);if(A&&null!=N&&null!=C){e.save(),e.strokeStyle=A,e.lineWidth=T;const t=g(C);e.beginPath(),e.moveTo(N,t),e.lineTo(n,t),e.stroke(),e.restore(),_&&(e.strokeStyle=w.stroke,e.lineWidth=null!==(d=null==w?void 0:w.strokeWidth)&&void 0!==d?d:1)}e.fillRect(n,h,s,f),_&&e.strokeRect(n,h,s,f),N=a}else{let t,r;0!==l?(t=v(o),r=v(o+l)):(t=v(o),r=t+k/10);const n=Math.min(t,r)+R/2,a=Math.max(t,r)-R/2,s=a-n;if(0>=s){E=i,N=a,C=i;continue}const c=g(E),u=g(i),h=Math.min(c,u),f=Math.abs(u-c);if(A&&null!=N&&null!=C){e.save(),e.strokeStyle=A,e.lineWidth=T;const t=g(C);e.beginPath(),e.moveTo(t,N),e.lineTo(t,n),e.stroke(),e.restore(),_&&(e.strokeStyle=w.stroke,e.lineWidth=null!==(m=null==w?void 0:w.strokeWidth)&&void 0!==m?m:1)}e.fillRect(h,n,f,s),_&&e.strokeRect(h,n,f,s),N=a}E=i,C=i}};function d(e,t,r,o,n){const i=new Map;for(const l of e){const e=t(l),a=r(l);if(null==e||null==a||Number.isNaN(e)||Number.isNaN(a))continue;const s=Math.floor(e/o)*o;let c=i.get(s);if(c||(c={start:s,end:s+o,total:0,categories:new Map},i.set(s,c)),c.total+=a,n){const e=n(l);c.categories.set(e,(c.categories.get(e)||0)+a)}}return i}const m=["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f","#edc948","#b07aa1","#ff9da7","#9c755f","#bab0ac"],v=(e,t,r,o,n,i,l,a)=>{var s,c;const u=null==a?void 0:a.binSize;if(!u)return;const{time:h,value:f}=r,{timeAxis:v}=o,{time:g,value:p,category:y}=i,k=null==a?void 0:a.barColors,b=null==a?void 0:a.barStyle,x=d(t,g,p,u,y);if(0===x.size)return;const[w,S]=h.domain(),M=null!==(s=null==b?void 0:b.gap)&&void 0!==s?s:1,R=null!=y;let A=null;if(R){const e=new Set;for(const t of x.values())for(const r of t.categories.keys())e.add(r);const t=k?Object.keys(k):[],r=new Set(t),o=Array.from(e).filter(e=>!r.has(e)).sort();A=[...t.filter(t=>e.has(t)),...o]}const T=null!=(null==b?void 0:b.stroke);T&&(e.strokeStyle=b.stroke,e.lineWidth=null!==(c=null==b?void 0:b.strokeWidth)&&void 0!==c?c:1);for(const t of x.values())if("x"===v){const r=Math.max(t.start,w),o=Math.min(t.end,S);if(r>=o)continue;const i=h(r),l=h(o),a=Math.min(i,l)+M/2,s=Math.max(i,l)-M/2-a;if(0>=s)continue;if(R&&A){let r=0,o=0;for(const n of A){const i=t.categories.get(n)||0;if(0===i)continue;const l=f(r),c=f(r+i),u=Math.min(l,c),h=Math.abs(l-c);e.fillStyle=k&&k[n]||m[o%m.length],e.fillRect(a,u,s,h),T&&e.strokeRect(a,u,s,h),r+=i,o++}}else{const r=f(0),o=f(t.total),i=Math.min(r,o),l=Math.abs(r-o);e.fillStyle=(null==b?void 0:b.fill)||n.stroke||"#007bff",e.fillRect(a,i,s,l),T&&e.strokeRect(a,i,s,l)}}else{const r=Math.max(t.start,w),o=Math.min(t.end,S);if(r>=o)continue;const i=h(r),l=h(o),a=Math.min(i,l)+M/2,s=Math.max(i,l)-M/2-a;if(0>=s)continue;if(R&&A){let r=0,o=0;for(const n of A){const i=t.categories.get(n)||0;if(0===i)continue;const l=f(r),c=f(r+i),u=Math.min(l,c),h=Math.abs(c-l);e.fillStyle=k&&k[n]||m[o%m.length],e.fillRect(u,a,h,s),T&&e.strokeRect(u,a,h,s),r+=i,o++}}else{const r=f(0),o=f(t.total),i=Math.min(r,o),l=Math.abs(o-r);e.fillStyle=(null==b?void 0:b.fill)||n.stroke||"#007bff",e.fillRect(i,a,l,s),T&&e.strokeRect(i,a,l,s)}}},g={line:a,swarm:u,candlestick:h,waterfall:f,bar:v},p={top:20,right:20,bottom:30,left:40},y={};function k(e,t){if("function"==typeof e)return t=>+e(t);const r=e||t;return e=>+e[r]}function b(e){return"up"===e||"down"===e?"y":"x"}function x(e){return Math.round(100*e)/100+""}const w={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"},S={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 M({hover:e,formatTime:t}){const r=e=>Number.isInteger(e)?e+"":e.toFixed(2),n=t||r,i=e.data.barColors,l=e.data.hoveredCategory,a=e.data.hoveredCategoryValue;return o.createElement("div",{className:"semiotic-tooltip",style:S},null!=l&&null!=a?o.createElement(o.Fragment,null,o.createElement("div",{style:{display:"flex",alignItems:"center",gap:5,fontWeight:600,marginBottom:2}},i&&i[l]&&o.createElement("span",{style:{width:8,height:8,borderRadius:"50%",background:i[l],flexShrink:0}}),o.createElement("span",null,l),o.createElement("span",{style:{marginLeft:"auto"}},r(a))),o.createElement("div",{style:{opacity:.6,fontSize:11}},"total ",r(e.value))):o.createElement("div",{style:{fontWeight:600,marginBottom:2}},r(e.value)),o.createElement("div",{style:{opacity:.7,fontSize:11}},n(e.time)))}const R=e.forwardRef(function(r,l){const{chartType:a="line",arrowOfTime:s="right",windowMode:c="sliding",windowSize:u=200,data:h,timeAccessor:f,valueAccessor:m,timeExtent:v,valueExtent:S,extentPadding:R=.1,size:A=[500,300],margin:T,className:_,lineStyle:z=y,annotations:E,svgAnnotationRules:N,hoverAnnotation:C,tooltipContent:W,customHoverBehavior:P,showAxes:F=!0,background:D,categoryAccessor:O,binSize:H,barColors:B,barStyle:V,waterfallStyle:j,swarmStyle:I,tickFormatTime:L,tickFormatValue:$}=r,q=Object.assign(Object.assign({},p),T),X=A[0]-q.left-q.right,Y=A[1]-q.top-q.bottom,G=e.useMemo(()=>k(f,"time"),[f]),J=e.useMemo(()=>k(m,"value"),[m]),K=e.useMemo(()=>O?"function"==typeof O?O:e=>e[O]:void 0,[O]),Q=e.useRef(new n(u)),U=e.useRef(new i),Z=e.useRef(new i),ee=e.useRef(null),te=e.useRef(0),re=e.useRef(!1),oe=e.useRef(null),[ne,ie]=e.useState(0),le=e.useRef(u),ae=e.useRef(null),[se,ce]=e.useState(null),ue=e.useRef(()=>{}),he=e.useCallback(()=>{te.current||(te.current=requestAnimationFrame(()=>ue.current()))},[]),fe=e.useCallback(e=>{const t=Q.current,r=G(e),o=J(e);"growing"===c&&t.full&&(le.current*=2,t.resize(le.current));const n=t.push(e);U.current.push(r),Z.current.push(o),null!=n&&(U.current.evict(G(n)),Z.current.evict(J(n))),re.current=!0,he()},[c,G,J,he]),de=e.useCallback(e=>{for(const t of e)fe(t)},[fe]),me=e.useCallback(()=>{Q.current.clear(),U.current.clear(),Z.current.clear(),re.current=!0,he()},[he]);e.useImperativeHandle(l,()=>({push:fe,pushMany:de,clear:me,getData:()=>Q.current.toArray()}),[fe,de,me]),e.useEffect(()=>{if(h){Q.current.clear(),U.current.clear(),Z.current.clear();for(const e of h)Q.current.push(e),U.current.push(G(e)),Z.current.push(J(e));re.current=!0,he()}},[h,G,J,he]);const ve=e.useRef(()=>{}),ge=e.useRef(()=>{});ve.current=e=>{if(!C)return;const t=ee.current;if(!t)return;const r=t.getBoundingClientRect(),o=e.clientX-r.left-q.left,n=e.clientY-r.top-q.top;if(0>o||o>X||0>n||n>Y)return void(ae.current&&(ae.current=null,ce(null),P&&P(null),he()));const i=oe.current;if(!i)return;const l=Q.current;if(0===l.size)return;const c=b(s),u=i.time.invert("x"===c?o:n);let h;if("bar"===a&&H){const e=d(l,G,J,H,K).get(Math.floor(u/H)*H);if(!e)return;const[t,r]=i.time.domain(),a=Math.max(e.start,t),s=a+(Math.min(e.end,r)-a)/2,f=i.time(s),m=i.value(e.total),v="x"===c?f:m,g="x"===c?m:f;let p,y;if(K&&e.categories.size>0){const t=B?Object.keys(B):[],r=new Set(t),l=Array.from(e.categories.keys()).filter(e=>!r.has(e)).sort(),a=[...t.filter(t=>e.categories.has(t)),...l],s="x"===c?n:o;let u=0;for(const t of a){const r=e.categories.get(t)||0;if(0===r)continue;const o=i.value(u),n=i.value(u+r);if(s>=Math.min(o,n)&&Math.max(o,n)>=s){p=t,y=r;break}u+=r}}h={data:{binStart:e.start,binEnd:e.end,total:e.total,categories:Object.fromEntries(e.categories),barColors:B||{},hoveredCategory:p,hoveredCategoryValue:y},time:s,value:e.total,x:v,y:g}}else{const e=function(e,t,r){if(0===e.size)return-1;let o=0,n=e.size-1;for(;n>o;){const i=o+n>>1;t>r(e.get(i))?o=i+1:n=i}if(o>0){const n=r(e.get(o)),i=r(e.get(o-1));if(Math.abs(n-t)>=Math.abs(i-t))return o-1}return o}(l,u,G);if(0>e)return;const t=l.get(e),r=G(t),o=J(t),n=i.time(r),a=i.value(o);h={data:t,time:r,value:o,x:"x"===c?n:a,y:"x"===c?a:n}}ae.current=h,ce(h),P&&P(h),he()},ge.current=()=>{ae.current&&(ae.current=null,ce(null),P&&P(null),he())};const pe=e.useCallback(e=>ve.current(e),[]),ye=e.useCallback(()=>ge.current(),[]);ue.current=()=>{var e;te.current=0;const r=ee.current;if(!r)return;const o=r.getContext("2d");if(!o)return;const n=Q.current,i=U.current,l=Z.current;i.dirty&&i.recalculate(n,G),l.dirty&&l.recalculate(n,J);let c=v||i.extent,u=S||l.extent;if("bar"===a&&H&&!S&&n.size>0){const[,e]=function(e,t,r,o,n){const i=d(e,t,r,o,n);if(0===i.size)return[0,0];let l=0;for(const e of i.values())e.total>l&&(l=e.total);return[0,l]}(n,G,J,H,K);u=[0,e+e*R]}else if("waterfall"===a&&!S&&n.size>0){const[e,t]=function(e,t){let r=0,o=0,n=0;for(const i of e){const e=t(i);null==e||Number.isNaN(e)||(n+=e,r>n&&(r=n),n>o&&(o=n))}return[r,o]}(n,J),r=t-e,o=r>0?r*R:1;u=[Math.min(0,e-Math.abs(o)),Math.max(0,t+Math.abs(o))]}else if(!S&&u[0]!==1/0){const e=u[1]-u[0],t=e>0?e*R:1;u=[u[0]-t,u[1]+t]}c[0]!==1/0&&c[1]!==-1/0||(c=[0,1]),u[0]!==1/0&&u[1]!==-1/0||(u=[0,1]);const h=function(e,r,o,n,i){let l,a;return"x"===b(e)?(l="right"===e?[0,n]:[n,0],a=[i,0]):(l="down"===e?[0,i]:[i,0],a=[0,n]),{time:t.scaleLinear().domain(r).range(l),value:t.scaleLinear().domain(o).range(a)}}(s,c,u,X,Y);oe.current=h;const f="undefined"!=typeof window&&window.devicePixelRatio||1;r.width=A[0]*f,r.height=A[1]*f,r.style.width=A[0]+"px",r.style.height=A[1]+"px",o.scale(f,f),o.translate(q.left,q.top),o.clearRect(-q.left,-q.top,A[0],A[1]);const m=function(e){if(!e)return w;const t=getComputedStyle(e),r=t.getPropertyValue("--text-secondary").trim(),o=t.getPropertyValue("--text-primary").trim(),n=t.getPropertyValue("--surface-3").trim(),i=t.getPropertyValue("--surface-0").trim();return r||o?{axisStroke:n||w.axisStroke,tickText:r||w.tickText,crosshair:r?r+"66":w.crosshair,hoverFill:i?i+"4D":w.hoverFill,hoverStroke:r?r+"99":w.hoverStroke,pointRing:i||w.pointRing}:w}(r);D&&(o.fillStyle=D,o.fillRect(0,0,X,Y)),F&&(o.save(),function(e,t,r,o,n,i,l,a,s){const c=b(t),u=a||x,h=s||w;if(e.strokeStyle=h.axisStroke,e.lineWidth=1,e.fillStyle=h.tickText,e.font="10px sans-serif",e.textAlign="center",e.textBaseline="top","x"===c){e.beginPath(),e.moveTo(0,i),e.lineTo(n,i),e.stroke(),e.beginPath(),e.moveTo(0,0),e.lineTo(0,i),e.stroke();const t=r.ticks(5);e.textAlign="center",e.textBaseline="top";for(const o of t){const t=r(o);e.beginPath(),e.moveTo(t,i),e.lineTo(t,i+5),e.stroke(),l&&e.fillText(l(o),t,i+7)}e.textAlign="right",e.textBaseline="middle";const a=o.ticks(5);for(const t of a){const r=o(t);e.beginPath(),e.moveTo(-5,r),e.lineTo(0,r),e.stroke(),e.fillText(u(t),-8,r)}}else{e.beginPath(),e.moveTo(0,0),e.lineTo(0,i),e.stroke(),e.beginPath(),e.moveTo(0,"y"===c&&"down"===t?0:i),e.lineTo(n,"y"===c&&"down"===t?0:i),e.stroke(),e.textAlign="center",e.textBaseline="top";const a=o.ticks(5);for(const t of a){const r=o(t);e.beginPath(),e.moveTo(r,i),e.lineTo(r,i+5),e.stroke(),e.fillText(u(t),r,i+7)}e.textAlign="right",e.textBaseline="middle";const s=r.ticks(5);for(const t of s){const o=r(t);e.beginPath(),e.moveTo(-5,o),e.lineTo(0,o),e.stroke(),l&&e.fillText(l(t),-8,o)}}}(o,s,h.time,h.value,X,Y,L,$,m),o.restore());const p=g[a];if(p&&p(o,n,h,{width:X,height:Y,timeAxis:b(s)},z,{time:G,value:J,category:K},E,"bar"===a?{binSize:H,barColors:B,barStyle:V}:"waterfall"===a?{waterfallStyle:j}:"swarm"===a?{swarmStyle:I,barColors:B}:void 0),C&&ae.current&&"bar"===a&&H){const t=ae.current.data;if(null!=t.binStart){const r=null!==(e=null==V?void 0:V.gap)&&void 0!==e?e:1,n=b(s),i=null!=t.hoveredCategory?(()=>{const e=t.categories||{},r=B?Object.keys(B):[],o=new Set(r),n=Object.keys(e).filter(e=>!o.has(e)).sort(),i=[...r.filter(t=>t in e),...n];let l=0;for(const r of i){if(r===t.hoveredCategory)return l;l+=e[r]||0}return l})():0,l=null!=t.hoveredCategory?i+(t.hoveredCategoryValue||0):t.total,[a,c]=h.time.domain(),u=Math.max(t.binStart,a),f=Math.min(t.binEnd,c);if("x"===n){const e=h.time(u),t=h.time(f),n=Math.min(e,t)+r/2,a=Math.max(e,t)-r/2,s=h.value(i),c=h.value(l),d=Math.min(s,c),v=Math.abs(s-c);o.fillStyle=m.hoverFill,o.fillRect(n,d,a-n,v),o.strokeStyle=m.hoverStroke,o.lineWidth=1,o.setLineDash([]),o.strokeRect(n,d,a-n,v)}else{const e=h.time(u),t=h.time(f),n=Math.min(e,t)+r/2,a=Math.max(e,t)-r/2,s=h.value(i),c=h.value(l),d=Math.min(s,c),v=Math.abs(c-s);o.fillStyle=m.hoverFill,o.fillRect(d,n,v,a-n),o.strokeStyle=m.hoverStroke,o.lineWidth=1,o.setLineDash([]),o.strokeRect(d,n,v,a-n)}}}C&&ae.current&&function(e,t,r,o,n,i,l){if(!1===n.crosshair)return;const a=l||w;e.save();const s="object"==typeof n.crosshair?n.crosshair:{};e.strokeStyle=s.stroke||a.crosshair,e.lineWidth=s.strokeWidth||1,e.setLineDash(s.strokeDasharray?s.strokeDasharray.split(/[\s,]+/).map(Number):[4,4]),e.beginPath(),e.moveTo(t.x,0),e.lineTo(t.x,o),e.stroke(),e.beginPath(),e.moveTo(0,t.y),e.lineTo(r,t.y),e.stroke(),e.restore(),e.beginPath(),e.arc(t.x,t.y,4,0,2*Math.PI),e.fillStyle=i,e.fill(),e.strokeStyle=a.pointRing,e.lineWidth=2,e.stroke()}(o,ae.current,X,Y,"object"==typeof C?C:{},z.stroke||"#007bff",m);const y=re.current;re.current=!1,y&&E&&E.length>0&&N&&ie(e=>e+1)},e.useEffect(()=>(he(),()=>{te.current&&cancelAnimationFrame(te.current)}),[he]),e.useEffect(()=>{re.current=!0,he()},[s,a,X,Y,F,D,z,he]);const ke=o.useMemo(()=>{if(!E||0===E.length||!N)return null;const e=oe.current,t=b(s);return E.map((r,o)=>N(r,o,{scales:e,timeAxis:t,width:X,height:Y})).filter(Boolean)},[E,N,s,X,Y,ne]),be=ke&&ke.length>0,xe=C&&se?o.createElement("div",{className:"realtime-frame-tooltip",style:{position:"absolute",left:q.left+se.x,top:q.top+se.y,transform:`translate(${se.x>.7*X?"calc(-100% - 12px)":"12px"}, ${.3*Y>se.y?"4px":"calc(-100% - 4px)"})`,pointerEvents:"none",zIndex:1}},W?W(se):o.createElement(M,{hover:se,formatTime:L})):null;return o.createElement("div",{className:"realtime-frame"+(_?" "+_:""),style:{position:"relative",width:A[0],height:A[1]},onMouseMove:C?pe:void 0,onMouseLeave:C?ye:void 0},o.createElement("canvas",{ref:ee,style:{position:"absolute",left:0,top:0}}),be&&o.createElement("svg",{width:A[0],height:A[1],style:{position:"absolute",top:0,left:0,pointerEvents:"none"}},o.createElement("g",{transform:`translate(${q.left},${q.top})`},ke)),xe)}),A=e.forwardRef(function(t,r){const{size:n=[500,300],margin:i,className:l,arrowOfTime:a="right",windowMode:s="sliding",windowSize:c=200,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,stroke:g="#007bff",strokeWidth:p=2,strokeDasharray:y,showAxes:k=!0,background:b,enableHover:x,tooltipContent:w,onHover:S,annotations:M,svgAnnotationRules:A,tickFormatTime:T,tickFormatValue:_}=t,z=e.useRef(null);return e.useImperativeHandle(r,()=>({push:e=>{var t;return null===(t=z.current)||void 0===t?void 0:t.push(e)},pushMany:e=>{var t;return null===(t=z.current)||void 0===t?void 0:t.pushMany(e)},clear:()=>{var e;return null===(e=z.current)||void 0===e?void 0:e.clear()},getData:()=>{var e,t;return null!==(t=null===(e=z.current)||void 0===e?void 0:e.getData())&&void 0!==t?t:[]}})),o.createElement(R,{ref:z,chartType:"line",size:n,margin:i,className:l,arrowOfTime:a,windowMode:s,windowSize:c,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,lineStyle:{stroke:g,strokeWidth:p,strokeDasharray:y},showAxes:k,background:b,hoverAnnotation:x,tooltipContent:w,customHoverBehavior:S,annotations:M,svgAnnotationRules:A,tickFormatTime:T,tickFormatValue:_})}),T=e.forwardRef(function(t,r){const{binSize:n,size:i=[500,300],margin:l,className:a,arrowOfTime:s="right",windowMode:c="sliding",windowSize:u=200,data:h,timeAccessor:f,valueAccessor:d,timeExtent:m,valueExtent:v,extentPadding:g,categoryAccessor:p,colors:y,fill:k,stroke:b,strokeWidth:x,gap:w,showAxes:S=!0,background:M,enableHover:A,tooltipContent:T,onHover:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C}=t,W=e.useRef(null);e.useImperativeHandle(r,()=>({push:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.push(e)},pushMany:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.pushMany(e)},clear:()=>{var e;return null===(e=W.current)||void 0===e?void 0:e.clear()},getData:()=>{var e,t;return null!==(t=null===(e=W.current)||void 0===e?void 0:e.getData())&&void 0!==t?t:[]}}));const P={};return null!=k&&(P.fill=k),null!=b&&(P.stroke=b),null!=x&&(P.strokeWidth=x),null!=w&&(P.gap=w),o.createElement(R,{ref:W,chartType:"bar",size:i,margin:l,className:a,arrowOfTime:s,windowMode:c,windowSize:u,data:h,timeAccessor:f,valueAccessor:d,timeExtent:m,valueExtent:v,extentPadding:g,binSize:n,categoryAccessor:p,barColors:y,barStyle:P,showAxes:S,background:M,hoverAnnotation:A,tooltipContent:T,customHoverBehavior:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C})}),_=e.forwardRef(function(t,r){const{size:n=[500,300],margin:i,className:l,arrowOfTime:a="right",windowMode:s="sliding",windowSize:c=200,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,categoryAccessor:g,colors:p,radius:y,fill:k,opacity:b,stroke:x,strokeWidth:w,showAxes:S=!0,background:M,enableHover:A,tooltipContent:T,onHover:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C}=t,W=e.useRef(null);e.useImperativeHandle(r,()=>({push:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.push(e)},pushMany:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.pushMany(e)},clear:()=>{var e;return null===(e=W.current)||void 0===e?void 0:e.clear()},getData:()=>{var e,t;return null!==(t=null===(e=W.current)||void 0===e?void 0:e.getData())&&void 0!==t?t:[]}}));const P={};return null!=y&&(P.radius=y),null!=k&&(P.fill=k),null!=b&&(P.opacity=b),null!=x&&(P.stroke=x),null!=w&&(P.strokeWidth=w),o.createElement(R,{ref:W,chartType:"swarm",size:n,margin:i,className:l,arrowOfTime:a,windowMode:s,windowSize:c,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,categoryAccessor:g,barColors:p,swarmStyle:P,showAxes:S,background:M,hoverAnnotation:A,tooltipContent:T,customHoverBehavior:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C})}),z=e.forwardRef(function(t,r){const{size:n=[500,300],margin:i,className:l,arrowOfTime:a="right",windowMode:s="sliding",windowSize:c=200,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,positiveColor:g,negativeColor:p,connectorStroke:y,connectorWidth:k,gap:b,stroke:x,strokeWidth:w,showAxes:S=!0,background:M,enableHover:A,tooltipContent:T,onHover:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C}=t,W=e.useRef(null);e.useImperativeHandle(r,()=>({push:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.push(e)},pushMany:e=>{var t;return null===(t=W.current)||void 0===t?void 0:t.pushMany(e)},clear:()=>{var e;return null===(e=W.current)||void 0===e?void 0:e.clear()},getData:()=>{var e,t;return null!==(t=null===(e=W.current)||void 0===e?void 0:e.getData())&&void 0!==t?t:[]}}));const P={};return null!=g&&(P.positiveColor=g),null!=p&&(P.negativeColor=p),null!=y&&(P.connectorStroke=y),null!=k&&(P.connectorWidth=k),null!=b&&(P.gap=b),null!=x&&(P.stroke=x),null!=w&&(P.strokeWidth=w),o.createElement(R,{ref:W,chartType:"waterfall",size:n,margin:i,className:l,arrowOfTime:a,windowMode:s,windowSize:c,data:u,timeAccessor:h,valueAccessor:f,timeExtent:d,valueExtent:m,extentPadding:v,waterfallStyle:P,showAxes:S,background:M,hoverAnnotation:A,tooltipContent:T,customHoverBehavior:_,annotations:z,svgAnnotationRules:E,tickFormatTime:N,tickFormatValue:C})});exports.IncrementalExtent=i,exports.RealtimeBarChart=T,exports.RealtimeFrame=R,exports.RealtimeLineChart=A,exports.RealtimeSwarmChart=_,exports.RealtimeWaterfallChart=z,exports.RingBuffer=n,exports.barRenderer=v,exports.candlestickRenderer=h,exports.lineRenderer=a,exports.swarmRenderer=u,exports.waterfallRenderer=f;
|