@coinbase/cds-mcp-server 8.17.2 → 8.17.4

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 (284) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/mcp-docs/mobile/components/Accordion.txt +188 -0
  3. package/mcp-docs/mobile/components/AccordionItem.txt +29 -0
  4. package/mcp-docs/mobile/components/Alert.txt +155 -0
  5. package/mcp-docs/mobile/components/AreaChart.txt +265 -0
  6. package/mcp-docs/mobile/components/Avatar.txt +195 -0
  7. package/mcp-docs/mobile/components/AvatarButton.txt +225 -0
  8. package/mcp-docs/mobile/components/Banner.txt +221 -0
  9. package/mcp-docs/mobile/components/BarChart.txt +815 -0
  10. package/mcp-docs/mobile/components/Box.txt +173 -0
  11. package/mcp-docs/mobile/components/BrowserBar.txt +146 -0
  12. package/mcp-docs/mobile/components/Button.txt +198 -0
  13. package/mcp-docs/mobile/components/ButtonGroup.txt +79 -0
  14. package/mcp-docs/mobile/components/Carousel.txt +1083 -0
  15. package/mcp-docs/mobile/components/CartesianChart.txt +825 -0
  16. package/mcp-docs/mobile/components/CellMedia.txt +70 -0
  17. package/mcp-docs/mobile/components/Checkbox.txt +245 -0
  18. package/mcp-docs/mobile/components/CheckboxCell.txt +201 -0
  19. package/mcp-docs/mobile/components/CheckboxGroup.txt +284 -0
  20. package/mcp-docs/mobile/components/Chip.txt +194 -0
  21. package/mcp-docs/mobile/components/Coachmark.txt +157 -0
  22. package/mcp-docs/mobile/components/Collapsible.txt +104 -0
  23. package/mcp-docs/mobile/components/ContainedAssetCard.txt +134 -0
  24. package/mcp-docs/mobile/components/ContentCard.txt +365 -0
  25. package/mcp-docs/mobile/components/ContentCardBody.txt +135 -0
  26. package/mcp-docs/mobile/components/ContentCardFooter.txt +127 -0
  27. package/mcp-docs/mobile/components/ContentCardHeader.txt +145 -0
  28. package/mcp-docs/mobile/components/ContentCell.txt +226 -0
  29. package/mcp-docs/mobile/components/ControlGroup.txt +443 -0
  30. package/mcp-docs/mobile/components/DatePicker.txt +496 -0
  31. package/mcp-docs/mobile/components/Divider.txt +138 -0
  32. package/mcp-docs/mobile/components/DotCount.txt +145 -0
  33. package/mcp-docs/mobile/components/DotStatusColor.txt +58 -0
  34. package/mcp-docs/mobile/components/DotSymbol.txt +134 -0
  35. package/mcp-docs/mobile/components/Fallback.txt +157 -0
  36. package/mcp-docs/mobile/components/FloatingAssetCard.txt +155 -0
  37. package/mcp-docs/mobile/components/HStack.txt +234 -0
  38. package/mcp-docs/mobile/components/HeroSquare.txt +47 -0
  39. package/mcp-docs/mobile/components/Icon.txt +51 -0
  40. package/mcp-docs/mobile/components/IconButton.txt +268 -0
  41. package/mcp-docs/mobile/components/InputChip.txt +187 -0
  42. package/mcp-docs/mobile/components/Interactable.txt +186 -0
  43. package/mcp-docs/mobile/components/LineChart.txt +1324 -0
  44. package/mcp-docs/mobile/components/Link.txt +291 -0
  45. package/mcp-docs/mobile/components/ListCell.txt +412 -0
  46. package/mcp-docs/mobile/components/LogoMark.txt +84 -0
  47. package/mcp-docs/mobile/components/LogoWordMark.txt +93 -0
  48. package/mcp-docs/mobile/components/Lottie.txt +138 -0
  49. package/mcp-docs/mobile/components/LottieStatusAnimation.txt +46 -0
  50. package/mcp-docs/mobile/components/Modal.txt +83 -0
  51. package/mcp-docs/mobile/components/ModalBody.txt +33 -0
  52. package/mcp-docs/mobile/components/ModalFooter.txt +24 -0
  53. package/mcp-docs/mobile/components/ModalHeader.txt +27 -0
  54. package/mcp-docs/mobile/components/MultiContentModule.txt +379 -0
  55. package/mcp-docs/mobile/components/NavigationTitle.txt +131 -0
  56. package/mcp-docs/mobile/components/NavigationTitleSelect.txt +141 -0
  57. package/mcp-docs/mobile/components/NudgeCard.txt +89 -0
  58. package/mcp-docs/mobile/components/Numpad.txt +340 -0
  59. package/mcp-docs/mobile/components/Overlay.txt +151 -0
  60. package/mcp-docs/mobile/components/PageFooter.txt +160 -0
  61. package/mcp-docs/mobile/components/PageHeader.txt +185 -0
  62. package/mcp-docs/mobile/components/PeriodSelector.txt +407 -0
  63. package/mcp-docs/mobile/components/Pictogram.txt +47 -0
  64. package/mcp-docs/mobile/components/Point.txt +204 -0
  65. package/mcp-docs/mobile/components/PortalProvider.txt +78 -0
  66. package/mcp-docs/mobile/components/Pressable.txt +210 -0
  67. package/mcp-docs/mobile/components/ProgressBar.txt +129 -0
  68. package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +160 -0
  69. package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +137 -0
  70. package/mcp-docs/mobile/components/ProgressCircle.txt +236 -0
  71. package/mcp-docs/mobile/components/Radio.txt +241 -0
  72. package/mcp-docs/mobile/components/RadioCell.txt +201 -0
  73. package/mcp-docs/mobile/components/RadioGroup.txt +281 -0
  74. package/mcp-docs/mobile/components/ReferenceLine.txt +152 -0
  75. package/mcp-docs/mobile/components/RemoteImage.txt +105 -0
  76. package/mcp-docs/mobile/components/RemoteImageGroup.txt +60 -0
  77. package/mcp-docs/mobile/components/RollingNumber.txt +788 -0
  78. package/mcp-docs/mobile/components/Scrubber.txt +203 -0
  79. package/mcp-docs/mobile/components/SearchInput.txt +191 -0
  80. package/mcp-docs/mobile/components/SectionHeader.txt +204 -0
  81. package/mcp-docs/mobile/components/SegmentedTabs.txt +315 -0
  82. package/mcp-docs/mobile/components/Select.txt +211 -0
  83. package/mcp-docs/mobile/components/SelectChip.txt +323 -0
  84. package/mcp-docs/mobile/components/SelectOption.txt +84 -0
  85. package/mcp-docs/mobile/components/SlideButton.txt +330 -0
  86. package/mcp-docs/mobile/components/Spacer.txt +83 -0
  87. package/mcp-docs/mobile/components/Sparkline.txt +122 -0
  88. package/mcp-docs/mobile/components/SparklineGradient.txt +106 -0
  89. package/mcp-docs/mobile/components/SparklineInteractive.txt +156 -0
  90. package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +72 -0
  91. package/mcp-docs/mobile/components/Spinner.txt +48 -0
  92. package/mcp-docs/mobile/components/SpotIcon.txt +47 -0
  93. package/mcp-docs/mobile/components/SpotRectangle.txt +47 -0
  94. package/mcp-docs/mobile/components/SpotSquare.txt +47 -0
  95. package/mcp-docs/mobile/components/Stepper.txt +527 -0
  96. package/mcp-docs/mobile/components/SubBrandLogoMark.txt +125 -0
  97. package/mcp-docs/mobile/components/SubBrandLogoWordMark.txt +125 -0
  98. package/mcp-docs/mobile/components/Switch.txt +97 -0
  99. package/mcp-docs/mobile/components/TabIndicator.txt +48 -0
  100. package/mcp-docs/mobile/components/TabLabel.txt +153 -0
  101. package/mcp-docs/mobile/components/TabNavigation.txt +146 -0
  102. package/mcp-docs/mobile/components/TabbedChips.txt +142 -0
  103. package/mcp-docs/mobile/components/Tabs.txt +190 -0
  104. package/mcp-docs/mobile/components/Tag.txt +300 -0
  105. package/mcp-docs/mobile/components/Text.txt +211 -0
  106. package/mcp-docs/mobile/components/TextInput.txt +717 -0
  107. package/mcp-docs/mobile/components/ThemeProvider.txt +132 -0
  108. package/mcp-docs/mobile/components/Toast.txt +196 -0
  109. package/mcp-docs/mobile/components/Tooltip.txt +59 -0
  110. package/mcp-docs/mobile/components/TopNavBar.txt +161 -0
  111. package/mcp-docs/mobile/components/Tour.txt +158 -0
  112. package/mcp-docs/mobile/components/Tray.txt +252 -0
  113. package/mcp-docs/mobile/components/UpsellCard.txt +321 -0
  114. package/mcp-docs/mobile/components/VStack.txt +222 -0
  115. package/mcp-docs/mobile/components/XAxis.txt +621 -0
  116. package/mcp-docs/mobile/components/YAxis.txt +567 -0
  117. package/mcp-docs/mobile/getting-started/ai-overview.txt +108 -0
  118. package/mcp-docs/mobile/getting-started/installation.txt +57 -0
  119. package/mcp-docs/mobile/getting-started/introduction.txt +102 -0
  120. package/mcp-docs/mobile/getting-started/playground.txt +28 -0
  121. package/mcp-docs/mobile/getting-started/styling.txt +84 -0
  122. package/mcp-docs/mobile/getting-started/theming.txt +286 -0
  123. package/mcp-docs/mobile/hooks/useDimensions.txt +72 -0
  124. package/mcp-docs/mobile/hooks/useEventHandler.txt +120 -0
  125. package/mcp-docs/mobile/hooks/useMergeRefs.txt +116 -0
  126. package/mcp-docs/mobile/hooks/useOverlayContentContext.txt +280 -0
  127. package/mcp-docs/mobile/hooks/usePreviousValue.txt +74 -0
  128. package/mcp-docs/mobile/hooks/useRefMap.txt +178 -0
  129. package/mcp-docs/mobile/hooks/useTheme.txt +321 -0
  130. package/mcp-docs/mobile/routes.txt +139 -0
  131. package/mcp-docs/web/components/Accordion.txt +189 -0
  132. package/mcp-docs/web/components/AccordionItem.txt +31 -0
  133. package/mcp-docs/web/components/Alert.txt +164 -0
  134. package/mcp-docs/web/components/AreaChart.txt +510 -0
  135. package/mcp-docs/web/components/Avatar.txt +211 -0
  136. package/mcp-docs/web/components/AvatarButton.txt +240 -0
  137. package/mcp-docs/web/components/Banner.txt +226 -0
  138. package/mcp-docs/web/components/BarChart.txt +1267 -0
  139. package/mcp-docs/web/components/Box.txt +175 -0
  140. package/mcp-docs/web/components/Button.txt +212 -0
  141. package/mcp-docs/web/components/ButtonGroup.txt +79 -0
  142. package/mcp-docs/web/components/Calendar.txt +181 -0
  143. package/mcp-docs/web/components/Carousel.txt +1575 -0
  144. package/mcp-docs/web/components/CartesianChart.txt +1044 -0
  145. package/mcp-docs/web/components/CellMedia.txt +56 -0
  146. package/mcp-docs/web/components/Checkbox.txt +188 -0
  147. package/mcp-docs/web/components/CheckboxCell.txt +202 -0
  148. package/mcp-docs/web/components/CheckboxGroup.txt +219 -0
  149. package/mcp-docs/web/components/Chip.txt +196 -0
  150. package/mcp-docs/web/components/Coachmark.txt +188 -0
  151. package/mcp-docs/web/components/Collapsible.txt +119 -0
  152. package/mcp-docs/web/components/ContainedAssetCard.txt +232 -0
  153. package/mcp-docs/web/components/ContentCard.txt +367 -0
  154. package/mcp-docs/web/components/ContentCardBody.txt +137 -0
  155. package/mcp-docs/web/components/ContentCardFooter.txt +129 -0
  156. package/mcp-docs/web/components/ContentCardHeader.txt +147 -0
  157. package/mcp-docs/web/components/ContentCell.txt +219 -0
  158. package/mcp-docs/web/components/ControlGroup.txt +436 -0
  159. package/mcp-docs/web/components/DatePicker.txt +505 -0
  160. package/mcp-docs/web/components/Divider.txt +143 -0
  161. package/mcp-docs/web/components/DotCount.txt +149 -0
  162. package/mcp-docs/web/components/DotStatusColor.txt +58 -0
  163. package/mcp-docs/web/components/DotSymbol.txt +137 -0
  164. package/mcp-docs/web/components/Dropdown.txt +119 -0
  165. package/mcp-docs/web/components/Fallback.txt +163 -0
  166. package/mcp-docs/web/components/FloatingAssetCard.txt +250 -0
  167. package/mcp-docs/web/components/FullscreenAlert.txt +69 -0
  168. package/mcp-docs/web/components/FullscreenModal.txt +145 -0
  169. package/mcp-docs/web/components/FullscreenModalLayout.txt +187 -0
  170. package/mcp-docs/web/components/Grid.txt +236 -0
  171. package/mcp-docs/web/components/GridColumn.txt +209 -0
  172. package/mcp-docs/web/components/HStack.txt +236 -0
  173. package/mcp-docs/web/components/HeroSquare.txt +48 -0
  174. package/mcp-docs/web/components/Icon.txt +145 -0
  175. package/mcp-docs/web/components/IconButton.txt +390 -0
  176. package/mcp-docs/web/components/InputChip.txt +187 -0
  177. package/mcp-docs/web/components/Interactable.txt +193 -0
  178. package/mcp-docs/web/components/LineChart.txt +1576 -0
  179. package/mcp-docs/web/components/Link.txt +243 -0
  180. package/mcp-docs/web/components/ListCell.txt +418 -0
  181. package/mcp-docs/web/components/LogoMark.txt +84 -0
  182. package/mcp-docs/web/components/LogoWordMark.txt +93 -0
  183. package/mcp-docs/web/components/Lottie.txt +157 -0
  184. package/mcp-docs/web/components/LottieStatusAnimation.txt +57 -0
  185. package/mcp-docs/web/components/MediaQueryProvider.txt +108 -0
  186. package/mcp-docs/web/components/Modal.txt +196 -0
  187. package/mcp-docs/web/components/ModalBody.txt +117 -0
  188. package/mcp-docs/web/components/ModalFooter.txt +119 -0
  189. package/mcp-docs/web/components/ModalHeader.txt +123 -0
  190. package/mcp-docs/web/components/MultiContentModule.txt +381 -0
  191. package/mcp-docs/web/components/NavigationBar.txt +102 -0
  192. package/mcp-docs/web/components/NavigationTitle.txt +25 -0
  193. package/mcp-docs/web/components/NavigationTitleSelect.txt +45 -0
  194. package/mcp-docs/web/components/NudgeCard.txt +181 -0
  195. package/mcp-docs/web/components/Overlay.txt +171 -0
  196. package/mcp-docs/web/components/PageFooter.txt +184 -0
  197. package/mcp-docs/web/components/PageHeader.txt +243 -0
  198. package/mcp-docs/web/components/Pagination.txt +499 -0
  199. package/mcp-docs/web/components/PeriodSelector.txt +703 -0
  200. package/mcp-docs/web/components/Pictogram.txt +48 -0
  201. package/mcp-docs/web/components/Point.txt +460 -0
  202. package/mcp-docs/web/components/PortalProvider.txt +76 -0
  203. package/mcp-docs/web/components/Pressable.txt +193 -0
  204. package/mcp-docs/web/components/ProgressBar.txt +163 -0
  205. package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +212 -0
  206. package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +181 -0
  207. package/mcp-docs/web/components/ProgressCircle.txt +443 -0
  208. package/mcp-docs/web/components/Radio.txt +219 -0
  209. package/mcp-docs/web/components/RadioCell.txt +215 -0
  210. package/mcp-docs/web/components/RadioGroup.txt +288 -0
  211. package/mcp-docs/web/components/ReferenceLine.txt +451 -0
  212. package/mcp-docs/web/components/RemoteImage.txt +165 -0
  213. package/mcp-docs/web/components/RemoteImageGroup.txt +86 -0
  214. package/mcp-docs/web/components/RollingNumber.txt +1021 -0
  215. package/mcp-docs/web/components/Scrubber.txt +231 -0
  216. package/mcp-docs/web/components/SearchInput.txt +117 -0
  217. package/mcp-docs/web/components/SectionHeader.txt +217 -0
  218. package/mcp-docs/web/components/SegmentedTabs.txt +324 -0
  219. package/mcp-docs/web/components/Select.txt +224 -0
  220. package/mcp-docs/web/components/SelectChip.txt +314 -0
  221. package/mcp-docs/web/components/SelectOption.txt +165 -0
  222. package/mcp-docs/web/components/Sidebar.txt +349 -0
  223. package/mcp-docs/web/components/SidebarItem.txt +131 -0
  224. package/mcp-docs/web/components/SidebarMoreMenu.txt +30 -0
  225. package/mcp-docs/web/components/Spacer.txt +173 -0
  226. package/mcp-docs/web/components/Sparkline.txt +122 -0
  227. package/mcp-docs/web/components/SparklineGradient.txt +106 -0
  228. package/mcp-docs/web/components/SparklineInteractive.txt +153 -0
  229. package/mcp-docs/web/components/SparklineInteractiveHeader.txt +76 -0
  230. package/mcp-docs/web/components/Spinner.txt +128 -0
  231. package/mcp-docs/web/components/SpotIcon.txt +48 -0
  232. package/mcp-docs/web/components/SpotRectangle.txt +48 -0
  233. package/mcp-docs/web/components/SpotSquare.txt +48 -0
  234. package/mcp-docs/web/components/Stepper.txt +682 -0
  235. package/mcp-docs/web/components/SubBrandLogoMark.txt +125 -0
  236. package/mcp-docs/web/components/SubBrandLogoWordMark.txt +125 -0
  237. package/mcp-docs/web/components/Switch.txt +85 -0
  238. package/mcp-docs/web/components/TabIndicator.txt +48 -0
  239. package/mcp-docs/web/components/TabLabel.txt +158 -0
  240. package/mcp-docs/web/components/TabNavigation.txt +159 -0
  241. package/mcp-docs/web/components/TabbedChips.txt +155 -0
  242. package/mcp-docs/web/components/Table.txt +367 -0
  243. package/mcp-docs/web/components/TableBody.txt +83 -0
  244. package/mcp-docs/web/components/TableCaption.txt +102 -0
  245. package/mcp-docs/web/components/TableCell.txt +165 -0
  246. package/mcp-docs/web/components/TableCellFallback.txt +97 -0
  247. package/mcp-docs/web/components/TableFooter.txt +83 -0
  248. package/mcp-docs/web/components/TableHeader.txt +100 -0
  249. package/mcp-docs/web/components/TableRow.txt +140 -0
  250. package/mcp-docs/web/components/Tabs.txt +212 -0
  251. package/mcp-docs/web/components/Tag.txt +304 -0
  252. package/mcp-docs/web/components/Text.txt +232 -0
  253. package/mcp-docs/web/components/TextInput.txt +652 -0
  254. package/mcp-docs/web/components/ThemeProvider.txt +199 -0
  255. package/mcp-docs/web/components/TileButton.txt +158 -0
  256. package/mcp-docs/web/components/Toast.txt +203 -0
  257. package/mcp-docs/web/components/Tooltip.txt +89 -0
  258. package/mcp-docs/web/components/Tour.txt +179 -0
  259. package/mcp-docs/web/components/Tray.txt +288 -0
  260. package/mcp-docs/web/components/UpsellCard.txt +319 -0
  261. package/mcp-docs/web/components/VStack.txt +224 -0
  262. package/mcp-docs/web/components/XAxis.txt +619 -0
  263. package/mcp-docs/web/components/YAxis.txt +548 -0
  264. package/mcp-docs/web/getting-started/ai-overview.txt +108 -0
  265. package/mcp-docs/web/getting-started/installation.txt +103 -0
  266. package/mcp-docs/web/getting-started/introduction.txt +102 -0
  267. package/mcp-docs/web/getting-started/playground.txt +28 -0
  268. package/mcp-docs/web/getting-started/styling.txt +161 -0
  269. package/mcp-docs/web/getting-started/templates.txt +121 -0
  270. package/mcp-docs/web/getting-started/theming.txt +426 -0
  271. package/mcp-docs/web/hooks/useBreakpoints.txt +61 -0
  272. package/mcp-docs/web/hooks/useDimensions.txt +114 -0
  273. package/mcp-docs/web/hooks/useEventHandler.txt +120 -0
  274. package/mcp-docs/web/hooks/useHasMounted.txt +75 -0
  275. package/mcp-docs/web/hooks/useIsoEffect.txt +58 -0
  276. package/mcp-docs/web/hooks/useMediaQuery.txt +114 -0
  277. package/mcp-docs/web/hooks/useMergeRefs.txt +116 -0
  278. package/mcp-docs/web/hooks/useOverlayContentContext.txt +279 -0
  279. package/mcp-docs/web/hooks/usePreviousValue.txt +74 -0
  280. package/mcp-docs/web/hooks/useRefMap.txt +178 -0
  281. package/mcp-docs/web/hooks/useScrollBlocker.txt +82 -0
  282. package/mcp-docs/web/hooks/useTheme.txt +364 -0
  283. package/mcp-docs/web/routes.txt +163 -0
  284. package/package.json +1 -1
