@coinbase/cds-mobile-visualization 3.3.0 → 3.4.0-beta.10

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 (265) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dts/chart/CartesianChart.d.ts +125 -0
  3. package/dts/chart/CartesianChart.d.ts.map +1 -0
  4. package/dts/chart/ChartContextBridge.d.ts +28 -0
  5. package/dts/chart/ChartContextBridge.d.ts.map +1 -0
  6. package/dts/chart/ChartProvider.d.ts +6 -0
  7. package/dts/chart/ChartProvider.d.ts.map +1 -0
  8. package/dts/chart/Path.d.ts +91 -0
  9. package/dts/chart/Path.d.ts.map +1 -0
  10. package/dts/chart/PeriodSelector.d.ts +85 -0
  11. package/dts/chart/PeriodSelector.d.ts.map +1 -0
  12. package/dts/chart/area/Area.d.ts +77 -0
  13. package/dts/chart/area/Area.d.ts.map +1 -0
  14. package/dts/chart/area/AreaChart.d.ts +131 -0
  15. package/dts/chart/area/AreaChart.d.ts.map +1 -0
  16. package/dts/chart/area/DottedArea.d.ts +46 -0
  17. package/dts/chart/area/DottedArea.d.ts.map +1 -0
  18. package/dts/chart/area/GradientArea.d.ts +36 -0
  19. package/dts/chart/area/GradientArea.d.ts.map +1 -0
  20. package/dts/chart/area/SolidArea.d.ts +23 -0
  21. package/dts/chart/area/SolidArea.d.ts.map +1 -0
  22. package/dts/chart/area/index.d.ts +6 -0
  23. package/dts/chart/area/index.d.ts.map +1 -0
  24. package/dts/chart/axis/Axis.d.ts +194 -0
  25. package/dts/chart/axis/Axis.d.ts.map +1 -0
  26. package/dts/chart/axis/DefaultAxisTickLabel.d.ts +8 -0
  27. package/dts/chart/axis/DefaultAxisTickLabel.d.ts.map +1 -0
  28. package/dts/chart/axis/XAxis.d.ts +16 -0
  29. package/dts/chart/axis/XAxis.d.ts.map +1 -0
  30. package/dts/chart/axis/YAxis.d.ts +21 -0
  31. package/dts/chart/axis/YAxis.d.ts.map +1 -0
  32. package/dts/chart/axis/index.d.ts +5 -0
  33. package/dts/chart/axis/index.d.ts.map +1 -0
  34. package/dts/chart/bar/Bar.d.ts +92 -0
  35. package/dts/chart/bar/Bar.d.ts.map +1 -0
  36. package/dts/chart/bar/BarChart.d.ts +113 -0
  37. package/dts/chart/bar/BarChart.d.ts.map +1 -0
  38. package/dts/chart/bar/BarPlot.d.ts +30 -0
  39. package/dts/chart/bar/BarPlot.d.ts.map +1 -0
  40. package/dts/chart/bar/BarStack.d.ts +102 -0
  41. package/dts/chart/bar/BarStack.d.ts.map +1 -0
  42. package/dts/chart/bar/BarStackGroup.d.ts +36 -0
  43. package/dts/chart/bar/BarStackGroup.d.ts.map +1 -0
  44. package/dts/chart/bar/DefaultBar.d.ts +7 -0
  45. package/dts/chart/bar/DefaultBar.d.ts.map +1 -0
  46. package/dts/chart/bar/DefaultBarStack.d.ts +7 -0
  47. package/dts/chart/bar/DefaultBarStack.d.ts.map +1 -0
  48. package/dts/chart/bar/index.d.ts +8 -0
  49. package/dts/chart/bar/index.d.ts.map +1 -0
  50. package/dts/chart/gradient/Gradient.d.ts +25 -0
  51. package/dts/chart/gradient/Gradient.d.ts.map +1 -0
  52. package/dts/chart/gradient/index.d.ts +2 -0
  53. package/dts/chart/gradient/index.d.ts.map +1 -0
  54. package/dts/chart/index.d.ts +15 -0
  55. package/dts/chart/index.d.ts.map +1 -0
  56. package/dts/chart/line/DefaultReferenceLineLabel.d.ts +9 -0
  57. package/dts/chart/line/DefaultReferenceLineLabel.d.ts.map +1 -0
  58. package/dts/chart/line/DottedLine.d.ts +20 -0
  59. package/dts/chart/line/DottedLine.d.ts.map +1 -0
  60. package/dts/chart/line/Line.d.ts +115 -0
  61. package/dts/chart/line/Line.d.ts.map +1 -0
  62. package/dts/chart/line/LineChart.d.ts +118 -0
  63. package/dts/chart/line/LineChart.d.ts.map +1 -0
  64. package/dts/chart/line/ReferenceLine.d.ts +139 -0
  65. package/dts/chart/line/ReferenceLine.d.ts.map +1 -0
  66. package/dts/chart/line/SolidLine.d.ts +15 -0
  67. package/dts/chart/line/SolidLine.d.ts.map +1 -0
  68. package/dts/chart/line/index.d.ts +7 -0
  69. package/dts/chart/line/index.d.ts.map +1 -0
  70. package/dts/chart/point/DefaultPointLabel.d.ts +10 -0
  71. package/dts/chart/point/DefaultPointLabel.d.ts.map +1 -0
  72. package/dts/chart/point/Point.d.ts +120 -0
  73. package/dts/chart/point/Point.d.ts.map +1 -0
  74. package/dts/chart/point/index.d.ts +3 -0
  75. package/dts/chart/point/index.d.ts.map +1 -0
  76. package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts +8 -0
  77. package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts.map +1 -0
  78. package/dts/chart/scrubber/DefaultScrubberBeaconLabel.d.ts +12 -0
  79. package/dts/chart/scrubber/DefaultScrubberBeaconLabel.d.ts.map +1 -0
  80. package/dts/chart/scrubber/DefaultScrubberLabel.d.ts +11 -0
  81. package/dts/chart/scrubber/DefaultScrubberLabel.d.ts.map +1 -0
  82. package/dts/chart/scrubber/Scrubber.d.ts +233 -0
  83. package/dts/chart/scrubber/Scrubber.d.ts.map +1 -0
  84. package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts +44 -0
  85. package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts.map +1 -0
  86. package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts +31 -0
  87. package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts.map +1 -0
  88. package/dts/chart/scrubber/ScrubberProvider.d.ts +20 -0
  89. package/dts/chart/scrubber/ScrubberProvider.d.ts.map +1 -0
  90. package/dts/chart/scrubber/index.d.ts +5 -0
  91. package/dts/chart/scrubber/index.d.ts.map +1 -0
  92. package/dts/chart/text/ChartText.d.ts +164 -0
  93. package/dts/chart/text/ChartText.d.ts.map +1 -0
  94. package/dts/chart/text/ChartTextGroup.d.ts +61 -0
  95. package/dts/chart/text/ChartTextGroup.d.ts.map +1 -0
  96. package/dts/chart/text/index.d.ts +3 -0
  97. package/dts/chart/text/index.d.ts.map +1 -0
  98. package/dts/chart/utils/axis.d.ts +342 -0
  99. package/dts/chart/utils/axis.d.ts.map +1 -0
  100. package/dts/chart/utils/bar.d.ts +20 -0
  101. package/dts/chart/utils/bar.d.ts.map +1 -0
  102. package/dts/chart/utils/chart.d.ts +124 -0
  103. package/dts/chart/utils/chart.d.ts.map +1 -0
  104. package/dts/chart/utils/context.d.ts +116 -0
  105. package/dts/chart/utils/context.d.ts.map +1 -0
  106. package/dts/chart/utils/gradient.d.ts +117 -0
  107. package/dts/chart/utils/gradient.d.ts.map +1 -0
  108. package/dts/chart/utils/index.d.ts +11 -0
  109. package/dts/chart/utils/index.d.ts.map +1 -0
  110. package/dts/chart/utils/path.d.ts +160 -0
  111. package/dts/chart/utils/path.d.ts.map +1 -0
  112. package/dts/chart/utils/point.d.ts +134 -0
  113. package/dts/chart/utils/point.d.ts.map +1 -0
  114. package/dts/chart/utils/scale.d.ts +134 -0
  115. package/dts/chart/utils/scale.d.ts.map +1 -0
  116. package/dts/chart/utils/scrubber.d.ts +39 -0
  117. package/dts/chart/utils/scrubber.d.ts.map +1 -0
  118. package/dts/chart/utils/transition.d.ts +140 -0
  119. package/dts/chart/utils/transition.d.ts.map +1 -0
  120. package/dts/index.d.ts +2 -1
  121. package/dts/index.d.ts.map +1 -1
  122. package/dts/sparkline/Counter.d.ts +7 -2
  123. package/dts/sparkline/Sparkline.d.ts +67 -16
  124. package/dts/sparkline/Sparkline.d.ts.map +1 -1
  125. package/dts/sparkline/SparklineArea.d.ts +10 -4
  126. package/dts/sparkline/SparklineArea.d.ts.map +1 -1
  127. package/dts/sparkline/SparklineAreaPattern.d.ts +12 -4
  128. package/dts/sparkline/SparklineAreaPattern.d.ts.map +1 -1
  129. package/dts/sparkline/SparklineGradient.d.ts +21 -10
  130. package/dts/sparkline/SparklineGradient.d.ts.map +1 -1
  131. package/dts/sparkline/__figma__/Sparkline.figma.d.ts +1 -1
  132. package/dts/sparkline/generateSparklineWithId.d.ts +8 -2
  133. package/dts/sparkline/generateSparklineWithId.d.ts.map +1 -1
  134. package/dts/sparkline/index.d.ts +1 -1
  135. package/dts/sparkline/sparkline-interactive/SparklineAccessibleView.d.ts +8 -3
  136. package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts +132 -110
  137. package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts.map +1 -1
  138. package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts +22 -9
  139. package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts.map +1 -1
  140. package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.d.ts +18 -7
  141. package/dts/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.d.ts +9 -4
  142. package/dts/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.d.ts +11 -6
  143. package/dts/sparkline/sparkline-interactive/SparklineInteractiveMinMax.d.ts +7 -5
  144. package/dts/sparkline/sparkline-interactive/SparklineInteractivePanGestureHandler.d.ts +22 -10
  145. package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts +21 -7
  146. package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts.map +1 -1
  147. package/dts/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.d.ts +21 -16
  148. package/dts/sparkline/sparkline-interactive/SparklineInteractiveProvider.d.ts +29 -23
  149. package/dts/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.d.ts +22 -14
  150. package/dts/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.d.ts +1 -1
  151. package/dts/sparkline/sparkline-interactive/useInterruptiblePathAnimation.d.ts +9 -5
  152. package/dts/sparkline/sparkline-interactive/useMinMaxTransform.d.ts +11 -6
  153. package/dts/sparkline/sparkline-interactive/useOpacityAnimation.d.ts +5 -2
  154. package/dts/sparkline/sparkline-interactive/useSparklineInteractiveConstants.d.ts +17 -17
  155. package/dts/sparkline/sparkline-interactive/useSparklineInteractiveLineStyles.d.ts +16 -13
  156. package/dts/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.d.ts +106 -98
  157. package/dts/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.d.ts +1 -1
  158. package/dts/sparkline/sparkline-interactive-header/useSparklineInteractiveHeaderStyles.d.ts +22 -19
  159. package/esm/chart/CartesianChart.js +335 -0
  160. package/esm/chart/ChartContextBridge.js +148 -0
  161. package/esm/chart/ChartProvider.js +10 -0
  162. package/esm/chart/Path.js +218 -0
  163. package/esm/chart/PeriodSelector.js +136 -0
  164. package/esm/chart/__stories__/CartesianChart.stories.js +723 -0
  165. package/esm/chart/__stories__/Chart.stories.js +77 -0
  166. package/esm/chart/__stories__/PeriodSelector.stories.js +322 -0
  167. package/esm/chart/area/Area.js +75 -0
  168. package/esm/chart/area/AreaChart.js +151 -0
  169. package/esm/chart/area/DottedArea.js +80 -0
  170. package/esm/chart/area/GradientArea.js +54 -0
  171. package/esm/chart/area/SolidArea.js +38 -0
  172. package/esm/chart/area/__stories__/AreaChart.stories.js +100 -0
  173. package/esm/chart/area/index.js +7 -0
  174. package/esm/chart/axis/Axis.js +45 -0
  175. package/esm/chart/axis/DefaultAxisTickLabel.js +11 -0
  176. package/esm/chart/axis/XAxis.js +188 -0
  177. package/esm/chart/axis/YAxis.js +177 -0
  178. package/esm/chart/axis/__stories__/Axis.stories.js +276 -0
  179. package/esm/chart/axis/index.js +6 -0
  180. package/esm/chart/bar/Bar.js +69 -0
  181. package/esm/chart/bar/BarChart.js +125 -0
  182. package/esm/chart/bar/BarPlot.js +102 -0
  183. package/esm/chart/bar/BarStack.js +551 -0
  184. package/esm/chart/bar/BarStackGroup.js +79 -0
  185. package/esm/chart/bar/DefaultBar.js +56 -0
  186. package/esm/chart/bar/DefaultBarStack.js +47 -0
  187. package/esm/chart/bar/__stories__/BarChart.stories.js +668 -0
  188. package/esm/chart/bar/index.js +9 -0
  189. package/esm/chart/gradient/Gradient.js +53 -0
  190. package/esm/chart/gradient/index.js +1 -0
  191. package/esm/chart/index.js +16 -0
  192. package/esm/chart/line/DefaultReferenceLineLabel.js +66 -0
  193. package/esm/chart/line/DottedLine.js +50 -0
  194. package/esm/chart/line/Line.js +178 -0
  195. package/esm/chart/line/LineChart.js +121 -0
  196. package/esm/chart/line/ReferenceLine.js +132 -0
  197. package/esm/chart/line/SolidLine.js +46 -0
  198. package/esm/chart/line/__stories__/LineChart.stories.js +2372 -0
  199. package/esm/chart/line/__stories__/ReferenceLine.stories.js +132 -0
  200. package/esm/chart/line/index.js +8 -0
  201. package/esm/chart/point/DefaultPointLabel.js +39 -0
  202. package/esm/chart/point/Point.js +188 -0
  203. package/esm/chart/point/index.js +2 -0
  204. package/esm/chart/scrubber/DefaultScrubberBeacon.js +179 -0
  205. package/esm/chart/scrubber/DefaultScrubberBeaconLabel.js +43 -0
  206. package/esm/chart/scrubber/DefaultScrubberLabel.js +28 -0
  207. package/esm/chart/scrubber/Scrubber.js +166 -0
  208. package/esm/chart/scrubber/ScrubberBeaconGroup.js +161 -0
  209. package/esm/chart/scrubber/ScrubberBeaconLabelGroup.js +185 -0
  210. package/esm/chart/scrubber/ScrubberProvider.js +135 -0
  211. package/esm/chart/scrubber/index.js +4 -0
  212. package/esm/chart/text/ChartText.js +305 -0
  213. package/esm/chart/text/ChartTextGroup.js +211 -0
  214. package/esm/chart/text/index.js +4 -0
  215. package/esm/chart/utils/axis.js +592 -0
  216. package/esm/chart/utils/bar.js +24 -0
  217. package/esm/chart/utils/chart.js +270 -0
  218. package/esm/chart/utils/context.js +15 -0
  219. package/esm/chart/utils/gradient.js +305 -0
  220. package/esm/chart/utils/index.js +12 -0
  221. package/esm/chart/utils/path.js +274 -0
  222. package/esm/chart/utils/point.js +229 -0
  223. package/esm/chart/utils/scale.js +277 -0
  224. package/esm/chart/utils/scrubber.js +139 -0
  225. package/esm/chart/utils/transition.js +185 -0
  226. package/esm/index.js +4 -1
  227. package/esm/sparkline/Sparkline.js +129 -16
  228. package/esm/sparkline/SparklineArea.js +7 -2
  229. package/esm/sparkline/SparklineAreaPattern.js +4 -2
  230. package/esm/sparkline/SparklineGradient.js +4 -0
  231. package/esm/sparkline/__stories__/Sparkline.stories.js +11 -7
  232. package/esm/sparkline/__stories__/SparklineGradient.stories.js +7 -4
  233. package/esm/sparkline/generateSparklineWithId.js +3 -2
  234. package/esm/sparkline/sparkline-interactive/SparklineInteractive.js +5 -1
  235. package/esm/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.js +5 -2
  236. package/esm/sparkline/sparkline-interactive/SparklineInteractivePaths.js +4 -0
  237. package/esm/sparkline/sparkline-interactive/__stories__/SparklineInteractive.stories.js +76 -24
  238. package/esm/sparkline/sparkline-interactive-header/__stories__/SparklineInteractiveHeader.stories.js +17 -9
  239. package/package.json +17 -11
  240. package/dts/sparkline/__stories__/Sparkline.stories.d.ts +0 -3
  241. package/dts/sparkline/__stories__/Sparkline.stories.d.ts.map +0 -1
  242. package/dts/sparkline/__stories__/SparklineGradient.stories.d.ts +0 -3
  243. package/dts/sparkline/__stories__/SparklineGradient.stories.d.ts.map +0 -1
  244. package/dts/sparkline/sparkline-interactive/__stories__/SparklineInteractive.stories.d.ts +0 -3
  245. package/dts/sparkline/sparkline-interactive/__stories__/SparklineInteractive.stories.d.ts.map +0 -1
  246. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractive.test.d.ts +0 -2
  247. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractive.test.d.ts.map +0 -1
  248. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractiveHoverDate.test.d.ts +0 -2
  249. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractiveHoverDate.test.d.ts.map +0 -1
  250. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractivePanGestureHandler.test.d.ts +0 -2
  251. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractivePanGestureHandler.test.d.ts.map +0 -1
  252. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractivePeriodSelector.test.d.ts +0 -2
  253. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractivePeriodSelector.test.d.ts.map +0 -1
  254. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractiveTimeseriesPaths.test.d.ts +0 -2
  255. package/dts/sparkline/sparkline-interactive/__tests__/SparklineInteractiveTimeseriesPaths.test.d.ts.map +0 -1
  256. package/dts/sparkline/sparkline-interactive/__tests__/useMinMaxTransform.test.d.ts +0 -2
  257. package/dts/sparkline/sparkline-interactive/__tests__/useMinMaxTransform.test.d.ts.map +0 -1
  258. package/dts/sparkline/sparkline-interactive/useInterruptiblePathAnimation.test.disable.d.ts +0 -2
  259. package/dts/sparkline/sparkline-interactive/useInterruptiblePathAnimation.test.disable.d.ts.map +0 -1
  260. package/dts/sparkline/sparkline-interactive-header/__stories__/SparklineInteractiveHeader.stories.d.ts +0 -4
  261. package/dts/sparkline/sparkline-interactive-header/__stories__/SparklineInteractiveHeader.stories.d.ts.map +0 -1
  262. package/dts/sparkline/sparkline-interactive-header/__tests__/SparklineInteractiveHeader.test.d.ts +0 -2
  263. package/dts/sparkline/sparkline-interactive-header/__tests__/SparklineInteractiveHeader.test.d.ts.map +0 -1
  264. package/dts/sparkline/sparkline-interactive-header/__tests__/useSparklineInteractiveHeaderStyles.test.d.ts +0 -2
  265. package/dts/sparkline/sparkline-interactive-header/__tests__/useSparklineInteractiveHeaderStyles.test.d.ts.map +0 -1
