@mui/x-charts-premium 9.0.4 → 9.1.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 (171) hide show
  1. package/BarChartPremium/BarChartPremium.js +2 -1183
  2. package/BarChartPremium/BarChartPremium.mjs +2 -1183
  3. package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.js +2 -0
  4. package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.mjs +2 -0
  5. package/CHANGELOG.md +133 -0
  6. package/CandlestickChart/CandlestickChart.d.mts +2 -2
  7. package/CandlestickChart/CandlestickChart.d.ts +2 -2
  8. package/CandlestickChart/CandlestickChart.js +2 -1183
  9. package/CandlestickChart/CandlestickChart.mjs +2 -1183
  10. package/CandlestickChart/CandlestickWebGLProgram.d.mts +6 -11
  11. package/CandlestickChart/CandlestickWebGLProgram.d.ts +6 -11
  12. package/CandlestickChart/CandlestickWebGLProgram.js +136 -121
  13. package/CandlestickChart/CandlestickWebGLProgram.mjs +137 -122
  14. package/CandlestickChart/useCandlestickPlotData.d.mts +2 -2
  15. package/CandlestickChart/useCandlestickPlotData.d.ts +2 -2
  16. package/CandlestickChart/useCandlestickPlotData.js +121 -61
  17. package/CandlestickChart/useCandlestickPlotData.mjs +122 -61
  18. package/ChartsAxisHighlightValue/index.d.mts +1 -0
  19. package/ChartsAxisHighlightValue/index.d.ts +1 -0
  20. package/ChartsAxisHighlightValue/index.js +16 -0
  21. package/ChartsAxisHighlightValue/index.mjs +2 -0
  22. package/ChartsDataProviderPremium/ChartsDataProviderPremium.js +2 -2
  23. package/ChartsDataProviderPremium/ChartsDataProviderPremium.mjs +2 -2
  24. package/ChartsRadialAxisHighlight/index.d.mts +1 -0
  25. package/ChartsRadialAxisHighlight/index.d.ts +1 -0
  26. package/ChartsRadialAxisHighlight/index.js +16 -0
  27. package/ChartsRadialAxisHighlight/index.mjs +2 -0
  28. package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.js +2 -2
  29. package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.mjs +2 -2
  30. package/HeatmapPremium/HeatmapPremium.js +2 -155
  31. package/HeatmapPremium/HeatmapPremium.mjs +2 -155
  32. package/HeatmapPremium/webgl/HeatmapWebGLPlot.js +19 -112
  33. package/HeatmapPremium/webgl/HeatmapWebGLPlot.mjs +19 -111
  34. package/HeatmapPremium/webgl/HeatmapWebGLProgram.d.mts +24 -0
  35. package/HeatmapPremium/webgl/HeatmapWebGLProgram.d.ts +24 -0
  36. package/HeatmapPremium/webgl/HeatmapWebGLProgram.js +132 -0
  37. package/HeatmapPremium/webgl/HeatmapWebGLProgram.mjs +125 -0
  38. package/HeatmapPremium/webgl/useHeatmapPlotData.d.mts +3 -3
  39. package/HeatmapPremium/webgl/useHeatmapPlotData.d.ts +3 -3
  40. package/HeatmapPremium/webgl/useHeatmapPlotData.js +78 -26
  41. package/HeatmapPremium/webgl/useHeatmapPlotData.mjs +80 -26
  42. package/LICENSE +3 -1
  43. package/RadialBarChart/RadialBarChart.d.mts +60 -0
  44. package/RadialBarChart/RadialBarChart.d.ts +60 -0
  45. package/RadialBarChart/RadialBarChart.js +298 -0
  46. package/RadialBarChart/RadialBarChart.mjs +292 -0
  47. package/RadialBarChart/RadialBarChart.plugins.d.mts +4 -0
  48. package/RadialBarChart/RadialBarChart.plugins.d.ts +4 -0
  49. package/RadialBarChart/RadialBarChart.plugins.js +9 -0
  50. package/RadialBarChart/RadialBarChart.plugins.mjs +3 -0
  51. package/RadialBarChart/RadialBarElement.d.mts +16 -0
  52. package/RadialBarChart/RadialBarElement.d.ts +16 -0
  53. package/RadialBarChart/RadialBarElement.js +54 -0
  54. package/RadialBarChart/RadialBarElement.mjs +48 -0
  55. package/RadialBarChart/RadialBarPlot.d.mts +21 -0
  56. package/RadialBarChart/RadialBarPlot.d.ts +21 -0
  57. package/RadialBarChart/RadialBarPlot.js +85 -0
  58. package/RadialBarChart/RadialBarPlot.mjs +79 -0
  59. package/RadialBarChart/index.d.mts +3 -0
  60. package/RadialBarChart/index.d.ts +3 -0
  61. package/RadialBarChart/index.js +39 -0
  62. package/RadialBarChart/index.mjs +3 -0
  63. package/RadialBarChart/radialBarClasses.d.mts +15 -0
  64. package/RadialBarChart/radialBarClasses.d.ts +15 -0
  65. package/RadialBarChart/radialBarClasses.js +26 -0
  66. package/RadialBarChart/radialBarClasses.mjs +18 -0
  67. package/RadialBarChart/seriesConfig/seriesProcessor.js +4 -0
  68. package/RadialBarChart/seriesConfig/seriesProcessor.mjs +4 -0
  69. package/RadialBarChart/useRadialBarChartProps.d.mts +28 -0
  70. package/RadialBarChart/useRadialBarChartProps.d.ts +28 -0
  71. package/RadialBarChart/useRadialBarChartProps.js +100 -0
  72. package/RadialBarChart/useRadialBarChartProps.mjs +93 -0
  73. package/RadialBarChart/useRadialBarPlotData.d.mts +23 -0
  74. package/RadialBarChart/useRadialBarPlotData.d.ts +23 -0
  75. package/RadialBarChart/useRadialBarPlotData.js +94 -0
  76. package/RadialBarChart/useRadialBarPlotData.mjs +87 -0
  77. package/RadialLineChart/RadialArea.js +13 -1
  78. package/RadialLineChart/RadialArea.mjs +13 -1
  79. package/RadialLineChart/RadialLine.js +13 -1
  80. package/RadialLineChart/RadialLine.mjs +13 -1
  81. package/RadialLineChart/RadialLineChart.d.mts +11 -3
  82. package/RadialLineChart/RadialLineChart.d.ts +11 -3
  83. package/RadialLineChart/RadialLineChart.js +24 -673
  84. package/RadialLineChart/RadialLineChart.mjs +24 -673
  85. package/RadialLineChart/RadialLineHighlightElement.d.mts +15 -0
  86. package/RadialLineChart/RadialLineHighlightElement.d.ts +15 -0
  87. package/RadialLineChart/RadialLineHighlightElement.js +46 -0
  88. package/RadialLineChart/RadialLineHighlightElement.mjs +39 -0
  89. package/RadialLineChart/RadialLineHighlightPlot.d.mts +23 -0
  90. package/RadialLineChart/RadialLineHighlightPlot.d.ts +23 -0
  91. package/RadialLineChart/RadialLineHighlightPlot.js +92 -0
  92. package/RadialLineChart/RadialLineHighlightPlot.mjs +86 -0
  93. package/RadialLineChart/RadialMarkPlot.js +17 -2
  94. package/RadialLineChart/RadialMarkPlot.mjs +17 -2
  95. package/RadialLineChart/index.d.mts +3 -1
  96. package/RadialLineChart/index.d.ts +3 -1
  97. package/RadialLineChart/index.js +22 -0
  98. package/RadialLineChart/index.mjs +3 -1
  99. package/RadialLineChart/radialLineClasses.d.mts +3 -1
  100. package/RadialLineChart/radialLineClasses.d.ts +3 -1
  101. package/RadialLineChart/radialLineClasses.js +2 -1
  102. package/RadialLineChart/radialLineClasses.mjs +2 -1
  103. package/RadialLineChart/seriesConfig/getItemAtPosition.d.mts +6 -0
  104. package/RadialLineChart/seriesConfig/getItemAtPosition.d.ts +6 -0
  105. package/RadialLineChart/seriesConfig/getItemAtPosition.js +353 -0
  106. package/RadialLineChart/seriesConfig/getItemAtPosition.mjs +348 -0
  107. package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.js +2 -1
  108. package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.mjs +2 -1
  109. package/RadialLineChart/seriesConfig/index.js +2 -1
  110. package/RadialLineChart/seriesConfig/index.mjs +2 -1
  111. package/RadialLineChart/seriesConfig/seriesProcessor.js +4 -0
  112. package/RadialLineChart/seriesConfig/seriesProcessor.mjs +4 -0
  113. package/RadialLineChart/useRadialLineChartProps.d.mts +2 -0
  114. package/RadialLineChart/useRadialLineChartProps.d.ts +2 -0
  115. package/RadialLineChart/useRadialLineChartProps.js +16 -8
  116. package/RadialLineChart/useRadialLineChartProps.mjs +16 -8
  117. package/RadialLineChart/useRadialLinePlotData.js +2 -1
  118. package/RadialLineChart/useRadialLinePlotData.mjs +3 -2
  119. package/ScatterChartPremium/ScatterChartPremium.d.mts +25 -0
  120. package/ScatterChartPremium/ScatterChartPremium.d.ts +25 -0
  121. package/ScatterChartPremium/ScatterChartPremium.js +507 -0
  122. package/ScatterChartPremium/ScatterChartPremium.mjs +501 -0
  123. package/ScatterChartPremium/ScatterChartPremium.plugins.d.mts +3 -0
  124. package/ScatterChartPremium/ScatterChartPremium.plugins.d.ts +3 -0
  125. package/ScatterChartPremium/ScatterChartPremium.plugins.js +8 -0
  126. package/ScatterChartPremium/ScatterChartPremium.plugins.mjs +2 -0
  127. package/ScatterChartPremium/ScatterPlotPremium.d.mts +14 -0
  128. package/ScatterChartPremium/ScatterPlotPremium.d.ts +14 -0
  129. package/ScatterChartPremium/ScatterPlotPremium.js +28 -0
  130. package/ScatterChartPremium/ScatterPlotPremium.mjs +21 -0
  131. package/ScatterChartPremium/index.d.mts +3 -0
  132. package/ScatterChartPremium/index.d.ts +3 -0
  133. package/ScatterChartPremium/index.js +26 -0
  134. package/ScatterChartPremium/index.mjs +3 -0
  135. package/ScatterChartPremium/webgl/ScatterWebGLPlot.d.mts +4 -0
  136. package/ScatterChartPremium/webgl/ScatterWebGLPlot.d.ts +4 -0
  137. package/ScatterChartPremium/webgl/ScatterWebGLPlot.js +70 -0
  138. package/ScatterChartPremium/webgl/ScatterWebGLPlot.mjs +65 -0
  139. package/ScatterChartPremium/webgl/ScatterWebGLProgram.d.mts +18 -0
  140. package/ScatterChartPremium/webgl/ScatterWebGLProgram.d.ts +18 -0
  141. package/ScatterChartPremium/webgl/ScatterWebGLProgram.js +129 -0
  142. package/ScatterChartPremium/webgl/ScatterWebGLProgram.mjs +122 -0
  143. package/ScatterChartPremium/webgl/shaders.d.mts +2 -0
  144. package/ScatterChartPremium/webgl/shaders.d.ts +2 -0
  145. package/ScatterChartPremium/webgl/shaders.js +57 -0
  146. package/ScatterChartPremium/webgl/shaders.mjs +51 -0
  147. package/ScatterChartPremium/webgl/useScatterWebGLPlotData.d.mts +7 -0
  148. package/ScatterChartPremium/webgl/useScatterWebGLPlotData.d.ts +7 -0
  149. package/ScatterChartPremium/webgl/useScatterWebGLPlotData.js +140 -0
  150. package/ScatterChartPremium/webgl/useScatterWebGLPlotData.mjs +134 -0
  151. package/index.d.mts +3 -1
  152. package/index.d.ts +3 -1
  153. package/index.js +25 -1
  154. package/index.mjs +4 -2
  155. package/internals/index.d.mts +1 -0
  156. package/internals/index.d.ts +1 -0
  157. package/internals/index.js +13 -0
  158. package/internals/index.mjs +1 -0
  159. package/models/seriesType/radialLine.d.mts +7 -1
  160. package/models/seriesType/radialLine.d.ts +7 -1
  161. package/package.json +184 -114
  162. package/plugins/selectors/useChartCandlestickPosition.selectors.d.mts +1 -1
  163. package/plugins/selectors/useChartCandlestickPosition.selectors.d.ts +1 -1
  164. package/utils/webgl/parseColor.d.mts +2 -1
  165. package/utils/webgl/parseColor.d.ts +2 -1
  166. package/utils/webgl/parseColor.js +8 -7
  167. package/utils/webgl/parseColor.mjs +8 -7
  168. package/utils/webgl/utils.d.mts +13 -0
  169. package/utils/webgl/utils.d.ts +13 -0
  170. package/utils/webgl/utils.js +29 -0
  171. package/utils/webgl/utils.mjs +27 -0
