@solidports/recharts 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/index.d.ts +40 -2
  2. package/dist/index.js +14238 -7174
  3. package/dist/{dev.js → index.jsx} +18367 -15900
  4. package/dist/server.js +48178 -0
  5. package/package.json +36 -19
  6. package/src/animation/AnimatedItems.tsx +0 -183
  7. package/src/animation/AnimationController.ts +0 -33
  8. package/src/animation/AnimationControllerImpl.ts +0 -36
  9. package/src/animation/AnimationHandle.ts +0 -307
  10. package/src/animation/CSSTransitionAnimate.tsx +0 -170
  11. package/src/animation/JavascriptAnimate.tsx +0 -119
  12. package/src/animation/easing.ts +0 -221
  13. package/src/animation/matchBy.ts +0 -164
  14. package/src/animation/timeoutController.ts +0 -70
  15. package/src/animation/useAnimationController.tsx +0 -34
  16. package/src/animation/useAnimationStartSnapshot.ts +0 -118
  17. package/src/animation/util.ts +0 -41
  18. package/src/cartesian/Area.tsx +0 -915
  19. package/src/cartesian/AreaRevealShape.tsx +0 -190
  20. package/src/cartesian/Bar.tsx +0 -1369
  21. package/src/cartesian/BarStack.tsx +0 -152
  22. package/src/cartesian/Brush.tsx +0 -951
  23. package/src/cartesian/CartesianAxis.tsx +0 -722
  24. package/src/cartesian/CartesianGrid.tsx +0 -711
  25. package/src/cartesian/ErrorBar.tsx +0 -361
  26. package/src/cartesian/Funnel.tsx +0 -803
  27. package/src/cartesian/GraphicalItemClipPath.tsx +0 -67
  28. package/src/cartesian/Line.tsx +0 -863
  29. package/src/cartesian/LineDrawShape.tsx +0 -89
  30. package/src/cartesian/ReferenceArea.tsx +0 -331
  31. package/src/cartesian/ReferenceDot.tsx +0 -304
  32. package/src/cartesian/ReferenceLine.tsx +0 -474
  33. package/src/cartesian/Scatter.tsx +0 -888
  34. package/src/cartesian/XAxis.tsx +0 -433
  35. package/src/cartesian/YAxis.tsx +0 -443
  36. package/src/cartesian/ZAxis.tsx +0 -155
  37. package/src/cartesian/cartesianPositionToCSSTranslate.tsx +0 -29
  38. package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +0 -21
  39. package/src/cartesian/getCartesianPosition.tsx +0 -267
  40. package/src/cartesian/getEquidistantTicks.ts +0 -144
  41. package/src/cartesian/getTicks.ts +0 -225
  42. package/src/cartesian/isOutsidePosition.ts +0 -15
  43. package/src/cartesian/useAnimatedLineLength.ts +0 -54
  44. package/src/chart/AreaChart.tsx +0 -29
  45. package/src/chart/BarChart.tsx +0 -29
  46. package/src/chart/CartesianChart.tsx +0 -131
  47. package/src/chart/CategoricalChart.tsx +0 -94
  48. package/src/chart/ComposedChart.tsx +0 -29
  49. package/src/chart/FunnelChart.tsx +0 -29
  50. package/src/chart/LineChart.tsx +0 -29
  51. package/src/chart/PieChart.tsx +0 -50
  52. package/src/chart/PolarChart.tsx +0 -164
  53. package/src/chart/RadarChart.tsx +0 -70
  54. package/src/chart/RadialBarChart.tsx +0 -46
  55. package/src/chart/RechartsWrapper.tsx +0 -551
  56. package/src/chart/Sankey.tsx +0 -1534
  57. package/src/chart/ScatterChart.tsx +0 -29
  58. package/src/chart/SunburstChart.tsx +0 -504
  59. package/src/chart/Treemap.tsx +0 -1223
  60. package/src/chart/createInitialRootProps.ts +0 -24
  61. package/src/chart/types.ts +0 -53
  62. package/src/component/ActivePoints.tsx +0 -144
  63. package/src/component/Cell.tsx +0 -37
  64. package/src/component/Cursor.tsx +0 -185
  65. package/src/component/Customized.tsx +0 -50
  66. package/src/component/DefaultLegendContent.tsx +0 -348
  67. package/src/component/DefaultTooltipContent.tsx +0 -224
  68. package/src/component/Dots.tsx +0 -157
  69. package/src/component/Label.tsx +0 -636
  70. package/src/component/LabelList.tsx +0 -375
  71. package/src/component/Legend.tsx +0 -512
  72. package/src/component/ResponsiveContainer.tsx +0 -348
  73. package/src/component/Text.tsx +0 -541
  74. package/src/component/Tooltip.tsx +0 -470
  75. package/src/component/TooltipBoundingBox.tsx +0 -146
  76. package/src/component/responsiveContainerUtils.ts +0 -134
  77. package/src/container/ClipPathProvider.tsx +0 -51
  78. package/src/container/Layer.tsx +0 -38
  79. package/src/container/RootSurface.tsx +0 -120
  80. package/src/container/Surface.tsx +0 -61
  81. package/src/context/CellsContext.tsx +0 -54
  82. package/src/context/ErrorBarContext.tsx +0 -146
  83. package/src/context/GraphicalItemChildrenScope.tsx +0 -18
  84. package/src/context/PanoramaContext.tsx +0 -9
  85. package/src/context/RegisterGraphicalItemId.tsx +0 -30
  86. package/src/context/accessibilityContext.tsx +0 -6
  87. package/src/context/brushUpdateContext.tsx +0 -9
  88. package/src/context/chartDataContext.tsx +0 -97
  89. package/src/context/chartLayoutContext.tsx +0 -201
  90. package/src/context/legendPayloadContext.tsx +0 -20
  91. package/src/context/legendPortalContext.tsx +0 -12
  92. package/src/context/tooltipContext.tsx +0 -89
  93. package/src/context/tooltipPortalContext.tsx +0 -12
  94. package/src/context/useTooltipAxis.ts +0 -22
  95. package/src/hooks.ts +0 -476
  96. package/src/index.ts +0 -280
  97. package/src/polar/Pie.tsx +0 -1360
  98. package/src/polar/PolarAngleAxis.tsx +0 -616
  99. package/src/polar/PolarGrid.tsx +0 -312
  100. package/src/polar/PolarRadiusAxis.tsx +0 -547
  101. package/src/polar/Radar.tsx +0 -734
  102. package/src/polar/RadialBar.tsx +0 -917
  103. package/src/polar/defaultPolarAngleAxisProps.tsx +0 -27
  104. package/src/polar/defaultPolarRadiusAxisProps.tsx +0 -25
  105. package/src/shape/Cross.tsx +0 -89
  106. package/src/shape/Curve.tsx +0 -343
  107. package/src/shape/Dot.tsx +0 -70
  108. package/src/shape/Polygon.tsx +0 -195
  109. package/src/shape/Rectangle.tsx +0 -470
  110. package/src/shape/Sector.tsx +0 -347
  111. package/src/shape/Symbols.tsx +0 -139
  112. package/src/shape/Trapezoid.tsx +0 -280
  113. package/src/state/RechartsStateContext.tsx +0 -12
  114. package/src/state/RechartsStateProvider.tsx +0 -87
  115. package/src/state/RechartsStoreContext.tsx +0 -25
  116. package/src/state/RechartsStoreProvider.tsx +0 -35
  117. package/src/state/ReportChartProps.tsx +0 -40
  118. package/src/state/ReportEventSettings.tsx +0 -30
  119. package/src/state/ReportMainChartProps.tsx +0 -61
  120. package/src/state/ReportPolarOptions.tsx +0 -35
  121. package/src/state/SetGraphicalItem.ts +0 -79
  122. package/src/state/SetLegendPayload.ts +0 -134
  123. package/src/state/SetTooltipEntrySettings.tsx +0 -72
  124. package/src/state/actions.ts +0 -464
  125. package/src/state/brushSlice.ts +0 -13
  126. package/src/state/cartesianAxisSlice.ts +0 -141
  127. package/src/state/chartDataSlice.ts +0 -50
  128. package/src/state/chartState.ts +0 -297
  129. package/src/state/errorBarSlice.ts +0 -29
  130. package/src/state/eventSettingsSlice.ts +0 -8
  131. package/src/state/events.ts +0 -76
  132. package/src/state/externalEventsMiddleware.ts +0 -255
  133. package/src/state/graphicalItemsSlice.ts +0 -74
  134. package/src/state/hooks/useChartSelectors.tsx +0 -45
  135. package/src/state/keyboardEventsMiddleware.ts +0 -228
  136. package/src/state/layoutSlice.ts +0 -21
  137. package/src/state/legendSlice.ts +0 -57
  138. package/src/state/mouseEventsMiddleware.ts +0 -185
  139. package/src/state/optionsSlice.ts +0 -47
  140. package/src/state/polarAxisSlice.ts +0 -10
  141. package/src/state/polarOptionsSlice.ts +0 -12
  142. package/src/state/rawData.ts +0 -26
  143. package/src/state/referenceElementsSlice.ts +0 -40
  144. package/src/state/renderedTicksSlice.ts +0 -15
  145. package/src/state/rootPropsSlice.ts +0 -47
  146. package/src/state/selectors/areaSelectors.ts +0 -240
  147. package/src/state/selectors/arrayEqualityCheck.ts +0 -29
  148. package/src/state/selectors/axisSelectors.ts +0 -2157
  149. package/src/state/selectors/barSelectors.ts +0 -310
  150. package/src/state/selectors/barStackSelectors.ts +0 -77
  151. package/src/state/selectors/brushSelectors.ts +0 -33
  152. package/src/state/selectors/chartSelector.ts +0 -185
  153. package/src/state/selectors/combiners/combineActiveLabel.ts +0 -16
  154. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +0 -95
  155. package/src/state/selectors/combiners/combineAllBarPositions.ts +0 -122
  156. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +0 -16
  157. package/src/state/selectors/combiners/combineBarPosition.ts +0 -23
  158. package/src/state/selectors/combiners/combineBarSizeList.ts +0 -80
  159. package/src/state/selectors/combiners/combineCheckedDomain.ts +0 -48
  160. package/src/state/selectors/combiners/combineConfiguredScale.ts +0 -111
  161. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +0 -45
  162. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +0 -50
  163. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +0 -16
  164. package/src/state/selectors/combiners/combineRealScaleType.ts +0 -44
  165. package/src/state/selectors/combiners/combineStackedData.ts +0 -27
  166. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +0 -86
  167. package/src/state/selectors/combiners/combineTooltipPayload.ts +0 -205
  168. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +0 -58
  169. package/src/state/selectors/containerSelectors.ts +0 -12
  170. package/src/state/selectors/dataSelectors.ts +0 -88
  171. package/src/state/selectors/funnelSelectors.ts +0 -75
  172. package/src/state/selectors/graphicalItemSelectors.ts +0 -30
  173. package/src/state/selectors/legendSelectors.ts +0 -29
  174. package/src/state/selectors/lineSelectors.ts +0 -134
  175. package/src/state/selectors/numberDomainEqualityCheck.ts +0 -14
  176. package/src/state/selectors/pickAxisId.ts +0 -5
  177. package/src/state/selectors/pickAxisType.ts +0 -3
  178. package/src/state/selectors/pieSelectors.ts +0 -97
  179. package/src/state/selectors/polarAxisSelectors.ts +0 -201
  180. package/src/state/selectors/polarGridSelectors.ts +0 -28
  181. package/src/state/selectors/polarScaleSelectors.ts +0 -133
  182. package/src/state/selectors/polarSelectors.ts +0 -219
  183. package/src/state/selectors/radarSelectors.ts +0 -191
  184. package/src/state/selectors/radialBarSelectors.ts +0 -435
  185. package/src/state/selectors/rootPropsSelectors.ts +0 -25
  186. package/src/state/selectors/scatterSelectors.ts +0 -96
  187. package/src/state/selectors/selectActivePropsFromChartPointer.ts +0 -26
  188. package/src/state/selectors/selectAllAxes.ts +0 -17
  189. package/src/state/selectors/selectChartOffset.ts +0 -16
  190. package/src/state/selectors/selectChartOffsetInternal.ts +0 -136
  191. package/src/state/selectors/selectLegendArea.ts +0 -20
  192. package/src/state/selectors/selectPlotArea.ts +0 -22
  193. package/src/state/selectors/selectTooltipAxisId.ts +0 -7
  194. package/src/state/selectors/selectTooltipAxisType.ts +0 -32
  195. package/src/state/selectors/selectTooltipEventType.ts +0 -48
  196. package/src/state/selectors/selectTooltipPayloadSearcher.ts +0 -6
  197. package/src/state/selectors/selectTooltipSettings.ts +0 -39
  198. package/src/state/selectors/selectTooltipState.ts +0 -8
  199. package/src/state/selectors/selectors.ts +0 -271
  200. package/src/state/selectors/tooltipSelectors.ts +0 -578
  201. package/src/state/selectors/touchSelectors.ts +0 -31
  202. package/src/state/store.ts +0 -29
  203. package/src/state/storeIdentity.ts +0 -9
  204. package/src/state/teardownWrite.ts +0 -10
  205. package/src/state/tooltipInteraction.ts +0 -23
  206. package/src/state/tooltipSlice.ts +0 -334
  207. package/src/state/touchEventsMiddleware.ts +0 -214
  208. package/src/state/types/AnimationSettings.ts +0 -20
  209. package/src/state/types/AreaSettings.ts +0 -14
  210. package/src/state/types/BarSettings.ts +0 -15
  211. package/src/state/types/LineSettings.ts +0 -9
  212. package/src/state/types/PieSettings.ts +0 -34
  213. package/src/state/types/RadarSettings.ts +0 -5
  214. package/src/state/types/RadialBarSettings.ts +0 -10
  215. package/src/state/types/ScatterSettings.ts +0 -12
  216. package/src/state/types/StackedGraphicalItem.ts +0 -34
  217. package/src/state/useChartState.ts +0 -17
  218. package/src/state/zIndexSlice.ts +0 -39
  219. package/src/synchronisation/syncSelectors.ts +0 -7
  220. package/src/synchronisation/types.ts +0 -44
  221. package/src/synchronisation/useChartSynchronisation.tsx +0 -404
  222. package/src/theme/RechartsTheme.ts +0 -16
  223. package/src/theme/RechartsThemeContext.ts +0 -19
  224. package/src/theme/darkTheme.ts +0 -13
  225. package/src/theme/graphicalItemIdentity.ts +0 -70
  226. package/src/theme/legacyTheme.ts +0 -17
  227. package/src/theme/lightTheme.ts +0 -13
  228. package/src/types.ts +0 -54
  229. package/src/util/ActiveShapeUtils.tsx +0 -162
  230. package/src/util/BarUtils.tsx +0 -62
  231. package/src/util/BarePortal.tsx +0 -50
  232. package/src/util/CamelCaseSVGAttrs.ts +0 -34
  233. package/src/util/CartesianUtils.ts +0 -48
  234. package/src/util/ChartUtils.ts +0 -802
  235. package/src/util/Constants.ts +0 -42
  236. package/src/util/CssPrefixUtils.ts +0 -20
  237. package/src/util/DOMUtils.ts +0 -129
  238. package/src/util/DataUtils.ts +0 -216
  239. package/src/util/Events.ts +0 -16
  240. package/src/util/FunnelUtils.tsx +0 -15
  241. package/src/util/Global.ts +0 -12
  242. package/src/util/IfOverflow.ts +0 -15
  243. package/src/util/LRUCache.ts +0 -41
  244. package/src/util/LogUtils.ts +0 -22
  245. package/src/util/PolarUtils.ts +0 -132
  246. package/src/util/RadialBarUtils.tsx +0 -24
  247. package/src/util/ReactUtils.ts +0 -95
  248. package/src/util/ReduceCSSCalc.ts +0 -187
  249. package/src/util/ScatterUtils.tsx +0 -52
  250. package/src/util/ShapeElementProps.tsx +0 -87
  251. package/src/util/TickUtils.ts +0 -60
  252. package/src/util/XAxisUtils.ts +0 -48
  253. package/src/util/YAxisUtils.ts +0 -48
  254. package/src/util/axisPropsAreEqual.ts +0 -48
  255. package/src/util/createCartesianCharts.tsx +0 -150
  256. package/src/util/createEventProxy.ts +0 -20
  257. package/src/util/createPolarCharts.tsx +0 -112
  258. package/src/util/cursor/getCursorPoints.ts +0 -46
  259. package/src/util/cursor/getCursorRectangle.ts +0 -28
  260. package/src/util/cursor/getRadialCursorPoints.ts +0 -32
  261. package/src/util/excludeEventProps.ts +0 -171
  262. package/src/util/getActiveCoordinate.ts +0 -213
  263. package/src/util/getAxisTypeBasedOnLayout.ts +0 -21
  264. package/src/util/getClassNameFromUnknown.ts +0 -6
  265. package/src/util/getEveryNth.ts +0 -27
  266. package/src/util/getRadiusAndStrokeWidthFromDot.ts +0 -35
  267. package/src/util/getRelativeCoordinate.ts +0 -80
  268. package/src/util/getSliced.ts +0 -13
  269. package/src/util/hoverDedupe.ts +0 -41
  270. package/src/util/isDomainSpecifiedByUser.ts +0 -219
  271. package/src/util/isWellBehavedNumber.ts +0 -7
  272. package/src/util/pathTotalLength.ts +0 -25
  273. package/src/util/payload/getUniqPayload.ts +0 -28
  274. package/src/util/propsAreEqual.ts +0 -121
  275. package/src/util/resolveDefaultProps.ts +0 -161
  276. package/src/util/round.ts +0 -32
  277. package/src/util/scale/CartesianScaleHelper.ts +0 -72
  278. package/src/util/scale/CustomScaleDefinition.ts +0 -81
  279. package/src/util/scale/RechartsScale.ts +0 -130
  280. package/src/util/scale/createCategoricalInverse.ts +0 -72
  281. package/src/util/scale/getNiceTickValues.ts +0 -311
  282. package/src/util/scale/index.ts +0 -2
  283. package/src/util/scale/util/arithmetic.ts +0 -54
  284. package/src/util/solid-1-compat.ts +0 -310
  285. package/src/util/solidJsxCamelAugment.d.ts +0 -84
  286. package/src/util/stacks/getStackSeriesIdentifier.ts +0 -21
  287. package/src/util/stacks/stackTypes.ts +0 -60
  288. package/src/util/structurallyEqual.ts +0 -31
  289. package/src/util/svgPropertiesAndEvents.ts +0 -53
  290. package/src/util/svgPropertiesNoEvents.ts +0 -571
  291. package/src/util/tooltip/translate.ts +0 -171
  292. package/src/util/typedDataKey.ts +0 -48
  293. package/src/util/types.ts +0 -1560
  294. package/src/util/useAnimationId.ts +0 -31
  295. package/src/util/useElementOffset.ts +0 -110
  296. package/src/util/useId.ts +0 -8
  297. package/src/util/usePrefersReducedMotion.ts +0 -48
  298. package/src/util/useReportScale.ts +0 -24
  299. package/src/util/useUniqueId.ts +0 -30
  300. package/src/zIndex/DefaultZIndexes.ts +0 -84
  301. package/src/zIndex/ZIndexLayer.tsx +0 -121
  302. package/src/zIndex/ZIndexPortal.tsx +0 -79
  303. package/src/zIndex/getZIndexFromUnknown.ts +0 -14
  304. package/src/zIndex/zIndexSelectors.ts +0 -48
