semiotic 2.0.2 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +530 -0
- package/README.md +190 -37
- package/ai/cli.js +48 -0
- package/ai/dist/ai/componentRegistry.js +45 -0
- package/ai/dist/ai/mcp-server.js +99 -0
- package/ai/dist/ai/renderHOCToSVG.js +77 -0
- package/ai/dist/src/components/Annotation.js +358 -0
- package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +369 -0
- package/ai/dist/src/components/Axis/Axis.js +373 -0
- package/ai/dist/src/components/Axis/axisTitle.js +14 -0
- package/ai/dist/src/components/Axis/index.js +7 -0
- package/ai/dist/src/components/Axis/summaryGraphic.js +37 -0
- package/ai/dist/src/components/Brush.js +84 -0
- package/ai/dist/src/components/DividedLine.js +65 -0
- package/ai/dist/src/components/FacetController.js +259 -0
- package/ai/dist/src/components/Frame.js +139 -0
- package/ai/dist/src/components/InteractionLayer.js +328 -0
- package/ai/dist/src/components/Legend.js +140 -0
- package/ai/dist/src/components/MiniMap.js +75 -0
- package/ai/dist/src/components/MinimapXYFrame.js +99 -0
- package/ai/dist/src/components/NetworkFrame.js +335 -0
- package/ai/dist/src/components/OrdinalFrame.js +437 -0
- package/ai/dist/src/components/ResponsiveFrame.js +68 -0
- package/ai/dist/src/components/ResponsiveMinimapXYFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveNetworkFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveOrdinalFrame.js +11 -0
- package/ai/dist/src/components/ResponsiveXYFrame.js +10 -0
- package/ai/dist/src/components/SparkFrame.js +113 -0
- package/ai/dist/src/components/SparkNetworkFrame.js +11 -0
- package/ai/dist/src/components/SparkOrdinalFrame.js +11 -0
- package/ai/dist/src/components/SparkXYFrame.js +11 -0
- package/ai/dist/src/components/Tooltip/Tooltip.js +304 -0
- package/ai/dist/src/components/TooltipPositioner/index.js +132 -0
- package/ai/dist/src/components/VisualizationLayer.js +395 -0
- package/ai/dist/src/components/XYFrame.js +524 -0
- package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +73 -0
- package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +254 -0
- package/ai/dist/src/components/annotationRules/baseRules.js +150 -0
- package/ai/dist/src/components/annotationRules/networkframeRules.js +198 -0
- package/ai/dist/src/components/annotationRules/orframeRules.js +695 -0
- package/ai/dist/src/components/annotationRules/xyframeRules.js +299 -0
- package/ai/dist/src/components/batchWork.js +35 -0
- package/ai/dist/src/components/charts/index.js +96 -0
- package/ai/dist/src/components/charts/network/ChordDiagram.js +245 -0
- package/ai/dist/src/components/charts/network/CirclePack.js +177 -0
- package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +248 -0
- package/ai/dist/src/components/charts/network/SankeyDiagram.js +305 -0
- package/ai/dist/src/components/charts/network/TreeDiagram.js +268 -0
- package/ai/dist/src/components/charts/network/Treemap.js +177 -0
- package/ai/dist/src/components/charts/ordinal/BarChart.js +191 -0
- package/ai/dist/src/components/charts/ordinal/BoxPlot.js +235 -0
- package/ai/dist/src/components/charts/ordinal/DonutChart.js +178 -0
- package/ai/dist/src/components/charts/ordinal/DotPlot.js +194 -0
- package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +194 -0
- package/ai/dist/src/components/charts/ordinal/PieChart.js +155 -0
- package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +213 -0
- package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +219 -0
- package/ai/dist/src/components/charts/realtime/RealtimeBarChart.js +91 -0
- package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +73 -0
- package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +85 -0
- package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +86 -0
- package/ai/dist/src/components/charts/shared/ChartError.js +72 -0
- package/ai/dist/src/components/charts/shared/colorUtils.js +138 -0
- package/ai/dist/src/components/charts/shared/formatUtils.js +176 -0
- package/ai/dist/src/components/charts/shared/hooks.js +49 -0
- package/ai/dist/src/components/charts/shared/legendUtils.js +57 -0
- package/ai/dist/src/components/charts/shared/types.js +2 -0
- package/ai/dist/src/components/charts/shared/validateChartData.js +82 -0
- package/ai/dist/src/components/charts/shared/validateProps.js +640 -0
- package/ai/dist/src/components/charts/xy/AreaChart.js +220 -0
- package/ai/dist/src/components/charts/xy/BubbleChart.js +222 -0
- package/ai/dist/src/components/charts/xy/Heatmap.js +230 -0
- package/ai/dist/src/components/charts/xy/LineChart.js +302 -0
- package/ai/dist/src/components/charts/xy/Scatterplot.js +136 -0
- package/ai/dist/src/components/charts/xy/StackedAreaChart.js +220 -0
- package/ai/dist/src/components/constants/coordinateNames.js +11 -0
- package/ai/dist/src/components/constants/frame_props.js +251 -0
- package/ai/dist/src/components/constants/jsx.js +71 -0
- package/ai/dist/src/components/data/dataFunctions.js +473 -0
- package/ai/dist/src/components/data/multiAccessorUtils.js +14 -0
- package/ai/dist/src/components/data/networkPipelineCache.js +43 -0
- package/ai/dist/src/components/data/ordinalPipelineCache.js +53 -0
- package/ai/dist/src/components/data/unflowedFunctions.js +5 -0
- package/ai/dist/src/components/data/xyPipelineCache.js +49 -0
- package/ai/dist/src/components/generic_utilities/functions.js +5 -0
- package/ai/dist/src/components/index.js +145 -0
- package/ai/dist/src/components/interactionLayerBehavior/InteractionCanvas.js +128 -0
- package/ai/dist/src/components/processing/InteractionItems.js +223 -0
- package/ai/dist/src/components/processing/hierarchyUtils.js +104 -0
- package/ai/dist/src/components/processing/layouts/chordLayout.js +58 -0
- package/ai/dist/src/components/processing/layouts/forceLayout.js +142 -0
- package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +31 -0
- package/ai/dist/src/components/processing/layouts/index.js +32 -0
- package/ai/dist/src/components/processing/layouts/sankeyLayout.js +96 -0
- package/ai/dist/src/components/processing/layouts/simpleLayouts.js +34 -0
- package/ai/dist/src/components/processing/layouts/types.js +2 -0
- package/ai/dist/src/components/processing/network.js +771 -0
- package/ai/dist/src/components/processing/networkDefaults.js +39 -0
- package/ai/dist/src/components/processing/networkLayoutHelpers.js +98 -0
- package/ai/dist/src/components/processing/ordinal.js +889 -0
- package/ai/dist/src/components/processing/ordinalConstants.js +23 -0
- package/ai/dist/src/components/processing/ordinalOverlays.js +88 -0
- package/ai/dist/src/components/processing/ordinalRenderPipeline.js +196 -0
- package/ai/dist/src/components/processing/xyDrawing.js +484 -0
- package/ai/dist/src/components/realtime/BinAccumulator.js +36 -0
- package/ai/dist/src/components/realtime/IncrementalExtent.js +55 -0
- package/ai/dist/src/components/realtime/RealtimeFrame.js +710 -0
- package/ai/dist/src/components/realtime/RingBuffer.js +104 -0
- package/ai/dist/src/components/realtime/renderers/barRenderer.js +133 -0
- package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +7 -0
- package/ai/dist/src/components/realtime/renderers/lineRenderer.js +164 -0
- package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +91 -0
- package/ai/dist/src/components/realtime/renderers/types.js +2 -0
- package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +163 -0
- package/ai/dist/src/components/realtime/types.js +2 -0
- package/ai/dist/src/components/semiotic-ai.js +66 -0
- package/ai/dist/src/components/semiotic-network.js +30 -0
- package/ai/dist/src/components/semiotic-ordinal.js +28 -0
- package/ai/dist/src/components/semiotic-realtime.js +37 -0
- package/ai/dist/src/components/semiotic-server.js +8 -0
- package/ai/dist/src/components/semiotic-xy.js +41 -0
- package/ai/dist/src/components/semiotic.js +101 -0
- package/ai/dist/src/components/server/renderToStaticSVG.js +392 -0
- package/ai/dist/src/components/store/TooltipStore.js +13 -0
- package/ai/dist/src/components/store/createStore.js +77 -0
- package/ai/dist/src/components/svg/SvgHelper.js +308 -0
- package/ai/dist/src/components/svg/areaDrawing.js +312 -0
- package/ai/dist/src/components/svg/boxplotRenderer.js +441 -0
- package/ai/dist/src/components/svg/bucketizedRenderer.js +677 -0
- package/ai/dist/src/components/svg/ckbinsRenderer.js +92 -0
- package/ai/dist/src/components/svg/ckmeans.js +238 -0
- package/ai/dist/src/components/svg/contourLayout.js +73 -0
- package/ai/dist/src/components/svg/contourRenderer.js +53 -0
- package/ai/dist/src/components/svg/edgeGenerators.js +181 -0
- package/ai/dist/src/components/svg/frameFunctions.js +579 -0
- package/ai/dist/src/components/svg/graphAlgorithms.js +138 -0
- package/ai/dist/src/components/svg/hexbinLayout.js +163 -0
- package/ai/dist/src/components/svg/lineDrawing.js +427 -0
- package/ai/dist/src/components/svg/networkDrawing.js +207 -0
- package/ai/dist/src/components/svg/nodeGenerators.js +131 -0
- package/ai/dist/src/components/svg/pieceDrawing.js +110 -0
- package/ai/dist/src/components/svg/pieceLayouts.js +588 -0
- package/ai/dist/src/components/svg/sankeyLinks.js +143 -0
- package/ai/dist/src/components/svg/summaryAxis.js +48 -0
- package/ai/dist/src/components/svg/summaryLayouts.js +202 -0
- package/ai/dist/src/components/svg/swarmLayout.js +128 -0
- package/ai/dist/src/components/types/annotationTypes.js +2 -0
- package/ai/dist/src/components/types/canvasTypes.js +2 -0
- package/ai/dist/src/components/types/generalTypes.js +2 -0
- package/ai/dist/src/components/types/interactionTypes.js +2 -0
- package/ai/dist/src/components/types/legendTypes.js +2 -0
- package/ai/dist/src/components/types/networkTypes.js +2 -0
- package/ai/dist/src/components/types/ordinalTypes.js +2 -0
- package/ai/dist/src/components/types/xyTypes.js +2 -0
- package/ai/dist/src/components/useBoundingRect.js +24 -0
- package/ai/dist/src/components/useDerivedStateFromProps.js +25 -0
- package/ai/dist/src/components/useLegacyUnmountCallback.js +21 -0
- package/ai/dist/src/components/visualizationLayerBehavior/axis.js +249 -0
- package/ai/dist/src/components/visualizationLayerBehavior/general.js +435 -0
- package/ai/dist/src/setupTests.js +4 -0
- package/ai/examples.md +394 -0
- package/ai/schema.json +1178 -0
- package/ai/system-prompt.md +38 -0
- package/dist/Annotation.d.ts +3 -0
- package/dist/AnnotationLayer/AnnotationLayer.d.ts +25 -0
- package/dist/Axis/Axis.d.ts +7 -0
- package/dist/Axis/axisTitle.d.ts +10 -0
- package/dist/Axis/index.d.ts +2 -0
- package/dist/Axis/summaryGraphic.d.ts +17 -0
- package/dist/Brush.d.ts +12 -0
- package/dist/DividedLine.d.ts +16 -0
- package/dist/FacetController.d.ts +12 -0
- package/dist/Frame.d.ts +2 -0
- package/dist/InteractionLayer.d.ts +3 -0
- package/dist/Legend.d.ts +3 -0
- package/dist/MiniMap.d.ts +14 -0
- package/dist/MinimapXYFrame.d.ts +10 -0
- package/dist/NetworkFrame.d.ts +8 -0
- package/dist/OrdinalFrame.d.ts +8 -0
- package/dist/ResponsiveFrame.d.ts +22 -0
- package/dist/ResponsiveMinimapXYFrame.d.ts +3 -0
- package/dist/ResponsiveNetworkFrame.d.ts +3 -0
- package/dist/ResponsiveOrdinalFrame.d.ts +3 -0
- package/dist/ResponsiveXYFrame.d.ts +3 -0
- package/dist/SparkFrame.d.ts +14 -0
- package/dist/SparkNetworkFrame.d.ts +5 -0
- package/dist/SparkOrdinalFrame.d.ts +5 -0
- package/dist/SparkXYFrame.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts +141 -0
- package/dist/TooltipPositioner/index.d.ts +7 -0
- package/dist/VisualizationLayer.d.ts +33 -0
- package/dist/XYFrame.d.ts +8 -0
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +19 -0
- package/dist/annotationLayerBehavior/d3labeler.d.ts +9 -0
- package/dist/annotationRules/baseRules.d.ts +25 -0
- package/dist/annotationRules/networkframeRules.d.ts +48 -0
- package/dist/annotationRules/orframeRules.d.ts +103 -0
- package/dist/annotationRules/xyframeRules.d.ts +117 -0
- package/dist/batchWork.d.ts +6 -0
- package/dist/charts/index.d.ts +62 -0
- package/dist/charts/network/ChordDiagram.d.ts +181 -0
- package/dist/charts/network/CirclePack.d.ts +103 -0
- package/dist/charts/network/ForceDirectedGraph.d.ts +192 -0
- package/dist/charts/network/SankeyDiagram.d.ts +195 -0
- package/dist/charts/network/TreeDiagram.d.ts +200 -0
- package/dist/charts/network/Treemap.d.ts +98 -0
- package/dist/charts/ordinal/BarChart.d.ts +119 -0
- package/dist/charts/ordinal/BoxPlot.d.ts +125 -0
- package/dist/charts/ordinal/DonutChart.d.ts +95 -0
- package/dist/charts/ordinal/DotPlot.d.ts +128 -0
- package/dist/charts/ordinal/GroupedBarChart.d.ts +113 -0
- package/dist/charts/ordinal/PieChart.d.ts +83 -0
- package/dist/charts/ordinal/StackedBarChart.d.ts +119 -0
- package/dist/charts/ordinal/SwarmPlot.d.ts +137 -0
- package/dist/charts/realtime/RealtimeBarChart.d.ts +102 -0
- package/dist/charts/realtime/RealtimeLineChart.d.ts +78 -0
- package/dist/charts/realtime/RealtimeSwarmChart.d.ts +88 -0
- package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +85 -0
- package/dist/charts/shared/ChartError.d.ts +19 -0
- package/dist/charts/shared/colorUtils.d.ts +62 -0
- package/dist/charts/shared/formatUtils.d.ts +82 -0
- package/dist/charts/shared/hooks.d.ts +20 -0
- package/dist/charts/shared/legendUtils.d.ts +32 -0
- package/dist/charts/shared/types.d.ts +58 -0
- package/dist/charts/shared/validateChartData.d.ts +41 -0
- package/dist/charts/shared/validateProps.d.ts +18 -0
- package/dist/charts/xy/AreaChart.d.ts +127 -0
- package/dist/charts/xy/BubbleChart.d.ts +157 -0
- package/dist/charts/xy/Heatmap.d.ts +153 -0
- package/dist/charts/xy/LineChart.d.ts +193 -0
- package/dist/charts/xy/Scatterplot.d.ts +50 -0
- package/dist/charts/xy/StackedAreaChart.d.ts +131 -0
- package/dist/constants/coordinateNames.d.ts +8 -0
- package/dist/constants/frame_props.d.ts +13 -0
- package/dist/constants/jsx.d.ts +19 -0
- package/dist/data/dataFunctions.d.ts +45 -0
- package/dist/data/multiAccessorUtils.d.ts +1 -0
- package/dist/data/networkPipelineCache.d.ts +27 -0
- package/dist/data/ordinalPipelineCache.d.ts +33 -0
- package/dist/data/unflowedFunctions.d.ts +1 -0
- package/dist/data/xyPipelineCache.d.ts +35 -0
- package/dist/generic_utilities/functions.d.ts +1 -0
- package/dist/index.d.ts +133 -0
- package/dist/interactionLayerBehavior/InteractionCanvas.d.ts +20 -0
- package/dist/network.js +8520 -0
- package/dist/network.js.map +1 -0
- package/dist/network.min.js +1 -0
- package/dist/network.module.js +8484 -0
- package/dist/network.module.js.map +1 -0
- package/dist/network.module.min.js +1 -0
- package/dist/ordinal.js +9276 -0
- package/dist/ordinal.js.map +1 -0
- package/dist/ordinal.min.js +1 -0
- package/dist/ordinal.module.js +9242 -0
- package/dist/ordinal.module.js.map +1 -0
- package/dist/ordinal.module.min.js +1 -0
- package/dist/processing/InteractionItems.d.ts +13 -0
- package/dist/processing/hierarchyUtils.d.ts +16 -0
- package/dist/processing/layouts/chordLayout.d.ts +2 -0
- package/dist/processing/layouts/forceLayout.d.ts +3 -0
- package/dist/processing/layouts/hierarchyLayout.d.ts +10 -0
- package/dist/processing/layouts/index.d.ts +8 -0
- package/dist/processing/layouts/sankeyLayout.d.ts +8 -0
- package/dist/processing/layouts/simpleLayouts.d.ts +7 -0
- package/dist/processing/layouts/types.d.ts +17 -0
- package/dist/processing/network.d.ts +111 -0
- package/dist/processing/networkDefaults.d.ts +36 -0
- package/dist/processing/networkLayoutHelpers.d.ts +54 -0
- package/dist/processing/ordinal.d.ts +102 -0
- package/dist/processing/ordinalConstants.d.ts +33 -0
- package/dist/processing/ordinalOverlays.d.ts +33 -0
- package/dist/processing/ordinalRenderPipeline.d.ts +148 -0
- package/dist/processing/xyDrawing.d.ts +140 -0
- package/dist/realtime/BinAccumulator.d.ts +8 -0
- package/dist/realtime/IncrementalExtent.d.ts +13 -0
- package/dist/realtime/RealtimeFrame.d.ts +4 -0
- package/dist/realtime/RingBuffer.d.ts +19 -0
- package/dist/realtime/renderers/barRenderer.d.ts +2 -0
- package/dist/realtime/renderers/candlestickRenderer.d.ts +2 -0
- package/dist/realtime/renderers/lineRenderer.d.ts +2 -0
- package/dist/realtime/renderers/swarmRenderer.d.ts +2 -0
- package/dist/realtime/renderers/types.d.ts +9 -0
- package/dist/realtime/renderers/waterfallRenderer.d.ts +3 -0
- package/dist/realtime/types.d.ts +113 -0
- package/dist/realtime.js +1598 -0
- package/dist/realtime.js.map +1 -0
- package/dist/realtime.min.js +1 -0
- package/dist/realtime.module.js +1566 -0
- package/dist/realtime.module.js.map +1 -0
- package/dist/realtime.module.min.js +1 -0
- package/dist/semiotic-ai.d.ts +28 -0
- package/dist/semiotic-ai.js +18722 -0
- package/dist/semiotic-ai.js.map +1 -0
- package/dist/semiotic-ai.min.js +1 -0
- package/dist/semiotic-ai.module.js +18668 -0
- package/dist/semiotic-ai.module.js.map +1 -0
- package/dist/semiotic-ai.module.min.js +1 -0
- package/dist/semiotic-network.d.ts +19 -0
- package/dist/semiotic-ordinal.d.ts +18 -0
- package/dist/semiotic-realtime.d.ts +23 -0
- package/dist/semiotic-server.d.ts +1 -0
- package/dist/semiotic-xy.d.ts +24 -0
- package/dist/semiotic.d.ts +51 -0
- package/dist/semiotic.js +18723 -12996
- package/dist/semiotic.js.map +1 -0
- package/dist/semiotic.min.js +1 -0
- package/dist/semiotic.module.js +18666 -12965
- package/dist/semiotic.module.js.map +1 -0
- package/dist/semiotic.module.min.js +1 -0
- package/dist/server/renderToStaticSVG.d.ts +9 -0
- package/dist/server.js +8360 -0
- package/dist/server.js.map +1 -0
- package/dist/server.min.js +1 -0
- package/dist/server.module.js +8331 -0
- package/dist/server.module.js.map +1 -0
- package/dist/server.module.min.js +1 -0
- package/dist/store/TooltipStore.d.ts +2 -0
- package/dist/store/createStore.d.ts +1 -0
- package/dist/svg/SvgHelper.d.ts +33 -0
- package/dist/svg/areaDrawing.d.ts +21 -0
- package/dist/svg/boxplotRenderer.d.ts +15 -0
- package/dist/svg/bucketizedRenderer.d.ts +16 -0
- package/dist/svg/ckbinsRenderer.d.ts +20 -0
- package/dist/svg/ckmeans.d.ts +69 -0
- package/dist/svg/contourLayout.d.ts +6 -0
- package/dist/svg/contourRenderer.d.ts +12 -0
- package/dist/svg/edgeGenerators.d.ts +51 -0
- package/dist/svg/frameFunctions.d.ts +108 -0
- package/dist/svg/graphAlgorithms.d.ts +14 -0
- package/dist/svg/hexbinLayout.d.ts +7 -0
- package/dist/svg/lineDrawing.d.ts +99 -0
- package/dist/svg/networkDrawing.d.ts +16 -0
- package/dist/svg/nodeGenerators.d.ts +58 -0
- package/dist/svg/pieceDrawing.d.ts +12 -0
- package/dist/svg/pieceLayouts.d.ts +53 -0
- package/dist/svg/sankeyLinks.d.ts +3 -0
- package/dist/svg/summaryAxis.d.ts +6 -0
- package/dist/svg/summaryLayouts.d.ts +53 -0
- package/dist/svg/swarmLayout.d.ts +13 -0
- package/dist/types/annotationTypes.d.ts +135 -0
- package/dist/types/canvasTypes.d.ts +9 -0
- package/dist/types/generalTypes.d.ts +238 -0
- package/dist/types/interactionTypes.d.ts +72 -0
- package/dist/types/legendTypes.d.ts +20 -0
- package/dist/types/networkTypes.d.ts +175 -0
- package/dist/types/ordinalTypes.d.ts +112 -0
- package/dist/types/xyTypes.d.ts +115 -0
- package/dist/useBoundingRect.d.ts +2 -0
- package/dist/useDerivedStateFromProps.d.ts +1 -0
- package/dist/useLegacyUnmountCallback.d.ts +2 -0
- package/dist/visualizationLayerBehavior/axis.d.ts +36 -0
- package/dist/visualizationLayerBehavior/general.d.ts +80 -0
- package/dist/xy.js +7944 -0
- package/dist/xy.js.map +1 -0
- package/dist/xy.min.js +1 -0
- package/dist/xy.module.js +7903 -0
- package/dist/xy.module.js.map +1 -0
- package/dist/xy.module.min.js +1 -0
- package/package.json +116 -65
|
@@ -0,0 +1,220 @@
|
|
|
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.AreaChart = AreaChart;
|
|
41
|
+
const React = __importStar(require("react"));
|
|
42
|
+
const react_1 = require("react");
|
|
43
|
+
const d3_shape_1 = require("d3-shape");
|
|
44
|
+
const XYFrame_1 = __importDefault(require("../../XYFrame"));
|
|
45
|
+
const colorUtils_1 = require("../shared/colorUtils");
|
|
46
|
+
const hooks_1 = require("../shared/hooks");
|
|
47
|
+
const legendUtils_1 = require("../shared/legendUtils");
|
|
48
|
+
const Tooltip_1 = require("../../Tooltip/Tooltip");
|
|
49
|
+
const ChartError_1 = __importDefault(require("../shared/ChartError"));
|
|
50
|
+
const validateChartData_1 = require("../shared/validateChartData");
|
|
51
|
+
/** Map of curve name strings to d3-shape curve functions */
|
|
52
|
+
const CURVE_MAP = {
|
|
53
|
+
linear: d3_shape_1.curveLinear,
|
|
54
|
+
monotoneX: d3_shape_1.curveMonotoneX,
|
|
55
|
+
monotoneY: d3_shape_1.curveMonotoneY,
|
|
56
|
+
step: d3_shape_1.curveStep,
|
|
57
|
+
stepAfter: d3_shape_1.curveStepAfter,
|
|
58
|
+
stepBefore: d3_shape_1.curveStepBefore,
|
|
59
|
+
basis: d3_shape_1.curveBasis,
|
|
60
|
+
cardinal: d3_shape_1.curveCardinal,
|
|
61
|
+
catmullRom: d3_shape_1.curveCatmullRom
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* AreaChart - Visualize quantities over continuous intervals with overlapping filled areas
|
|
65
|
+
*
|
|
66
|
+
* Each series fills from its line down to the baseline. Multiple series overlap
|
|
67
|
+
* with transparency so all shapes remain visible.
|
|
68
|
+
*
|
|
69
|
+
* For stacked areas use {@link StackedAreaChart}.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```tsx
|
|
73
|
+
* <AreaChart
|
|
74
|
+
* data={[
|
|
75
|
+
* {x: 1, y: 10, category: 'A'},
|
|
76
|
+
* {x: 2, y: 20, category: 'A'},
|
|
77
|
+
* {x: 1, y: 15, category: 'B'},
|
|
78
|
+
* {x: 2, y: 25, category: 'B'}
|
|
79
|
+
* ]}
|
|
80
|
+
* areaBy="category"
|
|
81
|
+
* colorBy="category"
|
|
82
|
+
* xLabel="Time"
|
|
83
|
+
* yLabel="Value"
|
|
84
|
+
* />
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
function AreaChart(props) {
|
|
88
|
+
const { data, width = 600, height = 400, margin: userMargin, className, title, xLabel, yLabel, xFormat, yFormat, xAccessor = "x", yAccessor = "y", areaBy, lineDataAccessor = "coordinates", colorBy, colorScheme = "category10", curve = "monotoneX", areaOpacity = 0.7, showLine = true, lineWidth = 2, enableHover = true, showGrid = false, showLegend, tooltip, frameProps = {} } = props;
|
|
89
|
+
const safeData = data || [];
|
|
90
|
+
// Check if data is in area objects format (has lineDataAccessor field)
|
|
91
|
+
const isAreaObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined;
|
|
92
|
+
// Transform data to line/area format if needed
|
|
93
|
+
const areaData = (0, react_1.useMemo)(() => {
|
|
94
|
+
if (isAreaObjectFormat) {
|
|
95
|
+
// Data is already in area objects format
|
|
96
|
+
return safeData;
|
|
97
|
+
}
|
|
98
|
+
if (areaBy) {
|
|
99
|
+
// Group data by areaBy field
|
|
100
|
+
const grouped = safeData.reduce((acc, d) => {
|
|
101
|
+
const key = typeof areaBy === "function" ? areaBy(d) : d[areaBy];
|
|
102
|
+
if (!acc[key]) {
|
|
103
|
+
const areaObj = { [lineDataAccessor]: [] };
|
|
104
|
+
// Add the grouping field
|
|
105
|
+
if (typeof areaBy === "string") {
|
|
106
|
+
areaObj[areaBy] = key;
|
|
107
|
+
}
|
|
108
|
+
acc[key] = areaObj;
|
|
109
|
+
}
|
|
110
|
+
acc[key][lineDataAccessor].push(d);
|
|
111
|
+
return acc;
|
|
112
|
+
}, {});
|
|
113
|
+
return Object.values(grouped);
|
|
114
|
+
}
|
|
115
|
+
// Single area - wrap in area object
|
|
116
|
+
return [{ [lineDataAccessor]: safeData }];
|
|
117
|
+
}, [safeData, areaBy, lineDataAccessor, isAreaObjectFormat]);
|
|
118
|
+
// Create color scale if colorBy is specified
|
|
119
|
+
const colorScale = (0, hooks_1.useColorScale)(safeData, colorBy, colorScheme);
|
|
120
|
+
// Curve function from module-level map
|
|
121
|
+
const curveFunction = CURVE_MAP[curve] || d3_shape_1.curveMonotoneX;
|
|
122
|
+
// Area/line style function
|
|
123
|
+
const lineStyle = (0, react_1.useMemo)(() => {
|
|
124
|
+
return (d) => {
|
|
125
|
+
const baseStyle = {};
|
|
126
|
+
// Apply color
|
|
127
|
+
const color = colorBy ? (0, colorUtils_1.getColor)(d, colorBy, colorScale) : hooks_1.DEFAULT_COLOR;
|
|
128
|
+
baseStyle.fill = color;
|
|
129
|
+
baseStyle.fillOpacity = areaOpacity;
|
|
130
|
+
if (showLine) {
|
|
131
|
+
baseStyle.stroke = color;
|
|
132
|
+
baseStyle.strokeWidth = lineWidth;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
baseStyle.stroke = "none";
|
|
136
|
+
}
|
|
137
|
+
return baseStyle;
|
|
138
|
+
};
|
|
139
|
+
}, [colorBy, colorScale, areaOpacity, showLine, lineWidth]);
|
|
140
|
+
// Build axes configuration
|
|
141
|
+
const axes = (0, react_1.useMemo)(() => {
|
|
142
|
+
const axesConfig = [];
|
|
143
|
+
// Y axis (left)
|
|
144
|
+
axesConfig.push({
|
|
145
|
+
orient: "left",
|
|
146
|
+
label: yLabel,
|
|
147
|
+
tickFormat: yFormat,
|
|
148
|
+
...(showGrid && { tickLineGenerator: () => null })
|
|
149
|
+
});
|
|
150
|
+
// X axis (bottom)
|
|
151
|
+
axesConfig.push({
|
|
152
|
+
orient: "bottom",
|
|
153
|
+
label: xLabel,
|
|
154
|
+
tickFormat: xFormat,
|
|
155
|
+
...(showGrid && { tickLineGenerator: () => null })
|
|
156
|
+
});
|
|
157
|
+
return axesConfig;
|
|
158
|
+
}, [xLabel, yLabel, xFormat, yFormat, showGrid]);
|
|
159
|
+
// Determine line type — always overlapping areas
|
|
160
|
+
const lineType = (0, react_1.useMemo)(() => ({
|
|
161
|
+
type: "area",
|
|
162
|
+
interpolator: curveFunction
|
|
163
|
+
}), [curveFunction]);
|
|
164
|
+
// Determine if we should show legend
|
|
165
|
+
const shouldShowLegend = showLegend !== undefined ? showLegend : areaData.length > 1;
|
|
166
|
+
// Build legend if needed
|
|
167
|
+
const legend = (0, react_1.useMemo)(() => {
|
|
168
|
+
if (!shouldShowLegend || !colorBy)
|
|
169
|
+
return undefined;
|
|
170
|
+
return (0, legendUtils_1.createLegend)({
|
|
171
|
+
data: areaData,
|
|
172
|
+
colorBy,
|
|
173
|
+
colorScale,
|
|
174
|
+
getColor: colorUtils_1.getColor
|
|
175
|
+
});
|
|
176
|
+
}, [shouldShowLegend, colorBy, areaData, colorScale]);
|
|
177
|
+
// Adjust margin for legend if present
|
|
178
|
+
const margin = (0, react_1.useMemo)(() => {
|
|
179
|
+
const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
|
|
180
|
+
const finalMargin = { ...defaultMargin, ...userMargin };
|
|
181
|
+
// If legend is present and right margin is too small, increase it
|
|
182
|
+
if (legend && finalMargin.right < 120) {
|
|
183
|
+
finalMargin.right = 120;
|
|
184
|
+
}
|
|
185
|
+
return finalMargin;
|
|
186
|
+
}, [userMargin, legend]);
|
|
187
|
+
// Validate data (after all hooks)
|
|
188
|
+
const error = (0, validateChartData_1.validateArrayData)({
|
|
189
|
+
componentName: "AreaChart",
|
|
190
|
+
data: safeData,
|
|
191
|
+
accessors: {
|
|
192
|
+
xAccessor,
|
|
193
|
+
yAccessor,
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
if (error)
|
|
197
|
+
return React.createElement(ChartError_1.default, { componentName: "AreaChart", message: error, width: width, height: height });
|
|
198
|
+
// Build XYFrame props
|
|
199
|
+
const xyFrameProps = {
|
|
200
|
+
size: [width, height],
|
|
201
|
+
lines: areaData,
|
|
202
|
+
xAccessor,
|
|
203
|
+
yAccessor,
|
|
204
|
+
lineDataAccessor,
|
|
205
|
+
lineType,
|
|
206
|
+
lineStyle,
|
|
207
|
+
axes: axes,
|
|
208
|
+
hoverAnnotation: enableHover,
|
|
209
|
+
margin,
|
|
210
|
+
...(legend && { legend }),
|
|
211
|
+
...(className && { className }),
|
|
212
|
+
...(title && { title }),
|
|
213
|
+
// Add tooltip support
|
|
214
|
+
...(tooltip && { tooltipContent: (0, Tooltip_1.normalizeTooltip)(tooltip) }),
|
|
215
|
+
// Allow frameProps to override defaults
|
|
216
|
+
transition: true,
|
|
217
|
+
...frameProps
|
|
218
|
+
};
|
|
219
|
+
return React.createElement(XYFrame_1.default, { ...xyFrameProps });
|
|
220
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
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.BubbleChart = BubbleChart;
|
|
41
|
+
const React = __importStar(require("react"));
|
|
42
|
+
const react_1 = require("react");
|
|
43
|
+
const XYFrame_1 = __importDefault(require("../../XYFrame"));
|
|
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 ChartError_1 = __importDefault(require("../shared/ChartError"));
|
|
49
|
+
const validateChartData_1 = require("../shared/validateChartData");
|
|
50
|
+
/**
|
|
51
|
+
* BubbleChart - Visualize three dimensions of data using x, y, and size
|
|
52
|
+
*
|
|
53
|
+
* A simplified wrapper around XYFrame for creating bubble charts. Perfect for
|
|
54
|
+
* showing relationships between three continuous variables or comparing
|
|
55
|
+
* magnitudes across categories.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* // Simple bubble chart
|
|
60
|
+
* <BubbleChart
|
|
61
|
+
* data={[
|
|
62
|
+
* {x: 1, y: 10, size: 50, name: 'A'},
|
|
63
|
+
* {x: 2, y: 20, size: 30, name: 'B'},
|
|
64
|
+
* {x: 3, y: 15, size: 70, name: 'C'}
|
|
65
|
+
* ]}
|
|
66
|
+
* sizeBy="size"
|
|
67
|
+
* xLabel="Time"
|
|
68
|
+
* yLabel="Value"
|
|
69
|
+
* />
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```tsx
|
|
74
|
+
* // With color encoding
|
|
75
|
+
* <BubbleChart
|
|
76
|
+
* data={data}
|
|
77
|
+
* sizeBy="population"
|
|
78
|
+
* colorBy="continent"
|
|
79
|
+
* sizeRange={[5, 50]}
|
|
80
|
+
* bubbleOpacity={0.7}
|
|
81
|
+
* xLabel="GDP per Capita"
|
|
82
|
+
* yLabel="Life Expectancy"
|
|
83
|
+
* />
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```tsx
|
|
88
|
+
* // Advanced: Override XYFrame props
|
|
89
|
+
* <BubbleChart
|
|
90
|
+
* data={data}
|
|
91
|
+
* sizeBy="value"
|
|
92
|
+
* frameProps={{
|
|
93
|
+
* customPointMark: ({ d }) => <circle r={d.r} fill="gold" />
|
|
94
|
+
* }}
|
|
95
|
+
* />
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @remarks
|
|
99
|
+
* This component wraps {@link XYFrame} with sensible defaults for bubble charts.
|
|
100
|
+
* For more advanced features like custom marks, annotations, or complex interactions,
|
|
101
|
+
* use XYFrame directly.
|
|
102
|
+
*
|
|
103
|
+
* **Breadcrumb to advanced usage:**
|
|
104
|
+
* - Use the `frameProps` prop to pass any XYFrame prop
|
|
105
|
+
* - See XYFrame documentation: https://semiotic.nteract.io/guides/xy-frame
|
|
106
|
+
* - All XYFrame props are available via `frameProps`
|
|
107
|
+
*
|
|
108
|
+
* @param props - BubbleChart configuration
|
|
109
|
+
* @returns Rendered bubble chart
|
|
110
|
+
*/
|
|
111
|
+
function BubbleChart(props) {
|
|
112
|
+
const { data, width = 600, height = 400, margin: userMargin, className, title, xLabel, yLabel, xFormat, yFormat, xAccessor = "x", yAccessor = "y", sizeBy, sizeRange = [5, 40], colorBy, colorScheme = "category10", bubbleOpacity = 0.6, bubbleStrokeWidth = 1, bubbleStrokeColor = "white", enableHover = true, showGrid = false, showLegend, tooltip, frameProps = {} } = props;
|
|
113
|
+
const safeData = data || [];
|
|
114
|
+
// Create color scale if colorBy is specified
|
|
115
|
+
const colorScale = (0, hooks_1.useColorScale)(safeData, colorBy, colorScheme);
|
|
116
|
+
// Calculate size domain
|
|
117
|
+
const sizeDomain = (0, react_1.useMemo)(() => {
|
|
118
|
+
const sizes = safeData.map((d) => {
|
|
119
|
+
if (typeof sizeBy === "function") {
|
|
120
|
+
return sizeBy(d);
|
|
121
|
+
}
|
|
122
|
+
return d[sizeBy];
|
|
123
|
+
});
|
|
124
|
+
return [Math.min(...sizes), Math.max(...sizes)];
|
|
125
|
+
}, [safeData, sizeBy]);
|
|
126
|
+
// Point style function
|
|
127
|
+
const pointStyle = (0, react_1.useMemo)(() => {
|
|
128
|
+
return (d) => {
|
|
129
|
+
const baseStyle = {
|
|
130
|
+
fillOpacity: bubbleOpacity,
|
|
131
|
+
strokeWidth: bubbleStrokeWidth,
|
|
132
|
+
stroke: bubbleStrokeColor
|
|
133
|
+
};
|
|
134
|
+
// Apply color
|
|
135
|
+
if (colorBy) {
|
|
136
|
+
baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
baseStyle.fill = hooks_1.DEFAULT_COLOR;
|
|
140
|
+
}
|
|
141
|
+
// Apply size
|
|
142
|
+
baseStyle.r = (0, colorUtils_1.getSize)(d, sizeBy, sizeRange, sizeDomain);
|
|
143
|
+
return baseStyle;
|
|
144
|
+
};
|
|
145
|
+
}, [colorBy, colorScale, sizeBy, sizeRange, sizeDomain, bubbleOpacity, bubbleStrokeWidth, bubbleStrokeColor]);
|
|
146
|
+
// Build axes configuration
|
|
147
|
+
const axes = (0, react_1.useMemo)(() => {
|
|
148
|
+
const axesConfig = [];
|
|
149
|
+
// Y axis (left)
|
|
150
|
+
axesConfig.push({
|
|
151
|
+
orient: "left",
|
|
152
|
+
label: yLabel,
|
|
153
|
+
tickFormat: yFormat,
|
|
154
|
+
...(showGrid && { tickLineGenerator: () => null })
|
|
155
|
+
});
|
|
156
|
+
// X axis (bottom)
|
|
157
|
+
axesConfig.push({
|
|
158
|
+
orient: "bottom",
|
|
159
|
+
label: xLabel,
|
|
160
|
+
tickFormat: xFormat,
|
|
161
|
+
...(showGrid && { tickLineGenerator: () => null })
|
|
162
|
+
});
|
|
163
|
+
return axesConfig;
|
|
164
|
+
}, [xLabel, yLabel, xFormat, yFormat, showGrid]);
|
|
165
|
+
// Determine if we should show legend
|
|
166
|
+
const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy;
|
|
167
|
+
// Build legend if needed
|
|
168
|
+
const legend = (0, react_1.useMemo)(() => {
|
|
169
|
+
if (!shouldShowLegend || !colorBy)
|
|
170
|
+
return undefined;
|
|
171
|
+
return (0, legendUtils_1.createLegend)({
|
|
172
|
+
data: safeData,
|
|
173
|
+
colorBy,
|
|
174
|
+
colorScale,
|
|
175
|
+
getColor: colorUtils_1.getColor,
|
|
176
|
+
strokeColor: bubbleStrokeColor,
|
|
177
|
+
strokeWidth: bubbleStrokeWidth
|
|
178
|
+
});
|
|
179
|
+
}, [shouldShowLegend, colorBy, safeData, colorScale, bubbleStrokeColor, bubbleStrokeWidth]);
|
|
180
|
+
// Adjust margin for legend if present
|
|
181
|
+
const margin = (0, react_1.useMemo)(() => {
|
|
182
|
+
const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
|
|
183
|
+
const finalMargin = { ...defaultMargin, ...userMargin };
|
|
184
|
+
// If legend is present and right margin is too small, increase it
|
|
185
|
+
if (legend && finalMargin.right < 120) {
|
|
186
|
+
finalMargin.right = 120;
|
|
187
|
+
}
|
|
188
|
+
return finalMargin;
|
|
189
|
+
}, [userMargin, legend]);
|
|
190
|
+
// Validate data (after all hooks)
|
|
191
|
+
const error = (0, validateChartData_1.validateArrayData)({
|
|
192
|
+
componentName: "BubbleChart",
|
|
193
|
+
data: safeData,
|
|
194
|
+
accessors: {
|
|
195
|
+
xAccessor,
|
|
196
|
+
yAccessor,
|
|
197
|
+
},
|
|
198
|
+
requiredProps: { sizeBy },
|
|
199
|
+
});
|
|
200
|
+
if (error)
|
|
201
|
+
return React.createElement(ChartError_1.default, { componentName: "BubbleChart", message: error, width: width, height: height });
|
|
202
|
+
// Build XYFrame props
|
|
203
|
+
const xyFrameProps = {
|
|
204
|
+
size: [width, height],
|
|
205
|
+
points: safeData,
|
|
206
|
+
xAccessor,
|
|
207
|
+
yAccessor,
|
|
208
|
+
pointStyle,
|
|
209
|
+
axes: axes,
|
|
210
|
+
hoverAnnotation: enableHover,
|
|
211
|
+
margin,
|
|
212
|
+
...(legend && { legend }),
|
|
213
|
+
...(className && { className }),
|
|
214
|
+
...(title && { title }),
|
|
215
|
+
// Add tooltip support
|
|
216
|
+
...(tooltip && { tooltipContent: (0, Tooltip_1.normalizeTooltip)(tooltip) }),
|
|
217
|
+
// Allow frameProps to override defaults
|
|
218
|
+
transition: true,
|
|
219
|
+
...frameProps
|
|
220
|
+
};
|
|
221
|
+
return React.createElement(XYFrame_1.default, { ...xyFrameProps });
|
|
222
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
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 XYFrame_1 = __importDefault(require("../../XYFrame"));
|
|
46
|
+
const hooks_1 = require("../shared/hooks");
|
|
47
|
+
const Tooltip_1 = require("../../Tooltip/Tooltip");
|
|
48
|
+
const ChartError_1 = __importDefault(require("../shared/ChartError"));
|
|
49
|
+
const validateChartData_1 = require("../shared/validateChartData");
|
|
50
|
+
/**
|
|
51
|
+
* Heatmap - Visualize matrix data with color-encoded cells
|
|
52
|
+
*
|
|
53
|
+
* A simplified wrapper around XYFrame for creating heatmaps. Perfect for
|
|
54
|
+
* showing patterns, correlations, and distributions in 2D data.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* // Simple heatmap
|
|
59
|
+
* <Heatmap
|
|
60
|
+
* data={[
|
|
61
|
+
* {x: 1, y: 1, value: 10},
|
|
62
|
+
* {x: 1, y: 2, value: 20},
|
|
63
|
+
* {x: 2, y: 1, value: 15},
|
|
64
|
+
* {x: 2, y: 2, value: 25}
|
|
65
|
+
* ]}
|
|
66
|
+
* xLabel="Time"
|
|
67
|
+
* yLabel="Category"
|
|
68
|
+
* />
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```tsx
|
|
73
|
+
* // With custom color scheme and value labels
|
|
74
|
+
* <Heatmap
|
|
75
|
+
* data={data}
|
|
76
|
+
* colorScheme="viridis"
|
|
77
|
+
* showValues={true}
|
|
78
|
+
* valueFormat={d => d.toFixed(1)}
|
|
79
|
+
* />
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```tsx
|
|
84
|
+
* // Advanced: Custom color scale
|
|
85
|
+
* <Heatmap
|
|
86
|
+
* data={data}
|
|
87
|
+
* colorScheme="custom"
|
|
88
|
+
* customColorScale={
|
|
89
|
+
* scaleSequential(interpolatePlasma).domain([0, 100])
|
|
90
|
+
* }
|
|
91
|
+
* />
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* @remarks
|
|
95
|
+
* This component wraps {@link XYFrame} with sensible defaults for heatmaps.
|
|
96
|
+
* For more advanced features like hexbins, contours, or custom summaries,
|
|
97
|
+
* use XYFrame directly.
|
|
98
|
+
*
|
|
99
|
+
* **Breadcrumb to advanced usage:**
|
|
100
|
+
* - Use the `frameProps` prop to pass any XYFrame prop
|
|
101
|
+
* - See XYFrame documentation: https://semiotic.nteract.io/guides/xy-frame
|
|
102
|
+
* - All XYFrame props are available via `frameProps`
|
|
103
|
+
*
|
|
104
|
+
* @param props - Heatmap configuration
|
|
105
|
+
* @returns Rendered heatmap
|
|
106
|
+
*/
|
|
107
|
+
function Heatmap(props) {
|
|
108
|
+
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 = {} } = props;
|
|
109
|
+
const safeData = data || [];
|
|
110
|
+
// Get value accessor function
|
|
111
|
+
const getValueFn = (0, react_1.useMemo)(() => {
|
|
112
|
+
return typeof valueAccessor === "function"
|
|
113
|
+
? (d) => valueAccessor(d)
|
|
114
|
+
: (d) => d[valueAccessor];
|
|
115
|
+
}, [valueAccessor]);
|
|
116
|
+
// Calculate value domain
|
|
117
|
+
const valueDomain = (0, react_1.useMemo)(() => {
|
|
118
|
+
const values = safeData.map(getValueFn);
|
|
119
|
+
return [Math.min(...values), Math.max(...values)];
|
|
120
|
+
}, [safeData, getValueFn]);
|
|
121
|
+
// Create color scale
|
|
122
|
+
const colorScale = (0, react_1.useMemo)(() => {
|
|
123
|
+
if (colorScheme === "custom" && customColorScale) {
|
|
124
|
+
return customColorScale;
|
|
125
|
+
}
|
|
126
|
+
const interpolators = {
|
|
127
|
+
blues: d3_scale_chromatic_1.interpolateBlues,
|
|
128
|
+
reds: d3_scale_chromatic_1.interpolateReds,
|
|
129
|
+
greens: d3_scale_chromatic_1.interpolateGreens,
|
|
130
|
+
viridis: d3_scale_chromatic_1.interpolateViridis
|
|
131
|
+
};
|
|
132
|
+
const interpolator = interpolators[colorScheme] || d3_scale_chromatic_1.interpolateBlues;
|
|
133
|
+
return (0, d3_scale_1.scaleSequential)(interpolator).domain(valueDomain);
|
|
134
|
+
}, [colorScheme, customColorScale, valueDomain]);
|
|
135
|
+
// Get unique x and y values for bin sizing
|
|
136
|
+
const { xBinCount, yBinCount } = (0, react_1.useMemo)(() => {
|
|
137
|
+
const getX = (0, hooks_1.resolveAccessor)(xAccessor);
|
|
138
|
+
const getY = (0, hooks_1.resolveAccessor)(yAccessor);
|
|
139
|
+
return {
|
|
140
|
+
xBinCount: new Set(safeData.map(getX)).size,
|
|
141
|
+
yBinCount: new Set(safeData.map(getY)).size
|
|
142
|
+
};
|
|
143
|
+
}, [safeData, xAccessor, yAccessor]);
|
|
144
|
+
// Transform data to summary format for XYFrame
|
|
145
|
+
const summaryData = (0, react_1.useMemo)(() => {
|
|
146
|
+
return { coordinates: safeData };
|
|
147
|
+
}, [safeData]);
|
|
148
|
+
// Summary style function
|
|
149
|
+
const summaryStyle = (0, react_1.useMemo)(() => {
|
|
150
|
+
return (d) => {
|
|
151
|
+
const value = getValueFn(d);
|
|
152
|
+
return {
|
|
153
|
+
fill: colorScale(value),
|
|
154
|
+
stroke: cellBorderColor,
|
|
155
|
+
strokeWidth: cellBorderWidth
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
}, [getValueFn, colorScale, cellBorderColor, cellBorderWidth]);
|
|
159
|
+
// Summary render function (for value labels)
|
|
160
|
+
const summaryRenderMode = (0, react_1.useMemo)(() => {
|
|
161
|
+
if (!showValues)
|
|
162
|
+
return undefined;
|
|
163
|
+
const midpoint = (valueDomain[0] + valueDomain[1]) / 2;
|
|
164
|
+
return (d, i) => {
|
|
165
|
+
const value = getValueFn(d);
|
|
166
|
+
const displayValue = valueFormat ? valueFormat(value) : String(value);
|
|
167
|
+
return (React.createElement("text", { textAnchor: "middle", dominantBaseline: "middle", fill: getValueFn(d) > midpoint ? "#fff" : "#000", fontSize: "12px" }, displayValue));
|
|
168
|
+
};
|
|
169
|
+
}, [showValues, getValueFn, valueFormat, valueDomain]);
|
|
170
|
+
// Build axes configuration
|
|
171
|
+
const axes = (0, react_1.useMemo)(() => {
|
|
172
|
+
const axesConfig = [];
|
|
173
|
+
// Y axis (left)
|
|
174
|
+
axesConfig.push({
|
|
175
|
+
orient: "left",
|
|
176
|
+
label: yLabel,
|
|
177
|
+
tickFormat: yFormat
|
|
178
|
+
});
|
|
179
|
+
// X axis (bottom)
|
|
180
|
+
axesConfig.push({
|
|
181
|
+
orient: "bottom",
|
|
182
|
+
label: xLabel,
|
|
183
|
+
tickFormat: xFormat
|
|
184
|
+
});
|
|
185
|
+
return axesConfig;
|
|
186
|
+
}, [xLabel, yLabel, xFormat, yFormat]);
|
|
187
|
+
// Validate data (after all hooks)
|
|
188
|
+
const error = (0, validateChartData_1.validateArrayData)({
|
|
189
|
+
componentName: "Heatmap",
|
|
190
|
+
data: safeData,
|
|
191
|
+
accessors: {
|
|
192
|
+
xAccessor,
|
|
193
|
+
yAccessor,
|
|
194
|
+
valueAccessor,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
if (error)
|
|
198
|
+
return React.createElement(ChartError_1.default, { componentName: "Heatmap", message: error, width: width, height: height });
|
|
199
|
+
// Build XYFrame props
|
|
200
|
+
const xyFrameProps = {
|
|
201
|
+
size: [width, height],
|
|
202
|
+
summaries: summaryData,
|
|
203
|
+
xAccessor,
|
|
204
|
+
yAccessor,
|
|
205
|
+
summaryType: {
|
|
206
|
+
type: "heatmap",
|
|
207
|
+
xBins: xBinCount,
|
|
208
|
+
yBins: yBinCount,
|
|
209
|
+
binValue: (items) => {
|
|
210
|
+
if (items.length === 0)
|
|
211
|
+
return 0;
|
|
212
|
+
const sum = items.reduce((acc, item) => acc + getValueFn(item), 0);
|
|
213
|
+
return sum / items.length;
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
summaryStyle,
|
|
217
|
+
axes: axes,
|
|
218
|
+
hoverAnnotation: enableHover,
|
|
219
|
+
margin,
|
|
220
|
+
...(summaryRenderMode && { summaryRenderMode }),
|
|
221
|
+
...(className && { className }),
|
|
222
|
+
...(title && { title }),
|
|
223
|
+
// Add tooltip support
|
|
224
|
+
...(tooltip && { tooltipContent: (0, Tooltip_1.normalizeTooltip)(tooltip) }),
|
|
225
|
+
// Allow frameProps to override defaults
|
|
226
|
+
transition: true,
|
|
227
|
+
...frameProps
|
|
228
|
+
};
|
|
229
|
+
return React.createElement(XYFrame_1.default, { ...xyFrameProps });
|
|
230
|
+
}
|