@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
package/src/hooks.ts ADDED
@@ -0,0 +1,476 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { AxisId } from "./state/cartesianAxisSlice"
3
+ import { defaultAxisId } from "./state/cartesianAxisSlice"
4
+ import {
5
+ type BaseAxisWithScale,
6
+ selectAxisDomain,
7
+ selectAxisInverseScale,
8
+ selectAxisInverseDataSnapScale,
9
+ selectAxisInverseTickSnapScale,
10
+ selectAxisScale,
11
+ selectAxisWithScale,
12
+ selectTicksOfAxis,
13
+ } from "./state/selectors/axisSelectors"
14
+ import { useOptionalChartState } from "./state/useChartState"
15
+ import type { ChartState } from "./state/chartState"
16
+ import { useIsPanorama } from "./context/PanoramaContext"
17
+ import {
18
+ selectActiveLabel,
19
+ selectActiveTooltipCoordinate,
20
+ selectActiveTooltipDataPoints,
21
+ } from "./state/selectors/tooltipSelectors"
22
+ import type { ChartOffset, PlotArea } from "./types"
23
+ import { selectChartOffset } from "./state/selectors/selectChartOffset"
24
+ import { selectPlotArea } from "./state/selectors/selectPlotArea"
25
+ import type { CategoricalDomain, Coordinate, NumberDomain, CartesianTickItem } from "./util/types"
26
+ import type { ActiveLabel } from "./synchronisation/types"
27
+ import type { BandPosition } from "./util/scale/RechartsScale"
28
+
29
+ function useSelectorState(): ChartState | undefined {
30
+ const chart = useOptionalChartState()
31
+ if (chart == null) return undefined
32
+ return chart.state
33
+ }
34
+
35
+ export const useXAxis = (xAxisId: AxisId): BaseAxisWithScale | undefined => {
36
+ const state = useSelectorState()
37
+ const isPanorama = useIsPanorama()
38
+ if (state == null) return undefined
39
+ return selectAxisWithScale(state, "xAxis", xAxisId, isPanorama)
40
+ }
41
+
42
+ export const useYAxis = (yAxisId: AxisId): BaseAxisWithScale | undefined => {
43
+ const state = useSelectorState()
44
+ const isPanorama = useIsPanorama()
45
+ if (state == null) return undefined
46
+ return selectAxisWithScale(state, "yAxis", yAxisId, isPanorama)
47
+ }
48
+
49
+ /**
50
+ * A function that converts data values to pixel coordinates.
51
+ * @param value - The data value to convert (number, string, or category).
52
+ * @param options - Optional configuration for banded scales.
53
+ * @param options.position - Position within a band: 'start', 'middle', or 'end'.
54
+ * @returns The pixel coordinate, or `undefined` if the value is not in the domain.
55
+ */
56
+ export type ScaleFunction = (
57
+ value: unknown,
58
+ options?: { position?: BandPosition },
59
+ ) => number | undefined
60
+
61
+ /**
62
+ * A function that converts pixel coordinates back to data values.
63
+ * @param pixelValue - The pixel coordinate to convert.
64
+ * @returns The closest data value in the domain.
65
+ */
66
+ export type InverseScaleFunction = (pixelValue: number) => unknown
67
+
68
+ /**
69
+ * Returns a function to convert data values to pixel coordinates for an {@link XAxis}.
70
+ *
71
+ * This is useful for positioning annotations, custom shapes, or other elements
72
+ * at specific data points on the chart.
73
+ *
74
+ * This hook must be used within a chart context (inside a {@link LineChart}, {@link BarChart}, etc.).
75
+ * Returns `undefined` if used outside a chart context, or if the axes don't exist.
76
+ *
77
+ * Reactive when called inside a tracked scope (JSX, `createMemo`, `createEffect`).
78
+ * See GOTCHA-011.
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * const xScale = useXAxisScale()
83
+ * if (xScale) {
84
+ * const pixelX = xScale('Page A')
85
+ * }
86
+ * ```
87
+ *
88
+ * @param xAxisId The `xAxisId` of the XAxis. Defaults to `0` if not provided.
89
+ * @returns A scale function that maps data values to pixel coordinates, or `undefined`.
90
+ * @since 3.8
91
+ */
92
+ export const useXAxisScale = (
93
+ xAxisId: AxisId = defaultAxisId,
94
+ ): ScaleFunction | undefined => {
95
+ const state = useSelectorState()
96
+ const isPanorama = useIsPanorama()
97
+ if (state == null) return undefined
98
+ const scale = selectAxisScale(state, "xAxis", xAxisId, isPanorama)
99
+ return scale?.map
100
+ }
101
+
102
+ /**
103
+ * Returns a function to convert data values to pixel coordinates for a {@link YAxis}.
104
+ *
105
+ * This is useful for positioning annotations, custom shapes, or other elements
106
+ * at specific data points on the chart.
107
+ *
108
+ * This hook must be used within a chart context (inside a {@link LineChart}, {@link BarChart}, etc.).
109
+ * Returns `undefined` if used outside a chart context, or if the axes don't exist.
110
+ *
111
+ * @example
112
+ * ```tsx
113
+ * const yScale = useYAxisScale()
114
+ * if (yScale) {
115
+ * const pixelY = yScale(1500)
116
+ * }
117
+ * ```
118
+ *
119
+ * @param yAxisId The `yAxisId` of the YAxis. Defaults to `0` if not provided.
120
+ * @returns A scale function that maps data values to pixel coordinates, or `undefined`.
121
+ * @since 3.8
122
+ */
123
+ export const useYAxisScale = (
124
+ yAxisId: AxisId = defaultAxisId,
125
+ ): ScaleFunction | undefined => {
126
+ const state = useSelectorState()
127
+ const isPanorama = useIsPanorama()
128
+ if (state == null) return undefined
129
+ const scale = selectAxisScale(state, "yAxis", yAxisId, isPanorama)
130
+ return scale?.map
131
+ }
132
+
133
+ /**
134
+ * Returns a function to convert pixel coordinates back to data values for an {@link XAxis}.
135
+ *
136
+ * For continuous (numerical) scales, returns an interpolated value.
137
+ * For categorical scales, returns the closest category in the domain - which is the same behaviour as {@link useXAxisInverseDataSnapScale}.
138
+ *
139
+ * This hook must be used within a chart context (inside a {@link LineChart}, {@link BarChart}, etc.).
140
+ * Returns `undefined` if used outside a chart context, or if the axes don't exist.
141
+ *
142
+ * @param xAxisId The `xAxisId` of the XAxis. Defaults to `0` if not provided.
143
+ * @returns An inverse scale function that maps pixel coordinates to data values, or `undefined`.
144
+ * @since 3.8
145
+ */
146
+ export const useXAxisInverseScale = (
147
+ xAxisId: AxisId = defaultAxisId,
148
+ ): InverseScaleFunction | undefined => {
149
+ const state = useSelectorState()
150
+ const isPanorama = useIsPanorama()
151
+ if (state == null) return undefined
152
+ return selectAxisInverseScale(state, "xAxis", xAxisId, isPanorama)
153
+ }
154
+
155
+ /**
156
+ * Returns a function to convert pixel coordinates back to data values for an {@link XAxis},
157
+ * but snapping to the closest data point.
158
+ *
159
+ * @param xAxisId The `xAxisId` of the XAxis. Defaults to `0` if not provided.
160
+ * @returns An inverse scale function that maps pixel coordinates to the closest data value, or `undefined`.
161
+ * @since 3.8
162
+ */
163
+ export const useXAxisInverseDataSnapScale = (
164
+ xAxisId: AxisId = defaultAxisId,
165
+ ): InverseScaleFunction | undefined => {
166
+ const state = useSelectorState()
167
+ const isPanorama = useIsPanorama()
168
+ if (state == null) return undefined
169
+ return selectAxisInverseDataSnapScale(state, "xAxis", xAxisId, isPanorama)
170
+ }
171
+
172
+ /**
173
+ * Returns a function to convert pixel coordinates back to data values for an {@link XAxis},
174
+ * but snapping to the closest axis tick.
175
+ *
176
+ * @param xAxisId The `xAxisId` of the XAxis. Defaults to `0` if not provided.
177
+ * @returns An inverse scale function that maps pixel coordinates to the closest tick value, or `undefined`.
178
+ * @since 3.8
179
+ */
180
+ export const useXAxisInverseTickSnapScale = (
181
+ xAxisId: AxisId = defaultAxisId,
182
+ ): InverseScaleFunction | undefined => {
183
+ const state = useSelectorState()
184
+ const isPanorama = useIsPanorama()
185
+ if (state == null) return undefined
186
+ return selectAxisInverseTickSnapScale(state, "xAxis", xAxisId, isPanorama)
187
+ }
188
+
189
+ /**
190
+ * Returns a function to convert pixel coordinates back to data values for a {@link YAxis}.
191
+ *
192
+ * @param yAxisId The `yAxisId` of the YAxis. Defaults to `0` if not provided.
193
+ * @returns An inverse scale function that maps pixel coordinates to data values, or `undefined`.
194
+ * @since 3.8
195
+ */
196
+ export const useYAxisInverseScale = (
197
+ yAxisId: AxisId = defaultAxisId,
198
+ ): InverseScaleFunction | undefined => {
199
+ const state = useSelectorState()
200
+ const isPanorama = useIsPanorama()
201
+ if (state == null) return undefined
202
+ return selectAxisInverseScale(state, "yAxis", yAxisId, isPanorama)
203
+ }
204
+
205
+ /**
206
+ * Returns a function to convert pixel coordinates back to data values for a {@link YAxis},
207
+ * but snapping to the closest data point.
208
+ *
209
+ * @param yAxisId The `yAxisId` of the YAxis. Defaults to `0` if not provided.
210
+ * @returns An inverse scale function that maps pixel coordinates to the closest data value, or `undefined`.
211
+ * @since 3.8
212
+ */
213
+ export const useYAxisInverseDataSnapScale = (
214
+ yAxisId: AxisId = defaultAxisId,
215
+ ): InverseScaleFunction | undefined => {
216
+ const state = useSelectorState()
217
+ const isPanorama = useIsPanorama()
218
+ if (state == null) return undefined
219
+ return selectAxisInverseDataSnapScale(state, "yAxis", yAxisId, isPanorama)
220
+ }
221
+
222
+ /**
223
+ * Returns a function to convert pixel coordinates back to data values for a {@link YAxis},
224
+ * but snapping to the closest axis tick.
225
+ *
226
+ * @param yAxisId The `yAxisId` of the YAxis. Defaults to `0` if not provided.
227
+ * @returns An inverse scale function that maps pixel coordinates to the closest tick value, or `undefined`.
228
+ * @since 3.8
229
+ */
230
+ export const useYAxisInverseTickSnapScale = (
231
+ yAxisId: AxisId = defaultAxisId,
232
+ ): InverseScaleFunction | undefined => {
233
+ const state = useSelectorState()
234
+ const isPanorama = useIsPanorama()
235
+ if (state == null) return undefined
236
+ return selectAxisInverseTickSnapScale(state, "yAxis", yAxisId, isPanorama)
237
+ }
238
+
239
+ /**
240
+ * Returns the ticks of an {@link XAxis}.
241
+ *
242
+ * @param xAxisId The `xAxisId` of the XAxis. Defaults to `0` if not provided.
243
+ * @returns An array of ticks, or `undefined` if the axis doesn't exist or hasn't been calculated yet.
244
+ * @since 3.8
245
+ */
246
+ export const useXAxisTicks = (
247
+ xAxisId: AxisId = defaultAxisId,
248
+ ): ReadonlyArray<CartesianTickItem> | undefined => {
249
+ const state = useSelectorState()
250
+ const isPanorama = useIsPanorama()
251
+ if (state == null) return undefined
252
+ return selectTicksOfAxis(state, "xAxis", xAxisId, isPanorama)
253
+ }
254
+
255
+ /**
256
+ * Returns the ticks of a {@link YAxis}.
257
+ *
258
+ * @param yAxisId The `yAxisId` of the YAxis. Defaults to `0` if not provided.
259
+ * @returns An array of ticks, or `undefined` if the axis doesn't exist or hasn't been calculated yet.
260
+ * @since 3.8
261
+ */
262
+ export const useYAxisTicks = (
263
+ yAxisId: AxisId = defaultAxisId,
264
+ ): ReadonlyArray<CartesianTickItem> | undefined => {
265
+ const state = useSelectorState()
266
+ const isPanorama = useIsPanorama()
267
+ if (state == null) return undefined
268
+ return selectTicksOfAxis(state, "yAxis", yAxisId, isPanorama)
269
+ }
270
+
271
+ /**
272
+ * Data point with x and y values that can be converted to pixel coordinates.
273
+ * The x and y values should be in the same format as your chart data.
274
+ */
275
+ export type CartesianDataPoint = {
276
+ x: number | string
277
+ y: number | string
278
+ }
279
+
280
+ /**
281
+ * Converts a data point (in data coordinates) to pixel coordinates.
282
+ *
283
+ * This is a convenience hook that combines {@link useXAxisScale} and {@link useYAxisScale} together in a single call.
284
+ *
285
+ * @example
286
+ * ```tsx
287
+ * const coords = useCartesianScale({ x: 'Page C', y: 2500 })
288
+ * if (coords) {
289
+ * return <circle cx={coords.x} cy={coords.y} r={5} fill="red" />
290
+ * }
291
+ * ```
292
+ *
293
+ * @param dataPoint The data point with x and y values in data coordinates.
294
+ * @param xAxisId The `xAxisId` of the X-axis. Defaults to `0` if not provided.
295
+ * @param yAxisId The `yAxisId` of the Y-axis. Defaults to `0` if not provided.
296
+ * @returns The pixel x,y coordinates, or `undefined` if conversion is not possible.
297
+ * @since 3.8
298
+ */
299
+ export const useCartesianScale = (
300
+ dataPoint: CartesianDataPoint,
301
+ xAxisId: AxisId = defaultAxisId,
302
+ yAxisId: AxisId = defaultAxisId,
303
+ ): Coordinate | undefined => {
304
+ const xFn = useXAxisScale(xAxisId)
305
+ const yFn = useYAxisScale(yAxisId)
306
+
307
+ if (xFn == null || yFn == null) {
308
+ return undefined
309
+ }
310
+
311
+ const pixelX = xFn(dataPoint.x)
312
+ const pixelY = yFn(dataPoint.y)
313
+
314
+ if (pixelX == null || pixelY == null) {
315
+ return undefined
316
+ }
317
+
318
+ return { x: pixelX, y: pixelY }
319
+ }
320
+
321
+ /**
322
+ * Returns the active tooltip label. The label is one of the values from the chart data,
323
+ * and is used to display in the tooltip content.
324
+ *
325
+ * Returns undefined if there is no active user interaction or if used outside a chart context.
326
+ *
327
+ * @returns ActiveLabel
328
+ * @since 3.0
329
+ */
330
+ export const useActiveTooltipLabel = (): ActiveLabel => {
331
+ const state = useSelectorState()
332
+ if (state == null) return undefined
333
+ return selectActiveLabel(state)
334
+ }
335
+
336
+ /**
337
+ * Returns the offset of the chart in pixels.
338
+ *
339
+ * Offset defines the blank space between the chart and the plot area.
340
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
341
+ *
342
+ * The offset includes:
343
+ *
344
+ * - Margins
345
+ * - Width and height of the axes
346
+ * - Width and height of the legend
347
+ * - Brush height
348
+ *
349
+ * If you are interested in the margin alone, use {@link useMargin} instead.
350
+ *
351
+ * The offset is independent of charts position on the page, meaning it does not change as the chart is scrolled or resized.
352
+ *
353
+ * It is also independent of the scale and zoom, meaning that as the user zooms in and out,
354
+ * the numbers will not change as the chart gets visually larger or smaller.
355
+ *
356
+ * This hook must be used within a chart context (inside a `<LineChart>`, `<BarChart>`, etc.).
357
+ * This hook returns `undefined` if used outside a chart context.
358
+ *
359
+ * @returns The chart offset in pixels, or undefined if used outside a chart context.
360
+ * @since 3.1
361
+ */
362
+ export const useOffset = (): ChartOffset | undefined => {
363
+ const state = useSelectorState()
364
+ if (state == null) return undefined
365
+ return selectChartOffset(state)
366
+ }
367
+
368
+ /**
369
+ * Plot area is the area where the actual chart data is rendered.
370
+ * This means: bars, lines, scatter points, etc.
371
+ *
372
+ * The plot area is calculated based on the chart dimensions and the offset.
373
+ *
374
+ * Plot area `width` and `height` are the dimensions in pixels;
375
+ * `x` and `y` are the coordinates of the top-left corner of the plot area relative to the chart container.
376
+ *
377
+ * They are also independent of the scale and zoom, meaning that as the user zooms in and out,
378
+ * the plot area dimensions will not change as the chart gets visually larger or smaller.
379
+ *
380
+ * This hook must be used within a chart context (inside a `<LineChart>`, `<BarChart>`, etc.).
381
+ * This hook returns `undefined` if used outside a chart context.
382
+ *
383
+ * @returns The plot area of the chart in pixels, or undefined if used outside a chart context.
384
+ * @since 3.1
385
+ */
386
+ export const usePlotArea = (): PlotArea | undefined => {
387
+ const state = useSelectorState()
388
+ if (state == null) return undefined
389
+ return selectPlotArea(state)
390
+ }
391
+
392
+ /**
393
+ * Returns the currently active data points being displayed in the Tooltip.
394
+ * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.
395
+ *
396
+ * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.
397
+ * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.
398
+ *
399
+ * Data point is whatever you pass as an input to the chart using the `data={}` prop.
400
+ *
401
+ * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)
402
+ * and tooltip with `shared={true}` will display all items at the same time.
403
+ *
404
+ * Returns undefined when used outside a chart context.
405
+ *
406
+ * @returns Data points that are currently visible in a Tooltip
407
+ */
408
+ export const useActiveTooltipDataPoints = <T = unknown>(): ReadonlyArray<T> | undefined => {
409
+ const state = useSelectorState()
410
+ if (state == null) return undefined
411
+ return selectActiveTooltipDataPoints(state) as ReadonlyArray<T> | undefined
412
+ }
413
+
414
+ /**
415
+ * Returns the calculated domain of an X-axis.
416
+ *
417
+ * The domain can be numerical: `[min, max]`, or categorical: `['a', 'b', 'c']`.
418
+ *
419
+ * @param xAxisId The `xAxisId` of the X-axis. Defaults to `0` if not provided.
420
+ * @returns The domain of the X-axis, or `undefined` if it cannot be calculated or if used outside a chart context.
421
+ * @since 3.2
422
+ */
423
+ export const useXAxisDomain = (
424
+ xAxisId: AxisId = defaultAxisId,
425
+ ): NumberDomain | CategoricalDomain | undefined => {
426
+ const state = useSelectorState()
427
+ const isPanorama = useIsPanorama()
428
+ if (state == null) return undefined
429
+ return selectAxisDomain(state, "xAxis", xAxisId, isPanorama)
430
+ }
431
+
432
+ /**
433
+ * Returns the calculated domain of a Y-axis.
434
+ *
435
+ * @param yAxisId The `yAxisId` of the Y-axis. Defaults to `0` if not provided.
436
+ * @returns The domain of the Y-axis, or `undefined` if it cannot be calculated or if used outside a chart context.
437
+ * @since 3.2
438
+ */
439
+ export const useYAxisDomain = (
440
+ yAxisId: AxisId = defaultAxisId,
441
+ ): NumberDomain | CategoricalDomain | undefined => {
442
+ const state = useSelectorState()
443
+ const isPanorama = useIsPanorama()
444
+ if (state == null) return undefined
445
+ return selectAxisDomain(state, "yAxis", yAxisId, isPanorama)
446
+ }
447
+
448
+ /**
449
+ * Returns true if the {@link Tooltip} is currently active (visible).
450
+ *
451
+ * Returns false if the Tooltip is not active or if used outside a chart context.
452
+ *
453
+ * @returns True if the Tooltip is active, false otherwise.
454
+ * @since 3.7
455
+ */
456
+ export const useIsTooltipActive = (): boolean => {
457
+ const chart = useOptionalChartState()
458
+ if (chart == null) return false
459
+ return chart.state.tooltip.settings.active === true
460
+ }
461
+
462
+ /**
463
+ * Returns the Cartesian `x` + `y` coordinates of the active {@link Tooltip}.
464
+ *
465
+ * Returns undefined if there is no active user interaction or if used outside a chart context.
466
+ *
467
+ * @returns The coordinate of the active Tooltip, or undefined.
468
+ * @since 3.7
469
+ */
470
+ export const useActiveTooltipCoordinate = (): Coordinate | undefined => {
471
+ const chart = useOptionalChartState()
472
+ if (chart == null) return undefined
473
+ if (chart.state.tooltip.settings.active !== true) return undefined
474
+ const coordinate = selectActiveTooltipCoordinate(chart.state)
475
+ return coordinate != null ? { x: coordinate.x, y: coordinate.y } : { x: 0, y: 0 }
476
+ }