@@ -0,0 +1,335 @@
1
+ const _excluded = ["series", "children", "animate", "enableScrubbing", "xAxis", "yAxis", "inset", "onScrubberPositionChange", "width", "height", "style", "styles", "allowOverflowGestures", "fontFamilies", "fontProvider", "collapsable"];
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
+ import React, { forwardRef, memo, useCallback, useMemo } from 'react';
5
+ import { useLayout } from '@coinbase/cds-mobile/hooks/useLayout';
6
+ import { Box } from '@coinbase/cds-mobile/layout';
7
+ import { Canvas, Skia } from '@shopify/react-native-skia';
8
+ import { ScrubberProvider } from './scrubber/ScrubberProvider';
9
+ import { convertToSerializableScale } from './utils/scale';
10
+ import { useChartContextBridge } from './ChartContextBridge';
11
+ import { CartesianChartProvider } from './ChartProvider';
12
+ import { defaultAxisId, defaultChartInset, getAxisConfig, getAxisDomain, getAxisRange, getAxisScale, getChartInset, getStackedSeriesData as calculateStackedSeriesData, useTotalAxisPadding } from './utils';
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ const ChartCanvas = /*#__PURE__*/memo(_ref => {
15
+ let {
16
+ children,
17
+ style
18
+ } = _ref;
19
+ const ContextBridge = useChartContextBridge();
20
+ return /*#__PURE__*/_jsx(Canvas, {
21
+ style: [{
22
+ width: '100%',
23
+ height: '100%'
24
+ }, style],
25
+ children: /*#__PURE__*/_jsx(ContextBridge, {
26
+ children: children
27
+ })
28
+ });
29
+ });
30
+ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref2, ref) => {
31
+ let {
32
+ series,
33
+ children,
34
+ animate = true,
35
+ enableScrubbing,
36
+ xAxis: xAxisConfigProp,
37
+ yAxis: yAxisConfigProp,
38
+ inset,
39
+ onScrubberPositionChange,
40
+ width = '100%',
41
+ height = '100%',
42
+ style,
43
+ styles,
44
+ allowOverflowGestures,
45
+ fontFamilies,
46
+ fontProvider: fontProviderProp,
47
+ // React Native will collapse views by default when only used
48
+ // to group children, which interferes with gesture-handler
49
+ // https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/gesture-detector/#:~:text=%7B%0A%20%20return%20%3C-,View,-collapsable%3D%7B
50
+ collapsable = false
51
+ } = _ref2,
52
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded);
53
+ const [containerLayout, onContainerLayout] = useLayout();
54
+ const chartWidth = containerLayout.width;
55
+ const chartHeight = containerLayout.height;
56
+ const calculatedInset = useMemo(() => getChartInset(inset, defaultChartInset), [inset]);
57
+
58
+ // there can only be one x axis but the helper function always returns an array
59
+ const xAxisConfig = useMemo(() => getAxisConfig('x', xAxisConfigProp)[0], [xAxisConfigProp]);
60
+ const yAxisConfig = useMemo(() => getAxisConfig('y', yAxisConfigProp), [yAxisConfigProp]);
61
+ const {
62
+ renderedAxes,
63
+ registerAxis,
64
+ unregisterAxis,
65
+ axisPadding
66
+ } = useTotalAxisPadding();
67
+ const totalInset = useMemo(() => ({
68
+ top: calculatedInset.top + axisPadding.top,
69
+ right: calculatedInset.right + axisPadding.right,
70
+ bottom: calculatedInset.bottom + axisPadding.bottom,
71
+ left: calculatedInset.left + axisPadding.left
72
+ }), [calculatedInset, axisPadding]);
73
+ const chartRect = useMemo(() => {
74
+ if (chartWidth <= 0 || chartHeight <= 0) return {
75
+ x: 0,
76
+ y: 0,
77
+ width: 0,
78
+ height: 0
79
+ };
80
+ const availableWidth = chartWidth - totalInset.left - totalInset.right;
81
+ const availableHeight = chartHeight - totalInset.top - totalInset.bottom;
82
+ return {
83
+ x: totalInset.left,
84
+ y: totalInset.top,
85
+ width: availableWidth > 0 ? availableWidth : 0,
86
+ height: availableHeight > 0 ? availableHeight : 0
87
+ };
88
+ }, [chartHeight, chartWidth, totalInset]);
89
+ const {
90
+ xAxis,
91
+ xScale
92
+ } = useMemo(() => {
93
+ if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0) return {
94
+ xAxis: undefined,
95
+ xScale: undefined
96
+ };
97
+ const domain = getAxisDomain(xAxisConfig, series != null ? series : [], 'x');
98
+ const range = getAxisRange(xAxisConfig, chartRect, 'x');
99
+ const axisConfig = {
100
+ scaleType: xAxisConfig.scaleType,
101
+ domain,
102
+ range,
103
+ data: xAxisConfig.data,
104
+ categoryPadding: xAxisConfig.categoryPadding,
105
+ domainLimit: xAxisConfig.domainLimit
106
+ };
107
+
108
+ // Create the scale
109
+ const scale = getAxisScale({
110
+ config: axisConfig,
111
+ type: 'x',
112
+ range: axisConfig.range,
113
+ dataDomain: axisConfig.domain
114
+ });
115
+ if (!scale) return {
116
+ xAxis: undefined,
117
+ xScale: undefined
118
+ };
119
+
120
+ // Update axis config with actual scale domain (after .nice() or other adjustments)
121
+ const scaleDomain = scale.domain();
122
+ const actualDomain = Array.isArray(scaleDomain) && scaleDomain.length === 2 ? {
123
+ min: scaleDomain[0],
124
+ max: scaleDomain[1]
125
+ } : axisConfig.domain;
126
+ const finalAxisConfig = _extends({}, axisConfig, {
127
+ domain: actualDomain
128
+ });
129
+ return {
130
+ xAxis: finalAxisConfig,
131
+ xScale: scale
132
+ };
133
+ }, [xAxisConfig, series, chartRect]);
134
+ const xSerializableScale = useMemo(() => {
135
+ if (!xScale) return;
136
+ return convertToSerializableScale(xScale);
137
+ }, [xScale]);
138
+ const {
139
+ yAxes,
140
+ yScales
141
+ } = useMemo(() => {
142
+ const axes = new Map();
143
+ const scales = new Map();
144
+ if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0) return {
145
+ yAxes: axes,
146
+ yScales: scales
147
+ };
148
+ yAxisConfig.forEach(axisParam => {
149
+ var _axisParam$id, _series$filter, _axisParam$domainLimi;
150
+ const axisId = (_axisParam$id = axisParam.id) != null ? _axisParam$id : defaultAxisId;
151
+
152
+ // Get relevant series data
153
+ const relevantSeries = (_series$filter = series == null ? void 0 : series.filter(s => {
154
+ var _s$yAxisId;
155
+ return ((_s$yAxisId = s.yAxisId) != null ? _s$yAxisId : defaultAxisId) === axisId;
156
+ })) != null ? _series$filter : [];
157
+
158
+ // Calculate domain and range
159
+ const dataDomain = getAxisDomain(axisParam, relevantSeries, 'y');
160
+ const range = getAxisRange(axisParam, chartRect, 'y');
161
+ const axisConfig = {
162
+ scaleType: axisParam.scaleType,
163
+ domain: dataDomain,
164
+ range,
165
+ data: axisParam.data,
166
+ categoryPadding: axisParam.categoryPadding,
167
+ domainLimit: (_axisParam$domainLimi = axisParam.domainLimit) != null ? _axisParam$domainLimi : 'nice'
168
+ };
169
+
170
+ // Create the scale
171
+ const scale = getAxisScale({
172
+ config: axisConfig,
173
+ type: 'y',
174
+ range: axisConfig.range,
175
+ dataDomain: axisConfig.domain
176
+ });
177
+ if (scale) {
178
+ scales.set(axisId, scale);
179
+
180
+ // Update axis config with actual scale domain (after .nice() or other adjustments)
181
+ const scaleDomain = scale.domain();
182
+ const actualDomain = Array.isArray(scaleDomain) && scaleDomain.length === 2 ? {
183
+ min: scaleDomain[0],
184
+ max: scaleDomain[1]
185
+ } : axisConfig.domain;
186
+ axes.set(axisId, _extends({}, axisConfig, {
187
+ domain: actualDomain
188
+ }));
189
+ }
190
+ });
191
+ return {
192
+ yAxes: axes,
193
+ yScales: scales
194
+ };
195
+ }, [yAxisConfig, series, chartRect]);
196
+
197
+ // We need a set of serialized scales usable in UI thread
198
+ const ySerializableScales = useMemo(() => {
199
+ const serializableScales = new Map();
200
+ yScales.forEach((scale, id) => {
201
+ const serializableScale = convertToSerializableScale(scale);
202
+ if (serializableScale) {
203
+ serializableScales.set(id, serializableScale);
204
+ }
205
+ });
206
+ return serializableScales;
207
+ }, [yScales]);
208
+ const getXAxis = useCallback(() => xAxis, [xAxis]);
209
+ const getYAxis = useCallback(id => yAxes.get(id != null ? id : defaultAxisId), [yAxes]);
210
+ const getXScale = useCallback(() => xScale, [xScale]);
211
+ const getYScale = useCallback(id => yScales.get(id != null ? id : defaultAxisId), [yScales]);
212
+ const getXSerializableScale = useCallback(() => xSerializableScale, [xSerializableScale]);
213
+ const getYSerializableScale = useCallback(id => ySerializableScales.get(id != null ? id : defaultAxisId), [ySerializableScales]);
214
+ const getSeries = useCallback(seriesId => series == null ? void 0 : series.find(s => s.id === seriesId), [series]);
215
+ const stackedDataMap = useMemo(() => {
216
+ if (!series) return new Map();
217
+ return calculateStackedSeriesData(series);
218
+ }, [series]);
219
+ const getStackedSeriesData = useCallback(seriesId => {
220
+ if (!seriesId) return undefined;
221
+ return stackedDataMap.get(seriesId);
222
+ }, [stackedDataMap]);
223
+ const dataLength = useMemo(() => {
224
+ // If xAxis has categorical data, use that length
225
+ if (xAxisConfig.data && xAxisConfig.data.length > 0) {
226
+ return xAxisConfig.data.length;
227
+ }
228
+
229
+ // Otherwise, find the longest series
230
+ if (!series || series.length === 0) return 0;
231
+ return series.reduce((max, s) => {
232
+ var _seriesData$length;
233
+ const seriesData = getStackedSeriesData(s.id);
234
+ return Math.max(max, (_seriesData$length = seriesData == null ? void 0 : seriesData.length) != null ? _seriesData$length : 0);
235
+ }, 0);
236
+ }, [xAxisConfig.data, series, getStackedSeriesData]);
237
+ const getAxisBounds = useCallback(axisId => {
238
+ const axis = renderedAxes.get(axisId);
239
+ if (!axis || !chartRect) return;
240
+ const axesAtPosition = Array.from(renderedAxes.values()).filter(a => a.position === axis.position).sort((a, b) => a.id.localeCompare(b.id));
241
+ const axisIndex = axesAtPosition.findIndex(a => a.id === axisId);
242
+ if (axisIndex === -1) return;
243
+
244
+ // Calculate offset from previous axes at the same position
245
+ const offsetFromPreviousAxes = axesAtPosition.slice(0, axisIndex).reduce((sum, a) => sum + a.size, 0);
246
+ if (axis.position === 'top') {
247
+ // Position above the chart rect, accounting for user inset
248
+ const startY = calculatedInset.top + offsetFromPreviousAxes;
249
+ return {
250
+ x: chartRect.x,
251
+ y: startY,
252
+ width: chartRect.width,
253
+ height: axis.size
254
+ };
255
+ } else if (axis.position === 'bottom') {
256
+ // Position below the chart rect, accounting for user inset
257
+ const startY = chartRect.y + chartRect.height + offsetFromPreviousAxes;
258
+ return {
259
+ x: chartRect.x,
260
+ y: startY,
261
+ width: chartRect.width,
262
+ height: axis.size
263
+ };
264
+ } else if (axis.position === 'left') {
265
+ // Position to the left of the chart rect, accounting for user inset
266
+ const startX = calculatedInset.left + offsetFromPreviousAxes;
267
+ return {
268
+ x: startX,
269
+ y: chartRect.y,
270
+ width: axis.size,
271
+ height: chartRect.height
272
+ };
273
+ } else {
274
+ // right - position to the right of the chart rect, accounting for user inset
275
+ const startX = chartRect.x + chartRect.width + offsetFromPreviousAxes;
276
+ return {
277
+ x: startX,
278
+ y: chartRect.y,
279
+ width: axis.size,
280
+ height: chartRect.height
281
+ };
282
+ }
283
+ }, [renderedAxes, chartRect, calculatedInset]);
284
+ const fontProvider = useMemo(() => {
285
+ if (fontProviderProp) return fontProviderProp;
286
+ return Skia.TypefaceFontProvider.Make();
287
+ }, [fontProviderProp]);
288
+ const contextValue = useMemo(() => ({
289
+ series: series != null ? series : [],
290
+ getSeries,
291
+ getSeriesData: getStackedSeriesData,
292
+ animate,
293
+ width: chartWidth,
294
+ height: chartHeight,
295
+ fontFamilies,
296
+ fontProvider,
297
+ getXAxis,
298
+ getYAxis,
299
+ getXScale,
300
+ getYScale,
301
+ getXSerializableScale,
302
+ getYSerializableScale,
303
+ drawingArea: chartRect,
304
+ dataLength,
305
+ registerAxis,
306
+ unregisterAxis,
307
+ getAxisBounds
308
+ }), [series, getSeries, getStackedSeriesData, animate, chartWidth, chartHeight, fontFamilies, fontProvider, getXAxis, getYAxis, getXScale, getYScale, getXSerializableScale, getYSerializableScale, chartRect, dataLength, registerAxis, unregisterAxis, getAxisBounds]);
309
+ const rootStyles = useMemo(() => {
310
+ return [style, styles == null ? void 0 : styles.root];
311
+ }, [style, styles == null ? void 0 : styles.root]);
312
+ return /*#__PURE__*/_jsx(CartesianChartProvider, {
313
+ value: contextValue,
314
+ children: /*#__PURE__*/_jsx(ScrubberProvider, {
315
+ allowOverflowGestures: allowOverflowGestures,
316
+ enableScrubbing: enableScrubbing,
317
+ onScrubberPositionChange: onScrubberPositionChange,
318
+ children: /*#__PURE__*/_jsx(Box, _extends({
319
+ ref: ref,
320
+ accessibilityLiveRegion: "polite",
321
+ accessibilityRole: "image",
322
+ collapsable: collapsable,
323
+ height: height,
324
+ onLayout: onContainerLayout,
325
+ style: rootStyles,
326
+ width: width
327
+ }, props, {
328
+ children: /*#__PURE__*/_jsx(ChartCanvas, {
329
+ style: styles == null ? void 0 : styles.chart,
330
+ children: children
331
+ })
332
+ }))
333
+ })
334
+ });
335
+ }));
@@ -0,0 +1,148 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ /**
3
+ * Simplified context bridge utilities for React Native.
4
+ * Adapted from its-fine to enable context sharing across React renderers
5
+ * https://github.com/pmndrs/its-fine/blob/598b81f02778c22ed21121c2b1a786bdefb14e23/src/index.tsx
6
+ */
7
+
8
+ import * as React from 'react';
9
+
10
+ /**
11
+ * Represents a react-internal tree node.
12
+ */
13
+
14
+ /**
15
+ * Represents a tree node selector for traversal.
16
+ */
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ /**
19
+ * Traverses up or down a React tree, return `true` to stop and select a node.
20
+ */
21
+ function traverseTreeNode(node, ascending, selector) {
22
+ if (!node) return;
23
+ if (selector(node) === true) return node;
24
+ let child = ascending ? node.return : node.child;
25
+ while (child) {
26
+ const match = traverseTreeNode(child, ascending, selector);
27
+ if (match) return match;
28
+ child = ascending ? null : child.sibling;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Wraps context to hide React development warnings about using contexts between renderers.
34
+ */
35
+ function wrapContext(context) {
36
+ try {
37
+ return Object.defineProperties(context, {
38
+ _currentRenderer: {
39
+ get() {
40
+ return null;
41
+ },
42
+ set() {}
43
+ },
44
+ _currentRenderer2: {
45
+ get() {
46
+ return null;
47
+ },
48
+ set() {}
49
+ }
50
+ });
51
+ } catch (_) {
52
+ return context;
53
+ }
54
+ }
55
+
56
+ // In development, React will warn about using contexts between renderers.
57
+ // Suppress the warning because our context bridge fixes this issue
58
+ const error = console.error;
59
+ console.error = function () {
60
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
61
+ args[_key] = arguments[_key];
62
+ }
63
+ const message = args.join('');
64
+ if (message != null && message.startsWith('Warning:') && message.includes('useContext')) {
65
+ console.error = error;
66
+ return;
67
+ }
68
+ return error.apply(this, args);
69
+ };
70
+ const TreeNodeContext = wrapContext(/*#__PURE__*/React.createContext(null));
71
+
72
+ /**
73
+ * A react-internal tree node provider that binds React children to the React tree for chart context bridging.
74
+ */
75
+ export class ChartBridgeProvider extends React.Component {
76
+ render() {
77
+ return /*#__PURE__*/_jsx(TreeNodeContext.Provider, {
78
+ value: this._reactInternals,
79
+ children: this.props.children
80
+ });
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Returns the current react-internal tree node.
86
+ */
87
+ function useTreeNode() {
88
+ const root = React.useContext(TreeNodeContext);
89
+ if (root === null) throw new Error('useTreeNode must be called within a <ChartBridgeProvider />!');
90
+ const id = React.useId();
91
+ const treeNode = React.useMemo(() => {
92
+ for (const maybeNode of [root, root == null ? void 0 : root.alternate]) {
93
+ if (!maybeNode) continue;
94
+ const node = traverseTreeNode(maybeNode, false, node => {
95
+ let state = node.memoizedState;
96
+ while (state) {
97
+ if (state.memoizedState === id) return true;
98
+ state = state.next;
99
+ }
100
+ });
101
+ if (node) return node;
102
+ }
103
+ }, [root, id]);
104
+ return treeNode;
105
+ }
106
+ /**
107
+ * Returns a map of all contexts and their values.
108
+ */
109
+ function useContextMap() {
110
+ const treeNode = useTreeNode();
111
+ const [contextMap] = React.useState(() => new Map());
112
+
113
+ // Collect live context
114
+ contextMap.clear();
115
+ let node = treeNode;
116
+ while (node) {
117
+ if (node.type && typeof node.type === 'object') {
118
+ // https://github.com/facebook/react/pull/28226
119
+ const enableRenderableContext = node.type._context === undefined && node.type.Provider === node.type;
120
+ const context = enableRenderableContext ? node.type : node.type._context;
121
+ if (context && context !== TreeNodeContext && !contextMap.has(context)) {
122
+ // eslint-disable-next-line react-hooks/rules-of-hooks
123
+ contextMap.set(context, React.useContext(wrapContext(context)));
124
+ }
125
+ }
126
+ node = node.return;
127
+ }
128
+ return contextMap;
129
+ }
130
+
131
+ /**
132
+ * Represents a chart context bridge provider component.
133
+ */
134
+
135
+ /**
136
+ * Returns a ChartContextBridge of live context providers to pierce Context across renderers.
137
+ * Pass ChartContextBridge as a component to a secondary renderer (e.g., Skia Canvas) to enable context-sharing in charts.
138
+ */
139
+ export function useChartContextBridge() {
140
+ const contextMap = useContextMap();
141
+
142
+ // Flatten context and their memoized values into a `ChartContextBridge` provider
143
+ return React.useMemo(() => Array.from(contextMap.keys()).reduce((Prev, context) => props => /*#__PURE__*/_jsx(Prev, {
144
+ children: /*#__PURE__*/_jsx(context.Provider, _extends({}, props, {
145
+ value: contextMap.get(context)
146
+ }))
147
+ }), props => /*#__PURE__*/_jsx(ChartBridgeProvider, _extends({}, props))), [contextMap]);
148
+ }
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from 'react';
2
+ const CartesianChartContext = /*#__PURE__*/createContext(undefined);
3
+ export const useCartesianChartContext = () => {
4
+ const context = useContext(CartesianChartContext);
5
+ if (!context) {
6
+ throw new Error('useCartesianChartContext must be used within a CartesianChart component. See http://cds.coinbase.com/components/graphs/CartesianChart.');
7
+ }
8
+ return context;
9
+ };
10
+ export const CartesianChartProvider = CartesianChartContext.Provider;