@mui/x-charts 7.7.0 → 7.7.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.
Files changed (137) hide show
  1. package/BarChart/BarChart.js +21 -104
  2. package/BarChart/BarLabel/BarLabelPlot.d.ts +0 -3
  3. package/BarChart/BarLabel/BarLabelPlot.js +1 -24
  4. package/BarChart/BarPlot.js +2 -2
  5. package/BarChart/checkScaleErrors.d.ts +5 -9
  6. package/BarChart/types.d.ts +2 -2
  7. package/BarChart/useBarChartProps.d.ts +102 -0
  8. package/BarChart/useBarChartProps.js +143 -0
  9. package/CHANGELOG.md +82 -0
  10. package/ChartContainer/ChartContainer.d.ts +1 -1
  11. package/ChartContainer/ChartContainer.js +6 -10
  12. package/ChartContainer/useChartContainerHooks.d.ts +11 -0
  13. package/ChartContainer/useChartContainerHooks.js +34 -0
  14. package/ChartContainer/usePluginsMerge.d.ts +1 -2
  15. package/ChartsAxis/ChartsAxis.js +2 -2
  16. package/ChartsAxisHighlight/ChartsAxisHighlight.js +2 -2
  17. package/ChartsGrid/ChartsGrid.js +2 -2
  18. package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  19. package/ChartsTooltip/ChartsAxisTooltipContent.js +2 -2
  20. package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  21. package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  22. package/ChartsXAxis/ChartsXAxis.js +2 -2
  23. package/ChartsYAxis/ChartsYAxis.js +2 -2
  24. package/LineChart/AreaPlot.js +2 -2
  25. package/LineChart/LineChart.js +24 -106
  26. package/LineChart/LineHighlightPlot.js +2 -2
  27. package/LineChart/LinePlot.js +2 -2
  28. package/LineChart/MarkPlot.js +2 -2
  29. package/LineChart/useLineChartProps.d.ts +117 -0
  30. package/LineChart/useLineChartProps.js +152 -0
  31. package/ScatterChart/ScatterChart.js +20 -75
  32. package/ScatterChart/ScatterPlot.js +2 -2
  33. package/ScatterChart/useScatterChartProps.d.ts +86 -0
  34. package/ScatterChart/useScatterChartProps.js +116 -0
  35. package/context/CartesianProvider/CartesianContext.d.ts +25 -0
  36. package/context/CartesianProvider/CartesianContext.js +21 -0
  37. package/context/CartesianProvider/CartesianProvider.d.ts +34 -0
  38. package/context/CartesianProvider/CartesianProvider.js +44 -0
  39. package/context/CartesianProvider/computeValue.d.ts +19 -0
  40. package/context/CartesianProvider/computeValue.js +89 -0
  41. package/context/CartesianProvider/getAxisExtremum.d.ts +4 -0
  42. package/context/CartesianProvider/getAxisExtremum.js +28 -0
  43. package/context/CartesianProvider/index.d.ts +9 -0
  44. package/context/CartesianProvider/index.js +51 -0
  45. package/context/CartesianProvider/normalizeAxis.d.ts +5 -0
  46. package/context/CartesianProvider/normalizeAxis.js +23 -0
  47. package/context/CartesianProvider/useCartesianContext.d.ts +2 -0
  48. package/context/CartesianProvider/useCartesianContext.js +17 -0
  49. package/context/ColorProvider.d.ts +2 -2
  50. package/esm/BarChart/BarChart.js +21 -104
  51. package/esm/BarChart/BarLabel/BarLabelPlot.js +0 -23
  52. package/esm/BarChart/BarPlot.js +2 -2
  53. package/esm/BarChart/useBarChartProps.js +136 -0
  54. package/esm/ChartContainer/ChartContainer.js +5 -9
  55. package/esm/ChartContainer/useChartContainerHooks.js +24 -0
  56. package/esm/ChartsAxis/ChartsAxis.js +2 -2
  57. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +2 -2
  58. package/esm/ChartsGrid/ChartsGrid.js +2 -2
  59. package/esm/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  60. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +2 -2
  61. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  62. package/esm/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  63. package/esm/ChartsXAxis/ChartsXAxis.js +2 -2
  64. package/esm/ChartsYAxis/ChartsYAxis.js +2 -2
  65. package/esm/LineChart/AreaPlot.js +2 -2
  66. package/esm/LineChart/LineChart.js +24 -106
  67. package/esm/LineChart/LineHighlightPlot.js +2 -2
  68. package/esm/LineChart/LinePlot.js +2 -2
  69. package/esm/LineChart/MarkPlot.js +2 -2
  70. package/esm/LineChart/useLineChartProps.js +144 -0
  71. package/esm/ScatterChart/ScatterChart.js +20 -75
  72. package/esm/ScatterChart/ScatterPlot.js +2 -2
  73. package/esm/ScatterChart/useScatterChartProps.js +108 -0
  74. package/esm/context/CartesianProvider/CartesianContext.js +13 -0
  75. package/esm/context/CartesianProvider/CartesianProvider.js +37 -0
  76. package/esm/context/CartesianProvider/computeValue.js +82 -0
  77. package/esm/context/CartesianProvider/getAxisExtremum.js +21 -0
  78. package/esm/context/CartesianProvider/index.js +10 -0
  79. package/esm/context/CartesianProvider/normalizeAxis.js +15 -0
  80. package/esm/context/CartesianProvider/useCartesianContext.js +8 -0
  81. package/esm/hooks/useAxisEvents.js +2 -2
  82. package/esm/hooks/useColorScale.js +3 -3
  83. package/esm/hooks/useScale.js +3 -4
  84. package/esm/internals/components/ChartsAxesGradients/ChartsAxesGradients.js +2 -2
  85. package/esm/internals/index.js +6 -2
  86. package/hooks/useAxisEvents.js +2 -2
  87. package/hooks/useColorScale.js +3 -3
  88. package/hooks/useDrawingArea.d.ts +2 -8
  89. package/hooks/useScale.js +3 -6
  90. package/index.js +1 -1
  91. package/internals/components/ChartsAxesGradients/ChartsAxesGradients.d.ts +2 -1
  92. package/internals/components/ChartsAxesGradients/ChartsAxesGradients.js +2 -2
  93. package/internals/index.d.ts +7 -1
  94. package/internals/index.js +49 -5
  95. package/models/plugin.d.ts +4 -1
  96. package/modern/BarChart/BarChart.js +21 -104
  97. package/modern/BarChart/BarLabel/BarLabelPlot.js +0 -23
  98. package/modern/BarChart/BarPlot.js +2 -2
  99. package/modern/BarChart/useBarChartProps.js +136 -0
  100. package/modern/ChartContainer/ChartContainer.js +5 -9
  101. package/modern/ChartContainer/useChartContainerHooks.js +24 -0
  102. package/modern/ChartsAxis/ChartsAxis.js +2 -2
  103. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +2 -2
  104. package/modern/ChartsGrid/ChartsGrid.js +2 -2
  105. package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  106. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +2 -2
  107. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  108. package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  109. package/modern/ChartsXAxis/ChartsXAxis.js +2 -2
  110. package/modern/ChartsYAxis/ChartsYAxis.js +2 -2
  111. package/modern/LineChart/AreaPlot.js +2 -2
  112. package/modern/LineChart/LineChart.js +24 -106
  113. package/modern/LineChart/LineHighlightPlot.js +2 -2
  114. package/modern/LineChart/LinePlot.js +2 -2
  115. package/modern/LineChart/MarkPlot.js +2 -2
  116. package/modern/LineChart/useLineChartProps.js +144 -0
  117. package/modern/ScatterChart/ScatterChart.js +20 -75
  118. package/modern/ScatterChart/ScatterPlot.js +2 -2
  119. package/modern/ScatterChart/useScatterChartProps.js +108 -0
  120. package/modern/context/CartesianProvider/CartesianContext.js +13 -0
  121. package/modern/context/CartesianProvider/CartesianProvider.js +37 -0
  122. package/modern/context/CartesianProvider/computeValue.js +82 -0
  123. package/modern/context/CartesianProvider/getAxisExtremum.js +21 -0
  124. package/modern/context/CartesianProvider/index.js +10 -0
  125. package/modern/context/CartesianProvider/normalizeAxis.js +15 -0
  126. package/modern/context/CartesianProvider/useCartesianContext.js +8 -0
  127. package/modern/hooks/useAxisEvents.js +2 -2
  128. package/modern/hooks/useColorScale.js +3 -3
  129. package/modern/hooks/useScale.js +3 -4
  130. package/modern/index.js +1 -1
  131. package/modern/internals/components/ChartsAxesGradients/ChartsAxesGradients.js +2 -2
  132. package/modern/internals/index.js +6 -2
  133. package/package.json +3 -3
  134. package/context/CartesianContextProvider.d.ts +0 -61
  135. package/context/CartesianContextProvider.js +0 -220
  136. package/esm/context/CartesianContextProvider.js +0 -211
  137. package/modern/context/CartesianContextProvider.js +0 -211
