@coinbase/cds-mcp-server 8.62.1 → 8.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/mcp-docs/mobile/components/Accordion.txt +2 -0
  3. package/mcp-docs/mobile/components/AccordionItem.txt +2 -0
  4. package/mcp-docs/mobile/components/Alert.txt +2 -0
  5. package/mcp-docs/mobile/components/AreaChart.txt +3 -1
  6. package/mcp-docs/mobile/components/Avatar.txt +2 -0
  7. package/mcp-docs/mobile/components/AvatarButton.txt +2 -0
  8. package/mcp-docs/mobile/components/Banner.txt +3 -1
  9. package/mcp-docs/mobile/components/BarChart.txt +3 -1
  10. package/mcp-docs/mobile/components/Box.txt +2 -0
  11. package/mcp-docs/mobile/components/BrowserBar.txt +2 -0
  12. package/mcp-docs/mobile/components/Button.txt +4 -2
  13. package/mcp-docs/mobile/components/ButtonGroup.txt +2 -0
  14. package/mcp-docs/mobile/components/Calendar.txt +2 -0
  15. package/mcp-docs/mobile/components/Carousel.txt +2 -0
  16. package/mcp-docs/mobile/components/CartesianChart.txt +2 -0
  17. package/mcp-docs/mobile/components/CellMedia.txt +3 -1
  18. package/mcp-docs/mobile/components/Checkbox.txt +2 -0
  19. package/mcp-docs/mobile/components/CheckboxCell.txt +2 -0
  20. package/mcp-docs/mobile/components/CheckboxGroup.txt +2 -0
  21. package/mcp-docs/mobile/components/Chip.txt +2 -0
  22. package/mcp-docs/mobile/components/Coachmark.txt +2 -0
  23. package/mcp-docs/mobile/components/Collapsible.txt +2 -0
  24. package/mcp-docs/mobile/components/Combobox.txt +2 -0
  25. package/mcp-docs/mobile/components/ContainedAssetCard.txt +2 -0
  26. package/mcp-docs/mobile/components/ContentCard.txt +2 -0
  27. package/mcp-docs/mobile/components/ContentCardBody.txt +2 -0
  28. package/mcp-docs/mobile/components/ContentCardFooter.txt +2 -0
  29. package/mcp-docs/mobile/components/ContentCardHeader.txt +2 -0
  30. package/mcp-docs/mobile/components/ContentCell.txt +2 -0
  31. package/mcp-docs/mobile/components/ControlGroup.txt +2 -0
  32. package/mcp-docs/mobile/components/DataCard.txt +56 -0
  33. package/mcp-docs/mobile/components/DateInput.txt +2 -0
  34. package/mcp-docs/mobile/components/DatePicker.txt +2 -0
  35. package/mcp-docs/mobile/components/Divider.txt +2 -0
  36. package/mcp-docs/mobile/components/DotCount.txt +2 -0
  37. package/mcp-docs/mobile/components/DotStatusColor.txt +2 -0
  38. package/mcp-docs/mobile/components/DotSymbol.txt +3 -1
  39. package/mcp-docs/mobile/components/Fallback.txt +2 -0
  40. package/mcp-docs/mobile/components/FloatingAssetCard.txt +2 -0
  41. package/mcp-docs/mobile/components/HStack.txt +2 -0
  42. package/mcp-docs/mobile/components/HeroSquare.txt +3 -1
  43. package/mcp-docs/mobile/components/Icon.txt +3 -1
  44. package/mcp-docs/mobile/components/IconButton.txt +3 -1
  45. package/mcp-docs/mobile/components/InputChip.txt +2 -0
  46. package/mcp-docs/mobile/components/Interactable.txt +2 -0
  47. package/mcp-docs/mobile/components/Legend.txt +2 -0
  48. package/mcp-docs/mobile/components/LineChart.txt +3 -1
  49. package/mcp-docs/mobile/components/Link.txt +2 -0
  50. package/mcp-docs/mobile/components/ListCell.txt +2 -0
  51. package/mcp-docs/mobile/components/LogoMark.txt +2 -0
  52. package/mcp-docs/mobile/components/LogoWordMark.txt +2 -0
  53. package/mcp-docs/mobile/components/Lottie.txt +2 -0
  54. package/mcp-docs/mobile/components/LottieStatusAnimation.txt +2 -0
  55. package/mcp-docs/mobile/components/MediaCard.txt +2 -0
  56. package/mcp-docs/mobile/components/MediaChip.txt +2 -0
  57. package/mcp-docs/mobile/components/MessagingCard.txt +2 -0
  58. package/mcp-docs/mobile/components/Modal.txt +2 -0
  59. package/mcp-docs/mobile/components/ModalBody.txt +2 -0
  60. package/mcp-docs/mobile/components/ModalFooter.txt +2 -0
  61. package/mcp-docs/mobile/components/ModalHeader.txt +3 -1
  62. package/mcp-docs/mobile/components/MultiContentModule.txt +2 -0
  63. package/mcp-docs/mobile/components/NavigationTitle.txt +2 -0
  64. package/mcp-docs/mobile/components/NavigationTitleSelect.txt +2 -0
  65. package/mcp-docs/mobile/components/NudgeCard.txt +2 -0
  66. package/mcp-docs/mobile/components/Numpad.txt +2 -0
  67. package/mcp-docs/mobile/components/Overlay.txt +2 -0
  68. package/mcp-docs/mobile/components/PageFooter.txt +2 -0
  69. package/mcp-docs/mobile/components/PageHeader.txt +2 -0
  70. package/mcp-docs/mobile/components/PercentageBarChart.txt +819 -0
  71. package/mcp-docs/mobile/components/PeriodSelector.txt +4 -2
  72. package/mcp-docs/mobile/components/Pictogram.txt +2 -0
  73. package/mcp-docs/mobile/components/Point.txt +2 -0
  74. package/mcp-docs/mobile/components/PortalProvider.txt +2 -0
  75. package/mcp-docs/mobile/components/Pressable.txt +2 -0
  76. package/mcp-docs/mobile/components/ProgressBar.txt +2 -0
  77. package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +2 -0
  78. package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +2 -0
  79. package/mcp-docs/mobile/components/ProgressCircle.txt +2 -0
  80. package/mcp-docs/mobile/components/Radio.txt +2 -0
  81. package/mcp-docs/mobile/components/RadioCell.txt +2 -0
  82. package/mcp-docs/mobile/components/RadioGroup.txt +2 -0
  83. package/mcp-docs/mobile/components/ReferenceLine.txt +2 -0
  84. package/mcp-docs/mobile/components/RemoteImage.txt +2 -0
  85. package/mcp-docs/mobile/components/RemoteImageGroup.txt +2 -0
  86. package/mcp-docs/mobile/components/RollingNumber.txt +2 -0
  87. package/mcp-docs/mobile/components/Scrubber.txt +2 -0
  88. package/mcp-docs/mobile/components/SearchInput.txt +2 -0
  89. package/mcp-docs/mobile/components/SectionHeader.txt +2 -0
  90. package/mcp-docs/mobile/components/SegmentedTabs.txt +4 -2
  91. package/mcp-docs/mobile/components/Select.txt +2 -0
  92. package/mcp-docs/mobile/components/SelectAlpha.txt +2 -0
  93. package/mcp-docs/mobile/components/SelectChip.txt +2 -0
  94. package/mcp-docs/mobile/components/SelectChipAlpha.txt +2 -0
  95. package/mcp-docs/mobile/components/SelectOption.txt +2 -0
  96. package/mcp-docs/mobile/components/SlideButton.txt +2 -0
  97. package/mcp-docs/mobile/components/Spacer.txt +2 -0
  98. package/mcp-docs/mobile/components/Sparkline.txt +2 -0
  99. package/mcp-docs/mobile/components/SparklineGradient.txt +2 -0
  100. package/mcp-docs/mobile/components/SparklineInteractive.txt +2 -0
  101. package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +2 -0
  102. package/mcp-docs/mobile/components/Spinner.txt +2 -0
  103. package/mcp-docs/mobile/components/SpotIcon.txt +2 -0
  104. package/mcp-docs/mobile/components/SpotRectangle.txt +2 -0
  105. package/mcp-docs/mobile/components/SpotSquare.txt +2 -0
  106. package/mcp-docs/mobile/components/Stepper.txt +2 -0
  107. package/mcp-docs/mobile/components/SubBrandLogoMark.txt +2 -0
  108. package/mcp-docs/mobile/components/SubBrandLogoWordMark.txt +2 -0
  109. package/mcp-docs/mobile/components/Switch.txt +2 -0
  110. package/mcp-docs/mobile/components/TabIndicator.txt +2 -0
  111. package/mcp-docs/mobile/components/TabLabel.txt +2 -0
  112. package/mcp-docs/mobile/components/TabNavigation.txt +2 -0
  113. package/mcp-docs/mobile/components/TabbedChips.txt +2 -0
  114. package/mcp-docs/mobile/components/TabbedChipsAlpha.txt +2 -0
  115. package/mcp-docs/mobile/components/Tabs.txt +69 -107
  116. package/mcp-docs/mobile/components/Tag.txt +4 -2
  117. package/mcp-docs/mobile/components/Text.txt +2 -0
  118. package/mcp-docs/mobile/components/TextInput.txt +2 -0
  119. package/mcp-docs/mobile/components/ThemeProvider.txt +2 -0
  120. package/mcp-docs/mobile/components/Toast.txt +2 -0
  121. package/mcp-docs/mobile/components/Tooltip.txt +2 -0
  122. package/mcp-docs/mobile/components/TopNavBar.txt +2 -0
  123. package/mcp-docs/mobile/components/Tour.txt +13 -0
  124. package/mcp-docs/mobile/components/Tray.txt +2 -0
  125. package/mcp-docs/mobile/components/UpsellCard.txt +2 -0
  126. package/mcp-docs/mobile/components/VStack.txt +2 -0
  127. package/mcp-docs/mobile/components/XAxis.txt +2 -0
  128. package/mcp-docs/mobile/components/YAxis.txt +2 -0
  129. package/mcp-docs/mobile/getting-started/ai-overview.txt +2 -0
  130. package/mcp-docs/mobile/getting-started/colors.txt +66 -0
  131. package/mcp-docs/mobile/getting-started/installation.txt +2 -0
  132. package/mcp-docs/mobile/getting-started/introduction.txt +2 -0
  133. package/mcp-docs/mobile/getting-started/playground.txt +2 -0
  134. package/mcp-docs/mobile/getting-started/styling.txt +2 -0
  135. package/mcp-docs/mobile/getting-started/templates.txt +2 -0
  136. package/mcp-docs/mobile/getting-started/theming.txt +2 -0
  137. package/mcp-docs/mobile/guides/v8-migration-guide.txt +2 -0
  138. package/mcp-docs/mobile/hooks/useDimensions.txt +2 -0
  139. package/mcp-docs/mobile/hooks/useEventHandler.txt +2 -0
  140. package/mcp-docs/mobile/hooks/useMergeRefs.txt +2 -0
  141. package/mcp-docs/mobile/hooks/useOverlayContentContext.txt +2 -0
  142. package/mcp-docs/mobile/hooks/usePreviousValue.txt +2 -0
  143. package/mcp-docs/mobile/hooks/useRefMap.txt +2 -0
  144. package/mcp-docs/mobile/hooks/useTheme.txt +2 -0
  145. package/mcp-docs/mobile/routes.txt +3 -1
  146. package/mcp-docs/web/components/Accordion.txt +2 -0
  147. package/mcp-docs/web/components/AccordionItem.txt +2 -0
  148. package/mcp-docs/web/components/Alert.txt +2 -0
  149. package/mcp-docs/web/components/AreaChart.txt +3 -1
  150. package/mcp-docs/web/components/Avatar.txt +2 -0
  151. package/mcp-docs/web/components/AvatarButton.txt +2 -0
  152. package/mcp-docs/web/components/Banner.txt +3 -1
  153. package/mcp-docs/web/components/BarChart.txt +3 -1
  154. package/mcp-docs/web/components/Box.txt +2 -0
  155. package/mcp-docs/web/components/Button.txt +4 -2
  156. package/mcp-docs/web/components/ButtonGroup.txt +2 -0
  157. package/mcp-docs/web/components/Calendar.txt +2 -0
  158. package/mcp-docs/web/components/Carousel.txt +2 -0
  159. package/mcp-docs/web/components/CartesianChart.txt +2 -0
  160. package/mcp-docs/web/components/CellMedia.txt +3 -1
  161. package/mcp-docs/web/components/Checkbox.txt +2 -0
  162. package/mcp-docs/web/components/CheckboxCell.txt +2 -0
  163. package/mcp-docs/web/components/CheckboxGroup.txt +2 -0
  164. package/mcp-docs/web/components/Chip.txt +2 -0
  165. package/mcp-docs/web/components/Coachmark.txt +2 -0
  166. package/mcp-docs/web/components/Collapsible.txt +2 -0
  167. package/mcp-docs/web/components/Combobox.txt +2 -0
  168. package/mcp-docs/web/components/ContainedAssetCard.txt +2 -0
  169. package/mcp-docs/web/components/ContentCard.txt +2 -0
  170. package/mcp-docs/web/components/ContentCardBody.txt +2 -0
  171. package/mcp-docs/web/components/ContentCardFooter.txt +2 -0
  172. package/mcp-docs/web/components/ContentCardHeader.txt +2 -0
  173. package/mcp-docs/web/components/ContentCell.txt +2 -0
  174. package/mcp-docs/web/components/ControlGroup.txt +2 -0
  175. package/mcp-docs/web/components/DataCard.txt +100 -0
  176. package/mcp-docs/web/components/DateInput.txt +2 -0
  177. package/mcp-docs/web/components/DatePicker.txt +2 -0
  178. package/mcp-docs/web/components/Divider.txt +2 -0
  179. package/mcp-docs/web/components/DotCount.txt +2 -0
  180. package/mcp-docs/web/components/DotStatusColor.txt +2 -0
  181. package/mcp-docs/web/components/DotSymbol.txt +3 -1
  182. package/mcp-docs/web/components/Dropdown.txt +2 -0
  183. package/mcp-docs/web/components/Fallback.txt +2 -0
  184. package/mcp-docs/web/components/FloatingAssetCard.txt +2 -0
  185. package/mcp-docs/web/components/FocusTrap.txt +2 -0
  186. package/mcp-docs/web/components/FullscreenAlert.txt +3 -1
  187. package/mcp-docs/web/components/FullscreenModal.txt +2 -0
  188. package/mcp-docs/web/components/FullscreenModalLayout.txt +2 -0
  189. package/mcp-docs/web/components/Grid.txt +2 -0
  190. package/mcp-docs/web/components/GridColumn.txt +2 -0
  191. package/mcp-docs/web/components/HStack.txt +2 -0
  192. package/mcp-docs/web/components/HeroSquare.txt +3 -1
  193. package/mcp-docs/web/components/Icon.txt +3 -1
  194. package/mcp-docs/web/components/IconButton.txt +3 -1
  195. package/mcp-docs/web/components/InputChip.txt +2 -0
  196. package/mcp-docs/web/components/Interactable.txt +2 -0
  197. package/mcp-docs/web/components/Legend.txt +2 -0
  198. package/mcp-docs/web/components/LineChart.txt +3 -1
  199. package/mcp-docs/web/components/Link.txt +2 -0
  200. package/mcp-docs/web/components/ListCell.txt +2 -0
  201. package/mcp-docs/web/components/LogoMark.txt +2 -0
  202. package/mcp-docs/web/components/LogoWordMark.txt +2 -0
  203. package/mcp-docs/web/components/Lottie.txt +2 -0
  204. package/mcp-docs/web/components/LottieStatusAnimation.txt +2 -0
  205. package/mcp-docs/web/components/MediaCard.txt +2 -0
  206. package/mcp-docs/web/components/MediaChip.txt +2 -0
  207. package/mcp-docs/web/components/MediaQueryProvider.txt +2 -0
  208. package/mcp-docs/web/components/MessagingCard.txt +2 -0
  209. package/mcp-docs/web/components/Modal.txt +2 -0
  210. package/mcp-docs/web/components/ModalBody.txt +2 -0
  211. package/mcp-docs/web/components/ModalFooter.txt +2 -0
  212. package/mcp-docs/web/components/ModalHeader.txt +3 -1
  213. package/mcp-docs/web/components/MultiContentModule.txt +2 -0
  214. package/mcp-docs/web/components/NavigationBar.txt +2 -0
  215. package/mcp-docs/web/components/NavigationTitle.txt +2 -0
  216. package/mcp-docs/web/components/NavigationTitleSelect.txt +2 -0
  217. package/mcp-docs/web/components/NudgeCard.txt +2 -0
  218. package/mcp-docs/web/components/Overlay.txt +2 -0
  219. package/mcp-docs/web/components/PageFooter.txt +2 -0
  220. package/mcp-docs/web/components/PageHeader.txt +2 -0
  221. package/mcp-docs/web/components/Pagination.txt +2 -0
  222. package/mcp-docs/web/components/PercentageBarChart.txt +814 -0
  223. package/mcp-docs/web/components/PeriodSelector.txt +4 -2
  224. package/mcp-docs/web/components/Pictogram.txt +2 -0
  225. package/mcp-docs/web/components/Point.txt +2 -0
  226. package/mcp-docs/web/components/PopoverPanel.txt +283 -0
  227. package/mcp-docs/web/components/PortalProvider.txt +2 -0
  228. package/mcp-docs/web/components/Pressable.txt +2 -0
  229. package/mcp-docs/web/components/ProgressBar.txt +2 -0
  230. package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +2 -0
  231. package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +2 -0
  232. package/mcp-docs/web/components/ProgressCircle.txt +2 -0
  233. package/mcp-docs/web/components/Radio.txt +2 -0
  234. package/mcp-docs/web/components/RadioCell.txt +2 -0
  235. package/mcp-docs/web/components/RadioGroup.txt +2 -0
  236. package/mcp-docs/web/components/ReferenceLine.txt +2 -0
  237. package/mcp-docs/web/components/RemoteImage.txt +2 -0
  238. package/mcp-docs/web/components/RemoteImageGroup.txt +2 -0
  239. package/mcp-docs/web/components/RollingNumber.txt +2 -0
  240. package/mcp-docs/web/components/Scrubber.txt +2 -0
  241. package/mcp-docs/web/components/SearchInput.txt +2 -0
  242. package/mcp-docs/web/components/SectionHeader.txt +2 -0
  243. package/mcp-docs/web/components/SegmentedControl.txt +2 -0
  244. package/mcp-docs/web/components/SegmentedTabs.txt +4 -2
  245. package/mcp-docs/web/components/Select.txt +2 -0
  246. package/mcp-docs/web/components/SelectAlpha.txt +2 -0
  247. package/mcp-docs/web/components/SelectChip.txt +2 -0
  248. package/mcp-docs/web/components/SelectChipAlpha.txt +2 -0
  249. package/mcp-docs/web/components/SelectOption.txt +2 -0
  250. package/mcp-docs/web/components/Sidebar.txt +2 -0
  251. package/mcp-docs/web/components/SidebarItem.txt +3 -1
  252. package/mcp-docs/web/components/SidebarMoreMenu.txt +2 -0
  253. package/mcp-docs/web/components/Spacer.txt +2 -0
  254. package/mcp-docs/web/components/Sparkline.txt +2 -0
  255. package/mcp-docs/web/components/SparklineGradient.txt +2 -0
  256. package/mcp-docs/web/components/SparklineInteractive.txt +2 -0
  257. package/mcp-docs/web/components/SparklineInteractiveHeader.txt +2 -0
  258. package/mcp-docs/web/components/Spinner.txt +2 -0
  259. package/mcp-docs/web/components/SpotIcon.txt +2 -0
  260. package/mcp-docs/web/components/SpotRectangle.txt +2 -0
  261. package/mcp-docs/web/components/SpotSquare.txt +2 -0
  262. package/mcp-docs/web/components/Stepper.txt +2 -0
  263. package/mcp-docs/web/components/SubBrandLogoMark.txt +2 -0
  264. package/mcp-docs/web/components/SubBrandLogoWordMark.txt +2 -0
  265. package/mcp-docs/web/components/Switch.txt +2 -0
  266. package/mcp-docs/web/components/TabIndicator.txt +2 -0
  267. package/mcp-docs/web/components/TabLabel.txt +2 -0
  268. package/mcp-docs/web/components/TabNavigation.txt +2 -0
  269. package/mcp-docs/web/components/TabbedChips.txt +2 -0
  270. package/mcp-docs/web/components/TabbedChipsAlpha.txt +2 -0
  271. package/mcp-docs/web/components/Table.txt +2 -0
  272. package/mcp-docs/web/components/TableBody.txt +2 -0
  273. package/mcp-docs/web/components/TableCaption.txt +2 -0
  274. package/mcp-docs/web/components/TableCell.txt +2 -0
  275. package/mcp-docs/web/components/TableCellFallback.txt +2 -0
  276. package/mcp-docs/web/components/TableFooter.txt +2 -0
  277. package/mcp-docs/web/components/TableHeader.txt +2 -0
  278. package/mcp-docs/web/components/TableRow.txt +2 -0
  279. package/mcp-docs/web/components/Tabs.txt +72 -104
  280. package/mcp-docs/web/components/Tag.txt +4 -2
  281. package/mcp-docs/web/components/Text.txt +2 -0
  282. package/mcp-docs/web/components/TextInput.txt +2 -0
  283. package/mcp-docs/web/components/ThemeProvider.txt +2 -0
  284. package/mcp-docs/web/components/TileButton.txt +2 -0
  285. package/mcp-docs/web/components/Toast.txt +2 -0
  286. package/mcp-docs/web/components/Tooltip.txt +2 -0
  287. package/mcp-docs/web/components/Tour.txt +14 -0
  288. package/mcp-docs/web/components/Tray.txt +2 -0
  289. package/mcp-docs/web/components/UpsellCard.txt +2 -0
  290. package/mcp-docs/web/components/VStack.txt +2 -0
  291. package/mcp-docs/web/components/XAxis.txt +2 -0
  292. package/mcp-docs/web/components/YAxis.txt +2 -0
  293. package/mcp-docs/web/getting-started/ai-overview.txt +2 -0
  294. package/mcp-docs/web/getting-started/colors.txt +66 -0
  295. package/mcp-docs/web/getting-started/installation.txt +3 -1
  296. package/mcp-docs/web/getting-started/introduction.txt +2 -0
  297. package/mcp-docs/web/getting-started/playground.txt +2 -0
  298. package/mcp-docs/web/getting-started/styling.txt +2 -0
  299. package/mcp-docs/web/getting-started/templates.txt +2 -0
  300. package/mcp-docs/web/getting-started/theming.txt +2 -0
  301. package/mcp-docs/web/guides/v8-migration-guide.txt +2 -0
  302. package/mcp-docs/web/hooks/useBreakpoints.txt +2 -0
  303. package/mcp-docs/web/hooks/useDimensions.txt +2 -0
  304. package/mcp-docs/web/hooks/useEventHandler.txt +2 -0
  305. package/mcp-docs/web/hooks/useHasMounted.txt +2 -0
  306. package/mcp-docs/web/hooks/useIsoEffect.txt +2 -0
  307. package/mcp-docs/web/hooks/useMediaQuery.txt +2 -0
  308. package/mcp-docs/web/hooks/useMergeRefs.txt +2 -0
  309. package/mcp-docs/web/hooks/useOverlayContentContext.txt +2 -0
  310. package/mcp-docs/web/hooks/usePreviousValue.txt +2 -0
  311. package/mcp-docs/web/hooks/useRefMap.txt +2 -0
  312. package/mcp-docs/web/hooks/useScrollBlocker.txt +2 -0
  313. package/mcp-docs/web/hooks/useTheme.txt +2 -0
  314. package/mcp-docs/web/routes.txt +4 -1
  315. package/package.json +1 -1
