@mui/x-charts-premium 9.3.0 → 9.4.0

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 (176) hide show
  1. package/BarChartPremium/BarChartPremium.js +35 -5
  2. package/BarChartPremium/BarChartPremium.mjs +35 -5
  3. package/BarChartPremium/RangeBar/RangeBarPlot.d.mts +10 -0
  4. package/BarChartPremium/RangeBar/RangeBarPlot.d.ts +10 -0
  5. package/BarChartPremium/RangeBar/RangeBarPlot.js +59 -2
  6. package/BarChartPremium/RangeBar/RangeBarPlot.mjs +59 -2
  7. package/BarChartPremium/RangeBar/RangeBarWebGLPlot.d.mts +10 -0
  8. package/BarChartPremium/RangeBar/RangeBarWebGLPlot.d.ts +10 -0
  9. package/BarChartPremium/RangeBar/RangeBarWebGLPlot.js +82 -0
  10. package/BarChartPremium/RangeBar/RangeBarWebGLPlot.mjs +76 -0
  11. package/BarChartPremium/RangeBar/seriesConfig/extrema.js +3 -0
  12. package/BarChartPremium/RangeBar/seriesConfig/extrema.mjs +3 -0
  13. package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.js +2 -2
  14. package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.mjs +2 -2
  15. package/BarChartPremium/useBarChartPremiumProps.js +2 -1
  16. package/BarChartPremium/useBarChartPremiumProps.mjs +2 -1
  17. package/BarChartPremium/webgl/useBarWebGLPlotData.d.mts +2 -7
  18. package/BarChartPremium/webgl/useBarWebGLPlotData.d.ts +2 -7
  19. package/BarChartPremium/webgl/useBarWebGLPlotData.js +4 -151
  20. package/BarChartPremium/webgl/useBarWebGLPlotData.mjs +4 -150
  21. package/BarChartPremium/webgl/useWebGLBarLikePlotData.d.mts +39 -0
  22. package/BarChartPremium/webgl/useWebGLBarLikePlotData.d.ts +39 -0
  23. package/BarChartPremium/webgl/useWebGLBarLikePlotData.js +169 -0
  24. package/BarChartPremium/webgl/useWebGLBarLikePlotData.mjs +163 -0
  25. package/CHANGELOG.md +196 -0
  26. package/CandlestickChart/CandlestickChart.js +11 -2
  27. package/CandlestickChart/CandlestickChart.mjs +11 -2
  28. package/CandlestickChart/seriesConfig/extrema.js +3 -0
  29. package/CandlestickChart/seriesConfig/extrema.mjs +3 -0
  30. package/CandlestickChart/seriesConfig/seriesProcessor.js +2 -2
  31. package/CandlestickChart/seriesConfig/seriesProcessor.mjs +2 -2
  32. package/ChartsDataProviderPremium/ChartsDataProviderPremium.js +2 -2
  33. package/ChartsDataProviderPremium/ChartsDataProviderPremium.mjs +2 -2
  34. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.d.mts +35 -0
  35. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.d.ts +35 -0
  36. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.js +125 -0
  37. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.mjs +119 -0
  38. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.plugins.d.mts +5 -0
  39. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.plugins.d.ts +5 -0
  40. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.plugins.js +10 -0
  41. package/ChartsGeoDataProviderPremium/ChartsGeoDataProviderPremium.plugins.mjs +4 -0
  42. package/ChartsGeoDataProviderPremium/index.d.mts +3 -0
  43. package/ChartsGeoDataProviderPremium/index.d.ts +3 -0
  44. package/ChartsGeoDataProviderPremium/index.js +20 -0
  45. package/ChartsGeoDataProviderPremium/index.mjs +3 -0
  46. package/ChartsGeoDataProviderPremium/useChartsGeoDataProviderPremiumProps.d.mts +10 -0
  47. package/ChartsGeoDataProviderPremium/useChartsGeoDataProviderPremiumProps.d.ts +10 -0
  48. package/ChartsGeoDataProviderPremium/useChartsGeoDataProviderPremiumProps.js +49 -0
  49. package/ChartsGeoDataProviderPremium/useChartsGeoDataProviderPremiumProps.mjs +42 -0
  50. package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.js +2 -2
  51. package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.mjs +2 -2
  52. package/HeatmapPremium/HeatmapPremium.js +32 -2
  53. package/HeatmapPremium/HeatmapPremium.mjs +32 -2
  54. package/Map/FocusedMapShape.d.mts +4 -0
  55. package/Map/FocusedMapShape.d.ts +4 -0
  56. package/Map/FocusedMapShape.js +66 -0
  57. package/Map/FocusedMapShape.mjs +60 -0
  58. package/Map/GeoDataPlot.d.mts +26 -0
  59. package/Map/GeoDataPlot.d.ts +26 -0
  60. package/Map/GeoDataPlot.js +65 -0
  61. package/Map/GeoDataPlot.mjs +60 -0
  62. package/Map/Graticule.d.mts +1 -0
  63. package/Map/Graticule.d.ts +1 -0
  64. package/Map/Graticule.js +30 -0
  65. package/Map/Graticule.mjs +24 -0
  66. package/Map/MapShape.d.mts +10 -0
  67. package/Map/MapShape.d.ts +10 -0
  68. package/Map/MapShape.js +55 -0
  69. package/Map/MapShape.mjs +49 -0
  70. package/Map/MapShapePlot.d.mts +21 -0
  71. package/Map/MapShapePlot.d.ts +21 -0
  72. package/Map/MapShapePlot.js +86 -0
  73. package/Map/MapShapePlot.mjs +80 -0
  74. package/Map/index.d.mts +7 -0
  75. package/Map/index.d.ts +7 -0
  76. package/Map/index.js +60 -0
  77. package/Map/index.mjs +8 -0
  78. package/Map/seriesConfig/descriptionGetter.d.mts +3 -0
  79. package/Map/seriesConfig/descriptionGetter.d.ts +3 -0
  80. package/Map/seriesConfig/descriptionGetter.js +19 -0
  81. package/Map/seriesConfig/descriptionGetter.mjs +13 -0
  82. package/Map/seriesConfig/getColor.d.mts +3 -0
  83. package/Map/seriesConfig/getColor.d.ts +3 -0
  84. package/Map/seriesConfig/getColor.js +35 -0
  85. package/Map/seriesConfig/getColor.mjs +29 -0
  86. package/Map/seriesConfig/getSeriesWithDefaultValues.d.mts +3 -0
  87. package/Map/seriesConfig/getSeriesWithDefaultValues.d.ts +3 -0
  88. package/Map/seriesConfig/getSeriesWithDefaultValues.js +15 -0
  89. package/Map/seriesConfig/getSeriesWithDefaultValues.mjs +8 -0
  90. package/Map/seriesConfig/index.d.mts +2 -0
  91. package/Map/seriesConfig/index.d.ts +2 -0
  92. package/Map/seriesConfig/index.js +28 -0
  93. package/Map/seriesConfig/index.mjs +21 -0
  94. package/Map/seriesConfig/keyboardFocusHandler.d.mts +9 -0
  95. package/Map/seriesConfig/keyboardFocusHandler.d.ts +9 -0
  96. package/Map/seriesConfig/keyboardFocusHandler.js +19 -0
  97. package/Map/seriesConfig/keyboardFocusHandler.mjs +13 -0
  98. package/Map/seriesConfig/legend.d.mts +3 -0
  99. package/Map/seriesConfig/legend.d.ts +3 -0
  100. package/Map/seriesConfig/legend.js +28 -0
  101. package/Map/seriesConfig/legend.mjs +22 -0
  102. package/Map/seriesConfig/seriesProcessor.d.mts +3 -0
  103. package/Map/seriesConfig/seriesProcessor.d.ts +3 -0
  104. package/Map/seriesConfig/seriesProcessor.js +66 -0
  105. package/Map/seriesConfig/seriesProcessor.mjs +59 -0
  106. package/Map/seriesConfig/tooltip.d.mts +3 -0
  107. package/Map/seriesConfig/tooltip.d.ts +3 -0
  108. package/Map/seriesConfig/tooltip.js +33 -0
  109. package/Map/seriesConfig/tooltip.mjs +27 -0
  110. package/RadialLineChart/RadialLineHighlightPlot.d.mts +3 -2
  111. package/RadialLineChart/RadialLineHighlightPlot.d.ts +3 -2
  112. package/ScatterChartPremium/ScatterChartPremium.d.mts +2 -1
  113. package/ScatterChartPremium/ScatterChartPremium.d.ts +2 -1
  114. package/ScatterChartPremium/ScatterChartPremium.js +32 -2
  115. package/ScatterChartPremium/ScatterChartPremium.mjs +32 -2
  116. package/hooks/index.d.mts +4 -1
  117. package/hooks/index.d.ts +4 -1
  118. package/hooks/index.js +33 -0
  119. package/hooks/index.mjs +4 -1
  120. package/hooks/useGeoData.d.mts +6 -0
  121. package/hooks/useGeoData.d.ts +6 -0
  122. package/hooks/useGeoData.js +17 -0
  123. package/hooks/useGeoData.mjs +13 -0
  124. package/hooks/useGeoFeatureIndexesByName.d.mts +7 -0
  125. package/hooks/useGeoFeatureIndexesByName.d.ts +7 -0
  126. package/hooks/useGeoFeatureIndexesByName.js +19 -0
  127. package/hooks/useGeoFeatureIndexesByName.mjs +15 -0
  128. package/hooks/useGeoPath.d.mts +6 -0
  129. package/hooks/useGeoPath.d.ts +6 -0
  130. package/hooks/useGeoPath.js +17 -0
  131. package/hooks/useGeoPath.mjs +13 -0
  132. package/hooks/useMapShapeSeries.d.mts +34 -0
  133. package/hooks/useMapShapeSeries.d.ts +34 -0
  134. package/hooks/useMapShapeSeries.js +45 -0
  135. package/hooks/useMapShapeSeries.mjs +40 -0
  136. package/index.d.mts +2 -0
  137. package/index.d.ts +2 -0
  138. package/index.js +25 -1
  139. package/index.mjs +3 -1
  140. package/internals/plugins/useGeoProjection/index.d.mts +3 -0
  141. package/internals/plugins/useGeoProjection/index.d.ts +3 -0
  142. package/internals/plugins/useGeoProjection/index.js +38 -0
  143. package/internals/plugins/useGeoProjection/index.mjs +3 -0
  144. package/internals/plugins/useGeoProjection/useGeoProjection.d.mts +3 -0
  145. package/internals/plugins/useGeoProjection/useGeoProjection.d.ts +3 -0
  146. package/internals/plugins/useGeoProjection/useGeoProjection.js +58 -0
  147. package/internals/plugins/useGeoProjection/useGeoProjection.mjs +50 -0
  148. package/internals/plugins/useGeoProjection/useGeoProjection.selectors.d.mts +39 -0
  149. package/internals/plugins/useGeoProjection/useGeoProjection.selectors.d.ts +39 -0
  150. package/internals/plugins/useGeoProjection/useGeoProjection.selectors.js +135 -0
  151. package/internals/plugins/useGeoProjection/useGeoProjection.selectors.mjs +128 -0
  152. package/internals/plugins/useGeoProjection/useGeoProjection.types.d.mts +55 -0
  153. package/internals/plugins/useGeoProjection/useGeoProjection.types.d.ts +55 -0
  154. package/internals/plugins/useGeoProjection/useGeoProjection.types.js +5 -0
  155. package/internals/plugins/useGeoProjection/useGeoProjection.types.mjs +1 -0
  156. package/models/chartsSlotsComponentsPropsPremium.d.mts +1 -0
  157. package/models/chartsSlotsComponentsPropsPremium.d.ts +1 -0
  158. package/models/chartsSlotsComponentsPropsPremium.js +5 -0
  159. package/models/chartsSlotsComponentsPropsPremium.mjs +1 -0
  160. package/models/index.d.mts +2 -1
  161. package/models/index.d.ts +2 -1
  162. package/models/index.js +11 -0
  163. package/models/index.mjs +2 -1
  164. package/models/seriesType/index.d.mts +2 -1
  165. package/models/seriesType/index.d.ts +2 -1
  166. package/models/seriesType/index.js +11 -0
  167. package/models/seriesType/index.mjs +2 -1
  168. package/models/seriesType/mapShape.d.mts +105 -0
  169. package/models/seriesType/mapShape.d.ts +105 -0
  170. package/models/seriesType/mapShape.js +5 -0
  171. package/models/seriesType/mapShape.mjs +1 -0
  172. package/package.json +35 -7
  173. package/typeOverloads/modules.d.mts +16 -1
  174. package/typeOverloads/modules.d.ts +16 -1
  175. package/utils/webgl/useWebGLResizeObserver.js +3 -3
  176. package/utils/webgl/useWebGLResizeObserver.mjs +2 -2
