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,33 @@
1
+ // Ported from recharts 3.8.1 src/polar/defaultPolarAngleAxisProps.tsx (commit 7a23854).
2
+ //
3
+ // DEVIATION: recharts types this `as const satisfies Props` (Props from
4
+ // PolarAngleAxis). The PolarAngleAxis component is deferred to a follow-up, so
5
+ // for now the object is typed only `as const`; when the component lands its
6
+ // `Props` will pin these via `satisfies`. The values are byte-identical to
7
+ // recharts. Consumed by polarAxisSelectors' implicitAngleAxis (and, later, the
8
+ // component's default-props merge).
9
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
10
+
11
+ export const defaultPolarAngleAxisProps = {
12
+ allowDecimals: false,
13
+ allowDuplicatedCategory: true, // see recharts note: false breaks Radar tooltip sync
14
+ allowDataOverflow: false,
15
+ angle: 0,
16
+ angleAxisId: 0,
17
+ axisLine: true,
18
+ axisLineType: "polygon",
19
+ cx: 0,
20
+ cy: 0,
21
+ hide: false,
22
+ includeHidden: false,
23
+ label: false,
24
+ niceTicks: "auto",
25
+ orientation: "outer",
26
+ reversed: false,
27
+ scale: "auto",
28
+ tick: true,
29
+ tickLine: true,
30
+ tickSize: 8,
31
+ type: "auto",
32
+ zIndex: DefaultZIndexes.axis,
33
+ } as const;
@@ -0,0 +1,28 @@
1
+ // Ported from recharts 3.8.1 src/polar/defaultPolarRadiusAxisProps.tsx (commit 7a23854).
2
+ //
3
+ // DEVIATION: typed only `as const` for now (PolarRadiusAxis component deferred);
4
+ // when it lands its `Props` pins these via `satisfies`. Values byte-identical to
5
+ // recharts. Consumed by polarAxisSelectors' implicitRadiusAxis.
6
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
7
+
8
+ export const defaultPolarRadiusAxisProps = {
9
+ allowDataOverflow: false,
10
+ allowDecimals: false,
11
+ allowDuplicatedCategory: true,
12
+ angle: 0,
13
+ axisLine: true,
14
+ includeHidden: false,
15
+ hide: false,
16
+ niceTicks: "auto",
17
+ label: false,
18
+ orientation: "right",
19
+ radiusAxisId: 0,
20
+ reversed: false,
21
+ scale: "auto",
22
+ stroke: "#ccc",
23
+ tick: true,
24
+ tickCount: 5,
25
+ tickLine: true,
26
+ type: "auto",
27
+ zIndex: DefaultZIndexes.axis,
28
+ } as const;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @fileOverview Cross
3
+ *
4
+ * Ported from recharts 3.8.1 src/shape/Cross.tsx (commit 7a23854).
5
+ * Solid deviations: `className` (recharts) → `class: string` (and Omit the wide
6
+ * SVG `class` so the array form typechecks); destructuring defaults → `?? 0`
7
+ * accessors; `clsx` → `class={[...]}`; `return null` → `<Show>`.
8
+ */
9
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
10
+ import { Show, omit } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
+ import { isNumber } from "../util/DataUtils";
13
+ import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
14
+
15
+ interface CrossOwnProps {
16
+ /** The x-coordinate of the vertical line of the cross in pixels. */
17
+ x?: number;
18
+ /** The y-coordinate of the horizontal line of the cross in pixels. */
19
+ y?: number;
20
+ /** Width of the cross in pixels. */
21
+ width?: number;
22
+ /** Height of the cross in pixels. */
23
+ height?: number;
24
+ /** The y-coordinate of the top left point in the boundary box of the cross. */
25
+ top?: number;
26
+ /** The x-coordinate of the top left point in the boundary box of the cross. */
27
+ left?: number;
28
+ class?: string;
29
+ }
30
+
31
+ export type CrossProps = Omit<CamelSvgProps<JSX.PathSVGAttributes<SVGPathElement>>, "class"> &
32
+ CrossOwnProps;
33
+
34
+ const getPath = (
35
+ x: number,
36
+ y: number,
37
+ width: number,
38
+ height: number,
39
+ top: number,
40
+ left: number,
41
+ ): string => {
42
+ return `M${x},${top}v${height}M${left},${y}h${width}`;
43
+ };
44
+
45
+ export const Cross = (props: CrossProps): JSX.Element => {
46
+ const x = (): number => props.x ?? 0;
47
+ const y = (): number => props.y ?? 0;
48
+ const top = (): number => props.top ?? 0;
49
+ const left = (): number => props.left ?? 0;
50
+ const width = (): number => props.width ?? 0;
51
+ const height = (): number => props.height ?? 0;
52
+
53
+ const valid = (): boolean =>
54
+ isNumber(x()) &&
55
+ isNumber(y()) &&
56
+ isNumber(width()) &&
57
+ isNumber(height()) &&
58
+ isNumber(top()) &&
59
+ isNumber(left());
60
+
61
+ // recharts spreads `{ x, y, top, left, width, height, ...rest }` through the
62
+ // SVG-prop filter; only allowlisted keys (x, y, width, height, …) survive onto
63
+ // the <path>. `top`/`left`/`class` are filtered/handled separately.
64
+ const passthrough = (): Record<string, unknown> => ({
65
+ ...omit(props, "class"),
66
+ x: x(),
67
+ y: y(),
68
+ top: top(),
69
+ left: left(),
70
+ width: width(),
71
+ height: height(),
72
+ });
73
+
74
+ return (
75
+ <Show when={valid()}>
76
+ <path
77
+ {...svgPropertiesAndEvents(passthrough())}
78
+ class={["recharts-cross", props.class]}
79
+ d={getPath(x(), y(), width(), height(), top(), left())}
80
+ />
81
+ </Show>
82
+ );
83
+ };
@@ -0,0 +1,335 @@
1
+ /**
2
+ * @fileOverview Curve
3
+ *
4
+ * Ported from recharts 3.8.1 src/shape/Curve.tsx (commit 7a23854).
5
+ * Pure `getPath`/`getCurveFactory` helpers copied verbatim (modulo type
6
+ * adjustments). Solid deviations:
7
+ * - `className` → `class` (Omit the wide SVG `class`); `clsx` → `class={[...]}`.
8
+ * - `resolveDefaultProps` → `merge()` defaults via per-prop `?? default`.
9
+ * - `React.forwardRef` → `ref?: SVGPathElement | ((el: SVGPathElement) => void)`.
10
+ * - `return null` → `<Show>`.
11
+ * - `useChartLayout()` returns `Accessor<LayoutType | undefined>` in Solid.
12
+ * - `svgPropertiesNoEvents(props)` (attributes) + `adaptEventHandlers(props)`
13
+ * (events, rewrapped props-first) — same split as recharts Curve.
14
+ * - `noUncheckedIndexedAccess`: `baseLine[index]` is `NullableCoordinate | undefined`
15
+ * but the `base?:` field in `NullableAreaPoint` already accepts `undefined`.
16
+ * - Two `@ts-expect-error` from recharts kept: d3's `defined()` changes the
17
+ * generic type internally but its typings don't reflect that.
18
+ */
19
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
20
+ import { Show, omit } from "solid-js";
21
+ import type { JSX } from "@solidjs/web";
22
+ import {
23
+ area as shapeArea,
24
+ type Area as D3AreaCurve,
25
+ curveBasis,
26
+ curveBasisClosed,
27
+ curveBasisOpen,
28
+ curveBumpX,
29
+ curveBumpY,
30
+ type CurveFactory,
31
+ curveLinear,
32
+ curveLinearClosed,
33
+ curveMonotoneX,
34
+ curveMonotoneY,
35
+ curveNatural,
36
+ curveStep,
37
+ curveStepAfter,
38
+ curveStepBefore,
39
+ line as shapeLine,
40
+ type Line as D3LineCurve,
41
+ } from "victory-vendor/d3-shape";
42
+ import { isNumber, upperFirst } from "../util/DataUtils";
43
+ import { isWellBehavedNumber } from "../util/isWellBehavedNumber";
44
+ import { svgPropertiesNoEvents } from "../util/svgPropertiesNoEvents";
45
+ import { adaptEventHandlers } from "../util/adaptEventHandlers";
46
+ import { useChartLayout } from "../context/chartLayoutContext";
47
+ import type { Coordinate, LayoutType, NullableCoordinate } from "../util/types";
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Curve factory lookup
51
+ // ---------------------------------------------------------------------------
52
+
53
+ interface CurveFactories {
54
+ [index: string]: CurveFactory;
55
+ }
56
+
57
+ const CURVE_FACTORIES: CurveFactories = {
58
+ curveBasisClosed,
59
+ curveBasisOpen,
60
+ curveBasis,
61
+ curveBumpX,
62
+ curveBumpY,
63
+ curveLinearClosed,
64
+ curveLinear,
65
+ curveMonotoneX,
66
+ curveMonotoneY,
67
+ curveNatural,
68
+ curveStep,
69
+ curveStepAfter,
70
+ curveStepBefore,
71
+ };
72
+
73
+ /**
74
+ * @inline
75
+ */
76
+ export type CurveType =
77
+ | "basis"
78
+ | "basisClosed"
79
+ | "basisOpen"
80
+ | "bumpX"
81
+ | "bumpY"
82
+ | "bump"
83
+ | "linear"
84
+ | "linearClosed"
85
+ | "natural"
86
+ | "monotoneX"
87
+ | "monotoneY"
88
+ | "monotone"
89
+ | "step"
90
+ | "stepBefore"
91
+ | "stepAfter"
92
+ | CurveFactory;
93
+
94
+ /**
95
+ * @inline
96
+ */
97
+ export type BaseLineType = number | ReadonlyArray<NullableCoordinate>;
98
+
99
+ type AreaPoint = Coordinate & { base: Coordinate };
100
+ type NullableAreaPoint = NullableCoordinate & { base?: NullableCoordinate };
101
+
102
+ const defined = (p: NullableCoordinate): p is Coordinate =>
103
+ isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
104
+
105
+ const areaDefined = (d: NullableAreaPoint): d is AreaPoint =>
106
+ d.base != null && defined(d.base) && defined(d);
107
+
108
+ const getX = (p: Coordinate): number => p.x;
109
+ const getY = (p: Coordinate): number => p.y;
110
+
111
+ const getCurveFactory = (type: CurveType, layout: LayoutType | undefined): CurveFactory => {
112
+ if (typeof type === "function") {
113
+ return type;
114
+ }
115
+
116
+ const name = `curve${upperFirst(type)}`;
117
+
118
+ if ((name === "curveMonotone" || name === "curveBump") && layout) {
119
+ const factory = CURVE_FACTORIES[`${name}${layout === "vertical" ? "Y" : "X"}`];
120
+ if (factory) {
121
+ return factory;
122
+ }
123
+ }
124
+ return CURVE_FACTORIES[name] ?? curveLinear;
125
+ };
126
+
127
+ // ---------------------------------------------------------------------------
128
+ // getPath — exported pure helper
129
+ // ---------------------------------------------------------------------------
130
+
131
+ type GetPathProps = Pick<CurveOwnProps, "type" | "points" | "baseLine" | "layout" | "connectNulls">;
132
+
133
+ export const defaultCurveProps = {
134
+ connectNulls: false,
135
+ type: "linear",
136
+ } as const satisfies Partial<CurveOwnProps>;
137
+
138
+ /**
139
+ * Calculate the path of curve. Returns null if points is an empty array.
140
+ * @return path or null
141
+ */
142
+ export const getPath = ({
143
+ type = defaultCurveProps.type,
144
+ points = [],
145
+ baseLine,
146
+ layout,
147
+ connectNulls = defaultCurveProps.connectNulls,
148
+ }: GetPathProps): string | null => {
149
+ const curveFactory = getCurveFactory(type, layout);
150
+ const formatPoints: ReadonlyArray<NullableCoordinate> = connectNulls
151
+ ? points.filter(defined)
152
+ : points;
153
+
154
+ // When dealing with an area chart (where `baseLine` is an array),
155
+ // we need to pair points with their corresponding `baseLine` points first.
156
+ // This is to ensure that we filter points and their baseline counterparts together,
157
+ // preventing errors from mismatched array lengths and ensuring `defined` checks both.
158
+ // Narrow to the array form by EXCLUDING number/nullish rather than
159
+ // `Array.isArray` — the latter widens a ReadonlyArray to `any[]` (a TS
160
+ // limitation), which would make `baseLine[index]` an unsafe `any`. After this
161
+ // guard, baseLine is `ReadonlyArray<NullableCoordinate>`.
162
+ if (typeof baseLine !== "number" && baseLine != null) {
163
+ let lineFunction: D3AreaCurve<AreaPoint>;
164
+
165
+ // noUncheckedIndexedAccess: baseLine[index] is NullableCoordinate | undefined,
166
+ // which is compatible with `base?: NullableCoordinate` in NullableAreaPoint.
167
+ const areaPoints: ReadonlyArray<NullableAreaPoint> = points.map((entry, index) => ({
168
+ ...entry,
169
+ base: baseLine[index],
170
+ }));
171
+
172
+ if (layout === "vertical") {
173
+ lineFunction = shapeArea<AreaPoint>()
174
+ .y(getY)
175
+ .x1(getX)
176
+ .x0((d) => d.base.x);
177
+ } else {
178
+ lineFunction = shapeArea<AreaPoint>()
179
+ .x(getX)
180
+ .y1(getY)
181
+ .y0((d) => d.base.y);
182
+ }
183
+ /*
184
+ * What happens here is that the `.defined()` call will make it so that this function can accept
185
+ * nullable points, and internally it will filter them out and skip when generating the path.
186
+ * So on the input it accepts NullableCoordinate, but it never calls getX/getY on null points because of the defined() filter.
187
+ *
188
+ * The d3 type definition has only one generic so it doesn't allow to describe this properly.
189
+ * However. d3 types are mutable, but we can pretend that they are not, and we can pretend
190
+ * that calling defined() returns a new function with a different generic type.
191
+ */
192
+ // @ts-expect-error the defined call changes the generic type internally but d3 types don't reflect that
193
+ const nullableLineFunction: D3AreaCurve<NullableAreaPoint> = lineFunction
194
+ .defined(areaDefined)
195
+ .curve(curveFactory);
196
+
197
+ const finalPoints: ReadonlyArray<NullableAreaPoint> = connectNulls
198
+ ? areaPoints.filter(areaDefined)
199
+ : areaPoints;
200
+
201
+ return nullableLineFunction(finalPoints);
202
+ }
203
+
204
+ let lineFunction: D3LineCurve<Coordinate> | D3AreaCurve<Coordinate>;
205
+ if (layout === "vertical" && isNumber(baseLine)) {
206
+ lineFunction = shapeArea<Coordinate>().y(getY).x1(getX).x0(baseLine);
207
+ } else if (isNumber(baseLine)) {
208
+ lineFunction = shapeArea<Coordinate>().x(getX).y1(getY).y0(baseLine);
209
+ } else {
210
+ lineFunction = shapeLine<Coordinate>().x(getX).y(getY);
211
+ }
212
+
213
+ // @ts-expect-error the defined call changes the generic type internally but d3 types don't reflect that
214
+ const nullableLineFunction: D3LineCurve<NullableCoordinate> = lineFunction
215
+ .defined(defined)
216
+ .curve(curveFactory);
217
+
218
+ return nullableLineFunction(formatPoints);
219
+ };
220
+
221
+ // ---------------------------------------------------------------------------
222
+ // Props
223
+ // ---------------------------------------------------------------------------
224
+
225
+ interface CurveOwnProps {
226
+ class?: string;
227
+ /**
228
+ * The interpolation type of curve. Allows custom interpolation function.
229
+ *
230
+ * @defaultValue linear
231
+ * @link https://d3js.org/d3-shape/curve
232
+ */
233
+ type?: CurveType;
234
+ /**
235
+ * This option affects the interpolation algorithm when the `type` prop is set to 'monotone'.
236
+ * It also specifies the type of baseline when the curve is closed.
237
+ */
238
+ layout?: LayoutType;
239
+ /**
240
+ * Baseline of the area:
241
+ * - number: uses the corresponding axis value as a flat baseline;
242
+ * - an array of coordinates: describes a custom baseline path.
243
+ */
244
+ baseLine?: BaseLineType;
245
+ /**
246
+ * The coordinates of all the points in the curve, like an array of objects with x and y coordinates.
247
+ */
248
+ points?: ReadonlyArray<NullableCoordinate>;
249
+ /**
250
+ * Whether to connect the curve across null points.
251
+ *
252
+ * @defaultValue false
253
+ */
254
+ connectNulls?: boolean;
255
+ path?: string;
256
+ /**
257
+ * Ref callback or element ref for the underlying <path> element.
258
+ * (Replaces React's `pathRef: Ref<SVGPathElement>`.)
259
+ */
260
+ pathRef?: SVGPathElement | ((el: SVGPathElement) => void);
261
+ /**
262
+ * The pattern of dashes and gaps used to paint the line.
263
+ *
264
+ * @example strokeDasharray="5 5"
265
+ * @example strokeDasharray={10}
266
+ */
267
+ strokeDasharray?: string | number;
268
+ }
269
+
270
+ export type CurveProps = Omit<CamelSvgProps<JSX.PathSVGAttributes<SVGPathElement>>, "class"> &
271
+ CurveOwnProps;
272
+
273
+ // ---------------------------------------------------------------------------
274
+ // Component
275
+ // ---------------------------------------------------------------------------
276
+
277
+ export const Curve = (props: CurveProps): JSX.Element => {
278
+ const layoutFromContext = useChartLayout();
279
+
280
+ const hasPoints = (): boolean => props.points != null && props.points.length > 0;
281
+ const hasPath = (): boolean => props.path != null && props.path.length > 0;
282
+
283
+ const realPath = (): string | null | undefined => {
284
+ if (hasPoints()) {
285
+ return getPath({
286
+ type: props.type,
287
+ points: props.points,
288
+ baseLine: props.baseLine,
289
+ layout: props.layout ?? layoutFromContext(),
290
+ connectNulls: props.connectNulls,
291
+ });
292
+ }
293
+ return props.path;
294
+ };
295
+
296
+ // Convert null → undefined so the `d` attr is simply omitted (null is not a
297
+ // valid SVG attribute value here, but d3 can return null for empty point sets).
298
+ const dAttr = (): string | undefined => {
299
+ const p = realPath();
300
+ return p === null ? undefined : p;
301
+ };
302
+
303
+ // `strokeDasharray` (camelCase) is forwarded by the spread — svgPropertiesNoEvents
304
+ // renames it to the kebab `stroke-dasharray` DOM attribute (see svg-attribute-rename).
305
+ const others = (): Record<string, unknown> => ({
306
+ ...omit(
307
+ props,
308
+ "class",
309
+ "type",
310
+ "layout",
311
+ "baseLine",
312
+ "points",
313
+ "connectNulls",
314
+ "path",
315
+ "pathRef",
316
+ ),
317
+ });
318
+
319
+ // recharts Curve spreads `svgPropertiesNoEvents(props)` for attributes and
320
+ // `adaptEventHandlers(props)` for events — the latter rewraps each handler to be
321
+ // called with `(props, event)` (props-first). We mirror that split: attributes
322
+ // from `others()` (the manual omit), events from the FULL props so handlers
323
+ // receive the complete curve props as recharts does (Line.spec relies on this).
324
+ return (
325
+ <Show when={hasPoints() || hasPath()}>
326
+ <path
327
+ {...svgPropertiesNoEvents(others())}
328
+ {...(adaptEventHandlers(props) ?? {})}
329
+ class={["recharts-curve", props.class]}
330
+ d={dAttr()}
331
+ ref={props.pathRef}
332
+ />
333
+ </Show>
334
+ );
335
+ };
@@ -0,0 +1,49 @@
1
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
2
+ import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
3
+ import { Show, omit } from "solid-js";
4
+ import type { JSX } from "@solidjs/web";
5
+ import { isNumber } from "../util/DataUtils";
6
+
7
+ interface DotOwnProps {
8
+ /** The x-coordinate of center, in pixels. */
9
+ cx?: number;
10
+ /** The y-coordinate of center, in pixels. */
11
+ cy?: number;
12
+ /** The radius of the dot. */
13
+ r?: number | string;
14
+ clipDot?: boolean;
15
+ /** Maps to recharts' `className` (a plain string); the array `class` form below merges it. */
16
+ class?: string;
17
+ }
18
+
19
+ // Props parity with recharts DotProps; `class` is the only framework-idiomatic deviation
20
+ // (recharts' public prop is `className: string`). We Omit the wide SVG `class` so our
21
+ // `class` stays `string`, matching recharts and keeping the native array `class` form typed.
22
+ export type DotProps = Omit<
23
+ CamelSvgProps<JSX.CircleSVGAttributes<SVGCircleElement>>,
24
+ "cx" | "cy" | "r" | "class"
25
+ > &
26
+ DotOwnProps;
27
+
28
+ /**
29
+ * Renders a dot. Accepts X/Y coordinates in pixels; for data-positioned dots use ReferenceDot.
30
+ *
31
+ * Solid handles event props (onClick, ...) via delegation, so they never render as attributes —
32
+ * recharts achieves the same via svgPropertiesNoEvents + adaptEventHandlers. clipDot is omitted
33
+ * because it is not a valid SVG attribute.
34
+ */
35
+ export const Dot = (props: DotProps) => {
36
+ const rest = omit(props, "class", "cx", "cy", "r", "clipDot");
37
+
38
+ return (
39
+ <Show when={isNumber(props.cx) && isNumber(props.cy) && isNumber(props.r)}>
40
+ <circle
41
+ {...svgPropertiesAndEvents({ ...rest })}
42
+ class={["recharts-dot", props.class]}
43
+ cx={props.cx}
44
+ cy={props.cy}
45
+ r={props.r}
46
+ />
47
+ </Show>
48
+ );
49
+ };
@@ -0,0 +1,168 @@
1
+ /**
2
+ * @fileOverview Polygon
3
+ *
4
+ * Ported from recharts 3.8.1 src/shape/Polygon.tsx (commit 7a23854).
5
+ * Pure path helpers are copied verbatim. Solid deviations: `className` → `class`
6
+ * (Omit the wide SVG `class`); no destructuring (use `omit` + a keyed `<Show>`
7
+ * to narrow `points` without a non-null `!`); `clsx` → `class={[...]}`;
8
+ * `return null` → `<Show>`.
9
+ */
10
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
11
+ import { Show, omit } from "solid-js";
12
+ import type { JSX } from "@solidjs/web";
13
+ import { Coordinate } from "../util/types";
14
+ import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
15
+ import { roundTemplateLiteral } from "../util/round";
16
+
17
+ const isValidatePoint = (point: Coordinate | undefined): point is Coordinate => {
18
+ return point != null && point.x === +point.x && point.y === +point.y;
19
+ };
20
+
21
+ const getParsedPoints = (points: ReadonlyArray<Coordinate> = []): Coordinate[][] => {
22
+ let segmentPoints: Coordinate[][] = [[]];
23
+
24
+ points.forEach((entry) => {
25
+ const lastLink = segmentPoints[segmentPoints.length - 1];
26
+ if (isValidatePoint(entry)) {
27
+ if (lastLink) {
28
+ lastLink.push(entry);
29
+ }
30
+ } else if (lastLink && lastLink.length > 0) {
31
+ // add another path
32
+ segmentPoints.push([]);
33
+ }
34
+ });
35
+
36
+ const firstPoint = points[0];
37
+ const lastLink = segmentPoints[segmentPoints.length - 1];
38
+ if (isValidatePoint(firstPoint) && lastLink) {
39
+ lastLink.push(firstPoint);
40
+ }
41
+
42
+ const finalLink = segmentPoints[segmentPoints.length - 1];
43
+ if (finalLink && finalLink.length <= 0) {
44
+ segmentPoints = segmentPoints.slice(0, -1);
45
+ }
46
+
47
+ return segmentPoints;
48
+ };
49
+
50
+ const getSinglePolygonPath = (
51
+ points: ReadonlyArray<Coordinate>,
52
+ connectNulls?: boolean,
53
+ ): string => {
54
+ let segmentPoints = getParsedPoints(points);
55
+
56
+ if (connectNulls) {
57
+ segmentPoints = [
58
+ segmentPoints.reduce((res: Coordinate[], segPoints: Coordinate[]) => {
59
+ return [...res, ...segPoints];
60
+ }, []),
61
+ ];
62
+ }
63
+
64
+ const polygonPath = segmentPoints
65
+ .map((segPoints) => {
66
+ return segPoints.reduce((path: string, point: Coordinate, index: number) => {
67
+ return roundTemplateLiteral`${path}${index === 0 ? "M" : "L"}${point.x},${point.y}`;
68
+ }, "");
69
+ })
70
+ .join("");
71
+
72
+ return segmentPoints.length === 1 ? `${polygonPath}Z` : polygonPath;
73
+ };
74
+
75
+ const getRanglePath = (
76
+ points: ReadonlyArray<Coordinate>,
77
+ baseLinePoints: ReadonlyArray<Coordinate>,
78
+ connectNulls?: boolean,
79
+ ): string => {
80
+ const outerPath = getSinglePolygonPath(points, connectNulls);
81
+
82
+ return `${outerPath.slice(-1) === "Z" ? outerPath.slice(0, -1) : outerPath}L${getSinglePolygonPath(
83
+ Array.from(baseLinePoints).reverse(),
84
+ connectNulls,
85
+ ).slice(1)}`;
86
+ };
87
+
88
+ interface PolygonOwnProps {
89
+ class?: string;
90
+ /**
91
+ * The coordinates of all the vertexes of the polygon, like an array of objects with x and y coordinates.
92
+ */
93
+ points?: ReadonlyArray<Coordinate>;
94
+ baseLinePoints?: ReadonlyArray<Coordinate>;
95
+ connectNulls?: boolean;
96
+ }
97
+
98
+ export type PolygonProps = Omit<
99
+ CamelSvgProps<JSX.PolygonSVGAttributes<SVGPolygonElement>>,
100
+ "points" | "class"
101
+ > &
102
+ PolygonOwnProps;
103
+
104
+ export const Polygon = (props: PolygonProps): JSX.Element => {
105
+ const others = (): Record<string, unknown> => ({
106
+ ...omit(props, "class", "points", "baseLinePoints", "connectNulls"),
107
+ });
108
+ const layerClass = (): Array<string | undefined> => ["recharts-polygon", props.class];
109
+
110
+ // Narrow `points` to a non-empty array via keyed Show (no non-null assertion).
111
+ const validPoints = (): ReadonlyArray<Coordinate> | undefined =>
112
+ props.points != null && props.points.length > 0 ? props.points : undefined;
113
+ const validBase = (): ReadonlyArray<Coordinate> | undefined =>
114
+ props.baseLinePoints != null && props.baseLinePoints.length > 0
115
+ ? props.baseLinePoints
116
+ : undefined;
117
+
118
+ return (
119
+ <Show when={validPoints()} keyed>
120
+ {(points) => (
121
+ <Show
122
+ when={validBase()}
123
+ keyed
124
+ fallback={(() => {
125
+ const singlePath = getSinglePolygonPath(points, props.connectNulls);
126
+ return (
127
+ <path
128
+ {...svgPropertiesAndEvents(others())}
129
+ fill={singlePath.slice(-1) === "Z" ? props.fill : "none"}
130
+ class={layerClass()}
131
+ d={singlePath}
132
+ />
133
+ );
134
+ })()}
135
+ >
136
+ {(baseLinePoints) => {
137
+ const hasStroke = props.stroke && props.stroke !== "none";
138
+ const rangePath = getRanglePath(points, baseLinePoints, props.connectNulls);
139
+ return (
140
+ <g class={layerClass()}>
141
+ <path
142
+ {...svgPropertiesAndEvents(others())}
143
+ fill={rangePath.slice(-1) === "Z" ? props.fill : "none"}
144
+ stroke="none"
145
+ d={rangePath}
146
+ />
147
+ <Show when={hasStroke}>
148
+ <path
149
+ {...svgPropertiesAndEvents(others())}
150
+ fill="none"
151
+ d={getSinglePolygonPath(points, props.connectNulls)}
152
+ />
153
+ </Show>
154
+ <Show when={hasStroke}>
155
+ <path
156
+ {...svgPropertiesAndEvents(others())}
157
+ fill="none"
158
+ d={getSinglePolygonPath(baseLinePoints, props.connectNulls)}
159
+ />
160
+ </Show>
161
+ </g>
162
+ );
163
+ }}
164
+ </Show>
165
+ )}
166
+ </Show>
167
+ );
168
+ };