@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.
- package/dist/index.d.ts +40 -2
- package/dist/index.js +14238 -7174
- package/dist/{dev.js → index.jsx} +18367 -15900
- package/dist/server.js +48178 -0
- package/package.json +36 -19
- package/src/animation/AnimatedItems.tsx +0 -183
- package/src/animation/AnimationController.ts +0 -33
- package/src/animation/AnimationControllerImpl.ts +0 -36
- package/src/animation/AnimationHandle.ts +0 -307
- package/src/animation/CSSTransitionAnimate.tsx +0 -170
- package/src/animation/JavascriptAnimate.tsx +0 -119
- package/src/animation/easing.ts +0 -221
- package/src/animation/matchBy.ts +0 -164
- package/src/animation/timeoutController.ts +0 -70
- package/src/animation/useAnimationController.tsx +0 -34
- package/src/animation/useAnimationStartSnapshot.ts +0 -118
- package/src/animation/util.ts +0 -41
- package/src/cartesian/Area.tsx +0 -915
- package/src/cartesian/AreaRevealShape.tsx +0 -190
- package/src/cartesian/Bar.tsx +0 -1369
- package/src/cartesian/BarStack.tsx +0 -152
- package/src/cartesian/Brush.tsx +0 -951
- package/src/cartesian/CartesianAxis.tsx +0 -722
- package/src/cartesian/CartesianGrid.tsx +0 -711
- package/src/cartesian/ErrorBar.tsx +0 -361
- package/src/cartesian/Funnel.tsx +0 -803
- package/src/cartesian/GraphicalItemClipPath.tsx +0 -67
- package/src/cartesian/Line.tsx +0 -863
- package/src/cartesian/LineDrawShape.tsx +0 -89
- package/src/cartesian/ReferenceArea.tsx +0 -331
- package/src/cartesian/ReferenceDot.tsx +0 -304
- package/src/cartesian/ReferenceLine.tsx +0 -474
- package/src/cartesian/Scatter.tsx +0 -888
- package/src/cartesian/XAxis.tsx +0 -433
- package/src/cartesian/YAxis.tsx +0 -443
- package/src/cartesian/ZAxis.tsx +0 -155
- package/src/cartesian/cartesianPositionToCSSTranslate.tsx +0 -29
- package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +0 -21
- package/src/cartesian/getCartesianPosition.tsx +0 -267
- package/src/cartesian/getEquidistantTicks.ts +0 -144
- package/src/cartesian/getTicks.ts +0 -225
- package/src/cartesian/isOutsidePosition.ts +0 -15
- package/src/cartesian/useAnimatedLineLength.ts +0 -54
- package/src/chart/AreaChart.tsx +0 -29
- package/src/chart/BarChart.tsx +0 -29
- package/src/chart/CartesianChart.tsx +0 -131
- package/src/chart/CategoricalChart.tsx +0 -94
- package/src/chart/ComposedChart.tsx +0 -29
- package/src/chart/FunnelChart.tsx +0 -29
- package/src/chart/LineChart.tsx +0 -29
- package/src/chart/PieChart.tsx +0 -50
- package/src/chart/PolarChart.tsx +0 -164
- package/src/chart/RadarChart.tsx +0 -70
- package/src/chart/RadialBarChart.tsx +0 -46
- package/src/chart/RechartsWrapper.tsx +0 -551
- package/src/chart/Sankey.tsx +0 -1534
- package/src/chart/ScatterChart.tsx +0 -29
- package/src/chart/SunburstChart.tsx +0 -504
- package/src/chart/Treemap.tsx +0 -1223
- package/src/chart/createInitialRootProps.ts +0 -24
- package/src/chart/types.ts +0 -53
- package/src/component/ActivePoints.tsx +0 -144
- package/src/component/Cell.tsx +0 -37
- package/src/component/Cursor.tsx +0 -185
- package/src/component/Customized.tsx +0 -50
- package/src/component/DefaultLegendContent.tsx +0 -348
- package/src/component/DefaultTooltipContent.tsx +0 -224
- package/src/component/Dots.tsx +0 -157
- package/src/component/Label.tsx +0 -636
- package/src/component/LabelList.tsx +0 -375
- package/src/component/Legend.tsx +0 -512
- package/src/component/ResponsiveContainer.tsx +0 -348
- package/src/component/Text.tsx +0 -541
- package/src/component/Tooltip.tsx +0 -470
- package/src/component/TooltipBoundingBox.tsx +0 -146
- package/src/component/responsiveContainerUtils.ts +0 -134
- package/src/container/ClipPathProvider.tsx +0 -51
- package/src/container/Layer.tsx +0 -38
- package/src/container/RootSurface.tsx +0 -120
- package/src/container/Surface.tsx +0 -61
- package/src/context/CellsContext.tsx +0 -54
- package/src/context/ErrorBarContext.tsx +0 -146
- package/src/context/GraphicalItemChildrenScope.tsx +0 -18
- package/src/context/PanoramaContext.tsx +0 -9
- package/src/context/RegisterGraphicalItemId.tsx +0 -30
- package/src/context/accessibilityContext.tsx +0 -6
- package/src/context/brushUpdateContext.tsx +0 -9
- package/src/context/chartDataContext.tsx +0 -97
- package/src/context/chartLayoutContext.tsx +0 -201
- package/src/context/legendPayloadContext.tsx +0 -20
- package/src/context/legendPortalContext.tsx +0 -12
- package/src/context/tooltipContext.tsx +0 -89
- package/src/context/tooltipPortalContext.tsx +0 -12
- package/src/context/useTooltipAxis.ts +0 -22
- package/src/hooks.ts +0 -476
- package/src/index.ts +0 -280
- package/src/polar/Pie.tsx +0 -1360
- package/src/polar/PolarAngleAxis.tsx +0 -616
- package/src/polar/PolarGrid.tsx +0 -312
- package/src/polar/PolarRadiusAxis.tsx +0 -547
- package/src/polar/Radar.tsx +0 -734
- package/src/polar/RadialBar.tsx +0 -917
- package/src/polar/defaultPolarAngleAxisProps.tsx +0 -27
- package/src/polar/defaultPolarRadiusAxisProps.tsx +0 -25
- package/src/shape/Cross.tsx +0 -89
- package/src/shape/Curve.tsx +0 -343
- package/src/shape/Dot.tsx +0 -70
- package/src/shape/Polygon.tsx +0 -195
- package/src/shape/Rectangle.tsx +0 -470
- package/src/shape/Sector.tsx +0 -347
- package/src/shape/Symbols.tsx +0 -139
- package/src/shape/Trapezoid.tsx +0 -280
- package/src/state/RechartsStateContext.tsx +0 -12
- package/src/state/RechartsStateProvider.tsx +0 -87
- package/src/state/RechartsStoreContext.tsx +0 -25
- package/src/state/RechartsStoreProvider.tsx +0 -35
- package/src/state/ReportChartProps.tsx +0 -40
- package/src/state/ReportEventSettings.tsx +0 -30
- package/src/state/ReportMainChartProps.tsx +0 -61
- package/src/state/ReportPolarOptions.tsx +0 -35
- package/src/state/SetGraphicalItem.ts +0 -79
- package/src/state/SetLegendPayload.ts +0 -134
- package/src/state/SetTooltipEntrySettings.tsx +0 -72
- package/src/state/actions.ts +0 -464
- package/src/state/brushSlice.ts +0 -13
- package/src/state/cartesianAxisSlice.ts +0 -141
- package/src/state/chartDataSlice.ts +0 -50
- package/src/state/chartState.ts +0 -297
- package/src/state/errorBarSlice.ts +0 -29
- package/src/state/eventSettingsSlice.ts +0 -8
- package/src/state/events.ts +0 -76
- package/src/state/externalEventsMiddleware.ts +0 -255
- package/src/state/graphicalItemsSlice.ts +0 -74
- package/src/state/hooks/useChartSelectors.tsx +0 -45
- package/src/state/keyboardEventsMiddleware.ts +0 -228
- package/src/state/layoutSlice.ts +0 -21
- package/src/state/legendSlice.ts +0 -57
- package/src/state/mouseEventsMiddleware.ts +0 -185
- package/src/state/optionsSlice.ts +0 -47
- package/src/state/polarAxisSlice.ts +0 -10
- package/src/state/polarOptionsSlice.ts +0 -12
- package/src/state/rawData.ts +0 -26
- package/src/state/referenceElementsSlice.ts +0 -40
- package/src/state/renderedTicksSlice.ts +0 -15
- package/src/state/rootPropsSlice.ts +0 -47
- package/src/state/selectors/areaSelectors.ts +0 -240
- package/src/state/selectors/arrayEqualityCheck.ts +0 -29
- package/src/state/selectors/axisSelectors.ts +0 -2157
- package/src/state/selectors/barSelectors.ts +0 -310
- package/src/state/selectors/barStackSelectors.ts +0 -77
- package/src/state/selectors/brushSelectors.ts +0 -33
- package/src/state/selectors/chartSelector.ts +0 -185
- package/src/state/selectors/combiners/combineActiveLabel.ts +0 -16
- package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +0 -95
- package/src/state/selectors/combiners/combineAllBarPositions.ts +0 -122
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +0 -16
- package/src/state/selectors/combiners/combineBarPosition.ts +0 -23
- package/src/state/selectors/combiners/combineBarSizeList.ts +0 -80
- package/src/state/selectors/combiners/combineCheckedDomain.ts +0 -48
- package/src/state/selectors/combiners/combineConfiguredScale.ts +0 -111
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +0 -45
- package/src/state/selectors/combiners/combineDisplayedStackedData.ts +0 -50
- package/src/state/selectors/combiners/combineInverseScaleFunction.ts +0 -16
- package/src/state/selectors/combiners/combineRealScaleType.ts +0 -44
- package/src/state/selectors/combiners/combineStackedData.ts +0 -27
- package/src/state/selectors/combiners/combineTooltipInteractionState.ts +0 -86
- package/src/state/selectors/combiners/combineTooltipPayload.ts +0 -205
- package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +0 -58
- package/src/state/selectors/containerSelectors.ts +0 -12
- package/src/state/selectors/dataSelectors.ts +0 -88
- package/src/state/selectors/funnelSelectors.ts +0 -75
- package/src/state/selectors/graphicalItemSelectors.ts +0 -30
- package/src/state/selectors/legendSelectors.ts +0 -29
- package/src/state/selectors/lineSelectors.ts +0 -134
- package/src/state/selectors/numberDomainEqualityCheck.ts +0 -14
- package/src/state/selectors/pickAxisId.ts +0 -5
- package/src/state/selectors/pickAxisType.ts +0 -3
- package/src/state/selectors/pieSelectors.ts +0 -97
- package/src/state/selectors/polarAxisSelectors.ts +0 -201
- package/src/state/selectors/polarGridSelectors.ts +0 -28
- package/src/state/selectors/polarScaleSelectors.ts +0 -133
- package/src/state/selectors/polarSelectors.ts +0 -219
- package/src/state/selectors/radarSelectors.ts +0 -191
- package/src/state/selectors/radialBarSelectors.ts +0 -435
- package/src/state/selectors/rootPropsSelectors.ts +0 -25
- package/src/state/selectors/scatterSelectors.ts +0 -96
- package/src/state/selectors/selectActivePropsFromChartPointer.ts +0 -26
- package/src/state/selectors/selectAllAxes.ts +0 -17
- package/src/state/selectors/selectChartOffset.ts +0 -16
- package/src/state/selectors/selectChartOffsetInternal.ts +0 -136
- package/src/state/selectors/selectLegendArea.ts +0 -20
- package/src/state/selectors/selectPlotArea.ts +0 -22
- package/src/state/selectors/selectTooltipAxisId.ts +0 -7
- package/src/state/selectors/selectTooltipAxisType.ts +0 -32
- package/src/state/selectors/selectTooltipEventType.ts +0 -48
- package/src/state/selectors/selectTooltipPayloadSearcher.ts +0 -6
- package/src/state/selectors/selectTooltipSettings.ts +0 -39
- package/src/state/selectors/selectTooltipState.ts +0 -8
- package/src/state/selectors/selectors.ts +0 -271
- package/src/state/selectors/tooltipSelectors.ts +0 -578
- package/src/state/selectors/touchSelectors.ts +0 -31
- package/src/state/store.ts +0 -29
- package/src/state/storeIdentity.ts +0 -9
- package/src/state/teardownWrite.ts +0 -10
- package/src/state/tooltipInteraction.ts +0 -23
- package/src/state/tooltipSlice.ts +0 -334
- package/src/state/touchEventsMiddleware.ts +0 -214
- package/src/state/types/AnimationSettings.ts +0 -20
- package/src/state/types/AreaSettings.ts +0 -14
- package/src/state/types/BarSettings.ts +0 -15
- package/src/state/types/LineSettings.ts +0 -9
- package/src/state/types/PieSettings.ts +0 -34
- package/src/state/types/RadarSettings.ts +0 -5
- package/src/state/types/RadialBarSettings.ts +0 -10
- package/src/state/types/ScatterSettings.ts +0 -12
- package/src/state/types/StackedGraphicalItem.ts +0 -34
- package/src/state/useChartState.ts +0 -17
- package/src/state/zIndexSlice.ts +0 -39
- package/src/synchronisation/syncSelectors.ts +0 -7
- package/src/synchronisation/types.ts +0 -44
- package/src/synchronisation/useChartSynchronisation.tsx +0 -404
- package/src/theme/RechartsTheme.ts +0 -16
- package/src/theme/RechartsThemeContext.ts +0 -19
- package/src/theme/darkTheme.ts +0 -13
- package/src/theme/graphicalItemIdentity.ts +0 -70
- package/src/theme/legacyTheme.ts +0 -17
- package/src/theme/lightTheme.ts +0 -13
- package/src/types.ts +0 -54
- package/src/util/ActiveShapeUtils.tsx +0 -162
- package/src/util/BarUtils.tsx +0 -62
- package/src/util/BarePortal.tsx +0 -50
- package/src/util/CamelCaseSVGAttrs.ts +0 -34
- package/src/util/CartesianUtils.ts +0 -48
- package/src/util/ChartUtils.ts +0 -802
- package/src/util/Constants.ts +0 -42
- package/src/util/CssPrefixUtils.ts +0 -20
- package/src/util/DOMUtils.ts +0 -129
- package/src/util/DataUtils.ts +0 -216
- package/src/util/Events.ts +0 -16
- package/src/util/FunnelUtils.tsx +0 -15
- package/src/util/Global.ts +0 -12
- package/src/util/IfOverflow.ts +0 -15
- package/src/util/LRUCache.ts +0 -41
- package/src/util/LogUtils.ts +0 -22
- package/src/util/PolarUtils.ts +0 -132
- package/src/util/RadialBarUtils.tsx +0 -24
- package/src/util/ReactUtils.ts +0 -95
- package/src/util/ReduceCSSCalc.ts +0 -187
- package/src/util/ScatterUtils.tsx +0 -52
- package/src/util/ShapeElementProps.tsx +0 -87
- package/src/util/TickUtils.ts +0 -60
- package/src/util/XAxisUtils.ts +0 -48
- package/src/util/YAxisUtils.ts +0 -48
- package/src/util/axisPropsAreEqual.ts +0 -48
- package/src/util/createCartesianCharts.tsx +0 -150
- package/src/util/createEventProxy.ts +0 -20
- package/src/util/createPolarCharts.tsx +0 -112
- package/src/util/cursor/getCursorPoints.ts +0 -46
- package/src/util/cursor/getCursorRectangle.ts +0 -28
- package/src/util/cursor/getRadialCursorPoints.ts +0 -32
- package/src/util/excludeEventProps.ts +0 -171
- package/src/util/getActiveCoordinate.ts +0 -213
- package/src/util/getAxisTypeBasedOnLayout.ts +0 -21
- package/src/util/getClassNameFromUnknown.ts +0 -6
- package/src/util/getEveryNth.ts +0 -27
- package/src/util/getRadiusAndStrokeWidthFromDot.ts +0 -35
- package/src/util/getRelativeCoordinate.ts +0 -80
- package/src/util/getSliced.ts +0 -13
- package/src/util/hoverDedupe.ts +0 -41
- package/src/util/isDomainSpecifiedByUser.ts +0 -219
- package/src/util/isWellBehavedNumber.ts +0 -7
- package/src/util/pathTotalLength.ts +0 -25
- package/src/util/payload/getUniqPayload.ts +0 -28
- package/src/util/propsAreEqual.ts +0 -121
- package/src/util/resolveDefaultProps.ts +0 -161
- package/src/util/round.ts +0 -32
- package/src/util/scale/CartesianScaleHelper.ts +0 -72
- package/src/util/scale/CustomScaleDefinition.ts +0 -81
- package/src/util/scale/RechartsScale.ts +0 -130
- package/src/util/scale/createCategoricalInverse.ts +0 -72
- package/src/util/scale/getNiceTickValues.ts +0 -311
- package/src/util/scale/index.ts +0 -2
- package/src/util/scale/util/arithmetic.ts +0 -54
- package/src/util/solid-1-compat.ts +0 -310
- package/src/util/solidJsxCamelAugment.d.ts +0 -84
- package/src/util/stacks/getStackSeriesIdentifier.ts +0 -21
- package/src/util/stacks/stackTypes.ts +0 -60
- package/src/util/structurallyEqual.ts +0 -31
- package/src/util/svgPropertiesAndEvents.ts +0 -53
- package/src/util/svgPropertiesNoEvents.ts +0 -571
- package/src/util/tooltip/translate.ts +0 -171
- package/src/util/typedDataKey.ts +0 -48
- package/src/util/types.ts +0 -1560
- package/src/util/useAnimationId.ts +0 -31
- package/src/util/useElementOffset.ts +0 -110
- package/src/util/useId.ts +0 -8
- package/src/util/usePrefersReducedMotion.ts +0 -48
- package/src/util/useReportScale.ts +0 -24
- package/src/util/useUniqueId.ts +0 -30
- package/src/zIndex/DefaultZIndexes.ts +0 -84
- package/src/zIndex/ZIndexLayer.tsx +0 -121
- package/src/zIndex/ZIndexPortal.tsx +0 -79
- package/src/zIndex/getZIndexFromUnknown.ts +0 -14
- 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
|
-
}
|