@@ -0,0 +1,163 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { selectorChartsHighlightStateCallback, useStore } from '@mui/x-charts/internals';
5
+ import { parseColor } from "../../utils/webgl/parseColor.mjs";
6
+ const EMPTY_FLOAT32 = new Float32Array(0);
7
+ const EMPTY_UINT8 = new Uint8Array(0);
8
+ const EMPTY_DATA = {
9
+ centers: EMPTY_FLOAT32,
10
+ halfSizes: EMPTY_FLOAT32,
11
+ colors: EMPTY_UINT8,
12
+ cornerRadii: EMPTY_FLOAT32,
13
+ count: 0
14
+ };
15
+ function ensureCapacity(pool, maxCount) {
16
+ if (pool !== null && pool.colors.length >= maxCount * 4) {
17
+ return pool;
18
+ }
19
+ return {
20
+ centers: new Float32Array(maxCount * 2),
21
+ halfSizes: new Float32Array(maxCount * 2),
22
+ colors: new Uint8Array(maxCount * 4),
23
+ cornerRadii: new Float32Array(maxCount * 4)
24
+ };
25
+ }
26
+
27
+ // Mirrors SVG highlight styling: highlighted -> CSS `brightness(120%)`,
28
+ // faded -> opacity 0.3. Baking these into the per-bar color array means we
29
+ // don't need a separate per-instance attribute on the GPU side.
30
+ const HIGHLIGHTED_BRIGHTNESS = 1.2;
31
+ const FADED_OPACITY = 0.3;
32
+ function setCornerRadii(radius, side, fullRounded, target, offset) {
33
+ // CSS order: top-left, top-right, bottom-right, bottom-left.
34
+ let tl = 0;
35
+ let tr = 0;
36
+ let br = 0;
37
+ let bl = 0;
38
+ if (radius > 0) {
39
+ if (fullRounded) {
40
+ tl = radius;
41
+ tr = radius;
42
+ br = radius;
43
+ bl = radius;
44
+ } else if (side === 'top') {
45
+ tl = radius;
46
+ tr = radius;
47
+ } else if (side === 'bottom') {
48
+ br = radius;
49
+ bl = radius;
50
+ } else if (side === 'left') {
51
+ tl = radius;
52
+ bl = radius;
53
+ } else if (side === 'right') {
54
+ tr = radius;
55
+ br = radius;
56
+ }
57
+ }
58
+ target[offset] = tl;
59
+ target[offset + 1] = tr;
60
+ target[offset + 2] = br;
61
+ target[offset + 3] = bl;
62
+ }
63
+ export function useWebGLBarLikePlotData(drawingArea, completedData, borderRadius, options) {
64
+ const store = useStore();
65
+ const getHighlightState = store.use(selectorChartsHighlightStateCallback);
66
+ const poolRef = React.useRef(null);
67
+ const {
68
+ highlightType,
69
+ fullRoundedCorners = false
70
+ } = options;
71
+ return React.useMemo(() => {
72
+ let maxCount = 0;
73
+ for (let s = 0; s < completedData.length; s += 1) {
74
+ maxCount += completedData[s].data.length;
75
+ }
76
+ if (maxCount === 0) {
77
+ return EMPTY_DATA;
78
+ }
79
+ const pool = ensureCapacity(poolRef.current, maxCount);
80
+ poolRef.current = pool;
81
+
82
+ // Hoist invariants out of the hot loop.
83
+ const {
84
+ centers,
85
+ halfSizes,
86
+ colors,
87
+ cornerRadii
88
+ } = pool;
89
+ const drawingAreaLeft = drawingArea.left;
90
+ const drawingAreaTop = drawingArea.top;
91
+ let cursor = 0;
92
+ for (let s = 0; s < completedData.length; s += 1) {
93
+ const processed = completedData[s];
94
+ const seriesId = processed.seriesId;
95
+ const data = processed.data;
96
+ const dataLength = data.length;
97
+ for (let i = 0; i < dataLength; i += 1) {
98
+ const bar = data[i];
99
+ if (bar.hidden) {
100
+ continue;
101
+ }
102
+ const value = bar.value;
103
+ if (value == null) {
104
+ continue;
105
+ }
106
+ const w = bar.width;
107
+ const h = bar.height;
108
+ if (w <= 0 || h <= 0) {
109
+ continue;
110
+ }
111
+ const halfW = w * 0.5;
112
+ const halfH = h * 0.5;
113
+ const c2 = cursor * 2;
114
+ centers[c2] = bar.x + halfW - drawingAreaLeft;
115
+ centers[c2 + 1] = bar.y + halfH - drawingAreaTop;
116
+ halfSizes[c2] = halfW;
117
+ halfSizes[c2 + 1] = halfH;
118
+ const rgba = parseColor(bar.color);
119
+ const c4 = cursor * 4;
120
+ let r = rgba[0];
121
+ let g = rgba[1];
122
+ let b = rgba[2];
123
+ let a = rgba[3];
124
+ const highlightState = getHighlightState({
125
+ type: highlightType,
126
+ seriesId,
127
+ dataIndex: bar.dataIndex
128
+ });
129
+ if (highlightState === 'highlighted') {
130
+ r = Math.min(255, r * HIGHLIGHTED_BRIGHTNESS);
131
+ g = Math.min(255, g * HIGHLIGHTED_BRIGHTNESS);
132
+ b = Math.min(255, b * HIGHLIGHTED_BRIGHTNESS);
133
+ } else if (highlightState === 'faded') {
134
+ a *= FADED_OPACITY;
135
+ }
136
+ colors[c4] = r;
137
+ colors[c4 + 1] = g;
138
+ colors[c4 + 2] = b;
139
+ colors[c4 + 3] = a;
140
+ const effectiveRadius = Math.min(borderRadius, halfW, halfH);
141
+ setCornerRadii(effectiveRadius, bar.borderRadiusSide, fullRoundedCorners, cornerRadii, c4);
142
+ cursor += 1;
143
+ }
144
+ }
145
+ if (cursor === 0) {
146
+ return EMPTY_DATA;
147
+ }
148
+
149
+ // Return fresh subarray views over the pooled buffers. New view refs each call
150
+ // (so React memoisation is correct and consumers can detect a change), but no
151
+ // new bytes allocated on the JS heap. The GPU upload short-circuits via the
152
+ // `lastUploaded === data` ref check on the program side when we hand the
153
+ // exact same view back across renders -- it won't fire here since each call
154
+ // produces a new view, but the contents have changed anyway in that case.
155
+ return {
156
+ centers: new Float32Array(centers.buffer, centers.byteOffset, cursor * 2),
157
+ halfSizes: new Float32Array(halfSizes.buffer, halfSizes.byteOffset, cursor * 2),
158
+ colors: new Uint8Array(colors.buffer, colors.byteOffset, cursor * 4),
159
+ cornerRadii: new Float32Array(cornerRadii.buffer, cornerRadii.byteOffset, cursor * 4),
160
+ count: cursor
161
+ };
162
+ }, [borderRadius, completedData, drawingArea.left, drawingArea.top, getHighlightState, highlightType, fullRoundedCorners]);
163
+ }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,201 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.4.0
4
+
5
+ <!-- generated comparing v9.3.0..master -->
6
+
7
+ _Jun 4, 2026_
8
+
9
+ We'd like to extend a big thank you to the 21 contributors who made this release possible. Here are some highlights ✨:
10
+
11
+ - 🎉 Scheduler is now in Beta shipping with Timeline vitualization and lazy loading
12
+ - 📆 Implement Event Timeline virtualization (#22339)
13
+ - 🫧 Introduce bubble charts (#22537)
14
+ - 🐞 Bugfixes
15
+ - 📚 Documentation improvements
16
+
17
+ Special thanks go out to these community members for their valuable contributions:
18
+ @imxv, @mixelburg, @mustafajw07
19
+
20
+ The following team members contributed to this release:
21
+ @aemartos, @alexfauquette, @arminmeh, @bernardobelchior, @cherniavskii, @flaviendelangle, @hasdfa, @Janpot, @JCQuintas, @joserodolfofreitas, @LukasTy, @MBilalShafi, @michelengelen, @mj12albert, @noraleonte, @oliviertassinari, @rita-codes, @romgrk, @sai6855
22
+
23
+ ### Data Grid
24
+
25
+ #### `@mui/x-data-grid@9.4.0`
26
+
27
+ - [DataGrid] Fix `avg` aggregation when the average is zero (#22652) @mj12albert
28
+ - [DataGrid] Inherit icon `fontSize` from `baseIconButton` size (#22187) @imxv
29
+ - [DataGrid] Fix `noRowsOverlay` flicker between `dataSource` re-fetches (#22465) @LukasTy
30
+
31
+ #### `@mui/x-data-grid-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
32
+
33
+ Same changes as in `@mui/x-data-grid@9.4.0`.
34
+
35
+ #### `@mui/x-data-grid-premium@9.4.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
36
+
37
+ > This release includes a version bump of the `@mui/x-internal-exceljs-fork` package to address the vulnerable dependencies.
38
+ > The following CVEs are fixed:
39
+ >
40
+ > - <https://github.com/advisories/GHSA-ph9p-34f9-6g65>
41
+ > - <https://github.com/isaacs/minimatch/security/advisories/GHSA-23c5-xmqv-rm74>
42
+ > - <https://github.com/advisories/GHSA-w5hq-g745-h8pq>
43
+ >
44
+ > To make this security update possible, we bumped the `node` version requirement from `>=14.0.0` to `>=14.17.0`.
45
+ > [Node.js 14.17.0](https://nodejs.org/en/blog/release/v14.17.0) was released in May 2021, so we consider it safe to bump the requirement without causing issues for our users.
46
+
47
+ Same changes as in `@mui/x-data-grid-pro@9.4.0`, plus:
48
+
49
+ - [DataGridPremium] Nested Lazy Loading (#21043) @MBilalShafi
50
+ - [DataGridPremium] Update exceljs fork (#22658) @cherniavskii
51
+
52
+ ### Date and Time Pickers
53
+
54
+ #### `@mui/x-date-pickers@9.4.0`
55
+
56
+ Internal changes.
57
+
58
+ #### `@mui/x-date-pickers-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
59
+
60
+ Same changes as in `@mui/x-date-pickers@9.4.0`.
61
+
62
+ ### Charts
63
+
64
+ #### `@mui/x-charts@9.4.0`
65
+
66
+ - [charts] Add functionality to hide elements during chart export (#22525) @sai6855
67
+ - [charts] Add option to show marks only on the first/last values (#22645) @alexfauquette
68
+ - [charts] Add text customization section and demo for axis labels (#22597) @sai6855
69
+ - [charts] Allow axes to scale according to the visible series only (#22566) @alexfauquette
70
+ - [charts] Correctly handle different identifiers for each series (#22556) @sai6855
71
+ - [charts] Fix inverted Y axis zoom/pan on ordinal scales (#22654) @JCQuintas
72
+ - [charts] Introduce bubble charts (#22537) @alexfauquette
73
+ - [charts] Let scatter chart tooltip ignore hidden series (#22614) @alexfauquette
74
+ - [charts] Make `'sqrt'` size mapping the default (#22683) @alexfauquette
75
+ - [charts] Remove unused proptypes (#22618) @alexfauquette
76
+ - [charts] Support module augmentation for slots (#22519) @sai6855
77
+ - [charts] Support multiple marker size in `findClosestPoint` (#22622) @alexfauquette
78
+ - [charts] Upgrade bezier-easing to v3 and use it for line chart hit-detection (#22608) @sai6855
79
+ - [charts] Use `useLayoutEffect` with `ResizeObserver` (#22646) @JCQuintas
80
+
81
+ #### `@mui/x-charts-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
82
+
83
+ Same changes as in `@mui/x-charts@9.4.0`, plus:
84
+
85
+ - [charts-pro] Auto-select range button matching current zoom (#22137) @JCQuintas
86
+ - [charts-pro] Support range values in `initialZoom` (#22563) @JCQuintas
87
+
88
+ #### `@mui/x-charts-premium@9.4.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
89
+
90
+ Same changes as in `@mui/x-charts-pro@9.4.0`, plus:
91
+
92
+ - [charts-premium] Support range-bar series in WebGL bar renderer (#22607) @JCQuintas
93
+ - [charts-premium] Fix `onAxisClick` for radial bar and lines (#22522) @alexfauquette
94
+
95
+ ### Tree View
96
+
97
+ #### `@mui/x-tree-view@9.4.0`
98
+
99
+ Internal changes.
100
+
101
+ #### `@mui/x-tree-view-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
102
+
103
+ Same changes as in `@mui/x-tree-view@9.4.0`.
104
+
105
+ ### Scheduler
106
+
107
+ #### Breaking changes
108
+
109
+ The theme `styleOverrides` slots for the skeleton and the error container were
110
+ renamed and unified. The CSS utility class names (for example
111
+ `.MuiEventCalendar-eventSkeleton`) are **not** affected — only
112
+ `theme.components.*` overrides need updating.
113
+
114
+ **Event skeleton**
115
+
116
+ | Before | After |
117
+ | --------------------------------------- | ------------------------------ |
118
+ | `MuiEventCalendar` slot `EventSkeleton` | `MuiEventSkeleton` slot `Root` |
119
+ | `MuiEventTimeline` slot `EventSkeleton` | `MuiEventSkeleton` slot `Root` |
120
+
121
+ **Error container**
122
+
123
+ | Before | After |
124
+ | ------------------------------------------------------------- | --------------------------------------- |
125
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorContainer` | `MuiEventErrorContainer` slot `Root` |
126
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorAlert` | `MuiEventErrorContainer` slot `Alert` |
127
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorMessage` | `MuiEventErrorContainer` slot `Message` |
128
+
129
+ If you customized these through the theme, update the component name and slot
130
+ names accordingly:
131
+
132
+ ```diff
133
+ components: {
134
+ - MuiEventCalendar: {
135
+ + MuiEventSkeleton: {
136
+ styleOverrides: {
137
+ - EventSkeleton: { /* ... */ },
138
+ + Root: { /* ... */ },
139
+ },
140
+ },
141
+ },
142
+ }
143
+ ```
144
+
145
+ #### `@mui/x-scheduler@9.0.0-beta.0`
146
+
147
+ - [scheduler] Add a prop to control whether the resource of an event can be cleared (#22464) @rita-codes
148
+ - [scheduler] Add week number labels to agenda, day and week views (#22594) @mustafajw07
149
+ - [scheduler] Add `weekStartsOn` preference and update date functions to support custom week start (#22426) @mustafajw07
150
+ - [scheduler] Export premium version of the standalone views (#22621) @flaviendelangle
151
+ - [scheduler] Implement timeline virtualization (#22339) @romgrk
152
+ - [scheduler] Split scheduler overview (#22453) @joserodolfofreitas
153
+ - [scheduler] Unify `EventSkeleton` and `ErrorContainer` between `EventCalendar` and `EventTimeline` (#22676) @noraleonte
154
+
155
+ #### `@mui/x-scheduler-premium@9.0.0-beta.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
156
+
157
+ Same changes as in `@mui/x-scheduler@9.0.0-beta.0`.
158
+
159
+ ### Docs
160
+
161
+ - [docs] Add a performance docs page for charts (#22656) @alexfauquette
162
+ - [docs] Add real dataset for maps documentation (#22599) @alexfauquette
163
+ - [docs] Add spacing between selects on charts overview demo (#22589) @bernardobelchior
164
+ - [docs] Reorganize existing chat docs navigation (#22478) @hasdfa
165
+ - [docs] Switch to visionscarto's world atlas dataset (#22669) @cherniavskii
166
+ - [docs] Update TreeView `domstructure` docs and add demo (#22420) @mj12albert
167
+ - [docs] Fix indexation of Scheduler (#22567) @oliviertassinari
168
+ - [docs] Fix wide layout on event timeline lazy loading and Import title (#22604) @rita-codes
169
+ - [docs] Derive class name owners for shared charts classes (#22674) @JCQuintas
170
+
171
+ ### Core
172
+
173
+ - [code-infra] Drop unused and now-transitive deps from docs/package.json (#22549) @LukasTy
174
+ - [code-infra] Refresh CI Node pins to 22.22.3 (#22598) @LukasTy
175
+ - [code-infra] Skip empty product sections in changelog (#22541) @rita-codes
176
+ - [code-infra] Stabilize DataGridScrollRestoration visual regression test (#22553) @Janpot
177
+ - [internal] Add license to the `x-data-grid-generator` (#22240) @arminmeh
178
+ - [internal] Express default value for resource_class (#22569) @oliviertassinari
179
+ - [internal] Fix use of ellipsis (#21852) @oliviertassinari
180
+ - [internal] `useLayoutEffect` with `ResizeObserver` (#22428) @romgrk
181
+
182
+ ### Miscellaneous
183
+
184
+ - [chat-headless] Add built-in chat adapters (#22479) @hasdfa
185
+ - [chat-headless] Harden runtime model and message errors (#22480) @hasdfa
186
+ - [core] Prepare for TypeScript 6 bump (#22551) @LukasTy
187
+ - [core] Use CircleCI Gen2 resource classes (#22610) @LukasTy
188
+ - [infra] Fix broken tag retrieval on `master` during release (#22174) @michelengelen
189
+ - [infra] Group Base UI renovate updates (#22590) @LukasTy
190
+ - [pnpm] Add security settings to pnpm-workspace.yaml (#22611) @Janpot
191
+ - [release] Fix release PR scripts (#22680) @JCQuintas
192
+ - [test] Add a Tree View regression test for lazy loading with getChildrenCount returning -1 (#22605) @mixelburg
193
+ - [test] Disable LCD subpixel antialiasing in regression screenshots (#22602) @Janpot
194
+ - [test] Fix flaky Data Grid Pro data source tree data tests (#22659) @LukasTy
195
+ - [test] Remove stale form-submit TODO from e2e suite (#22564) @LukasTy
196
+ - [x-license] Exclude test keys from the published npm package (#22647) @aemartos
197
+ - [test] Fix flaky WebGL benchmark by polling for canvas content (#22535) @JCQuintas
198
+
3
199
  ## 9.3.0
4
200
 
5
201
  _May 21, 2026_
@@ -239,12 +239,21 @@ process.env.NODE_ENV !== "production" ? CandlestickChart.propTypes = {
239
239
  /**
240
240
  * The list of zoom data related to each axis.
241
241
  * Used to initialize the zoom in a specific configuration without controlling it.
242
+ *
243
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
244
+ * range value (`{ axisId, value }`) resolved against the axis domain.
242
245
  */
243
- initialZoom: _propTypes.default.arrayOf(_propTypes.default.shape({
246
+ initialZoom: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({
244
247
  axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
245
248
  end: _propTypes.default.number.isRequired,
246
249
  start: _propTypes.default.number.isRequired
247
- })),
250
+ }), _propTypes.default.shape({
251
+ axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
252
+ value: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.instanceOf(Date).isRequired), _propTypes.default.arrayOf(_propTypes.default.string.isRequired), _propTypes.default.func, _propTypes.default.shape({
253
+ step: _propTypes.default.number,
254
+ unit: _propTypes.default.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
255
+ })])
256
+ })]).isRequired),
248
257
  /**
249
258
  * If `true`, a loading overlay is displayed.
250
259
  * @default false
@@ -231,12 +231,21 @@ process.env.NODE_ENV !== "production" ? CandlestickChart.propTypes = {
231
231
  /**
232
232
  * The list of zoom data related to each axis.
233
233
  * Used to initialize the zoom in a specific configuration without controlling it.
234
+ *
235
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
236
+ * range value (`{ axisId, value }`) resolved against the axis domain.
234
237
  */
235
- initialZoom: PropTypes.arrayOf(PropTypes.shape({
238
+ initialZoom: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.shape({
236
239
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
237
240
  end: PropTypes.number.isRequired,
238
241
  start: PropTypes.number.isRequired
239
- })),
242
+ }), PropTypes.shape({
243
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
244
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.instanceOf(Date).isRequired), PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func, PropTypes.shape({
245
+ step: PropTypes.number,
246
+ unit: PropTypes.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
247
+ })])
248
+ })]).isRequired),
240
249
  /**
241
250
  * If `true`, a loading overlay is displayed.
242
251
  * @default false
@@ -29,6 +29,9 @@ const getValueExtremum = params => {
29
29
  isDefaultAxis
30
30
  } = params;
31
31
  return Object.keys(series).filter(seriesId => {
32
+ if (axis.domainSeries === 'visible' && series[seriesId].hidden) {
33
+ return false;
34
+ }
32
35
  const axisId = series[seriesId].yAxisId;
33
36
  return axisId === axis.id || isDefaultAxis && axisId === undefined;
34
37
  }).reduce((acc, seriesId) => {
@@ -23,6 +23,9 @@ const getValueExtremum = params => {
23
23
  isDefaultAxis
24
24
  } = params;
25
25
  return Object.keys(series).filter(seriesId => {
26
+ if (axis.domainSeries === 'visible' && series[seriesId].hidden) {
27
+ return false;
28
+ }
26
29
  const axisId = series[seriesId].yAxisId;
27
30
  return axisId === axis.id || isDefaultAxis && axisId === undefined;
28
31
  }).reduce((acc, seriesId) => {
@@ -8,6 +8,7 @@ exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage"));
10
10
  var _warning = require("@mui/x-internals/warning");
11
+ var _internals = require("@mui/x-charts/internals");
11
12
  const candlestickValueFormatter = v => v == null ? '' : v.toLocaleString();
12
13
  const seriesProcessor = (params, dataset, isItemVisible) => {
13
14
  const {
@@ -24,8 +25,7 @@ Either provide a data property to the series or use the dataset prop.` : (0, _fo
24
25
  }
25
26
  const missingKeys = ['open', 'high', 'low', 'close'].filter(key => typeof datasetKeys?.[key] !== 'string');
26
27
  if (datasetKeys && missingKeys.length > 0) {
27
- throw new Error(process.env.NODE_ENV !== "production" ? `MUI X Charts: OHLC series with id='${id}' has incomplete datasetKeys.
28
- Properties ${missingKeys.map(key => `"${key}"`).join(', ')} are missing.` : (0, _formatErrorMessage2.default)(204, id, missingKeys.map(key => `"${key}"`).join(', ')));
28
+ (0, _internals.incompleteDatasetKeysError)('OHLC', id, missingKeys);
29
29
  }
30
30
  let data;
31
31
  if (seriesData.valueGetter) {
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
3
3
  import { warnOnce } from '@mui/x-internals/warning';
4
+ import { incompleteDatasetKeysError } from '@mui/x-charts/internals';
4
5
  const candlestickValueFormatter = v => v == null ? '' : v.toLocaleString();
5
6
  const seriesProcessor = (params, dataset, isItemVisible) => {
6
7
  const {
@@ -17,8 +18,7 @@ Either provide a data property to the series or use the dataset prop.` : _format
17
18
  }
18
19
  const missingKeys = ['open', 'high', 'low', 'close'].filter(key => typeof datasetKeys?.[key] !== 'string');
19
20
  if (datasetKeys && missingKeys.length > 0) {
20
- throw new Error(process.env.NODE_ENV !== "production" ? `MUI X Charts: OHLC series with id='${id}' has incomplete datasetKeys.
21
- Properties ${missingKeys.map(key => `"${key}"`).join(', ')} are missing.` : _formatErrorMessage(204, id, missingKeys.map(key => `"${key}"`).join(', ')));
21
+ incompleteDatasetKeysError('OHLC', id, missingKeys);
22
22
  }
23
23
  let data;
24
24
  if (seriesData.valueGetter) {
@@ -19,8 +19,8 @@ var _useChartsDataProviderPremiumProps = require("./useChartsDataProviderPremium
19
19
  var _seriesConfig2 = require("../CandlestickChart/seriesConfig");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
21
  const packageInfo = {
22
- releaseDate: "MTc3OTMyMTYwMDAwMA==",
23
- version: "9.3.0",
22
+ releaseDate: "MTc4MDUzMTIwMDAwMA==",
23
+ version: "9.4.0",
24
24
  name: 'x-charts-premium'
25
25
  };
26
26
  const defaultSeriesConfigPremium = exports.defaultSeriesConfigPremium = (0, _extends2.default)({}, _internals2.defaultSeriesConfigPro, {
@@ -13,8 +13,8 @@ import { useChartsDataProviderPremiumProps } from "./useChartsDataProviderPremiu
13
13
  import { ohlcSeriesConfig } from "../CandlestickChart/seriesConfig/index.mjs";
14
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  const packageInfo = {
16
- releaseDate: "MTc3OTMyMTYwMDAwMA==",
17
- version: "9.3.0",
16
+ releaseDate: "MTc4MDUzMTIwMDAwMA==",
17
+ version: "9.4.0",
18
18
  name: 'x-charts-premium'
19
19
  };
20
20
  export const defaultSeriesConfigPremium = _extends({}, defaultSeriesConfigPro, {
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { type ChartsProviderProps, type ChartAnyPluginSignature, type ChartSeriesType } from '@mui/x-charts/internals';
3
+ import { type ChartsLocalizationProviderProps } from '@mui/x-charts/ChartsLocalizationProvider';
4
+ import { type ChartsSlotPropsPro, type ChartsSlotsPro } from '@mui/x-charts-pro/internals';
5
+ import { type GeoPremiumPluginSignatures } from "./ChartsGeoDataProviderPremium.plugins.mjs";
6
+ export interface ChartsGeoDataProviderPremiumSlots extends ChartsSlotsPro {}
7
+ export interface ChartsGeoDataProviderPremiumSlotProps extends ChartsSlotPropsPro {}
8
+ export type ChartsGeoDataProviderPremiumProps<SeriesType extends ChartSeriesType = ChartSeriesType, TSignatures extends readonly ChartAnyPluginSignature[] = GeoPremiumPluginSignatures<SeriesType>> = React.PropsWithChildren<ChartsProviderProps<SeriesType, TSignatures>['pluginParams'] & Pick<ChartsProviderProps<SeriesType, TSignatures>, 'plugins'>> & ChartsLocalizationProviderProps & {
9
+ /**
10
+ * Slots to customize charts' components.
11
+ */
12
+ slots?: Partial<ChartsGeoDataProviderPremiumSlots>;
13
+ /**
14
+ * The props for the slots.
15
+ */
16
+ slotProps?: Partial<ChartsGeoDataProviderPremiumSlotProps>;
17
+ };
18
+ /**
19
+ * Orchestrates the data providers for geographic chart components and hooks.
20
+ *
21
+ * Similar to `ChartsDataProviderPremium`, but tailored to map / geo series.
22
+ *
23
+ * Demos:
24
+ *
25
+ * - [Map](https://mui.com/x/react-charts/map/)
26
+ *
27
+ * API:
28
+ *
29
+ * - [ChartsGeoDataProviderPremium API](https://mui.com/x/api/charts/charts-geo-data-provider-premium/)
30
+ */
31
+ declare function ChartsGeoDataProviderPremium<SeriesType extends ChartSeriesType = ChartSeriesType, TSignatures extends readonly ChartAnyPluginSignature[] = GeoPremiumPluginSignatures<SeriesType>>(props: ChartsGeoDataProviderPremiumProps<SeriesType, TSignatures>): import("react/jsx-runtime").JSX.Element;
32
+ declare namespace ChartsGeoDataProviderPremium {
33
+ var propTypes: any;
34
+ }
35
+ export { ChartsGeoDataProviderPremium };
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { type ChartsProviderProps, type ChartAnyPluginSignature, type ChartSeriesType } from '@mui/x-charts/internals';
3
+ import { type ChartsLocalizationProviderProps } from '@mui/x-charts/ChartsLocalizationProvider';
4
+ import { type ChartsSlotPropsPro, type ChartsSlotsPro } from '@mui/x-charts-pro/internals';
5
+ import { type GeoPremiumPluginSignatures } from "./ChartsGeoDataProviderPremium.plugins.js";
6
+ export interface ChartsGeoDataProviderPremiumSlots extends ChartsSlotsPro {}
7
+ export interface ChartsGeoDataProviderPremiumSlotProps extends ChartsSlotPropsPro {}
8
+ export type ChartsGeoDataProviderPremiumProps<SeriesType extends ChartSeriesType = ChartSeriesType, TSignatures extends readonly ChartAnyPluginSignature[] = GeoPremiumPluginSignatures<SeriesType>> = React.PropsWithChildren<ChartsProviderProps<SeriesType, TSignatures>['pluginParams'] & Pick<ChartsProviderProps<SeriesType, TSignatures>, 'plugins'>> & ChartsLocalizationProviderProps & {
9
+ /**
10
+ * Slots to customize charts' components.
11
+ */
12
+ slots?: Partial<ChartsGeoDataProviderPremiumSlots>;
13
+ /**
14
+ * The props for the slots.
15
+ */
16
+ slotProps?: Partial<ChartsGeoDataProviderPremiumSlotProps>;
17
+ };
18
+ /**
19
+ * Orchestrates the data providers for geographic chart components and hooks.
20
+ *
21
+ * Similar to `ChartsDataProviderPremium`, but tailored to map / geo series.
22
+ *
23
+ * Demos:
24
+ *
25
+ * - [Map](https://mui.com/x/react-charts/map/)
26
+ *
27
+ * API:
28
+ *
29
+ * - [ChartsGeoDataProviderPremium API](https://mui.com/x/api/charts/charts-geo-data-provider-premium/)
30
+ */
31
+ declare function ChartsGeoDataProviderPremium<SeriesType extends ChartSeriesType = ChartSeriesType, TSignatures extends readonly ChartAnyPluginSignature[] = GeoPremiumPluginSignatures<SeriesType>>(props: ChartsGeoDataProviderPremiumProps<SeriesType, TSignatures>): import("react/jsx-runtime").JSX.Element;
32
+ declare namespace ChartsGeoDataProviderPremium {
33
+ var propTypes: any;
34
+ }
35
+ export { ChartsGeoDataProviderPremium };