solid-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 (639) hide show
  1. package/NEXT_SESSION_PROMPT.md +114 -0
  2. package/package.json +28 -0
  3. package/src/animation/AnimatedItems.tsx +169 -0
  4. package/src/animation/AnimationController.ts +24 -0
  5. package/src/animation/AnimationControllerImpl.ts +37 -0
  6. package/src/animation/AnimationHandle.ts +273 -0
  7. package/src/animation/CSSTransitionAnimate.tsx +142 -0
  8. package/src/animation/JavascriptAnimate.tsx +107 -0
  9. package/src/animation/easing.ts +261 -0
  10. package/src/animation/matchBy.ts +211 -0
  11. package/src/animation/timeoutController.ts +51 -0
  12. package/src/animation/useAnimationController.tsx +31 -0
  13. package/src/animation/useAnimationStartSnapshot.ts +73 -0
  14. package/src/animation/util.ts +16 -0
  15. package/src/cartesian/Area.tsx +810 -0
  16. package/src/cartesian/AreaRevealShape.tsx +250 -0
  17. package/src/cartesian/Bar.tsx +1216 -0
  18. package/src/cartesian/BarStack.tsx +148 -0
  19. package/src/cartesian/Brush.tsx +653 -0
  20. package/src/cartesian/CartesianAxis.tsx +541 -0
  21. package/src/cartesian/CartesianGrid.tsx +605 -0
  22. package/src/cartesian/ErrorBar.tsx +319 -0
  23. package/src/cartesian/Funnel.tsx +594 -0
  24. package/src/cartesian/GraphicalItemClipPath.tsx +75 -0
  25. package/src/cartesian/Line.tsx +742 -0
  26. package/src/cartesian/LineDrawShape.tsx +190 -0
  27. package/src/cartesian/ReferenceArea.tsx +275 -0
  28. package/src/cartesian/ReferenceDot.tsx +286 -0
  29. package/src/cartesian/ReferenceLine.tsx +414 -0
  30. package/src/cartesian/RenderedTicksReporter.tsx +49 -0
  31. package/src/cartesian/Scatter.tsx +741 -0
  32. package/src/cartesian/XAxis.tsx +293 -0
  33. package/src/cartesian/YAxis.tsx +333 -0
  34. package/src/cartesian/ZAxis.tsx +80 -0
  35. package/src/cartesian/getCartesianPosition.ts +255 -0
  36. package/src/cartesian/getEquidistantTicks.ts +126 -0
  37. package/src/cartesian/getTicks.ts +225 -0
  38. package/src/cartesian/useAnimatedLineLength.ts +84 -0
  39. package/src/chart/AreaChart.tsx +30 -0
  40. package/src/chart/BarChart.tsx +27 -0
  41. package/src/chart/CartesianChart.tsx +91 -0
  42. package/src/chart/CategoricalChart.tsx +60 -0
  43. package/src/chart/ComposedChart.tsx +29 -0
  44. package/src/chart/FunnelChart.tsx +29 -0
  45. package/src/chart/LineChart.tsx +29 -0
  46. package/src/chart/PieChart.tsx +41 -0
  47. package/src/chart/PolarChart.tsx +97 -0
  48. package/src/chart/RadarChart.tsx +37 -0
  49. package/src/chart/RadialBarChart.tsx +39 -0
  50. package/src/chart/RechartsWrapper.tsx +486 -0
  51. package/src/chart/Sankey.tsx +992 -0
  52. package/src/chart/ScatterChart.tsx +29 -0
  53. package/src/chart/SunburstChart.tsx +394 -0
  54. package/src/chart/Treemap.tsx +874 -0
  55. package/src/chart/types.ts +37 -0
  56. package/src/component/ActivePoints.tsx +136 -0
  57. package/src/component/Cell.tsx +72 -0
  58. package/src/component/Cursor.tsx +249 -0
  59. package/src/component/Customized.tsx +8 -0
  60. package/src/component/DefaultLegendContent.tsx +205 -0
  61. package/src/component/DefaultTooltipContent.tsx +247 -0
  62. package/src/component/Dots.tsx +128 -0
  63. package/src/component/Label.tsx +507 -0
  64. package/src/component/LabelList.tsx +270 -0
  65. package/src/component/Legend.tsx +273 -0
  66. package/src/component/ResponsiveContainer.tsx +397 -0
  67. package/src/component/Text.tsx +436 -0
  68. package/src/component/Tooltip.tsx +309 -0
  69. package/src/component/TooltipBoundingBox.tsx +152 -0
  70. package/src/component/responsiveContainerUtils.ts +128 -0
  71. package/src/container/ClipPathProvider.tsx +40 -0
  72. package/src/container/Layer.tsx +38 -0
  73. package/src/container/RootSurface.tsx +124 -0
  74. package/src/container/Surface.tsx +70 -0
  75. package/src/context/ErrorBarContext.tsx +85 -0
  76. package/src/context/PanoramaContext.tsx +13 -0
  77. package/src/context/RegisterGraphicalItemId.tsx +41 -0
  78. package/src/context/accessibilityContext.tsx +10 -0
  79. package/src/context/brushUpdateContext.ts +14 -0
  80. package/src/context/chartDataContext.tsx +79 -0
  81. package/src/context/chartLayoutContext.tsx +158 -0
  82. package/src/context/legendPayloadContext.ts +11 -0
  83. package/src/context/legendPortalContext.ts +11 -0
  84. package/src/context/tooltipContext.ts +72 -0
  85. package/src/context/tooltipPortalContext.ts +14 -0
  86. package/src/context/useTooltipAxis.ts +24 -0
  87. package/src/hooks.ts +312 -0
  88. package/src/index.ts +288 -0
  89. package/src/polar/Pie.tsx +912 -0
  90. package/src/polar/PolarAngleAxis.tsx +494 -0
  91. package/src/polar/PolarGrid.tsx +269 -0
  92. package/src/polar/PolarRadiusAxis.tsx +422 -0
  93. package/src/polar/Radar.tsx +652 -0
  94. package/src/polar/RadialBar.tsx +767 -0
  95. package/src/polar/defaultPolarAngleAxisProps.tsx +33 -0
  96. package/src/polar/defaultPolarRadiusAxisProps.tsx +28 -0
  97. package/src/shape/Cross.tsx +83 -0
  98. package/src/shape/Curve.tsx +335 -0
  99. package/src/shape/Dot.tsx +49 -0
  100. package/src/shape/Polygon.tsx +168 -0
  101. package/src/shape/Rectangle.tsx +301 -0
  102. package/src/shape/Sector.tsx +304 -0
  103. package/src/shape/Symbols.tsx +144 -0
  104. package/src/shape/Trapezoid.tsx +228 -0
  105. package/src/state/RechartsReduxContext.tsx +8 -0
  106. package/src/state/RechartsStoreContext.ts +15 -0
  107. package/src/state/RechartsStoreProvider.tsx +27 -0
  108. package/src/state/ReportChartProps.tsx +19 -0
  109. package/src/state/ReportEventSettings.tsx +19 -0
  110. package/src/state/ReportMainChartProps.tsx +35 -0
  111. package/src/state/ReportPolarOptions.tsx +28 -0
  112. package/src/state/SetLegendPayload.ts +50 -0
  113. package/src/state/SetTooltipEntrySettings.tsx +46 -0
  114. package/src/state/brushSlice.ts +60 -0
  115. package/src/state/cartesianAxisSlice.ts +288 -0
  116. package/src/state/chartDataSlice.ts +115 -0
  117. package/src/state/errorBarSlice.ts +84 -0
  118. package/src/state/eventSettingsSlice.ts +41 -0
  119. package/src/state/externalEventsMiddleware.ts +136 -0
  120. package/src/state/graphicalItemsSlice.ts +162 -0
  121. package/src/state/hooks.ts +42 -0
  122. package/src/state/keyboardEventsMiddleware.ts +213 -0
  123. package/src/state/layoutSlice.ts +71 -0
  124. package/src/state/legendSlice.ts +107 -0
  125. package/src/state/mouseEventsMiddleware.ts +103 -0
  126. package/src/state/optionsSlice.ts +64 -0
  127. package/src/state/polarAxisSlice.ts +65 -0
  128. package/src/state/polarOptionsSlice.ts +54 -0
  129. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +15 -0
  130. package/src/state/referenceElementsSlice.ts +121 -0
  131. package/src/state/renderedTicksSlice.ts +61 -0
  132. package/src/state/rootPropsSlice.ts +70 -0
  133. package/src/state/selectors/areaSelectors.ts +169 -0
  134. package/src/state/selectors/arrayEqualityCheck.ts +8 -0
  135. package/src/state/selectors/axisSelectors.ts +2196 -0
  136. package/src/state/selectors/barSelectors.ts +319 -0
  137. package/src/state/selectors/barStackSelectors.ts +79 -0
  138. package/src/state/selectors/brushSelectors.ts +40 -0
  139. package/src/state/selectors/combiners/combineActiveLabel.ts +21 -0
  140. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +93 -0
  141. package/src/state/selectors/combiners/combineAllBarPositions.ts +131 -0
  142. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +17 -0
  143. package/src/state/selectors/combiners/combineBarPosition.ts +24 -0
  144. package/src/state/selectors/combiners/combineBarSizeList.ts +75 -0
  145. package/src/state/selectors/combiners/combineCheckedDomain.ts +49 -0
  146. package/src/state/selectors/combiners/combineConfiguredScale.ts +121 -0
  147. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +43 -0
  148. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
  149. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +17 -0
  150. package/src/state/selectors/combiners/combineRealScaleType.ts +48 -0
  151. package/src/state/selectors/combiners/combineStackedData.ts +28 -0
  152. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  153. package/src/state/selectors/combiners/combineTooltipPayload.ts +203 -0
  154. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +45 -0
  155. package/src/state/selectors/containerSelectors.ts +12 -0
  156. package/src/state/selectors/dataSelectors.ts +90 -0
  157. package/src/state/selectors/funnelSelectors.ts +83 -0
  158. package/src/state/selectors/graphicalItemSelectors.ts +23 -0
  159. package/src/state/selectors/legendSelectors.ts +29 -0
  160. package/src/state/selectors/lineSelectors.ts +111 -0
  161. package/src/state/selectors/numberDomainEqualityCheck.ts +8 -0
  162. package/src/state/selectors/pickAxisId.ts +6 -0
  163. package/src/state/selectors/pickAxisType.ts +4 -0
  164. package/src/state/selectors/pieSelectors.ts +103 -0
  165. package/src/state/selectors/polarAxisSelectors.ts +202 -0
  166. package/src/state/selectors/polarGridSelectors.ts +24 -0
  167. package/src/state/selectors/polarScaleSelectors.ts +149 -0
  168. package/src/state/selectors/polarSelectors.ts +211 -0
  169. package/src/state/selectors/radarSelectors.ts +152 -0
  170. package/src/state/selectors/radialBarSelectors.ts +328 -0
  171. package/src/state/selectors/rootPropsSelectors.ts +36 -0
  172. package/src/state/selectors/scatterSelectors.ts +77 -0
  173. package/src/state/selectors/selectAllAxes.ts +10 -0
  174. package/src/state/selectors/selectChartOffset.ts +15 -0
  175. package/src/state/selectors/selectChartOffsetInternal.ts +111 -0
  176. package/src/state/selectors/selectPlotArea.ts +27 -0
  177. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  178. package/src/state/selectors/selectTooltipAxisType.ts +33 -0
  179. package/src/state/selectors/selectTooltipEventType.ts +45 -0
  180. package/src/state/selectors/selectTooltipPayloadSearcher.ts +7 -0
  181. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  182. package/src/state/selectors/selectTooltipState.ts +5 -0
  183. package/src/state/selectors/tooltipSelectors.ts +690 -0
  184. package/src/state/selectors/touchSelectors.ts +29 -0
  185. package/src/state/store.ts +167 -0
  186. package/src/state/tooltipSlice.ts +289 -0
  187. package/src/state/types/AreaSettings.ts +17 -0
  188. package/src/state/types/BarSettings.ts +16 -0
  189. package/src/state/types/LineSettings.ts +12 -0
  190. package/src/state/types/PieSettings.ts +32 -0
  191. package/src/state/types/RadarSettings.ts +6 -0
  192. package/src/state/types/RadialBarSettings.ts +10 -0
  193. package/src/state/types/ScatterSettings.ts +13 -0
  194. package/src/state/types/StackedGraphicalItem.ts +33 -0
  195. package/src/state/unregisterOnCleanup.ts +26 -0
  196. package/src/state/zIndexSlice.ts +128 -0
  197. package/src/synchronisation/syncRegistry.ts +131 -0
  198. package/src/synchronisation/syncSelectors.ts +7 -0
  199. package/src/synchronisation/types.ts +42 -0
  200. package/src/synchronisation/useChartSynchronisation.tsx +372 -0
  201. package/src/types.ts +39 -0
  202. package/src/util/ActiveShapeUtils.tsx +80 -0
  203. package/src/util/BarUtils.tsx +74 -0
  204. package/src/util/CartesianUtils.ts +53 -0
  205. package/src/util/ChartUtils.ts +696 -0
  206. package/src/util/Constants.ts +42 -0
  207. package/src/util/CssPrefixUtils.ts +24 -0
  208. package/src/util/DOMUtils.ts +141 -0
  209. package/src/util/DataUtils.ts +205 -0
  210. package/src/util/FunnelUtils.tsx +37 -0
  211. package/src/util/Global.ts +15 -0
  212. package/src/util/IfOverflow.ts +17 -0
  213. package/src/util/LRUCache.ts +46 -0
  214. package/src/util/LogUtils.ts +26 -0
  215. package/src/util/PolarUtils.ts +134 -0
  216. package/src/util/RadialBarUtils.tsx +35 -0
  217. package/src/util/ReduceCSSCalc.ts +186 -0
  218. package/src/util/ShallowEqual.ts +43 -0
  219. package/src/util/TickUtils.ts +61 -0
  220. package/src/util/YAxisUtils.ts +49 -0
  221. package/src/util/adaptEventHandlers.ts +69 -0
  222. package/src/util/axisPropsAreEqual.ts +42 -0
  223. package/src/util/collectionUtils.ts +83 -0
  224. package/src/util/createCartesianCharts.tsx +101 -0
  225. package/src/util/createEventProxy.ts +24 -0
  226. package/src/util/createPolarCharts.tsx +86 -0
  227. package/src/util/cursor/getCursorPoints.ts +48 -0
  228. package/src/util/cursor/getCursorRectangle.ts +31 -0
  229. package/src/util/cursor/getRadialCursorPoints.ts +34 -0
  230. package/src/util/excludeEventProps.ts +172 -0
  231. package/src/util/getActiveCoordinate.ts +205 -0
  232. package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
  233. package/src/util/getEveryNth.ts +30 -0
  234. package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
  235. package/src/util/getRelativeCoordinate.ts +84 -0
  236. package/src/util/getSliced.ts +21 -0
  237. package/src/util/isDomainSpecifiedByUser.ts +217 -0
  238. package/src/util/isWellBehavedNumber.ts +10 -0
  239. package/src/util/objectPath.ts +129 -0
  240. package/src/util/payload/getUniqPayload.ts +31 -0
  241. package/src/util/propsAreEqual.ts +137 -0
  242. package/src/util/resolveDefaultProps.tsx +8 -0
  243. package/src/util/round.ts +35 -0
  244. package/src/util/scale/CartesianScaleHelper.ts +72 -0
  245. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  246. package/src/util/scale/RechartsScale.ts +131 -0
  247. package/src/util/scale/createCategoricalInverse.ts +83 -0
  248. package/src/util/scale/getNiceTickValues.ts +334 -0
  249. package/src/util/scale/index.ts +3 -0
  250. package/src/util/scale/util/DecimalLite.ts +194 -0
  251. package/src/util/scale/util/arithmetic.ts +56 -0
  252. package/src/util/stacks/getStackSeriesIdentifier.ts +20 -0
  253. package/src/util/stacks/stackTypes.ts +53 -0
  254. package/src/util/svgPropertiesAndEvents.ts +84 -0
  255. package/src/util/svgPropertiesNoEvents.ts +520 -0
  256. package/src/util/tooltip/translate.ts +179 -0
  257. package/src/util/typedDataKey.ts +8 -0
  258. package/src/util/types.ts +724 -0
  259. package/src/util/useAnimationId.tsx +31 -0
  260. package/src/util/useElementOffset.ts +164 -0
  261. package/src/util/useId.ts +20 -0
  262. package/src/util/usePrefersReducedMotion.ts +44 -0
  263. package/src/util/useUniqueId.ts +34 -0
  264. package/src/zIndex/DefaultZIndexes.tsx +87 -0
  265. package/src/zIndex/ZIndexLayer.tsx +126 -0
  266. package/src/zIndex/ZIndexPortal.tsx +69 -0
  267. package/src/zIndex/getZIndexFromUnknown.tsx +17 -0
  268. package/src/zIndex/zIndexSelectors.ts +46 -0
  269. package/test/_data.ts +408 -0
  270. package/test/animation/AnimationController.typed.spec.ts +53 -0
  271. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  272. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  273. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  274. package/test/animation/RechartsAnimation.spec.ts +636 -0
  275. package/test/animation/easing.spec.ts +218 -0
  276. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  277. package/test/animation/matchBy.spec.ts +467 -0
  278. package/test/animation/mockAnimationController.ts +40 -0
  279. package/test/animation/mockControllerAnimationManager.ts +143 -0
  280. package/test/animation/mockTimeoutController.ts +114 -0
  281. package/test/animation/timeoutController.spec.ts +138 -0
  282. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  283. package/test/animation/util.spec.ts +28 -0
  284. package/test/cartesian/Area.animation.spec.tsx +363 -0
  285. package/test/cartesian/Area.range.spec.tsx +54 -0
  286. package/test/cartesian/Area.spec.tsx +1202 -0
  287. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  288. package/test/cartesian/Area.typed.spec.tsx +209 -0
  289. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  290. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  291. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  292. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  293. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  294. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  295. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  296. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  297. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  298. package/test/cartesian/BarStack.spec.tsx +91 -0
  299. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  300. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  301. package/test/cartesian/Brush.props.spec.tsx +63 -0
  302. package/test/cartesian/Brush.render.spec.tsx +117 -0
  303. package/test/cartesian/Brush.spec.tsx +522 -0
  304. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  305. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  306. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  307. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  308. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  309. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  310. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  311. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  312. package/test/cartesian/Funnel.spec.tsx +226 -0
  313. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  314. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  315. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  316. package/test/cartesian/Line.animation.spec.tsx +643 -0
  317. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  318. package/test/cartesian/Line.spec.tsx +471 -0
  319. package/test/cartesian/Line.typed.spec.tsx +152 -0
  320. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  321. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  322. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  323. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  324. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  325. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  326. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  327. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  328. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  329. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  330. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  331. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  332. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  333. package/test/cartesian/Scatter.spec.tsx +406 -0
  334. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  335. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  336. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  337. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  338. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  339. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  340. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  341. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  342. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  343. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  344. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  345. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  346. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  347. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  348. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  349. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  350. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  351. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  352. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  353. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  354. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  355. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  356. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  357. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  358. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  359. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  360. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  361. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  362. package/test/cartesian/ZAxis.spec.tsx +300 -0
  363. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  364. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  365. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  366. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  367. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  368. package/test/cartesian/getTicks.spec.ts +378 -0
  369. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  370. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  371. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  372. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  373. package/test/chart/AreaChart.spec.tsx +409 -0
  374. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  375. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  376. package/test/chart/BarChart.spec.tsx +3719 -0
  377. package/test/chart/BarChart.typed.spec.tsx +60 -0
  378. package/test/chart/CategoricalChart.spec.tsx +255 -0
  379. package/test/chart/ComposedChart.spec.tsx +199 -0
  380. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  381. package/test/chart/FunnelChart.spec.tsx +215 -0
  382. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  383. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  384. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  385. package/test/chart/LineChart.spec.tsx +930 -0
  386. package/test/chart/LineChart.typed.spec.tsx +39 -0
  387. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  388. package/test/chart/PieChart.spec.tsx +793 -0
  389. package/test/chart/PieChart.typed.spec.tsx +39 -0
  390. package/test/chart/RadarChart.spec.tsx +530 -0
  391. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  392. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  393. package/test/chart/RadialBarChart.spec.tsx +679 -0
  394. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  395. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  396. package/test/chart/Sankey.content.spec.tsx +46 -0
  397. package/test/chart/Sankey.spec.tsx +952 -0
  398. package/test/chart/Sankey.typed.spec.tsx +29 -0
  399. package/test/chart/ScatterChart.spec.tsx +2613 -0
  400. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  401. package/test/chart/SunburstChart.spec.tsx +146 -0
  402. package/test/chart/Treemap.animation.spec.tsx +52 -0
  403. package/test/chart/Treemap.spec.tsx +1003 -0
  404. package/test/chart/Treemap.typed.spec.tsx +26 -0
  405. package/test/chart/chartEvents.spec.tsx +127 -0
  406. package/test/chart/responsive.spec.tsx +620 -0
  407. package/test/component/Cell.render.spec.tsx +155 -0
  408. package/test/component/Cell.spec.tsx +12 -0
  409. package/test/component/Cursor.spec.tsx +186 -0
  410. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  411. package/test/component/Label.render.spec.tsx +63 -0
  412. package/test/component/Label.spec.tsx +686 -0
  413. package/test/component/Label.typed.spec.tsx +46 -0
  414. package/test/component/LabelList.spec.tsx +188 -0
  415. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  416. package/test/component/Legend.render.spec.tsx +92 -0
  417. package/test/component/Legend.spec.tsx +2213 -0
  418. package/test/component/Legend.typed.spec.tsx +22 -0
  419. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  420. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  421. package/test/component/Text.spec.tsx +415 -0
  422. package/test/component/Text.typed.spec.tsx +46 -0
  423. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  424. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  425. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  426. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  427. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  428. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  429. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  430. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  431. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  432. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  433. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  434. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  435. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  436. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  437. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  438. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  439. package/test/component/Tooltip.hover.spec.tsx +61 -0
  440. package/test/component/Tooltip.item.spec.tsx +54 -0
  441. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  442. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  443. package/test/component/Tooltip.touch.spec.tsx +39 -0
  444. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  445. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  446. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  447. package/test/container/ClipPath.spec.tsx +602 -0
  448. package/test/container/chartDimensions.spec.tsx +368 -0
  449. package/test/context/chartLayoutContext.spec.tsx +378 -0
  450. package/test/helper/ExpectAxisDomain.tsx +27 -0
  451. package/test/helper/assertNotNull.ts +6 -0
  452. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  453. package/test/helper/createSelectorTestCase.tsx +176 -0
  454. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  455. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  456. package/test/helper/expectAreaCurve.ts +15 -0
  457. package/test/helper/expectAxisTicks.ts +48 -0
  458. package/test/helper/expectBars.ts +54 -0
  459. package/test/helper/expectFunctionReturning.ts +58 -0
  460. package/test/helper/expectLabel.ts +32 -0
  461. package/test/helper/expectLastCalledWith.ts +48 -0
  462. package/test/helper/expectLine.ts +20 -0
  463. package/test/helper/expectPieSectors.ts +80 -0
  464. package/test/helper/expectScale.ts +37 -0
  465. package/test/helper/expectScatterPoints.ts +52 -0
  466. package/test/helper/expectStackGroups.ts +144 -0
  467. package/test/helper/mockAxes.ts +22 -0
  468. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  469. package/test/helper/mockHTMLElementProperty.ts +19 -0
  470. package/test/helper/mockTouchingElement.ts +27 -0
  471. package/test/helper/offsetHelpers.ts +19 -0
  472. package/test/helper/parameterizedTestCases.tsx +99 -0
  473. package/test/helper/produceState.ts +32 -0
  474. package/test/helper/render.ts +7 -0
  475. package/test/helper/selectorTestHelpers.tsx +63 -0
  476. package/test/helper/trim.spec.ts +35 -0
  477. package/test/helper/trim.ts +11 -0
  478. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  479. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  480. package/test/hooks/useAxisScale.spec.tsx +283 -0
  481. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  482. package/test/hooks/useOffset.spec.tsx +248 -0
  483. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  484. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  485. package/test/polar/Pie/Pie.spec.tsx +784 -0
  486. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  487. package/test/polar/Pie.animation.spec.tsx +529 -0
  488. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  489. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  490. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  491. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  492. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  493. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  494. package/test/polar/PolarGrid.spec.tsx +918 -0
  495. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  496. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  497. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  498. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  499. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  500. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  501. package/test/polar/Radar.animation.spec.tsx +570 -0
  502. package/test/polar/Radar.render.spec.tsx +71 -0
  503. package/test/polar/Radar.spec.tsx +265 -0
  504. package/test/polar/Radar.typed.spec.tsx +119 -0
  505. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  506. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  507. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  508. package/test/polar/RadialBar.render.spec.tsx +66 -0
  509. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  510. package/test/setup.ts +84 -0
  511. package/test/shape/ActiveShape.spec.tsx +181 -0
  512. package/test/shape/Cross.spec.tsx +60 -0
  513. package/test/shape/Cross.typed.spec.tsx +26 -0
  514. package/test/shape/Curve.spec.tsx +368 -0
  515. package/test/shape/Curve.typed.spec.tsx +69 -0
  516. package/test/shape/Dot.spec.tsx +73 -0
  517. package/test/shape/Dot.typed.spec.tsx +30 -0
  518. package/test/shape/Polygon.spec.tsx +357 -0
  519. package/test/shape/Polygon.typed.spec.tsx +28 -0
  520. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  521. package/test/shape/Rectangle.spec.tsx +68 -0
  522. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  523. package/test/shape/Sector.spec.tsx +76 -0
  524. package/test/shape/Sector.typed.spec.tsx +24 -0
  525. package/test/shape/Symbols.spec.tsx +43 -0
  526. package/test/shape/Symbols.typed.spec.tsx +24 -0
  527. package/test/shape/Trapezoid.spec.tsx +50 -0
  528. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  529. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  530. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  531. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  532. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  533. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  534. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  535. package/test/state/chartDataSlice.spec.ts +53 -0
  536. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  537. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  538. package/test/state/hooks.spec.tsx +68 -0
  539. package/test/state/legendSlice.spec.ts +44 -0
  540. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  541. package/test/state/optionsSlice.spec.ts +19 -0
  542. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +25 -0
  543. package/test/state/referenceElementsSlice.spec.ts +84 -0
  544. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  545. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  546. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  547. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  548. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  549. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  550. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  551. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  552. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  553. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  554. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  555. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  556. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  557. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  558. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  559. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  560. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  561. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  562. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  563. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  564. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  565. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  566. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  567. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  568. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  569. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  570. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  571. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  572. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  573. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  574. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  575. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  576. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  577. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  578. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  579. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  580. package/test/state/selectors/selectors.spec.tsx +1613 -0
  581. package/test/state/throttling.spec.ts +200 -0
  582. package/test/state/zIndexSlice.spec.ts +85 -0
  583. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  584. package/test/util/BarUtils.spec.ts +39 -0
  585. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  586. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  587. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  588. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  589. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  590. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +83 -0
  591. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  592. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  593. package/test/util/DataUtils.spec.ts +385 -0
  594. package/test/util/DomUtils.spec.tsx +117 -0
  595. package/test/util/FunnelUtils.spec.tsx +70 -0
  596. package/test/util/Global.spec.ts +11 -0
  597. package/test/util/LRUCache.spec.ts +81 -0
  598. package/test/util/LogUtils.spec.ts +45 -0
  599. package/test/util/PolarUtils.spec.ts +66 -0
  600. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  601. package/test/util/ShallowEqual.spec.ts +102 -0
  602. package/test/util/TickUtils.spec.ts +29 -0
  603. package/test/util/axisPropsAreEqual.spec.ts +93 -0
  604. package/test/util/createChartHelpers.spec.tsx +210 -0
  605. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  606. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  607. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  608. package/test/util/errorValue.spec.ts +69 -0
  609. package/test/util/getEveryNth.spec.ts +39 -0
  610. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  611. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  612. package/test/util/getSliced.spec.ts +45 -0
  613. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  614. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  615. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  616. package/test/util/propsAreEqual.spec.ts +75 -0
  617. package/test/util/round.spec.ts +112 -0
  618. package/test/util/scale/arithmetic.spec.ts +61 -0
  619. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  620. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  621. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  622. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  623. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  624. package/test/util/tooltip/translate.spec.ts +396 -0
  625. package/test/util/useAnimationId.spec.tsx +59 -0
  626. package/test/util/useElementOffset.spec.tsx +173 -0
  627. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  628. package/test/util/useUniqueId.spec.ts +99 -0
  629. package/test/utils/diagnostics-allowlist.ts +18 -0
  630. package/test/utils/diagnostics.ts +58 -0
  631. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  632. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  633. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  634. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  635. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  636. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  637. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  638. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  639. package/tsconfig.json +11 -0