@@ -1,348 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import { clsx } from "clsx"
3
- import { createContext, createMemo, createSignal, Show, useContext, createEffect, omit } from 'solid-js';
4
- import type { JSX } from '@solidjs/web';
5
- import throttle from "es-toolkit/compat/throttle"
6
- import { isNumber, noop } from "../util/DataUtils"
7
- import { warn } from "../util/LogUtils"
8
- import {
9
- calculateChartDimensions,
10
- defaultResponsiveContainerProps,
11
- getDefaultWidthAndHeight,
12
- getInnerDivStyle,
13
- } from "./responsiveContainerUtils"
14
- import type { Percent, Size } from "../util/types"
15
- import { isPositiveNumber } from "../util/isWellBehavedNumber"
16
-
17
- export interface Props
18
- extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "id" | "class" | "style" | "onResize" | "ref" | "children"> {
19
- /**
20
- * width / height. If specified, the height will be calculated by width / aspect.
21
- */
22
- aspect?: number
23
- /**
24
- * The width of chart container.
25
- * Can be a number or a percent string like "100%".
26
- * @default '100%'
27
- */
28
- width?: Percent | number
29
- /**
30
- * The height of chart container.
31
- * Can be a number or a percent string like "100%".
32
- * @default '100%'
33
- */
34
- height?: Percent | number
35
- /**
36
- * The minimum width of the container.
37
- * @default 0
38
- */
39
- minWidth?: string | number
40
- /**
41
- * The minimum height of the container.
42
- */
43
- minHeight?: string | number
44
- /**
45
- * The initial width and height of the container.
46
- * @default {"width":-1,"height":-1}
47
- */
48
- initialDimension?: {
49
- width: number
50
- height: number
51
- }
52
- /** The maximum height of the container. It can be a number. */
53
- maxHeight?: number
54
- /**
55
- * The content of the container.
56
- * It can contain multiple charts, and then they will all share the same dimensions.
57
- */
58
- children: JSX.Element
59
- /**
60
- * If specified a positive number, debounced function will be used to handle the resize event.
61
- * @default 0
62
- */
63
- debounce?: number
64
- /**
65
- * Unique identifier of this component.
66
- * Used as an HTML attribute `id`.
67
- */
68
- id?: string | number
69
- /** The HTML element's class name */
70
- className?: string | number
71
- /** The style of the container. */
72
- style?: JSX.CSSProperties
73
- /**
74
- * If specified provides a callback providing the updated chart width and height values.
75
- */
76
- onResize?: (width: number, height: number) => void
77
- /**
78
- * Ref callback for the container div.
79
- */
80
- ref?: (el: HTMLDivElement) => void
81
- }
82
-
83
- const ResponsiveContainerContext = createContext<Size>(
84
- defaultResponsiveContainerProps.initialDimension,
85
- )
86
-
87
- function isAcceptableSize(size: {
88
- width: number | undefined
89
- height: number | undefined
90
- }): size is Size {
91
- return isPositiveNumber(size.width) && isPositiveNumber(size.height)
92
- }
93
-
94
- function ResponsiveContainerContextProvider(props: {
95
- children: JSX.Element
96
- width: number | undefined
97
- height: number | undefined
98
- }) {
99
- const size = createMemo(() => ({ height: props.height, width: props.width }))
100
- /* Solid context value is captured once at JSX time; reactive getters expose live size to consumers that destructure or read fields multiple times. */
101
- const reactiveSize: Size = {
102
- get height() {
103
- return (size().height ?? -1) as number
104
- },
105
- get width() {
106
- return (size().width ?? -1) as number
107
- },
108
- }
109
- return (
110
- <Show when={isAcceptableSize(size())} fallback={null}>
111
- <ResponsiveContainerContext value={reactiveSize}>
112
- {props.children}
113
- </ResponsiveContainerContext>
114
- </Show>
115
- )
116
- }
117
-
118
- export const useResponsiveContainerContext = () => useContext(ResponsiveContainerContext)
119
-
120
- function SizeDetectorContainer(props: Props) {
121
- let containerRef: HTMLDivElement | undefined
122
- /* remaining HTML attributes go to the root div, like upstream's `...others` */
123
- const others = omit(
124
- props,
125
- "aspect",
126
- "initialDimension",
127
- "width",
128
- "height",
129
- "minWidth",
130
- "minHeight",
131
- "maxHeight",
132
- "children",
133
- "debounce",
134
- "id",
135
- "className",
136
- "onResize",
137
- "style",
138
- "ref",
139
- )
140
-
141
- const aspect = () => props.aspect
142
- const initialDimension = () =>
143
- props.initialDimension ?? defaultResponsiveContainerProps.initialDimension
144
- const width = () => props.width
145
- const height = () => props.height
146
- const minWidth = () => props.minWidth ?? defaultResponsiveContainerProps.minWidth
147
- const minHeight = () => props.minHeight
148
- const maxHeight = () => props.maxHeight
149
- const debounce = () => props.debounce ?? defaultResponsiveContainerProps.debounce
150
-
151
- const [sizes, setSizes] = createSignal({
152
- containerHeight: initialDimension().height,
153
- containerWidth: initialDimension().width,
154
- })
155
-
156
- const setContainerSize = (newWidth: number, newHeight: number) => {
157
- const roundedWidth = Math.round(newWidth)
158
- const roundedHeight = Math.round(newHeight)
159
- setSizes((prevState) => {
160
- if (
161
- prevState.containerWidth === roundedWidth &&
162
- prevState.containerHeight === roundedHeight
163
- ) {
164
- return prevState
165
- }
166
- return { containerHeight: roundedHeight, containerWidth: roundedWidth }
167
- })
168
- }
169
-
170
- createEffect(debounce, (debounceMs) => {
171
- if (containerRef == null || typeof ResizeObserver === "undefined") {
172
- return noop
173
- }
174
- let callback = (entries: ResizeObserverEntry[]) => {
175
- const entry = entries[0]
176
- if (entry == null) {
177
- return
178
- }
179
- const { width: containerWidth, height: containerHeight } = entry.contentRect
180
- setContainerSize(containerWidth, containerHeight)
181
- props.onResize?.(containerWidth, containerHeight)
182
- }
183
- if (debounceMs > 0) {
184
- callback = throttle(callback, debounceMs, {
185
- leading: false,
186
- trailing: true,
187
- })
188
- }
189
- const observer = new ResizeObserver(callback)
190
-
191
- const { width: containerWidth, height: containerHeight } = containerRef.getBoundingClientRect()
192
- setContainerSize(containerWidth, containerHeight)
193
-
194
- observer.observe(containerRef)
195
-
196
- return () => {
197
- observer.disconnect()
198
- }
199
- })
200
-
201
- const containerWidth = () => sizes().containerWidth
202
- const containerHeight = () => sizes().containerHeight
203
-
204
- /* eslint-disable-next-line solid/reactivity -- dev-only validation call at setup; stale warn on aspect change is acceptable */
205
- warn(!aspect() || (aspect() ?? 0) > 0, "The aspect(%s) must be greater than zero.", aspect())
206
-
207
- const dimensions = createMemo(() =>
208
- calculateChartDimensions(containerWidth(), containerHeight(), {
209
- aspect: aspect(),
210
- height: height(),
211
- maxHeight: maxHeight(),
212
- width: width(),
213
- }),
214
- )
215
-
216
- const calculatedWidth = () => dimensions().calculatedWidth
217
- const calculatedHeight = () => dimensions().calculatedHeight
218
-
219
- /* Skip warn until initial -1 placeholder has been replaced by a real measurement.
220
- React useState defers component-body-warn until after first useEffect runs;
221
- Solid runs the body sync so we'd otherwise emit on every chart's first paint. */
222
- createEffect(
223
- () =>
224
- containerWidth() === -1 && containerHeight() === -1
225
- ? null
226
- : [
227
- (calculatedWidth() != null && (calculatedWidth() ?? 0) > 0) ||
228
- (calculatedHeight() != null && (calculatedHeight() ?? 0) > 0),
229
- calculatedWidth(),
230
- calculatedHeight(),
231
- width(),
232
- height(),
233
- minWidth(),
234
- minHeight(),
235
- aspect(),
236
- ] as const,
237
- (args) => {
238
- if (args == null) return
239
- const [ok, ...values] = args
240
- warn(
241
- ok,
242
- `The width(%s) and height(%s) of chart should be greater than 0,
243
- please check the style of container, or the props width(%s) and height(%s),
244
- or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
245
- height and width.`,
246
- ...values,
247
- )
248
- },
249
- )
250
-
251
- return (
252
- <div
253
- id={props.id ? `${props.id}` : undefined}
254
- class={clsx("recharts-responsive-container", props.className)}
255
- style={{
256
- ...props.style,
257
- height: typeof height() === "number" ? `${height()}px` : (height() as string | undefined),
258
- "max-height": maxHeight() ? `${maxHeight()}px` : undefined,
259
- "min-height":
260
- typeof minHeight() === "number"
261
- ? `${minHeight()}px`
262
- : (minHeight() as string | undefined),
263
- "min-width":
264
- typeof minWidth() === "number" ? `${minWidth()}px` : (minWidth() as string | undefined),
265
- width: typeof width() === "number" ? `${width()}px` : (width() as string | undefined),
266
- }}
267
- ref={(el) => {
268
- containerRef = el
269
- if (typeof props.ref === "function") {
270
- props.ref(el)
271
- }
272
- }}
273
- {...others}
274
- >
275
- <div style={getInnerDivStyle({ height: height(), width: width() })}>
276
- <ResponsiveContainerContextProvider width={calculatedWidth()} height={calculatedHeight()}>
277
- {props.children}
278
- </ResponsiveContainerContextProvider>
279
- </div>
280
- </div>
281
- )
282
- }
283
-
284
- /**
285
- * The `ResponsiveContainer` component is a container that adjusts its width and height based on the size of its parent element.
286
- * It is used to create responsive charts that adapt to different screen sizes.
287
- *
288
- * This component uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} API to monitor changes to the size of its parent element.
289
- * If you need to support older browsers that do not support this API, you may need to include a polyfill.
290
- *
291
- * @see {@link https://recharts.github.io/en-US/guide/sizes/ Chart size guide}
292
- *
293
- * @provides ResponsiveContainerContext
294
- */
295
- export function ResponsiveContainer(props: Props) {
296
- const responsiveContainerContext = useResponsiveContainerContext()
297
- if (
298
- isPositiveNumber(responsiveContainerContext.width) &&
299
- isPositiveNumber(responsiveContainerContext.height)
300
- ) {
301
- /*
302
- * If we detect that we are already inside another ResponsiveContainer,
303
- * we do not attempt to add another layer of responsiveness.
304
- */
305
- return <>{props.children}</>
306
- }
307
-
308
- /* eslint-disable solid/reactivity -- initial sizing pass; these pure-fn results are fixed at mount (ResponsiveContainer design intent) */
309
- const { width, height } = getDefaultWidthAndHeight({
310
- aspect: props.aspect,
311
- height: props.height,
312
- width: props.width,
313
- })
314
-
315
- /*
316
- * Let's try to get the calculated dimensions without having the div container set up.
317
- * Sometimes this does produce fixed, positive dimensions. If so, we can skip rendering the div and monitoring its size.
318
- */
319
- const { calculatedWidth, calculatedHeight } = calculateChartDimensions(undefined, undefined, {
320
- aspect: props.aspect,
321
- height,
322
- maxHeight: props.maxHeight,
323
- width,
324
- })
325
- /* eslint-enable solid/reactivity */
326
-
327
- if (isNumber(calculatedWidth) && isNumber(calculatedHeight)) {
328
- /*
329
- * If it just so happens that the combination of width, height, and aspect ratio
330
- * results in fixed dimensions, then we don't need to monitor the container's size.
331
- * We can just provide these fixed dimensions to the context.
332
- *
333
- * Note that here we are not checking for positive numbers;
334
- * if the user provides a zero or negative width/height, we will just pass that along
335
- * as whatever size we detect won't be helping anyway.
336
- */
337
- return (
338
- <ResponsiveContainerContextProvider width={calculatedWidth} height={calculatedHeight}>
339
- {props.children}
340
- </ResponsiveContainerContextProvider>
341
- )
342
- }
343
- /*
344
- * Static analysis did not produce fixed dimensions,
345
- * so we need to render a special div and monitor its size.
346
- */
347
- return <SizeDetectorContainer {...props} width={width} height={height} />
348
- }