@@ -0,0 +1,825 @@
1
+ # CartesianChart
2
+
3
+ A flexible, low-level chart component for displaying data in an x/y coordinate space. Provides a foundation for building custom chart visualizations with full control over rendering.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { CartesianChart } from '@coinbase/cds-mobile-visualization'
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ CartesianChart is a customizable, SVG based component that can be used to display a variety of data in a x/y coordinate space. The underlying logic is handled by D3.
14
+
15
+ ### Basic Example
16
+
17
+ [AreaChart](/components/graphs/AreaChart/), [BarChart](/components/graphs/BarChart/), and [LineChart](/components/graphs/LineChart/) are built on top of CartesianChart and have default functionality for your chart.
18
+
19
+ ```jsx
20
+ <VStack gap={2}>
21
+ <AreaChart
22
+ enableScrubbing
23
+ height={150}
24
+ series={[
25
+ {
26
+ id: 'prices',
27
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
28
+ },
29
+ ]}
30
+ curve="monotone"
31
+ showYAxis
32
+ yAxis={{
33
+ showGrid: true,
34
+ }}
35
+ >
36
+ <Scrubber />
37
+ </AreaChart>
38
+ <BarChart
39
+ enableScrubbing
40
+ height={150}
41
+ series={[
42
+ {
43
+ id: 'prices',
44
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
45
+ },
46
+ ]}
47
+ showYAxis
48
+ yAxis={{
49
+ showGrid: true,
50
+ }}
51
+ >
52
+ <Scrubber hideOverlay seriesIds={[]} />
53
+ </BarChart>
54
+ <LineChart
55
+ enableScrubbing
56
+ height={150}
57
+ series={[
58
+ {
59
+ id: 'prices',
60
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
61
+ },
62
+ ]}
63
+ curve="monotone"
64
+ showYAxis
65
+ showArea
66
+ yAxis={{
67
+ showGrid: true,
68
+ }}
69
+ >
70
+ <Scrubber />
71
+ </LineChart>
72
+ </VStack>
73
+ ```
74
+
75
+ ### Series
76
+
77
+ Series are the data that will be displayed on the chart. Each series must have a defined `id`.
78
+
79
+ #### Series Data
80
+
81
+ You can pass in an array of numbers or an array of tuples for the `data` prop. Passing in null values is equivalent to no data at that index.
82
+
83
+ ```jsx
84
+ function ForecastedPrice() {
85
+ const theme = useTheme();
86
+
87
+ const ForecastRect = memo(({ startIndex, endIndex }) => {
88
+ const { drawingArea, getXScale } = useCartesianChartContext();
89
+
90
+ const xScale = getXScale();
91
+
92
+ if (!xScale) return;
93
+
94
+ const startX = xScale(startIndex);
95
+ const endX = xScale(endIndex);
96
+ return (
97
+ <Rect
98
+ x={startX}
99
+ y={drawingArea.y}
100
+ width={endX - startX}
101
+ height={drawingArea.height}
102
+ fill={theme.color.accentSubtleBlue}
103
+ />
104
+ );
105
+ });
106
+ return (
107
+ <CartesianChart
108
+ enableScrubbing
109
+ height={150}
110
+ series={[
111
+ {
112
+ id: 'prices',
113
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 54, 60, 64, 68, 72, 76],
114
+ color: theme.color.accentBoldBlue,
115
+ },
116
+ {
117
+ id: 'variance',
118
+ data: [
119
+ null,
120
+ null,
121
+ null,
122
+ null,
123
+ null,
124
+ null,
125
+ null,
126
+ [52, 52],
127
+ [50, 57],
128
+ [52, 63],
129
+ [55, 75],
130
+ [57, 77],
131
+ [59, 79],
132
+ [60, 80],
133
+ ],
134
+ color: theme.color.accentBoldBlue,
135
+ },
136
+ ]}
137
+ yAxis={{
138
+ showGrid: true,
139
+ }}
140
+ >
141
+ <ForecastRect startIndex={7} endIndex={13} />
142
+ <Area seriesId="variance" type="solid" curve="monotone" fillOpacity={0.3} />
143
+ <Line seriesId="prices" curve="monotone" />
144
+ </CartesianChart>
145
+ );
146
+ }
147
+ ```
148
+
149
+ #### Series Axis IDs
150
+
151
+ Each series can have a different `yAxisId`, allowing you to compare data from different contexts.
152
+
153
+ ```jsx
154
+ function SeriesAxisIds() {
155
+ const theme = useTheme();
156
+
157
+ return (
158
+ <CartesianChart
159
+ height={150}
160
+ series={[
161
+ {
162
+ id: 'revenue',
163
+ data: [455, 520, 380, 455, 190, 235],
164
+ yAxisId: 'revenue',
165
+ color: theme.color.accentBoldYellow,
166
+ },
167
+ {
168
+ id: 'profit',
169
+ data: [23, 15, 30, 56, 4, 12],
170
+ yAxisId: 'profit',
171
+ color: theme.color.fgPositive,
172
+ },
173
+ ]}
174
+ xAxis={{
175
+ data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
176
+ scaleType: 'band',
177
+ }}
178
+ yAxis={[
179
+ {
180
+ id: 'revenue',
181
+ },
182
+ {
183
+ id: 'profit',
184
+ },
185
+ ]}
186
+ >
187
+ <XAxis showLine showTickMarks />
188
+ <YAxis
189
+ showGrid
190
+ showLine
191
+ showTickMarks
192
+ axisId="revenue"
193
+ position="left"
194
+ requestedTickCount={5}
195
+ tickLabelFormatter={(value) => `$${value}k`}
196
+ width={60}
197
+ />
198
+ <YAxis
199
+ showLine
200
+ showTickMarks
201
+ axisId="profit"
202
+ requestedTickCount={5}
203
+ tickLabelFormatter={(value) => `$${value}k`}
204
+ />
205
+ <BarPlot />
206
+ </CartesianChart>
207
+ );
208
+ }
209
+ ```
210
+
211
+ #### Series Stacks
212
+
213
+ You can provide a `stackId` to stack series together.
214
+
215
+ ```jsx
216
+ function SeriesStacks() {
217
+ const theme = useTheme();
218
+
219
+ return (
220
+ <AreaChart
221
+ enableScrubbing
222
+ height={150}
223
+ series={[
224
+ {
225
+ id: 'pricesA',
226
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
227
+ stackId: 'prices',
228
+ color: theme.color.accentBoldGreen,
229
+ },
230
+ {
231
+ id: 'pricesB',
232
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
233
+ stackId: 'prices',
234
+ color: theme.color.accentBoldPurple,
235
+ },
236
+ ]}
237
+ curve="monotone"
238
+ showYAxis
239
+ yAxis={{
240
+ showGrid: true,
241
+ }}
242
+ >
243
+ <Scrubber />
244
+ </LineChart>
245
+ );
246
+ }
247
+ ```
248
+
249
+ ### Axes
250
+
251
+ You can configure your x and y axes with the `xAxis` and `yAxis` props. `xAxis` accepts an object while `yAxis` accepts an object or array.
252
+
253
+ ```jsx
254
+ <CartesianChart
255
+ height={150}
256
+ series={[
257
+ {
258
+ id: 'prices',
259
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
260
+ },
261
+ ]}
262
+ xAxis={{
263
+ scaleType: 'band',
264
+ }}
265
+ yAxis={{
266
+ domain: { min: 0 },
267
+ }}
268
+ >
269
+ <YAxis showLine showTickMarks showGrid />
270
+ <XAxis showLine showTickMarks />
271
+ <BarPlot />
272
+ </CartesianChart>
273
+ ```
274
+
275
+ For more info, learn about [XAxis](/components/graphs/XAxis/#axis-config) and [YAxis](/components/graphs/YAxis/#axis-config) configuration.
276
+
277
+ ### Inset
278
+
279
+ You can adjust the inset around the entire chart (outside the axes) with the `inset` prop. This is useful for when you want to have components that are outside of the drawing area of the data but still within the chart svg.
280
+
281
+ You can also remove the default inset, such as to have a compact line chart.
282
+
283
+ ```jsx
284
+ function Insets() {
285
+ const theme = useTheme();
286
+
287
+ const data = [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58];
288
+
289
+ const formatPrice = useCallback((dataIndex: number) => {
290
+ const price = data[dataIndex];
291
+ return `$${price.toLocaleString('en-US', {
292
+ minimumFractionDigits: 2,
293
+ maximumFractionDigits: 2,
294
+ })}`;
295
+ }, []);
296
+
297
+ return (
298
+ <VStack gap={2}>
299
+ <VStack gap={1}>
300
+ <Text font="label1">No inset</Text>
301
+ <LineChart
302
+ height={100}
303
+ inset={0}
304
+ series={[
305
+ {
306
+ id: 'prices',
307
+ data,
308
+ },
309
+ ]}
310
+ yAxis={{ domainLimit: 'strict' }}
311
+ curve="monotone"
312
+ showArea
313
+ style={{ border: `2px solid ${theme.color.fgPrimary}` }}
314
+ />
315
+ </VStack>
316
+ <VStack gap={1}>
317
+ <Text font="label1">Custom inset</Text>
318
+ <LineChart
319
+ enableScrubbing
320
+ height={100}
321
+ inset={{ left: 10, top: 16, right: 10, bottom: 10 }}
322
+ series={[
323
+ {
324
+ id: 'prices',
325
+ data,
326
+ },
327
+ ]}
328
+ yAxis={{ domainLimit: 'strict' }}
329
+ curve="monotone"
330
+ showArea
331
+ style={{ border: `2px solid ${theme.color.fgPrimary}` }}
332
+ >
333
+ <Scrubber label={formatPrice} />
334
+ </LineChart>
335
+ </VStack>
336
+ <VStack gap={1}>
337
+ <Text font="label1">Default inset</Text>
338
+ <LineChart
339
+ enableScrubbing
340
+ height={100}
341
+ series={[
342
+ {
343
+ id: 'prices',
344
+ data,
345
+ },
346
+ ]}
347
+ yAxis={{ domainLimit: 'strict' }}
348
+ curve="monotone"
349
+ showArea
350
+ style={{ border: `2px solid ${theme.color.fgPrimary}` }}
351
+ >
352
+ <Scrubber label={formatPrice} />
353
+ </LineChart>
354
+ </VStack>
355
+ </VStack>
356
+ );
357
+ }
358
+ ```
359
+
360
+ ### Scrubbing
361
+
362
+ CartesianChart has built-in scrubbing functionality that can be enabled with the `enableScrubbing` prop. This will then enable the usage of `onScrubberPositionChange` to get the current position of the scrubber as the user interacts with the chart.
363
+
364
+ One example of using the scrubber is to provide haptic feedback when the user interacts with the chart. You can trigger a light impact each time the scrubber position changes or even do a dynamic impact depending on the value change, such as a heavy impact when the user crosses a significant boundary of time or reaches a significant market event.
365
+
366
+ ```jsx
367
+ function Scrubbing() {
368
+ const [scrubIndex, setScrubIndex] = useState(undefined);
369
+
370
+ const onScrubberPositionChange = useCallback((index: number | undefined) => {
371
+ // Do a light impact when the scrubber position changes
372
+ // An initial and final impact is already configured by the chart
373
+ if (scrubIndex !== undefined && index !== undefined) {
374
+ void Haptics.lightImpact();
375
+ }
376
+ setScrubIndex(index);
377
+ }, [scrubIndex]);
378
+
379
+ return (
380
+ <VStack gap={2}>
381
+ <Text font="label1">Scrubber index: {scrubIndex ?? 'none'}</Text>
382
+ <LineChart
383
+ enableScrubbing
384
+ onScrubberPositionChange={onScrubberPositionChange}
385
+ height={150}
386
+ series={[
387
+ {
388
+ id: 'prices',
389
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
390
+ },
391
+ ]}
392
+ curve="monotone"
393
+ showYAxis
394
+ showArea
395
+ yAxis={{
396
+ showGrid: true,
397
+ width: 32
398
+ }}
399
+ inset={{ right: 0 }}
400
+ >
401
+ <Scrubber />
402
+ </LineChart>
403
+ </VStack>
404
+ );
405
+ }
406
+ ```
407
+
408
+ ### Customization
409
+
410
+ #### Price with Volume
411
+
412
+ You can showcase the price and volume of an asset over time within one chart.
413
+
414
+ ```jsx
415
+ function PriceWithVolume() {
416
+ const theme = useTheme();
417
+
418
+ const [scrubIndex, setScrubIndex] = useState(null);
419
+ const btcData = btcCandles
420
+ .slice(0, 180)
421
+ .reverse()
422
+
423
+ const btcPrices = btcData.map((candle) => parseFloat(candle.close));
424
+ const btcVolumes = btcData.map((candle) => parseFloat(candle.volume));
425
+ const btcDates = btcData.map((candle) => new Date(parseInt(candle.start) * 1000));
426
+
427
+ const formatPrice = useCallback((price: number) => {
428
+ return `$${price.toLocaleString('en-US', {
429
+ minimumFractionDigits: 2,
430
+ maximumFractionDigits: 2,
431
+ })}`;
432
+ }, []);
433
+
434
+ const formatPriceInThousands = useCallback((price: number) => {
435
+ return `$${(price / 1000).toLocaleString('en-US', {
436
+ minimumFractionDigits: 0,
437
+ maximumFractionDigits: 2,
438
+ })}k`;
439
+ }, []);
440
+
441
+ const formatVolume = useCallback((volume: number) => {
442
+ return `${(volume / 1000).toFixed(2)}K`;
443
+ }, []);
444
+
445
+ const formatDate = useCallback((date: Date) => {
446
+ return date.toLocaleDateString('en-US', {
447
+ month: 'short',
448
+ day: 'numeric',
449
+ });
450
+ }, []);
451
+
452
+ const displayIndex = scrubIndex ?? btcPrices.length - 1;
453
+ const currentPrice = btcPrices[displayIndex];
454
+ const currentVolume = btcVolumes[displayIndex];
455
+ const currentDate = btcDates[displayIndex];
456
+ const priceChange = displayIndex > 0
457
+ ? ((currentPrice - btcPrices[displayIndex - 1]) / btcPrices[displayIndex - 1])
458
+ : 0;
459
+
460
+ const accessibilityLabel = useMemo(() => {
461
+ if (scrubIndex === null) return `Current Bitcoin price: ${formatPrice(currentPrice)}, Volume: ${formatVolume(currentVolume)}`;
462
+ return `Bitcoin price at ${formatDate(currentDate)}: ${formatPrice(currentPrice)}, Volume: ${formatVolume(currentVolume)}`;
463
+ }, [scrubIndex, currentPrice, currentVolume, currentDate, formatPrice, formatVolume, formatDate]);
464
+
465
+ const ThinSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={1} />);
466
+
467
+ const headerId = useId();
468
+
469
+ return (
470
+ <VStack gap={2}>
471
+ <SectionHeader
472
+ id={headerId}
473
+ style={{ padding: 0 }}
474
+ title={<Text font="title1">Bitcoin</Text>}
475
+ balance={<Text font="title2">{formatPrice(currentPrice)}</Text>}
476
+ end={
477
+ <HStack gap={2}>
478
+ <VStack justifyContent="center" alignItems="flex-end">
479
+ <Text font="label1">{formatDate(currentDate)}</Text>
480
+ <Text font="label2">{formatVolume(currentVolume)}</Text>
481
+ </VStack>
482
+ <VStack justifyContent="center">
483
+ <RemoteImage source={assets.btc.imageUrl} size="xl" shape="circle" />
484
+ </VStack>
485
+ </HStack>
486
+ }
487
+ />
488
+ <CartesianChart
489
+ enableScrubbing
490
+ onScrubberPositionChange={setScrubIndex}
491
+ height={150}
492
+ series={[
493
+ {
494
+ id: 'prices',
495
+ data: btcPrices,
496
+ color: assets.btc.color,
497
+ yAxisId: 'price',
498
+ },
499
+ {
500
+ id: 'volume',
501
+ data: btcVolumes,
502
+ color: theme.color.fgMuted,
503
+ yAxisId: 'volume',
504
+ },
505
+ ]}
506
+ style={{ outlineColor: assets.btc.color }}
507
+ xAxis={{ scaleType: 'band', range: ({ min, max }) => ({ min, max: max - 16 }) }}
508
+ yAxis={[
509
+ {
510
+ id: 'price',
511
+ domain: ({ min, max }) => ({ min: min * 0.9, max }),
512
+ },
513
+ {
514
+ id: 'volume',
515
+ range: ({ min, max }) => ({ min: max - 32, max }),
516
+ },
517
+ ]}
518
+ accessibilityLabel={accessibilityLabel}
519
+ aria-labelledby={headerId}
520
+ inset={{ top: 8, left: 8, right: 0, bottom: 0 }}
521
+ >
522
+ <YAxis axisId="price" showGrid tickLabelFormatter={formatPriceInThousands} width={48} GridLineComponent={ThinSolidLine} />
523
+ <BarPlot seriesIds={['volume']} />
524
+ <Line seriesId="prices" curve="monotone" showArea />
525
+ <Scrubber seriesIds={['prices']} />
526
+ </CartesianChart>
527
+ </VStack>
528
+ );
529
+ }
530
+ ```
531
+
532
+ #### Earnings History
533
+
534
+ You can also create your own type of cartesian chart by using `getSeriesData`, `getXScale`, and `getYScale` directly.
535
+
536
+ ```jsx
537
+ function EarningsHistory() {
538
+ const theme = useTheme();
539
+ const CirclePlot = memo(({ seriesId, opacity = 1 }: { seriesId: string, opacity?: number }) => {
540
+ const { drawingArea, getSeries, getSeriesData, getXScale, getYScale } = useCartesianChartContext();
541
+ const series = getSeries(seriesId);
542
+ const data = getSeriesData(seriesId);
543
+ const xScale = getXScale();
544
+ const yScale = getYScale(series?.yAxisId);
545
+
546
+ if (!xScale || !yScale || !data || !isCategoricalScale(xScale)) return null;
547
+
548
+ const yScaleSize = Math.abs(yScale.range()[1] - yScale.range()[0]);
549
+
550
+ // Have circle diameter be the smaller of the x scale bandwidth or 10% of the y space available
551
+ const diameter = Math.min(xScale.bandwidth(), yScaleSize / 10);
552
+
553
+ return (
554
+ <G>
555
+ {data.map((value, index) => {
556
+ if (value === null || value === undefined) return null;
557
+
558
+ // Get x position from band scale - center of the band
559
+ const xPos = xScale(index);
560
+ if (xPos === undefined) return null;
561
+
562
+ const centerX = xPos + xScale.bandwidth() / 2;
563
+
564
+ // Get y position from value
565
+ const yValue = Array.isArray(value) ? value[1] : value;
566
+ const centerY = yScale(yValue);
567
+ if (centerY === undefined) return null;
568
+
569
+ return (
570
+ <Circle
571
+ key={`${seriesId}-${index}`}
572
+ cx={centerX}
573
+ cy={centerY}
574
+ fill={series?.color || theme.color.fgPrimary}
575
+ opacity={opacity}
576
+ r={diameter / 2}
577
+ />
578
+ );
579
+ })}
580
+ </G>
581
+ );
582
+ });
583
+
584
+ const quarters = useMemo(() => ['Q1', 'Q2', 'Q3', 'Q4'], []);
585
+ const estimatedEPS = useMemo(() => [1.71, 1.82, 1.93, 2.34], []);
586
+ const actualEPS = useMemo(() => [1.68, 1.83, 2.01, 2.24], []);
587
+
588
+ const formatEarningAmount = useCallback((value: number) => {
589
+ return `$${value.toLocaleString('en-US', {
590
+ minimumFractionDigits: 2,
591
+ maximumFractionDigits: 2,
592
+ })}`;
593
+ }, []);
594
+
595
+ const surprisePercentage = useCallback(
596
+ (index: number): ChartTextChildren => {
597
+ const percentage = (actualEPS[index] - estimatedEPS[index]) / estimatedEPS[index];
598
+ const percentageString = percentage.toLocaleString('en-US', {
599
+ style: 'percent',
600
+ minimumFractionDigits: 2,
601
+ maximumFractionDigits: 2,
602
+ });
603
+
604
+ return (
605
+ <tspan
606
+ style={{
607
+ fill: percentage > 0 ? theme.color.fgPositive : theme.color.fgNegative,
608
+ fontWeight: 'bold',
609
+ }}
610
+ >
611
+ {percentage > 0 ? '+' : ''}
612
+ {percentageString}
613
+ </tspan>
614
+ );
615
+ },
616
+ [actualEPS, estimatedEPS],
617
+ );
618
+
619
+ const LegendItem = memo(({ opacity = 1, label }: { opacity?: number, label: string }) => {
620
+ return (
621
+ <Box alignItems="center" gap={0.5}>
622
+ <LegendDot opacity={opacity} />
623
+ <Text font="label2">{label}</Text>
624
+ </Box>
625
+ );
626
+ });
627
+
628
+ const LegendDot = memo((props: BoxBaseProps) => {
629
+ return <Box borderRadius={1000} width={10} height={10} background="bgPositive" {...props} />;
630
+ });
631
+
632
+ return (
633
+ <VStack gap={0.5}>
634
+ <CartesianChart
635
+ overflow="visible"
636
+ animate={false}
637
+ height={150}
638
+ padding={0}
639
+ series={[
640
+ {
641
+ id: 'estimatedEPS',
642
+ data: estimatedEPS,
643
+ color: theme.color.bgPositive,
644
+ },
645
+ { id: 'actualEPS', data: actualEPS, color: theme.color.bgPositive },
646
+ ]}
647
+ xAxis={{ scaleType: 'band', categoryPadding: 0.25 }}
648
+ >
649
+ <YAxis
650
+ showGrid
651
+ position="left"
652
+ requestedTickCount={3}
653
+ tickLabelFormatter={formatEarningAmount}
654
+ />
655
+ <XAxis height={20} tickLabelFormatter={(index) => quarters[index]} />
656
+ <XAxis height={20} tickLabelFormatter={surprisePercentage} />
657
+ <CirclePlot opacity={0.5} seriesId="estimatedEPS" />
658
+ <CirclePlot seriesId="actualEPS" />
659
+ </CartesianChart>
660
+ <HStack justifyContent="flex-end" gap={2}>
661
+ <LegendItem opacity={0.5} label="Estimated EPS" />
662
+ <LegendItem label="Actual EPS" />
663
+ </HStack>
664
+ </VStack>
665
+ );
666
+ }
667
+ ```
668
+
669
+ #### Trading Trends
670
+
671
+ You can have multiple axes with different domains and ranges to showcase different pieces of data over the time time period.
672
+
673
+ ```jsx
674
+ function TradingTrends() {
675
+ const theme = useTheme();
676
+
677
+ function TradingTrends() {
678
+ const profitData = [34, 24, 28, -4, 8, -16, -3, 12, 24, 18, 20, 28];
679
+ const gains = profitData.map((value) => (value > 0 ? value : 0));
680
+ const losses = profitData.map((value) => (value < 0 ? value : 0));
681
+
682
+ const renderProfit = useCallback((value: number) => {
683
+ return `$${value}M`;
684
+ }, []);
685
+
686
+ const ThinSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={1} strokeLinecap="butt" />);
687
+ const ThickSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={2} strokeLinecap="butt" />);
688
+
689
+ return (
690
+ <CartesianChart
691
+ height={150}
692
+ series={[
693
+ { id: 'gains', data: gains, yAxisId: 'profit', color: theme.color.bgPositive, stackId: 'bars' },
694
+ { id: 'losses', data: losses, yAxisId: 'profit', color: theme.color.bgNegative, stackId: 'bars' },
695
+ {
696
+ id: 'revenue',
697
+ data: [128, 118, 122, 116, 120, 114, 118, 122, 126, 130, 134, 138],
698
+ yAxisId: 'revenue',
699
+ color: theme.color.fgMuted,
700
+ },
701
+ ]}
702
+ xAxis={{ scaleType: 'band', data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }}
703
+ yAxis={[
704
+ { id: 'profit', range: ({ min, max }) => ({ min: min, max: max - 64 }), domain: { min: -40, max: 40 } },
705
+ { id: 'revenue', range: ({ min, max }) => ({ min: max - 64, max }), domain: { min: 100 } },
706
+ ]}
707
+ >
708
+ <YAxis axisId="profit" position="left" showGrid tickLabelFormatter={renderProfit} GridLineComponent={ThinSolidLine} />
709
+ <XAxis />
710
+ <ReferenceLine LineComponent={ThickSolidLine} dataY={0} yAxisId="profit" stroke={`rgba(${theme.color.gray15.slice(4)})`} />
711
+ <BarPlot seriesIds={['gains', 'losses']} />
712
+ <Line seriesId="revenue" curve="monotone" showArea />
713
+ </CartesianChart>
714
+ );
715
+ }
716
+ }
717
+ ```
718
+
719
+ ## Props
720
+
721
+ | Prop | Type | Required | Default | Description |
722
+ | --- | --- | --- | --- | --- |
723
+ | `alignContent` | `flex-start \| flex-end \| center \| stretch \| space-between \| space-around \| space-evenly` | No | `-` | - |
724
+ | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
725
+ | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
726
+ | `allowOverflowGestures` | `boolean` | No | `-` | Allows continuous gestures on the chart to continue outside the bounds of the chart element. |
727
+ | `animate` | `boolean` | No | `true` | Whether to animate the chart. |
728
+ | `animated` | `boolean` | No | `-` | - |
729
+ | `aspectRatio` | `string \| number` | No | `-` | - |
730
+ | `background` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
731
+ | `borderBottomLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
732
+ | `borderBottomRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
733
+ | `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
734
+ | `borderColor` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
735
+ | `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
736
+ | `borderRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
737
+ | `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
738
+ | `borderTopLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
739
+ | `borderTopRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
740
+ | `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
741
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
742
+ | `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
743
+ | `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
744
+ | `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
745
+ | `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
746
+ | `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
747
+ | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
748
+ | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
749
+ | `bottom` | `string \| number` | No | `-` | - |
750
+ | `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
751
+ | `columnGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
752
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
753
+ | `display` | `flex \| none` | No | `-` | - |
754
+ | `elevation` | `0 \| 1 \| 2` | No | `-` | Determines box shadow styles. Parent should have overflow set to visible to ensure styles are not clipped. |
755
+ | `enableScrubbing` | `boolean` | No | `-` | Enables scrubbing interactions. When true, allows scrubbing and makes scrubber components interactive. |
756
+ | `flexBasis` | `string \| number` | No | `-` | - |
757
+ | `flexDirection` | `row \| column \| row-reverse \| column-reverse` | No | `-` | - |
758
+ | `flexGrow` | `number` | No | `-` | - |
759
+ | `flexShrink` | `number` | No | `-` | - |
760
+ | `flexWrap` | `wrap \| nowrap \| wrap-reverse` | No | `-` | - |
761
+ | `font` | `inherit \| FontFamily` | No | `-` | - |
762
+ | `fontFamily` | `inherit \| FontFamily` | No | `-` | - |
763
+ | `fontSize` | `inherit \| FontSize` | No | `-` | - |
764
+ | `fontWeight` | `inherit \| FontWeight` | No | `-` | - |
765
+ | `gap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
766
+ | `height` | `string \| number` | No | `-` | Chart height. If not provided, will use the containers measured height. |
767
+ | `inset` | `number \| Partial<ChartInset>` | No | `-` | Inset around the entire chart (outside the axes). |
768
+ | `justifyContent` | `flex-start \| flex-end \| center \| space-between \| space-around \| space-evenly` | No | `-` | - |
769
+ | `key` | `Key \| null` | No | `-` | - |
770
+ | `left` | `string \| number` | No | `-` | - |
771
+ | `lineHeight` | `inherit \| LineHeight` | No | `-` | - |
772
+ | `margin` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
773
+ | `marginBottom` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
774
+ | `marginEnd` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
775
+ | `marginStart` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
776
+ | `marginTop` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
777
+ | `marginX` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
778
+ | `marginY` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
779
+ | `maxHeight` | `string \| number` | No | `-` | - |
780
+ | `maxWidth` | `string \| number` | No | `-` | - |
781
+ | `minHeight` | `string \| number` | No | `-` | - |
782
+ | `minWidth` | `string \| number` | No | `-` | - |
783
+ | `onPointerCancel` | `((event: PointerEvent) => void)` | No | `-` | - |
784
+ | `onPointerCancelCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
785
+ | `onPointerDown` | `((event: PointerEvent) => void)` | No | `-` | - |
786
+ | `onPointerDownCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
787
+ | `onPointerEnter` | `((event: PointerEvent) => void)` | No | `-` | - |
788
+ | `onPointerEnterCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
789
+ | `onPointerLeave` | `((event: PointerEvent) => void)` | No | `-` | - |
790
+ | `onPointerLeaveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
791
+ | `onPointerMove` | `((event: PointerEvent) => void)` | No | `-` | - |
792
+ | `onPointerMoveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
793
+ | `onPointerUp` | `((event: PointerEvent) => void)` | No | `-` | - |
794
+ | `onPointerUpCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
795
+ | `onScrubberPositionChange` | `((index: number) => void) \| undefined` | No | `-` | Callback fired when the scrubber position changes. Receives the dataIndex of the scrubber or undefined when not scrubbing. |
796
+ | `opacity` | `number \| AnimatedNode` | No | `-` | - |
797
+ | `overflow` | `visible \| hidden \| scroll` | No | `-` | - |
798
+ | `padding` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
799
+ | `paddingBottom` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
800
+ | `paddingEnd` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
801
+ | `paddingStart` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
802
+ | `paddingTop` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
803
+ | `paddingX` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
804
+ | `paddingY` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
805
+ | `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
806
+ | `position` | `absolute \| relative \| static \| fixed \| sticky` | No | `-` | - |
807
+ | `ref` | `((instance: View \| null) => void) \| RefObject<View> \| null` | No | `-` | - |
808
+ | `right` | `string \| number` | No | `-` | - |
809
+ | `rowGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
810
+ | `series` | `Series[]` | No | `-` | Configuration objects that define how to visualize the data. Each series contains its own data array. |
811
+ | `style` | `false \| RegisteredStyle<ViewStyle> \| Value \| AnimatedInterpolation<string \| number> \| WithAnimatedObject<ViewStyle> \| WithAnimatedArray<Falsy \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<Falsy \| ViewStyle \| RegisteredStyle<ViewStyle>> \| readonly (Falsy \| ViewStyle \| RegisteredStyle<ViewStyle>)[]> \| null` | No | `-` | - |
812
+ | `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Used to locate this view in end-to-end tests. |
813
+ | `textAlign` | `auto \| left \| right \| center \| justify` | No | `-` | - |
814
+ | `textDecorationLine` | `none \| underline \| line-through \| underline line-through` | No | `-` | - |
815
+ | `textDecorationStyle` | `solid \| dotted \| dashed \| double` | No | `-` | - |
816
+ | `textTransform` | `none \| capitalize \| uppercase \| lowercase` | No | `-` | - |
817
+ | `top` | `string \| number` | No | `-` | - |
818
+ | `transform` | `string \| (({ scaleX: AnimatableNumericValue; } & { scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scaleY: AnimatableNumericValue; } & { scaleX?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateX: AnimatableNumericValue \| ${number}%; } & { scaleX?: undefined; scaleY?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateY: AnimatableNumericValue \| ${number}%; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ perspective: AnimatableNumericValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotate: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateX: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateY: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateZ: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scale: AnimatableNumericValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewX: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewY: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; matrix?: undefined; }) \| ({ matrix: AnimatableNumericValue[]; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; }))[]` | No | `-` | - |
819
+ | `userSelect` | `auto \| none \| text \| contain \| all` | No | `-` | - |
820
+ | `width` | `string \| number` | No | `-` | Chart width. If not provided, will use the containers measured width. |
821
+ | `xAxis` | `Partial<Omit<AxisConfigProps, id>>` | No | `-` | Configuration for x-axis. |
822
+ | `yAxis` | `Partial<AxisConfigProps> \| Partial<AxisConfigProps>[]` | No | `-` | Configuration for y-axis(es). Can be a single config or array of configs. If array, first axis becomes default if no id is specified. |
823
+ | `zIndex` | `number` | No | `-` | - |
824
+
825
+