@octanejs/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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +53 -0
  3. package/src/animation/AnimatedItems.tsrx +82 -0
  4. package/src/animation/AnimationControllerImpl.js +33 -0
  5. package/src/animation/AnimationHandle.js +291 -0
  6. package/src/animation/JavascriptAnimate.tsrx +81 -0
  7. package/src/animation/easing.js +193 -0
  8. package/src/animation/matchBy.js +279 -0
  9. package/src/animation/timeoutController.js +49 -0
  10. package/src/animation/useAnimationController.ts +22 -0
  11. package/src/animation/useAnimationStartSnapshot.ts +43 -0
  12. package/src/animation/util.js +11 -0
  13. package/src/cartesian/Bar.ts +4 -0
  14. package/src/cartesian/Bar.tsrx +716 -0
  15. package/src/cartesian/Bar.tsrx.d.ts +4 -0
  16. package/src/cartesian/BarStack.tsrx +97 -0
  17. package/src/cartesian/BarStack.tsrx.d.ts +6 -0
  18. package/src/cartesian/CartesianAxis.tsrx +413 -0
  19. package/src/cartesian/CartesianAxis.tsrx.d.ts +3 -0
  20. package/src/cartesian/GraphicalItemClipPath.tsrx +44 -0
  21. package/src/cartesian/Line.ts +4 -0
  22. package/src/cartesian/Line.tsrx +544 -0
  23. package/src/cartesian/Line.tsrx.d.ts +4 -0
  24. package/src/cartesian/LineDrawShape.tsrx +106 -0
  25. package/src/cartesian/LineDrawShape.tsrx.d.ts +2 -0
  26. package/src/cartesian/XAxis.tsrx +156 -0
  27. package/src/cartesian/XAxis.tsrx.d.ts +3 -0
  28. package/src/cartesian/YAxis.tsrx +183 -0
  29. package/src/cartesian/YAxis.tsrx.d.ts +3 -0
  30. package/src/cartesian/getCartesianPosition.js +277 -0
  31. package/src/cartesian/getEquidistantTicks.js +133 -0
  32. package/src/cartesian/getTicks.js +280 -0
  33. package/src/cartesian/useAnimatedLineLength.ts +33 -0
  34. package/src/chart/BarChart.tsrx +22 -0
  35. package/src/chart/BarChart.tsrx.d.ts +2 -0
  36. package/src/chart/CartesianChart.tsrx +76 -0
  37. package/src/chart/CartesianChart.tsrx.d.ts +10 -0
  38. package/src/chart/CategoricalChart.tsrx +54 -0
  39. package/src/chart/LineChart.tsrx +22 -0
  40. package/src/chart/LineChart.tsrx.d.ts +2 -0
  41. package/src/chart/RechartsWrapper.tsrx +294 -0
  42. package/src/component/ActivePoints.tsrx +76 -0
  43. package/src/component/Cell.ts +37 -0
  44. package/src/component/Dots.tsrx +74 -0
  45. package/src/component/Label.tsrx +309 -0
  46. package/src/component/Label.tsrx.d.ts +12 -0
  47. package/src/component/LabelList.tsrx +83 -0
  48. package/src/component/LabelList.tsrx.d.ts +8 -0
  49. package/src/component/ResponsiveContainer.ts +22 -0
  50. package/src/component/Text.tsrx +281 -0
  51. package/src/component/Text.tsrx.d.ts +9 -0
  52. package/src/component/responsiveContainerUtils.js +111 -0
  53. package/src/container/ClipPathProvider.tsrx +29 -0
  54. package/src/container/Layer.tsrx +9 -0
  55. package/src/container/Layer.tsrx.d.ts +6 -0
  56. package/src/container/RootSurface.tsrx +76 -0
  57. package/src/container/Surface.tsrx +23 -0
  58. package/src/container/Surface.tsrx.d.ts +12 -0
  59. package/src/context/CellsContext.ts +80 -0
  60. package/src/context/ErrorBarContext.tsrx +53 -0
  61. package/src/context/PanoramaContext.ts +10 -0
  62. package/src/context/RegisterGraphicalItemId.tsrx +19 -0
  63. package/src/context/accessibilityContext.js +10 -0
  64. package/src/context/chartDataContext.ts +57 -0
  65. package/src/context/chartLayoutContext.ts +171 -0
  66. package/src/context/legendPortalContext.ts +5 -0
  67. package/src/context/tooltipContext.js +55 -0
  68. package/src/context/tooltipPortalContext.ts +5 -0
  69. package/src/hooks.js +509 -0
  70. package/src/index.ts +64 -0
  71. package/src/internal.ts +37 -0
  72. package/src/polar/defaultPolarAngleAxisProps.js +27 -0
  73. package/src/polar/defaultPolarRadiusAxisProps.js +24 -0
  74. package/src/shape/Cross.tsrx +25 -0
  75. package/src/shape/Cross.tsrx.d.ts +12 -0
  76. package/src/shape/Curve.tsrx +132 -0
  77. package/src/shape/Curve.tsrx.d.ts +42 -0
  78. package/src/shape/Dot.tsrx +21 -0
  79. package/src/shape/Dot.tsrx.d.ts +9 -0
  80. package/src/shape/Polygon.tsrx +95 -0
  81. package/src/shape/Polygon.tsrx.d.ts +13 -0
  82. package/src/shape/Rectangle.tsrx +162 -0
  83. package/src/shape/Rectangle.tsrx.d.ts +31 -0
  84. package/src/shape/Sector.tsrx +219 -0
  85. package/src/shape/Sector.tsrx.d.ts +29 -0
  86. package/src/shape/Symbols.tsrx +95 -0
  87. package/src/shape/Symbols.tsrx.d.ts +15 -0
  88. package/src/shape/Trapezoid.tsrx +56 -0
  89. package/src/shape/Trapezoid.tsrx.d.ts +29 -0
  90. package/src/state/RechartsReduxContext.ts +7 -0
  91. package/src/state/RechartsStoreProvider.tsrx +24 -0
  92. package/src/state/ReportChartProps.ts +13 -0
  93. package/src/state/ReportEventSettings.ts +15 -0
  94. package/src/state/ReportMainChartProps.ts +22 -0
  95. package/src/state/SetGraphicalItem.ts +61 -0
  96. package/src/state/SetLegendPayload.ts +61 -0
  97. package/src/state/SetTooltipEntrySettings.ts +40 -0
  98. package/src/state/brushSlice.js +36 -0
  99. package/src/state/cartesianAxisSlice.js +256 -0
  100. package/src/state/chartDataSlice.js +67 -0
  101. package/src/state/errorBarSlice.js +53 -0
  102. package/src/state/eventSettingsSlice.js +25 -0
  103. package/src/state/externalEventsMiddleware.js +127 -0
  104. package/src/state/graphicalItemsSlice.js +91 -0
  105. package/src/state/hooks.ts +46 -0
  106. package/src/state/keyboardEventsMiddleware.js +226 -0
  107. package/src/state/layoutSlice.js +57 -0
  108. package/src/state/legendSlice.js +83 -0
  109. package/src/state/mouseEventsMiddleware.js +130 -0
  110. package/src/state/optionsSlice.js +45 -0
  111. package/src/state/polarAxisSlice.js +33 -0
  112. package/src/state/polarOptionsSlice.js +26 -0
  113. package/src/state/reduxDevtoolsJsonStringifyReplacer.js +14 -0
  114. package/src/state/referenceElementsSlice.js +51 -0
  115. package/src/state/renderedTicksSlice.js +41 -0
  116. package/src/state/rootPropsSlice.js +48 -0
  117. package/src/state/selectors/arrayEqualityCheck.js +32 -0
  118. package/src/state/selectors/axisSelectors.js +2113 -0
  119. package/src/state/selectors/barSelectors.js +263 -0
  120. package/src/state/selectors/barStackSelectors.js +65 -0
  121. package/src/state/selectors/brushSelectors.js +21 -0
  122. package/src/state/selectors/combiners/combineActiveLabel.js +18 -0
  123. package/src/state/selectors/combiners/combineActiveTooltipIndex.js +75 -0
  124. package/src/state/selectors/combiners/combineAllBarPositions.js +169 -0
  125. package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +11 -0
  126. package/src/state/selectors/combiners/combineBarPosition.js +17 -0
  127. package/src/state/selectors/combiners/combineBarSizeList.js +115 -0
  128. package/src/state/selectors/combiners/combineCheckedDomain.js +44 -0
  129. package/src/state/selectors/combiners/combineConfiguredScale.js +46 -0
  130. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +48 -0
  131. package/src/state/selectors/combiners/combineDisplayedStackedData.js +54 -0
  132. package/src/state/selectors/combiners/combineInverseScaleFunction.js +12 -0
  133. package/src/state/selectors/combiners/combineRealScaleType.js +36 -0
  134. package/src/state/selectors/combiners/combineStackedData.js +22 -0
  135. package/src/state/selectors/combiners/combineTooltipInteractionState.js +121 -0
  136. package/src/state/selectors/combiners/combineTooltipPayload.js +248 -0
  137. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.js +59 -0
  138. package/src/state/selectors/containerSelectors.js +6 -0
  139. package/src/state/selectors/dataSelectors.js +97 -0
  140. package/src/state/selectors/graphicalItemSelectors.js +25 -0
  141. package/src/state/selectors/legendSelectors.js +18 -0
  142. package/src/state/selectors/lineSelectors.js +106 -0
  143. package/src/state/selectors/numberDomainEqualityCheck.js +11 -0
  144. package/src/state/selectors/pickAxisId.js +3 -0
  145. package/src/state/selectors/pickAxisType.js +3 -0
  146. package/src/state/selectors/polarAxisSelectors.js +237 -0
  147. package/src/state/selectors/rootPropsSelectors.js +13 -0
  148. package/src/state/selectors/selectActivePropsFromChartPointer.js +23 -0
  149. package/src/state/selectors/selectAllAxes.js +15 -0
  150. package/src/state/selectors/selectChartOffset.js +12 -0
  151. package/src/state/selectors/selectChartOffsetInternal.js +174 -0
  152. package/src/state/selectors/selectPlotArea.js +19 -0
  153. package/src/state/selectors/selectTooltipAxisId.js +3 -0
  154. package/src/state/selectors/selectTooltipAxisType.js +25 -0
  155. package/src/state/selectors/selectTooltipEventType.js +27 -0
  156. package/src/state/selectors/selectTooltipPayloadSearcher.js +3 -0
  157. package/src/state/selectors/selectTooltipSettings.js +3 -0
  158. package/src/state/selectors/selectTooltipState.js +3 -0
  159. package/src/state/selectors/selectors.js +222 -0
  160. package/src/state/selectors/tooltipSelectors.js +471 -0
  161. package/src/state/selectors/touchSelectors.js +31 -0
  162. package/src/state/store.js +101 -0
  163. package/src/state/tooltipSlice.js +237 -0
  164. package/src/state/touchEventsMiddleware.js +140 -0
  165. package/src/state/types/StackedGraphicalItem.js +18 -0
  166. package/src/state/zIndexSlice.js +167 -0
  167. package/src/synchronisation/syncSelectors.js +5 -0
  168. package/src/synchronisation/useChartSynchronisation.tsrx +285 -0
  169. package/src/util/ActiveShapeUtils.tsrx +62 -0
  170. package/src/util/BarUtils.tsrx +35 -0
  171. package/src/util/CartesianUtils.js +66 -0
  172. package/src/util/ChartUtils.js +630 -0
  173. package/src/util/Constants.js +42 -0
  174. package/src/util/DOMUtils.js +180 -0
  175. package/src/util/DataUtils.js +199 -0
  176. package/src/util/Events.js +7 -0
  177. package/src/util/Global.js +13 -0
  178. package/src/util/LRUCache.js +58 -0
  179. package/src/util/LogUtils.js +29 -0
  180. package/src/util/PolarUtils.js +190 -0
  181. package/src/util/ReactUtils.ts +94 -0
  182. package/src/util/ReduceCSSCalc.js +260 -0
  183. package/src/util/TickUtils.js +43 -0
  184. package/src/util/YAxisUtils.js +43 -0
  185. package/src/util/axisPropsAreEqual.js +63 -0
  186. package/src/util/createEventProxy.js +18 -0
  187. package/src/util/excludeEventProps.js +172 -0
  188. package/src/util/getActiveCoordinate.js +253 -0
  189. package/src/util/getAxisTypeBasedOnLayout.js +17 -0
  190. package/src/util/getClassNameFromUnknown.js +8 -0
  191. package/src/util/getEveryNth.js +29 -0
  192. package/src/util/getRadiusAndStrokeWidthFromDot.js +28 -0
  193. package/src/util/getRelativeCoordinate.js +96 -0
  194. package/src/util/getSliced.js +11 -0
  195. package/src/util/isDomainSpecifiedByUser.js +255 -0
  196. package/src/util/isWellBehavedNumber.js +8 -0
  197. package/src/util/propsAreEqual.js +96 -0
  198. package/src/util/resolveDefaultProps.js +131 -0
  199. package/src/util/round.js +39 -0
  200. package/src/util/scale/RechartsScale.js +68 -0
  201. package/src/util/scale/createCategoricalInverse.js +77 -0
  202. package/src/util/scale/getNiceTickValues.js +354 -0
  203. package/src/util/scale/index.js +3 -0
  204. package/src/util/scale/util/arithmetic.js +51 -0
  205. package/src/util/stacks/getStackSeriesIdentifier.js +10 -0
  206. package/src/util/svgPropertiesAndEvents.ts +29 -0
  207. package/src/util/svgPropertiesNoEvents.js +383 -0
  208. package/src/util/types.ts +59 -0
  209. package/src/util/useAnimationId.ts +14 -0
  210. package/src/util/useId.ts +13 -0
  211. package/src/util/usePrefersReducedMotion.ts +30 -0
  212. package/src/util/useReportScale.ts +26 -0
  213. package/src/util/useUniqueId.js +34 -0
  214. package/src/zIndex/DefaultZIndexes.js +75 -0
  215. package/src/zIndex/ZIndexLayer.tsrx +80 -0
  216. package/src/zIndex/ZIndexLayer.tsrx.d.ts +2 -0
  217. package/src/zIndex/ZIndexPortal.tsrx +43 -0
  218. package/src/zIndex/getZIndexFromUnknown.js +15 -0
  219. package/src/zIndex/zIndexSelectors.js +45 -0
