semiotic 3.0.0-beta.2 → 3.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +93 -753
- package/README.md +92 -7
- package/ai/dist/componentRegistry.js +26 -0
- package/ai/dist/{ai/mcp-server.js → mcp-server.js} +1 -1
- package/ai/dist/{ai/renderHOCToSVG.js → renderHOCToSVG.js} +2 -2
- package/dist/ChartContainer.d.ts +60 -0
- package/dist/DetailsPanel.d.ts +37 -0
- package/dist/LinkedCharts.d.ts +2 -0
- package/dist/Tooltip/Tooltip.d.ts +2 -2
- package/dist/charts/index.d.ts +1 -1
- package/dist/charts/ordinal/BarChart.d.ts +1 -0
- package/dist/charts/ordinal/BoxPlot.d.ts +1 -0
- package/dist/charts/ordinal/DonutChart.d.ts +1 -0
- package/dist/charts/ordinal/DotPlot.d.ts +1 -0
- package/dist/charts/ordinal/GroupedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/Histogram.d.ts +1 -0
- package/dist/charts/ordinal/PieChart.d.ts +1 -0
- package/dist/charts/ordinal/RidgelinePlot.d.ts +1 -0
- package/dist/charts/ordinal/StackedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/SwarmPlot.d.ts +1 -0
- package/dist/charts/ordinal/ViolinPlot.d.ts +1 -0
- package/dist/charts/realtime/RealtimeHeatmap.d.ts +11 -0
- package/dist/charts/realtime/RealtimeHistogram.d.ts +15 -1
- package/dist/charts/realtime/RealtimeLineChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeSwarmChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +6 -0
- package/dist/charts/shared/annotationRules.d.ts +3 -0
- package/dist/charts/shared/colorUtils.d.ts +17 -11
- package/dist/charts/shared/hooks.d.ts +96 -1
- package/dist/charts/shared/loess.d.ts +13 -0
- package/dist/charts/shared/networkUtils.d.ts +31 -0
- package/dist/charts/shared/tooltipUtils.d.ts +16 -0
- package/dist/charts/shared/types.d.ts +17 -2
- package/dist/charts/shared/validateChartData.d.ts +2 -3
- package/dist/charts/shared/validateProps.d.ts +18 -0
- package/dist/charts/xy/AreaChart.d.ts +4 -0
- package/dist/charts/xy/BubbleChart.d.ts +6 -0
- package/dist/charts/xy/Heatmap.d.ts +4 -0
- package/dist/charts/xy/LineChart.d.ts +6 -0
- package/dist/charts/xy/Scatterplot.d.ts +4 -0
- package/dist/charts/xy/StackedAreaChart.d.ts +4 -0
- package/dist/data/fromVegaLite.d.ts +48 -0
- package/dist/export/chartConfig.d.ts +29 -0
- package/dist/export/selectionSerializer.d.ts +20 -0
- package/dist/geometry/sankeyLinks.d.ts +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/realtime/types.d.ts +20 -6
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +14 -0
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-data.d.ts +2 -0
- package/dist/semiotic-data.min.js +1 -1
- package/dist/semiotic-data.module.min.js +1 -1
- package/dist/semiotic-network.d.ts +9 -19
- package/dist/semiotic-ordinal.d.ts +12 -14
- package/dist/semiotic-xy.d.ts +12 -18
- package/dist/semiotic.d.ts +16 -13
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/store/ObservationStore.d.ts +61 -0
- package/dist/store/SelectionStore.d.ts +9 -1
- package/dist/store/ThemeStore.d.ts +6 -1
- package/dist/store/TooltipStore.d.ts +3 -1
- package/dist/store/createStore.d.ts +4 -1
- package/dist/store/useObservation.d.ts +18 -0
- package/dist/stream/MarginalGraphics.d.ts +1 -1
- package/dist/stream/NetworkPipelineStore.d.ts +44 -0
- package/dist/stream/OrdinalCanvasHitTester.d.ts +1 -0
- package/dist/stream/OrdinalSVGOverlay.d.ts +6 -2
- package/dist/stream/ParticlePool.d.ts +2 -1
- package/dist/stream/PipelineStore.d.ts +11 -0
- package/dist/stream/SVGOverlay.d.ts +21 -2
- package/dist/stream/SceneGraph.d.ts +1 -1
- package/dist/stream/networkTypes.d.ts +58 -1
- package/dist/stream/ordinalTypes.d.ts +13 -0
- package/dist/stream/types.d.ts +14 -0
- package/dist/types/annotationTypes.d.ts +10 -0
- package/dist/types/networkTypes.d.ts +1 -2
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +30 -42
- package/ai/dist/ai/componentRegistry.js +0 -45
- package/ai/dist/src/components/Annotation.js +0 -358
- package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +0 -369
- package/ai/dist/src/components/Axis/Axis.js +0 -374
- package/ai/dist/src/components/Axis/axisTitle.js +0 -14
- package/ai/dist/src/components/Axis/index.js +0 -7
- package/ai/dist/src/components/Axis/summaryGraphic.js +0 -37
- package/ai/dist/src/components/Brush.js +0 -84
- package/ai/dist/src/components/ChartErrorBoundary.js +0 -91
- package/ai/dist/src/components/DividedLine.js +0 -65
- package/ai/dist/src/components/Legend.js +0 -140
- package/ai/dist/src/components/LinkedCharts.js +0 -95
- package/ai/dist/src/components/ThemeProvider.js +0 -79
- package/ai/dist/src/components/Tooltip/Tooltip.js +0 -309
- package/ai/dist/src/components/TooltipPositioner/index.js +0 -132
- package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +0 -73
- package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +0 -254
- package/ai/dist/src/components/annotationRules/baseRules.js +0 -150
- package/ai/dist/src/components/annotationRules/networkframeRules.js +0 -196
- package/ai/dist/src/components/annotationRules/xyframeRules.js +0 -297
- package/ai/dist/src/components/batchWork.js +0 -35
- package/ai/dist/src/components/charts/index.js +0 -109
- package/ai/dist/src/components/charts/network/ChordDiagram.js +0 -142
- package/ai/dist/src/components/charts/network/CirclePack.js +0 -108
- package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +0 -121
- package/ai/dist/src/components/charts/network/SankeyDiagram.js +0 -155
- package/ai/dist/src/components/charts/network/TreeDiagram.js +0 -110
- package/ai/dist/src/components/charts/network/Treemap.js +0 -106
- package/ai/dist/src/components/charts/ordinal/BarChart.js +0 -156
- package/ai/dist/src/components/charts/ordinal/BoxPlot.js +0 -139
- package/ai/dist/src/components/charts/ordinal/DonutChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/DotPlot.js +0 -126
- package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +0 -129
- package/ai/dist/src/components/charts/ordinal/Histogram.js +0 -132
- package/ai/dist/src/components/charts/ordinal/PieChart.js +0 -128
- package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +0 -130
- package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +0 -147
- package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +0 -138
- package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +0 -79
- package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +0 -114
- package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +0 -93
- package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +0 -105
- package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +0 -106
- package/ai/dist/src/components/charts/shared/ChartError.js +0 -72
- package/ai/dist/src/components/charts/shared/colorUtils.js +0 -138
- package/ai/dist/src/components/charts/shared/formatUtils.js +0 -213
- package/ai/dist/src/components/charts/shared/hooks.js +0 -49
- package/ai/dist/src/components/charts/shared/legendUtils.js +0 -57
- package/ai/dist/src/components/charts/shared/selectionUtils.js +0 -67
- package/ai/dist/src/components/charts/shared/tooltipUtils.js +0 -79
- package/ai/dist/src/components/charts/shared/types.js +0 -2
- package/ai/dist/src/components/charts/shared/validateChartData.js +0 -82
- package/ai/dist/src/components/charts/shared/validateProps.js +0 -736
- package/ai/dist/src/components/charts/xy/AreaChart.js +0 -230
- package/ai/dist/src/components/charts/xy/BubbleChart.js +0 -251
- package/ai/dist/src/components/charts/xy/Heatmap.js +0 -235
- package/ai/dist/src/components/charts/xy/LineChart.js +0 -307
- package/ai/dist/src/components/charts/xy/MinimapChart.js +0 -298
- package/ai/dist/src/components/charts/xy/Scatterplot.js +0 -172
- package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +0 -426
- package/ai/dist/src/components/charts/xy/StackedAreaChart.js +0 -231
- package/ai/dist/src/components/constants/coordinateNames.js +0 -11
- package/ai/dist/src/components/constants/frame_props.js +0 -251
- package/ai/dist/src/components/data/dataFunctions.js +0 -487
- package/ai/dist/src/components/data/multiAccessorUtils.js +0 -14
- package/ai/dist/src/components/data/transforms.js +0 -143
- package/ai/dist/src/components/data/unflowedFunctions.js +0 -5
- package/ai/dist/src/components/export/exportChart.js +0 -121
- package/ai/dist/src/components/generic_utilities/functions.js +0 -5
- package/ai/dist/src/components/geometry/areaDrawing.js +0 -312
- package/ai/dist/src/components/geometry/contourLayout.js +0 -73
- package/ai/dist/src/components/geometry/hexbinLayout.js +0 -163
- package/ai/dist/src/components/geometry/lineDrawing.js +0 -356
- package/ai/dist/src/components/geometry/sankeyLinks.js +0 -331
- package/ai/dist/src/components/geometry/summaryLayouts.js +0 -136
- package/ai/dist/src/components/index.js +0 -18
- package/ai/dist/src/components/processing/InteractionItems.js +0 -223
- package/ai/dist/src/components/processing/hierarchyUtils.js +0 -104
- package/ai/dist/src/components/processing/layouts/chordLayout.js +0 -58
- package/ai/dist/src/components/processing/layouts/forceLayout.js +0 -142
- package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +0 -31
- package/ai/dist/src/components/processing/layouts/index.js +0 -32
- package/ai/dist/src/components/processing/layouts/sankeyLayout.js +0 -96
- package/ai/dist/src/components/processing/layouts/simpleLayouts.js +0 -34
- package/ai/dist/src/components/processing/layouts/types.js +0 -2
- package/ai/dist/src/components/processing/networkDefaults.js +0 -39
- package/ai/dist/src/components/realtime/BinAccumulator.js +0 -36
- package/ai/dist/src/components/realtime/IncrementalExtent.js +0 -55
- package/ai/dist/src/components/realtime/RingBuffer.js +0 -104
- package/ai/dist/src/components/realtime/renderers/barRenderer.js +0 -133
- package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +0 -7
- package/ai/dist/src/components/realtime/renderers/lineRenderer.js +0 -164
- package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +0 -91
- package/ai/dist/src/components/realtime/renderers/types.js +0 -2
- package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +0 -163
- package/ai/dist/src/components/realtime/types.js +0 -2
- package/ai/dist/src/components/semiotic-ai.js +0 -89
- package/ai/dist/src/components/semiotic-data.js +0 -12
- package/ai/dist/src/components/semiotic-network.js +0 -38
- package/ai/dist/src/components/semiotic-ordinal.js +0 -28
- package/ai/dist/src/components/semiotic-realtime.js +0 -30
- package/ai/dist/src/components/semiotic-server.js +0 -8
- package/ai/dist/src/components/semiotic-xy.js +0 -35
- package/ai/dist/src/components/semiotic.js +0 -109
- package/ai/dist/src/components/server/renderToStaticSVG.js +0 -594
- package/ai/dist/src/components/store/SelectionStore.js +0 -91
- package/ai/dist/src/components/store/ThemeStore.js +0 -78
- package/ai/dist/src/components/store/TooltipStore.js +0 -13
- package/ai/dist/src/components/store/createStore.js +0 -81
- package/ai/dist/src/components/store/useSelection.js +0 -133
- package/ai/dist/src/components/stream/CanvasHitTester.js +0 -164
- package/ai/dist/src/components/stream/DataSourceAdapter.js +0 -99
- package/ai/dist/src/components/stream/MarginalGraphics.js +0 -266
- package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +0 -228
- package/ai/dist/src/components/stream/NetworkPipelineStore.js +0 -498
- package/ai/dist/src/components/stream/NetworkSVGOverlay.js +0 -70
- package/ai/dist/src/components/stream/NetworkSceneGraph.js +0 -38
- package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +0 -146
- package/ai/dist/src/components/stream/OrdinalPipelineStore.js +0 -786
- package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +0 -130
- package/ai/dist/src/components/stream/ParticlePool.js +0 -174
- package/ai/dist/src/components/stream/PipelineStore.js +0 -1243
- package/ai/dist/src/components/stream/SVGOverlay.js +0 -129
- package/ai/dist/src/components/stream/SceneGraph.js +0 -132
- package/ai/dist/src/components/stream/StreamNetworkFrame.js +0 -561
- package/ai/dist/src/components/stream/StreamOrdinalFrame.js +0 -492
- package/ai/dist/src/components/stream/StreamXYFrame.js +0 -590
- package/ai/dist/src/components/stream/accessorUtils.js +0 -20
- package/ai/dist/src/components/stream/index.js +0 -32
- package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +0 -352
- package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +0 -230
- package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +0 -568
- package/ai/dist/src/components/stream/layouts/index.js +0 -28
- package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +0 -245
- package/ai/dist/src/components/stream/networkTypes.js +0 -17
- package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +0 -126
- package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +0 -62
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +0 -33
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +0 -63
- package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +0 -278
- package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +0 -30
- package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +0 -2
- package/ai/dist/src/components/stream/ordinalTypes.js +0 -2
- package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +0 -48
- package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +0 -70
- package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +0 -75
- package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +0 -28
- package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +0 -31
- package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +0 -140
- package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +0 -37
- package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +0 -102
- package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +0 -63
- package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +0 -35
- package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +0 -10
- package/ai/dist/src/components/stream/renderers/types.js +0 -2
- package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +0 -33
- package/ai/dist/src/components/stream/types.js +0 -2
- package/ai/dist/src/components/types/annotationTypes.js +0 -2
- package/ai/dist/src/components/types/canvasTypes.js +0 -2
- package/ai/dist/src/components/types/generalTypes.js +0 -2
- package/ai/dist/src/components/types/interactionTypes.js +0 -2
- package/ai/dist/src/components/types/legendTypes.js +0 -2
- package/ai/dist/src/components/types/networkTypes.js +0 -2
- package/ai/dist/src/components/types/ordinalTypes.js +0 -2
- package/ai/dist/src/components/types/xyTypes.js +0 -2
- package/ai/dist/src/components/useBoundingRect.js +0 -24
- package/ai/dist/src/components/visualizationLayerBehavior/axis.js +0 -301
- package/ai/dist/src/components/visualizationLayerBehavior/general.js +0 -435
- package/ai/dist/src/setupTests.js +0 -4
- package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -25
- package/dist/Axis/Axis.d.ts +0 -7
- package/dist/Axis/axisTitle.d.ts +0 -10
- package/dist/Axis/index.d.ts +0 -2
- package/dist/Axis/summaryGraphic.d.ts +0 -17
- package/dist/Brush.d.ts +0 -12
- package/dist/DividedLine.d.ts +0 -16
- package/dist/TooltipPositioner/index.d.ts +0 -7
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +0 -19
- package/dist/annotationLayerBehavior/d3labeler.d.ts +0 -9
- package/dist/annotationRules/baseRules.d.ts +0 -25
- package/dist/annotationRules/networkframeRules.d.ts +0 -48
- package/dist/annotationRules/xyframeRules.d.ts +0 -117
- package/dist/batchWork.d.ts +0 -6
- package/dist/constants/coordinateNames.d.ts +0 -8
- package/dist/constants/frame_props.d.ts +0 -13
- package/dist/data/dataFunctions.d.ts +0 -45
- package/dist/data/multiAccessorUtils.d.ts +0 -1
- package/dist/data/unflowedFunctions.d.ts +0 -1
- package/dist/generic_utilities/functions.d.ts +0 -1
- package/dist/geometry/areaDrawing.d.ts +0 -21
- package/dist/geometry/contourLayout.d.ts +0 -6
- package/dist/geometry/hexbinLayout.d.ts +0 -7
- package/dist/geometry/lineDrawing.d.ts +0 -71
- package/dist/geometry/summaryLayouts.d.ts +0 -45
- package/dist/index.d.ts +0 -1
- package/dist/network.js +0 -7495
- package/dist/network.js.map +0 -1
- package/dist/network.module.js +0 -7458
- package/dist/network.module.js.map +0 -1
- package/dist/ordinal.js +0 -6497
- package/dist/ordinal.js.map +0 -1
- package/dist/ordinal.module.js +0 -6465
- package/dist/ordinal.module.js.map +0 -1
- package/dist/processing/InteractionItems.d.ts +0 -13
- package/dist/processing/hierarchyUtils.d.ts +0 -16
- package/dist/processing/layouts/chordLayout.d.ts +0 -2
- package/dist/processing/layouts/forceLayout.d.ts +0 -3
- package/dist/processing/layouts/hierarchyLayout.d.ts +0 -10
- package/dist/processing/layouts/index.d.ts +0 -8
- package/dist/processing/layouts/sankeyLayout.d.ts +0 -8
- package/dist/processing/layouts/simpleLayouts.d.ts +0 -7
- package/dist/processing/layouts/types.d.ts +0 -17
- package/dist/processing/networkDefaults.d.ts +0 -36
- package/dist/realtime/renderers/barRenderer.d.ts +0 -2
- package/dist/realtime/renderers/candlestickRenderer.d.ts +0 -2
- package/dist/realtime/renderers/lineRenderer.d.ts +0 -2
- package/dist/realtime/renderers/swarmRenderer.d.ts +0 -2
- package/dist/realtime.js +0 -7072
- package/dist/realtime.js.map +0 -1
- package/dist/realtime.module.js +0 -7043
- package/dist/realtime.module.js.map +0 -1
- package/dist/semiotic-ai.js +0 -13323
- package/dist/semiotic-ai.js.map +0 -1
- package/dist/semiotic-ai.module.js +0 -13264
- package/dist/semiotic-ai.module.js.map +0 -1
- package/dist/semiotic-data.js +0 -141
- package/dist/semiotic-data.js.map +0 -1
- package/dist/semiotic-data.module.js +0 -136
- package/dist/semiotic-data.module.js.map +0 -1
- package/dist/semiotic.js +0 -16351
- package/dist/semiotic.js.map +0 -1
- package/dist/semiotic.module.js +0 -16265
- package/dist/semiotic.module.js.map +0 -1
- package/dist/server.js +0 -5191
- package/dist/server.js.map +0 -1
- package/dist/server.module.js +0 -5166
- package/dist/server.module.js.map +0 -1
- package/dist/stream/NetworkSceneGraph.d.ts +0 -14
- package/dist/stream/index.d.ts +0 -16
- package/dist/types/canvasTypes.d.ts +0 -9
- package/dist/types/xyTypes.d.ts +0 -24
- package/dist/useBoundingRect.d.ts +0 -2
- package/dist/visualizationLayerBehavior/axis.d.ts +0 -36
- package/dist/visualizationLayerBehavior/general.d.ts +0 -80
- package/dist/xy.js +0 -6993
- package/dist/xy.js.map +0 -1
- package/dist/xy.module.js +0 -6957
- package/dist/xy.module.js.map +0 -1
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
-
};
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.Heatmap = Heatmap;
|
|
41
|
-
const React = __importStar(require("react"));
|
|
42
|
-
const react_1 = require("react");
|
|
43
|
-
const d3_scale_1 = require("d3-scale");
|
|
44
|
-
const d3_scale_chromatic_1 = require("d3-scale-chromatic");
|
|
45
|
-
const StreamXYFrame_1 = __importDefault(require("../../stream/StreamXYFrame"));
|
|
46
|
-
const hooks_1 = require("../shared/hooks");
|
|
47
|
-
const Tooltip_1 = require("../../Tooltip/Tooltip");
|
|
48
|
-
const tooltipUtils_1 = require("../shared/tooltipUtils");
|
|
49
|
-
const ChartError_1 = __importDefault(require("../shared/ChartError"));
|
|
50
|
-
const validateChartData_1 = require("../shared/validateChartData");
|
|
51
|
-
const selectionUtils_1 = require("../shared/selectionUtils");
|
|
52
|
-
const useSelection_1 = require("../../store/useSelection");
|
|
53
|
-
const useSelection_2 = require("../../store/useSelection");
|
|
54
|
-
/**
|
|
55
|
-
* Heatmap - Visualize matrix data with color-encoded cells
|
|
56
|
-
*
|
|
57
|
-
* A simplified wrapper around StreamXYFrame for creating heatmaps. Perfect for
|
|
58
|
-
* showing patterns, correlations, and distributions in 2D data.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```tsx
|
|
62
|
-
* // Simple heatmap
|
|
63
|
-
* <Heatmap
|
|
64
|
-
* data={[
|
|
65
|
-
* {x: 1, y: 1, value: 10},
|
|
66
|
-
* {x: 1, y: 2, value: 20},
|
|
67
|
-
* {x: 2, y: 1, value: 15},
|
|
68
|
-
* {x: 2, y: 2, value: 25}
|
|
69
|
-
* ]}
|
|
70
|
-
* xLabel="Time"
|
|
71
|
-
* yLabel="Category"
|
|
72
|
-
* />
|
|
73
|
-
* ```
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```tsx
|
|
77
|
-
* // With custom color scheme and value labels
|
|
78
|
-
* <Heatmap
|
|
79
|
-
* data={data}
|
|
80
|
-
* colorScheme="viridis"
|
|
81
|
-
* showValues={true}
|
|
82
|
-
* valueFormat={d => d.toFixed(1)}
|
|
83
|
-
* />
|
|
84
|
-
* ```
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```tsx
|
|
88
|
-
* // Advanced: Custom color scale
|
|
89
|
-
* <Heatmap
|
|
90
|
-
* data={data}
|
|
91
|
-
* colorScheme="custom"
|
|
92
|
-
* customColorScale={
|
|
93
|
-
* scaleSequential(interpolatePlasma).domain([0, 100])
|
|
94
|
-
* }
|
|
95
|
-
* />
|
|
96
|
-
* ```
|
|
97
|
-
*
|
|
98
|
-
* @remarks
|
|
99
|
-
* This component wraps {@link StreamXYFrame} with sensible defaults for heatmaps.
|
|
100
|
-
* For more advanced features like hexbins, contours, or custom summaries,
|
|
101
|
-
* use StreamXYFrame directly.
|
|
102
|
-
*
|
|
103
|
-
* **Breadcrumb to advanced usage:**
|
|
104
|
-
* - Use the `frameProps` prop to pass any StreamXYFrame prop
|
|
105
|
-
* - See StreamXYFrame documentation: https://semiotic.nteract.io/guides/xy-frame
|
|
106
|
-
* - All StreamXYFrame props are available via `frameProps`
|
|
107
|
-
*
|
|
108
|
-
* @param props - Heatmap configuration
|
|
109
|
-
* @returns Rendered heatmap
|
|
110
|
-
*/
|
|
111
|
-
function Heatmap(props) {
|
|
112
|
-
const { data, width = 600, height = 400, margin = { top: 50, bottom: 60, left: 70, right: 80 }, className, title, xAccessor = "x", yAccessor = "y", valueAccessor = "value", xLabel, yLabel, xFormat, yFormat, colorScheme = "blues", customColorScale, showValues = false, valueFormat, cellBorderColor = "#fff", cellBorderWidth = 1, enableHover = true, tooltip, frameProps = {}, selection, linkedHover } = props;
|
|
113
|
-
const safeData = data || [];
|
|
114
|
-
// ── Selection hooks (always called, conditional logic inside) ──────────
|
|
115
|
-
const hoverConfig = (0, selectionUtils_1.normalizeLinkedHover)(linkedHover, []);
|
|
116
|
-
const selectionHook = (0, useSelection_1.useSelection)({
|
|
117
|
-
name: selection?.name || "__unused__",
|
|
118
|
-
fields: []
|
|
119
|
-
});
|
|
120
|
-
const linkedHoverHook = (0, useSelection_2.useLinkedHover)({
|
|
121
|
-
name: hoverConfig?.name || "hover",
|
|
122
|
-
fields: hoverConfig?.fields || []
|
|
123
|
-
});
|
|
124
|
-
// Only use the hooks when the corresponding props are provided
|
|
125
|
-
const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null;
|
|
126
|
-
// ── Core chart logic ───────────────────────────────────────────────────
|
|
127
|
-
// Get value accessor function
|
|
128
|
-
const getValueFn = (0, react_1.useMemo)(() => {
|
|
129
|
-
return typeof valueAccessor === "function"
|
|
130
|
-
? (d) => valueAccessor(d)
|
|
131
|
-
: (d) => d[valueAccessor];
|
|
132
|
-
}, [valueAccessor]);
|
|
133
|
-
// Calculate value domain
|
|
134
|
-
const valueDomain = (0, react_1.useMemo)(() => {
|
|
135
|
-
const values = safeData.map(getValueFn);
|
|
136
|
-
return [Math.min(...values), Math.max(...values)];
|
|
137
|
-
}, [safeData, getValueFn]);
|
|
138
|
-
// Create color scale
|
|
139
|
-
const colorScale = (0, react_1.useMemo)(() => {
|
|
140
|
-
if (colorScheme === "custom" && customColorScale) {
|
|
141
|
-
return customColorScale;
|
|
142
|
-
}
|
|
143
|
-
const interpolators = {
|
|
144
|
-
blues: d3_scale_chromatic_1.interpolateBlues,
|
|
145
|
-
reds: d3_scale_chromatic_1.interpolateReds,
|
|
146
|
-
greens: d3_scale_chromatic_1.interpolateGreens,
|
|
147
|
-
viridis: d3_scale_chromatic_1.interpolateViridis
|
|
148
|
-
};
|
|
149
|
-
const interpolator = interpolators[colorScheme] || d3_scale_chromatic_1.interpolateBlues;
|
|
150
|
-
return (0, d3_scale_1.scaleSequential)(interpolator).domain(valueDomain);
|
|
151
|
-
}, [colorScheme, customColorScale, valueDomain]);
|
|
152
|
-
// Get unique x and y values for bin sizing
|
|
153
|
-
const { xBinCount, yBinCount } = (0, react_1.useMemo)(() => {
|
|
154
|
-
const getX = (0, hooks_1.resolveAccessor)(xAccessor);
|
|
155
|
-
const getY = (0, hooks_1.resolveAccessor)(yAccessor);
|
|
156
|
-
return {
|
|
157
|
-
xBinCount: new Set(safeData.map(getX)).size,
|
|
158
|
-
yBinCount: new Set(safeData.map(getY)).size
|
|
159
|
-
};
|
|
160
|
-
}, [safeData, xAccessor, yAccessor]);
|
|
161
|
-
// Transform data to summary format for StreamXYFrame
|
|
162
|
-
const summaryData = (0, react_1.useMemo)(() => {
|
|
163
|
-
return { coordinates: safeData };
|
|
164
|
-
}, [safeData]);
|
|
165
|
-
// Summary style function
|
|
166
|
-
const baseSummaryStyle = (0, react_1.useMemo)(() => {
|
|
167
|
-
return (d) => {
|
|
168
|
-
const value = getValueFn(d);
|
|
169
|
-
return {
|
|
170
|
-
fill: colorScale(value),
|
|
171
|
-
stroke: cellBorderColor,
|
|
172
|
-
strokeWidth: cellBorderWidth
|
|
173
|
-
};
|
|
174
|
-
};
|
|
175
|
-
}, [getValueFn, colorScale, cellBorderColor, cellBorderWidth]);
|
|
176
|
-
const summaryStyle = (0, react_1.useMemo)(() => (0, selectionUtils_1.wrapStyleWithSelection)(baseSummaryStyle, activeSelectionHook, selection), [baseSummaryStyle, activeSelectionHook, selection]);
|
|
177
|
-
// Summary render function (for value labels)
|
|
178
|
-
const summaryRenderMode = (0, react_1.useMemo)(() => {
|
|
179
|
-
if (!showValues)
|
|
180
|
-
return undefined;
|
|
181
|
-
const midpoint = (valueDomain[0] + valueDomain[1]) / 2;
|
|
182
|
-
return (d, i) => {
|
|
183
|
-
const value = getValueFn(d);
|
|
184
|
-
const displayValue = valueFormat ? valueFormat(value) : String(value);
|
|
185
|
-
return (React.createElement("text", { textAnchor: "middle", dominantBaseline: "middle", fill: getValueFn(d) > midpoint ? "#fff" : "#000", fontSize: "12px" }, displayValue));
|
|
186
|
-
};
|
|
187
|
-
}, [showValues, getValueFn, valueFormat, valueDomain]);
|
|
188
|
-
// ── Hover behavior ─────────────────────────────────────────────────────
|
|
189
|
-
const customHoverBehavior = (0, react_1.useCallback)((d) => {
|
|
190
|
-
if (linkedHover) {
|
|
191
|
-
linkedHoverHook.onHover(d);
|
|
192
|
-
}
|
|
193
|
-
}, [linkedHover, linkedHoverHook]);
|
|
194
|
-
// Default tooltip showing x, y, and value
|
|
195
|
-
const defaultTooltipContent = (0, react_1.useMemo)(() => (0, tooltipUtils_1.buildDefaultTooltip)([
|
|
196
|
-
{ label: xLabel || (0, tooltipUtils_1.accessorName)(xAccessor), accessor: xAccessor, role: "x" },
|
|
197
|
-
{ label: yLabel || (0, tooltipUtils_1.accessorName)(yAccessor), accessor: yAccessor, role: "y" },
|
|
198
|
-
{ label: (0, tooltipUtils_1.accessorName)(valueAccessor), accessor: valueAccessor, role: "value" },
|
|
199
|
-
]), [xAccessor, yAccessor, xLabel, yLabel, valueAccessor]);
|
|
200
|
-
// Validate data (after all hooks)
|
|
201
|
-
const error = (0, validateChartData_1.validateArrayData)({
|
|
202
|
-
componentName: "Heatmap",
|
|
203
|
-
data: safeData,
|
|
204
|
-
accessors: {
|
|
205
|
-
xAccessor,
|
|
206
|
-
yAccessor,
|
|
207
|
-
valueAccessor,
|
|
208
|
-
},
|
|
209
|
-
});
|
|
210
|
-
if (error)
|
|
211
|
-
return React.createElement(ChartError_1.default, { componentName: "Heatmap", message: error, width: width, height: height });
|
|
212
|
-
// Build StreamXYFrame props
|
|
213
|
-
const streamProps = {
|
|
214
|
-
chartType: "heatmap",
|
|
215
|
-
data: safeData,
|
|
216
|
-
xAccessor,
|
|
217
|
-
yAccessor,
|
|
218
|
-
valueAccessor,
|
|
219
|
-
size: [width, height],
|
|
220
|
-
margin,
|
|
221
|
-
showAxes: true,
|
|
222
|
-
xLabel,
|
|
223
|
-
yLabel,
|
|
224
|
-
xFormat,
|
|
225
|
-
yFormat,
|
|
226
|
-
enableHover,
|
|
227
|
-
...(title && { title }),
|
|
228
|
-
...(className && { className }),
|
|
229
|
-
tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
|
|
230
|
-
...(linkedHover && { customHoverBehavior }),
|
|
231
|
-
...frameProps
|
|
232
|
-
};
|
|
233
|
-
return React.createElement(StreamXYFrame_1.default, { ...streamProps });
|
|
234
|
-
}
|
|
235
|
-
Heatmap.displayName = "Heatmap";
|
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
-
};
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.LineChart = LineChart;
|
|
41
|
-
const React = __importStar(require("react"));
|
|
42
|
-
const react_1 = require("react");
|
|
43
|
-
const StreamXYFrame_1 = __importDefault(require("../../stream/StreamXYFrame"));
|
|
44
|
-
const colorUtils_1 = require("../shared/colorUtils");
|
|
45
|
-
const hooks_1 = require("../shared/hooks");
|
|
46
|
-
const legendUtils_1 = require("../shared/legendUtils");
|
|
47
|
-
const Tooltip_1 = require("../../Tooltip/Tooltip");
|
|
48
|
-
const tooltipUtils_1 = require("../shared/tooltipUtils");
|
|
49
|
-
const ChartError_1 = __importDefault(require("../shared/ChartError"));
|
|
50
|
-
const validateChartData_1 = require("../shared/validateChartData");
|
|
51
|
-
const selectionUtils_1 = require("../shared/selectionUtils");
|
|
52
|
-
const useSelection_1 = require("../../store/useSelection");
|
|
53
|
-
const useSelection_2 = require("../../store/useSelection");
|
|
54
|
-
/**
|
|
55
|
-
* LineChart - Visualize trends and time series data with lines
|
|
56
|
-
*
|
|
57
|
-
* A simplified wrapper around StreamXYFrame for creating line charts. Perfect for
|
|
58
|
-
* showing trends, comparisons, and temporal patterns in your data.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```tsx
|
|
62
|
-
* // Simple line chart
|
|
63
|
-
* <LineChart
|
|
64
|
-
* data={[
|
|
65
|
-
* {x: 1, y: 10},
|
|
66
|
-
* {x: 2, y: 20},
|
|
67
|
-
* {x: 3, y: 15}
|
|
68
|
-
* ]}
|
|
69
|
-
* xLabel="Time"
|
|
70
|
-
* yLabel="Value"
|
|
71
|
-
* />
|
|
72
|
-
* ```
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```tsx
|
|
76
|
-
* // Multiple lines with grouping
|
|
77
|
-
* <LineChart
|
|
78
|
-
* data={[
|
|
79
|
-
* {x: 1, y: 10, series: 'A'},
|
|
80
|
-
* {x: 2, y: 20, series: 'A'},
|
|
81
|
-
* {x: 1, y: 15, series: 'B'},
|
|
82
|
-
* {x: 2, y: 25, series: 'B'}
|
|
83
|
-
* ]}
|
|
84
|
-
* lineBy="series"
|
|
85
|
-
* colorBy="series"
|
|
86
|
-
* xLabel="Time"
|
|
87
|
-
* yLabel="Value"
|
|
88
|
-
* />
|
|
89
|
-
* ```
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```tsx
|
|
93
|
-
* // Area chart with custom curve
|
|
94
|
-
* <LineChart
|
|
95
|
-
* data={data}
|
|
96
|
-
* curve="monotoneX"
|
|
97
|
-
* fillArea={true}
|
|
98
|
-
* areaOpacity={0.3}
|
|
99
|
-
* showPoints={true}
|
|
100
|
-
* />
|
|
101
|
-
* ```
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* ```tsx
|
|
105
|
-
* // Advanced: Override StreamXYFrame props
|
|
106
|
-
* <LineChart
|
|
107
|
-
* data={data}
|
|
108
|
-
* frameProps={{
|
|
109
|
-
* lineType: { type: "line", interpolator: d3.curveCardinal },
|
|
110
|
-
* customLineMark: ({ d }) => <path stroke="red" />
|
|
111
|
-
* }}
|
|
112
|
-
* />
|
|
113
|
-
* ```
|
|
114
|
-
*
|
|
115
|
-
* @remarks
|
|
116
|
-
* This component wraps {@link StreamXYFrame} with sensible defaults for line charts.
|
|
117
|
-
* For more advanced features like custom marks, annotations, or complex interactions,
|
|
118
|
-
* use StreamXYFrame directly.
|
|
119
|
-
*
|
|
120
|
-
* **Breadcrumb to advanced usage:**
|
|
121
|
-
* - Use the `frameProps` prop to pass any StreamXYFrame prop
|
|
122
|
-
* - See StreamXYFrame documentation: https://semiotic.nteract.io/guides/xy-frame
|
|
123
|
-
* - All StreamXYFrame props are available via `frameProps`
|
|
124
|
-
*
|
|
125
|
-
* @param props - LineChart configuration
|
|
126
|
-
* @returns Rendered line chart
|
|
127
|
-
*/
|
|
128
|
-
function LineChart(props) {
|
|
129
|
-
const { data, width = 600, height = 400, margin: userMargin, className, title, xLabel, yLabel, xFormat, yFormat, xAccessor = "x", yAccessor = "y", lineBy, lineDataAccessor = "coordinates", colorBy, colorScheme = "category10", curve = "linear", showPoints = false, pointRadius = 3, fillArea = false, areaOpacity = 0.3, lineWidth = 2, enableHover = true, showGrid = false, showLegend, tooltip, frameProps = {}, selection, linkedHover } = props;
|
|
130
|
-
const safeData = data || [];
|
|
131
|
-
// ── Selection hooks (always called, conditional logic inside) ──────────
|
|
132
|
-
const hoverConfig = (0, selectionUtils_1.normalizeLinkedHover)(linkedHover, colorBy ? [typeof colorBy === "string" ? colorBy : ""] : []);
|
|
133
|
-
const selectionHook = (0, useSelection_1.useSelection)({
|
|
134
|
-
name: selection?.name || "__unused__",
|
|
135
|
-
fields: []
|
|
136
|
-
});
|
|
137
|
-
const linkedHoverHook = (0, useSelection_2.useLinkedHover)({
|
|
138
|
-
name: hoverConfig?.name || "hover",
|
|
139
|
-
fields: hoverConfig?.fields || []
|
|
140
|
-
});
|
|
141
|
-
// Only use the hooks when the corresponding props are provided
|
|
142
|
-
const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null;
|
|
143
|
-
// ── Core chart logic ───────────────────────────────────────────────────
|
|
144
|
-
// Check if data is in line objects format (has lineDataAccessor field)
|
|
145
|
-
const isLineObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined;
|
|
146
|
-
// Transform data to line format if needed
|
|
147
|
-
const lineData = (0, react_1.useMemo)(() => {
|
|
148
|
-
if (isLineObjectFormat) {
|
|
149
|
-
// Data is already in line objects format
|
|
150
|
-
return safeData;
|
|
151
|
-
}
|
|
152
|
-
if (lineBy) {
|
|
153
|
-
// Group data by lineBy field
|
|
154
|
-
const grouped = safeData.reduce((acc, d) => {
|
|
155
|
-
const key = typeof lineBy === "function" ? lineBy(d) : d[lineBy];
|
|
156
|
-
if (!acc[key]) {
|
|
157
|
-
const lineObj = { [lineDataAccessor]: [] };
|
|
158
|
-
// Add the grouping field
|
|
159
|
-
if (typeof lineBy === "string") {
|
|
160
|
-
lineObj[lineBy] = key;
|
|
161
|
-
}
|
|
162
|
-
acc[key] = lineObj;
|
|
163
|
-
}
|
|
164
|
-
acc[key][lineDataAccessor].push(d);
|
|
165
|
-
return acc;
|
|
166
|
-
}, {});
|
|
167
|
-
return Object.values(grouped);
|
|
168
|
-
}
|
|
169
|
-
// Single line - wrap in line object
|
|
170
|
-
return [{ [lineDataAccessor]: safeData }];
|
|
171
|
-
}, [safeData, lineBy, lineDataAccessor, isLineObjectFormat]);
|
|
172
|
-
// Create color scale if colorBy is specified
|
|
173
|
-
const colorScale = (0, hooks_1.useColorScale)(safeData, colorBy, colorScheme);
|
|
174
|
-
// Line style function
|
|
175
|
-
const baseLineStyle = (0, react_1.useMemo)(() => {
|
|
176
|
-
return (d) => {
|
|
177
|
-
const baseStyle = {
|
|
178
|
-
strokeWidth: lineWidth
|
|
179
|
-
};
|
|
180
|
-
// Apply color
|
|
181
|
-
if (colorBy) {
|
|
182
|
-
baseStyle.stroke = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
baseStyle.stroke = hooks_1.DEFAULT_COLOR;
|
|
186
|
-
}
|
|
187
|
-
// Apply fill for area chart
|
|
188
|
-
if (fillArea) {
|
|
189
|
-
baseStyle.fill = baseStyle.stroke;
|
|
190
|
-
baseStyle.fillOpacity = areaOpacity;
|
|
191
|
-
}
|
|
192
|
-
return baseStyle;
|
|
193
|
-
};
|
|
194
|
-
}, [colorBy, colorScale, lineWidth, fillArea, areaOpacity]);
|
|
195
|
-
const lineStyle = (0, react_1.useMemo)(() => (0, selectionUtils_1.wrapStyleWithSelection)(baseLineStyle, activeSelectionHook, selection), [baseLineStyle, activeSelectionHook, selection]);
|
|
196
|
-
// Point style function (if showPoints is true)
|
|
197
|
-
const pointStyle = (0, react_1.useMemo)(() => {
|
|
198
|
-
if (!showPoints)
|
|
199
|
-
return undefined;
|
|
200
|
-
return (d) => {
|
|
201
|
-
const baseStyle = {
|
|
202
|
-
r: pointRadius,
|
|
203
|
-
fillOpacity: 1
|
|
204
|
-
};
|
|
205
|
-
// Match line color
|
|
206
|
-
if (colorBy) {
|
|
207
|
-
baseStyle.fill = (0, colorUtils_1.getColor)(d.parentLine || d, colorBy, colorScale);
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
baseStyle.fill = hooks_1.DEFAULT_COLOR;
|
|
211
|
-
}
|
|
212
|
-
return baseStyle;
|
|
213
|
-
};
|
|
214
|
-
}, [showPoints, pointRadius, colorBy, colorScale]);
|
|
215
|
-
// Determine chart type for StreamXYFrame
|
|
216
|
-
const chartType = fillArea ? "area" : "line";
|
|
217
|
-
// Determine if we should show legend
|
|
218
|
-
const shouldShowLegend = showLegend !== undefined ? showLegend : lineData.length > 1;
|
|
219
|
-
// Build legend if needed
|
|
220
|
-
const legend = (0, react_1.useMemo)(() => {
|
|
221
|
-
if (!shouldShowLegend || !colorBy)
|
|
222
|
-
return undefined;
|
|
223
|
-
return (0, legendUtils_1.createLegend)({
|
|
224
|
-
data: lineData,
|
|
225
|
-
colorBy,
|
|
226
|
-
colorScale,
|
|
227
|
-
getColor: colorUtils_1.getColor
|
|
228
|
-
});
|
|
229
|
-
}, [shouldShowLegend, colorBy, lineData, colorScale]);
|
|
230
|
-
// Adjust margin for legend if present
|
|
231
|
-
const margin = (0, react_1.useMemo)(() => {
|
|
232
|
-
const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
|
|
233
|
-
const finalMargin = { ...defaultMargin, ...userMargin };
|
|
234
|
-
// If legend is present and right margin is too small, increase it
|
|
235
|
-
if (legend && finalMargin.right < 120) {
|
|
236
|
-
finalMargin.right = 120;
|
|
237
|
-
}
|
|
238
|
-
return finalMargin;
|
|
239
|
-
}, [userMargin, legend]);
|
|
240
|
-
// ── Hover behavior ─────────────────────────────────────────────────────
|
|
241
|
-
const customHoverBehavior = (0, react_1.useCallback)((d) => {
|
|
242
|
-
if (linkedHover) {
|
|
243
|
-
linkedHoverHook.onHover(d);
|
|
244
|
-
}
|
|
245
|
-
}, [linkedHover, linkedHoverHook]);
|
|
246
|
-
// Default tooltip showing all configured fields
|
|
247
|
-
const groupField = lineBy || colorBy;
|
|
248
|
-
const defaultTooltipContent = (0, react_1.useMemo)(() => (0, tooltipUtils_1.buildDefaultTooltip)([
|
|
249
|
-
{ label: xLabel || (0, tooltipUtils_1.accessorName)(xAccessor), accessor: xAccessor, role: "x" },
|
|
250
|
-
{ label: yLabel || (0, tooltipUtils_1.accessorName)(yAccessor), accessor: yAccessor, role: "y" },
|
|
251
|
-
...(groupField ? [{ label: (0, tooltipUtils_1.accessorName)(groupField), accessor: groupField, role: "group" }] : []),
|
|
252
|
-
]), [xAccessor, yAccessor, xLabel, yLabel, groupField]);
|
|
253
|
-
// Validate data (after all hooks)
|
|
254
|
-
const error = (0, validateChartData_1.validateArrayData)({
|
|
255
|
-
componentName: "LineChart",
|
|
256
|
-
data: safeData,
|
|
257
|
-
accessors: {
|
|
258
|
-
xAccessor,
|
|
259
|
-
yAccessor,
|
|
260
|
-
},
|
|
261
|
-
});
|
|
262
|
-
if (error)
|
|
263
|
-
return React.createElement(ChartError_1.default, { componentName: "LineChart", message: error, width: width, height: height });
|
|
264
|
-
// Flatten line data into a single array for StreamXYFrame
|
|
265
|
-
const flattenedData = (0, react_1.useMemo)(() => {
|
|
266
|
-
if (isLineObjectFormat || lineBy) {
|
|
267
|
-
// Already grouped into line objects — flatten coordinates out
|
|
268
|
-
return lineData.flatMap((line) => {
|
|
269
|
-
const coords = line[lineDataAccessor] || [];
|
|
270
|
-
// Carry grouping field onto each datum
|
|
271
|
-
if (lineBy && typeof lineBy === "string") {
|
|
272
|
-
return coords.map((c) => ({ ...c, [lineBy]: line[lineBy] }));
|
|
273
|
-
}
|
|
274
|
-
return coords;
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
return safeData;
|
|
278
|
-
}, [lineData, lineDataAccessor, isLineObjectFormat, lineBy, safeData]);
|
|
279
|
-
// Build StreamXYFrame props
|
|
280
|
-
const streamProps = {
|
|
281
|
-
chartType,
|
|
282
|
-
data: flattenedData,
|
|
283
|
-
xAccessor,
|
|
284
|
-
yAccessor,
|
|
285
|
-
groupAccessor: lineBy || undefined,
|
|
286
|
-
curve,
|
|
287
|
-
lineStyle,
|
|
288
|
-
...(showPoints && { pointStyle }),
|
|
289
|
-
size: [width, height],
|
|
290
|
-
margin,
|
|
291
|
-
showAxes: true,
|
|
292
|
-
xLabel,
|
|
293
|
-
yLabel,
|
|
294
|
-
xFormat,
|
|
295
|
-
yFormat,
|
|
296
|
-
enableHover,
|
|
297
|
-
showGrid,
|
|
298
|
-
...(legend && { legend }),
|
|
299
|
-
...(title && { title }),
|
|
300
|
-
...(className && { className }),
|
|
301
|
-
tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
|
|
302
|
-
...(linkedHover && { customHoverBehavior }),
|
|
303
|
-
...frameProps
|
|
304
|
-
};
|
|
305
|
-
return React.createElement(StreamXYFrame_1.default, { ...streamProps });
|
|
306
|
-
}
|
|
307
|
-
LineChart.displayName = "LineChart";
|