@@ -1,211 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import * as React from 'react';
3
- import { scaleBand, scalePoint } from 'd3-scale';
4
- import { isBandScaleConfig, isPointScaleConfig } from '../models/axis';
5
- import { getScale } from '../internals/getScale';
6
- import { DEFAULT_X_AXIS_KEY, DEFAULT_Y_AXIS_KEY } from '../constants';
7
- import { getTickNumber } from '../hooks/useTicks';
8
- import { useDrawingArea } from '../hooks/useDrawingArea';
9
- import { getColorScale, getOrdinalColorScale } from '../internals/colorScale';
10
- import { useSeries } from '../hooks/useSeries';
11
- import { jsx as _jsx } from "react/jsx-runtime";
12
- const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
13
- const DEFAULT_BAR_GAP_RATIO = 0.1;
14
- export const CartesianContext = /*#__PURE__*/React.createContext({
15
- xAxis: {},
16
- yAxis: {},
17
- xAxisIds: [],
18
- yAxisIds: []
19
- });
20
- if (process.env.NODE_ENV !== 'production') {
21
- CartesianContext.displayName = 'CartesianContext';
22
- }
23
- function CartesianContextProvider(props) {
24
- const {
25
- xAxis: inXAxis,
26
- yAxis: inYAxis,
27
- dataset,
28
- xExtremumGetters,
29
- yExtremumGetters,
30
- children
31
- } = props;
32
- const formattedSeries = useSeries();
33
- const drawingArea = useDrawingArea();
34
- const xAxis = React.useMemo(() => inXAxis?.map(axisConfig => {
35
- const dataKey = axisConfig.dataKey;
36
- if (dataKey === undefined || axisConfig.data !== undefined) {
37
- return axisConfig;
38
- }
39
- if (dataset === undefined) {
40
- throw Error('MUI X Charts: x-axis uses `dataKey` but no `dataset` is provided.');
41
- }
42
- return _extends({}, axisConfig, {
43
- data: dataset.map(d => d[dataKey])
44
- });
45
- }), [inXAxis, dataset]);
46
- const yAxis = React.useMemo(() => inYAxis?.map(axisConfig => {
47
- const dataKey = axisConfig.dataKey;
48
- if (dataKey === undefined || axisConfig.data !== undefined) {
49
- return axisConfig;
50
- }
51
- if (dataset === undefined) {
52
- throw Error('MUI X Charts: y-axis uses `dataKey` but no `dataset` is provided.');
53
- }
54
- return _extends({}, axisConfig, {
55
- data: dataset.map(d => d[dataKey])
56
- });
57
- }), [inYAxis, dataset]);
58
- const value = React.useMemo(() => {
59
- const axisExtremumCallback = (acc, chartType, axis, getters, isDefaultAxis) => {
60
- const getter = getters[chartType];
61
- const series = formattedSeries[chartType]?.series ?? {};
62
- const [minChartTypeData, maxChartTypeData] = getter?.({
63
- series,
64
- axis,
65
- isDefaultAxis
66
- }) ?? [null, null];
67
- const [minData, maxData] = acc;
68
- if (minData === null || maxData === null) {
69
- return [minChartTypeData, maxChartTypeData];
70
- }
71
- if (minChartTypeData === null || maxChartTypeData === null) {
72
- return [minData, maxData];
73
- }
74
- return [Math.min(minChartTypeData, minData), Math.max(maxChartTypeData, maxData)];
75
- };
76
- const getAxisExtremum = (axis, getters, isDefaultAxis) => {
77
- const charTypes = Object.keys(getters);
78
- return charTypes.reduce((acc, charType) => axisExtremumCallback(acc, charType, axis, getters, isDefaultAxis), [null, null]);
79
- };
80
- const allXAxis = [...(xAxis?.map((axis, index) => _extends({
81
- id: `defaultized-x-axis-${index}`
82
- }, axis)) ?? []),
83
- // Allows to specify an axis with id=DEFAULT_X_AXIS_KEY
84
- ...(xAxis === undefined || xAxis.findIndex(({
85
- id
86
- }) => id === DEFAULT_X_AXIS_KEY) === -1 ? [{
87
- id: DEFAULT_X_AXIS_KEY,
88
- scaleType: 'linear'
89
- }] : [])];
90
- const completedXAxis = {};
91
- allXAxis.forEach((axis, axisIndex) => {
92
- const isDefaultAxis = axisIndex === 0;
93
- const [minData, maxData] = getAxisExtremum(axis, xExtremumGetters, isDefaultAxis);
94
- const range = axis.reverse ? [drawingArea.left + drawingArea.width, drawingArea.left] : [drawingArea.left, drawingArea.left + drawingArea.width];
95
- if (isBandScaleConfig(axis)) {
96
- const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
97
- const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
98
- completedXAxis[axis.id] = _extends({
99
- categoryGapRatio,
100
- barGapRatio
101
- }, axis, {
102
- scale: scaleBand(axis.data, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
103
- tickNumber: axis.data.length,
104
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
105
- values: axis.data
106
- }, axis.colorMap)) : getColorScale(axis.colorMap))
107
- });
108
- }
109
- if (isPointScaleConfig(axis)) {
110
- completedXAxis[axis.id] = _extends({}, axis, {
111
- scale: scalePoint(axis.data, range),
112
- tickNumber: axis.data.length,
113
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
114
- values: axis.data
115
- }, axis.colorMap)) : getColorScale(axis.colorMap))
116
- });
117
- }
118
- if (axis.scaleType === 'band' || axis.scaleType === 'point') {
119
- // Could be merged with the two previous "if conditions" but then TS does not get that `axis.scaleType` can't be `band` or `point`.
120
- return;
121
- }
122
- const scaleType = axis.scaleType ?? 'linear';
123
- const extremums = [axis.min ?? minData, axis.max ?? maxData];
124
- const tickNumber = getTickNumber(_extends({}, axis, {
125
- range,
126
- domain: extremums
127
- }));
128
- const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
129
- const niceDomain = niceScale.domain();
130
- const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
131
- completedXAxis[axis.id] = _extends({}, axis, {
132
- scaleType,
133
- scale: niceScale.domain(domain),
134
- tickNumber,
135
- colorScale: axis.colorMap && getColorScale(axis.colorMap)
136
- });
137
- });
138
- const allYAxis = [...(yAxis?.map((axis, index) => _extends({
139
- id: `defaultized-y-axis-${index}`
140
- }, axis)) ?? []), ...(yAxis === undefined || yAxis.findIndex(({
141
- id
142
- }) => id === DEFAULT_Y_AXIS_KEY) === -1 ? [{
143
- id: DEFAULT_Y_AXIS_KEY,
144
- scaleType: 'linear'
145
- }] : [])];
146
- const completedYAxis = {};
147
- allYAxis.forEach((axis, axisIndex) => {
148
- const isDefaultAxis = axisIndex === 0;
149
- const [minData, maxData] = getAxisExtremum(axis, yExtremumGetters, isDefaultAxis);
150
- const range = axis.reverse ? [drawingArea.top, drawingArea.top + drawingArea.height] : [drawingArea.top + drawingArea.height, drawingArea.top];
151
- if (isBandScaleConfig(axis)) {
152
- const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
153
- completedYAxis[axis.id] = _extends({
154
- categoryGapRatio,
155
- barGapRatio: 0
156
- }, axis, {
157
- scale: scaleBand(axis.data, [range[1], range[0]]).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
158
- tickNumber: axis.data.length,
159
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
160
- values: axis.data
161
- }, axis.colorMap)) : getColorScale(axis.colorMap))
162
- });
163
- }
164
- if (isPointScaleConfig(axis)) {
165
- completedYAxis[axis.id] = _extends({}, axis, {
166
- scale: scalePoint(axis.data, [range[1], range[0]]),
167
- tickNumber: axis.data.length,
168
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
169
- values: axis.data
170
- }, axis.colorMap)) : getColorScale(axis.colorMap))
171
- });
172
- }
173
- if (axis.scaleType === 'band' || axis.scaleType === 'point') {
174
- // Could be merged with the two previous "if conditions" but then TS does not get that `axis.scaleType` can't be `band` or `point`.
175
- return;
176
- }
177
- const scaleType = axis.scaleType ?? 'linear';
178
- const extremums = [axis.min ?? minData, axis.max ?? maxData];
179
- const tickNumber = getTickNumber(_extends({}, axis, {
180
- range,
181
- domain: extremums
182
- }));
183
- const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
184
- const niceDomain = niceScale.domain();
185
- const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
186
- completedYAxis[axis.id] = _extends({}, axis, {
187
- scaleType,
188
- scale: niceScale.domain(domain),
189
- tickNumber,
190
- colorScale: axis.colorMap && getColorScale(axis.colorMap)
191
- });
192
- });
193
- return {
194
- xAxis: completedXAxis,
195
- yAxis: completedYAxis,
196
- xAxisIds: allXAxis.map(({
197
- id
198
- }) => id),
199
- yAxisIds: allYAxis.map(({
200
- id
201
- }) => id)
202
- };
203
- }, [drawingArea.height, drawingArea.left, drawingArea.top, drawingArea.width, formattedSeries, xAxis, xExtremumGetters, yAxis, yExtremumGetters]);
204
-
205
- // @ts-ignore
206
- return /*#__PURE__*/_jsx(CartesianContext.Provider, {
207
- value: value,
208
- children: children
209
- });
210
- }
211
- export { CartesianContextProvider };
@@ -1,211 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import * as React from 'react';
3
- import { scaleBand, scalePoint } from 'd3-scale';
4
- import { isBandScaleConfig, isPointScaleConfig } from '../models/axis';
5
- import { getScale } from '../internals/getScale';
6
- import { DEFAULT_X_AXIS_KEY, DEFAULT_Y_AXIS_KEY } from '../constants';
7
- import { getTickNumber } from '../hooks/useTicks';
8
- import { useDrawingArea } from '../hooks/useDrawingArea';
9
- import { getColorScale, getOrdinalColorScale } from '../internals/colorScale';
10
- import { useSeries } from '../hooks/useSeries';
11
- import { jsx as _jsx } from "react/jsx-runtime";
12
- const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
13
- const DEFAULT_BAR_GAP_RATIO = 0.1;
14
- export const CartesianContext = /*#__PURE__*/React.createContext({
15
- xAxis: {},
16
- yAxis: {},
17
- xAxisIds: [],
18
- yAxisIds: []
19
- });
20
- if (process.env.NODE_ENV !== 'production') {
21
- CartesianContext.displayName = 'CartesianContext';
22
- }
23
- function CartesianContextProvider(props) {
24
- const {
25
- xAxis: inXAxis,
26
- yAxis: inYAxis,
27
- dataset,
28
- xExtremumGetters,
29
- yExtremumGetters,
30
- children
31
- } = props;
32
- const formattedSeries = useSeries();
33
- const drawingArea = useDrawingArea();
34
- const xAxis = React.useMemo(() => inXAxis?.map(axisConfig => {
35
- const dataKey = axisConfig.dataKey;
36
- if (dataKey === undefined || axisConfig.data !== undefined) {
37
- return axisConfig;
38
- }
39
- if (dataset === undefined) {
40
- throw Error('MUI X Charts: x-axis uses `dataKey` but no `dataset` is provided.');
41
- }
42
- return _extends({}, axisConfig, {
43
- data: dataset.map(d => d[dataKey])
44
- });
45
- }), [inXAxis, dataset]);
46
- const yAxis = React.useMemo(() => inYAxis?.map(axisConfig => {
47
- const dataKey = axisConfig.dataKey;
48
- if (dataKey === undefined || axisConfig.data !== undefined) {
49
- return axisConfig;
50
- }
51
- if (dataset === undefined) {
52
- throw Error('MUI X Charts: y-axis uses `dataKey` but no `dataset` is provided.');
53
- }
54
- return _extends({}, axisConfig, {
55
- data: dataset.map(d => d[dataKey])
56
- });
57
- }), [inYAxis, dataset]);
58
- const value = React.useMemo(() => {
59
- const axisExtremumCallback = (acc, chartType, axis, getters, isDefaultAxis) => {
60
- const getter = getters[chartType];
61
- const series = formattedSeries[chartType]?.series ?? {};
62
- const [minChartTypeData, maxChartTypeData] = getter?.({
63
- series,
64
- axis,
65
- isDefaultAxis
66
- }) ?? [null, null];
67
- const [minData, maxData] = acc;
68
- if (minData === null || maxData === null) {
69
- return [minChartTypeData, maxChartTypeData];
70
- }
71
- if (minChartTypeData === null || maxChartTypeData === null) {
72
- return [minData, maxData];
73
- }
74
- return [Math.min(minChartTypeData, minData), Math.max(maxChartTypeData, maxData)];
75
- };
76
- const getAxisExtremum = (axis, getters, isDefaultAxis) => {
77
- const charTypes = Object.keys(getters);
78
- return charTypes.reduce((acc, charType) => axisExtremumCallback(acc, charType, axis, getters, isDefaultAxis), [null, null]);
79
- };
80
- const allXAxis = [...(xAxis?.map((axis, index) => _extends({
81
- id: `defaultized-x-axis-${index}`
82
- }, axis)) ?? []),
83
- // Allows to specify an axis with id=DEFAULT_X_AXIS_KEY
84
- ...(xAxis === undefined || xAxis.findIndex(({
85
- id
86
- }) => id === DEFAULT_X_AXIS_KEY) === -1 ? [{
87
- id: DEFAULT_X_AXIS_KEY,
88
- scaleType: 'linear'
89
- }] : [])];
90
- const completedXAxis = {};
91
- allXAxis.forEach((axis, axisIndex) => {
92
- const isDefaultAxis = axisIndex === 0;
93
- const [minData, maxData] = getAxisExtremum(axis, xExtremumGetters, isDefaultAxis);
94
- const range = axis.reverse ? [drawingArea.left + drawingArea.width, drawingArea.left] : [drawingArea.left, drawingArea.left + drawingArea.width];
95
- if (isBandScaleConfig(axis)) {
96
- const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
97
- const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
98
- completedXAxis[axis.id] = _extends({
99
- categoryGapRatio,
100
- barGapRatio
101
- }, axis, {
102
- scale: scaleBand(axis.data, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
103
- tickNumber: axis.data.length,
104
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
105
- values: axis.data
106
- }, axis.colorMap)) : getColorScale(axis.colorMap))
107
- });
108
- }
109
- if (isPointScaleConfig(axis)) {
110
- completedXAxis[axis.id] = _extends({}, axis, {
111
- scale: scalePoint(axis.data, range),
112
- tickNumber: axis.data.length,
113
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
114
- values: axis.data
115
- }, axis.colorMap)) : getColorScale(axis.colorMap))
116
- });
117
- }
118
- if (axis.scaleType === 'band' || axis.scaleType === 'point') {
119
- // Could be merged with the two previous "if conditions" but then TS does not get that `axis.scaleType` can't be `band` or `point`.
120
- return;
121
- }
122
- const scaleType = axis.scaleType ?? 'linear';
123
- const extremums = [axis.min ?? minData, axis.max ?? maxData];
124
- const tickNumber = getTickNumber(_extends({}, axis, {
125
- range,
126
- domain: extremums
127
- }));
128
- const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
129
- const niceDomain = niceScale.domain();
130
- const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
131
- completedXAxis[axis.id] = _extends({}, axis, {
132
- scaleType,
133
- scale: niceScale.domain(domain),
134
- tickNumber,
135
- colorScale: axis.colorMap && getColorScale(axis.colorMap)
136
- });
137
- });
138
- const allYAxis = [...(yAxis?.map((axis, index) => _extends({
139
- id: `defaultized-y-axis-${index}`
140
- }, axis)) ?? []), ...(yAxis === undefined || yAxis.findIndex(({
141
- id
142
- }) => id === DEFAULT_Y_AXIS_KEY) === -1 ? [{
143
- id: DEFAULT_Y_AXIS_KEY,
144
- scaleType: 'linear'
145
- }] : [])];
146
- const completedYAxis = {};
147
- allYAxis.forEach((axis, axisIndex) => {
148
- const isDefaultAxis = axisIndex === 0;
149
- const [minData, maxData] = getAxisExtremum(axis, yExtremumGetters, isDefaultAxis);
150
- const range = axis.reverse ? [drawingArea.top, drawingArea.top + drawingArea.height] : [drawingArea.top + drawingArea.height, drawingArea.top];
151
- if (isBandScaleConfig(axis)) {
152
- const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
153
- completedYAxis[axis.id] = _extends({
154
- categoryGapRatio,
155
- barGapRatio: 0
156
- }, axis, {
157
- scale: scaleBand(axis.data, [range[1], range[0]]).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
158
- tickNumber: axis.data.length,
159
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
160
- values: axis.data
161
- }, axis.colorMap)) : getColorScale(axis.colorMap))
162
- });
163
- }
164
- if (isPointScaleConfig(axis)) {
165
- completedYAxis[axis.id] = _extends({}, axis, {
166
- scale: scalePoint(axis.data, [range[1], range[0]]),
167
- tickNumber: axis.data.length,
168
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
169
- values: axis.data
170
- }, axis.colorMap)) : getColorScale(axis.colorMap))
171
- });
172
- }
173
- if (axis.scaleType === 'band' || axis.scaleType === 'point') {
174
- // Could be merged with the two previous "if conditions" but then TS does not get that `axis.scaleType` can't be `band` or `point`.
175
- return;
176
- }
177
- const scaleType = axis.scaleType ?? 'linear';
178
- const extremums = [axis.min ?? minData, axis.max ?? maxData];
179
- const tickNumber = getTickNumber(_extends({}, axis, {
180
- range,
181
- domain: extremums
182
- }));
183
- const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
184
- const niceDomain = niceScale.domain();
185
- const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
186
- completedYAxis[axis.id] = _extends({}, axis, {
187
- scaleType,
188
- scale: niceScale.domain(domain),
189
- tickNumber,
190
- colorScale: axis.colorMap && getColorScale(axis.colorMap)
191
- });
192
- });
193
- return {
194
- xAxis: completedXAxis,
195
- yAxis: completedYAxis,
196
- xAxisIds: allXAxis.map(({
197
- id
198
- }) => id),
199
- yAxisIds: allYAxis.map(({
200
- id
201
- }) => id)
202
- };
203
- }, [drawingArea.height, drawingArea.left, drawingArea.top, drawingArea.width, formattedSeries, xAxis, xExtremumGetters, yAxis, yExtremumGetters]);
204
-
205
- // @ts-ignore
206
- return /*#__PURE__*/_jsx(CartesianContext.Provider, {
207
- value: value,
208
- children: children
209
- });
210
- }
211
- export { CartesianContextProvider };