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,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.RealtimeLineChart = void 0;
|
|
40
|
+
const React = __importStar(require("react"));
|
|
41
|
+
const react_1 = require("react");
|
|
42
|
+
const RealtimeFrame_1 = __importDefault(require("../../realtime/RealtimeFrame"));
|
|
43
|
+
/**
|
|
44
|
+
* RealtimeLineChart - Simplified wrapper for streaming line charts.
|
|
45
|
+
*
|
|
46
|
+
* Wraps RealtimeFrame with `chartType="line"` and exposes stroke/strokeWidth
|
|
47
|
+
* as top-level props instead of requiring a `lineStyle` object.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const ref = useRef<RealtimeFrameHandle>(null)
|
|
52
|
+
*
|
|
53
|
+
* <RealtimeLineChart
|
|
54
|
+
* ref={ref}
|
|
55
|
+
* stroke="#007bff"
|
|
56
|
+
* strokeWidth={2}
|
|
57
|
+
* windowSize={200}
|
|
58
|
+
* enableHover
|
|
59
|
+
* />
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
exports.RealtimeLineChart = (0, react_1.forwardRef)(function RealtimeLineChart(props, ref) {
|
|
63
|
+
const { size = [500, 300], margin, className, arrowOfTime = "right", windowMode = "sliding", windowSize = 200, data, timeAccessor, valueAccessor, timeExtent, valueExtent, extentPadding, stroke = "#007bff", strokeWidth = 2, strokeDasharray, showAxes = true, background, enableHover, tooltipContent, onHover, annotations, svgAnnotationRules, tickFormatTime, tickFormatValue } = props;
|
|
64
|
+
const frameRef = (0, react_1.useRef)(null);
|
|
65
|
+
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
66
|
+
push: (point) => frameRef.current?.push(point),
|
|
67
|
+
pushMany: (points) => frameRef.current?.pushMany(points),
|
|
68
|
+
clear: () => frameRef.current?.clear(),
|
|
69
|
+
getData: () => frameRef.current?.getData() ?? []
|
|
70
|
+
}));
|
|
71
|
+
const lineStyle = { stroke, strokeWidth, strokeDasharray };
|
|
72
|
+
return (React.createElement(RealtimeFrame_1.default, { ref: frameRef, chartType: "line", size: size, margin: margin, className: className, arrowOfTime: arrowOfTime, windowMode: windowMode, windowSize: windowSize, data: data, timeAccessor: timeAccessor, valueAccessor: valueAccessor, timeExtent: timeExtent, valueExtent: valueExtent, extentPadding: extentPadding, lineStyle: lineStyle, showAxes: showAxes, background: background, hoverAnnotation: enableHover, tooltipContent: tooltipContent, customHoverBehavior: onHover, annotations: annotations, svgAnnotationRules: svgAnnotationRules, tickFormatTime: tickFormatTime, tickFormatValue: tickFormatValue }));
|
|
73
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.RealtimeSwarmChart = void 0;
|
|
40
|
+
const React = __importStar(require("react"));
|
|
41
|
+
const react_1 = require("react");
|
|
42
|
+
const RealtimeFrame_1 = __importDefault(require("../../realtime/RealtimeFrame"));
|
|
43
|
+
/**
|
|
44
|
+
* RealtimeSwarmChart - Simplified wrapper for streaming dot/swarm charts.
|
|
45
|
+
*
|
|
46
|
+
* Wraps RealtimeFrame with `chartType="swarm"` and exposes dot styling as
|
|
47
|
+
* top-level props. Each data point renders as an individual dot at its
|
|
48
|
+
* (time, value) coordinates.
|
|
49
|
+
*
|
|
50
|
+
* Supports threshold coloring via annotations to recolor dots that cross
|
|
51
|
+
* value boundaries.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* <RealtimeSwarmChart
|
|
56
|
+
* ref={ref}
|
|
57
|
+
* radius={4}
|
|
58
|
+
* opacity={0.8}
|
|
59
|
+
* categoryAccessor="sensor"
|
|
60
|
+
* colors={{ sensor1: "#007bff", sensor2: "#28a745" }}
|
|
61
|
+
* />
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
exports.RealtimeSwarmChart = (0, react_1.forwardRef)(function RealtimeSwarmChart(props, ref) {
|
|
65
|
+
const { size = [500, 300], margin, className, arrowOfTime = "right", windowMode = "sliding", windowSize = 200, data, timeAccessor, valueAccessor, timeExtent, valueExtent, extentPadding, categoryAccessor, colors, radius, fill, opacity, stroke, strokeWidth, showAxes = true, background, enableHover, tooltipContent, onHover, annotations, svgAnnotationRules, tickFormatTime, tickFormatValue } = props;
|
|
66
|
+
const frameRef = (0, react_1.useRef)(null);
|
|
67
|
+
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
68
|
+
push: (point) => frameRef.current?.push(point),
|
|
69
|
+
pushMany: (points) => frameRef.current?.pushMany(points),
|
|
70
|
+
clear: () => frameRef.current?.clear(),
|
|
71
|
+
getData: () => frameRef.current?.getData() ?? []
|
|
72
|
+
}));
|
|
73
|
+
const swarmStyle = {};
|
|
74
|
+
if (radius != null)
|
|
75
|
+
swarmStyle.radius = radius;
|
|
76
|
+
if (fill != null)
|
|
77
|
+
swarmStyle.fill = fill;
|
|
78
|
+
if (opacity != null)
|
|
79
|
+
swarmStyle.opacity = opacity;
|
|
80
|
+
if (stroke != null)
|
|
81
|
+
swarmStyle.stroke = stroke;
|
|
82
|
+
if (strokeWidth != null)
|
|
83
|
+
swarmStyle.strokeWidth = strokeWidth;
|
|
84
|
+
return (React.createElement(RealtimeFrame_1.default, { ref: frameRef, chartType: "swarm", size: size, margin: margin, className: className, arrowOfTime: arrowOfTime, windowMode: windowMode, windowSize: windowSize, data: data, timeAccessor: timeAccessor, valueAccessor: valueAccessor, timeExtent: timeExtent, valueExtent: valueExtent, extentPadding: extentPadding, categoryAccessor: categoryAccessor, barColors: colors, swarmStyle: swarmStyle, showAxes: showAxes, background: background, hoverAnnotation: enableHover, tooltipContent: tooltipContent, customHoverBehavior: onHover, annotations: annotations, svgAnnotationRules: svgAnnotationRules, tickFormatTime: tickFormatTime, tickFormatValue: tickFormatValue }));
|
|
85
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.RealtimeWaterfallChart = void 0;
|
|
40
|
+
const React = __importStar(require("react"));
|
|
41
|
+
const react_1 = require("react");
|
|
42
|
+
const RealtimeFrame_1 = __importDefault(require("../../realtime/RealtimeFrame"));
|
|
43
|
+
/**
|
|
44
|
+
* RealtimeWaterfallChart - Simplified wrapper for streaming waterfall charts.
|
|
45
|
+
*
|
|
46
|
+
* Wraps RealtimeFrame with `chartType="waterfall"` and exposes waterfall styling
|
|
47
|
+
* as top-level props. Visualizes cumulative deltas as connected bars rising and
|
|
48
|
+
* falling from a running baseline.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```tsx
|
|
52
|
+
* <RealtimeWaterfallChart
|
|
53
|
+
* ref={ref}
|
|
54
|
+
* positiveColor="#28a745"
|
|
55
|
+
* negativeColor="#dc3545"
|
|
56
|
+
* connectorStroke="#999"
|
|
57
|
+
* windowSize={300}
|
|
58
|
+
* />
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
exports.RealtimeWaterfallChart = (0, react_1.forwardRef)(function RealtimeWaterfallChart(props, ref) {
|
|
62
|
+
const { size = [500, 300], margin, className, arrowOfTime = "right", windowMode = "sliding", windowSize = 200, data, timeAccessor, valueAccessor, timeExtent, valueExtent, extentPadding, positiveColor, negativeColor, connectorStroke, connectorWidth, gap, stroke, strokeWidth, showAxes = true, background, enableHover, tooltipContent, onHover, annotations, svgAnnotationRules, tickFormatTime, tickFormatValue } = props;
|
|
63
|
+
const frameRef = (0, react_1.useRef)(null);
|
|
64
|
+
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
65
|
+
push: (point) => frameRef.current?.push(point),
|
|
66
|
+
pushMany: (points) => frameRef.current?.pushMany(points),
|
|
67
|
+
clear: () => frameRef.current?.clear(),
|
|
68
|
+
getData: () => frameRef.current?.getData() ?? []
|
|
69
|
+
}));
|
|
70
|
+
const waterfallStyle = {};
|
|
71
|
+
if (positiveColor != null)
|
|
72
|
+
waterfallStyle.positiveColor = positiveColor;
|
|
73
|
+
if (negativeColor != null)
|
|
74
|
+
waterfallStyle.negativeColor = negativeColor;
|
|
75
|
+
if (connectorStroke != null)
|
|
76
|
+
waterfallStyle.connectorStroke = connectorStroke;
|
|
77
|
+
if (connectorWidth != null)
|
|
78
|
+
waterfallStyle.connectorWidth = connectorWidth;
|
|
79
|
+
if (gap != null)
|
|
80
|
+
waterfallStyle.gap = gap;
|
|
81
|
+
if (stroke != null)
|
|
82
|
+
waterfallStyle.stroke = stroke;
|
|
83
|
+
if (strokeWidth != null)
|
|
84
|
+
waterfallStyle.strokeWidth = strokeWidth;
|
|
85
|
+
return (React.createElement(RealtimeFrame_1.default, { ref: frameRef, chartType: "waterfall", size: size, margin: margin, className: className, arrowOfTime: arrowOfTime, windowMode: windowMode, windowSize: windowSize, data: data, timeAccessor: timeAccessor, valueAccessor: valueAccessor, timeExtent: timeExtent, valueExtent: valueExtent, extentPadding: extentPadding, waterfallStyle: waterfallStyle, showAxes: showAxes, background: background, hoverAnnotation: enableHover, tooltipContent: tooltipContent, customHoverBehavior: onHover, annotations: annotations, svgAnnotationRules: svgAnnotationRules, tickFormatTime: tickFormatTime, tickFormatValue: tickFormatValue }));
|
|
86
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.default = ChartError;
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
/**
|
|
40
|
+
* Renders a visible, styled error state inside the chart's dimensions.
|
|
41
|
+
* Shows the component name, error message, and a hint for developers.
|
|
42
|
+
*
|
|
43
|
+
* Designed to be obvious in development but not alarming in production —
|
|
44
|
+
* uses muted colors that adapt to light/dark backgrounds.
|
|
45
|
+
*/
|
|
46
|
+
function ChartError({ componentName, message, width, height, }) {
|
|
47
|
+
return (React.createElement("div", { role: "alert", style: {
|
|
48
|
+
width,
|
|
49
|
+
height: Math.max(height, 120),
|
|
50
|
+
display: "flex",
|
|
51
|
+
alignItems: "center",
|
|
52
|
+
justifyContent: "center",
|
|
53
|
+
border: "1px dashed rgba(128, 128, 128, 0.4)",
|
|
54
|
+
borderRadius: 8,
|
|
55
|
+
background: "rgba(128, 128, 128, 0.04)",
|
|
56
|
+
padding: 24,
|
|
57
|
+
boxSizing: "border-box",
|
|
58
|
+
} },
|
|
59
|
+
React.createElement("div", { style: { textAlign: "center", maxWidth: 400 } },
|
|
60
|
+
React.createElement("div", { style: {
|
|
61
|
+
fontSize: 13,
|
|
62
|
+
fontWeight: 600,
|
|
63
|
+
color: "rgba(128, 128, 128, 0.7)",
|
|
64
|
+
marginBottom: 6,
|
|
65
|
+
fontFamily: "monospace",
|
|
66
|
+
} }, componentName),
|
|
67
|
+
React.createElement("div", { style: {
|
|
68
|
+
fontSize: 14,
|
|
69
|
+
color: "rgba(128, 128, 128, 0.9)",
|
|
70
|
+
lineHeight: 1.5,
|
|
71
|
+
} }, message))));
|
|
72
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_COLORS = exports.COLOR_SCHEMES = void 0;
|
|
4
|
+
exports.getColor = getColor;
|
|
5
|
+
exports.createColorScale = createColorScale;
|
|
6
|
+
exports.getSize = getSize;
|
|
7
|
+
const d3_scale_1 = require("d3-scale");
|
|
8
|
+
const d3_scale_chromatic_1 = require("d3-scale-chromatic");
|
|
9
|
+
/**
|
|
10
|
+
* Predefined color schemes
|
|
11
|
+
*/
|
|
12
|
+
exports.COLOR_SCHEMES = {
|
|
13
|
+
// Categorical schemes
|
|
14
|
+
category10: d3_scale_chromatic_1.schemeCategory10,
|
|
15
|
+
tableau10: d3_scale_chromatic_1.schemeTableau10,
|
|
16
|
+
set3: d3_scale_chromatic_1.schemeSet3,
|
|
17
|
+
// Sequential schemes (for continuous data)
|
|
18
|
+
blues: d3_scale_chromatic_1.interpolateBlues,
|
|
19
|
+
reds: d3_scale_chromatic_1.interpolateReds,
|
|
20
|
+
greens: d3_scale_chromatic_1.interpolateGreens,
|
|
21
|
+
oranges: d3_scale_chromatic_1.interpolateOranges,
|
|
22
|
+
purples: d3_scale_chromatic_1.interpolatePurples,
|
|
23
|
+
viridis: d3_scale_chromatic_1.interpolateViridis,
|
|
24
|
+
plasma: d3_scale_chromatic_1.interpolatePlasma
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Default colors for charts
|
|
28
|
+
*/
|
|
29
|
+
exports.DEFAULT_COLORS = d3_scale_chromatic_1.schemeCategory10;
|
|
30
|
+
/**
|
|
31
|
+
* Gets a color for a data point based on the colorBy configuration
|
|
32
|
+
*
|
|
33
|
+
* @param dataPoint - The data point
|
|
34
|
+
* @param colorBy - Field name or function to determine color
|
|
35
|
+
* @param colorScale - Optional custom color scale
|
|
36
|
+
* @returns Color string
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // Using a field name
|
|
41
|
+
* getColor({category: 'A', value: 10}, 'category', colorScale)
|
|
42
|
+
*
|
|
43
|
+
* // Using a function
|
|
44
|
+
* getColor({value: 10}, d => d.value > 5 ? 'red' : 'blue')
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function getColor(dataPoint, colorBy, colorScale) {
|
|
48
|
+
if (typeof colorBy === "function") {
|
|
49
|
+
return colorBy(dataPoint);
|
|
50
|
+
}
|
|
51
|
+
const colorValue = dataPoint[colorBy];
|
|
52
|
+
if (colorScale) {
|
|
53
|
+
return colorScale(colorValue);
|
|
54
|
+
}
|
|
55
|
+
// Default: return a hash-based color
|
|
56
|
+
return exports.DEFAULT_COLORS[Math.abs(hashString(String(colorValue))) % exports.DEFAULT_COLORS.length];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Creates a color scale function from data
|
|
60
|
+
*
|
|
61
|
+
* @param data - Array of data points
|
|
62
|
+
* @param colorBy - Field name to use for coloring
|
|
63
|
+
* @param scheme - Color scheme name or custom palette
|
|
64
|
+
* @returns Color scale function
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* const colorScale = createColorScale(data, 'category')
|
|
69
|
+
* const color = colorScale('A') // Returns color for category 'A'
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
function createColorScale(data, colorBy, scheme = "category10") {
|
|
73
|
+
// Get unique values
|
|
74
|
+
const uniqueValues = Array.from(new Set(data.map(d => d[colorBy])));
|
|
75
|
+
// Check if values are numeric for sequential scale
|
|
76
|
+
const isNumeric = uniqueValues.every(v => typeof v === "number" || !isNaN(Number(v)));
|
|
77
|
+
// Handle custom color array
|
|
78
|
+
if (Array.isArray(scheme)) {
|
|
79
|
+
return (0, d3_scale_1.scaleOrdinal)()
|
|
80
|
+
.domain(uniqueValues)
|
|
81
|
+
.range(scheme)
|
|
82
|
+
.unknown("#999");
|
|
83
|
+
}
|
|
84
|
+
const colorScheme = exports.COLOR_SCHEMES[scheme] || exports.COLOR_SCHEMES.category10;
|
|
85
|
+
if (isNumeric && typeof colorScheme === "function") {
|
|
86
|
+
// Use sequential scale for numeric data
|
|
87
|
+
return (v) => colorScheme(Number(v) / Math.max(...uniqueValues.map(Number)));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Use ordinal scale for categorical data
|
|
91
|
+
const colors = Array.isArray(colorScheme) ? colorScheme : exports.DEFAULT_COLORS;
|
|
92
|
+
return (0, d3_scale_1.scaleOrdinal)()
|
|
93
|
+
.domain(uniqueValues)
|
|
94
|
+
.range(colors)
|
|
95
|
+
.unknown("#999");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Simple string hash function for deterministic color assignment
|
|
100
|
+
*/
|
|
101
|
+
function hashString(str) {
|
|
102
|
+
let hash = 0;
|
|
103
|
+
for (let i = 0; i < str.length; i++) {
|
|
104
|
+
const char = str.charCodeAt(i);
|
|
105
|
+
hash = (hash << 5) - hash + char;
|
|
106
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
107
|
+
}
|
|
108
|
+
return Math.abs(hash);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generates a size function based on sizeBy configuration
|
|
112
|
+
*
|
|
113
|
+
* @param dataPoint - The data point
|
|
114
|
+
* @param sizeBy - Field name or function to determine size
|
|
115
|
+
* @param sizeRange - Min and max size range [min, max]
|
|
116
|
+
* @param domain - Optional domain for scaling [minValue, maxValue]
|
|
117
|
+
* @returns Size value
|
|
118
|
+
*/
|
|
119
|
+
function getSize(dataPoint, sizeBy, sizeRange = [3, 20], domain) {
|
|
120
|
+
let value;
|
|
121
|
+
if (typeof sizeBy === "function") {
|
|
122
|
+
value = sizeBy(dataPoint);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
value = dataPoint[sizeBy];
|
|
126
|
+
}
|
|
127
|
+
if (!domain) {
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
// Scale value to size range
|
|
131
|
+
const [minDomain, maxDomain] = domain;
|
|
132
|
+
const [minSize, maxSize] = sizeRange;
|
|
133
|
+
if (maxDomain === minDomain) {
|
|
134
|
+
return (minSize + maxSize) / 2;
|
|
135
|
+
}
|
|
136
|
+
const normalized = (value - minDomain) / (maxDomain - minDomain);
|
|
137
|
+
return minSize + normalized * (maxSize - minSize);
|
|
138
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.formatNumber = formatNumber;
|
|
37
|
+
exports.formatDate = formatDate;
|
|
38
|
+
exports.formatAxis = formatAxis;
|
|
39
|
+
exports.createTooltip = createTooltip;
|
|
40
|
+
exports.formatLargeNumber = formatLargeNumber;
|
|
41
|
+
exports.truncateText = truncateText;
|
|
42
|
+
const React = __importStar(require("react"));
|
|
43
|
+
const d3_time_format_1 = require("d3-time-format");
|
|
44
|
+
const d3_format_1 = require("d3-format");
|
|
45
|
+
/**
|
|
46
|
+
* Format number with specified format string
|
|
47
|
+
*
|
|
48
|
+
* @param value - Number to format
|
|
49
|
+
* @param formatString - D3 format string (e.g., ".2f", ",.0f", ".1%")
|
|
50
|
+
* @returns Formatted string
|
|
51
|
+
*
|
|
52
|
+
* @see https://github.com/d3/d3-format#format for format string options
|
|
53
|
+
*/
|
|
54
|
+
function formatNumber(value, formatString = ",.0f") {
|
|
55
|
+
try {
|
|
56
|
+
return (0, d3_format_1.format)(formatString)(value);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return String(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format date with specified format string
|
|
64
|
+
*
|
|
65
|
+
* @param value - Date to format
|
|
66
|
+
* @param formatString - D3 time format string (e.g., "%Y-%m-%d", "%b %d")
|
|
67
|
+
* @returns Formatted string
|
|
68
|
+
*
|
|
69
|
+
* @see https://github.com/d3/d3-time-format#timeFormat for format string options
|
|
70
|
+
*/
|
|
71
|
+
function formatDate(value, formatString = "%b %d, %Y") {
|
|
72
|
+
try {
|
|
73
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
74
|
+
return (0, d3_time_format_1.timeFormat)(formatString)(date);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return String(value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a formatting function based on the type
|
|
82
|
+
*
|
|
83
|
+
* @param type - Type of formatting: 'number', 'date', 'percent', or 'currency'
|
|
84
|
+
* @param options - Optional configuration for the formatter
|
|
85
|
+
* @returns Formatting function
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* const fmt = formatAxis('number', { decimals: 2 })
|
|
90
|
+
* fmt(1234.567) // "1,234.57"
|
|
91
|
+
*
|
|
92
|
+
* const dateFmt = formatAxis('date', { format: '%b %Y' })
|
|
93
|
+
* dateFmt(new Date()) // "Jan 2024"
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
function formatAxis(type = "number", options) {
|
|
97
|
+
const { decimals = 0, format: customFormat, currency = "$" } = options || {};
|
|
98
|
+
switch (type) {
|
|
99
|
+
case "date":
|
|
100
|
+
return (d) => formatDate(d, customFormat || "%b %d");
|
|
101
|
+
case "percent":
|
|
102
|
+
return (d) => formatNumber(d, customFormat || `.${decimals}%`);
|
|
103
|
+
case "currency":
|
|
104
|
+
return (d) => `${currency}${formatNumber(d, customFormat || `,.${decimals}f`)}`;
|
|
105
|
+
case "number":
|
|
106
|
+
default:
|
|
107
|
+
return (d) => formatNumber(d, customFormat || `,.${decimals}f`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Creates a tooltip content generator
|
|
112
|
+
*
|
|
113
|
+
* @param fields - Array of field names to display
|
|
114
|
+
* @param formatters - Optional map of field names to formatting functions
|
|
115
|
+
* @param labels - Optional map of field names to display labels
|
|
116
|
+
* @returns React element generator function
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* const tooltip = createTooltip(
|
|
121
|
+
* ['category', 'value'],
|
|
122
|
+
* { value: d => formatNumber(d, ',.2f') },
|
|
123
|
+
* { category: 'Category', value: 'Value' }
|
|
124
|
+
* )
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
function createTooltip(fields, formatters, labels) {
|
|
128
|
+
return (d) => {
|
|
129
|
+
return React.createElement("div", { className: "tooltip-content", style: { padding: "8px" } }, fields.map((field) => {
|
|
130
|
+
const label = labels?.[field] || field;
|
|
131
|
+
const value = d[field];
|
|
132
|
+
const formatter = formatters?.[field];
|
|
133
|
+
const displayValue = formatter ? formatter(value) : String(value);
|
|
134
|
+
return React.createElement("div", { key: field, style: { marginBottom: "4px" } }, React.createElement("strong", null, `${label}: `), displayValue);
|
|
135
|
+
}));
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Formats large numbers with K/M/B suffixes
|
|
140
|
+
*
|
|
141
|
+
* @param value - Number to format
|
|
142
|
+
* @param decimals - Number of decimal places
|
|
143
|
+
* @returns Formatted string with suffix
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* formatLargeNumber(1234) // "1.2K"
|
|
148
|
+
* formatLargeNumber(1234567) // "1.2M"
|
|
149
|
+
* formatLargeNumber(1234567890) // "1.2B"
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
function formatLargeNumber(value, decimals = 1) {
|
|
153
|
+
if (value >= 1e9) {
|
|
154
|
+
return (value / 1e9).toFixed(decimals) + "B";
|
|
155
|
+
}
|
|
156
|
+
if (value >= 1e6) {
|
|
157
|
+
return (value / 1e6).toFixed(decimals) + "M";
|
|
158
|
+
}
|
|
159
|
+
if (value >= 1e3) {
|
|
160
|
+
return (value / 1e3).toFixed(decimals) + "K";
|
|
161
|
+
}
|
|
162
|
+
return value.toFixed(decimals);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Truncates text to specified length with ellipsis
|
|
166
|
+
*
|
|
167
|
+
* @param text - Text to truncate
|
|
168
|
+
* @param maxLength - Maximum length before truncation
|
|
169
|
+
* @returns Truncated text
|
|
170
|
+
*/
|
|
171
|
+
function truncateText(text, maxLength = 20) {
|
|
172
|
+
if (text.length <= maxLength) {
|
|
173
|
+
return text;
|
|
174
|
+
}
|
|
175
|
+
return text.slice(0, maxLength - 3) + "...";
|
|
176
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_COLOR = void 0;
|
|
4
|
+
exports.resolveAccessor = resolveAccessor;
|
|
5
|
+
exports.useColorScale = useColorScale;
|
|
6
|
+
exports.useSortedData = useSortedData;
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const colorUtils_1 = require("./colorUtils");
|
|
9
|
+
/**
|
|
10
|
+
* Default fill color used when no colorBy is specified
|
|
11
|
+
*/
|
|
12
|
+
exports.DEFAULT_COLOR = "#007bff";
|
|
13
|
+
/**
|
|
14
|
+
* Resolve an accessor (string key or function) into a function.
|
|
15
|
+
* Used across chart components to normalize `valueAccessor`, `categoryAccessor`, etc.
|
|
16
|
+
*/
|
|
17
|
+
function resolveAccessor(accessor) {
|
|
18
|
+
return typeof accessor === "function"
|
|
19
|
+
? accessor
|
|
20
|
+
: (d) => d[accessor];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Hook to create a color scale from data and colorBy configuration.
|
|
24
|
+
* Returns undefined when colorBy is absent or is a function accessor.
|
|
25
|
+
*/
|
|
26
|
+
function useColorScale(data, colorBy, colorScheme = "category10") {
|
|
27
|
+
return (0, react_1.useMemo)(() => {
|
|
28
|
+
if (!colorBy || typeof colorBy === "function")
|
|
29
|
+
return undefined;
|
|
30
|
+
return (0, colorUtils_1.createColorScale)(data, colorBy, colorScheme);
|
|
31
|
+
}, [data, colorBy, colorScheme]);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Hook to sort data by a value accessor.
|
|
35
|
+
* Used by BarChart and DotPlot.
|
|
36
|
+
*/
|
|
37
|
+
function useSortedData(data, sort, valueAccessor) {
|
|
38
|
+
return (0, react_1.useMemo)(() => {
|
|
39
|
+
if (!sort)
|
|
40
|
+
return data;
|
|
41
|
+
const copy = [...data];
|
|
42
|
+
if (typeof sort === "function")
|
|
43
|
+
return copy.sort(sort);
|
|
44
|
+
const getValue = resolveAccessor(valueAccessor);
|
|
45
|
+
return sort === "asc"
|
|
46
|
+
? copy.sort((a, b) => getValue(a) - getValue(b))
|
|
47
|
+
: copy.sort((a, b) => getValue(b) - getValue(a));
|
|
48
|
+
}, [data, sort, valueAccessor]);
|
|
49
|
+
}
|