@solidports/recharts 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/index.d.ts +40 -2
  2. package/dist/index.js +14238 -7174
  3. package/dist/{dev.js → index.jsx} +18367 -15900
  4. package/dist/server.js +48178 -0
  5. package/package.json +36 -19
  6. package/src/animation/AnimatedItems.tsx +0 -183
  7. package/src/animation/AnimationController.ts +0 -33
  8. package/src/animation/AnimationControllerImpl.ts +0 -36
  9. package/src/animation/AnimationHandle.ts +0 -307
  10. package/src/animation/CSSTransitionAnimate.tsx +0 -170
  11. package/src/animation/JavascriptAnimate.tsx +0 -119
  12. package/src/animation/easing.ts +0 -221
  13. package/src/animation/matchBy.ts +0 -164
  14. package/src/animation/timeoutController.ts +0 -70
  15. package/src/animation/useAnimationController.tsx +0 -34
  16. package/src/animation/useAnimationStartSnapshot.ts +0 -118
  17. package/src/animation/util.ts +0 -41
  18. package/src/cartesian/Area.tsx +0 -915
  19. package/src/cartesian/AreaRevealShape.tsx +0 -190
  20. package/src/cartesian/Bar.tsx +0 -1369
  21. package/src/cartesian/BarStack.tsx +0 -152
  22. package/src/cartesian/Brush.tsx +0 -951
  23. package/src/cartesian/CartesianAxis.tsx +0 -722
  24. package/src/cartesian/CartesianGrid.tsx +0 -711
  25. package/src/cartesian/ErrorBar.tsx +0 -361
  26. package/src/cartesian/Funnel.tsx +0 -803
  27. package/src/cartesian/GraphicalItemClipPath.tsx +0 -67
  28. package/src/cartesian/Line.tsx +0 -863
  29. package/src/cartesian/LineDrawShape.tsx +0 -89
  30. package/src/cartesian/ReferenceArea.tsx +0 -331
  31. package/src/cartesian/ReferenceDot.tsx +0 -304
  32. package/src/cartesian/ReferenceLine.tsx +0 -474
  33. package/src/cartesian/Scatter.tsx +0 -888
  34. package/src/cartesian/XAxis.tsx +0 -433
  35. package/src/cartesian/YAxis.tsx +0 -443
  36. package/src/cartesian/ZAxis.tsx +0 -155
  37. package/src/cartesian/cartesianPositionToCSSTranslate.tsx +0 -29
  38. package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +0 -21
  39. package/src/cartesian/getCartesianPosition.tsx +0 -267
  40. package/src/cartesian/getEquidistantTicks.ts +0 -144
  41. package/src/cartesian/getTicks.ts +0 -225
  42. package/src/cartesian/isOutsidePosition.ts +0 -15
  43. package/src/cartesian/useAnimatedLineLength.ts +0 -54
  44. package/src/chart/AreaChart.tsx +0 -29
  45. package/src/chart/BarChart.tsx +0 -29
  46. package/src/chart/CartesianChart.tsx +0 -131
  47. package/src/chart/CategoricalChart.tsx +0 -94
  48. package/src/chart/ComposedChart.tsx +0 -29
  49. package/src/chart/FunnelChart.tsx +0 -29
  50. package/src/chart/LineChart.tsx +0 -29
  51. package/src/chart/PieChart.tsx +0 -50
  52. package/src/chart/PolarChart.tsx +0 -164
  53. package/src/chart/RadarChart.tsx +0 -70
  54. package/src/chart/RadialBarChart.tsx +0 -46
  55. package/src/chart/RechartsWrapper.tsx +0 -551
  56. package/src/chart/Sankey.tsx +0 -1534
  57. package/src/chart/ScatterChart.tsx +0 -29
  58. package/src/chart/SunburstChart.tsx +0 -504
  59. package/src/chart/Treemap.tsx +0 -1223
  60. package/src/chart/createInitialRootProps.ts +0 -24
  61. package/src/chart/types.ts +0 -53
  62. package/src/component/ActivePoints.tsx +0 -144
  63. package/src/component/Cell.tsx +0 -37
  64. package/src/component/Cursor.tsx +0 -185
  65. package/src/component/Customized.tsx +0 -50
  66. package/src/component/DefaultLegendContent.tsx +0 -348
  67. package/src/component/DefaultTooltipContent.tsx +0 -224
  68. package/src/component/Dots.tsx +0 -157
  69. package/src/component/Label.tsx +0 -636
  70. package/src/component/LabelList.tsx +0 -375
  71. package/src/component/Legend.tsx +0 -512
  72. package/src/component/ResponsiveContainer.tsx +0 -348
  73. package/src/component/Text.tsx +0 -541
  74. package/src/component/Tooltip.tsx +0 -470
  75. package/src/component/TooltipBoundingBox.tsx +0 -146
  76. package/src/component/responsiveContainerUtils.ts +0 -134
  77. package/src/container/ClipPathProvider.tsx +0 -51
  78. package/src/container/Layer.tsx +0 -38
  79. package/src/container/RootSurface.tsx +0 -120
  80. package/src/container/Surface.tsx +0 -61
  81. package/src/context/CellsContext.tsx +0 -54
  82. package/src/context/ErrorBarContext.tsx +0 -146
  83. package/src/context/GraphicalItemChildrenScope.tsx +0 -18
  84. package/src/context/PanoramaContext.tsx +0 -9
  85. package/src/context/RegisterGraphicalItemId.tsx +0 -30
  86. package/src/context/accessibilityContext.tsx +0 -6
  87. package/src/context/brushUpdateContext.tsx +0 -9
  88. package/src/context/chartDataContext.tsx +0 -97
  89. package/src/context/chartLayoutContext.tsx +0 -201
  90. package/src/context/legendPayloadContext.tsx +0 -20
  91. package/src/context/legendPortalContext.tsx +0 -12
  92. package/src/context/tooltipContext.tsx +0 -89
  93. package/src/context/tooltipPortalContext.tsx +0 -12
  94. package/src/context/useTooltipAxis.ts +0 -22
  95. package/src/hooks.ts +0 -476
  96. package/src/index.ts +0 -280
  97. package/src/polar/Pie.tsx +0 -1360
  98. package/src/polar/PolarAngleAxis.tsx +0 -616
  99. package/src/polar/PolarGrid.tsx +0 -312
  100. package/src/polar/PolarRadiusAxis.tsx +0 -547
  101. package/src/polar/Radar.tsx +0 -734
  102. package/src/polar/RadialBar.tsx +0 -917
  103. package/src/polar/defaultPolarAngleAxisProps.tsx +0 -27
  104. package/src/polar/defaultPolarRadiusAxisProps.tsx +0 -25
  105. package/src/shape/Cross.tsx +0 -89
  106. package/src/shape/Curve.tsx +0 -343
  107. package/src/shape/Dot.tsx +0 -70
  108. package/src/shape/Polygon.tsx +0 -195
  109. package/src/shape/Rectangle.tsx +0 -470
  110. package/src/shape/Sector.tsx +0 -347
  111. package/src/shape/Symbols.tsx +0 -139
  112. package/src/shape/Trapezoid.tsx +0 -280
  113. package/src/state/RechartsStateContext.tsx +0 -12
  114. package/src/state/RechartsStateProvider.tsx +0 -87
  115. package/src/state/RechartsStoreContext.tsx +0 -25
  116. package/src/state/RechartsStoreProvider.tsx +0 -35
  117. package/src/state/ReportChartProps.tsx +0 -40
  118. package/src/state/ReportEventSettings.tsx +0 -30
  119. package/src/state/ReportMainChartProps.tsx +0 -61
  120. package/src/state/ReportPolarOptions.tsx +0 -35
  121. package/src/state/SetGraphicalItem.ts +0 -79
  122. package/src/state/SetLegendPayload.ts +0 -134
  123. package/src/state/SetTooltipEntrySettings.tsx +0 -72
  124. package/src/state/actions.ts +0 -464
  125. package/src/state/brushSlice.ts +0 -13
  126. package/src/state/cartesianAxisSlice.ts +0 -141
  127. package/src/state/chartDataSlice.ts +0 -50
  128. package/src/state/chartState.ts +0 -297
  129. package/src/state/errorBarSlice.ts +0 -29
  130. package/src/state/eventSettingsSlice.ts +0 -8
  131. package/src/state/events.ts +0 -76
  132. package/src/state/externalEventsMiddleware.ts +0 -255
  133. package/src/state/graphicalItemsSlice.ts +0 -74
  134. package/src/state/hooks/useChartSelectors.tsx +0 -45
  135. package/src/state/keyboardEventsMiddleware.ts +0 -228
  136. package/src/state/layoutSlice.ts +0 -21
  137. package/src/state/legendSlice.ts +0 -57
  138. package/src/state/mouseEventsMiddleware.ts +0 -185
  139. package/src/state/optionsSlice.ts +0 -47
  140. package/src/state/polarAxisSlice.ts +0 -10
  141. package/src/state/polarOptionsSlice.ts +0 -12
  142. package/src/state/rawData.ts +0 -26
  143. package/src/state/referenceElementsSlice.ts +0 -40
  144. package/src/state/renderedTicksSlice.ts +0 -15
  145. package/src/state/rootPropsSlice.ts +0 -47
  146. package/src/state/selectors/areaSelectors.ts +0 -240
  147. package/src/state/selectors/arrayEqualityCheck.ts +0 -29
  148. package/src/state/selectors/axisSelectors.ts +0 -2157
  149. package/src/state/selectors/barSelectors.ts +0 -310
  150. package/src/state/selectors/barStackSelectors.ts +0 -77
  151. package/src/state/selectors/brushSelectors.ts +0 -33
  152. package/src/state/selectors/chartSelector.ts +0 -185
  153. package/src/state/selectors/combiners/combineActiveLabel.ts +0 -16
  154. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +0 -95
  155. package/src/state/selectors/combiners/combineAllBarPositions.ts +0 -122
  156. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +0 -16
  157. package/src/state/selectors/combiners/combineBarPosition.ts +0 -23
  158. package/src/state/selectors/combiners/combineBarSizeList.ts +0 -80
  159. package/src/state/selectors/combiners/combineCheckedDomain.ts +0 -48
  160. package/src/state/selectors/combiners/combineConfiguredScale.ts +0 -111
  161. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +0 -45
  162. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +0 -50
  163. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +0 -16
  164. package/src/state/selectors/combiners/combineRealScaleType.ts +0 -44
  165. package/src/state/selectors/combiners/combineStackedData.ts +0 -27
  166. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +0 -86
  167. package/src/state/selectors/combiners/combineTooltipPayload.ts +0 -205
  168. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +0 -58
  169. package/src/state/selectors/containerSelectors.ts +0 -12
  170. package/src/state/selectors/dataSelectors.ts +0 -88
  171. package/src/state/selectors/funnelSelectors.ts +0 -75
  172. package/src/state/selectors/graphicalItemSelectors.ts +0 -30
  173. package/src/state/selectors/legendSelectors.ts +0 -29
  174. package/src/state/selectors/lineSelectors.ts +0 -134
  175. package/src/state/selectors/numberDomainEqualityCheck.ts +0 -14
  176. package/src/state/selectors/pickAxisId.ts +0 -5
  177. package/src/state/selectors/pickAxisType.ts +0 -3
  178. package/src/state/selectors/pieSelectors.ts +0 -97
  179. package/src/state/selectors/polarAxisSelectors.ts +0 -201
  180. package/src/state/selectors/polarGridSelectors.ts +0 -28
  181. package/src/state/selectors/polarScaleSelectors.ts +0 -133
  182. package/src/state/selectors/polarSelectors.ts +0 -219
  183. package/src/state/selectors/radarSelectors.ts +0 -191
  184. package/src/state/selectors/radialBarSelectors.ts +0 -435
  185. package/src/state/selectors/rootPropsSelectors.ts +0 -25
  186. package/src/state/selectors/scatterSelectors.ts +0 -96
  187. package/src/state/selectors/selectActivePropsFromChartPointer.ts +0 -26
  188. package/src/state/selectors/selectAllAxes.ts +0 -17
  189. package/src/state/selectors/selectChartOffset.ts +0 -16
  190. package/src/state/selectors/selectChartOffsetInternal.ts +0 -136
  191. package/src/state/selectors/selectLegendArea.ts +0 -20
  192. package/src/state/selectors/selectPlotArea.ts +0 -22
  193. package/src/state/selectors/selectTooltipAxisId.ts +0 -7
  194. package/src/state/selectors/selectTooltipAxisType.ts +0 -32
  195. package/src/state/selectors/selectTooltipEventType.ts +0 -48
  196. package/src/state/selectors/selectTooltipPayloadSearcher.ts +0 -6
  197. package/src/state/selectors/selectTooltipSettings.ts +0 -39
  198. package/src/state/selectors/selectTooltipState.ts +0 -8
  199. package/src/state/selectors/selectors.ts +0 -271
  200. package/src/state/selectors/tooltipSelectors.ts +0 -578
  201. package/src/state/selectors/touchSelectors.ts +0 -31
  202. package/src/state/store.ts +0 -29
  203. package/src/state/storeIdentity.ts +0 -9
  204. package/src/state/teardownWrite.ts +0 -10
  205. package/src/state/tooltipInteraction.ts +0 -23
  206. package/src/state/tooltipSlice.ts +0 -334
  207. package/src/state/touchEventsMiddleware.ts +0 -214
  208. package/src/state/types/AnimationSettings.ts +0 -20
  209. package/src/state/types/AreaSettings.ts +0 -14
  210. package/src/state/types/BarSettings.ts +0 -15
  211. package/src/state/types/LineSettings.ts +0 -9
  212. package/src/state/types/PieSettings.ts +0 -34
  213. package/src/state/types/RadarSettings.ts +0 -5
  214. package/src/state/types/RadialBarSettings.ts +0 -10
  215. package/src/state/types/ScatterSettings.ts +0 -12
  216. package/src/state/types/StackedGraphicalItem.ts +0 -34
  217. package/src/state/useChartState.ts +0 -17
  218. package/src/state/zIndexSlice.ts +0 -39
  219. package/src/synchronisation/syncSelectors.ts +0 -7
  220. package/src/synchronisation/types.ts +0 -44
  221. package/src/synchronisation/useChartSynchronisation.tsx +0 -404
  222. package/src/theme/RechartsTheme.ts +0 -16
  223. package/src/theme/RechartsThemeContext.ts +0 -19
  224. package/src/theme/darkTheme.ts +0 -13
  225. package/src/theme/graphicalItemIdentity.ts +0 -70
  226. package/src/theme/legacyTheme.ts +0 -17
  227. package/src/theme/lightTheme.ts +0 -13
  228. package/src/types.ts +0 -54
  229. package/src/util/ActiveShapeUtils.tsx +0 -162
  230. package/src/util/BarUtils.tsx +0 -62
  231. package/src/util/BarePortal.tsx +0 -50
  232. package/src/util/CamelCaseSVGAttrs.ts +0 -34
  233. package/src/util/CartesianUtils.ts +0 -48
  234. package/src/util/ChartUtils.ts +0 -802
  235. package/src/util/Constants.ts +0 -42
  236. package/src/util/CssPrefixUtils.ts +0 -20
  237. package/src/util/DOMUtils.ts +0 -129
  238. package/src/util/DataUtils.ts +0 -216
  239. package/src/util/Events.ts +0 -16
  240. package/src/util/FunnelUtils.tsx +0 -15
  241. package/src/util/Global.ts +0 -12
  242. package/src/util/IfOverflow.ts +0 -15
  243. package/src/util/LRUCache.ts +0 -41
  244. package/src/util/LogUtils.ts +0 -22
  245. package/src/util/PolarUtils.ts +0 -132
  246. package/src/util/RadialBarUtils.tsx +0 -24
  247. package/src/util/ReactUtils.ts +0 -95
  248. package/src/util/ReduceCSSCalc.ts +0 -187
  249. package/src/util/ScatterUtils.tsx +0 -52
  250. package/src/util/ShapeElementProps.tsx +0 -87
  251. package/src/util/TickUtils.ts +0 -60
  252. package/src/util/XAxisUtils.ts +0 -48
  253. package/src/util/YAxisUtils.ts +0 -48
  254. package/src/util/axisPropsAreEqual.ts +0 -48
  255. package/src/util/createCartesianCharts.tsx +0 -150
  256. package/src/util/createEventProxy.ts +0 -20
  257. package/src/util/createPolarCharts.tsx +0 -112
  258. package/src/util/cursor/getCursorPoints.ts +0 -46
  259. package/src/util/cursor/getCursorRectangle.ts +0 -28
  260. package/src/util/cursor/getRadialCursorPoints.ts +0 -32
  261. package/src/util/excludeEventProps.ts +0 -171
  262. package/src/util/getActiveCoordinate.ts +0 -213
  263. package/src/util/getAxisTypeBasedOnLayout.ts +0 -21
  264. package/src/util/getClassNameFromUnknown.ts +0 -6
  265. package/src/util/getEveryNth.ts +0 -27
  266. package/src/util/getRadiusAndStrokeWidthFromDot.ts +0 -35
  267. package/src/util/getRelativeCoordinate.ts +0 -80
  268. package/src/util/getSliced.ts +0 -13
  269. package/src/util/hoverDedupe.ts +0 -41
  270. package/src/util/isDomainSpecifiedByUser.ts +0 -219
  271. package/src/util/isWellBehavedNumber.ts +0 -7
  272. package/src/util/pathTotalLength.ts +0 -25
  273. package/src/util/payload/getUniqPayload.ts +0 -28
  274. package/src/util/propsAreEqual.ts +0 -121
  275. package/src/util/resolveDefaultProps.ts +0 -161
  276. package/src/util/round.ts +0 -32
  277. package/src/util/scale/CartesianScaleHelper.ts +0 -72
  278. package/src/util/scale/CustomScaleDefinition.ts +0 -81
  279. package/src/util/scale/RechartsScale.ts +0 -130
  280. package/src/util/scale/createCategoricalInverse.ts +0 -72
  281. package/src/util/scale/getNiceTickValues.ts +0 -311
  282. package/src/util/scale/index.ts +0 -2
  283. package/src/util/scale/util/arithmetic.ts +0 -54
  284. package/src/util/solid-1-compat.ts +0 -310
  285. package/src/util/solidJsxCamelAugment.d.ts +0 -84
  286. package/src/util/stacks/getStackSeriesIdentifier.ts +0 -21
  287. package/src/util/stacks/stackTypes.ts +0 -60
  288. package/src/util/structurallyEqual.ts +0 -31
  289. package/src/util/svgPropertiesAndEvents.ts +0 -53
  290. package/src/util/svgPropertiesNoEvents.ts +0 -571
  291. package/src/util/tooltip/translate.ts +0 -171
  292. package/src/util/typedDataKey.ts +0 -48
  293. package/src/util/types.ts +0 -1560
  294. package/src/util/useAnimationId.ts +0 -31
  295. package/src/util/useElementOffset.ts +0 -110
  296. package/src/util/useId.ts +0 -8
  297. package/src/util/usePrefersReducedMotion.ts +0 -48
  298. package/src/util/useReportScale.ts +0 -24
  299. package/src/util/useUniqueId.ts +0 -30
  300. package/src/zIndex/DefaultZIndexes.ts +0 -84
  301. package/src/zIndex/ZIndexLayer.tsx +0 -121
  302. package/src/zIndex/ZIndexPortal.tsx +0 -79
  303. package/src/zIndex/getZIndexFromUnknown.ts +0 -14
  304. package/src/zIndex/zIndexSelectors.ts +0 -48