@@ -0,0 +1,819 @@
1
+ # PercentageBarChart
2
+
3
+ **📖 Live documentation:** https://cds.coinbase.com/components/charts/PercentageBarChart/?platform=mobile
4
+
5
+ A bar chart component for comparing share or mix across categories as percentages. Supports horizontal and vertical orientations, 100% stacked bars, and a fixed 0–100% value axis.
6
+
7
+ ## Import
8
+
9
+ ```tsx
10
+ import { PercentageBarChart } from '@coinbase/cds-mobile-visualization'
11
+ ```
12
+
13
+ ## Examples
14
+
15
+ PercentageBarChart is a wrapper for [BarChart](/components/charts/BarChart) that simplifies the creation of segmented, part-to-whole horizontal visualizations. Charts are built using `@shopify/react-native-skia`.
16
+
17
+ ### Basics
18
+
19
+ The only prop required is `series`, which takes an array of series objects. Each series object needs an `id` and a value for `data`.
20
+
21
+ ```jsx
22
+ <PercentageBarChart
23
+ height={16}
24
+ series={[
25
+ { id: 'a', data: 70, label: 'Segment A', color: theme.color.fgPositive },
26
+ { id: 'b', data: 45, label: 'Segment B', color: theme.color.fgNegative },
27
+ ]}
28
+ />
29
+ ```
30
+
31
+ ### Stack Gap
32
+
33
+ Use `stackGap` to add space between segments while keeping the full bar length.
34
+
35
+ ```jsx
36
+ <PercentageBarChart
37
+ height={20}
38
+ series={[
39
+ { id: 'a', data: 40, label: 'A', color: theme.color.fgPositive },
40
+ { id: 'b', data: 35, label: 'B', color: theme.color.fgWarning },
41
+ { id: 'c', data: 20, label: 'C', color: theme.color.accentBoldPurple },
42
+ ]}
43
+ stackGap={6}
44
+ />
45
+ ```
46
+
47
+ ### Border Radius
48
+
49
+ Bars use `borderRadius` like in [BarChart](/components/charts/BarChart/#border-radius).
50
+
51
+ ```jsx
52
+ <PercentageBarChart
53
+ borderRadius={1000}
54
+ height={28}
55
+ series={[
56
+ { id: 'a', data: 45, color: `rgb(${theme.spectrum.purple30})`, label: 'A' },
57
+ { id: 'b', data: 30, color: `rgb(${theme.spectrum.blue30})`, label: 'B' },
58
+ { id: 'c', data: 20, color: `rgb(${theme.spectrum.teal30})`, label: 'C' },
59
+ ]}
60
+ stackGap={2}
61
+ />
62
+ ```
63
+
64
+ ### Data
65
+
66
+ **Negative** values, **`null`**, and **missing indices** from a shorter `data` array are treated as **zero** for that segment at that category. A **single-number** `data` value applies to the **first** category only—later categories count as zero for that series.
67
+
68
+ ```jsx
69
+ <PercentageBarChart
70
+ height={100}
71
+ showXAxis
72
+ showYAxis
73
+ barMinSize={12}
74
+ borderRadius={8}
75
+ series={[
76
+ { id: 'a', data: [40, null, 20], label: 'A', color: theme.color.fgPositive },
77
+ { id: 'b', data: [-10, 60, 30], label: 'B', color: theme.color.fgWarning },
78
+ { id: 'c', data: [null, 50], label: 'C', color: theme.color.fgMuted },
79
+ { id: 'd', data: 45, label: 'D', color: theme.color.fgNegative },
80
+ ]}
81
+ stackGap={2}
82
+ xAxis={{ showTickMarks: true }}
83
+ yAxis={{
84
+ data: ['Q1', 'Q2', 'Q3'],
85
+ position: 'left',
86
+ categoryPadding: 0.45,
87
+ }}
88
+ />
89
+ ```
90
+
91
+ If **every** group sums to zero after clamping, nothing is drawn—handle that in surrounding UI.
92
+
93
+ ### Customization
94
+
95
+ #### Bar Stack Spacing
96
+
97
+ Use `categoryPadding` on the band axis to adjust spacing between stacks.
98
+
99
+ ```jsx
100
+ <PercentageBarChart
101
+ legend
102
+ showXAxis
103
+ showYAxis
104
+ barMinSize={18}
105
+ borderRadius={24}
106
+ height={240}
107
+ series={[
108
+ { id: 'a', data: [55, 40, 35], label: 'A', color: theme.color.fgWarning },
109
+ { id: 'b', data: [30, 45, 25], label: 'B', color: theme.color.accentBoldPurple },
110
+ { id: 'c', data: [15, 15, 40], label: 'C', color: theme.color.fgMuted },
111
+ ]}
112
+ stackGap={4}
113
+ xAxis={{ showTickMarks: true }}
114
+ yAxis={{
115
+ data: ['Q1', 'Q2', 'Q3'],
116
+ position: 'left',
117
+ categoryPadding: 0.7,
118
+ }}
119
+ />
120
+ ```
121
+
122
+ #### Minimum Bar Size
123
+
124
+ `barMinSize` keeps a thin share wide enough to see or tap when one segment dominates:
125
+
126
+ ```jsx
127
+ <PercentageBarChart
128
+ barMinSize={16}
129
+ height={16}
130
+ series={[
131
+ { id: 'a', data: 99, label: 'Segment A', color: theme.color.fgPositive },
132
+ { id: 'b', data: 0.001, label: 'Segment B', color: theme.color.fgNegative },
133
+ ]}
134
+ stackGap={2}
135
+ />
136
+ ```
137
+
138
+ #### Custom Components
139
+
140
+ ##### Slanted Stack Gap
141
+
142
+ A custom `BarComponent` that replaces the default rectangular inner edges with **slanted cuts**, creating a parallelogram-shaped gap purely from the path geometry—no `stackGap` needed. Outer ends stay pill-shaped.
143
+
144
+ ```jsx
145
+ function SlantedStackExample() {
146
+ function getSlantedHorizontalBarPath(
147
+ x,
148
+ y,
149
+ width,
150
+ height,
151
+ borderRadius,
152
+ pillLeft,
153
+ pillRight,
154
+ slantDx,
155
+ ) {
156
+ if (width <= 0 || height <= 0 || pillLeft === pillRight) return undefined;
157
+
158
+ const r = Math.min(borderRadius, height / 2, width / 2);
159
+ const s = Math.min(Math.max(0, slantDx), width - r * 2);
160
+ const x0 = x,
161
+ x1 = x + width,
162
+ y0 = y,
163
+ y1 = y + height;
164
+
165
+ if (pillLeft && !pillRight) {
166
+ return [
167
+ `M ${x0 + r} ${y0}`,
168
+ `L ${x1} ${y0}`,
169
+ `L ${x1 - s} ${y1}`,
170
+ `L ${x0 + r} ${y1}`,
171
+ `A ${r} ${r} 0 0 1 ${x0} ${y1 - r}`,
172
+ `L ${x0} ${y0 + r}`,
173
+ `A ${r} ${r} 0 0 1 ${x0 + r} ${y0}`,
174
+ 'Z',
175
+ ].join(' ');
176
+ }
177
+
178
+ return [
179
+ `M ${x0 + s} ${y0}`,
180
+ `L ${x1 - r} ${y0}`,
181
+ `A ${r} ${r} 0 0 1 ${x1} ${y0 + r}`,
182
+ `L ${x1} ${y1 - r}`,
183
+ `A ${r} ${r} 0 0 1 ${x1 - r} ${y1}`,
184
+ `L ${x0} ${y1}`,
185
+ 'Z',
186
+ ].join(' ');
187
+ }
188
+
189
+ const SLANT_DX = 8;
190
+
191
+ const SlantedStackBar = memo(function SlantedStackBar(props) {
192
+ const { layout } = useCartesianChartContext();
193
+ const {
194
+ x,
195
+ y,
196
+ width,
197
+ height,
198
+ borderRadius = 4,
199
+ roundTop,
200
+ roundBottom,
201
+ dataX,
202
+ d: defaultD,
203
+ fill,
204
+ fillOpacity,
205
+ origin: _origin,
206
+ dataY: _dataY,
207
+ seriesId: _seriesId,
208
+ minSize: _minSize,
209
+ ...rest
210
+ } = props;
211
+
212
+ const d = useMemo(() => {
213
+ if (layout !== 'horizontal') {
214
+ return (
215
+ defaultD ??
216
+ getBarPath(x, y, width, height, borderRadius, !!roundTop, !!roundBottom, layout)
217
+ );
218
+ }
219
+ const isLeftmost = Array.isArray(dataX) && Math.abs(dataX[0]) < 1;
220
+ return (
221
+ getSlantedHorizontalBarPath(
222
+ x,
223
+ y,
224
+ width,
225
+ height,
226
+ borderRadius,
227
+ isLeftmost,
228
+ !isLeftmost,
229
+ SLANT_DX,
230
+ ) ??
231
+ defaultD ??
232
+ getBarPath(x, y, width, height, borderRadius, !!roundTop, !!roundBottom, layout)
233
+ );
234
+ }, [layout, defaultD, dataX, x, y, width, height, borderRadius, roundTop, roundBottom]);
235
+
236
+ if (!d) return null;
237
+
238
+ return (
239
+ <Path
240
+ {...rest}
241
+ animate
242
+ clipPath={null}
243
+ d={d}
244
+ fill={fill}
245
+ fillOpacity={fillOpacity}
246
+ transitions={props.transitions}
247
+ />
248
+ );
249
+ });
250
+
251
+ return (
252
+ <PercentageBarChart
253
+ animate={false}
254
+ BarComponent={SlantedStackBar}
255
+ barMinSize={12}
256
+ borderRadius={24}
257
+ height={12}
258
+ series={[
259
+ { id: 'team-a', data: 40, color: `rgb(${theme.spectrum.teal60})` },
260
+ { id: 'team-b', data: 61, color: theme.color.accentBoldBlue },
261
+ ]}
262
+ />
263
+ );
264
+ }
265
+ ```
266
+
267
+ ##### Dotted bar
268
+
269
+ A custom `BarComponent` can render a **dotted fill** (Skia path from `getDottedAreaPath` plus an outlined `DefaultBar`). Set `BarComponent` on **one series** to emphasize a single segment, or on the **chart** to apply the same look to every segment.
270
+
271
+ ```jsx
272
+ function DottedBarExamples() {
273
+ const DOTTED_BAR_PATTERN_SIZE = 4;
274
+ const DOTTED_BAR_DOT_SIZE = 1;
275
+ const DOTTED_BAR_OUTLINE_STROKE_WIDTH = 2;
276
+
277
+ const DottedBarComponent = memo(function DottedBarComponent(props) {
278
+ const { x, y, width, height, fill, d } = props;
279
+
280
+ const dottedPath = useMemo(
281
+ () =>
282
+ getDottedAreaPath({ x, y, width, height }, DOTTED_BAR_PATTERN_SIZE, DOTTED_BAR_DOT_SIZE),
283
+ [x, y, width, height],
284
+ );
285
+
286
+ const barClipPath = useMemo(
287
+ () => (d ? (Skia.Path.MakeFromSVGString(d) ?? undefined) : undefined),
288
+ [d],
289
+ );
290
+
291
+ const dotsSkiaPath = useMemo(
292
+ () => (dottedPath ? (Skia.Path.MakeFromSVGString(dottedPath) ?? undefined) : undefined),
293
+ [dottedPath],
294
+ );
295
+
296
+ return (
297
+ <>
298
+ <Group clip={barClipPath}>
299
+ {dotsSkiaPath && fill ? <SkiaPath color={fill} path={dotsSkiaPath} style="fill" /> : null}
300
+ </Group>
301
+ <DefaultBar
302
+ {...props}
303
+ fill={undefined}
304
+ stroke={fill}
305
+ strokeWidth={DOTTED_BAR_OUTLINE_STROKE_WIDTH}
306
+ />
307
+ </>
308
+ );
309
+ });
310
+
311
+ const dottedBarSeries = [
312
+ {
313
+ id: 'segment-a',
314
+ data: 60,
315
+ label: 'Segment A',
316
+ color: `rgb(${theme.spectrum.teal60})`,
317
+ BarComponent: DottedBarComponent,
318
+ },
319
+ { id: 'segment-b', data: 30, label: 'Segment B', color: `rgb(${theme.spectrum.chartreuse50})` },
320
+ { id: 'segment-c', data: 10, label: 'Segment C', color: `rgb(${theme.spectrum.indigo40})` },
321
+ ];
322
+
323
+ const dottedBarSeriesPlain = [
324
+ { id: 'segment-a', data: 60, label: 'Segment A', color: `rgb(${theme.spectrum.teal60})` },
325
+ { id: 'segment-b', data: 30, label: 'Segment B', color: `rgb(${theme.spectrum.chartreuse50})` },
326
+ { id: 'segment-c', data: 10, label: 'Segment C', color: `rgb(${theme.spectrum.indigo40})` },
327
+ ];
328
+
329
+ return (
330
+ <VStack gap={3}>
331
+ <VStack gap={1}>
332
+ <Text color="fgMuted" font="label2">
333
+ First series only
334
+ </Text>
335
+ <PercentageBarChart height={24} series={dottedBarSeries} stackGap={4} />
336
+ </VStack>
337
+ <VStack gap={1}>
338
+ <Text color="fgMuted" font="label2">
339
+ Chart-level BarComponent
340
+ </Text>
341
+ <PercentageBarChart
342
+ BarComponent={DottedBarComponent}
343
+ height={24}
344
+ series={dottedBarSeriesPlain}
345
+ stackGap={4}
346
+ />
347
+ </VStack>
348
+ </VStack>
349
+ );
350
+ }
351
+ ```
352
+
353
+ ### Animations
354
+
355
+ Configure motion with the `transitions` prop. Toggle motion with `animate`.
356
+
357
+ ```jsx
358
+ function AnimationsExample() {
359
+ const [animate, setAnimate] = useState(true);
360
+
361
+ function randomShares() {
362
+ const raw = [Math.random() + 0.1, Math.random() + 0.1, Math.random() + 0.1];
363
+ const sum = raw[0] + raw[1] + raw[2];
364
+ return raw.map((v) => Math.max(1, Math.round((v / sum) * 100)));
365
+ }
366
+
367
+ function generateData() {
368
+ return [randomShares(), randomShares(), randomShares()];
369
+ }
370
+
371
+ const [data, setData] = useState(generateData);
372
+
373
+ useEffect(() => {
374
+ const id = setInterval(() => setData(generateData()), 800);
375
+ return () => clearInterval(id);
376
+ }, []);
377
+
378
+ const series = [
379
+ { id: 'btc', data: data.map((q) => q[0]), label: 'BTC', color: assets.btc.color },
380
+ {
381
+ id: 'eth',
382
+ data: data.map((q) => q[1]),
383
+ label: 'ETH',
384
+ color: assets.eth.color,
385
+ },
386
+ {
387
+ id: 'other',
388
+ data: data.map((q) => q[2]),
389
+ label: 'Other',
390
+ color: theme.color.fgMuted,
391
+ },
392
+ ];
393
+
394
+ return (
395
+ <VStack gap={2}>
396
+ <HStack justifyContent="flex-end" alignItems="center" gap={1}>
397
+ <Switch checked={animate} onChange={() => setAnimate((v) => !v)}>
398
+ Animate
399
+ </Switch>
400
+ </HStack>
401
+ <PercentageBarChart
402
+ animate={animate}
403
+ legend
404
+ showXAxis
405
+ showYAxis
406
+ barMinSize={14}
407
+ borderRadius={48}
408
+ height={220}
409
+ inset={{ left: 24, right: 0, top: 0, bottom: 0 }}
410
+ legendPosition="top"
411
+ transitions={{
412
+ enter: { type: 'timing', duration: 400, staggerDelay: 0.2 },
413
+ update: { type: 'timing', duration: 300 },
414
+ }}
415
+ series={series}
416
+ stackGap={2}
417
+ xAxis={{
418
+ showTickMarks: true,
419
+ tickLabelFormatter: (value) => `${value}%`,
420
+ }}
421
+ yAxis={{
422
+ categoryPadding: 0.75,
423
+ data: ['Q1 2025', 'Q2 2025', 'Q3 2025'],
424
+ position: 'left',
425
+ requestedTickCount: 5,
426
+ showTickMarks: true,
427
+ }}
428
+ />
429
+ </VStack>
430
+ );
431
+ }
432
+ ```
433
+
434
+ #### Stagger Delay
435
+
436
+ ```jsx
437
+ <PercentageBarChart
438
+ transitions={{
439
+ enter: { type: 'spring', stiffness: 700, damping: 80, staggerDelay: 250 },
440
+ }}
441
+ height={120}
442
+ showYAxis
443
+ series={[
444
+ { id: 'a', data: [20, 35, 50, 40], color: theme.color.fgPositive },
445
+ { id: 'b', data: [30, 25, 20, 30], color: theme.color.fgWarning },
446
+ { id: 'c', data: [50, 40, 30, 30], color: theme.color.accentBoldPurple },
447
+ ]}
448
+ stackGap={2}
449
+ yAxis={{ data: ['A', 'B', 'C', 'D'], position: 'left', categoryPadding: 0.4 }}
450
+ />
451
+ ```
452
+
453
+ #### Delay
454
+
455
+ ```jsx
456
+ <PercentageBarChart
457
+ transitions={{
458
+ enter: { type: 'spring', stiffness: 700, damping: 80, delay: 250 },
459
+ }}
460
+ height={120}
461
+ series={[
462
+ { id: 'a', data: 60, color: theme.color.fgPositive },
463
+ { id: 'b', data: 40, color: theme.color.fgMuted },
464
+ ]}
465
+ stackGap={2}
466
+ />
467
+ ```
468
+
469
+ ### Accessibility
470
+
471
+ Unlike [BarChart](/components/charts/BarChart/), `PercentageBarChart` does **not** expose scrubbing props. Provide an `accessibilityLabel` on the chart so assistive technologies can describe the visualization. Optionally set `legendAccessibilityLabel` when using the built-in legend.
472
+
473
+ ```jsx
474
+ <PercentageBarChart
475
+ accessibilityLabel="Stacked percentage chart: roughly half confirmed and half needs review."
476
+ height={24}
477
+ legend
478
+ legendAccessibilityLabel="Allocation legend"
479
+ series={[
480
+ { id: 'yes', data: 52, label: 'Confirmed', color: theme.color.fgPositive },
481
+ { id: 'no', data: 48, label: 'Needs review', color: theme.color.fgWarning },
482
+ ]}
483
+ stackGap={2}
484
+ />
485
+ ```
486
+
487
+ ### Composed Examples
488
+
489
+ #### Live-updating Data
490
+
491
+ Using a custom legend, you can create a prediction markets-style chart that stays in sync when data changes.
492
+
493
+ ```jsx
494
+ function LiveFeedExample() {
495
+ const liveFeedSubtitleBase = 100;
496
+ const liveFeedYesDollarsPerPercentPoint = (182 - liveFeedSubtitleBase) / 50;
497
+ const liveFeedNoDollarsPerPercentPoint = (222 - liveFeedSubtitleBase) / 50;
498
+
499
+ function getLiveFeedProjectedValue(seriesId, percentage) {
500
+ const inverseShare = 100 - percentage;
501
+ if (seriesId === 'yes') {
502
+ return Math.round(liveFeedSubtitleBase + inverseShare * liveFeedYesDollarsPerPercentPoint);
503
+ }
504
+ if (seriesId === 'no') {
505
+ return Math.round(liveFeedSubtitleBase + inverseShare * liveFeedNoDollarsPerPercentPoint);
506
+ }
507
+ return undefined;
508
+ }
509
+
510
+ const liveFeedCurrencyFormat = {
511
+ style: 'currency',
512
+ currency: 'USD',
513
+ maximumFractionDigits: 0,
514
+ };
515
+
516
+ const LiveFeedCTALegendEntry = memo(function LiveFeedCTALegendEntry({ seriesId, label, color }) {
517
+ const { series } = useCartesianChartContext();
518
+ const seriesData = series.find((s) => s.id === seriesId);
519
+ const percentage = seriesData?.data?.[0] ?? 0;
520
+ const projectedValue = getLiveFeedProjectedValue(seriesId, percentage);
521
+
522
+ return (
523
+ <Button
524
+ compact
525
+ borderRadius={200}
526
+ onPress={() => {}}
527
+ style={{ backgroundColor: color, borderColor: color }}
528
+ width="25%"
529
+ >
530
+ <VStack alignItems="center" gap={0.25}>
531
+ <HStack alignItems="center" gap={0.5}>
532
+ <Text color="fgInverse" font="label1">
533
+ {label} {'· '}
534
+ </Text>
535
+ <RollingNumber
536
+ color="fgInverse"
537
+ font="label1"
538
+ format={{ style: 'percent', maximumFractionDigits: 0 }}
539
+ value={percentage / 100}
540
+ />
541
+ </HStack>
542
+ {projectedValue != null && (
543
+ <HStack alignItems="center" gap={0.5}>
544
+ <Text color="fgInverse" font="legal">
545
+ ${liveFeedSubtitleBase} →
546
+ </Text>
547
+ <RollingNumber
548
+ color="fgInverse"
549
+ font="legal"
550
+ format={liveFeedCurrencyFormat}
551
+ value={projectedValue}
552
+ />
553
+ </HStack>
554
+ )}
555
+ </VStack>
556
+ </Button>
557
+ );
558
+ });
559
+
560
+ function LiveFeedChart() {
561
+ const [tick, setTick] = useState(0);
562
+
563
+ const yesValue = 50 + Math.sin(tick * 0.05) * 49;
564
+ const noValue = 50 - Math.sin(tick * 0.05) * 49;
565
+
566
+ const series = [
567
+ { id: 'yes', data: yesValue, label: 'Yes', color: theme.color.fgPositive },
568
+ { id: 'no', data: noValue, label: 'No', color: theme.color.fgNegative },
569
+ ];
570
+
571
+ useEffect(() => {
572
+ const id = setInterval(() => setTick((t) => t + 4), 1000);
573
+ return () => clearInterval(id);
574
+ }, []);
575
+
576
+ return (
577
+ <PercentageBarChart
578
+ barMinSize={16}
579
+ borderRadius={1000}
580
+ height={78}
581
+ legend={
582
+ <Legend
583
+ EntryComponent={LiveFeedCTALegendEntry}
584
+ justifyContent="space-evenly"
585
+ paddingTop={1}
586
+ />
587
+ }
588
+ legendPosition="bottom"
589
+ series={series}
590
+ stackGap={2}
591
+ />
592
+ );
593
+ }
594
+
595
+ return <LiveFeedChart />;
596
+ }
597
+ ```
598
+
599
+ #### Vertical Mix
600
+
601
+ Monthly **BTC / ETH / Other** portfolio allocation across a full year, with `layout="vertical"` and the legend on the right.
602
+
603
+ ```jsx
604
+ <PercentageBarChart
605
+ legend
606
+ showXAxis
607
+ showYAxis
608
+ barMinSize={28}
609
+ borderRadius={48}
610
+ height={240}
611
+ layout="vertical"
612
+ legendPosition="top"
613
+ series={[
614
+ {
615
+ id: 'btc',
616
+ data: [55, 52, 48, 45, 50, 58, 62, 57, 53, 49, 44, 46],
617
+ label: 'BTC',
618
+ color: assets.btc.color,
619
+ },
620
+ {
621
+ id: 'eth',
622
+ data: [30, 33, 35, 38, 32, 27, 25, 29, 34, 37, 40, 38],
623
+ label: 'ETH',
624
+ color: assets.eth.color,
625
+ },
626
+ {
627
+ id: 'other',
628
+ data: [15, 15, 17, 17, 18, 15, 13, 14, 13, 14, 16, 16],
629
+ label: 'Other',
630
+ color: theme.color.fgMuted,
631
+ },
632
+ ]}
633
+ stackGap={1}
634
+ xAxis={{
635
+ categoryPadding: 0.5,
636
+ data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
637
+ position: 'bottom',
638
+ showTickMarks: true,
639
+ }}
640
+ />
641
+ ```
642
+
643
+ #### Buy vs Sell
644
+
645
+ You can combine a PercentageBarChart with a custom legend to create a buy vs sell chart.
646
+
647
+ ```jsx
648
+ function BuyVsSellExample() {
649
+ const series = [
650
+ { id: 'buy', data: 76, color: theme.color.fgPositive, legendShape: 'circle' },
651
+ { id: 'sell', data: 24, color: theme.color.fgNegative, legendShape: 'square' },
652
+ ];
653
+
654
+ function BuyVsSellLegend() {
655
+ const [buy, sell] = series;
656
+ return (
657
+ <HStack gap={1} justifyContent="space-between">
658
+ <DefaultLegendEntry
659
+ color={buy.color}
660
+ label={
661
+ <Text color="fgMuted" font="legal">
662
+ {`${buy.data}% bought`}
663
+ </Text>
664
+ }
665
+ seriesId={buy.id}
666
+ shape={buy.legendShape}
667
+ />
668
+ <DefaultLegendEntry
669
+ color={sell.color}
670
+ label={
671
+ <Text color="fgMuted" font="legal">
672
+ {`${sell.data}% sold`}
673
+ </Text>
674
+ }
675
+ seriesId={sell.id}
676
+ shape={sell.legendShape}
677
+ />
678
+ </HStack>
679
+ );
680
+ }
681
+
682
+ return (
683
+ <VStack gap={1.5}>
684
+ <PercentageBarChart
685
+ barMinSize={8}
686
+ borderRadius={24}
687
+ height={8}
688
+ series={series}
689
+ stackGap={4}
690
+ />
691
+ <BuyVsSellLegend />
692
+ </VStack>
693
+ );
694
+ }
695
+ ```
696
+
697
+ ## Props
698
+
699
+ | Prop | Type | Required | Default | Description |
700
+ | --- | --- | --- | --- | --- |
701
+ | `BarComponent` | `BarComponent` | No | `-` | Component to render the bar. |
702
+ | `BarStackComponent` | `BarStackComponent` | No | `DefaultBarStack` | Custom component to render the stack container. Can be used to add clip paths, outlines, or other custom styling. |
703
+ | `alignContent` | `flex-start \| flex-end \| center \| space-between \| space-around \| space-evenly \| stretch` | No | `-` | - |
704
+ | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
705
+ | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
706
+ | `allowOverflowGestures` | `boolean` | No | `-` | Allows continuous gestures on the chart to continue outside the bounds of the chart element. |
707
+ | `animate` | `boolean` | No | `true` | Whether to animate the chart. |
708
+ | `animated` | `boolean` | No | `-` | - |
709
+ | `aspectRatio` | `string \| number` | No | `-` | - |
710
+ | `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 | `-` | - |
711
+ | `barMinSize` | `number` | No | `-` | Minimum size for individual bars in the stack. |
712
+ | `barPadding` | `number` | No | `0.1` | Padding between bar groups (0-1). |
713
+ | `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
714
+ | `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 | `-` | - |
715
+ | `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
716
+ | `borderRadius` | `number` | No | `4` | Border radius for the bar. |
717
+ | `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
718
+ | `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
719
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
720
+ | `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
721
+ | `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
722
+ | `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
723
+ | `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
724
+ | `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
725
+ | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
726
+ | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
727
+ | `bottom` | `string \| number` | No | `-` | - |
728
+ | `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 | `-` | - |
729
+ | `columnGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
730
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
731
+ | `display` | `none \| flex` | No | `-` | - |
732
+ | `elevation` | `0 \| 1 \| 2` | No | `-` | Determines box shadow styles. Parent should have overflow set to visible to ensure styles are not clipped. |
733
+ | `fillOpacity` | `number` | No | `-` | Fill opacity for the bar. |
734
+ | `flexBasis` | `string \| number` | No | `-` | - |
735
+ | `flexDirection` | `row \| column \| row-reverse \| column-reverse` | No | `-` | - |
736
+ | `flexGrow` | `number` | No | `-` | - |
737
+ | `flexShrink` | `number` | No | `-` | - |
738
+ | `flexWrap` | `wrap \| nowrap \| wrap-reverse` | No | `-` | - |
739
+ | `font` | `inherit \| FontFamily` | No | `-` | - |
740
+ | `fontFamilies` | `string[]` | No | `-` | Default font families to use within ChartText. If not provided, will be the default for the system. |
741
+ | `fontProvider` | `SkTypefaceFontProvider` | No | `-` | Skia font provider to allow for custom fonts. If not provided, the only available fonts will be those defined by the system. |
742
+ | `fontSize` | `FontSize \| inherit` | No | `-` | - |
743
+ | `fontWeight` | `inherit \| FontWeight` | No | `-` | - |
744
+ | `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
745
+ | `getScrubberAccessibilityLabel` | `((dataIndex: number) => string)` | No | `-` | Function that returns the accessibility label for each scrubber point. Receives dataIndex for each scrubber point label. |
746
+ | `height` | `string \| number` | No | `-` | - |
747
+ | `inset` | `number \| Partial<ChartInset>` | No | `0` | Inset around the entire chart (outside the axes). |
748
+ | `justifyContent` | `flex-start \| flex-end \| center \| space-between \| space-around \| space-evenly` | No | `-` | - |
749
+ | `key` | `Key \| null` | No | `-` | - |
750
+ | `layout` | `horizontal \| vertical` | No | `'horizontal'` | Chart layout - describes the direction bars/areas grow. - vertical: Bars grow vertically. X is category axis, Y is value axis. - horizontal (default): Bars grow horizontally. Y is category axis, X is value axis. |
751
+ | `left` | `string \| number` | No | `-` | - |
752
+ | `legend` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Whether to show the legend or a custom legend element. - true renders the default Legend component - A React element renders that element as the legend - false or omitted hides the legend |
753
+ | `legendAccessibilityLabel` | `string` | No | `'Legend'` | Accessibility label for the legend group. |
754
+ | `legendPosition` | `top \| bottom \| left \| right` | No | `'bottom'` | Position of the legend relative to the chart. |
755
+ | `lineHeight` | `inherit \| LineHeight` | No | `-` | - |
756
+ | `margin` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
757
+ | `marginBottom` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
758
+ | `marginEnd` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
759
+ | `marginStart` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
760
+ | `marginTop` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
761
+ | `marginX` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
762
+ | `marginY` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
763
+ | `maxHeight` | `string \| number` | No | `-` | - |
764
+ | `maxWidth` | `string \| number` | No | `-` | - |
765
+ | `minHeight` | `string \| number` | No | `-` | - |
766
+ | `minWidth` | `string \| number` | No | `-` | - |
767
+ | `onPointerCancel` | `((event: PointerEvent) => void)` | No | `-` | - |
768
+ | `onPointerCancelCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
769
+ | `onPointerDown` | `((event: PointerEvent) => void)` | No | `-` | - |
770
+ | `onPointerDownCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
771
+ | `onPointerEnter` | `((event: PointerEvent) => void)` | No | `-` | - |
772
+ | `onPointerEnterCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
773
+ | `onPointerLeave` | `((event: PointerEvent) => void)` | No | `-` | - |
774
+ | `onPointerLeaveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
775
+ | `onPointerMove` | `((event: PointerEvent) => void)` | No | `-` | - |
776
+ | `onPointerMoveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
777
+ | `onPointerUp` | `((event: PointerEvent) => void)` | No | `-` | - |
778
+ | `onPointerUpCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
779
+ | `opacity` | `number \| AnimatedNode` | No | `-` | - |
780
+ | `overflow` | `visible \| hidden \| scroll` | No | `-` | - |
781
+ | `padding` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
782
+ | `paddingBottom` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
783
+ | `paddingEnd` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
784
+ | `paddingStart` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
785
+ | `paddingTop` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
786
+ | `paddingX` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
787
+ | `paddingY` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
788
+ | `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
789
+ | `position` | `static \| relative \| fixed \| absolute \| sticky` | No | `-` | - |
790
+ | `ref` | `((instance: View \| null) => void) \| RefObject<View> \| null` | No | `-` | - |
791
+ | `right` | `string \| number` | No | `-` | - |
792
+ | `roundBaseline` | `boolean` | No | `true` | Whether to round the baseline of a bar (where the value is 0). |
793
+ | `rowGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
794
+ | `scrubberAccessibilityLabelStep` | `number` | No | `-` | Number of data points to move between screen-reader samples. |
795
+ | `series` | `PercentageBarSeries[]` | No | `-` | Configuration objects that define how to visualize the data. Each series contains its own data. |
796
+ | `showXAxis` | `boolean` | No | `-` | Whether to show the X axis. |
797
+ | `showYAxis` | `boolean` | No | `-` | Whether to show the Y axis. |
798
+ | `stackGap` | `number` | No | `-` | Gap between bars in the stack. |
799
+ | `stackMinSize` | `number` | No | `-` | Minimum size for the entire stack. |
800
+ | `stroke` | `string` | No | `-` | Stroke color for the bar outline. |
801
+ | `strokeWidth` | `number` | No | `-` | Stroke width for the bar outline. |
802
+ | `style` | `((false \| RegisteredStyle<ViewStyle> \| WithAnimatedObject<ViewStyle> \| Value \| AnimatedInterpolation<string \| number> \| WithAnimatedArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>> \| readonly (ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>)[]>) & ((false \| RegisteredStyle<ViewStyle> \| WithAnimatedObject<ViewStyle> \| Value \| AnimatedInterpolation<string \| number> \| WithAnimatedArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>> \| readonly (ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>)[]>) & ((false \| RegisteredStyle<ViewStyle> \| WithAnimatedObject<ViewStyle> \| Value \| AnimatedInterpolation<string \| number> \| WithAnimatedArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>> \| readonly (ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>)[]>) & (false \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>>)))) \| null` | No | `-` | Custom styles for the root element. |
803
+ | `styles` | `{ root?: StyleProp<ViewStyle>; chart?: StyleProp<ViewStyle>; }` | No | `-` | Custom styles for the component. |
804
+ | `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. |
805
+ | `textAlign` | `left \| right \| auto \| center \| justify` | No | `-` | - |
806
+ | `textDecorationLine` | `none \| underline \| line-through \| underline line-through` | No | `-` | - |
807
+ | `textDecorationStyle` | `solid \| double \| dotted \| dashed` | No | `-` | - |
808
+ | `textTransform` | `none \| capitalize \| uppercase \| lowercase` | No | `-` | - |
809
+ | `top` | `string \| number` | No | `-` | - |
810
+ | `transform` | `string \| (({ perspective: AnimatableNumericValue; } & { rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotate: AnimatableStringValue; } & { perspective?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateX: AnimatableStringValue; } & { perspective?: undefined; rotate?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateY: AnimatableStringValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateZ: AnimatableStringValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scale: AnimatableNumericValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scaleX: AnimatableNumericValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scaleY: AnimatableNumericValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateX: AnimatableNumericValue \| ${number}%; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateY: AnimatableNumericValue \| ${number}%; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewX: AnimatableStringValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewY: AnimatableStringValue; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; matrix?: undefined; }) \| ({ matrix: AnimatableNumericValue[]; } & { perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; skewX?: undefined; skewY?: undefined; }))[]` | No | `-` | - |
811
+ | `transition` | `{ type: timing; } & TimingConfig & { delay?: number \| undefined; } \| { type: spring; } & { stiffness?: number \| undefined; overshootClamping?: boolean \| undefined; restDisplacementThreshold?: number \| undefined; restSpeedThreshold?: number \| undefined; velocity?: number \| undefined; reduceMotion?: ReduceMotion \| undefined; } & { mass?: number \| undefined; damping?: number \| undefined; duration?: undefined; dampingRatio?: undefined; clamp?: undefined; } & { delay?: number \| undefined; } \| { type: spring; } & { stiffness?: number \| undefined; overshootClamping?: boolean \| undefined; restDisplacementThreshold?: number \| undefined; restSpeedThreshold?: number \| undefined; velocity?: number \| undefined; reduceMotion?: ReduceMotion \| undefined; } & { mass?: undefined; damping?: undefined; duration?: number \| undefined; dampingRatio?: number \| undefined; clamp?: { min?: number \| undefined; max?: number \| undefined; } \| undefined; } & { delay?: number \| undefined; }` | No | `-` | Transition for updates. |
812
+ | `transitions` | `{ enter?: BarTransition \| null; enterOpacity?: BarTransition \| null \| undefined; update?: BarTransition \| null \| undefined; } \| undefined` | No | `transitions = {{ enter: { type: 'spring', stiffness: 900, damping: 120, staggerDelay: 250 }, enterOpacity: { type: 'timing', duration: 200 }, update: { type: 'spring', stiffness: 900, damping: 120 } }}` | Transition configuration for enter and update animations. |
813
+ | `userSelect` | `none \| auto \| text \| contain \| all` | No | `-` | - |
814
+ | `width` | `string \| number` | No | `-` | - |
815
+ | `xAxis` | `(Partial<CartesianAxisConfigProps> & AxisBaseProps & { GridLineComponent?: LineComponent; LineComponent?: LineComponent \| undefined; TickMarkLineComponent?: LineComponent \| undefined; tickLabelFormatter?: ((value: number) => ChartTextChildren) \| undefined; TickLabelComponent?: AxisTickLabelComponent \| undefined; } & { axisId?: string \| undefined; position?: top \| bottom \| undefined; height?: number \| undefined; }) \| undefined` | No | `-` | Configuration for x-axis. Accepts axis config and axis props. To show the axis, set showXAxis to true. |
816
+ | `yAxis` | `(Partial<CartesianAxisConfigProps> & AxisBaseProps & { GridLineComponent?: LineComponent; LineComponent?: LineComponent \| undefined; TickMarkLineComponent?: LineComponent \| undefined; tickLabelFormatter?: ((value: number) => ChartTextChildren) \| undefined; TickLabelComponent?: AxisTickLabelComponent \| undefined; } & { axisId?: string \| undefined; position?: left \| right \| undefined; width?: number \| undefined; }) \| undefined` | No | `-` | Configuration for y-axis. Accepts axis config and axis props. To show the axis, set showYAxis to true. |
817
+ | `zIndex` | `number` | No | `-` | - |
818
+
819
+