@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,86 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import {
3
- noInteraction,
4
- TooltipIndex,
5
- TooltipInteractionState,
6
- TooltipState,
7
- } from "../../tooltipSlice"
8
- import { TooltipEventType } from "../../../util/types"
9
- import { TooltipTrigger } from "../../../chart/types"
10
-
11
- function chooseAppropriateMouseInteraction(
12
- tooltipState: TooltipState,
13
- tooltipEventType: TooltipEventType,
14
- trigger: TooltipTrigger,
15
- ): TooltipInteractionState | undefined {
16
- if (tooltipEventType === "axis") {
17
- if (trigger === "click") {
18
- return tooltipState.axisInteraction.click
19
- }
20
- return tooltipState.axisInteraction.hover
21
- }
22
- if (trigger === "click") {
23
- return tooltipState.itemInteraction.click
24
- }
25
- return tooltipState.itemInteraction.hover
26
- }
27
-
28
- function hasBeenActivePreviously(tooltipInteractionState: TooltipInteractionState): boolean {
29
- return tooltipInteractionState.index != null
30
- }
31
-
32
- export const combineTooltipInteractionState = (
33
- tooltipState: TooltipState,
34
- tooltipEventType: TooltipEventType | undefined,
35
- trigger: TooltipTrigger,
36
- defaultIndex: TooltipIndex | undefined,
37
- ): TooltipInteractionState => {
38
- if (tooltipEventType == null) {
39
- return noInteraction
40
- }
41
- const appropriateMouseInteraction = chooseAppropriateMouseInteraction(
42
- tooltipState,
43
- tooltipEventType,
44
- trigger,
45
- )
46
-
47
- if (appropriateMouseInteraction == null) {
48
- return noInteraction
49
- }
50
-
51
- if (appropriateMouseInteraction.active) {
52
- return appropriateMouseInteraction
53
- }
54
-
55
- if (tooltipState.keyboardInteraction.active) {
56
- return tooltipState.keyboardInteraction
57
- }
58
-
59
- if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
60
- return tooltipState.syncInteraction
61
- }
62
-
63
- const activeFromProps = tooltipState.settings.active === true
64
-
65
- if (hasBeenActivePreviously(appropriateMouseInteraction)) {
66
- if (activeFromProps) {
67
- return {
68
- ...appropriateMouseInteraction,
69
- active: true,
70
- }
71
- }
72
- } else if (defaultIndex != null) {
73
- return {
74
- active: true,
75
- coordinate: undefined,
76
- dataKey: undefined,
77
- graphicalItemId: undefined,
78
- index: defaultIndex,
79
- }
80
- }
81
-
82
- return {
83
- ...noInteraction,
84
- coordinate: appropriateMouseInteraction.coordinate,
85
- }
86
- }
@@ -1,205 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import {
3
- TooltipEntrySettings,
4
- TooltipIndex,
5
- TooltipPayload,
6
- TooltipPayloadConfiguration,
7
- TooltipPayloadEntry,
8
- TooltipPayloadSearcher,
9
- } from "../../tooltipSlice"
10
- import { ChartData, ChartDataState } from "../../chartDataSlice"
11
- import { DataKey, TooltipEventType } from "../../../util/types"
12
- import { findEntryInArray } from "../../../util/DataUtils"
13
- import { getTooltipEntry, getValueByDataKey } from "../../../util/ChartUtils"
14
- import { getSliced } from "../../../util/getSliced"
15
- import { ActiveLabel } from "../../../synchronisation/types"
16
-
17
- type TooltipPayloadItemLike = {
18
- name: TooltipEntrySettings["name"]
19
- unit: TooltipEntrySettings["unit"]
20
- dataKey: DataKey<unknown> | undefined
21
- payload: unknown
22
- color: string | undefined
23
- fill: string | undefined
24
- }
25
-
26
- function parseName(value: unknown): TooltipEntrySettings["name"] {
27
- if (typeof value === "string" || typeof value === "number") {
28
- return value
29
- }
30
- return undefined
31
- }
32
-
33
- function parseUnit(value: unknown): TooltipEntrySettings["unit"] {
34
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
35
- return value
36
- }
37
- return undefined
38
- }
39
-
40
- function parseDataKey(value: unknown): DataKey<unknown> | undefined {
41
- if (typeof value === "string" || typeof value === "number") {
42
- return value
43
- }
44
- if (typeof value === "function") {
45
- return (obj: unknown) => value(obj)
46
- }
47
- return undefined
48
- }
49
-
50
- function parseColor(value: unknown): string | undefined {
51
- if (typeof value === "string") {
52
- return value
53
- }
54
- return undefined
55
- }
56
-
57
- function parseTooltipPayloadItem(item: unknown): TooltipPayloadItemLike | undefined {
58
- if (item == null || typeof item !== "object") {
59
- return undefined
60
- }
61
-
62
- const name = "name" in item ? parseName(item.name) : undefined
63
- const unit = "unit" in item ? parseUnit(item.unit) : undefined
64
- const dataKey = "dataKey" in item ? parseDataKey(item.dataKey) : undefined
65
- const payload = "payload" in item ? item.payload : undefined
66
- const color = "color" in item ? parseColor(item.color) : undefined
67
- const fill = "fill" in item ? parseColor(item.fill) : undefined
68
-
69
- return {
70
- color,
71
- dataKey,
72
- fill,
73
- name,
74
- payload,
75
- unit,
76
- }
77
- }
78
-
79
- function selectFinalData(
80
- dataDefinedOnItem: unknown,
81
- dataDefinedOnChart: ChartData | undefined,
82
- ): unknown {
83
- /*
84
- * If a payload has data specified directly from the graphical item, prefer that.
85
- * Otherwise, fill in data from the chart level, using the same index.
86
- */
87
- if (dataDefinedOnItem != null) {
88
- return dataDefinedOnItem
89
- }
90
- return dataDefinedOnChart
91
- }
92
-
93
- export const combineTooltipPayload = (
94
- tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,
95
- activeIndex: TooltipIndex,
96
- chartDataState: ChartDataState,
97
- tooltipAxisDataKey: DataKey<unknown> | undefined,
98
- activeLabel: ActiveLabel,
99
- tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,
100
- tooltipEventType: TooltipEventType | undefined,
101
- ): TooltipPayload | undefined => {
102
- if (activeIndex == null || tooltipPayloadSearcher == null) {
103
- return undefined
104
- }
105
- const { chartData, computedData, dataStartIndex, dataEndIndex } = chartDataState
106
-
107
- const init: Array<TooltipPayloadEntry> = []
108
-
109
- return tooltipPayloadConfigurations.reduce(
110
- (agg, { dataDefinedOnItem, settings }): Array<TooltipPayloadEntry> => {
111
- const finalData = selectFinalData(dataDefinedOnItem, chartData)
112
-
113
- const sliced = Array.isArray(finalData)
114
- ? getSliced(finalData, dataStartIndex, dataEndIndex)
115
- : finalData
116
-
117
- const finalDataKey: DataKey<unknown> | undefined = settings?.dataKey ?? tooltipAxisDataKey
118
- const finalNameKey: DataKey<unknown> | undefined = settings?.nameKey
119
- let tooltipPayload: unknown
120
- if (
121
- tooltipAxisDataKey &&
122
- Array.isArray(sliced) &&
123
- /*
124
- * findEntryInArray won't work for Scatter because Scatter provides an array of arrays
125
- * as tooltip payloads and findEntryInArray is not prepared to handle that.
126
- * Sad but also ScatterChart only allows 'item' tooltipEventType
127
- * and also this is only a problem if there are multiple Scatters and each has its own data array
128
- * so let's fix that some other time.
129
- */
130
- !Array.isArray(sliced[0]) &&
131
- /*
132
- * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
133
- * because thanks to allowDuplicatedCategory=false, the order of elements in the array
134
- * no longer matches the order of elements in the original data
135
- * and so we need to search by the active dataKey + label rather than by index.
136
- *
137
- * The same happens if multiple graphical items are present in the chart
138
- * and each of them has its own data array. Those arrays get concatenated
139
- * and again the tooltip index no longer matches the original data.
140
- *
141
- * On the other hand the tooltipEventType 'item' should always search by index
142
- * because we get the index from interacting over the individual elements
143
- * which is always accurate, irrespective of the allowDuplicatedCategory setting.
144
- */
145
- tooltipEventType === "axis"
146
- ) {
147
- tooltipPayload = findEntryInArray(sliced, tooltipAxisDataKey, activeLabel)
148
- if (tooltipPayload == null) {
149
- tooltipPayload = tooltipPayloadSearcher(
150
- sliced,
151
- activeIndex,
152
- computedData,
153
- finalNameKey,
154
- )
155
- }
156
- } else {
157
- /*
158
- * This is a problem because it assumes that the index is pointing to the displayed data
159
- * which it isn't because the index is pointing to the tooltip ticks array.
160
- * The above approach (with findEntryInArray) is the correct one, but it only works
161
- * if the axis dataKey is defined explicitly, and if the data is an array of objects.
162
- */
163
- tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey)
164
- }
165
-
166
- if (Array.isArray(tooltipPayload)) {
167
- tooltipPayload.forEach((item) => {
168
- const parsedItem = parseTooltipPayloadItem(item)
169
- const itemName = parsedItem?.name
170
- const itemDataKey = parsedItem?.dataKey
171
- const itemPayload = parsedItem?.payload
172
- const newSettings: TooltipEntrySettings = {
173
- ...settings,
174
- /* Preserve item-level color/fill from graphical items. */
175
- color: parsedItem?.color ?? settings?.color,
176
- fill: parsedItem?.fill ?? settings?.fill,
177
- name: itemName,
178
- unit: parsedItem?.unit,
179
- }
180
- agg.push(
181
- getTooltipEntry({
182
- dataKey: itemDataKey,
183
- name: itemName == null ? undefined : String(itemName),
184
- payload: itemPayload,
185
- tooltipEntrySettings: newSettings,
186
- value: getValueByDataKey(itemPayload, itemDataKey),
187
- }),
188
- )
189
- })
190
- } else {
191
- agg.push(
192
- getTooltipEntry({
193
- dataKey: finalDataKey,
194
- name: getValueByDataKey(tooltipPayload, finalNameKey) ?? settings?.name,
195
- payload: tooltipPayload,
196
- tooltipEntrySettings: settings,
197
- value: getValueByDataKey(tooltipPayload, finalDataKey),
198
- }),
199
- )
200
- }
201
- return agg
202
- },
203
- init,
204
- )
205
- }
@@ -1,58 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from "../../tooltipSlice"
3
- import { TooltipEventType } from "../../../util/types"
4
- import { TooltipTrigger } from "../../../chart/types"
5
- import { GraphicalItemId } from "../../graphicalItemsSlice"
6
-
7
- export const combineTooltipPayloadConfigurations = (
8
- tooltipState: TooltipState,
9
- tooltipEventType: TooltipEventType | undefined,
10
- trigger: TooltipTrigger,
11
- defaultIndex: TooltipIndex | undefined,
12
- ): ReadonlyArray<TooltipPayloadConfiguration> => {
13
- /* if tooltip reacts to axis interaction, then we display all items at the same time. */
14
- if (tooltipEventType === "axis") {
15
- return tooltipState.tooltipItemPayloads
16
- }
17
- /*
18
- * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.
19
- * item means that only the hovered or clicked item will be present in the tooltip.
20
- */
21
- if (tooltipState.tooltipItemPayloads.length === 0) {
22
- /* No point filtering if the payload is empty */
23
- return []
24
- }
25
- let filterByGraphicalItemId: GraphicalItemId | undefined
26
- if (trigger === "hover") {
27
- filterByGraphicalItemId = tooltipState.itemInteraction.hover.graphicalItemId
28
- } else {
29
- filterByGraphicalItemId = tooltipState.itemInteraction.click.graphicalItemId
30
- }
31
- if (tooltipState.syncInteraction.active && filterByGraphicalItemId == null) {
32
- /*
33
- * When a tooltip is synchronised from another chart, the local itemInteraction
34
- * has no graphicalItemId because the user hasn't hovered over this chart.
35
- * In that case we show all tooltip items so the receiving chart can display
36
- * its own data at the synced index — matching the behaviour of axis-type tooltips.
37
- */
38
- return tooltipState.tooltipItemPayloads
39
- }
40
- if (
41
- filterByGraphicalItemId == null &&
42
- (defaultIndex != null || tooltipState.keyboardInteraction.active)
43
- ) {
44
- /*
45
- * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.
46
- * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
47
- * so we should display only one item at a time instead of all.
48
- */
49
- const firstItemPayload = tooltipState.tooltipItemPayloads[0]
50
- if (firstItemPayload != null) {
51
- return [firstItemPayload]
52
- }
53
- return []
54
- }
55
- return tooltipState.tooltipItemPayloads.filter(
56
- (tpc) => tpc.settings?.graphicalItemId === filterByGraphicalItemId,
57
- )
58
- }
@@ -1,12 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import { ChartState } from "../store"
3
- import { Margin } from "../../util/types"
4
-
5
- export const selectChartWidth = (state: ChartState): number => state.layout.width
6
-
7
- export const selectChartHeight = (state: ChartState): number => state.layout.height
8
-
9
- export const selectContainerScale: (state: ChartState) => number = (state) =>
10
- state.layout.scale
11
-
12
- export const selectMargin = (state: ChartState): Margin => state.layout.margin
@@ -1,88 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import { ChartState } from "../store"
3
- import { chartSelector } from "./chartSelector"
4
- import { ChartData, ChartDataState } from "../chartDataSlice"
5
-
6
- /**
7
- * This selector always returns the data with the indexes set by a Brush.
8
- * Trouble is, that might or might not be what you want.
9
- *
10
- * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
11
- * - even if the Brush is active, the panorama inside the Brush should show the full range of data.
12
- *
13
- * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
14
- *
15
- * @param state ChartState
16
- * @returns data defined on the chart root element, such as BarChart or ScatterChart
17
- */
18
- export const selectChartDataWithIndexes = (state: ChartState): ChartDataState =>
19
- state.chartData
20
-
21
- /**
22
- * This selector will always return the full range of data, ignoring the indexes set by a Brush.
23
- * Useful for when you want to render the full range of data, even if a Brush is active.
24
- * For example: in the Brush panorama, in Legend, in Tooltip.
25
- */
26
- export const selectChartDataAndAlwaysIgnoreIndexes = chartSelector(function selectChartDataAndAlwaysIgnoreIndexes(state: ChartState): ChartDataState {
27
- const dataState = selectChartDataWithIndexes(state)
28
- const dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0
29
- return {
30
- chartData: dataState.chartData,
31
- computedData: dataState.computedData,
32
- dataEndIndex,
33
- dataStartIndex: 0,
34
- }
35
- })
36
-
37
- export const selectChartDataWithIndexesIfNotInPanoramaPosition4 = chartSelector((
38
- state: ChartState,
39
- _unused1: unknown,
40
- _unused2: unknown,
41
- isPanorama: boolean,
42
- ): ChartDataState => {
43
- if (isPanorama) {
44
- return selectChartDataAndAlwaysIgnoreIndexes(state)
45
- }
46
- return selectChartDataWithIndexes(state)
47
- })
48
-
49
- /**
50
- * Returns the chart-level data sliced by the Brush indexes (full range in the panorama).
51
- */
52
- export const selectChartDataSliceIfNotInPanorama = chartSelector((
53
- state: ChartState,
54
- _unused1: unknown,
55
- _unused2: unknown,
56
- isPanorama: boolean,
57
- ): ChartData => {
58
- const { chartData, dataStartIndex, dataEndIndex } = selectChartDataWithIndexesIfNotInPanoramaPosition4(
59
- state,
60
- _unused1,
61
- _unused2,
62
- isPanorama,
63
- )
64
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
65
- })
66
-
67
- export const selectChartDataWithIndexesIfNotInPanoramaPosition3 = chartSelector((
68
- state: ChartState,
69
- _unused1: unknown,
70
- isPanorama: boolean,
71
- ): ChartDataState => {
72
- if (isPanorama) {
73
- return selectChartDataAndAlwaysIgnoreIndexes(state)
74
- }
75
- return selectChartDataWithIndexes(state)
76
- })
77
-
78
- /** Chart-level data slice ignoring Brush indexes (polar charts always use the full range). */
79
- export const selectChartDataSliceIgnoringIndexes = chartSelector(function selectChartDataSliceIgnoringIndexes(state: ChartState): ChartData {
80
- const { chartData, dataStartIndex, dataEndIndex } = selectChartDataAndAlwaysIgnoreIndexes(state)
81
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
82
- })
83
-
84
- /** Chart-level data slice honoring Brush indexes (tooltip never renders in the panorama). */
85
- export const selectChartDataSliceWithIndexes = chartSelector(function selectChartDataSliceWithIndexes(state: ChartState): ChartData {
86
- const { chartData, dataStartIndex, dataEndIndex } = selectChartDataWithIndexes(state)
87
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
88
- })
@@ -1,75 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import { computeFunnelTrapezoids, type FunnelTrapezoidItem } from "../../cartesian/Funnel"
3
- import type { ChartData } from "../chartDataSlice"
4
- import type { ChartState } from "../store"
5
- import { selectChartOffsetInternal } from "./selectChartOffsetInternal"
6
- import { selectChartDataAndAlwaysIgnoreIndexes } from "./dataSelectors"
7
- import type { ChartOffsetInternal, DataKey, TooltipType } from "../../util/types"
8
- import { chartSelector } from "./chartSelector"
9
- import type { GraphicalItemId } from "../graphicalItemsSlice"
10
-
11
- export type ResolvedFunnelSettings = {
12
- dataKey: DataKey<unknown>
13
- data: ChartData | undefined
14
- nameKey: DataKey<unknown>
15
- tooltipType?: TooltipType
16
- lastShapeType?: "triangle" | "rectangle"
17
- reversed?: boolean
18
- customWidth?: string | number
19
- cells: ReadonlyArray<Record<string, unknown>>
20
- presentationProps: Record<string, unknown> | null
21
- id: GraphicalItemId
22
- }
23
-
24
- export const selectFunnelTrapezoids = chartSelector(function selectFunnelTrapezoids(state: ChartState, funnelSettings: ResolvedFunnelSettings): ReadonlyArray<FunnelTrapezoidItem> {
25
- const offset: ChartOffsetInternal = selectChartOffsetInternal(state)
26
- const { chartData } = selectChartDataAndAlwaysIgnoreIndexes(state)
27
- const {
28
- data,
29
- dataKey,
30
- nameKey,
31
- tooltipType,
32
- lastShapeType,
33
- reversed,
34
- customWidth,
35
- cells,
36
- presentationProps,
37
- id: graphicalItemId,
38
- } = funnelSettings
39
-
40
- let displayedData: ChartData | undefined
41
- if (data != null && data.length > 0) {
42
- displayedData = data
43
- } else if (chartData != null && chartData.length > 0) {
44
- displayedData = chartData
45
- }
46
-
47
- if (displayedData && displayedData.length) {
48
- displayedData = displayedData.map((entry: unknown, index: number) =>
49
- Object.assign(
50
- { payload: entry },
51
- presentationProps,
52
- entry as Record<string, unknown>,
53
- cells && cells[index] ? cells[index] : undefined,
54
- ),
55
- )
56
- } else if (cells && cells.length) {
57
- displayedData = cells.map((cell: Record<string, unknown>) =>
58
- Object.assign({}, presentationProps, cell),
59
- )
60
- } else {
61
- return []
62
- }
63
-
64
- return computeFunnelTrapezoids({
65
- customWidth,
66
- dataKey,
67
- displayedData,
68
- graphicalItemId,
69
- lastShapeType,
70
- nameKey,
71
- offset,
72
- reversed,
73
- tooltipType,
74
- })
75
- })
@@ -1,30 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import type { ChartState } from "../store"
3
- import type { GraphicalItemId } from "../graphicalItemsSlice"
4
- import { AxisId, defaultAxisId } from "../cartesianAxisSlice"
5
- import type { CartesianItemState } from "../chartState"
6
- import { chartSelector } from "./chartSelector"
7
- import { readChartState } from "../chartState"
8
-
9
- function isCartesianItem(item: { type: string }): item is CartesianItemState {
10
- return (
11
- item.type === "line" ||
12
- item.type === "area" ||
13
- item.type === "bar" ||
14
- item.type === "scatter"
15
- )
16
- }
17
-
18
- export const selectXAxisIdFromGraphicalItemId = chartSelector(function selectXAxisIdFromGraphicalItemId(state: ChartState, id: GraphicalItemId): AxisId {
19
- const graphicalItems = readChartState(state).graphicalItems
20
- const entry = graphicalItems?.[id]
21
- if (entry == null || !isCartesianItem(entry)) return defaultAxisId
22
- return entry.settings.xAxisId ?? defaultAxisId
23
- })
24
-
25
- export const selectYAxisIdFromGraphicalItemId = chartSelector(function selectYAxisIdFromGraphicalItemId(state: ChartState, id: GraphicalItemId): AxisId {
26
- const graphicalItems = readChartState(state).graphicalItems
27
- const entry = graphicalItems?.[id]
28
- if (entry == null || !isCartesianItem(entry)) return defaultAxisId
29
- return entry.settings.yAxisId ?? defaultAxisId
30
- })
@@ -1,29 +0,0 @@
1
- /* eslint-disable import/no-cycle */
2
- import sortBy from "es-toolkit/compat/sortBy"
3
- import type { ChartState } from "../store"
4
- import type { LegendSettings } from "../legendSlice"
5
- import type { LegendPayload } from "../../component/DefaultLegendContent"
6
- import type { Size } from "../../util/types"
7
- import { chartSelector } from "./chartSelector"
8
- import { readChartState } from "../chartState"
9
-
10
- export const selectLegendSettings = (state: ChartState): LegendSettings => {
11
- return readChartState(state).legend.settings
12
- }
13
-
14
- export const selectLegendSize = (state: ChartState): Size => {
15
- return readChartState(state).legend.size
16
- }
17
-
18
- const selectAllLegendPayload2DArray = (
19
- state: ChartState,
20
- ): ReadonlyArray<ReadonlyArray<LegendPayload>> => {
21
- return readChartState(state).legend.payload
22
- }
23
-
24
- export const selectLegendPayload = chartSelector(function selectLegendPayload(state: ChartState): ReadonlyArray<LegendPayload> {
25
- const payloads = selectAllLegendPayload2DArray(state)
26
- const { itemSorter } = selectLegendSettings(state)
27
- const flat = payloads.flat(1)
28
- return itemSorter ? sortBy(flat, itemSorter) : flat
29
- })