@@ -1,722 +0,0 @@
1
- /* eslint-disable import/no-cycle, sort-keys */
2
- /**
3
- * @fileOverview Cartesian Axis
4
- */
5
- import type { JSX } from '@solidjs/web';
6
- import { createEffect, createMemo, createSignal, For, onCleanup, onSettled, Show, untrack, useContext } from 'solid-js';
7
- import isEqual from "es-toolkit/compat/isEqual"
8
- import { RechartsStateContext } from "../state/RechartsStateContext"
9
- import { teardownWrite } from "../state/teardownWrite"
10
- import type { AxisId } from "../state/cartesianAxisSlice"
11
- import type { TickItem as RenderedTickItem } from "../util/types"
12
- import get from "es-toolkit/compat/get"
13
- import { clsx } from "clsx"
14
- import { Layer } from "../container/Layer"
15
- import { Text, Props as TextProps, TextAnchor, TextVerticalAnchor, isValidTextAnchor } from "../component/Text"
16
- import {
17
- CartesianLabelContextProvider,
18
- ImplicitLabelType,
19
- CartesianLabelFromLabelProp,
20
- } from "../component/Label"
21
- import { isNumber } from "../util/DataUtils"
22
- import {
23
- CartesianViewBox,
24
- adaptEventsOfChild,
25
- PresentationAttributesAdaptChildEvent,
26
- CartesianTickItem,
27
- AxisInterval,
28
- Coordinate,
29
- RectangleCoordinate,
30
- TickProp,
31
- BaseTickContentProps,
32
- XAxisTickContentProps,
33
- YAxisTickContentProps,
34
- } from "../util/types"
35
- import { getTicks } from "./getTicks"
36
- import {
37
- svgPropertiesNoEvents,
38
- svgPropertiesNoEventsFromUnknown,
39
- } from "../util/svgPropertiesNoEvents"
40
- import {
41
- XAxisOrientation,
42
- XAxisPadding,
43
- YAxisOrientation,
44
- YAxisPadding,
45
- } from "../state/cartesianAxisSlice"
46
- import { RequiresDefaultProps, resolveDefaultProps } from "../util/resolveDefaultProps"
47
- import { ZIndexable, ZIndexLayer } from "../zIndex/ZIndexLayer"
48
- import { DefaultZIndexes } from "../zIndex/DefaultZIndexes"
49
- import { getClassNameFromUnknown } from "../util/getClassNameFromUnknown"
50
- import { cloneJsxNodeWithProps, isJsxNode } from "../util/ReactUtils"
51
- import { bindRef, splitProps } from "../util/solid-1-compat"
52
- import { getCalculatedXAxisHeight } from "../util/XAxisUtils"
53
- import { getCalculatedYAxisWidth } from "../util/YAxisUtils"
54
-
55
- /** The orientation of the axis in correspondence to the chart */
56
- export type Orientation = XAxisOrientation | YAxisOrientation
57
- /** A unit to be appended to a value */
58
- export type Unit = string | number
59
- /** The formatter function of tick */
60
- export type TickFormatter = (value: unknown, index: number) => string
61
-
62
- export interface CartesianAxisProps extends ZIndexable {
63
- class?: string
64
- axisType?: "xAxis" | "yAxis"
65
- /** Identifies the axis whose rendered ticks are published to the store. */
66
- axisId?: AxisId
67
- x?: number
68
- y?: number
69
- width?: number
70
- height?: number
71
- unit?: Unit
72
- orientation?: Orientation
73
- viewBox?: CartesianViewBox
74
- tick?: TickProp<unknown>
75
- /**
76
- * Additional props to spread to each tick Text element.
77
- * Optional, the CartesianAxis component will provide its own defaults calculated from other props.
78
- */
79
- tickTextProps?: TextProps
80
- axisLine?: boolean | JSX.LineSVGAttributes<SVGLineElement>
81
- tickLine?: boolean | JSX.LineSVGAttributes<SVGLineElement>
82
- mirror?: boolean
83
- tickMargin?: number
84
- hide?: boolean
85
- label?: ImplicitLabelType
86
- /** Padding information passed to custom tick components */
87
- padding?: XAxisPadding | YAxisPadding
88
-
89
- minTickGap?: number
90
- /**
91
- * Careful - this is the same name as XAxis + YAxis `ticks` but completely different object!
92
- */
93
- ticks?: ReadonlyArray<CartesianTickItem>
94
- tickSize?: number
95
- tickFormatter?: TickFormatter
96
- interval?: AxisInterval
97
- /** Angle in which ticks will be rendered. */
98
- angle?: number
99
- /**
100
- * CartesianAxis reads scale internally and this prop is ignored since 3.0
101
- * @deprecated
102
- */
103
- scale?: unknown
104
- labelRef?: SVGTextElement | null
105
- /**
106
- * Imperative size API for XAxis `height="auto"` / YAxis `width="auto"`.
107
- * Separate from `ref`, which is the tick-labels `<g>` element.
108
- */
109
- axisRef?: (api: CartesianAxisRef | null) => void
110
-
111
- ref?: SVGElement | ((el: SVGElement) => void)
112
- }
113
-
114
- export interface CartesianAxisRef {
115
- getCalculatedWidth(): number
116
- getCalculatedHeight(): number
117
- }
118
-
119
- export const defaultCartesianAxisProps = {
120
- axisLine: true,
121
- height: 0,
122
- interval: "preserveEnd",
123
- minTickGap: 5,
124
- mirror: false,
125
- orientation: "bottom",
126
- stroke: "#666",
127
-
128
- tick: true,
129
- tickLine: true,
130
- tickMargin: 2,
131
- tickSize: 6,
132
- ticks: [] as CartesianAxisProps["ticks"],
133
-
134
- viewBox: { height: 0, width: 0, x: 0, y: 0 },
135
- width: 0,
136
- x: 0,
137
- y: 0,
138
- zIndex: DefaultZIndexes.axis,
139
- } as const satisfies Partial<Props>
140
-
141
- /*
142
- * `viewBox` and `scale` are SVG attributes.
143
- * Recharts however - unfortunately - has its own attributes named `viewBox` and `scale`
144
- * that are completely different data shape and different purpose.
145
- */
146
- export type Props = Omit<
147
- PresentationAttributesAdaptChildEvent<unknown, SVGTextElement>,
148
- "viewBox" | "scale" | "ref"
149
- > &
150
- CartesianAxisProps
151
-
152
- type InternalProps = RequiresDefaultProps<Props, typeof defaultCartesianAxisProps>
153
-
154
- function AxisLine(axisLineProps: {
155
- x: number
156
- y: number
157
- width: number
158
- height: number
159
- orientation: Orientation
160
- mirror: boolean
161
- axisLine: boolean | JSX.LineSVGAttributes<SVGLineElement>
162
- otherSvgProps: JSX.LineSVGAttributes<SVGLineElement> | null
163
- }) {
164
- /* GOTCHA: do NOT spread coordinate values into a plain object here. AxisLine's
165
- function body executes once at mount; reads of `axisLineProps.x/y/width/height`
166
- inside that body freeze at the initial pass. JSX expression slots with `{}`
167
- stay reactive — coords must be passed as accessors so the line re-renders when
168
- chart-offset reflows (e.g. legend size dispatch arrives post-mount). */
169
- const isHorizontal = () =>
170
- axisLineProps.orientation === "top" || axisLineProps.orientation === "bottom"
171
- const needHeight = () =>
172
- Number(
173
- (axisLineProps.orientation === "top" && !axisLineProps.mirror) ||
174
- (axisLineProps.orientation === "bottom" && axisLineProps.mirror),
175
- )
176
- const needWidth = () =>
177
- Number(
178
- (axisLineProps.orientation === "left" && !axisLineProps.mirror) ||
179
- (axisLineProps.orientation === "right" && axisLineProps.mirror),
180
- )
181
- const x1 = () =>
182
- isHorizontal() ? axisLineProps.x : axisLineProps.x + needWidth() * axisLineProps.width
183
- const x2 = () =>
184
- isHorizontal()
185
- ? axisLineProps.x + axisLineProps.width
186
- : axisLineProps.x + needWidth() * axisLineProps.width
187
- const y1 = () =>
188
- isHorizontal()
189
- ? axisLineProps.y + needHeight() * axisLineProps.height
190
- : axisLineProps.y
191
- const y2 = () =>
192
- isHorizontal()
193
- ? axisLineProps.y + needHeight() * axisLineProps.height
194
- : axisLineProps.y + axisLineProps.height
195
-
196
- const styleProps = (): JSX.LineSVGAttributes<SVGLineElement> => ({
197
- ...axisLineProps.otherSvgProps,
198
- ...svgPropertiesNoEvents(axisLineProps.axisLine),
199
- fill: "none",
200
- })
201
-
202
- return (
203
- <Show when={axisLineProps.axisLine}>
204
- <line
205
- {...styleProps()}
206
- x1={x1()}
207
- x2={x2()}
208
- y1={y1()}
209
- y2={y2()}
210
- class={clsx("recharts-cartesian-axis-line", get(axisLineProps.axisLine, "className"))}
211
- />
212
- </Show>
213
- )
214
- }
215
-
216
- /**
217
- * Calculate the coordinates of endpoints in ticks.
218
- * @param data The data of a simple tick.
219
- * @param x The x-coordinate of the axis.
220
- * @param y The y-coordinate of the axis.
221
- * @param width The width of the axis.
222
- * @param height The height of the axis.
223
- * @param orientation The orientation of the axis.
224
- * @param tickSize The length of the tick line.
225
- * @param mirror If true, the ticks are mirrored.
226
- * @param tickMargin The margin between the tick line and the tick text.
227
- * @returns An object with `line` and `tick` coordinates.
228
- * `line` is the coordinates for the tick line, and `tick` is the coordinate for the tick text.
229
- */
230
- function getTickLineCoord(
231
- data: CartesianTickItem,
232
- x: number,
233
- y: number,
234
- width: number,
235
- height: number,
236
- orientation: Orientation,
237
- tickSize: number,
238
- mirror: boolean,
239
- tickMargin: number,
240
- ): {
241
- line: RectangleCoordinate
242
- tick: Coordinate
243
- } {
244
- let x1: number
245
- let x2: number
246
- let y1: number
247
- let y2: number
248
- let tx: number
249
- let ty: number
250
-
251
- const sign = mirror ? -1 : 1
252
- const finalTickSize = data.tickSize || tickSize
253
- const tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate
254
-
255
- switch (orientation) {
256
- case "top":
257
- x1 = x2 = data.coordinate
258
- y2 = y + +!mirror * height
259
- y1 = y2 - sign * finalTickSize
260
- ty = y1 - sign * tickMargin
261
- tx = tickCoord
262
- break
263
- case "left":
264
- y1 = y2 = data.coordinate
265
- x2 = x + +!mirror * width
266
- x1 = x2 - sign * finalTickSize
267
- tx = x1 - sign * tickMargin
268
- ty = tickCoord
269
- break
270
- case "right":
271
- y1 = y2 = data.coordinate
272
- x2 = x + +mirror * width
273
- x1 = x2 + sign * finalTickSize
274
- tx = x1 + sign * tickMargin
275
- ty = tickCoord
276
- break
277
- default:
278
- x1 = x2 = data.coordinate
279
- y2 = y + +mirror * height
280
- y1 = y2 + sign * finalTickSize
281
- ty = y1 + sign * tickMargin
282
- tx = tickCoord
283
- break
284
- }
285
-
286
- return { line: { x1, x2, y1, y2 }, tick: { x: tx, y: ty } }
287
- }
288
-
289
- /**
290
- * @param orientation The orientation of the axis.
291
- * @param mirror If true, the ticks are mirrored.
292
- * @returns The text anchor of the tick.
293
- */
294
- function getTickTextAnchor(orientation: Orientation, mirror: boolean): TextAnchor {
295
- switch (orientation) {
296
- case "left":
297
- return mirror ? "start" : "end"
298
- case "right":
299
- return mirror ? "end" : "start"
300
- default:
301
- return "middle"
302
- }
303
- }
304
-
305
- /**
306
- * @param orientation The orientation of the axis.
307
- * @param mirror If true, the ticks are mirrored.
308
- * @returns The vertical text anchor of the tick.
309
- */
310
- function getTickVerticalAnchor(orientation: Orientation, mirror: boolean): TextVerticalAnchor {
311
- switch (orientation) {
312
- case "left":
313
- case "right":
314
- return "middle"
315
- case "top":
316
- return mirror ? "start" : "end"
317
- default:
318
- return mirror ? "end" : "start"
319
- }
320
- }
321
-
322
- function TickItem(props: { option: Props["tick"]; tickProps: TextProps; value: string }) {
323
- /* tick type is structural (function vs node vs boolean); snapshot once */
324
- const option = untrack(() => props.option)
325
- if (typeof option === "function") {
326
- const content = () => {
327
- /* tickProps may carry the axis class via Solid `class` alias — accept both. */
328
- const baseClassName =
329
- props.tickProps.className ?? (props.tickProps as { class?: string }).class
330
- const combinedClassName = clsx(baseClassName, "recharts-cartesian-axis-tick-value")
331
- return option({ ...props.tickProps, className: combinedClassName })
332
- }
333
- return <>{content()}</>
334
- }
335
-
336
- if (isJsxNode(option)) {
337
- const content = () =>
338
- cloneJsxNodeWithProps(
339
- option,
340
- props.tickProps as unknown as Record<string, unknown>,
341
- ) as unknown as JSX.Element
342
- return <>{content()}</>
343
- }
344
-
345
- if (typeof option !== "boolean") {
346
- const className = () =>
347
- clsx("recharts-cartesian-axis-tick-value", getClassNameFromUnknown(option))
348
- return (
349
- <Text {...props.tickProps} className={className()}>
350
- {props.value}
351
- </Text>
352
- )
353
- }
354
-
355
- return (
356
- <Text {...props.tickProps} className="recharts-cartesian-axis-tick-value">
357
- {props.value}
358
- </Text>
359
- )
360
- }
361
-
362
- type TicksProps = {
363
- axisType: "xAxis" | "yAxis" | undefined
364
- axisId: AxisId | undefined
365
- events: Omit<PresentationAttributesAdaptChildEvent<unknown, SVGTextElement>, "scale" | "viewBox" | "ref">
366
- fontSize: string
367
- getTicksConfig: Omit<Props, "ticks" | "ref">
368
- height: number
369
- letterSpacing: string
370
- mirror: boolean
371
- orientation: Orientation
372
- padding?: Props["padding"]
373
- ref?: SVGGElement | ((el: SVGGElement) => void)
374
- stroke?: Props["stroke"]
375
- tick?: Props["tick"]
376
- tickFormatter?: Props["tickFormatter"]
377
- tickLine?: Props["tickLine"]
378
- tickMargin: number
379
- tickSize: number
380
- tickTextProps?: Props["tickTextProps"]
381
- ticks?: ReadonlyArray<CartesianTickItem>
382
- unit?: Props["unit"]
383
- width: number
384
- x: number
385
- y: number
386
- }
387
-
388
- function Ticks(props: TicksProps) {
389
- const ticks = () => props.ticks ?? []
390
- const finalTicks = createMemo(() =>
391
- getTicks(
392
- { ...props.getTicksConfig, ticks: ticks() } as Parameters<typeof getTicks>[0],
393
- props.fontSize,
394
- props.letterSpacing,
395
- ),
396
- )
397
- /*
398
- * Publish the actually rendered ticks so hooks and the inverse tick-snap scale can read them.
399
- * Skip the write when the tick values are unchanged so re-renders keep a stable reference
400
- * (https://github.com/recharts/recharts/issues/7563).
401
- */
402
- const stateCtx = useContext(RechartsStateContext)
403
- let lastPublished: { axisId: AxisId; axisType: "xAxis" | "yAxis"; ticks: ReadonlyArray<RenderedTickItem> } | null = null
404
- createEffect(
405
- () => {
406
- const axisId = props.axisId
407
- const axisType = props.axisType
408
- if (axisId == null || axisType == null) {
409
- return null
410
- }
411
- // Filter out irrelevant internal properties before exposing externally
412
- const tickItems: ReadonlyArray<RenderedTickItem> = finalTicks().map((tick) => ({
413
- coordinate: tick.coordinate,
414
- index: tick.index,
415
- offset: tick.offset,
416
- value: tick.value,
417
- }))
418
- return { axisId, axisType, ticks: tickItems }
419
- },
420
- (next) => {
421
- if (next == null || stateCtx == null) {
422
- return undefined
423
- }
424
- const last = lastPublished
425
- if (
426
- last == null ||
427
- last.axisId !== next.axisId ||
428
- last.axisType !== next.axisType ||
429
- !isEqual(last.ticks, next.ticks)
430
- ) {
431
- lastPublished = next
432
- stateCtx.setState("renderedTicks", next.axisType, String(next.axisId), next.ticks)
433
- }
434
- return undefined
435
- },
436
- )
437
- onCleanup(() => {
438
- const last = lastPublished
439
- if (last == null || stateCtx == null) {
440
- return
441
- }
442
- lastPublished = null
443
- teardownWrite(() => {
444
- stateCtx.setState("renderedTicks", last.axisType, (axes) => {
445
- delete (axes as Record<string, unknown>)[String(last.axisId)]
446
- })
447
- })
448
- })
449
-
450
- const axisProps = createMemo(() => svgPropertiesNoEvents(props.getTicksConfig))
451
- /* User-provided textAnchor wins; svgPropertiesNoEvents emits it as kebab `text-anchor`. */
452
- const textAnchor = createMemo((): TextAnchor => {
453
- const userAnchor = (axisProps() as Record<string, string | undefined>)["text-anchor"]
454
- return isValidTextAnchor(userAnchor) ? userAnchor : getTickTextAnchor(props.orientation, props.mirror)
455
- })
456
- const verticalAnchor = (): TextVerticalAnchor =>
457
- getTickVerticalAnchor(props.orientation, props.mirror)
458
- const customTickProps = createMemo(() => svgPropertiesNoEventsFromUnknown(props.tick))
459
-
460
- const tickLineProps = createMemo((): JSX.LineSVGAttributes<SVGLineElement> => {
461
- let tickLinePropsObject: JSX.LineSVGAttributes<SVGLineElement> = {}
462
- if (typeof props.tickLine === "object") {
463
- tickLinePropsObject = props.tickLine
464
- }
465
- return {
466
- ...axisProps(),
467
- fill: "none",
468
- ...tickLinePropsObject,
469
- }
470
- })
471
-
472
- const tickLineCoords = createMemo(() =>
473
- finalTicks().map((entry: CartesianTickItem) =>
474
- Object.assign(
475
- { entry },
476
- getTickLineCoord(
477
- entry,
478
- props.x,
479
- props.y,
480
- props.width,
481
- props.height,
482
- props.orientation,
483
- props.tickSize,
484
- props.mirror,
485
- props.tickMargin,
486
- ),
487
- ),
488
- ),
489
- )
490
-
491
- return (
492
- <g class={`recharts-cartesian-axis-ticks recharts-${props.axisType}-ticks`}>
493
- <Show when={tickLineCoords().length > 0}>
494
- <ZIndexLayer zIndex={DefaultZIndexes.label}>
495
- <g
496
- class={`recharts-cartesian-axis-tick-labels recharts-${props.axisType}-tick-labels`}
497
- ref={(el) => bindRef(props.ref, el)}
498
- >
499
- <For each={tickLineCoords()}>
500
- {({ entry, tick: tickCoord }, i) => {
501
- const tickProps = (): XAxisTickContentProps | YAxisTickContentProps => {
502
- /* svgPropertiesNoEvents strips Solid `class` (not an SVG key);
503
- bridge to React-style `className` so custom tick fns receive it. */
504
- const axisClass = (props.getTicksConfig as { class?: string }).class
505
- return {
506
- verticalAnchor: verticalAnchor(),
507
- ...axisProps(),
508
- ...(axisClass != null ? { className: axisClass } : {}),
509
- textAnchor: textAnchor(),
510
- stroke: "none",
511
- fill: props.stroke,
512
- ...tickCoord,
513
- index: i(),
514
- payload: entry,
515
- visibleTicksCount: finalTicks().length,
516
- tickFormatter: props.tickFormatter,
517
- padding: props.padding,
518
- ...props.tickTextProps,
519
- angle:
520
- props.tickTextProps?.angle ??
521
- (axisProps() as Record<string, unknown>).angle ??
522
- 0,
523
- } as XAxisTickContentProps | YAxisTickContentProps
524
- }
525
-
526
- const finalTickProps = (): BaseTickContentProps =>
527
- ({
528
- ...tickProps(),
529
- ...customTickProps(),
530
- }) as BaseTickContentProps
531
-
532
- return (
533
- <Layer
534
- class="recharts-cartesian-axis-tick-label"
535
- {...adaptEventsOfChild(props.events, entry, i())}
536
- >
537
- <Show when={props.tick}>
538
- <TickItem
539
- option={props.tick}
540
- tickProps={finalTickProps()}
541
- value={`${typeof props.tickFormatter === "function" ? props.tickFormatter(entry.value, i()) : entry.value}${props.unit || ""}`}
542
- />
543
- </Show>
544
- </Layer>
545
- )
546
- }}
547
- </For>
548
- </g>
549
- </ZIndexLayer>
550
- </Show>
551
- <Show when={tickLineCoords().length > 0}>
552
- <g class={`recharts-cartesian-axis-tick-lines recharts-${props.axisType}-tick-lines`}>
553
- <For each={tickLineCoords()}>
554
- {({ entry: _entry, line: lineCoord }) => (
555
- <Layer class="recharts-cartesian-axis-tick">
556
- <Show when={props.tickLine}>
557
- <line
558
- {...tickLineProps()}
559
- {...lineCoord}
560
- class={clsx(
561
- "recharts-cartesian-axis-tick-line",
562
- get(props.tickLine, "className"),
563
- )}
564
- />
565
- </Show>
566
- </Layer>
567
- )}
568
- </For>
569
- </g>
570
- </Show>
571
- </g>
572
- )
573
- }
574
-
575
- function CartesianAxisComponent(props: InternalProps) {
576
- /* Tick config and events never need `children`; keeping it out avoids instantiating
577
- child labels outside the axis label context. */
578
- const [, propsWithoutChildren] = splitProps(props, ["children"])
579
- const [fontSize, setFontSize] = createSignal("")
580
- const [letterSpacing, setLetterSpacing] = createSignal("")
581
- let _tickRefs: HTMLCollectionOf<Element> | null = null
582
-
583
- const api: CartesianAxisRef = {
584
- getCalculatedHeight(): number {
585
- return getCalculatedXAxisHeight({
586
- label: untrack(() => props.labelRef),
587
- labelGapWithTick: 5,
588
- tickMargin: untrack(() => props.tickMargin),
589
- ticks: _tickRefs,
590
- tickSize: untrack(() => props.tickSize),
591
- })
592
- },
593
- getCalculatedWidth(): number {
594
- return getCalculatedYAxisWidth({
595
- label: untrack(() => props.labelRef),
596
- labelGapWithTick: 5,
597
- tickMargin: untrack(() => props.tickMargin),
598
- ticks: _tickRefs,
599
- tickSize: untrack(() => props.tickSize),
600
- })
601
- },
602
- }
603
-
604
- const publishAxisRef = (value: CartesianAxisRef | null) => {
605
- untrack(() => {
606
- props.axisRef?.(value)
607
- })
608
- }
609
-
610
- onCleanup(() => {
611
- publishAxisRef(null)
612
- })
613
-
614
- const layerRef = (el: SVGGElement) => {
615
- if (el) {
616
- /* Live collection: it fills in once the ticks are inserted. */
617
- _tickRefs = el.getElementsByClassName("recharts-cartesian-axis-tick-value")
618
- publishAxisRef(api)
619
- } else {
620
- _tickRefs = null
621
- publishAxisRef(null)
622
- }
623
- }
624
-
625
- /* Ticks are not in the DOM when the ref runs, so read their computed font after mount. */
626
- onSettled(() => {
627
- const tick: Element | undefined = _tickRefs?.[0]
628
- if (tick) {
629
- const computedStyle = window.getComputedStyle(tick)
630
- const calculatedFontSize = computedStyle.fontSize
631
- const calculatedLetterSpacing = computedStyle.letterSpacing
632
- if (
633
- calculatedFontSize !== untrack(fontSize) ||
634
- calculatedLetterSpacing !== untrack(letterSpacing)
635
- ) {
636
- setFontSize(calculatedFontSize)
637
- setLetterSpacing(calculatedLetterSpacing)
638
- }
639
- }
640
- })
641
-
642
- return (
643
- <Show
644
- when={
645
- !props.hide &&
646
- !((props.width != null && props.width <= 0) || (props.height != null && props.height <= 0))
647
- }
648
- >
649
- <ZIndexLayer zIndex={props.zIndex}>
650
- <Layer class={clsx("recharts-cartesian-axis", props.class)}>
651
- <AxisLine
652
- x={props.x}
653
- y={props.y}
654
- width={props.width}
655
- height={props.height}
656
- orientation={props.orientation}
657
- mirror={props.mirror}
658
- axisLine={props.axisLine}
659
- otherSvgProps={(() => {
660
- const { ref: _ref, ...rest } = svgPropertiesNoEvents(props)
661
- return rest
662
- })()}
663
- />
664
- <Ticks
665
- ref={layerRef}
666
- axisType={props.axisType}
667
- axisId={props.axisId}
668
- events={propsWithoutChildren}
669
- fontSize={fontSize()}
670
- getTicksConfig={propsWithoutChildren}
671
- height={props.height}
672
- letterSpacing={letterSpacing()}
673
- mirror={props.mirror}
674
- orientation={props.orientation}
675
- padding={props.padding}
676
- stroke={props.stroke}
677
- tick={props.tick}
678
- tickFormatter={props.tickFormatter}
679
- tickLine={props.tickLine}
680
- tickMargin={props.tickMargin}
681
- tickSize={props.tickSize}
682
- tickTextProps={props.tickTextProps}
683
- ticks={props.ticks}
684
- unit={props.unit}
685
- width={props.width}
686
- x={props.x}
687
- y={props.y}
688
- />
689
- <CartesianLabelContextProvider
690
- x={props.x}
691
- y={props.y}
692
- width={props.width}
693
- height={props.height}
694
- lowerWidth={props.width}
695
- upperWidth={props.width}
696
- >
697
- <CartesianLabelFromLabelProp
698
- label={props.label}
699
- labelRef={props.labelRef ?? undefined}
700
- />
701
- {props.children}
702
- </CartesianLabelContextProvider>
703
- </Layer>
704
- </ZIndexLayer>
705
- </Show>
706
- )
707
- }
708
-
709
- /**
710
- * @deprecated
711
- *
712
- * This component is not meant to be used directly in app code.
713
- * Use XAxis or YAxis instead.
714
- *
715
- * Starting from Recharts v4.0 we will make this component internal only.
716
- */
717
- export function CartesianAxis(outsideProps: Props) {
718
- const props = resolveDefaultProps(outsideProps, defaultCartesianAxisProps)
719
- return <CartesianAxisComponent {...props} />
720
- }
721
-
722
- CartesianAxis.displayName = "CartesianAxis"