react-native-chart-kit 7.0.0-next.0 → 7.0.0-next.2
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/README.md +17 -0
- package/dist/v2/core/data/index.d.ts +3 -0
- package/dist/v2/core/data/index.d.ts.map +1 -0
- package/dist/v2/core/data/index.js +1 -0
- package/dist/v2/core/data/normalize.d.ts +8 -0
- package/dist/v2/core/data/normalize.d.ts.map +1 -0
- package/dist/v2/core/data/normalize.js +229 -0
- package/dist/v2/core/data/normalizeValues.d.ts +16 -0
- package/dist/v2/core/data/normalizeValues.d.ts.map +1 -0
- package/dist/v2/core/data/normalizeValues.js +96 -0
- package/dist/v2/core/data/types.d.ts +161 -0
- package/dist/v2/core/data/types.d.ts.map +1 -0
- package/dist/v2/core/data/types.js +1 -0
- package/dist/v2/core/geometry/areaPath.d.ts +3 -0
- package/dist/v2/core/geometry/areaPath.d.ts.map +1 -0
- package/dist/v2/core/geometry/areaPath.js +36 -0
- package/dist/v2/core/geometry/barRects.d.ts +44 -0
- package/dist/v2/core/geometry/barRects.d.ts.map +1 -0
- package/dist/v2/core/geometry/barRects.js +201 -0
- package/dist/v2/core/geometry/contributionHeatmap.d.ts +49 -0
- package/dist/v2/core/geometry/contributionHeatmap.d.ts.map +1 -0
- package/dist/v2/core/geometry/contributionHeatmap.js +107 -0
- package/dist/v2/core/geometry/horizontalBarRects.d.ts +27 -0
- package/dist/v2/core/geometry/horizontalBarRects.d.ts.map +1 -0
- package/dist/v2/core/geometry/horizontalBarRects.js +202 -0
- package/dist/v2/core/geometry/index.d.ts +12 -0
- package/dist/v2/core/geometry/index.d.ts.map +1 -0
- package/dist/v2/core/geometry/index.js +11 -0
- package/dist/v2/core/geometry/lineDecimation.d.ts +8 -0
- package/dist/v2/core/geometry/lineDecimation.d.ts.map +1 -0
- package/dist/v2/core/geometry/lineDecimation.js +110 -0
- package/dist/v2/core/geometry/linePath.d.ts +5 -0
- package/dist/v2/core/geometry/linePath.d.ts.map +1 -0
- package/dist/v2/core/geometry/linePath.js +98 -0
- package/dist/v2/core/geometry/lineSeries.d.ts +29 -0
- package/dist/v2/core/geometry/lineSeries.d.ts.map +1 -0
- package/dist/v2/core/geometry/lineSeries.js +51 -0
- package/dist/v2/core/geometry/path.d.ts +6 -0
- package/dist/v2/core/geometry/path.d.ts.map +1 -0
- package/dist/v2/core/geometry/path.js +24 -0
- package/dist/v2/core/geometry/pieArcs.d.ts +29 -0
- package/dist/v2/core/geometry/pieArcs.d.ts.map +1 -0
- package/dist/v2/core/geometry/pieArcs.js +142 -0
- package/dist/v2/core/geometry/progressRings.d.ts +30 -0
- package/dist/v2/core/geometry/progressRings.d.ts.map +1 -0
- package/dist/v2/core/geometry/progressRings.js +104 -0
- package/dist/v2/core/geometry/types.d.ts +32 -0
- package/dist/v2/core/geometry/types.d.ts.map +1 -0
- package/dist/v2/core/geometry/types.js +1 -0
- package/dist/v2/core/index.d.ts +6 -0
- package/dist/v2/core/index.d.ts.map +1 -0
- package/dist/v2/core/index.js +6 -0
- package/dist/v2/core/interaction/index.d.ts +5 -0
- package/dist/v2/core/interaction/index.d.ts.map +1 -0
- package/dist/v2/core/interaction/index.js +2 -0
- package/dist/v2/core/interaction/viewport.d.ts +71 -0
- package/dist/v2/core/interaction/viewport.d.ts.map +1 -0
- package/dist/v2/core/interaction/viewport.js +216 -0
- package/dist/v2/core/interaction/viewportTransform.d.ts +17 -0
- package/dist/v2/core/interaction/viewportTransform.d.ts.map +1 -0
- package/dist/v2/core/interaction/viewportTransform.js +70 -0
- package/dist/v2/core/layout/autoPadding.d.ts +3 -0
- package/dist/v2/core/layout/autoPadding.d.ts.map +1 -0
- package/dist/v2/core/layout/autoPadding.js +33 -0
- package/dist/v2/core/layout/chartBox.d.ts +5 -0
- package/dist/v2/core/layout/chartBox.d.ts.map +1 -0
- package/dist/v2/core/layout/chartBox.js +22 -0
- package/dist/v2/core/layout/debugLayout.d.ts +3 -0
- package/dist/v2/core/layout/debugLayout.d.ts.map +1 -0
- package/dist/v2/core/layout/debugLayout.js +20 -0
- package/dist/v2/core/layout/index.d.ts +8 -0
- package/dist/v2/core/layout/index.d.ts.map +1 -0
- package/dist/v2/core/layout/index.js +6 -0
- package/dist/v2/core/layout/labelCollision.d.ts +3 -0
- package/dist/v2/core/layout/labelCollision.d.ts.map +1 -0
- package/dist/v2/core/layout/labelCollision.js +90 -0
- package/dist/v2/core/layout/legendLayout.d.ts +3 -0
- package/dist/v2/core/layout/legendLayout.d.ts.map +1 -0
- package/dist/v2/core/layout/legendLayout.js +39 -0
- package/dist/v2/core/layout/tooltipPlacement.d.ts +3 -0
- package/dist/v2/core/layout/tooltipPlacement.d.ts.map +1 -0
- package/dist/v2/core/layout/tooltipPlacement.js +76 -0
- package/dist/v2/core/layout/types.d.ts +114 -0
- package/dist/v2/core/layout/types.d.ts.map +1 -0
- package/dist/v2/core/layout/types.js +1 -0
- package/dist/v2/core/scales/band.d.ts +15 -0
- package/dist/v2/core/scales/band.d.ts.map +1 -0
- package/dist/v2/core/scales/band.js +34 -0
- package/dist/v2/core/scales/domain.d.ts +6 -0
- package/dist/v2/core/scales/domain.d.ts.map +1 -0
- package/dist/v2/core/scales/domain.js +109 -0
- package/dist/v2/core/scales/index.d.ts +7 -0
- package/dist/v2/core/scales/index.d.ts.map +1 -0
- package/dist/v2/core/scales/index.js +5 -0
- package/dist/v2/core/scales/linear.d.ts +8 -0
- package/dist/v2/core/scales/linear.d.ts.map +1 -0
- package/dist/v2/core/scales/linear.js +22 -0
- package/dist/v2/core/scales/ticks.d.ts +4 -0
- package/dist/v2/core/scales/ticks.d.ts.map +1 -0
- package/dist/v2/core/scales/ticks.js +111 -0
- package/dist/v2/core/scales/time.d.ts +8 -0
- package/dist/v2/core/scales/time.d.ts.map +1 -0
- package/dist/v2/core/scales/time.js +23 -0
- package/dist/v2/core/scales/types.d.ts +46 -0
- package/dist/v2/core/scales/types.d.ts.map +1 -0
- package/dist/v2/core/scales/types.js +1 -0
- package/dist/v2/index.d.ts +1 -0
- package/dist/v2/index.js +1 -0
- package/dist/v2/react-native/charts/bar/BarChart.d.ts +6 -0
- package/dist/v2/react-native/charts/bar/BarChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/BarChart.js +198 -0
- package/dist/v2/react-native/charts/bar/BarChartSurface.d.ts +36 -0
- package/dist/v2/react-native/charts/bar/BarChartSurface.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/BarChartSurface.js +126 -0
- package/dist/v2/react-native/charts/bar/StackedBarChart.d.ts +4 -0
- package/dist/v2/react-native/charts/bar/StackedBarChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/StackedBarChart.js +9 -0
- package/dist/v2/react-native/charts/bar/accessibility.d.ts +31 -0
- package/dist/v2/react-native/charts/bar/accessibility.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/accessibility.js +87 -0
- package/dist/v2/react-native/charts/bar/interaction.d.ts +18 -0
- package/dist/v2/react-native/charts/bar/interaction.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/interaction.js +62 -0
- package/dist/v2/react-native/charts/bar/model.d.ts +3 -0
- package/dist/v2/react-native/charts/bar/model.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/model.js +326 -0
- package/dist/v2/react-native/charts/bar/modelUtils.d.ts +27 -0
- package/dist/v2/react-native/charts/bar/modelUtils.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/modelUtils.js +58 -0
- package/dist/v2/react-native/charts/bar/options.d.ts +7 -0
- package/dist/v2/react-native/charts/bar/options.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/options.js +49 -0
- package/dist/v2/react-native/charts/bar/rendererSafety.d.ts +12 -0
- package/dist/v2/react-native/charts/bar/rendererSafety.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/rendererSafety.js +31 -0
- package/dist/v2/react-native/charts/bar/selectionAnimation.d.ts +42 -0
- package/dist/v2/react-native/charts/bar/selectionAnimation.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/selectionAnimation.js +158 -0
- package/dist/v2/react-native/charts/bar/stackedCompat.d.ts +55 -0
- package/dist/v2/react-native/charts/bar/stackedCompat.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/stackedCompat.js +105 -0
- package/dist/v2/react-native/charts/bar/tooltip.d.ts +11 -0
- package/dist/v2/react-native/charts/bar/tooltip.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/tooltip.js +15 -0
- package/dist/v2/react-native/charts/bar/tooltipModel.d.ts +33 -0
- package/dist/v2/react-native/charts/bar/tooltipModel.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/tooltipModel.js +40 -0
- package/dist/v2/react-native/charts/bar/tooltipPlacement.d.ts +9 -0
- package/dist/v2/react-native/charts/bar/tooltipPlacement.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/tooltipPlacement.js +9 -0
- package/dist/v2/react-native/charts/bar/types.d.ts +211 -0
- package/dist/v2/react-native/charts/bar/types.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/types.js +1 -0
- package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.d.ts +10 -0
- package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.js +87 -0
- package/dist/v2/react-native/charts/bar/viewport.d.ts +20 -0
- package/dist/v2/react-native/charts/bar/viewport.d.ts.map +1 -0
- package/dist/v2/react-native/charts/bar/viewport.js +47 -0
- package/dist/v2/react-native/charts/contribution/ContributionGraph.d.ts +13 -0
- package/dist/v2/react-native/charts/contribution/ContributionGraph.d.ts.map +1 -0
- package/dist/v2/react-native/charts/contribution/ContributionGraph.js +65 -0
- package/dist/v2/react-native/charts/contribution/accessibility.d.ts +25 -0
- package/dist/v2/react-native/charts/contribution/accessibility.d.ts.map +1 -0
- package/dist/v2/react-native/charts/contribution/accessibility.js +50 -0
- package/dist/v2/react-native/charts/contribution/model.d.ts +17 -0
- package/dist/v2/react-native/charts/contribution/model.d.ts.map +1 -0
- package/dist/v2/react-native/charts/contribution/model.js +102 -0
- package/dist/v2/react-native/charts/contribution/types.d.ts +50 -0
- package/dist/v2/react-native/charts/contribution/types.d.ts.map +1 -0
- package/dist/v2/react-native/charts/contribution/types.js +1 -0
- package/dist/v2/react-native/charts/line/AreaChart.d.ts +3 -0
- package/dist/v2/react-native/charts/line/AreaChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/AreaChart.js +3 -0
- package/dist/v2/react-native/charts/line/ChartSurface.d.ts +16 -0
- package/dist/v2/react-native/charts/line/ChartSurface.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/ChartSurface.js +151 -0
- package/dist/v2/react-native/charts/line/LineChart.d.ts +6 -0
- package/dist/v2/react-native/charts/line/LineChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/LineChart.js +294 -0
- package/dist/v2/react-native/charts/line/StickyYAxis.d.ts +15 -0
- package/dist/v2/react-native/charts/line/StickyYAxis.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/StickyYAxis.js +26 -0
- package/dist/v2/react-native/charts/line/accessibility.d.ts +34 -0
- package/dist/v2/react-native/charts/line/accessibility.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/accessibility.js +103 -0
- package/dist/v2/react-native/charts/line/axisLabels.d.ts +37 -0
- package/dist/v2/react-native/charts/line/axisLabels.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/axisLabels.js +55 -0
- package/dist/v2/react-native/charts/line/debugLayout.d.ts +26 -0
- package/dist/v2/react-native/charts/line/debugLayout.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/debugLayout.js +77 -0
- package/dist/v2/react-native/charts/line/debugOverlay.d.ts +9 -0
- package/dist/v2/react-native/charts/line/debugOverlay.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/debugOverlay.js +30 -0
- package/dist/v2/react-native/charts/line/defaultTooltip.d.ts +3 -0
- package/dist/v2/react-native/charts/line/defaultTooltip.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/defaultTooltip.js +17 -0
- package/dist/v2/react-native/charts/line/interaction.d.ts +82 -0
- package/dist/v2/react-native/charts/line/interaction.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/interaction.js +94 -0
- package/dist/v2/react-native/charts/line/legend.d.ts +35 -0
- package/dist/v2/react-native/charts/line/legend.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/legend.js +95 -0
- package/dist/v2/react-native/charts/line/markers.d.ts +11 -0
- package/dist/v2/react-native/charts/line/markers.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/markers.js +52 -0
- package/dist/v2/react-native/charts/line/options.d.ts +172 -0
- package/dist/v2/react-native/charts/line/options.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/options.js +168 -0
- package/dist/v2/react-native/charts/line/outsidePressSurfaces.d.ts +15 -0
- package/dist/v2/react-native/charts/line/outsidePressSurfaces.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/outsidePressSurfaces.js +37 -0
- package/dist/v2/react-native/charts/line/overviewProps.d.ts +45 -0
- package/dist/v2/react-native/charts/line/overviewProps.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/overviewProps.js +4 -0
- package/dist/v2/react-native/charts/line/rangeSelector.d.ts +19 -0
- package/dist/v2/react-native/charts/line/rangeSelector.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/rangeSelector.js +176 -0
- package/dist/v2/react-native/charts/line/rangeSelectorConfig.d.ts +38 -0
- package/dist/v2/react-native/charts/line/rangeSelectorConfig.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/rangeSelectorConfig.js +41 -0
- package/dist/v2/react-native/charts/line/referenceLabelPlacement.d.ts +21 -0
- package/dist/v2/react-native/charts/line/referenceLabelPlacement.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/referenceLabelPlacement.js +113 -0
- package/dist/v2/react-native/charts/line/references.d.ts +62 -0
- package/dist/v2/react-native/charts/line/references.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/references.js +156 -0
- package/dist/v2/react-native/charts/line/renderer.d.ts +4 -0
- package/dist/v2/react-native/charts/line/renderer.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/renderer.js +23 -0
- package/dist/v2/react-native/charts/line/responders.d.ts +13 -0
- package/dist/v2/react-native/charts/line/responders.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/responders.js +59 -0
- package/dist/v2/react-native/charts/line/selection.d.ts +31 -0
- package/dist/v2/react-native/charts/line/selection.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/selection.js +26 -0
- package/dist/v2/react-native/charts/line/seriesInput.d.ts +4 -0
- package/dist/v2/react-native/charts/line/seriesInput.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/seriesInput.js +13 -0
- package/dist/v2/react-native/charts/line/seriesStyles.d.ts +20 -0
- package/dist/v2/react-native/charts/line/seriesStyles.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/seriesStyles.js +33 -0
- package/dist/v2/react-native/charts/line/stickyYAxisLayout.d.ts +6 -0
- package/dist/v2/react-native/charts/line/stickyYAxisLayout.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/stickyYAxisLayout.js +2 -0
- package/dist/v2/react-native/charts/line/text.d.ts +7 -0
- package/dist/v2/react-native/charts/line/text.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/text.js +7 -0
- package/dist/v2/react-native/charts/line/thresholdRendering.d.ts +28 -0
- package/dist/v2/react-native/charts/line/thresholdRendering.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/thresholdRendering.js +145 -0
- package/dist/v2/react-native/charts/line/tooltip.d.ts +70 -0
- package/dist/v2/react-native/charts/line/tooltip.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/tooltip.js +87 -0
- package/dist/v2/react-native/charts/line/types.d.ts +371 -0
- package/dist/v2/react-native/charts/line/types.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/types.js +1 -0
- package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.d.ts +13 -0
- package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.js +84 -0
- package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.d.ts +5 -0
- package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.js +141 -0
- package/dist/v2/react-native/charts/line/useChartModel.d.ts +103 -0
- package/dist/v2/react-native/charts/line/useChartModel.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/useChartModel.js +367 -0
- package/dist/v2/react-native/charts/line/useDebugLayout.d.ts +16 -0
- package/dist/v2/react-native/charts/line/useDebugLayout.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/useDebugLayout.js +35 -0
- package/dist/v2/react-native/charts/line/utils.d.ts +10 -0
- package/dist/v2/react-native/charts/line/utils.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/utils.js +40 -0
- package/dist/v2/react-native/charts/line/viewportInteraction.d.ts +3 -0
- package/dist/v2/react-native/charts/line/viewportInteraction.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/viewportInteraction.js +1 -0
- package/dist/v2/react-native/charts/line/viewportInteractionConfig.d.ts +3 -0
- package/dist/v2/react-native/charts/line/viewportInteractionConfig.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/viewportInteractionConfig.js +1 -0
- package/dist/v2/react-native/charts/line/viewportPinchZoom.d.ts +2 -0
- package/dist/v2/react-native/charts/line/viewportPinchZoom.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/viewportPinchZoom.js +1 -0
- package/dist/v2/react-native/charts/line/xLabelCandidates.d.ts +13 -0
- package/dist/v2/react-native/charts/line/xLabelCandidates.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/xLabelCandidates.js +23 -0
- package/dist/v2/react-native/charts/line/xLabels.d.ts +39 -0
- package/dist/v2/react-native/charts/line/xLabels.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/xLabels.js +289 -0
- package/dist/v2/react-native/charts/line/xScale.d.ts +6 -0
- package/dist/v2/react-native/charts/line/xScale.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/xScale.js +25 -0
- package/dist/v2/react-native/charts/line/yAxisModel.d.ts +29 -0
- package/dist/v2/react-native/charts/line/yAxisModel.d.ts.map +1 -0
- package/dist/v2/react-native/charts/line/yAxisModel.js +39 -0
- package/dist/v2/react-native/charts/pie/PieChart.d.ts +7 -0
- package/dist/v2/react-native/charts/pie/PieChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/PieChart.js +244 -0
- package/dist/v2/react-native/charts/pie/accessibility.d.ts +28 -0
- package/dist/v2/react-native/charts/pie/accessibility.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/accessibility.js +49 -0
- package/dist/v2/react-native/charts/pie/activeSlice.d.ts +15 -0
- package/dist/v2/react-native/charts/pie/activeSlice.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/activeSlice.js +26 -0
- package/dist/v2/react-native/charts/pie/arcLabels.d.ts +32 -0
- package/dist/v2/react-native/charts/pie/arcLabels.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/arcLabels.js +191 -0
- package/dist/v2/react-native/charts/pie/interaction.d.ts +26 -0
- package/dist/v2/react-native/charts/pie/interaction.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/interaction.js +66 -0
- package/dist/v2/react-native/charts/pie/model.d.ts +15 -0
- package/dist/v2/react-native/charts/pie/model.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/model.js +157 -0
- package/dist/v2/react-native/charts/pie/selectionAnimation.d.ts +33 -0
- package/dist/v2/react-native/charts/pie/selectionAnimation.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/selectionAnimation.js +121 -0
- package/dist/v2/react-native/charts/pie/sliceSeparator.d.ts +7 -0
- package/dist/v2/react-native/charts/pie/sliceSeparator.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/sliceSeparator.js +26 -0
- package/dist/v2/react-native/charts/pie/slices.d.ts +20 -0
- package/dist/v2/react-native/charts/pie/slices.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/slices.js +54 -0
- package/dist/v2/react-native/charts/pie/types.d.ts +165 -0
- package/dist/v2/react-native/charts/pie/types.d.ts.map +1 -0
- package/dist/v2/react-native/charts/pie/types.js +1 -0
- package/dist/v2/react-native/charts/progress/ProgressChart.d.ts +7 -0
- package/dist/v2/react-native/charts/progress/ProgressChart.d.ts.map +1 -0
- package/dist/v2/react-native/charts/progress/ProgressChart.js +111 -0
- package/dist/v2/react-native/charts/progress/accessibility.d.ts +26 -0
- package/dist/v2/react-native/charts/progress/accessibility.d.ts.map +1 -0
- package/dist/v2/react-native/charts/progress/accessibility.js +71 -0
- package/dist/v2/react-native/charts/progress/animation.d.ts +36 -0
- package/dist/v2/react-native/charts/progress/animation.d.ts.map +1 -0
- package/dist/v2/react-native/charts/progress/animation.js +103 -0
- package/dist/v2/react-native/charts/progress/model.d.ts +14 -0
- package/dist/v2/react-native/charts/progress/model.d.ts.map +1 -0
- package/dist/v2/react-native/charts/progress/model.js +133 -0
- package/dist/v2/react-native/charts/progress/types.d.ts +72 -0
- package/dist/v2/react-native/charts/progress/types.d.ts.map +1 -0
- package/dist/v2/react-native/charts/progress/types.js +1 -0
- package/dist/v2/react-native/index.d.ts +24 -0
- package/dist/v2/react-native/index.d.ts.map +1 -0
- package/dist/v2/react-native/index.js +14 -0
- package/dist/v2/react-native/selection/ChartSelectionProvider.d.ts +27 -0
- package/dist/v2/react-native/selection/ChartSelectionProvider.d.ts.map +1 -0
- package/dist/v2/react-native/selection/ChartSelectionProvider.js +92 -0
- package/dist/v2/react-native/selection/index.d.ts +2 -0
- package/dist/v2/react-native/selection/index.d.ts.map +1 -0
- package/dist/v2/react-native/selection/index.js +1 -0
- package/dist/v2/react-native/selection/scope.d.ts +16 -0
- package/dist/v2/react-native/selection/scope.d.ts.map +1 -0
- package/dist/v2/react-native/selection/scope.js +18 -0
- package/dist/v2/react-native/theme/index.d.ts +4 -0
- package/dist/v2/react-native/theme/index.d.ts.map +1 -0
- package/dist/v2/react-native/theme/index.js +2 -0
- package/dist/v2/react-native/theme/presets.d.ts +84 -0
- package/dist/v2/react-native/theme/presets.d.ts.map +1 -0
- package/dist/v2/react-native/theme/presets.js +298 -0
- package/dist/v2/react-native/theme/provider.d.ts +20 -0
- package/dist/v2/react-native/theme/provider.d.ts.map +1 -0
- package/dist/v2/react-native/theme/provider.js +27 -0
- package/dist/v2/react-native/viewport/bounds.d.ts +7 -0
- package/dist/v2/react-native/viewport/bounds.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/bounds.js +7 -0
- package/dist/v2/react-native/viewport/config.d.ts +13 -0
- package/dist/v2/react-native/viewport/config.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/config.js +64 -0
- package/dist/v2/react-native/viewport/pan.d.ts +23 -0
- package/dist/v2/react-native/viewport/pan.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/pan.js +110 -0
- package/dist/v2/react-native/viewport/panResponder.d.ts +14 -0
- package/dist/v2/react-native/viewport/panResponder.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/panResponder.js +115 -0
- package/dist/v2/react-native/viewport/pinchZoom.d.ts +17 -0
- package/dist/v2/react-native/viewport/pinchZoom.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/pinchZoom.js +131 -0
- package/dist/v2/react-native/viewport/types.d.ts +55 -0
- package/dist/v2/react-native/viewport/types.d.ts.map +1 -0
- package/dist/v2/react-native/viewport/types.js +1 -0
- package/dist/v2/svg-renderer/capabilities.d.ts +3 -0
- package/dist/v2/svg-renderer/capabilities.d.ts.map +1 -0
- package/dist/v2/svg-renderer/capabilities.js +12 -0
- package/dist/v2/svg-renderer/clipPath.d.ts +4 -0
- package/dist/v2/svg-renderer/clipPath.d.ts.map +1 -0
- package/dist/v2/svg-renderer/clipPath.js +35 -0
- package/dist/v2/svg-renderer/defs.d.ts +6 -0
- package/dist/v2/svg-renderer/defs.d.ts.map +1 -0
- package/dist/v2/svg-renderer/defs.js +18 -0
- package/dist/v2/svg-renderer/ensureConsole.d.ts +4 -0
- package/dist/v2/svg-renderer/ensureConsole.d.ts.map +1 -0
- package/dist/v2/svg-renderer/ensureConsole.js +54 -0
- package/dist/v2/svg-renderer/hitRegions.d.ts +3 -0
- package/dist/v2/svg-renderer/hitRegions.d.ts.map +1 -0
- package/dist/v2/svg-renderer/hitRegions.js +6 -0
- package/dist/v2/svg-renderer/index.d.ts +14 -0
- package/dist/v2/svg-renderer/index.d.ts.map +1 -0
- package/dist/v2/svg-renderer/index.js +13 -0
- package/dist/v2/svg-renderer/layerOrder.d.ts +19 -0
- package/dist/v2/svg-renderer/layerOrder.d.ts.map +1 -0
- package/dist/v2/svg-renderer/layerOrder.js +18 -0
- package/dist/v2/svg-renderer/layers.d.ts +3 -0
- package/dist/v2/svg-renderer/layers.d.ts.map +1 -0
- package/dist/v2/svg-renderer/layers.js +4 -0
- package/dist/v2/svg-renderer/primitives.d.ts +12 -0
- package/dist/v2/svg-renderer/primitives.d.ts.map +1 -0
- package/dist/v2/svg-renderer/primitives.js +13 -0
- package/dist/v2/svg-renderer/renderer.d.ts +4 -0
- package/dist/v2/svg-renderer/renderer.d.ts.map +1 -0
- package/dist/v2/svg-renderer/renderer.js +24 -0
- package/dist/v2/svg-renderer/symbolGeometry.d.ts +6 -0
- package/dist/v2/svg-renderer/symbolGeometry.d.ts.map +1 -0
- package/dist/v2/svg-renderer/symbolGeometry.js +10 -0
- package/dist/v2/svg-renderer/symbols.d.ts +3 -0
- package/dist/v2/svg-renderer/symbols.d.ts.map +1 -0
- package/dist/v2/svg-renderer/symbols.js +23 -0
- package/dist/v2/svg-renderer/testIds.d.ts +2 -0
- package/dist/v2/svg-renderer/testIds.d.ts.map +1 -0
- package/dist/v2/svg-renderer/testIds.js +10 -0
- package/dist/v2/svg-renderer/textMeasurement.d.ts +4 -0
- package/dist/v2/svg-renderer/textMeasurement.d.ts.map +1 -0
- package/dist/v2/svg-renderer/textMeasurement.js +37 -0
- package/dist/v2/svg-renderer/types.d.ts +134 -0
- package/dist/v2/svg-renderer/types.d.ts.map +1 -0
- package/dist/v2/svg-renderer/types.js +1 -0
- package/package.json +46 -47
- package/v2/index.d.ts +1 -0
- package/v2/index.js +1 -0
- package/v2/package.json +6 -0
- package/scripts/chartkit-codemod.mjs +0 -256
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useMemo, useState } from "react";
|
|
3
|
+
import { StyleSheet, Text, View } from "react-native";
|
|
4
|
+
import { useChartKitTheme } from "../../theme";
|
|
5
|
+
import { useScopedChartSelection } from "../../selection/ChartSelectionProvider";
|
|
6
|
+
import { getLineChartRenderer as getPieChartRenderer } from "../line/renderer";
|
|
7
|
+
import { getPieChartAccessibilitySummary } from "./accessibility";
|
|
8
|
+
import { resolvePieChartActiveSliceConfig } from "./activeSlice";
|
|
9
|
+
import { buildPieChartSelectEvent, getPieChartInteractionConfig, getPieChartSliceAtPoint, isPieChartInteractionEnabled, normalizePieChartSelectedIndex } from "./interaction";
|
|
10
|
+
import { buildPieChartModel } from "./model";
|
|
11
|
+
import { usePieChartSelectionAnimation } from "./selectionAnimation";
|
|
12
|
+
import { PieChartSlices } from "./slices";
|
|
13
|
+
export { getPieChartAccessibilitySummary, getPieChartDataTable } from "./accessibility";
|
|
14
|
+
const defaultDonutInnerRadiusRatio = 0.58;
|
|
15
|
+
const defaultPieLegendGap = 8;
|
|
16
|
+
const RendererLayer = ({ children }) => _jsx(_Fragment, { children: children });
|
|
17
|
+
export const PieChart = (props) => {
|
|
18
|
+
const generatedChartId = useId().replace(/:/g, "");
|
|
19
|
+
const scopedChartId = props.id ?? generatedChartId;
|
|
20
|
+
const chartKitTheme = useChartKitTheme();
|
|
21
|
+
const interactionConfig = useMemo(() => getPieChartInteractionConfig(props.interaction), [props.interaction]);
|
|
22
|
+
const [gestureSelectedIndex, setGestureSelectedIndex] = useState(() => normalizePieChartSelectedIndex(props.defaultSelectedIndex));
|
|
23
|
+
const selectedIndex = normalizePieChartSelectedIndex(props.selectedIndex) ?? gestureSelectedIndex;
|
|
24
|
+
const model = useMemo(() => buildPieChartModel({ chartKitTheme, props, selectedIndex }), [chartKitTheme, props, selectedIndex]);
|
|
25
|
+
const { arcLabels, arcs, centerX, centerY, chartHeight, legendItems, legendVisible, resolvedTheme, radius, sliceSeparator, total } = model;
|
|
26
|
+
const legendConfig = typeof props.legend === "object" ? props.legend : {};
|
|
27
|
+
const activeSlice = resolvePieChartActiveSliceConfig({
|
|
28
|
+
activeSlice: props.activeSlice,
|
|
29
|
+
backgroundColor: resolvedTheme.background
|
|
30
|
+
});
|
|
31
|
+
const selectionAnimationState = usePieChartSelectionAnimation({
|
|
32
|
+
animation: props.selectionAnimation,
|
|
33
|
+
selectedIndex
|
|
34
|
+
});
|
|
35
|
+
const isInteractionEnabled = isPieChartInteractionEnabled(interactionConfig);
|
|
36
|
+
const hasSelectedSlice = selectedIndex !== undefined;
|
|
37
|
+
const clearGestureSelection = useCallback((reason) => {
|
|
38
|
+
if (props.selectedIndex === undefined) {
|
|
39
|
+
setGestureSelectedIndex(undefined);
|
|
40
|
+
}
|
|
41
|
+
interactionConfig.onDeselect?.({ reason });
|
|
42
|
+
}, [interactionConfig, props.selectedIndex]);
|
|
43
|
+
const clearSelectionFromScope = useCallback((reason) => {
|
|
44
|
+
if (reason === "scopeChange") {
|
|
45
|
+
if (props.selectedIndex === undefined) {
|
|
46
|
+
setGestureSelectedIndex(undefined);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
clearGestureSelection(reason);
|
|
51
|
+
}, [clearGestureSelection, props.selectedIndex]);
|
|
52
|
+
const scopedSelection = useScopedChartSelection({
|
|
53
|
+
chartId: scopedChartId,
|
|
54
|
+
controlled: props.selectedIndex !== undefined,
|
|
55
|
+
hasSelection: hasSelectedSlice,
|
|
56
|
+
onClear: clearSelectionFromScope
|
|
57
|
+
});
|
|
58
|
+
const clearScopedGestureSelection = useCallback((reason) => {
|
|
59
|
+
clearGestureSelection(reason);
|
|
60
|
+
if (reason !== "programmatic") {
|
|
61
|
+
scopedSelection.dismissSelection?.(reason);
|
|
62
|
+
}
|
|
63
|
+
}, [clearGestureSelection, scopedSelection]);
|
|
64
|
+
const handleResponderRelease = useCallback((event) => {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
const { locationX, locationY } = event.nativeEvent;
|
|
67
|
+
const tappedSlice = getPieChartSliceAtPoint({
|
|
68
|
+
arcs,
|
|
69
|
+
centerX,
|
|
70
|
+
centerY,
|
|
71
|
+
innerRadius: model.innerRadius,
|
|
72
|
+
locationX,
|
|
73
|
+
locationY,
|
|
74
|
+
radius
|
|
75
|
+
});
|
|
76
|
+
if (!tappedSlice) {
|
|
77
|
+
if (interactionConfig.deselectOnOutsidePress) {
|
|
78
|
+
clearScopedGestureSelection("outsidePress");
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (props.selectedIndex === undefined) {
|
|
83
|
+
setGestureSelectedIndex(tappedSlice.index);
|
|
84
|
+
}
|
|
85
|
+
scopedSelection.selectChart();
|
|
86
|
+
const selectEvent = buildPieChartSelectEvent(tappedSlice);
|
|
87
|
+
if (selectEvent) {
|
|
88
|
+
interactionConfig.onSelect?.(selectEvent);
|
|
89
|
+
}
|
|
90
|
+
}, [
|
|
91
|
+
arcs,
|
|
92
|
+
centerX,
|
|
93
|
+
centerY,
|
|
94
|
+
clearScopedGestureSelection,
|
|
95
|
+
interactionConfig,
|
|
96
|
+
model.innerRadius,
|
|
97
|
+
props.selectedIndex,
|
|
98
|
+
radius,
|
|
99
|
+
scopedSelection
|
|
100
|
+
]);
|
|
101
|
+
const responderProps = isInteractionEnabled
|
|
102
|
+
? {
|
|
103
|
+
onStartShouldSetResponder: () => true,
|
|
104
|
+
onResponderGrant: (event) => {
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
},
|
|
107
|
+
onResponderRelease: handleResponderRelease,
|
|
108
|
+
onResponderTerminationRequest: () => true
|
|
109
|
+
}
|
|
110
|
+
: {};
|
|
111
|
+
const centerLabelProps = {
|
|
112
|
+
arcs,
|
|
113
|
+
theme: resolvedTheme,
|
|
114
|
+
total
|
|
115
|
+
};
|
|
116
|
+
if (selectedIndex !== undefined) {
|
|
117
|
+
centerLabelProps.selectedIndex = selectedIndex;
|
|
118
|
+
const selectedArc = arcs[selectedIndex];
|
|
119
|
+
if (selectedArc) {
|
|
120
|
+
centerLabelProps.selectedArc = selectedArc;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const centerLabel = typeof props.centerLabel === "function"
|
|
124
|
+
? props.centerLabel(centerLabelProps)
|
|
125
|
+
: props.centerLabel;
|
|
126
|
+
const isTextCenterLabel = typeof centerLabel === "string" && centerLabel.length > 0;
|
|
127
|
+
const customCenterLabel = centerLabel !== undefined && centerLabel !== null && !isTextCenterLabel
|
|
128
|
+
? centerLabel
|
|
129
|
+
: null;
|
|
130
|
+
const accessibilityLabel = props.accessibilityLabel ??
|
|
131
|
+
getPieChartAccessibilitySummary({
|
|
132
|
+
colorKey: props.colorKey,
|
|
133
|
+
colors: props.colors,
|
|
134
|
+
data: props.data,
|
|
135
|
+
formatPercentage: props.formatPercentage,
|
|
136
|
+
formatValue: props.formatValue,
|
|
137
|
+
labelKey: props.labelKey,
|
|
138
|
+
valueKey: props.valueKey
|
|
139
|
+
});
|
|
140
|
+
const renderer = getPieChartRenderer(props.renderer ?? chartKitTheme.renderer);
|
|
141
|
+
const Layer = renderer.Layer ?? RendererLayer;
|
|
142
|
+
const Line = renderer.Line;
|
|
143
|
+
const Surface = renderer.Surface;
|
|
144
|
+
const SvgText = renderer.Text;
|
|
145
|
+
const canRenderText = renderer.capabilities?.text !== false;
|
|
146
|
+
return (_jsxs(View, { accessible: true, accessibilityLabel: accessibilityLabel, accessibilityRole: "image", style: [
|
|
147
|
+
styles.container,
|
|
148
|
+
{
|
|
149
|
+
backgroundColor: resolvedTheme.background,
|
|
150
|
+
height: props.height,
|
|
151
|
+
width: props.width
|
|
152
|
+
}
|
|
153
|
+
], testID: props.testID, ...responderProps, children: [_jsxs(View, { style: [
|
|
154
|
+
styles.plotArea,
|
|
155
|
+
{
|
|
156
|
+
height: chartHeight,
|
|
157
|
+
width: props.width
|
|
158
|
+
}
|
|
159
|
+
], children: [_jsxs(Surface, { width: props.width, height: chartHeight, children: [_jsx(Layer, { name: "background", children: _jsx(PieChartSlices, { activeSlice: activeSlice, arcs: arcs, centerX: centerX, centerY: centerY, innerRadius: model.innerRadius, radius: radius, renderer: renderer, resolvedTheme: resolvedTheme, selectedIndex: selectedIndex, selectionAnimationState: selectionAnimationState, sliceSeparator: sliceSeparator, testID: props.testID }) }), isTextCenterLabel && canRenderText ? (_jsx(Layer, { name: "overlays", children: _jsx(SvgText, { fill: resolvedTheme.text, fontSize: 16, fontWeight: "800", text: centerLabel, textAnchor: "middle", x: centerX, y: centerY + 5, ...(resolvedTheme.typography.fontFamily
|
|
160
|
+
? { fontFamily: resolvedTheme.typography.fontFamily }
|
|
161
|
+
: {}), children: centerLabel }) })) : null, arcLabels.length > 0 ? (_jsxs(Layer, { name: "interaction", children: [arcLabels.map((label) => label.connectorVisible ? (_jsx(Line, { x1: label.connectorStartX, x2: label.connectorBendX, y1: label.connectorStartY, y2: label.connectorBendY, stroke: label.connectorColor, strokeOpacity: label.connectorOpacity, strokeWidth: label.connectorWidth }, `${label.key}-connector-a`)) : null), arcLabels.map((label) => label.connectorVisible ? (_jsx(Line, { x1: label.connectorBendX, x2: label.connectorEndX, y1: label.connectorBendY, y2: label.connectorEndY, stroke: label.connectorColor, strokeOpacity: label.connectorOpacity, strokeWidth: label.connectorWidth }, `${label.key}-connector-b`)) : null), canRenderText
|
|
162
|
+
? arcLabels.map((label) => (_jsx(SvgText, { fill: resolvedTheme.text, fontSize: label.fontSize, fontWeight: "800", text: label.text, textAnchor: label.textAnchor, x: label.x, y: label.y + label.fontSize / 3, ...(resolvedTheme.typography.fontFamily
|
|
163
|
+
? { fontFamily: resolvedTheme.typography.fontFamily }
|
|
164
|
+
: {}), children: label.text }, label.key)))
|
|
165
|
+
: null] })) : null] }), customCenterLabel ? (_jsx(View, { pointerEvents: "none", style: [
|
|
166
|
+
styles.centerLabelOverlay,
|
|
167
|
+
{
|
|
168
|
+
height: Math.max(44, Math.min(76, radius * 0.82)),
|
|
169
|
+
top: centerY - Math.max(22, Math.min(38, radius * 0.41)),
|
|
170
|
+
width: props.width
|
|
171
|
+
}
|
|
172
|
+
], children: customCenterLabel })) : null] }), legendVisible && legendItems.length > 0 ? (_jsx(View, { style: [
|
|
173
|
+
styles.legend,
|
|
174
|
+
{
|
|
175
|
+
gap: legendConfig.itemGap ?? defaultPieLegendGap
|
|
176
|
+
}
|
|
177
|
+
], children: legendItems.map((item, index) => {
|
|
178
|
+
const selected = selectedIndex === item.index;
|
|
179
|
+
const renderedItem = legendConfig.renderItem?.({
|
|
180
|
+
index,
|
|
181
|
+
item,
|
|
182
|
+
selected,
|
|
183
|
+
theme: resolvedTheme
|
|
184
|
+
});
|
|
185
|
+
return (_jsx(View, { style: [
|
|
186
|
+
styles.legendItem,
|
|
187
|
+
{
|
|
188
|
+
maxWidth: legendConfig.maxItemWidth ?? "48%"
|
|
189
|
+
}
|
|
190
|
+
], children: renderedItem ?? (_jsxs(_Fragment, { children: [_jsx(View, { style: [
|
|
191
|
+
styles.legendSwatch,
|
|
192
|
+
{ backgroundColor: item.color }
|
|
193
|
+
] }), _jsx(Text, { numberOfLines: 1, style: [styles.legendText, { color: resolvedTheme.text }], children: item.label }), _jsx(Text, { numberOfLines: 1, style: [
|
|
194
|
+
styles.legendValue,
|
|
195
|
+
{ color: resolvedTheme.mutedText }
|
|
196
|
+
], children: item.percentageLabel })] })) }, item.key));
|
|
197
|
+
}) })) : null] }));
|
|
198
|
+
};
|
|
199
|
+
export const DonutChart = (props) => (_jsx(PieChart, { ...props, innerRadiusRatio: props.innerRadiusRatio ?? defaultDonutInnerRadiusRatio }));
|
|
200
|
+
const styles = StyleSheet.create({
|
|
201
|
+
container: {
|
|
202
|
+
borderRadius: 8,
|
|
203
|
+
overflow: "hidden"
|
|
204
|
+
},
|
|
205
|
+
centerLabelOverlay: {
|
|
206
|
+
alignItems: "center",
|
|
207
|
+
justifyContent: "center",
|
|
208
|
+
left: 0,
|
|
209
|
+
position: "absolute"
|
|
210
|
+
},
|
|
211
|
+
plotArea: {
|
|
212
|
+
position: "relative"
|
|
213
|
+
},
|
|
214
|
+
legend: {
|
|
215
|
+
alignContent: "center",
|
|
216
|
+
flexDirection: "row",
|
|
217
|
+
flexWrap: "wrap",
|
|
218
|
+
gap: defaultPieLegendGap,
|
|
219
|
+
justifyContent: "center",
|
|
220
|
+
paddingHorizontal: 8,
|
|
221
|
+
paddingTop: 4
|
|
222
|
+
},
|
|
223
|
+
legendItem: {
|
|
224
|
+
alignItems: "center",
|
|
225
|
+
flexDirection: "row",
|
|
226
|
+
gap: 5,
|
|
227
|
+
maxWidth: "48%",
|
|
228
|
+
minHeight: 18
|
|
229
|
+
},
|
|
230
|
+
legendSwatch: {
|
|
231
|
+
borderRadius: 4,
|
|
232
|
+
height: 8,
|
|
233
|
+
width: 8
|
|
234
|
+
},
|
|
235
|
+
legendText: {
|
|
236
|
+
flexShrink: 1,
|
|
237
|
+
fontSize: 11,
|
|
238
|
+
fontWeight: "700"
|
|
239
|
+
},
|
|
240
|
+
legendValue: {
|
|
241
|
+
fontSize: 10,
|
|
242
|
+
fontWeight: "700"
|
|
243
|
+
}
|
|
244
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PieChartProps } from "./types";
|
|
2
|
+
export type PieChartDataTableRow<TData = unknown> = {
|
|
3
|
+
color?: string | undefined;
|
|
4
|
+
formattedValue: string;
|
|
5
|
+
index: number;
|
|
6
|
+
label: string;
|
|
7
|
+
percentage: number;
|
|
8
|
+
percentageLabel: string;
|
|
9
|
+
raw: TData;
|
|
10
|
+
value: number | null;
|
|
11
|
+
};
|
|
12
|
+
export type PieChartDataTable<TData = unknown> = {
|
|
13
|
+
rows: Array<PieChartDataTableRow<TData>>;
|
|
14
|
+
total: number;
|
|
15
|
+
};
|
|
16
|
+
type PieChartAccessibilityInput<TData extends Record<string, unknown>> = {
|
|
17
|
+
colorKey?: PieChartProps<TData>["colorKey"] | undefined;
|
|
18
|
+
colors?: PieChartProps<TData>["colors"] | undefined;
|
|
19
|
+
data: PieChartProps<TData>["data"];
|
|
20
|
+
formatPercentage?: PieChartProps<TData>["formatPercentage"] | undefined;
|
|
21
|
+
formatValue?: PieChartProps<TData>["formatValue"] | undefined;
|
|
22
|
+
labelKey?: PieChartProps<TData>["labelKey"] | undefined;
|
|
23
|
+
valueKey: PieChartProps<TData>["valueKey"];
|
|
24
|
+
};
|
|
25
|
+
export declare const getPieChartDataTable: <TData extends Record<string, unknown>>({ colorKey, colors, data, formatPercentage, formatValue, labelKey, valueKey }: PieChartAccessibilityInput<TData>) => PieChartDataTable<TData>;
|
|
26
|
+
export declare const getPieChartAccessibilitySummary: <TData extends Record<string, unknown>>(input: PieChartAccessibilityInput<TData>) => string;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=accessibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,OAAO,IAAI;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,KAAK,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,OAAO,IAAI;IAC/C,IAAI,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,0BAA0B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACvE,QAAQ,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACxD,MAAM,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACpD,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IACxE,WAAW,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACxD,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;CAC5C,CAAC;AA4BF,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,+EAQzE,0BAA0B,CAAC,KAAK,CAAC,KAAG,iBAAiB,CAAC,KAAK,CAoC7D,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAErC,OAAO,0BAA0B,CAAC,KAAK,CAAC,WAiBzC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const defaultLabelKey = "name";
|
|
2
|
+
const defaultColorKey = "color";
|
|
3
|
+
const defaultFormatValue = (value) => String(value);
|
|
4
|
+
const defaultFormatPercentage = (percentage) => `${Math.round(percentage * 100)}%`;
|
|
5
|
+
const getStringValue = (value, fallback) => typeof value === "string" && value.length > 0 ? value : fallback;
|
|
6
|
+
const getColorValue = (value, fallback) => typeof value === "string" && value.length > 0 ? value : fallback;
|
|
7
|
+
const getPieValue = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0
|
|
8
|
+
? value
|
|
9
|
+
: null;
|
|
10
|
+
const getMaxRow = (rows) => rows.reduce((max, row) => typeof row.value === "number" && (!max || row.value > (max.value ?? 0))
|
|
11
|
+
? row
|
|
12
|
+
: max, undefined);
|
|
13
|
+
export const getPieChartDataTable = ({ colorKey, colors, data, formatPercentage = defaultFormatPercentage, formatValue = defaultFormatValue, labelKey, valueKey }) => {
|
|
14
|
+
const values = data.map((item) => getPieValue(item[valueKey]));
|
|
15
|
+
const total = values.reduce((sum, value) => (value === null ? sum : sum + value), 0);
|
|
16
|
+
return {
|
|
17
|
+
total,
|
|
18
|
+
rows: data.map((item, index) => {
|
|
19
|
+
const value = values[index] ?? null;
|
|
20
|
+
const percentage = value !== null && total > 0 ? value / total : 0;
|
|
21
|
+
const color = getColorValue(item[colorKey ?? defaultColorKey], colors?.[index]);
|
|
22
|
+
const row = {
|
|
23
|
+
formattedValue: value === null ? "No value" : formatValue(value),
|
|
24
|
+
index,
|
|
25
|
+
label: getStringValue(item[labelKey ?? defaultLabelKey], `Slice ${index + 1}`),
|
|
26
|
+
percentage,
|
|
27
|
+
percentageLabel: formatPercentage(percentage),
|
|
28
|
+
raw: item,
|
|
29
|
+
value
|
|
30
|
+
};
|
|
31
|
+
if (color !== undefined) {
|
|
32
|
+
row.color = color;
|
|
33
|
+
}
|
|
34
|
+
return row;
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export const getPieChartAccessibilitySummary = (input) => {
|
|
39
|
+
const table = getPieChartDataTable(input);
|
|
40
|
+
const definedRows = table.rows.filter((row) => row.value !== null);
|
|
41
|
+
if (definedRows.length === 0) {
|
|
42
|
+
return "Pie chart with no defined slices.";
|
|
43
|
+
}
|
|
44
|
+
const maxRow = getMaxRow(definedRows);
|
|
45
|
+
const intro = `Pie chart with ${definedRows.length} ${definedRows.length === 1 ? "slice" : "slices"}. Total ${input.formatValue?.(table.total) ?? defaultFormatValue(table.total)}.`;
|
|
46
|
+
return maxRow
|
|
47
|
+
? `${intro} Largest slice is ${maxRow.label} at ${maxRow.percentageLabel}.`
|
|
48
|
+
: intro;
|
|
49
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PieChartActiveSliceConfig, PieChartProps } from "./types";
|
|
2
|
+
export type ResolvedPieChartActiveSliceConfig = Required<PieChartActiveSliceConfig>;
|
|
3
|
+
export declare const resolvePieChartActiveSliceConfig: ({ activeSlice, backgroundColor }: {
|
|
4
|
+
activeSlice: PieChartActiveSliceConfig | undefined;
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
}) => ResolvedPieChartActiveSliceConfig;
|
|
7
|
+
export declare const shouldReservePieChartActiveSliceGutter: <TData extends Record<string, unknown>>({ props, selectedIndex }: {
|
|
8
|
+
props: PieChartProps<TData>;
|
|
9
|
+
selectedIndex: number | undefined;
|
|
10
|
+
}) => boolean;
|
|
11
|
+
export declare const getPieChartActiveSliceGutter: ({ activeSlice, radius }: {
|
|
12
|
+
activeSlice: ResolvedPieChartActiveSliceConfig;
|
|
13
|
+
radius: number;
|
|
14
|
+
}) => number;
|
|
15
|
+
//# sourceMappingURL=activeSlice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activeSlice.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/activeSlice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAEzB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,iCAAiC,GAC3C,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AAEtC,eAAO,MAAM,gCAAgC,GAAI,kCAG9C;IACD,WAAW,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACnD,eAAe,EAAE,MAAM,CAAC;CACzB,KAAG,iCAOF,CAAC;AAgBH,eAAO,MAAM,sCAAsC,GACjD,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,0BAGC;IACD,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,YAKqC,CAAC;AAEvC,eAAO,MAAM,4BAA4B,GAAI,yBAG1C;IACD,WAAW,EAAE,iCAAiC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB,WAME,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const resolvePieChartActiveSliceConfig = ({ activeSlice, backgroundColor }) => ({
|
|
2
|
+
activeOpacity: activeSlice?.activeOpacity ?? 1,
|
|
3
|
+
inactiveOpacity: activeSlice?.inactiveOpacity ?? 0.62,
|
|
4
|
+
activeOffset: activeSlice?.activeOffset ?? 5,
|
|
5
|
+
activeScale: activeSlice?.activeScale ?? 1.025,
|
|
6
|
+
strokeColor: activeSlice?.strokeColor ?? backgroundColor,
|
|
7
|
+
strokeWidth: activeSlice?.strokeWidth ?? 0
|
|
8
|
+
});
|
|
9
|
+
const hasTapInteraction = (interaction) => {
|
|
10
|
+
if (interaction === "tap") {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (!interaction || interaction === "none") {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return interaction.mode === undefined || interaction.mode === "tap";
|
|
17
|
+
};
|
|
18
|
+
export const shouldReservePieChartActiveSliceGutter = ({ props, selectedIndex }) => props.activeSlice !== undefined ||
|
|
19
|
+
selectedIndex !== undefined ||
|
|
20
|
+
props.defaultSelectedIndex !== undefined ||
|
|
21
|
+
props.selectedIndex !== undefined ||
|
|
22
|
+
hasTapInteraction(props.interaction);
|
|
23
|
+
export const getPieChartActiveSliceGutter = ({ activeSlice, radius }) => Math.ceil(activeSlice.activeOffset +
|
|
24
|
+
radius * Math.max(0, activeSlice.activeScale - 1) +
|
|
25
|
+
Math.max(0, activeSlice.strokeWidth) / 2 +
|
|
26
|
+
2);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { PieArcModel } from "../../../core/index";
|
|
2
|
+
import type { ResolvedCartesianChartTheme } from "../../theme";
|
|
3
|
+
import type { PieChartArcLabelModel, PieChartArcLabelsConfig, PieChartArcLabelRenderProps, PieChartLegendItem } from "./types";
|
|
4
|
+
export type ResolvedPieChartArcLabelsConfig<TData = unknown> = {
|
|
5
|
+
connectorColor: string | undefined;
|
|
6
|
+
connectorLength: number;
|
|
7
|
+
connectorLines: boolean;
|
|
8
|
+
connectorOpacity: number;
|
|
9
|
+
connectorWidth: number;
|
|
10
|
+
fontSize: number;
|
|
11
|
+
formatLabel: ((props: PieChartArcLabelRenderProps<TData>) => string | null) | undefined;
|
|
12
|
+
minPercentage: number;
|
|
13
|
+
offset: number;
|
|
14
|
+
reservedWidth: number;
|
|
15
|
+
visible: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare const getPieChartArcLabelsVisible: <TData = unknown>(arcLabels: boolean | PieChartArcLabelsConfig<TData> | undefined) => boolean;
|
|
18
|
+
export declare const resolvePieChartArcLabelsConfig: <TData = unknown>(arcLabels: boolean | PieChartArcLabelsConfig<TData> | undefined) => ResolvedPieChartArcLabelsConfig<TData>;
|
|
19
|
+
export declare const getPieChartArcLabelHorizontalReserve: <TData>(config: ResolvedPieChartArcLabelsConfig<TData>) => number;
|
|
20
|
+
export declare const buildPieChartArcLabels: <TData>({ arcs, chartHeight, chartWidth, centerX, centerY, config, legendItems, radius, selectedIndex, theme }: {
|
|
21
|
+
arcs: Array<PieArcModel<TData>>;
|
|
22
|
+
chartHeight: number;
|
|
23
|
+
chartWidth: number;
|
|
24
|
+
centerX: number;
|
|
25
|
+
centerY: number;
|
|
26
|
+
config: ResolvedPieChartArcLabelsConfig<TData>;
|
|
27
|
+
legendItems: Array<PieChartLegendItem<TData>>;
|
|
28
|
+
radius: number;
|
|
29
|
+
selectedIndex: number | undefined;
|
|
30
|
+
theme: ResolvedCartesianChartTheme;
|
|
31
|
+
}) => Array<PieChartArcLabelModel<TData>>;
|
|
32
|
+
//# sourceMappingURL=arcLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arcLabels.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/arcLabels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAajB,MAAM,MAAM,+BAA+B,CAAC,KAAK,GAAG,OAAO,IAAI;IAC7D,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EACP,CAAC,CAAC,KAAK,EAAE,2BAA2B,CAAC,KAAK,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAC9D,SAAS,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,KAAK,GAAG,OAAO,EACzD,WAAW,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,SAAS,YAWhE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,KAAK,GAAG,OAAO,EAC5D,WAAW,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,SAAS,KAC9D,+BAA+B,CAAC,KAAK,CA0CvC,CAAC;AAqBF,eAAO,MAAM,oCAAoC,GAAI,KAAK,EACxD,QAAQ,+BAA+B,CAAC,KAAK,CAAC,WACJ,CAAC;AAqD7C,eAAO,MAAM,sBAAsB,GAAI,KAAK,EAAE,wGAW3C;IACD,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,+BAA+B,CAAC,KAAK,CAAC,CAAC;IAC/C,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,2BAA2B,CAAC;CACpC,KAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CA2GrC,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
const defaultArcLabelFontSize = 11;
|
|
2
|
+
const defaultArcLabelMinPercentage = 0.07;
|
|
3
|
+
const defaultArcLabelOffset = 10;
|
|
4
|
+
const defaultConnectorLength = 12;
|
|
5
|
+
const defaultConnectorOpacity = 0.84;
|
|
6
|
+
const defaultConnectorWidth = 1.35;
|
|
7
|
+
const defaultReservedWidth = 86;
|
|
8
|
+
const minConnectorLabelGap = 6;
|
|
9
|
+
const labelEdgePadding = 10;
|
|
10
|
+
const estimatedCharacterWidthRatio = 0.78;
|
|
11
|
+
export const getPieChartArcLabelsVisible = (arcLabels) => {
|
|
12
|
+
if (arcLabels === undefined || arcLabels === false) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (typeof arcLabels === "object") {
|
|
16
|
+
return arcLabels.visible !== false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
export const resolvePieChartArcLabelsConfig = (arcLabels) => {
|
|
21
|
+
const config = typeof arcLabels === "object" ? arcLabels : {};
|
|
22
|
+
return {
|
|
23
|
+
connectorColor: config.connectorColor,
|
|
24
|
+
connectorLength: typeof config.connectorLength === "number" &&
|
|
25
|
+
Number.isFinite(config.connectorLength)
|
|
26
|
+
? Math.max(0, config.connectorLength)
|
|
27
|
+
: defaultConnectorLength,
|
|
28
|
+
connectorLines: config.connectorLines !== false,
|
|
29
|
+
connectorOpacity: typeof config.connectorOpacity === "number" &&
|
|
30
|
+
Number.isFinite(config.connectorOpacity)
|
|
31
|
+
? clamp(config.connectorOpacity, 0, 1)
|
|
32
|
+
: defaultConnectorOpacity,
|
|
33
|
+
connectorWidth: typeof config.connectorWidth === "number" &&
|
|
34
|
+
Number.isFinite(config.connectorWidth)
|
|
35
|
+
? Math.max(0, config.connectorWidth)
|
|
36
|
+
: defaultConnectorWidth,
|
|
37
|
+
fontSize: typeof config.fontSize === "number" && Number.isFinite(config.fontSize)
|
|
38
|
+
? Math.max(8, config.fontSize)
|
|
39
|
+
: defaultArcLabelFontSize,
|
|
40
|
+
formatLabel: config.formatLabel,
|
|
41
|
+
minPercentage: typeof config.minPercentage === "number" &&
|
|
42
|
+
Number.isFinite(config.minPercentage)
|
|
43
|
+
? Math.max(0, config.minPercentage)
|
|
44
|
+
: defaultArcLabelMinPercentage,
|
|
45
|
+
offset: typeof config.offset === "number" && Number.isFinite(config.offset)
|
|
46
|
+
? Math.max(0, config.offset)
|
|
47
|
+
: defaultArcLabelOffset,
|
|
48
|
+
reservedWidth: typeof config.reservedWidth === "number" &&
|
|
49
|
+
Number.isFinite(config.reservedWidth)
|
|
50
|
+
? Math.max(0, config.reservedWidth)
|
|
51
|
+
: defaultReservedWidth,
|
|
52
|
+
visible: getPieChartArcLabelsVisible(arcLabels)
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const getMidAngle = (arc) => arc.startAngle + (arc.endAngle - arc.startAngle) / 2;
|
|
56
|
+
const clamp = (value, min, max) => {
|
|
57
|
+
if (max < min) {
|
|
58
|
+
return min;
|
|
59
|
+
}
|
|
60
|
+
return Math.min(Math.max(value, min), max);
|
|
61
|
+
};
|
|
62
|
+
const estimateLabelWidth = ({ fontSize, text }) => text.length * fontSize * estimatedCharacterWidthRatio;
|
|
63
|
+
export const getPieChartArcLabelHorizontalReserve = (config) => config.reservedWidth + labelEdgePadding;
|
|
64
|
+
const spreadArcLabelsOnSide = ({ chartHeight, labels, minGap }) => {
|
|
65
|
+
const minY = labelEdgePadding + minGap / 2;
|
|
66
|
+
const maxY = Math.max(minY, chartHeight - labelEdgePadding);
|
|
67
|
+
const sorted = [...labels].sort((a, b) => a.y - b.y);
|
|
68
|
+
let cursorY = minY;
|
|
69
|
+
sorted.forEach((label) => {
|
|
70
|
+
const y = clamp(Math.max(label.y, cursorY), minY, maxY);
|
|
71
|
+
label.y = y;
|
|
72
|
+
label.connectorBendY = y;
|
|
73
|
+
label.connectorEndY = y;
|
|
74
|
+
cursorY = y + minGap;
|
|
75
|
+
});
|
|
76
|
+
for (let index = sorted.length - 2; index >= 0; index -= 1) {
|
|
77
|
+
const label = sorted[index];
|
|
78
|
+
const nextLabel = sorted[index + 1];
|
|
79
|
+
if (!label || !nextLabel) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const maxAllowedY = nextLabel.y - minGap;
|
|
83
|
+
if (label.y > maxAllowedY) {
|
|
84
|
+
label.y = clamp(maxAllowedY, minY, maxY);
|
|
85
|
+
label.connectorBendY = label.y;
|
|
86
|
+
label.connectorEndY = label.y;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const alignArcLabelConnectors = (labels) => {
|
|
91
|
+
labels.forEach((label) => {
|
|
92
|
+
label.connectorBendX =
|
|
93
|
+
label.connectorStartX + (label.connectorEndX - label.connectorStartX) / 2;
|
|
94
|
+
label.connectorBendY =
|
|
95
|
+
label.connectorStartY + (label.connectorEndY - label.connectorStartY) / 2;
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
export const buildPieChartArcLabels = ({ arcs, chartHeight, chartWidth, centerX, centerY, config, legendItems, radius, selectedIndex, theme }) => {
|
|
99
|
+
if (!config.visible) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const legendByIndex = new Map(legendItems.map((item) => [item.index, item]));
|
|
103
|
+
const labels = arcs.flatMap((arc) => {
|
|
104
|
+
const legendItem = legendByIndex.get(arc.index);
|
|
105
|
+
if (!arc.defined || !legendItem || arc.percentage < config.minPercentage) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const angle = getMidAngle(arc);
|
|
109
|
+
const side = Math.cos(angle) >= 0 ? 1 : -1;
|
|
110
|
+
const startRadius = radius;
|
|
111
|
+
const bendRadius = radius + config.offset;
|
|
112
|
+
const preferredLabelX = centerX + side * (radius + config.offset + config.connectorLength + 2);
|
|
113
|
+
const labelY = centerY + bendRadius * Math.sin(angle);
|
|
114
|
+
const renderProps = {
|
|
115
|
+
arc,
|
|
116
|
+
color: legendItem.color,
|
|
117
|
+
index: legendItem.index,
|
|
118
|
+
label: legendItem.label,
|
|
119
|
+
percentageLabel: legendItem.percentageLabel,
|
|
120
|
+
selected: selectedIndex === arc.index,
|
|
121
|
+
theme,
|
|
122
|
+
valueLabel: legendItem.valueLabel
|
|
123
|
+
};
|
|
124
|
+
const text = config.formatLabel?.(renderProps) ??
|
|
125
|
+
`${legendItem.label} ${legendItem.percentageLabel}`;
|
|
126
|
+
if (text.length === 0) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const labelWidth = estimateLabelWidth({ fontSize: config.fontSize, text });
|
|
130
|
+
const outsideRightX = centerX +
|
|
131
|
+
radius +
|
|
132
|
+
config.offset +
|
|
133
|
+
config.connectorLength +
|
|
134
|
+
minConnectorLabelGap;
|
|
135
|
+
const outsideLeftX = centerX -
|
|
136
|
+
radius -
|
|
137
|
+
config.offset -
|
|
138
|
+
config.connectorLength -
|
|
139
|
+
minConnectorLabelGap;
|
|
140
|
+
const rightEdgeLabelX = chartWidth - labelEdgePadding - labelWidth;
|
|
141
|
+
const leftEdgeLabelX = labelEdgePadding + labelWidth;
|
|
142
|
+
const labelX = side > 0
|
|
143
|
+
? outsideRightX <= rightEdgeLabelX
|
|
144
|
+
? clamp(preferredLabelX, outsideRightX, rightEdgeLabelX)
|
|
145
|
+
: rightEdgeLabelX
|
|
146
|
+
: leftEdgeLabelX <= outsideLeftX
|
|
147
|
+
? clamp(preferredLabelX, leftEdgeLabelX, outsideLeftX)
|
|
148
|
+
: leftEdgeLabelX;
|
|
149
|
+
const rawConnectorEndX = labelX - side * 4;
|
|
150
|
+
const outerSliceEdgeX = centerX + side * radius;
|
|
151
|
+
const connectorEndX = side > 0
|
|
152
|
+
? Math.max(rawConnectorEndX, outerSliceEdgeX + 1)
|
|
153
|
+
: Math.min(rawConnectorEndX, outerSliceEdgeX - 1);
|
|
154
|
+
return [
|
|
155
|
+
{
|
|
156
|
+
arc,
|
|
157
|
+
color: legendItem.color,
|
|
158
|
+
connectorColor: config.connectorColor ?? theme.mutedText,
|
|
159
|
+
connectorBendX: centerX + side * bendRadius * Math.cos(angle),
|
|
160
|
+
connectorBendY: centerY + bendRadius * Math.sin(angle),
|
|
161
|
+
connectorEndX,
|
|
162
|
+
connectorEndY: labelY,
|
|
163
|
+
connectorOpacity: config.connectorOpacity,
|
|
164
|
+
connectorStartX: centerX + startRadius * Math.cos(angle),
|
|
165
|
+
connectorStartY: centerY + startRadius * Math.sin(angle),
|
|
166
|
+
connectorVisible: config.connectorLines,
|
|
167
|
+
connectorWidth: config.connectorWidth,
|
|
168
|
+
fontSize: config.fontSize,
|
|
169
|
+
index: arc.index,
|
|
170
|
+
key: `${arc.index}-${arc.label}-arc-label`,
|
|
171
|
+
text,
|
|
172
|
+
textAnchor: side > 0 ? "start" : "end",
|
|
173
|
+
x: labelX,
|
|
174
|
+
y: labelY
|
|
175
|
+
}
|
|
176
|
+
];
|
|
177
|
+
});
|
|
178
|
+
const minGap = config.fontSize + 5;
|
|
179
|
+
spreadArcLabelsOnSide({
|
|
180
|
+
chartHeight,
|
|
181
|
+
labels: labels.filter((label) => label.textAnchor === "start"),
|
|
182
|
+
minGap
|
|
183
|
+
});
|
|
184
|
+
spreadArcLabelsOnSide({
|
|
185
|
+
chartHeight,
|
|
186
|
+
labels: labels.filter((label) => label.textAnchor === "end"),
|
|
187
|
+
minGap
|
|
188
|
+
});
|
|
189
|
+
alignArcLabelConnectors(labels);
|
|
190
|
+
return labels;
|
|
191
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PieArcModel } from "../../../core/index";
|
|
2
|
+
import type { PieChartInteraction, PieChartInteractionConfig, PieChartSelectEvent } from "./types";
|
|
3
|
+
type PieChartPoint = {
|
|
4
|
+
locationX: number;
|
|
5
|
+
locationY: number;
|
|
6
|
+
};
|
|
7
|
+
type PieChartHitTestOptions<TData = unknown> = PieChartPoint & {
|
|
8
|
+
arcs: Array<PieArcModel<TData>>;
|
|
9
|
+
centerX: number;
|
|
10
|
+
centerY: number;
|
|
11
|
+
innerRadius: number;
|
|
12
|
+
radius: number;
|
|
13
|
+
};
|
|
14
|
+
export type ResolvedPieChartInteractionConfig<TData = unknown> = {
|
|
15
|
+
mode: "none" | "tap";
|
|
16
|
+
deselectOnOutsidePress: boolean;
|
|
17
|
+
onDeselect: PieChartInteractionConfig<TData>["onDeselect"] | undefined;
|
|
18
|
+
onSelect: PieChartInteractionConfig<TData>["onSelect"] | undefined;
|
|
19
|
+
};
|
|
20
|
+
export declare const getPieChartInteractionConfig: <TData>(interaction?: PieChartInteraction<TData> | undefined) => ResolvedPieChartInteractionConfig<TData>;
|
|
21
|
+
export declare const isPieChartInteractionEnabled: <TData>(config: ResolvedPieChartInteractionConfig<TData>) => boolean;
|
|
22
|
+
export declare const normalizePieChartSelectedIndex: (selectedIndex: number | undefined) => number | undefined;
|
|
23
|
+
export declare const getPieChartSliceAtPoint: <TData>({ arcs, centerX, centerY, innerRadius, locationX, locationY, radius }: PieChartHitTestOptions<TData>) => PieArcModel<TData> | undefined;
|
|
24
|
+
export declare const buildPieChartSelectEvent: <TData>(arc: PieArcModel<TData> | undefined) => PieChartSelectEvent<TData> | undefined;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,sBAAsB,CAAC,KAAK,GAAG,OAAO,IAAI,aAAa,GAAG;IAC7D,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iCAAiC,CAAC,KAAK,GAAG,OAAO,IAAI;IAC/D,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;IAChC,UAAU,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACpE,CAAC;AAkBF,eAAO,MAAM,4BAA4B,GAAI,KAAK,EAChD,cAAc,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,KACnD,iCAAiC,CAAC,KAAK,CAyBzC,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,KAAK,EAChD,QAAQ,iCAAiC,CAAC,KAAK,CAAC,YACxB,CAAC;AAE3B,eAAO,MAAM,8BAA8B,GACzC,eAAe,MAAM,GAAG,SAAS,uBAIpB,CAAC;AAEhB,eAAO,MAAM,uBAAuB,GAAI,KAAK,EAAE,uEAQ5C,sBAAsB,CAAC,KAAK,CAAC,mCAuB/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,KAAK,EAC5C,KAAK,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,KAClC,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAa/B,CAAC"}
|