@@ -284,166 +284,13 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
284
284
  * If not provided, a default axis config is used.
285
285
  * An array of [[AxisConfig]] objects.
286
286
  */
287
- xAxis: _propTypes.default.arrayOf(_propTypes.default.shape({
288
- axis: _propTypes.default.oneOf(['x']),
289
- barGapRatio: _propTypes.default.number,
290
- categoryGapRatio: _propTypes.default.number,
291
- classes: _propTypes.default.object,
292
- className: _propTypes.default.string,
293
- colorMap: _propTypes.default.oneOfType([_propTypes.default.shape({
294
- colors: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
295
- type: _propTypes.default.oneOf(['ordinal']).isRequired,
296
- unknownColor: _propTypes.default.string,
297
- values: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired)
298
- }), _propTypes.default.shape({
299
- color: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string.isRequired), _propTypes.default.func]).isRequired,
300
- max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
301
- min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
302
- type: _propTypes.default.oneOf(['continuous']).isRequired
303
- }), _propTypes.default.shape({
304
- colors: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
305
- thresholds: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired).isRequired,
306
- type: _propTypes.default.oneOf(['piecewise']).isRequired
307
- })]),
308
- data: _propTypes.default.array,
309
- dataKey: _propTypes.default.string,
310
- disableLine: _propTypes.default.bool,
311
- disableTicks: _propTypes.default.bool,
312
- domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
313
- groups: _propTypes.default.arrayOf(_propTypes.default.shape({
314
- getValue: _propTypes.default.func.isRequired,
315
- tickLabelStyle: _propTypes.default.object,
316
- tickSize: _propTypes.default.number
317
- })),
318
- height: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
319
- hideTooltip: _propTypes.default.bool,
320
- id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
321
- ignoreTooltip: _propTypes.default.bool,
322
- label: _propTypes.default.string,
323
- labelStyle: _propTypes.default.object,
324
- offset: _propTypes.default.number,
325
- ordinalTimeTicks: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf(['biweekly', 'days', 'hours', 'months', 'quarterly', 'weeks', 'years']), _propTypes.default.shape({
326
- format: _propTypes.default.func.isRequired,
327
- getTickNumber: _propTypes.default.func.isRequired,
328
- isTick: _propTypes.default.func.isRequired
329
- })]).isRequired),
330
- position: _propTypes.default.oneOf(['bottom', 'none', 'top']),
331
- reverse: _propTypes.default.bool,
332
- scaleType: _propTypes.default.oneOf(['band']),
333
- slotProps: _propTypes.default.object,
334
- slots: _propTypes.default.object,
335
- sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
336
- tickInterval: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.array, _propTypes.default.func]),
337
- tickLabelInterval: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.func]),
338
- tickLabelMinGap: _propTypes.default.number,
339
- tickLabelPlacement: _propTypes.default.oneOf(['middle', 'tick']),
340
- tickLabelStyle: _propTypes.default.object,
341
- tickMaxStep: _propTypes.default.number,
342
- tickMinStep: _propTypes.default.number,
343
- tickNumber: _propTypes.default.number,
344
- tickPlacement: _propTypes.default.oneOf(['end', 'extremities', 'middle', 'start']),
345
- tickSize: _propTypes.default.number,
346
- tickSpacing: _propTypes.default.number,
347
- valueFormatter: _propTypes.default.func,
348
- valueGetter: _propTypes.default.func,
349
- zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
350
- filterMode: _propTypes.default.oneOf(['discard', 'keep']),
351
- maxEnd: _propTypes.default.number,
352
- maxSpan: _propTypes.default.number,
353
- minSpan: _propTypes.default.number,
354
- minStart: _propTypes.default.number,
355
- panning: _propTypes.default.bool,
356
- slider: _propTypes.default.shape({
357
- enabled: _propTypes.default.bool,
358
- preview: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.bool]),
359
- showTooltip: _propTypes.default.oneOf(['always', 'hover', 'never']),
360
- size: _propTypes.default.number
361
- }),
362
- step: _propTypes.default.number
363
- }), _propTypes.default.bool])
364
- })).isRequired,
287
+ xAxis: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
365
288
  /**
366
289
  * The configuration of the y-axes.
367
290
  * If not provided, a default axis config is used.
368
291
  * An array of [[AxisConfig]] objects.
369
292
  */
