@solidports/recharts 0.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 (306) hide show
  1. package/LICENSE +22 -0
  2. package/NOTICE +19 -0
  3. package/README.md +102 -0
  4. package/dist/dev.js +28564 -0
  5. package/dist/index.d.ts +7859 -0
  6. package/dist/index.js +28546 -0
  7. package/package.json +98 -0
  8. package/src/animation/AnimatedItems.tsx +183 -0
  9. package/src/animation/AnimationController.ts +33 -0
  10. package/src/animation/AnimationControllerImpl.ts +36 -0
  11. package/src/animation/AnimationHandle.ts +307 -0
  12. package/src/animation/CSSTransitionAnimate.tsx +170 -0
  13. package/src/animation/JavascriptAnimate.tsx +119 -0
  14. package/src/animation/easing.ts +221 -0
  15. package/src/animation/matchBy.ts +164 -0
  16. package/src/animation/timeoutController.ts +70 -0
  17. package/src/animation/useAnimationController.tsx +34 -0
  18. package/src/animation/useAnimationStartSnapshot.ts +118 -0
  19. package/src/animation/util.ts +41 -0
  20. package/src/cartesian/Area.tsx +915 -0
  21. package/src/cartesian/AreaRevealShape.tsx +190 -0
  22. package/src/cartesian/Bar.tsx +1369 -0
  23. package/src/cartesian/BarStack.tsx +152 -0
  24. package/src/cartesian/Brush.tsx +951 -0
  25. package/src/cartesian/CartesianAxis.tsx +722 -0
  26. package/src/cartesian/CartesianGrid.tsx +711 -0
  27. package/src/cartesian/ErrorBar.tsx +361 -0
  28. package/src/cartesian/Funnel.tsx +803 -0
  29. package/src/cartesian/GraphicalItemClipPath.tsx +67 -0
  30. package/src/cartesian/Line.tsx +863 -0
  31. package/src/cartesian/LineDrawShape.tsx +89 -0
  32. package/src/cartesian/ReferenceArea.tsx +331 -0
  33. package/src/cartesian/ReferenceDot.tsx +304 -0
  34. package/src/cartesian/ReferenceLine.tsx +474 -0
  35. package/src/cartesian/Scatter.tsx +888 -0
  36. package/src/cartesian/XAxis.tsx +433 -0
  37. package/src/cartesian/YAxis.tsx +443 -0
  38. package/src/cartesian/ZAxis.tsx +155 -0
  39. package/src/cartesian/cartesianPositionToCSSTranslate.tsx +29 -0
  40. package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +21 -0
  41. package/src/cartesian/getCartesianPosition.tsx +267 -0
  42. package/src/cartesian/getEquidistantTicks.ts +144 -0
  43. package/src/cartesian/getTicks.ts +225 -0
  44. package/src/cartesian/isOutsidePosition.ts +15 -0
  45. package/src/cartesian/useAnimatedLineLength.ts +54 -0
  46. package/src/chart/AreaChart.tsx +29 -0
  47. package/src/chart/BarChart.tsx +29 -0
  48. package/src/chart/CartesianChart.tsx +131 -0
  49. package/src/chart/CategoricalChart.tsx +94 -0
  50. package/src/chart/ComposedChart.tsx +29 -0
  51. package/src/chart/FunnelChart.tsx +29 -0
  52. package/src/chart/LineChart.tsx +29 -0
  53. package/src/chart/PieChart.tsx +50 -0
  54. package/src/chart/PolarChart.tsx +164 -0
  55. package/src/chart/RadarChart.tsx +70 -0
  56. package/src/chart/RadialBarChart.tsx +46 -0
  57. package/src/chart/RechartsWrapper.tsx +551 -0
  58. package/src/chart/Sankey.tsx +1534 -0
  59. package/src/chart/ScatterChart.tsx +29 -0
  60. package/src/chart/SunburstChart.tsx +504 -0
  61. package/src/chart/Treemap.tsx +1223 -0
  62. package/src/chart/createInitialRootProps.ts +24 -0
  63. package/src/chart/types.ts +53 -0
  64. package/src/component/ActivePoints.tsx +144 -0
  65. package/src/component/Cell.tsx +37 -0
  66. package/src/component/Cursor.tsx +185 -0
  67. package/src/component/Customized.tsx +50 -0
  68. package/src/component/DefaultLegendContent.tsx +348 -0
  69. package/src/component/DefaultTooltipContent.tsx +224 -0
  70. package/src/component/Dots.tsx +157 -0
  71. package/src/component/Label.tsx +636 -0
  72. package/src/component/LabelList.tsx +375 -0
  73. package/src/component/Legend.tsx +512 -0
  74. package/src/component/ResponsiveContainer.tsx +348 -0
  75. package/src/component/Text.tsx +541 -0
  76. package/src/component/Tooltip.tsx +470 -0
  77. package/src/component/TooltipBoundingBox.tsx +146 -0
  78. package/src/component/responsiveContainerUtils.ts +134 -0
  79. package/src/container/ClipPathProvider.tsx +51 -0
  80. package/src/container/Layer.tsx +38 -0
  81. package/src/container/RootSurface.tsx +120 -0
  82. package/src/container/Surface.tsx +61 -0
  83. package/src/context/CellsContext.tsx +54 -0
  84. package/src/context/ErrorBarContext.tsx +146 -0
  85. package/src/context/GraphicalItemChildrenScope.tsx +18 -0
  86. package/src/context/PanoramaContext.tsx +9 -0
  87. package/src/context/RegisterGraphicalItemId.tsx +30 -0
  88. package/src/context/accessibilityContext.tsx +6 -0
  89. package/src/context/brushUpdateContext.tsx +9 -0
  90. package/src/context/chartDataContext.tsx +97 -0
  91. package/src/context/chartLayoutContext.tsx +201 -0
  92. package/src/context/legendPayloadContext.tsx +20 -0
  93. package/src/context/legendPortalContext.tsx +12 -0
  94. package/src/context/tooltipContext.tsx +89 -0
  95. package/src/context/tooltipPortalContext.tsx +12 -0
  96. package/src/context/useTooltipAxis.ts +22 -0
  97. package/src/hooks.ts +476 -0
  98. package/src/index.ts +280 -0
  99. package/src/polar/Pie.tsx +1360 -0
  100. package/src/polar/PolarAngleAxis.tsx +616 -0
  101. package/src/polar/PolarGrid.tsx +312 -0
  102. package/src/polar/PolarRadiusAxis.tsx +547 -0
  103. package/src/polar/Radar.tsx +734 -0
  104. package/src/polar/RadialBar.tsx +917 -0
  105. package/src/polar/defaultPolarAngleAxisProps.tsx +27 -0
  106. package/src/polar/defaultPolarRadiusAxisProps.tsx +25 -0
  107. package/src/shape/Cross.tsx +89 -0
  108. package/src/shape/Curve.tsx +343 -0
  109. package/src/shape/Dot.tsx +70 -0
  110. package/src/shape/Polygon.tsx +195 -0
  111. package/src/shape/Rectangle.tsx +470 -0
  112. package/src/shape/Sector.tsx +347 -0
  113. package/src/shape/Symbols.tsx +139 -0
  114. package/src/shape/Trapezoid.tsx +280 -0
  115. package/src/state/RechartsStateContext.tsx +12 -0
  116. package/src/state/RechartsStateProvider.tsx +87 -0
  117. package/src/state/RechartsStoreContext.tsx +25 -0
  118. package/src/state/RechartsStoreProvider.tsx +35 -0
  119. package/src/state/ReportChartProps.tsx +40 -0
  120. package/src/state/ReportEventSettings.tsx +30 -0
  121. package/src/state/ReportMainChartProps.tsx +61 -0
  122. package/src/state/ReportPolarOptions.tsx +35 -0
  123. package/src/state/SetGraphicalItem.ts +79 -0
  124. package/src/state/SetLegendPayload.ts +134 -0
  125. package/src/state/SetTooltipEntrySettings.tsx +72 -0
  126. package/src/state/actions.ts +464 -0
  127. package/src/state/brushSlice.ts +13 -0
  128. package/src/state/cartesianAxisSlice.ts +141 -0
  129. package/src/state/chartDataSlice.ts +50 -0
  130. package/src/state/chartState.ts +297 -0
  131. package/src/state/errorBarSlice.ts +29 -0
  132. package/src/state/eventSettingsSlice.ts +8 -0
  133. package/src/state/events.ts +76 -0
  134. package/src/state/externalEventsMiddleware.ts +255 -0
  135. package/src/state/graphicalItemsSlice.ts +74 -0
  136. package/src/state/hooks/useChartSelectors.tsx +45 -0
  137. package/src/state/keyboardEventsMiddleware.ts +228 -0
  138. package/src/state/layoutSlice.ts +21 -0
  139. package/src/state/legendSlice.ts +57 -0
  140. package/src/state/mouseEventsMiddleware.ts +185 -0
  141. package/src/state/optionsSlice.ts +47 -0
  142. package/src/state/polarAxisSlice.ts +10 -0
  143. package/src/state/polarOptionsSlice.ts +12 -0
  144. package/src/state/rawData.ts +26 -0
  145. package/src/state/referenceElementsSlice.ts +40 -0
  146. package/src/state/renderedTicksSlice.ts +15 -0
  147. package/src/state/rootPropsSlice.ts +47 -0
  148. package/src/state/selectors/areaSelectors.ts +240 -0
  149. package/src/state/selectors/arrayEqualityCheck.ts +29 -0
  150. package/src/state/selectors/axisSelectors.ts +2157 -0
  151. package/src/state/selectors/barSelectors.ts +310 -0
  152. package/src/state/selectors/barStackSelectors.ts +77 -0
  153. package/src/state/selectors/brushSelectors.ts +33 -0
  154. package/src/state/selectors/chartSelector.ts +185 -0
  155. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  156. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +95 -0
  157. package/src/state/selectors/combiners/combineAllBarPositions.ts +122 -0
  158. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  159. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  160. package/src/state/selectors/combiners/combineBarSizeList.ts +80 -0
  161. package/src/state/selectors/combiners/combineCheckedDomain.ts +48 -0
  162. package/src/state/selectors/combiners/combineConfiguredScale.ts +111 -0
  163. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +45 -0
  164. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
  165. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  166. package/src/state/selectors/combiners/combineRealScaleType.ts +44 -0
  167. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  168. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  169. package/src/state/selectors/combiners/combineTooltipPayload.ts +205 -0
  170. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +58 -0
  171. package/src/state/selectors/containerSelectors.ts +12 -0
  172. package/src/state/selectors/dataSelectors.ts +88 -0
  173. package/src/state/selectors/funnelSelectors.ts +75 -0
  174. package/src/state/selectors/graphicalItemSelectors.ts +30 -0
  175. package/src/state/selectors/legendSelectors.ts +29 -0
  176. package/src/state/selectors/lineSelectors.ts +134 -0
  177. package/src/state/selectors/numberDomainEqualityCheck.ts +14 -0
  178. package/src/state/selectors/pickAxisId.ts +5 -0
  179. package/src/state/selectors/pickAxisType.ts +3 -0
  180. package/src/state/selectors/pieSelectors.ts +97 -0
  181. package/src/state/selectors/polarAxisSelectors.ts +201 -0
  182. package/src/state/selectors/polarGridSelectors.ts +28 -0
  183. package/src/state/selectors/polarScaleSelectors.ts +133 -0
  184. package/src/state/selectors/polarSelectors.ts +219 -0
  185. package/src/state/selectors/radarSelectors.ts +191 -0
  186. package/src/state/selectors/radialBarSelectors.ts +435 -0
  187. package/src/state/selectors/rootPropsSelectors.ts +25 -0
  188. package/src/state/selectors/scatterSelectors.ts +96 -0
  189. package/src/state/selectors/selectActivePropsFromChartPointer.ts +26 -0
  190. package/src/state/selectors/selectAllAxes.ts +17 -0
  191. package/src/state/selectors/selectChartOffset.ts +16 -0
  192. package/src/state/selectors/selectChartOffsetInternal.ts +136 -0
  193. package/src/state/selectors/selectLegendArea.ts +20 -0
  194. package/src/state/selectors/selectPlotArea.ts +22 -0
  195. package/src/state/selectors/selectTooltipAxisId.ts +7 -0
  196. package/src/state/selectors/selectTooltipAxisType.ts +32 -0
  197. package/src/state/selectors/selectTooltipEventType.ts +48 -0
  198. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  199. package/src/state/selectors/selectTooltipSettings.ts +39 -0
  200. package/src/state/selectors/selectTooltipState.ts +8 -0
  201. package/src/state/selectors/selectors.ts +271 -0
  202. package/src/state/selectors/tooltipSelectors.ts +578 -0
  203. package/src/state/selectors/touchSelectors.ts +31 -0
  204. package/src/state/store.ts +29 -0
  205. package/src/state/storeIdentity.ts +9 -0
  206. package/src/state/teardownWrite.ts +10 -0
  207. package/src/state/tooltipInteraction.ts +23 -0
  208. package/src/state/tooltipSlice.ts +334 -0
  209. package/src/state/touchEventsMiddleware.ts +214 -0
  210. package/src/state/types/AnimationSettings.ts +20 -0
  211. package/src/state/types/AreaSettings.ts +14 -0
  212. package/src/state/types/BarSettings.ts +15 -0
  213. package/src/state/types/LineSettings.ts +9 -0
  214. package/src/state/types/PieSettings.ts +34 -0
  215. package/src/state/types/RadarSettings.ts +5 -0
  216. package/src/state/types/RadialBarSettings.ts +10 -0
  217. package/src/state/types/ScatterSettings.ts +12 -0
  218. package/src/state/types/StackedGraphicalItem.ts +34 -0
  219. package/src/state/useChartState.ts +17 -0
  220. package/src/state/zIndexSlice.ts +39 -0
  221. package/src/synchronisation/syncSelectors.ts +7 -0
  222. package/src/synchronisation/types.ts +44 -0
  223. package/src/synchronisation/useChartSynchronisation.tsx +404 -0
  224. package/src/theme/RechartsTheme.ts +16 -0
  225. package/src/theme/RechartsThemeContext.ts +19 -0
  226. package/src/theme/darkTheme.ts +13 -0
  227. package/src/theme/graphicalItemIdentity.ts +70 -0
  228. package/src/theme/legacyTheme.ts +17 -0
  229. package/src/theme/lightTheme.ts +13 -0
  230. package/src/types.ts +54 -0
  231. package/src/util/ActiveShapeUtils.tsx +162 -0
  232. package/src/util/BarUtils.tsx +62 -0
  233. package/src/util/BarePortal.tsx +50 -0
  234. package/src/util/CamelCaseSVGAttrs.ts +34 -0
  235. package/src/util/CartesianUtils.ts +48 -0
  236. package/src/util/ChartUtils.ts +802 -0
  237. package/src/util/Constants.ts +42 -0
  238. package/src/util/CssPrefixUtils.ts +20 -0
  239. package/src/util/DOMUtils.ts +129 -0
  240. package/src/util/DataUtils.ts +216 -0
  241. package/src/util/Events.ts +16 -0
  242. package/src/util/FunnelUtils.tsx +15 -0
  243. package/src/util/Global.ts +12 -0
  244. package/src/util/IfOverflow.ts +15 -0
  245. package/src/util/LRUCache.ts +41 -0
  246. package/src/util/LogUtils.ts +22 -0
  247. package/src/util/PolarUtils.ts +132 -0
  248. package/src/util/RadialBarUtils.tsx +24 -0
  249. package/src/util/ReactUtils.ts +95 -0
  250. package/src/util/ReduceCSSCalc.ts +187 -0
  251. package/src/util/ScatterUtils.tsx +52 -0
  252. package/src/util/ShapeElementProps.tsx +87 -0
  253. package/src/util/TickUtils.ts +60 -0
  254. package/src/util/XAxisUtils.ts +48 -0
  255. package/src/util/YAxisUtils.ts +48 -0
  256. package/src/util/axisPropsAreEqual.ts +48 -0
  257. package/src/util/createCartesianCharts.tsx +150 -0
  258. package/src/util/createEventProxy.ts +20 -0
  259. package/src/util/createPolarCharts.tsx +112 -0
  260. package/src/util/cursor/getCursorPoints.ts +46 -0
  261. package/src/util/cursor/getCursorRectangle.ts +28 -0
  262. package/src/util/cursor/getRadialCursorPoints.ts +32 -0
  263. package/src/util/excludeEventProps.ts +171 -0
  264. package/src/util/getActiveCoordinate.ts +213 -0
  265. package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
  266. package/src/util/getClassNameFromUnknown.ts +6 -0
  267. package/src/util/getEveryNth.ts +27 -0
  268. package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
  269. package/src/util/getRelativeCoordinate.ts +80 -0
  270. package/src/util/getSliced.ts +13 -0
  271. package/src/util/hoverDedupe.ts +41 -0
  272. package/src/util/isDomainSpecifiedByUser.ts +219 -0
  273. package/src/util/isWellBehavedNumber.ts +7 -0
  274. package/src/util/pathTotalLength.ts +25 -0
  275. package/src/util/payload/getUniqPayload.ts +28 -0
  276. package/src/util/propsAreEqual.ts +121 -0
  277. package/src/util/resolveDefaultProps.ts +161 -0
  278. package/src/util/round.ts +32 -0
  279. package/src/util/scale/CartesianScaleHelper.ts +72 -0
  280. package/src/util/scale/CustomScaleDefinition.ts +81 -0
  281. package/src/util/scale/RechartsScale.ts +130 -0
  282. package/src/util/scale/createCategoricalInverse.ts +72 -0
  283. package/src/util/scale/getNiceTickValues.ts +311 -0
  284. package/src/util/scale/index.ts +2 -0
  285. package/src/util/scale/util/arithmetic.ts +54 -0
  286. package/src/util/solid-1-compat.ts +310 -0
  287. package/src/util/solidJsxCamelAugment.d.ts +84 -0
  288. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  289. package/src/util/stacks/stackTypes.ts +60 -0
  290. package/src/util/structurallyEqual.ts +31 -0
  291. package/src/util/svgPropertiesAndEvents.ts +53 -0
  292. package/src/util/svgPropertiesNoEvents.ts +571 -0
  293. package/src/util/tooltip/translate.ts +171 -0
  294. package/src/util/typedDataKey.ts +48 -0
  295. package/src/util/types.ts +1560 -0
  296. package/src/util/useAnimationId.ts +31 -0
  297. package/src/util/useElementOffset.ts +110 -0
  298. package/src/util/useId.ts +8 -0
  299. package/src/util/usePrefersReducedMotion.ts +48 -0
  300. package/src/util/useReportScale.ts +24 -0
  301. package/src/util/useUniqueId.ts +30 -0
  302. package/src/zIndex/DefaultZIndexes.ts +84 -0
  303. package/src/zIndex/ZIndexLayer.tsx +121 -0
  304. package/src/zIndex/ZIndexPortal.tsx +79 -0
  305. package/src/zIndex/getZIndexFromUnknown.ts +14 -0
  306. package/src/zIndex/zIndexSelectors.ts +48 -0