@@ -0,0 +1,80 @@
1
+ // Port of zIndex/ZIndexLayer.tsx — renders children into the redux-registered
2
+ // <g> for the given zIndex via an octane portal (SVG has no CSS z-index).
3
+ // Registration is deferred-cleanup: while a zIndex changes, the old portal
4
+ // element stays alive until the new one is ready, avoiding a flash.
5
+ import { createPortal, useLayoutEffect, useRef } from 'octane';
6
+ import { useAppDispatch, useAppSelector } from '../state/hooks';
7
+ import { selectZIndexPortalElement } from './zIndexSelectors';
8
+ import { registerZIndexPortal, unregisterZIndexPortal } from '../state/zIndexSlice';
9
+ import { useIsInChartContext } from '../context/chartLayoutContext.ts';
10
+ import { useIsPanorama } from '../context/PanoramaContext.ts';
11
+
12
+ /** @since 3.4 */
13
+ export function ZIndexLayer(props) {
14
+ const { zIndex, children } = props;
15
+ // Outside a chart there is no zIndex portal state — render normally.
16
+ const isInChartContext = useIsInChartContext();
17
+ // zIndex undefined or 0 renders normally (0 is the default layer).
18
+ const shouldRenderInPortal = isInChartContext && zIndex !== undefined && zIndex !== 0;
19
+ const isPanorama = useIsPanorama();
20
+
21
+ // Deferred-cleanup bookkeeping: every registered zIndex, plus the last valid
22
+ // portal node to keep rendering into during a zIndex transition.
23
+ const lastPortalElementRef = useRef(undefined);
24
+ const registeredZIndexesRef = useRef(new Set());
25
+ const dispatch = useAppDispatch();
26
+ const portalElement = useAppSelector(
27
+ (state) => selectZIndexPortalElement(state, zIndex, isPanorama),
28
+ );
29
+
30
+ useLayoutEffect(() => {
31
+ if (!shouldRenderInPortal) {
32
+ // Portal rendering was disabled — clean up any stale registrations.
33
+ const registered = registeredZIndexesRef.current;
34
+ registered.forEach((z) => {
35
+ dispatch(unregisterZIndexPortal({ zIndex: z }));
36
+ });
37
+ registered.clear();
38
+ lastPortalElementRef.current = undefined;
39
+ return;
40
+ }
41
+ // Register the current zIndex (idempotent — skips if already registered).
42
+ if (!registeredZIndexesRef.current.has(zIndex)) {
43
+ dispatch(registerZIndexPortal({ zIndex }));
44
+ registeredZIndexesRef.current.add(zIndex);
45
+ }
46
+ // When the new portal element is ready, retire old zIndex registrations.
47
+ if (portalElement) {
48
+ lastPortalElementRef.current = portalElement;
49
+ const registered = registeredZIndexesRef.current;
50
+ registered.forEach((z) => {
51
+ if (z !== zIndex) {
52
+ dispatch(unregisterZIndexPortal({ zIndex: z }));
53
+ registered.delete(z);
54
+ }
55
+ });
56
+ }
57
+ }, [dispatch, zIndex, shouldRenderInPortal, portalElement]);
58
+
59
+ // Unmount-only cleanup — unregister everything when the component is removed.
60
+ useLayoutEffect(() => {
61
+ const registered = registeredZIndexesRef.current;
62
+ return () => {
63
+ registered.forEach((z) => {
64
+ dispatch(unregisterZIndexPortal({ zIndex: z }));
65
+ });
66
+ registered.clear();
67
+ };
68
+ }, [dispatch]);
69
+
70
+ if (!shouldRenderInPortal) {
71
+ return children;
72
+ }
73
+ // Prefer the current portal; fall back to the cached one during transitions.
74
+ const targetElement = portalElement ?? lastPortalElementRef.current;
75
+ if (!targetElement) {
76
+ // Very first render — no portal has ever been registered yet.
77
+ return null;
78
+ }
79
+ return createPortal(children, targetElement);
80
+ }
@@ -0,0 +1,2 @@
1
+ // Type declaration for the .tsrx component (resolved by relative path).
2
+ export declare function ZIndexLayer(props: { zIndex?: number; children?: unknown }): unknown;
@@ -0,0 +1,43 @@
1
+ // Port of zIndex/ZIndexPortal.tsx — SVG cannot use CSS z-index, so recharts
2
+ // renders one <g> per registered zIndex (negatives before the default layer,
3
+ // positives after) and ZIndexLayer portals content into them.
4
+ import { useLayoutEffect, useRef } from 'octane';
5
+ import { useAppDispatch, useAppSelector } from '../state/hooks';
6
+ import { registerZIndexPortalElement, unregisterZIndexPortalElement } from '../state/zIndexSlice';
7
+ import { selectAllRegisteredZIndexes } from './zIndexSelectors';
8
+
9
+ function ZIndexSvgPortal(props) {
10
+ const { zIndex, isPanorama } = props;
11
+ const ref = useRef(null);
12
+ const dispatch = useAppDispatch();
13
+ useLayoutEffect(() => {
14
+ if (ref.current) {
15
+ dispatch(registerZIndexPortalElement({ zIndex, element: ref.current, isPanorama }));
16
+ }
17
+ return () => {
18
+ dispatch(unregisterZIndexPortalElement({ zIndex, isPanorama }));
19
+ };
20
+ }, [dispatch, zIndex, isPanorama]);
21
+ // these g elements should not be tabbable
22
+ return <g tabIndex={-1} ref={ref} className={'recharts-zIndex-layer_' + zIndex}></g>;
23
+ }
24
+
25
+ export function AllZIndexPortals(props) @{
26
+ const { children, isPanorama } = props;
27
+ const allRegisteredZIndexes = useAppSelector(selectAllRegisteredZIndexes);
28
+ if (!allRegisteredZIndexes || allRegisteredZIndexes.length === 0) {
29
+ return children;
30
+ }
31
+ const allNegativeZIndexes = allRegisteredZIndexes.filter((zIndex) => zIndex < 0);
32
+ // We exclude zero on purpose - that is the default layer, and it doesn't need a portal.
33
+ const allPositiveZIndexes = allRegisteredZIndexes.filter((zIndex) => zIndex > 0);
34
+ <>
35
+ @for (const zIndex of allNegativeZIndexes; key zIndex) {
36
+ <ZIndexSvgPortal zIndex={zIndex} isPanorama={isPanorama} />
37
+ }
38
+ {children}
39
+ @for (const zIndex of allPositiveZIndexes; key zIndex) {
40
+ <ZIndexSvgPortal zIndex={zIndex} isPanorama={isPanorama} />
41
+ }
42
+ </>
43
+ }
@@ -0,0 +1,15 @@
1
+ // Vendored verbatim from recharts@3.9.2 es6/zIndex/getZIndexFromUnknown.js (framework-agnostic).
2
+ // Do not edit — update by re-vendoring when the recharts devDependency moves.
3
+ import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
4
+ export function getZIndexFromUnknown(input, defaultZIndex) {
5
+ if (
6
+ input &&
7
+ typeof input === 'object' &&
8
+ 'zIndex' in input &&
9
+ typeof input.zIndex === 'number' &&
10
+ isWellBehavedNumber(input.zIndex)
11
+ ) {
12
+ return input.zIndex;
13
+ }
14
+ return defaultZIndex;
15
+ }
@@ -0,0 +1,45 @@
1
+ // Vendored verbatim from recharts@3.9.2 es6/zIndex/zIndexSelectors.js (framework-agnostic).
2
+ // Do not edit — update by re-vendoring when the recharts devDependency moves.
3
+ import { createSelector } from 'reselect';
4
+ import { arrayContentsAreEqualCheck } from '../state/selectors/arrayEqualityCheck';
5
+ import { DefaultZIndexes } from './DefaultZIndexes';
6
+
7
+ /**
8
+ * Given a zIndex, returns the corresponding portal element reference.
9
+ * If no zIndex is provided or if the zIndex is not registered, returns undefined.
10
+ *
11
+ * It also returns undefined in case the z-index portal has not been rendered yet.
12
+ */
13
+ export var selectZIndexPortalElement = createSelector(
14
+ (state) => state.zIndex.zIndexMap,
15
+ (_, zIndex) => zIndex,
16
+ (_, _zIndex, isPanorama) => isPanorama,
17
+ (zIndexMap, zIndex, isPanorama) => {
18
+ if (zIndex == null) {
19
+ return undefined;
20
+ }
21
+ var entry = zIndexMap[zIndex];
22
+ if (entry == null) {
23
+ return undefined;
24
+ }
25
+ if (isPanorama) {
26
+ return entry.panoramaElement;
27
+ }
28
+ return entry.element;
29
+ },
30
+ );
31
+ export var selectAllRegisteredZIndexes = createSelector(
32
+ (state) => state.zIndex.zIndexMap,
33
+ (zIndexMap) => {
34
+ var allNumbers = Object.keys(zIndexMap)
35
+ .map((zIndexStr) => parseInt(zIndexStr, 10))
36
+ .concat(Object.values(DefaultZIndexes));
37
+ var uniqueNumbers = Array.from(new Set(allNumbers));
38
+ return uniqueNumbers.sort((a, b) => a - b);
39
+ },
40
+ {
41
+ memoizeOptions: {
42
+ resultEqualityCheck: arrayContentsAreEqualCheck,
43
+ },
44
+ },
45
+ );