370
- yAxis: _propTypes.default.arrayOf(_propTypes.default.shape({
371
- axis: _propTypes.default.oneOf(['y']),
372
- barGapRatio: _propTypes.default.number,
373
- categoryGapRatio: _propTypes.default.number,
374
- classes: _propTypes.default.object,
375
- className: _propTypes.default.string,
376
- colorMap: _propTypes.default.oneOfType([_propTypes.default.shape({
377
- colors: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
378
- type: _propTypes.default.oneOf(['ordinal']).isRequired,
379
- unknownColor: _propTypes.default.string,
380
- values: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired)
381
- }), _propTypes.default.shape({
382
- color: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string.isRequired), _propTypes.default.func]).isRequired,
383
- max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
384
- min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
385
- type: _propTypes.default.oneOf(['continuous']).isRequired
386
- }), _propTypes.default.shape({
387
- colors: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
388
- thresholds: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired).isRequired,
389
- type: _propTypes.default.oneOf(['piecewise']).isRequired
390
- })]),
391
- data: _propTypes.default.array,
392
- dataKey: _propTypes.default.string,
393
- disableLine: _propTypes.default.bool,
394
- disableTicks: _propTypes.default.bool,
395
- domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
396
- groups: _propTypes.default.arrayOf(_propTypes.default.shape({
397
- getValue: _propTypes.default.func.isRequired,
398
- tickLabelStyle: _propTypes.default.object,
399
- tickSize: _propTypes.default.number
400
- })),
401
- hideTooltip: _propTypes.default.bool,
402
- id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
403
- ignoreTooltip: _propTypes.default.bool,
404
- label: _propTypes.default.string,
405
- labelStyle: _propTypes.default.object,
406
- offset: _propTypes.default.number,
407
- ordinalTimeTicks: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf(['biweekly', 'days', 'hours', 'months', 'quarterly', 'weeks', 'years']), _propTypes.default.shape({
408
- format: _propTypes.default.func.isRequired,
409
- getTickNumber: _propTypes.default.func.isRequired,
410
- isTick: _propTypes.default.func.isRequired
411
- })]).isRequired),
412
- position: _propTypes.default.oneOf(['left', 'none', 'right']),
413
- reverse: _propTypes.default.bool,
414
- scaleType: _propTypes.default.oneOf(['band']),
415
- slotProps: _propTypes.default.object,
416
- slots: _propTypes.default.object,
417
- sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
418
- tickInterval: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.array, _propTypes.default.func]),
419
- tickLabelInterval: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.func]),
420
- tickLabelPlacement: _propTypes.default.oneOf(['middle', 'tick']),
421
- tickLabelStyle: _propTypes.default.object,
422
- tickMaxStep: _propTypes.default.number,
423
- tickMinStep: _propTypes.default.number,
424
- tickNumber: _propTypes.default.number,
425
- tickPlacement: _propTypes.default.oneOf(['end', 'extremities', 'middle', 'start']),
426
- tickSize: _propTypes.default.number,
427
- tickSpacing: _propTypes.default.number,
428
- valueFormatter: _propTypes.default.func,
429
- valueGetter: _propTypes.default.func,
430
- width: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
431
- zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
432
- filterMode: _propTypes.default.oneOf(['discard', 'keep']),
433
- maxEnd: _propTypes.default.number,
434
- maxSpan: _propTypes.default.number,
435
- minSpan: _propTypes.default.number,
436
- minStart: _propTypes.default.number,
437
- panning: _propTypes.default.bool,
438
- slider: _propTypes.default.shape({
439
- enabled: _propTypes.default.bool,
440
- preview: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.bool]),
441
- showTooltip: _propTypes.default.oneOf(['always', 'hover', 'never']),
442
- size: _propTypes.default.number
443
- }),
444
- step: _propTypes.default.number
445
- }), _propTypes.default.bool])
446
- })).isRequired,
293
+ yAxis: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
447
294
  /**
448
295
  * The configuration of the z-axes.
449
296
  */