@@ -0,0 +1,435 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { computeRadialBarDataItems, type RadialBarDataItem } from "../../polar/RadialBar"
4
+ import { selectChartDataAndAlwaysIgnoreIndexes, selectChartDataWithIndexes } from "./dataSelectors"
5
+ import type { ChartState } from "../store"
6
+ import type { ChartDataState } from "../chartDataSlice"
7
+ import type { AxisId } from "../cartesianAxisSlice"
8
+ import type { CategoricalDomain, LayoutType, LegendType, TickItem } from "../../util/types"
9
+ import {
10
+ selectPolarAxisScale,
11
+ selectPolarAxisTicks,
12
+ selectPolarGraphicalItemAxisTicks,
13
+ } from "./polarScaleSelectors"
14
+ import { type BaseAxisWithScale, combineStackGroups, selectHasBar, selectTooltipAxis } from "./axisSelectors"
15
+ import {
16
+ selectAngleAxis,
17
+ selectAngleAxisRangeWithReversed,
18
+ selectPolarViewBox,
19
+ selectRadiusAxis,
20
+ selectRadiusAxisRangeWithReversed,
21
+ } from "./polarAxisSelectors"
22
+ import { selectPolarAxisCheckedDomain } from "./polarSelectors"
23
+ import { rechartsScaleFactory } from "../../util/scale/RechartsScale"
24
+ import { combineConfiguredScale } from "./combiners/combineConfiguredScale"
25
+ import { combineRealScaleType } from "./combiners/combineRealScaleType"
26
+ import { selectChartName } from "./rootPropsSelectors"
27
+ import { selectChartLayout } from "../../context/chartLayoutContext"
28
+ import {
29
+ type BarPositionPosition,
30
+ getBandSizeOfAxis,
31
+ getBaseValueOfBar,
32
+ isCategoricalAxis,
33
+ } from "../../util/ChartUtils"
34
+ import type { BarWithPosition, SizeList } from "./barSelectors"
35
+ import {
36
+ selectBarCategoryGap,
37
+ selectBarGap,
38
+ selectReverseStackOrder,
39
+ selectRootBarSize,
40
+ selectRootMaxBarSize,
41
+ selectStackOffsetType,
42
+ } from "./rootPropsSelectors"
43
+ import type { PolarGraphicalItemSettings } from "../graphicalItemsSlice"
44
+ import {
45
+ type PolarAxisType,
46
+ selectPolarItemsSettings,
47
+ selectUnfilteredPolarItems,
48
+ } from "./polarSelectors"
49
+ import type { AngleAxisSettings, RadiusAxisSettings } from "../polarAxisSlice"
50
+ import type { LegendPayload } from "../../component/DefaultLegendContent"
51
+ import { isNullish } from "../../util/DataUtils"
52
+
53
+ import type { AllStackGroups, StackSeries } from "../../util/stacks/stackTypes"
54
+ import {
55
+ combineDisplayedStackedData,
56
+ type DisplayedStackedData,
57
+ } from "./combiners/combineDisplayedStackedData"
58
+ import type { RadialBarSettings } from "../types/RadialBarSettings"
59
+ import { type DefinitelyStackedGraphicalItem, isStacked } from "../types/StackedGraphicalItem"
60
+ import { combineBarSizeList } from "./combiners/combineBarSizeList"
61
+ import { combineAllBarPositions } from "./combiners/combineAllBarPositions"
62
+ import { combineStackedData } from "./combiners/combineStackedData"
63
+ import type { RechartsScale } from "../../util/scale/RechartsScale"
64
+ import { chartSelector } from "./chartSelector"
65
+ import { combineBarPosition } from "./combiners/combineBarPosition"
66
+
67
+ const selectRadiusAxisForRadialBar = (
68
+ state: ChartState,
69
+ radiusAxisId: AxisId,
70
+ ): RadiusAxisSettings => selectRadiusAxis(state, radiusAxisId)
71
+
72
+ const selectRadiusAxisScaleForRadar = chartSelector((
73
+ state: ChartState,
74
+ radiusAxisId: AxisId,
75
+ ): RechartsScale | undefined => selectPolarAxisScale(state, "radiusAxis", radiusAxisId))
76
+
77
+ export const selectRadiusAxisWithScale = chartSelector(function selectRadiusAxisWithScale(state: ChartState, radiusAxisId: AxisId): BaseAxisWithScale | undefined {
78
+ const axis = selectRadiusAxisForRadialBar(state, radiusAxisId)
79
+ const scale = selectRadiusAxisScaleForRadar(state, radiusAxisId)
80
+ if (axis == null || scale == null) {
81
+ return undefined
82
+ }
83
+ return { ...axis, scale }
84
+ })
85
+
86
+ export const selectRadiusAxisTicks = chartSelector((
87
+ state: ChartState,
88
+ radiusAxisId: AxisId,
89
+ ): ReadonlyArray<TickItem> | undefined => {
90
+ return selectPolarGraphicalItemAxisTicks(state, "radiusAxis", radiusAxisId, false)
91
+ })
92
+
93
+ const selectAngleAxisForRadialBar = (
94
+ state: ChartState,
95
+ _radiusAxisId: AxisId,
96
+ angleAxisId: AxisId,
97
+ ): AngleAxisSettings => selectAngleAxis(state, angleAxisId)
98
+
99
+ const selectAngleAxisScaleForRadialBar = chartSelector((
100
+ state: ChartState,
101
+ _radiusAxisId: AxisId,
102
+ angleAxisId: AxisId,
103
+ ): RechartsScale | undefined => selectPolarAxisScale(state, "angleAxis", angleAxisId))
104
+
105
+ export const selectAngleAxisWithScale = chartSelector(function selectAngleAxisWithScale(state: ChartState, _radiusAxisId: AxisId, angleAxisId: AxisId): BaseAxisWithScale | undefined {
106
+ const axis = selectAngleAxisForRadialBar(state, _radiusAxisId, angleAxisId)
107
+ const scale = selectAngleAxisScaleForRadialBar(state, _radiusAxisId, angleAxisId)
108
+ if (axis == null || scale == null) {
109
+ return undefined
110
+ }
111
+ return { ...axis, scale }
112
+ })
113
+
114
+ const selectAngleAxisTicks = chartSelector((
115
+ state: ChartState,
116
+ _radiusAxisId: AxisId,
117
+ angleAxisId: AxisId,
118
+ ): ReadonlyArray<TickItem> | undefined => {
119
+ return selectPolarAxisTicks(state, "angleAxis", angleAxisId, false)
120
+ })
121
+
122
+ const selectSynchronisedRadialBarSettings = chartSelector(function selectSynchronisedRadialBarSettings(state: ChartState, radialBarSettings: RadialBarSettings): RadialBarSettings | undefined {
123
+ const graphicalItems = selectUnfilteredPolarItems(state)
124
+ if (
125
+ graphicalItems.some(
126
+ (pgis) =>
127
+ pgis.type === "radialBar" &&
128
+ radialBarSettings.dataKey === pgis.dataKey &&
129
+ radialBarSettings.stackId === pgis.stackId,
130
+ )
131
+ ) {
132
+ return radialBarSettings
133
+ }
134
+ return undefined
135
+ })
136
+
137
+ export const selectBandSizeOfPolarAxis = chartSelector(function selectBandSizeOfPolarAxis(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId): number | undefined {
138
+ const layout: LayoutType = selectChartLayout(state)
139
+ const radiusAxis = selectRadiusAxisWithScale(state, radiusAxisId)
140
+ const radiusAxisTicks = selectRadiusAxisTicks(state, radiusAxisId)
141
+ const angleAxis = selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
142
+ const angleAxisTicks = selectAngleAxisTicks(state, radiusAxisId, angleAxisId)
143
+
144
+ if (isCategoricalAxis(layout, "radiusAxis")) {
145
+ return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false)
146
+ }
147
+ return getBandSizeOfAxis(angleAxis, angleAxisTicks, false)
148
+ })
149
+
150
+ export const selectBaseValue = chartSelector(function selectBaseValue(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId): number | unknown {
151
+ const angleAxis = selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
152
+ const radiusAxis = selectRadiusAxisWithScale(state, radiusAxisId)
153
+ const layout = selectChartLayout(state)
154
+ const numericAxis = layout === "radial" ? angleAxis : radiusAxis
155
+ if (numericAxis == null || numericAxis.scale == null) {
156
+ return undefined
157
+ }
158
+ return getBaseValueOfBar({ numericAxis })
159
+ })
160
+
161
+ const isRadialBar = (item: PolarGraphicalItemSettings): item is RadialBarSettings =>
162
+ item.type === "radialBar"
163
+
164
+ const selectAllVisibleRadialBars = chartSelector(function selectAllVisibleRadialBars(state: ChartState, layout: LayoutType, angleAxisId: AxisId, radiusAxisId: AxisId): ReadonlyArray<RadialBarSettings> {
165
+ const allItems = selectUnfilteredPolarItems(state)
166
+ return allItems
167
+ .filter((i) => {
168
+ if (layout === "centric") {
169
+ return i.angleAxisId === angleAxisId
170
+ }
171
+ return i.radiusAxisId === radiusAxisId
172
+ })
173
+ .filter((i) => i.hide === false)
174
+ .filter(isRadialBar)
175
+ })
176
+
177
+ export const selectPolarBarSizeList = chartSelector(function selectPolarBarSizeList(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, _radialBarSettings: RadialBarSettings): SizeList {
178
+ const layout = selectChartLayout(state)
179
+ return combineBarSizeList(
180
+ selectAllVisibleRadialBars(state, layout, angleAxisId, radiusAxisId),
181
+ selectRootBarSize(state),
182
+ undefined,
183
+ )
184
+ })
185
+
186
+ export const selectPolarBarBandSize = chartSelector(function selectPolarBarBandSize(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, childMaxBarSize: number | undefined): number {
187
+ const layout: LayoutType = selectChartLayout(state)
188
+ const globalMaxBarSize = selectRootMaxBarSize(state)
189
+ const angleAxis = selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
190
+ const angleAxisTicks = selectAngleAxisTicks(state, radiusAxisId, angleAxisId)
191
+ const radiusAxis = selectRadiusAxisWithScale(state, radiusAxisId)
192
+ const radiusAxisTicks = selectRadiusAxisTicks(state, radiusAxisId)
193
+
194
+ const maxBarSize: number | undefined = isNullish(childMaxBarSize)
195
+ ? globalMaxBarSize
196
+ : childMaxBarSize
197
+ if (layout === "centric") {
198
+ return getBandSizeOfAxis(angleAxis, angleAxisTicks, true) ?? maxBarSize ?? 0
199
+ }
200
+ return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, true) ?? maxBarSize ?? 0
201
+ })
202
+
203
+ export const selectAllPolarBarPositions = chartSelector(function selectAllPolarBarPositions(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings): ReadonlyArray<BarWithPosition> | undefined {
204
+ return combineAllBarPositions(
205
+ selectPolarBarSizeList(state, radiusAxisId, angleAxisId, radialBarSettings),
206
+ selectRootMaxBarSize(state),
207
+ selectBarGap(state),
208
+ selectBarCategoryGap(state),
209
+ selectPolarBarBandSize(state, radiusAxisId, angleAxisId, radialBarSettings.maxBarSize),
210
+ selectBandSizeOfPolarAxis(state, radiusAxisId, angleAxisId),
211
+ radialBarSettings.maxBarSize,
212
+ )
213
+ })
214
+
215
+ export const selectPolarBarPosition = chartSelector(function selectPolarBarPosition(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings): BarPositionPosition | undefined {
216
+ return combineBarPosition(
217
+ selectAllPolarBarPositions(state, radiusAxisId, angleAxisId, radialBarSettings),
218
+ selectSynchronisedRadialBarSettings(state, radialBarSettings),
219
+ )
220
+ })
221
+
222
+ const selectStackedRadialBars = chartSelector(function selectStackedRadialBars(state: ChartState, axisType: PolarAxisType, polarAxisId: AxisId): ReadonlyArray<DefinitelyStackedGraphicalItem> {
223
+ return selectPolarItemsSettings(state, axisType, polarAxisId)
224
+ .filter(isRadialBar)
225
+ .filter(isStacked)
226
+ })
227
+
228
+ const selectPolarCombinedStackedData = chartSelector(function selectPolarCombinedStackedData(state: ChartState, axisType: PolarAxisType, polarAxisId: AxisId): DisplayedStackedData {
229
+ return combineDisplayedStackedData(
230
+ selectStackedRadialBars(state, axisType, polarAxisId),
231
+ selectChartDataAndAlwaysIgnoreIndexes(state),
232
+ selectTooltipAxis(state),
233
+ )
234
+ })
235
+
236
+ const selectRadialBarStackGroups = chartSelector(function selectRadialBarStackGroups(state: ChartState, axisType: PolarAxisType, polarAxisId: AxisId): AllStackGroups | undefined {
237
+ return combineStackGroups(
238
+ selectPolarCombinedStackedData(state, axisType, polarAxisId),
239
+ selectStackedRadialBars(state, axisType, polarAxisId),
240
+ selectStackOffsetType(state),
241
+ selectReverseStackOrder(state),
242
+ )
243
+ })
244
+
245
+ const selectRadialBarStackGroupsByLayout = chartSelector(function selectRadialBarStackGroupsByLayout(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId): AllStackGroups | undefined {
246
+ const layout = selectChartLayout(state)
247
+ if (layout === "centric") {
248
+ return selectRadialBarStackGroups(state, "radiusAxis", radiusAxisId)
249
+ }
250
+ return selectRadialBarStackGroups(state, "angleAxis", angleAxisId)
251
+ })
252
+
253
+ const selectPolarStackedData = chartSelector(function selectPolarStackedData(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings): StackSeries | undefined {
254
+ return combineStackedData(
255
+ selectRadialBarStackGroupsByLayout(state, radiusAxisId, angleAxisId),
256
+ selectSynchronisedRadialBarSettings(state, radialBarSettings),
257
+ )
258
+ })
259
+
260
+ const selectRadiusAxisWithScaleWithOverride = chartSelector(function selectRadiusAxisWithScaleWithOverride(state: ChartState, radiusAxisId: AxisId, override: RadiusAxisSettings): BaseAxisWithScale | undefined {
261
+ const axisRange = selectRadiusAxisRangeWithReversed(state, radiusAxisId)
262
+ if (axisRange == null) {
263
+ return undefined
264
+ }
265
+ /* Use override domain directly when set — bypasses the data-derived categorical
266
+ domain that would otherwise swallow a user-specified numerical domain. */
267
+ const axisDomain = override.domain != null
268
+ ? (override.domain as unknown as CategoricalDomain)
269
+ : selectPolarAxisCheckedDomain(state, "radiusAxis", radiusAxisId)
270
+ if (axisDomain == null) {
271
+ return undefined
272
+ }
273
+ const realScaleType = combineRealScaleType(override, selectHasBar(state), selectChartName(state))
274
+ const scale: RechartsScale | undefined = rechartsScaleFactory(
275
+ combineConfiguredScale(override, realScaleType, axisDomain, axisRange),
276
+ )
277
+ if (scale == null) {
278
+ return undefined
279
+ }
280
+ return { ...override, scale }
281
+ })
282
+
283
+ const selectAngleAxisWithScaleWithOverride = chartSelector(function selectAngleAxisWithScaleWithOverride(state: ChartState, _radiusAxisId: AxisId, angleAxisId: AxisId, override: AngleAxisSettings): BaseAxisWithScale | undefined {
284
+ const axisRange = selectAngleAxisRangeWithReversed(state, angleAxisId)
285
+ if (axisRange == null) {
286
+ return undefined
287
+ }
288
+ /* Use override domain directly when set — same rationale as selectRadiusAxisWithScaleWithOverride. */
289
+ const axisDomain = override.domain != null
290
+ ? (override.domain as unknown as CategoricalDomain)
291
+ : selectPolarAxisCheckedDomain(state, "angleAxis", angleAxisId)
292
+ if (axisDomain == null) {
293
+ return undefined
294
+ }
295
+ const realScaleType = combineRealScaleType(override, selectHasBar(state), selectChartName(state))
296
+ const scale: RechartsScale | undefined = rechartsScaleFactory(
297
+ combineConfiguredScale(override, realScaleType, axisDomain, axisRange),
298
+ )
299
+ if (scale == null) {
300
+ return undefined
301
+ }
302
+ return { ...override, scale }
303
+ })
304
+
305
+ export const pickMaxBarSize = (
306
+ _state: ChartState,
307
+ _radiusAxisId: AxisId,
308
+ _angleAxisId: AxisId,
309
+ radialBarSettings: RadialBarSettings,
310
+ _cells: ReadonlyArray<Record<string, unknown>> | undefined,
311
+ ): number | undefined => radialBarSettings.maxBarSize
312
+
313
+ export const selectRadialBarSectors = chartSelector(function selectRadialBarSectors(state: ChartState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<Record<string, unknown>> | undefined, radiusAxisOverride?: RadiusAxisSettings, angleAxisOverride?: AngleAxisSettings): ReadonlyArray<RadialBarDataItem> {
314
+ const angleAxis = angleAxisOverride != null
315
+ ? selectAngleAxisWithScaleWithOverride(state, radiusAxisId, angleAxisId, angleAxisOverride)
316
+ : selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
317
+ const angleAxisTicks = selectAngleAxisTicks(state, radiusAxisId, angleAxisId)
318
+ const radiusAxis = radiusAxisOverride != null
319
+ ? selectRadiusAxisWithScaleWithOverride(state, radiusAxisId, radiusAxisOverride)
320
+ : selectRadiusAxisWithScale(state, radiusAxisId)
321
+ const radiusAxisTicks = selectRadiusAxisTicks(state, radiusAxisId)
322
+ const { chartData, dataStartIndex, dataEndIndex }: ChartDataState =
323
+ selectChartDataWithIndexes(state)
324
+ const syncedSettings = selectSynchronisedRadialBarSettings(state, radialBarSettings)
325
+ const layout: LayoutType = selectChartLayout(state)
326
+ /* When an override is active, derive bandSize from the override scale so
327
+ override domain mutations change bar widths (bandwidth differs per domain size). */
328
+ const bandSize = (() => {
329
+ const legacyBandSize = selectBandSizeOfPolarAxis(state, radiusAxisId, angleAxisId)
330
+ if (radiusAxisOverride == null || radiusAxis == null) {
331
+ return legacyBandSize
332
+ }
333
+ if (isCategoricalAxis(layout, "radiusAxis")) {
334
+ return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false) ?? legacyBandSize
335
+ }
336
+ const overrideAngleAxis = angleAxis ?? selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
337
+ return getBandSizeOfAxis(overrideAngleAxis, angleAxisTicks, false) ?? legacyBandSize
338
+ })()
339
+ const baseValue = selectBaseValue(state, radiusAxisId, angleAxisId)
340
+ const polarViewBox = selectPolarViewBox(state)
341
+ /* Recompute bar positions using override band size so pos.size reflects new axis scale. */
342
+ const pos = (() => {
343
+ if (radiusAxisOverride == null) {
344
+ return selectPolarBarPosition(state, radiusAxisId, angleAxisId, radialBarSettings)
345
+ }
346
+ const sizeList = selectPolarBarSizeList(state, radiusAxisId, angleAxisId, radialBarSettings)
347
+ const globalMaxBarSize = selectRootMaxBarSize(state)
348
+ const childMaxBarSize = pickMaxBarSize(state, radiusAxisId, angleAxisId, radialBarSettings, cells)
349
+ const maxBarSize: number | undefined = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize
350
+ const overrideBandSize: number = (() => {
351
+ if (radiusAxis == null) return 0
352
+ if (isCategoricalAxis(layout, "radiusAxis")) {
353
+ return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, true) ?? maxBarSize ?? 0
354
+ }
355
+ const oa = angleAxis ?? selectAngleAxisWithScale(state, radiusAxisId, angleAxisId)
356
+ return getBandSizeOfAxis(oa, angleAxisTicks, true) ?? maxBarSize ?? 0
357
+ })()
358
+ const allPositions = combineAllBarPositions(
359
+ sizeList,
360
+ globalMaxBarSize,
361
+ selectBarGap(state),
362
+ selectBarCategoryGap(state),
363
+ overrideBandSize,
364
+ bandSize,
365
+ radialBarSettings.maxBarSize,
366
+ )
367
+ return combineBarPosition(allPositions, syncedSettings)
368
+ })()
369
+ const stackedData = selectPolarStackedData(state, radiusAxisId, angleAxisId, radialBarSettings)
370
+
371
+ if (
372
+ syncedSettings == null ||
373
+ radiusAxis == null ||
374
+ angleAxis == null ||
375
+ chartData == null ||
376
+ bandSize == null ||
377
+ pos == null ||
378
+ (layout !== "centric" && layout !== "radial") ||
379
+ radiusAxisTicks == null ||
380
+ polarViewBox == null
381
+ ) {
382
+ return []
383
+ }
384
+ const { dataKey, minPointSize } = syncedSettings
385
+ const { cx, cy, startAngle, endAngle } = polarViewBox
386
+ const displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1)
387
+ const numericAxis = layout === "centric" ? radiusAxis : angleAxis
388
+ const stackedDomain: ReadonlyArray<unknown> | null = stackedData
389
+ ? numericAxis.scale.domain()
390
+ : null
391
+ return computeRadialBarDataItems({
392
+ angleAxis,
393
+ angleAxisTicks,
394
+ bandSize,
395
+ baseValue,
396
+ cells: cells as ReadonlyArray<JSX.Element> | undefined,
397
+ cx,
398
+ cy,
399
+ dataKey,
400
+ dataStartIndex,
401
+ displayedData,
402
+ endAngle,
403
+ layout,
404
+ minPointSize,
405
+ pos,
406
+ radiusAxis,
407
+ radiusAxisTicks,
408
+ stackedData,
409
+ stackedDomain,
410
+ startAngle,
411
+ })
412
+ })
413
+
414
+ export const selectRadialBarLegendPayload = chartSelector(function selectRadialBarLegendPayload(state: ChartState, legendType: LegendType | undefined): ReadonlyArray<LegendPayload> {
415
+ const { chartData, dataStartIndex, dataEndIndex }: ChartDataState =
416
+ selectChartDataAndAlwaysIgnoreIndexes(state)
417
+
418
+ if (chartData == null) {
419
+ return []
420
+ }
421
+ const displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1)
422
+
423
+ if (displayedData.length === 0) {
424
+ return []
425
+ }
426
+
427
+ return displayedData.map((entry): LegendPayload => {
428
+ return {
429
+ color: (entry as Record<string, unknown>).fill as string,
430
+ payload: entry as Record<string, unknown>,
431
+ type: legendType,
432
+ value: (entry as Record<string, unknown>).name as string,
433
+ }
434
+ })
435
+ })
@@ -0,0 +1,25 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import { ChartState } from "../store"
3
+ import { StackOffsetType } from "../../util/types"
4
+ import { SyncMethod } from "../../synchronisation/types"
5
+ import { BaseValue } from "../../cartesian/Area"
6
+
7
+ export const selectRootMaxBarSize = (state: ChartState): number | undefined =>
8
+ state.rootProps.maxBarSize
9
+ export const selectBarGap = (state: ChartState): string | number => state.rootProps.barGap
10
+ export const selectBarCategoryGap = (state: ChartState): string | number =>
11
+ state.rootProps.barCategoryGap
12
+ export const selectRootBarSize = (state: ChartState): string | number | undefined =>
13
+ state.rootProps.barSize
14
+ export const selectStackOffsetType = (state: ChartState): StackOffsetType =>
15
+ state.rootProps.stackOffset
16
+ export const selectReverseStackOrder = (state: ChartState): boolean =>
17
+ state.rootProps.reverseStackOrder
18
+ export const selectChartName = (state: ChartState) => state.options.chartName
19
+
20
+ export const selectSyncId = (state: ChartState) => state.rootProps.syncId
21
+ export const selectSyncMethod = (state: ChartState): SyncMethod => state.rootProps.syncMethod
22
+ export const selectEventEmitter = (state: ChartState) => state.options.eventEmitter
23
+ export const selectChartBaseValue: (state: ChartState) => BaseValue | undefined = (
24
+ state: ChartState,
25
+ ) => state.rootProps.baseValue
@@ -0,0 +1,96 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { computeScatterPoints, type ScatterPointItem } from "../../cartesian/Scatter"
4
+ import type { ChartState } from "../store"
5
+ import type { AxisId, XAxisSettings, YAxisSettings } from "../cartesianAxisSlice"
6
+ import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from "./dataSelectors"
7
+ import type { ChartData, ChartDataState } from "../chartDataSlice"
8
+ import {
9
+ selectAxisWithScale,
10
+ selectTicksOfGraphicalItem,
11
+ selectUnfilteredCartesianItems,
12
+ selectZAxisWithScale,
13
+ type ZAxisWithScale,
14
+ } from "./axisSelectors"
15
+ import type { ScatterSettings } from "../types/ScatterSettings"
16
+ import { chartSelector } from "./chartSelector"
17
+ import type { GraphicalItemId } from "../graphicalItemsSlice"
18
+
19
+ /** Optional overrides — bypass the axis-settings lookup on hot animation frames. */
20
+ export type ScatterAxisOverrides = {
21
+ xAxis?: XAxisSettings
22
+ yAxis?: YAxisSettings
23
+ scatterSettings?: ScatterSettings
24
+ }
25
+
26
+ const selectXAxisWithScale = chartSelector((
27
+ state: ChartState,
28
+ xAxisId: AxisId,
29
+ isPanorama: boolean,
30
+ override?: XAxisSettings,
31
+ ) => selectAxisWithScale(state, "xAxis", xAxisId, isPanorama, override))
32
+
33
+ const selectXAxisTicks = chartSelector((state: ChartState, xAxisId: AxisId, isPanorama: boolean) =>
34
+ selectTicksOfGraphicalItem(state, "xAxis", xAxisId, isPanorama))
35
+
36
+ const selectYAxisWithScale = chartSelector((
37
+ state: ChartState,
38
+ yAxisId: AxisId,
39
+ isPanorama: boolean,
40
+ override?: YAxisSettings,
41
+ ) => selectAxisWithScale(state, "yAxis", yAxisId, isPanorama, override))
42
+
43
+ const selectYAxisTicks = chartSelector((state: ChartState, yAxisId: AxisId, isPanorama: boolean) =>
44
+ selectTicksOfGraphicalItem(state, "yAxis", yAxisId, isPanorama))
45
+
46
+ const selectZAxis = chartSelector((state: ChartState, zAxisId: AxisId): ZAxisWithScale | undefined =>
47
+ selectZAxisWithScale(state, "zAxis", zAxisId, false))
48
+
49
+ const selectSynchronisedScatterSettings = chartSelector(function selectSynchronisedScatterSettings(state: ChartState, id: GraphicalItemId): ScatterSettings | undefined {
50
+ const graphicalItems = selectUnfilteredCartesianItems(state)
51
+ return graphicalItems.filter((item) => item.type === "scatter").find((item) => item.id === id) as
52
+ | ScatterSettings
53
+ | undefined
54
+ })
55
+
56
+ export const selectScatterPoints = chartSelector(function selectScatterPoints(state: ChartState, xAxisId: AxisId, yAxisId: AxisId, zAxisId: AxisId, id: GraphicalItemId, cells: ReadonlyArray<Record<string, unknown>> | undefined, isPanorama: boolean, overrides?: ScatterAxisOverrides): ReadonlyArray<ScatterPointItem> | undefined {
57
+ const { chartData, dataStartIndex, dataEndIndex }: ChartDataState =
58
+ selectChartDataWithIndexesIfNotInPanoramaPosition4(state, undefined, undefined, isPanorama)
59
+ const xAxis = selectXAxisWithScale(state, xAxisId, isPanorama, overrides?.xAxis)
60
+ const xAxisTicks = selectXAxisTicks(state, xAxisId, isPanorama)
61
+ const yAxis = selectYAxisWithScale(state, yAxisId, isPanorama, overrides?.yAxis)
62
+ const yAxisTicks = selectYAxisTicks(state, yAxisId, isPanorama)
63
+ const zAxis = selectZAxis(state, zAxisId)
64
+ const scatterSettings = overrides?.scatterSettings ?? selectSynchronisedScatterSettings(state, id)
65
+
66
+ if (scatterSettings == null) {
67
+ return undefined
68
+ }
69
+ let displayedData: ChartData | undefined
70
+ if (scatterSettings?.data != null && scatterSettings.data.length > 0) {
71
+ displayedData = scatterSettings.data
72
+ } else {
73
+ displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1)
74
+ }
75
+ if (
76
+ displayedData == null ||
77
+ xAxis == null ||
78
+ yAxis == null ||
79
+ xAxisTicks == null ||
80
+ yAxisTicks == null ||
81
+ xAxisTicks?.length === 0 ||
82
+ yAxisTicks?.length === 0
83
+ ) {
84
+ return undefined
85
+ }
86
+ return computeScatterPoints({
87
+ cells: cells as ReadonlyArray<JSX.Element> | undefined,
88
+ displayedData,
89
+ scatterSettings,
90
+ xAxis,
91
+ xAxisTicks,
92
+ yAxis,
93
+ yAxisTicks,
94
+ zAxis,
95
+ })
96
+ })
@@ -0,0 +1,26 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { ChartState } from "../store"
3
+ import type { ActiveTooltipProps } from "../tooltipSlice"
4
+ import { selectChartLayout } from "../../context/chartLayoutContext"
5
+ import { selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks } from "./tooltipSelectors"
6
+ import { selectChartOffsetInternal } from "./selectChartOffsetInternal"
7
+ import { combineActiveProps, selectOrderedTooltipTicks } from "./selectors"
8
+ import { selectPolarViewBox } from "./polarAxisSelectors"
9
+ import type { RelativePointer } from "../../util/types"
10
+ import { selectTooltipAxisType } from "./selectTooltipAxisType"
11
+
12
+ export function selectActivePropsFromChartPointer(
13
+ state: ChartState,
14
+ chartPointer: RelativePointer,
15
+ ): ActiveTooltipProps | undefined {
16
+ return combineActiveProps(
17
+ chartPointer,
18
+ selectChartLayout(state),
19
+ selectPolarViewBox(state),
20
+ selectTooltipAxisType(state),
21
+ selectTooltipAxisRangeWithReverse(state),
22
+ selectTooltipAxisTicks(state),
23
+ selectOrderedTooltipTicks(state),
24
+ selectChartOffsetInternal(state),
25
+ )
26
+ }
@@ -0,0 +1,17 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { ChartState } from "../store"
3
+ import type { XAxisSettings, YAxisSettings } from "../cartesianAxisSlice"
4
+ import { chartSelector } from "./chartSelector"
5
+ import { readChartState } from "../chartState"
6
+
7
+ export const selectAllXAxes = chartSelector(function selectAllXAxes(state: ChartState): ReadonlyArray<XAxisSettings> {
8
+ return Object.values(readChartState(state).cartesianAxes.xAxis)
9
+ .map((e) => e?.settings)
10
+ .filter((s): s is XAxisSettings => s != null && "orientation" in s)
11
+ })
12
+
13
+ export const selectAllYAxes = chartSelector(function selectAllYAxes(state: ChartState): ReadonlyArray<YAxisSettings> {
14
+ return Object.values(readChartState(state).cartesianAxes.yAxis)
15
+ .map((e) => e?.settings)
16
+ .filter((s): s is YAxisSettings => s != null && "orientation" in s)
17
+ })
@@ -0,0 +1,16 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import { selectChartOffsetInternal } from "./selectChartOffsetInternal"
3
+ import type { ChartOffsetInternal } from "../../util/types"
4
+ import type { ChartOffset } from "../../types"
5
+ import { chartSelector } from "./chartSelector"
6
+ import type { ChartState } from "../store"
7
+
8
+ export const selectChartOffset = chartSelector(function selectChartOffset(state: ChartState): ChartOffset {
9
+ const offsetInternal: ChartOffsetInternal = selectChartOffsetInternal(state)
10
+ return {
11
+ bottom: offsetInternal.bottom,
12
+ left: offsetInternal.left,
13
+ right: offsetInternal.right,
14
+ top: offsetInternal.top,
15
+ }
16
+ })