@@ -0,0 +1,541 @@
1
+ // Ported from recharts 3.8.1 src/cartesian/CartesianAxis.tsx (commit 7a23854).
2
+ //
3
+ // Draws the axis line + tick lines + tick labels + the axis `label` (title) via
4
+ // CartesianLabelFromLabelProp + a `<Label>` child. Tick parity with recharts:
5
+ // `tick` accepts boolean / settings-object (`{ class }`) / function-renderer;
6
+ // `x` defaults to 0; `axisType` defaults to "xAxis"; `scale` is accepted-and-ignored
7
+ // (recharts dropped it on CartesianAxis in 3.0); `viewBox` is accepted; a user
8
+ // `textAnchor` overrides the orientation-derived one. The pure tick geometry helpers
9
+ // (getTickLineCoord/getTickTextAnchor/getTickVerticalAnchor) are ported verbatim.
10
+ // Tick interval/minTickGap thinning is wired via getTicks() (string forms
11
+ // preserveStart/preserveEnd/preserveStartEnd/equidistant* + numeric), with the
12
+ // overlap viewBox taken from an explicit `viewBox` prop when given, else derived
13
+ // from the axis box (its sizeKey dimension matches recharts' plot-area viewBox).
14
+ // PERMANENT-N/A (by design, NOT deferred): ELEMENT-form `tick`/`label` (Solid can't
15
+ // React.cloneElement an already-evaluated element to inject computed x/y/payload —
16
+ // use the function form instead). Deferred: RenderedTicksReporter, Y-axis
17
+ // auto-width. Solid deviations:
18
+ // forwardRef dropped; React CSSProperties n/a; `className`→`class`.
19
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
20
+ import { createMemo, For, merge, Show } from "solid-js";
21
+ import type { JSX } from "@solidjs/web";
22
+ import { getTicks } from "./getTicks";
23
+ import { Layer } from "../container/Layer";
24
+ import {
25
+ CartesianLabelContextProvider,
26
+ CartesianLabelFromLabelProp,
27
+ type ImplicitLabelType,
28
+ } from "../component/Label";
29
+ import { Text, TextAnchor, TextVerticalAnchor, type Props as TextProps } from "../component/Text";
30
+ import { isNullish, isNumber } from "../util/DataUtils";
31
+ import {
32
+ type AxisInterval,
33
+ type CartesianTickContentProps,
34
+ CartesianTickItem,
35
+ type CartesianViewBox,
36
+ type CartesianViewBoxRequired,
37
+ Coordinate,
38
+ RectangleCoordinate,
39
+ type TickProp,
40
+ } from "../util/types";
41
+ import { svgPropertiesNoEvents } from "../util/svgPropertiesNoEvents";
42
+ import { XAxisOrientation, YAxisOrientation } from "../state/cartesianAxisSlice";
43
+ import { ZIndexLayer } from "../zIndex/ZIndexLayer";
44
+
45
+ export type Orientation = XAxisOrientation | YAxisOrientation;
46
+
47
+ type AxisLabelPadding = { top?: number; bottom?: number; left?: number; right?: number } | string;
48
+
49
+ function getTickLineCoord(
50
+ data: CartesianTickItem,
51
+ x: number,
52
+ y: number,
53
+ width: number,
54
+ height: number,
55
+ orientation: Orientation,
56
+ tickSize: number,
57
+ mirror: boolean,
58
+ tickMargin: number,
59
+ ): { line: RectangleCoordinate; tick: Coordinate } {
60
+ let x1, x2, y1, y2, tx, ty;
61
+ const sign = mirror ? -1 : 1;
62
+ const finalTickSize = data.tickSize || tickSize;
63
+ const tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;
64
+
65
+ switch (orientation) {
66
+ case "top":
67
+ x1 = x2 = data.coordinate;
68
+ y2 = y + +!mirror * height;
69
+ y1 = y2 - sign * finalTickSize;
70
+ ty = y1 - sign * tickMargin;
71
+ tx = tickCoord;
72
+ break;
73
+ case "left":
74
+ y1 = y2 = data.coordinate;
75
+ x2 = x + +!mirror * width;
76
+ x1 = x2 - sign * finalTickSize;
77
+ tx = x1 - sign * tickMargin;
78
+ ty = tickCoord;
79
+ break;
80
+ case "right":
81
+ y1 = y2 = data.coordinate;
82
+ x2 = x + +mirror * width;
83
+ x1 = x2 + sign * finalTickSize;
84
+ tx = x1 + sign * tickMargin;
85
+ ty = tickCoord;
86
+ break;
87
+ default:
88
+ x1 = x2 = data.coordinate;
89
+ y2 = y + +mirror * height;
90
+ y1 = y2 + sign * finalTickSize;
91
+ ty = y1 + sign * tickMargin;
92
+ tx = tickCoord;
93
+ break;
94
+ }
95
+
96
+ return { line: { x1, y1, x2, y2 }, tick: { x: tx, y: ty } };
97
+ }
98
+
99
+ function getTickTextAnchor(orientation: Orientation, mirror: boolean): TextAnchor {
100
+ switch (orientation) {
101
+ case "left":
102
+ return mirror ? "start" : "end";
103
+ case "right":
104
+ return mirror ? "end" : "start";
105
+ default:
106
+ return "middle";
107
+ }
108
+ }
109
+
110
+ function getTickVerticalAnchor(orientation: Orientation, mirror: boolean): TextVerticalAnchor {
111
+ switch (orientation) {
112
+ case "left":
113
+ case "right":
114
+ return "middle";
115
+ case "top":
116
+ return mirror ? "start" : "end";
117
+ default:
118
+ return mirror ? "end" : "start";
119
+ }
120
+ }
121
+
122
+ /**
123
+ * The settings-object form of `tick` (e.g. `tick={{ class: "custom" }}`): extra
124
+ * attributes merged onto the default tick `<Text>`. Solid-idiomatic `class` (recharts'
125
+ * React equivalent is `tick?: boolean | SVGProps | ReactElement | function`).
126
+ */
127
+ export type CartesianTickSettings = {
128
+ class?: string;
129
+ fill?: string;
130
+ stroke?: string;
131
+ };
132
+
133
+ export interface CartesianAxisProps {
134
+ /** Which axis this is. @defaultValue "xAxis" */
135
+ axisType?: "xAxis" | "yAxis";
136
+ /** Left offset of the axis box. @defaultValue 0 */
137
+ x?: number;
138
+ y: number;
139
+ width: number;
140
+ height: number;
141
+ orientation?: Orientation;
142
+ ticks: ReadonlyArray<CartesianTickItem>;
143
+ tickSize?: number;
144
+ tickMargin?: number;
145
+ mirror?: boolean;
146
+ /** When set, relocates the axis into that z-index portal (unset = inline). */
147
+ zIndex?: number;
148
+ stroke?: string;
149
+ strokeOpacity?: number | string;
150
+ /** Boolean toggles the axis line; an object both shows it and styles it (SVG props). @defaultValue true */
151
+ axisLine?: boolean | CamelSvgProps<JSX.LineSVGAttributes<SVGLineElement>>;
152
+ tickLine?: boolean;
153
+ // boolean is already covered by TickProp's JSX.Element (Solid's JSX.Element includes
154
+ // boolean); the settings-object form is the only addition over recharts' TickProp.
155
+ tick?: CartesianTickSettings | TickProp<CartesianTickContentProps>;
156
+ tickFormatter?: (value: unknown, index: number) => string;
157
+ /**
158
+ * The recharts viewBox of the chart. Accepted for API parity; the axis title is
159
+ * positioned from the axis box (x/y/width/height) just like recharts.
160
+ */
161
+ viewBox?: CartesianViewBox;
162
+ /**
163
+ * Recharts ignores `scale` on CartesianAxis since 3.0 (it reads ticks directly).
164
+ * Accepted for API parity and ignored.
165
+ */
166
+ scale?: unknown;
167
+ /** Overrides the orientation-derived `text-anchor` on each tick label. */
168
+ textAnchor?: TextAnchor;
169
+ interval?: AxisInterval;
170
+ /** Min px gap kept between rendered ticks during interval thinning. @defaultValue 5 */
171
+ minTickGap?: number;
172
+ /** Axis name, forwarded to a function-form tick's props (default undefined). */
173
+ name?: string;
174
+ /** Tick label rotation, forwarded to a function-form tick's props. @defaultValue 0 */
175
+ angle?: number;
176
+ /** Axis padding, forwarded verbatim to a function-form tick's props. */
177
+ padding?: AxisLabelPadding;
178
+ unit?: string | number;
179
+ hide?: boolean;
180
+ /** Extra CSS class(es) joined onto the axis `<Layer>` (recharts: `className`). */
181
+ class?: string;
182
+ /**
183
+ * Additional props merged into each tick `<Text>` element (recharts `tickTextProps`).
184
+ * Applied after the internally computed tick props, so they win.
185
+ */
186
+ tickTextProps?: TextProps;
187
+ /**
188
+ * Font size of the tick text. Also feeds the tick-width measurement used by the
189
+ * interval-thinning algorithm (recharts reads it from the DOM when unset; this
190
+ * port consumes the prop directly — there is no computed-style feedback loop).
191
+ */
192
+ fontSize?: number | string;
193
+ /** Letter spacing of the tick text; measured together with `fontSize`. */
194
+ letterSpacing?: number | string;
195
+ /** Axis title — string/number/object/function/`true`, or a `<Label>` child. */
196
+ label?: ImplicitLabelType;
197
+ /**
198
+ * Callback receiving the rendered axis Layer `<g>` element. YAxis uses it to measure
199
+ * the tick-value nodes for the `width="auto"` dynamic-width computation (recharts
200
+ * threads this through a `CartesianAxisRef.getCalculatedWidth`).
201
+ */
202
+ layerRef?: (el: SVGGElement) => void;
203
+ /** Per-tick pointer handlers, called props-first `(tickItem, index, event)`. */
204
+ onClick?: CartesianTickEventHandler<MouseEvent>;
205
+ onMouseEnter?: CartesianTickEventHandler<MouseEvent>;
206
+ onMouseLeave?: CartesianTickEventHandler<MouseEvent>;
207
+ onMouseOver?: CartesianTickEventHandler<MouseEvent>;
208
+ onMouseOut?: CartesianTickEventHandler<MouseEvent>;
209
+ onMouseMove?: CartesianTickEventHandler<MouseEvent>;
210
+ onMouseDown?: CartesianTickEventHandler<MouseEvent>;
211
+ onMouseUp?: CartesianTickEventHandler<MouseEvent>;
212
+ onTouchStart?: CartesianTickEventHandler<TouchEvent>;
213
+ onTouchMove?: CartesianTickEventHandler<TouchEvent>;
214
+ onTouchEnd?: CartesianTickEventHandler<TouchEvent>;
215
+ children?: JSX.Element;
216
+ }
217
+
218
+ /** Props-first per-tick event handler: `(tickItem, index, event)` (recharts convention). */
219
+ export type CartesianTickEventHandler<E extends Event> = (
220
+ data: CartesianTickItem,
221
+ index: number,
222
+ event: E,
223
+ ) => void;
224
+
225
+ const cartesianAxisDefaults = {
226
+ axisType: "xAxis",
227
+ x: 0,
228
+ orientation: "bottom",
229
+ stroke: "#666",
230
+ tickLine: true,
231
+ axisLine: true,
232
+ tick: true,
233
+ mirror: false,
234
+ tickSize: 6,
235
+ tickMargin: 2,
236
+ minTickGap: 5,
237
+ } as const satisfies Partial<CartesianAxisProps>;
238
+
239
+ const AxisLine = (props: {
240
+ x: number;
241
+ y: number;
242
+ width: number;
243
+ height: number;
244
+ orientation: Orientation;
245
+ mirror: boolean;
246
+ stroke: string;
247
+ strokeOpacity?: number | string;
248
+ /** Extra SVG props from an object-form `axisLine={{ ... }}`. */
249
+ extra?: CamelSvgProps<JSX.LineSVGAttributes<SVGLineElement>>;
250
+ }): JSX.Element => {
251
+ const coords = (): RectangleCoordinate => {
252
+ const { x, y, width, height, orientation, mirror } = props;
253
+ if (orientation === "top" || orientation === "bottom") {
254
+ const needHeight = +(
255
+ (orientation === "top" && !mirror) ||
256
+ (orientation === "bottom" && mirror)
257
+ );
258
+ return { x1: x, y1: y + needHeight * height, x2: x + width, y2: y + needHeight * height };
259
+ }
260
+ const needWidth = +((orientation === "left" && !mirror) || (orientation === "right" && mirror));
261
+ return { x1: x + needWidth * width, y1: y, x2: x + needWidth * width, y2: y + height };
262
+ };
263
+ return (
264
+ <line
265
+ class="recharts-cartesian-axis-line"
266
+ x1={coords().x1}
267
+ y1={coords().y1}
268
+ x2={coords().x2}
269
+ y2={coords().y2}
270
+ stroke={props.stroke}
271
+ stroke-opacity={props.strokeOpacity}
272
+ fill="none"
273
+ // recharts forwards the axis's own svg props (incl. `width`) onto the line via
274
+ // `otherSvgProps`; mirror that with the canonical svg-prop spread (`width` is the
275
+ // attribute consumers read off the line element). An object-form `axisLine={{…}}`
276
+ // adds its own SVG props on top — run through the renamer so recharts-style
277
+ // camelCase (`strokeWidth`) becomes the kebab SVG attribute.
278
+ {...svgPropertiesNoEvents({ width: props.width, ...(props.extra ?? {}) })}
279
+ />
280
+ );
281
+ };
282
+
283
+ export const CartesianAxis = (props: CartesianAxisProps): JSX.Element => {
284
+ const merged = merge(cartesianAxisDefaults, props);
285
+
286
+ // merge() keeps an explicit `stroke={undefined}` (e.g. forwarded from a
287
+ // strokeless <YAxis/>) as undefined; resolve the default at use sites.
288
+ const strokeColor = (): string => merged.stroke ?? cartesianAxisDefaults.stroke;
289
+
290
+ const textAnchor = (): TextAnchor => getTickTextAnchor(merged.orientation, merged.mirror);
291
+ // A user-provided `textAnchor` prop overrides the orientation-derived default.
292
+ const resolvedTextAnchor = (): TextAnchor => merged.textAnchor ?? textAnchor();
293
+ const verticalAnchor = (): TextVerticalAnchor =>
294
+ getTickVerticalAnchor(merged.orientation, merged.mirror);
295
+
296
+ // The settings-object form of `tick` (e.g. `{ class: "custom" }`): not a
297
+ // function, not a boolean, not an already-rendered element/array.
298
+ const isTickSettings = (t: CartesianAxisProps["tick"]): t is CartesianTickSettings =>
299
+ t != null &&
300
+ typeof t === "object" &&
301
+ !Array.isArray(t) &&
302
+ !(typeof Node !== "undefined" && t instanceof Node);
303
+ const tickSettings = (): CartesianTickSettings | null =>
304
+ isTickSettings(merged.tick) ? merged.tick : null;
305
+
306
+ // The viewBox feeding getTickBoundaries: an explicit `viewBox` prop (the direct
307
+ // CartesianAxis API) wins; otherwise derive from the axis box. Only the sizeKey
308
+ // dimension is read by getTickBoundaries, and the axis box's sizeKey dimension
309
+ // equals recharts' plot-area viewBox (x-axis: x/width; y-axis: y/height).
310
+ const resolvedViewBox = (): CartesianViewBoxRequired => {
311
+ const vb = merged.viewBox;
312
+ if (vb != null && isNumber(vb.width) && isNumber(vb.height)) {
313
+ return { x: vb.x ?? 0, y: vb.y ?? 0, width: vb.width, height: vb.height };
314
+ }
315
+ return { x: merged.x, y: merged.y, width: merged.width, height: merged.height };
316
+ };
317
+
318
+ // getStringSize expects computed-style strings (e.g. "14px"); coerce the numeric
319
+ // prop forms the way the browser would (recharts reads getComputedStyle values).
320
+ const fontSizeStyle = (): string | undefined =>
321
+ merged.fontSize == null
322
+ ? undefined
323
+ : typeof merged.fontSize === "number"
324
+ ? `${merged.fontSize}px`
325
+ : merged.fontSize;
326
+ const letterSpacingStyle = (): string | undefined =>
327
+ merged.letterSpacing == null
328
+ ? undefined
329
+ : typeof merged.letterSpacing === "number"
330
+ ? `${merged.letterSpacing}px`
331
+ : merged.letterSpacing;
332
+
333
+ const visibleTicks = createMemo<ReadonlyArray<CartesianTickItem>>(() =>
334
+ getTicks(
335
+ {
336
+ angle: merged.angle,
337
+ interval: merged.interval,
338
+ minTickGap: merged.minTickGap,
339
+ orientation: merged.orientation,
340
+ // getTicks early-returns [] when `tick` is falsy; tick-label and tick-line
341
+ // visibility are gated independently below (`tick` / `tickLine`), so force a
342
+ // truthy value here to keep thinning independent of whether labels render.
343
+ tick: true,
344
+ tickFormatter: merged.tickFormatter,
345
+ ticks: merged.ticks,
346
+ // getTicks measures `unit` as a string (width of the unit suffix); coerce the
347
+ // numeric form so it matches GetTicksInput's `string | undefined`.
348
+ unit: isNullish(merged.unit) ? undefined : String(merged.unit),
349
+ viewBox: resolvedViewBox(),
350
+ },
351
+ fontSizeStyle(),
352
+ letterSpacingStyle(),
353
+ ),
354
+ );
355
+
356
+ const tickCoords = createMemo(() =>
357
+ visibleTicks().map((entry, index) => ({
358
+ entry,
359
+ index,
360
+ ...getTickLineCoord(
361
+ entry,
362
+ merged.x,
363
+ merged.y,
364
+ merged.width,
365
+ merged.height,
366
+ merged.orientation,
367
+ merged.tickSize,
368
+ merged.mirror,
369
+ merged.tickMargin,
370
+ ),
371
+ })),
372
+ );
373
+
374
+ const labelOf = (entry: CartesianTickItem, index: number): string => {
375
+ const formatted =
376
+ typeof merged.tickFormatter === "function"
377
+ ? merged.tickFormatter(entry.value, index)
378
+ : isNullish(entry.value)
379
+ ? ""
380
+ : // Recharts stringifies tick values directly, including Date objects.
381
+ // eslint-disable-next-line typescript/no-base-to-string
382
+ String(entry.value);
383
+ return `${formatted}${merged.unit ?? ""}`;
384
+ };
385
+
386
+ // Default tick `padding` forwarded to a function-form tick (recharts forwards the
387
+ // axis's own padding prop; the implicit default is zero on both edges).
388
+ const defaultPadding = (): AxisLabelPadding =>
389
+ merged.axisType === "yAxis" ? { top: 0, bottom: 0 } : { left: 0, right: 0 };
390
+
391
+ // The props recharts passes to a function-form `tick` renderer, built to match its
392
+ // shape exactly (class = axis class + tick-value class; payload = the tick item).
393
+ const tickContentProps = (item: {
394
+ entry: CartesianTickItem;
395
+ index: number;
396
+ tick: Coordinate;
397
+ }): CartesianTickContentProps => {
398
+ const e = item.entry;
399
+ return {
400
+ x: item.tick.x,
401
+ y: item.tick.y,
402
+ payload: {
403
+ coordinate: e.coordinate,
404
+ value: e.value,
405
+ index: e.index,
406
+ offset: e.offset,
407
+ // recharts' getTicks sets tickCoord (= coordinate when un-thinned) and isShow
408
+ // on each rendered tick item; this port doesn't thin, so every tick is shown.
409
+ tickCoord: e.tickCoord ?? e.coordinate,
410
+ isShow: e.isShow ?? true,
411
+ },
412
+ index: item.index,
413
+ visibleTicksCount: visibleTicks().length,
414
+ class: `recharts-${merged.axisType} ${merged.axisType} recharts-cartesian-axis-tick-value`,
415
+ fill: strokeColor(),
416
+ stroke: "none",
417
+ textAnchor: resolvedTextAnchor(),
418
+ verticalAnchor: verticalAnchor(),
419
+ orientation: merged.orientation,
420
+ height: merged.height,
421
+ width: merged.width,
422
+ padding: merged.padding ?? defaultPadding(),
423
+ name: merged.name,
424
+ tickFormatter: merged.tickFormatter,
425
+ angle: merged.angle ?? 0,
426
+ };
427
+ };
428
+
429
+ return (
430
+ <Show when={!merged.hide}>
431
+ <ZIndexLayer zIndex={merged.zIndex}>
432
+ {/* recharts emits both the namespaced and the bare axis class (`recharts-yAxis yAxis`);
433
+ a user `class` (recharts: XAxis/YAxis className) is appended last. */}
434
+ <Layer
435
+ ref={(el) => props.layerRef?.(el)}
436
+ class={[
437
+ `recharts-cartesian-axis recharts-${merged.axisType} ${merged.axisType}`,
438
+ merged.class,
439
+ ]
440
+ .filter((c): c is string => Boolean(c))
441
+ .join(" ")}
442
+ >
443
+ <Show when={merged.axisLine}>
444
+ <AxisLine
445
+ x={merged.x}
446
+ y={merged.y}
447
+ width={merged.width}
448
+ height={merged.height}
449
+ orientation={merged.orientation}
450
+ mirror={merged.mirror}
451
+ stroke={strokeColor()}
452
+ strokeOpacity={merged.strokeOpacity}
453
+ extra={typeof merged.axisLine === "object" ? merged.axisLine : undefined}
454
+ />
455
+ </Show>
456
+ <g class={`recharts-cartesian-axis-ticks recharts-${merged.axisType}-ticks`}>
457
+ <For each={tickCoords()}>
458
+ {(item) => (
459
+ <Layer class="recharts-cartesian-axis-tick">
460
+ <Show when={merged.tickLine}>
461
+ <line
462
+ class="recharts-cartesian-axis-tick-line"
463
+ x1={item.line.x1}
464
+ y1={item.line.y1}
465
+ x2={item.line.x2}
466
+ y2={item.line.y2}
467
+ stroke={strokeColor()}
468
+ stroke-opacity={merged.strokeOpacity}
469
+ fill="none"
470
+ />
471
+ </Show>
472
+ <Show when={merged.tick}>
473
+ {/* recharts wraps each tick label in its own `.recharts-cartesian-
474
+ axis-tick-label` Layer carrying the per-tick events (adaptEventsOfChild,
475
+ called props-first `(tickItem, index, event)`). */}
476
+ <Layer
477
+ class="recharts-cartesian-axis-tick-label"
478
+ onClick={(e) => merged.onClick?.(item.entry, item.index, e)}
479
+ onMouseEnter={(e) => merged.onMouseEnter?.(item.entry, item.index, e)}
480
+ onMouseLeave={(e) => merged.onMouseLeave?.(item.entry, item.index, e)}
481
+ onMouseOver={(e) => merged.onMouseOver?.(item.entry, item.index, e)}
482
+ onMouseOut={(e) => merged.onMouseOut?.(item.entry, item.index, e)}
483
+ onMouseMove={(e) => merged.onMouseMove?.(item.entry, item.index, e)}
484
+ onMouseDown={(e) => merged.onMouseDown?.(item.entry, item.index, e)}
485
+ onMouseUp={(e) => merged.onMouseUp?.(item.entry, item.index, e)}
486
+ onTouchStart={(e) => merged.onTouchStart?.(item.entry, item.index, e)}
487
+ onTouchMove={(e) => merged.onTouchMove?.(item.entry, item.index, e)}
488
+ onTouchEnd={(e) => merged.onTouchEnd?.(item.entry, item.index, e)}
489
+ >
490
+ {/* Function-form tick: invoke with recharts' tick-content props.
491
+ Object-form tick (`{ class: "custom" }`): default <Text> with
492
+ the extra attrs merged in. Ternary (not <Show>) so the constant
493
+ branch doesn't trip STRICT_READ. ELEMENT-form tick is unsupported
494
+ (Solid can't clone-and-inject computed x/y into an evaluated node). */}
495
+ {typeof merged.tick === "function" ? (
496
+ merged.tick(tickContentProps(item))
497
+ ) : (
498
+ <Text
499
+ x={item.tick.x}
500
+ y={item.tick.y}
501
+ textAnchor={resolvedTextAnchor()}
502
+ verticalAnchor={verticalAnchor()}
503
+ stroke="none"
504
+ fill={tickSettings()?.fill ?? strokeColor()}
505
+ fontSize={merged.fontSize}
506
+ letterSpacing={merged.letterSpacing}
507
+ // `tickTextProps` wins over the computed tick props
508
+ // (recharts spreads it last); the tick-value class stays
509
+ // fixed after it, matching recharts' explicit className.
510
+ {...(merged.tickTextProps ?? {})}
511
+ class={["recharts-cartesian-axis-tick-value", tickSettings()?.class]
512
+ .filter(Boolean)
513
+ .join(" ")}
514
+ >
515
+ {labelOf(item.entry, item.index)}
516
+ </Text>
517
+ )}
518
+ </Layer>
519
+ </Show>
520
+ </Layer>
521
+ )}
522
+ </For>
523
+ </g>
524
+ {/* Axis title: the `label` prop (string/number/object/fn) and any `<Label>`
525
+ child both position against the axis viewBox via CartesianLabelContext. */}
526
+ <CartesianLabelContextProvider
527
+ x={merged.x}
528
+ y={merged.y}
529
+ width={merged.width}
530
+ height={merged.height}
531
+ lowerWidth={merged.width}
532
+ upperWidth={merged.width}
533
+ >
534
+ <CartesianLabelFromLabelProp label={merged.label} />
535
+ {merged.children}
536
+ </CartesianLabelContextProvider>
537
+ </Layer>
538
+ </ZIndexLayer>
539
+ </Show>
540
+ );
541
+ };