@@ -277,166 +277,13 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
277
277
  * If not provided, a default axis config is used.
278
278
  * An array of [[AxisConfig]] objects.
279
279
  */
280
- xAxis: PropTypes.arrayOf(PropTypes.shape({
281
- axis: PropTypes.oneOf(['x']),
282
- barGapRatio: PropTypes.number,
283
- categoryGapRatio: PropTypes.number,
284
- classes: PropTypes.object,
285
- className: PropTypes.string,
286
- colorMap: PropTypes.oneOfType([PropTypes.shape({
287
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
288
- type: PropTypes.oneOf(['ordinal']).isRequired,
289
- unknownColor: PropTypes.string,
290
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
291
- }), PropTypes.shape({
292
- color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
293
- max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
294
- min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
295
- type: PropTypes.oneOf(['continuous']).isRequired
296
- }), PropTypes.shape({
297
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
298
- thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
299
- type: PropTypes.oneOf(['piecewise']).isRequired
300
- })]),
301
- data: PropTypes.array,
302
- dataKey: PropTypes.string,
303
- disableLine: PropTypes.bool,
304
- disableTicks: PropTypes.bool,
305
- domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
306
- groups: PropTypes.arrayOf(PropTypes.shape({
307
- getValue: PropTypes.func.isRequired,
308
- tickLabelStyle: PropTypes.object,
309
- tickSize: PropTypes.number
310
- })),
311
- height: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
312
- hideTooltip: PropTypes.bool,
313
- id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
314
- ignoreTooltip: PropTypes.bool,
315
- label: PropTypes.string,
316
- labelStyle: PropTypes.object,
317
- offset: PropTypes.number,
318
- ordinalTimeTicks: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf(['biweekly', 'days', 'hours', 'months', 'quarterly', 'weeks', 'years']), PropTypes.shape({
319
- format: PropTypes.func.isRequired,
320
- getTickNumber: PropTypes.func.isRequired,
321
- isTick: PropTypes.func.isRequired
322
- })]).isRequired),
323
- position: PropTypes.oneOf(['bottom', 'none', 'top']),
324
- reverse: PropTypes.bool,
325
- scaleType: PropTypes.oneOf(['band']),
326
- slotProps: PropTypes.object,
327
- slots: PropTypes.object,
328
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
329
- tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
330
- tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
331
- tickLabelMinGap: PropTypes.number,
332
- tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
333
- tickLabelStyle: PropTypes.object,
334
- tickMaxStep: PropTypes.number,
335
- tickMinStep: PropTypes.number,
336
- tickNumber: PropTypes.number,
337
- tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
338
- tickSize: PropTypes.number,
339
- tickSpacing: PropTypes.number,
340
- valueFormatter: PropTypes.func,
341
- valueGetter: PropTypes.func,
342
- zoom: PropTypes.oneOfType([PropTypes.shape({
343
- filterMode: PropTypes.oneOf(['discard', 'keep']),
344
- maxEnd: PropTypes.number,
345
- maxSpan: PropTypes.number,
346
- minSpan: PropTypes.number,
347
- minStart: PropTypes.number,
348
- panning: PropTypes.bool,
349
- slider: PropTypes.shape({
350
- enabled: PropTypes.bool,
351
- preview: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
352
- showTooltip: PropTypes.oneOf(['always', 'hover', 'never']),
353
- size: PropTypes.number
354
- }),
355
- step: PropTypes.number
356
- }), PropTypes.bool])
357
- })).isRequired,
280
+ xAxis: PropTypes.arrayOf(PropTypes.object).isRequired,
358
281
  /**
359
282
  * The configuration of the y-axes.
360
283
  * If not provided, a default axis config is used.
361
284
  * An array of [[AxisConfig]] objects.
362
285
  */
363
- yAxis: PropTypes.arrayOf(PropTypes.shape({
364
- axis: PropTypes.oneOf(['y']),
365
- barGapRatio: PropTypes.number,
366
- categoryGapRatio: PropTypes.number,
367
- classes: PropTypes.object,
368
- className: PropTypes.string,
369
- colorMap: PropTypes.oneOfType([PropTypes.shape({
370
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
371
- type: PropTypes.oneOf(['ordinal']).isRequired,
372
- unknownColor: PropTypes.string,
373
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
374
- }), PropTypes.shape({
375
- color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
376
- max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
377
- min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
378
- type: PropTypes.oneOf(['continuous']).isRequired
379
- }), PropTypes.shape({
380
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
381
- thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
382
- type: PropTypes.oneOf(['piecewise']).isRequired
383
- })]),
384
- data: PropTypes.array,
385
- dataKey: PropTypes.string,
386
- disableLine: PropTypes.bool,
387
- disableTicks: PropTypes.bool,
388
- domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
389
- groups: PropTypes.arrayOf(PropTypes.shape({
390
- getValue: PropTypes.func.isRequired,
391
- tickLabelStyle: PropTypes.object,
392
- tickSize: PropTypes.number
393
- })),
394
- hideTooltip: PropTypes.bool,
395
- id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
396
- ignoreTooltip: PropTypes.bool,
397
- label: PropTypes.string,
398
- labelStyle: PropTypes.object,
399
- offset: PropTypes.number,
400
- ordinalTimeTicks: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf(['biweekly', 'days', 'hours', 'months', 'quarterly', 'weeks', 'years']), PropTypes.shape({
401
- format: PropTypes.func.isRequired,
402
- getTickNumber: PropTypes.func.isRequired,
403
- isTick: PropTypes.func.isRequired
404
- })]).isRequired),
405
- position: PropTypes.oneOf(['left', 'none', 'right']),
406
- reverse: PropTypes.bool,
407
- scaleType: PropTypes.oneOf(['band']),
408
- slotProps: PropTypes.object,
409
- slots: PropTypes.object,
410
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
411
- tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
412
- tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
413
- tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
414
- tickLabelStyle: PropTypes.object,
415
- tickMaxStep: PropTypes.number,
416
- tickMinStep: PropTypes.number,
417
- tickNumber: PropTypes.number,
418
- tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
419
- tickSize: PropTypes.number,
420
- tickSpacing: PropTypes.number,
421
- valueFormatter: PropTypes.func,
422
- valueGetter: PropTypes.func,
423
- width: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
424
- zoom: PropTypes.oneOfType([PropTypes.shape({
425
- filterMode: PropTypes.oneOf(['discard', 'keep']),
426
- maxEnd: PropTypes.number,
427
- maxSpan: PropTypes.number,
428
- minSpan: PropTypes.number,
429
- minStart: PropTypes.number,
430
- panning: PropTypes.bool,
431
- slider: PropTypes.shape({
432
- enabled: PropTypes.bool,
433
- preview: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
434
- showTooltip: PropTypes.oneOf(['always', 'hover', 'never']),
435
- size: PropTypes.number
436
- }),
437
- step: PropTypes.number
438
- }), PropTypes.bool])
439
- })).isRequired,
286
+ yAxis: PropTypes.arrayOf(PropTypes.object).isRequired,
440
287
  /**
441
288
  * The configuration of the z-axes.
442
289
  */
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
5
  Object.defineProperty(exports, "__esModule", {
7
6
  value: true
@@ -9,11 +8,9 @@ Object.defineProperty(exports, "__esModule", {
9
8
  exports.HeatmapWebGLPlot = HeatmapWebGLPlot;
10
9
  var React = _interopRequireWildcard(require("react"));
11
10
  var _hooks = require("@mui/x-charts/hooks");
12
- var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
11
  var _ChartsWebGLContext = require("../../ChartsWebGLLayer/ChartsWebGLContext");
14
12
  var _hooks2 = require("../../hooks");
15
- var _shaders = require("./shaders");
16
- var _utils = require("../../utils/webgl/utils");
13
+ var _HeatmapWebGLProgram = require("./HeatmapWebGLProgram");
17
14
  var _useHeatmapPlotData = require("./useHeatmapPlotData");
18
15
  var _jsxRuntime = require("react/jsx-runtime");
19
16
  function HeatmapWebGLPlot({
@@ -44,135 +41,45 @@ function HeatmapWebGLPlotImpl(props) {
44
41
  const drawingArea = (0, _hooks.useDrawingArea)();
45
42
  const xScale = (0, _hooks.useXScale)();
46
43
  const yScale = (0, _hooks.useYScale)();
47
- const [vertexShader] = React.useState(() => (0, _utils.compileShader)(gl, _shaders.heatmapVertexShaderSource, gl.VERTEX_SHADER));
48
- const [program] = React.useState(() => {
49
- const p = gl.createProgram();
50
- gl.attachShader(p, vertexShader);
51
- return p;
52
- });
53
- const [quadBuffer] = React.useState(() => (0, _utils.uploadQuadBuffer)(gl));
44
+ const [program, setProgram] = React.useState(null);
54
45
  const dataLength = series.data.length;
55
46
  const drawRef = React.useRef(null);
56
47
  React.useEffect(() => {
57
48
  drawRef.current = () => {
58
- gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, dataLength);
49
+ program?.render(dataLength);
59
50
  };
60
- }, [gl, dataLength]);
51
+ }, [program, dataLength]);
61
52
  React.useEffect(() => {
62
53
  const unregister = registerDraw(drawRef);
63
54
  return unregister;
64
55
  }, [registerDraw]);
65
56
  React.useEffect(() => {
66
- /* Enable blending for transparency
67
- * These are global to the WebGL context and need to be set only once */
68
- gl.enable(gl.BLEND);
69
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
57
+ const prog = new _HeatmapWebGLProgram.HeatmapWebGLProgram(gl);
58
+ setProgram(prog);
59
+ return () => {
60
+ prog.dispose();
61
+ };
70
62
  }, [gl]);
71
63
  const width = xScale.bandwidth();
72
64
  const height = yScale.bandwidth();
73
-
74
- // A border radius cannot be larger than half the width or height of the rectangle
65
+ /* A border radius cannot be larger than half the width or height of the rectangle. */
75
66
  const seriesBorderRadius = Math.min(borderRadius ?? 0, width / 2, height / 2);
76
- const lastSeriesBorderRadiusRef = React.useRef(seriesBorderRadius > 0 ? 0 : 1);
77
- const setupResolutionUniform = React.useCallback(() => {
78
- gl.uniform2f(gl.getUniformLocation(program, 'u_resolution'), drawingArea.width, drawingArea.height);
79
- }, [drawingArea.height, drawingArea.width, gl, program]);
80
- const setupBorderRadiusUniform = React.useCallback(() => {
81
- gl.uniform1f(gl.getUniformLocation(program, 'u_borderRadius'), seriesBorderRadius);
82
- }, [gl, program, seriesBorderRadius]);
83
- const setupRectDimensionsUniform = React.useCallback(() => {
84
- gl.uniform2f(gl.getUniformLocation(program, 'u_dimensions'), width, height);
85
- }, [gl, height, program, width]);
86
- const setupUniformsEvent = (0, _useEventCallback.default)(() => {
87
- (0, _utils.bindQuadBuffer)(gl, program, quadBuffer);
88
- setupBorderRadiusUniform();
89
- setupResolutionUniform();
90
- setupRectDimensionsUniform();
91
- });
92
- const plotData = (0, _useHeatmapPlotData.useHeatmapPlotData)(drawingArea, series, xScale, yScale);
93
- const setupAttributes = React.useCallback(() => {
94
- const {
95
- centers,
96
- colors,
97
- saturations
98
- } = plotData;
99
-
100
- // Upload rectangle centers
101
- const centerBuffer = gl.createBuffer();
102
- gl.bindBuffer(gl.ARRAY_BUFFER, centerBuffer);
103
- gl.bufferData(gl.ARRAY_BUFFER, centers, gl.STATIC_DRAW);
104
- const aCenter = gl.getAttribLocation(program, 'a_center');
105
- gl.enableVertexAttribArray(aCenter);
106
- gl.vertexAttribPointer(aCenter, 2, gl.FLOAT, false, 0, 0);
107
-
108
- // This makes the attribute instanced (one value per rectangle, not per vertex)
109
- gl.vertexAttribDivisor(aCenter, 1);
110
-
111
- // Upload colors
112
- const colorBuffer = gl.createBuffer();
113
- gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
114
- gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
115
- const aColor = gl.getAttribLocation(program, 'a_color');
116
- gl.enableVertexAttribArray(aColor);
117
- gl.vertexAttribPointer(aColor, 4, gl.FLOAT, false, 0, 0);
118
- gl.vertexAttribDivisor(aColor, 1);
119
-
120
- // Upload saturations
121
- const saturationBuffer = gl.createBuffer();
122
- gl.bindBuffer(gl.ARRAY_BUFFER, saturationBuffer);
123
- gl.bufferData(gl.ARRAY_BUFFER, saturations, gl.STATIC_DRAW);
124
- const aSaturation = gl.getAttribLocation(program, 'a_saturation');
125
- gl.enableVertexAttribArray(aSaturation);
126
- gl.vertexAttribPointer(aSaturation, 1, gl.FLOAT, false, 0, 0);
127
- gl.vertexAttribDivisor(aSaturation, 1);
128
- }, [gl, plotData, program]);
129
- const setupAttributesEvent = (0, _useEventCallback.default)(() => setupAttributes());
130
67
  React.useEffect(() => {
131
- const shouldAttachNewShader = lastSeriesBorderRadiusRef.current > 0 !== seriesBorderRadius > 0;
132
- lastSeriesBorderRadiusRef.current = seriesBorderRadius;
133
- if (shouldAttachNewShader) {
134
- const shaderSource = seriesBorderRadius > 0 ? _shaders.heatmapFragmentShaderSourceWithBorderRadius : _shaders.heatmapFragmentShaderSourceNoBorderRadius;
135
- gl.getAttachedShaders(program)?.forEach(shader => {
136
- const shaderType = gl.getShaderParameter(shader, gl.SHADER_TYPE);
137
- if (shaderType === gl.FRAGMENT_SHADER) {
138
- gl.detachShader(program, shader);
139
- gl.deleteShader(shader);
140
- }
141
- });
142
- const fragmentShader = (0, _utils.attachShader)(gl, program, shaderSource, gl.FRAGMENT_SHADER);
143
- gl.linkProgram(program);
144
-
145
- // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#dont_check_shader_compile_status_unless_linking_fails
146
- if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
147
- console.error(`Program linking failed: ${gl.getProgramInfoLog(program)}`);
148
- console.error(`Vertex shader info-log: ${gl.getShaderInfoLog(vertexShader)}`);
149
- console.error(`Fragment shader info-log: ${gl.getShaderInfoLog(fragmentShader)}`);
150
- }
151
-
152
- // Not a hook
153
- // eslint-disable-next-line react-compiler/react-compiler
154
- gl.useProgram(program);
155
- (0, _utils.logWebGLErrors)(gl);
156
- setupUniformsEvent();
157
- setupAttributesEvent();
158
- } else {
159
- setupBorderRadiusUniform();
160
- }
68
+ program?.setResolution(drawingArea.width, drawingArea.height);
161
69
  requestRender();
162
- }, [gl, program, requestRender, seriesBorderRadius, setupBorderRadiusUniform,
163
- // We use the event callback versions here because we only want this effect to trigger when the border radius changes
164
- setupAttributesEvent, setupUniformsEvent, vertexShader]);
70
+ }, [drawingArea.height, drawingArea.width, program, requestRender]);
165
71
  React.useEffect(() => {
166
- setupResolutionUniform();
72
+ program?.setRectDimensions(width, height);
167
73
  requestRender();
168
- }, [setupResolutionUniform, requestRender]);
74
+ }, [width, height, program, requestRender]);
169
75
  React.useEffect(() => {
170
- setupRectDimensionsUniform();
76
+ program?.setBorderRadius(seriesBorderRadius);
171
77
  requestRender();
172
- }, [setupRectDimensionsUniform, requestRender]);
78
+ }, [seriesBorderRadius, program, requestRender]);
79
+ const plotData = (0, _useHeatmapPlotData.useHeatmapPlotData)(drawingArea, series, xScale, yScale);
173
80
  React.useEffect(() => {
174
- setupAttributes();
81
+ program?.plot(plotData);
175
82
  requestRender();
176
- }, [requestRender, setupAttributes]);
83
+ }, [plotData, program, requestRender]);
177
84
  return null;
178
85
  }