@coinbase/cds-mcp-server 8.17.2 → 8.17.3

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 (269) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/mcp-docs/mobile/components/Accordion.txt +189 -0
  3. package/mcp-docs/mobile/components/AccordionItem.txt +30 -0
  4. package/mcp-docs/mobile/components/Alert.txt +156 -0
  5. package/mcp-docs/mobile/components/AreaChart.txt +266 -0
  6. package/mcp-docs/mobile/components/Avatar.txt +196 -0
  7. package/mcp-docs/mobile/components/AvatarButton.txt +226 -0
  8. package/mcp-docs/mobile/components/Banner.txt +222 -0
  9. package/mcp-docs/mobile/components/BarChart.txt +816 -0
  10. package/mcp-docs/mobile/components/Box.txt +174 -0
  11. package/mcp-docs/mobile/components/BrowserBar.txt +147 -0
  12. package/mcp-docs/mobile/components/Button.txt +199 -0
  13. package/mcp-docs/mobile/components/ButtonGroup.txt +80 -0
  14. package/mcp-docs/mobile/components/Carousel.txt +1084 -0
  15. package/mcp-docs/mobile/components/CartesianChart.txt +826 -0
  16. package/mcp-docs/mobile/components/CellMedia.txt +71 -0
  17. package/mcp-docs/mobile/components/Checkbox.txt +246 -0
  18. package/mcp-docs/mobile/components/CheckboxCell.txt +202 -0
  19. package/mcp-docs/mobile/components/CheckboxGroup.txt +285 -0
  20. package/mcp-docs/mobile/components/Chip.txt +195 -0
  21. package/mcp-docs/mobile/components/Coachmark.txt +158 -0
  22. package/mcp-docs/mobile/components/Collapsible.txt +105 -0
  23. package/mcp-docs/mobile/components/ContainedAssetCard.txt +135 -0
  24. package/mcp-docs/mobile/components/ContentCard.txt +366 -0
  25. package/mcp-docs/mobile/components/ContentCardBody.txt +136 -0
  26. package/mcp-docs/mobile/components/ContentCardFooter.txt +128 -0
  27. package/mcp-docs/mobile/components/ContentCardHeader.txt +146 -0
  28. package/mcp-docs/mobile/components/ContentCell.txt +227 -0
  29. package/mcp-docs/mobile/components/ControlGroup.txt +444 -0
  30. package/mcp-docs/mobile/components/DatePicker.txt +497 -0
  31. package/mcp-docs/mobile/components/Divider.txt +139 -0
  32. package/mcp-docs/mobile/components/DotCount.txt +146 -0
  33. package/mcp-docs/mobile/components/DotStatusColor.txt +59 -0
  34. package/mcp-docs/mobile/components/DotSymbol.txt +135 -0
  35. package/mcp-docs/mobile/components/Fallback.txt +158 -0
  36. package/mcp-docs/mobile/components/FloatingAssetCard.txt +156 -0
  37. package/mcp-docs/mobile/components/HStack.txt +235 -0
  38. package/mcp-docs/mobile/components/HeroSquare.txt +48 -0
  39. package/mcp-docs/mobile/components/Icon.txt +52 -0
  40. package/mcp-docs/mobile/components/IconButton.txt +269 -0
  41. package/mcp-docs/mobile/components/InputChip.txt +188 -0
  42. package/mcp-docs/mobile/components/Interactable.txt +187 -0
  43. package/mcp-docs/mobile/components/LineChart.txt +1325 -0
  44. package/mcp-docs/mobile/components/Link.txt +292 -0
  45. package/mcp-docs/mobile/components/ListCell.txt +391 -0
  46. package/mcp-docs/mobile/components/LogoMark.txt +85 -0
  47. package/mcp-docs/mobile/components/LogoWordMark.txt +94 -0
  48. package/mcp-docs/mobile/components/Lottie.txt +139 -0
  49. package/mcp-docs/mobile/components/LottieStatusAnimation.txt +47 -0
  50. package/mcp-docs/mobile/components/Modal.txt +84 -0
  51. package/mcp-docs/mobile/components/ModalBody.txt +34 -0
  52. package/mcp-docs/mobile/components/ModalFooter.txt +25 -0
  53. package/mcp-docs/mobile/components/ModalHeader.txt +28 -0
  54. package/mcp-docs/mobile/components/MultiContentModule.txt +380 -0
  55. package/mcp-docs/mobile/components/NavigationTitle.txt +132 -0
  56. package/mcp-docs/mobile/components/NavigationTitleSelect.txt +142 -0
  57. package/mcp-docs/mobile/components/NudgeCard.txt +90 -0
  58. package/mcp-docs/mobile/components/Numpad.txt +341 -0
  59. package/mcp-docs/mobile/components/Overlay.txt +152 -0
  60. package/mcp-docs/mobile/components/PageFooter.txt +161 -0
  61. package/mcp-docs/mobile/components/PageHeader.txt +186 -0
  62. package/mcp-docs/mobile/components/PeriodSelector.txt +408 -0
  63. package/mcp-docs/mobile/components/Pictogram.txt +48 -0
  64. package/mcp-docs/mobile/components/Point.txt +205 -0
  65. package/mcp-docs/mobile/components/PortalProvider.txt +79 -0
  66. package/mcp-docs/mobile/components/Pressable.txt +211 -0
  67. package/mcp-docs/mobile/components/ProgressBar.txt +130 -0
  68. package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +161 -0
  69. package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +138 -0
  70. package/mcp-docs/mobile/components/ProgressCircle.txt +237 -0
  71. package/mcp-docs/mobile/components/Radio.txt +242 -0
  72. package/mcp-docs/mobile/components/RadioCell.txt +202 -0
  73. package/mcp-docs/mobile/components/RadioGroup.txt +282 -0
  74. package/mcp-docs/mobile/components/ReferenceLine.txt +153 -0
  75. package/mcp-docs/mobile/components/RemoteImage.txt +106 -0
  76. package/mcp-docs/mobile/components/RemoteImageGroup.txt +61 -0
  77. package/mcp-docs/mobile/components/RollingNumber.txt +789 -0
  78. package/mcp-docs/mobile/components/Scrubber.txt +204 -0
  79. package/mcp-docs/mobile/components/SearchInput.txt +192 -0
  80. package/mcp-docs/mobile/components/SectionHeader.txt +205 -0
  81. package/mcp-docs/mobile/components/SegmentedTabs.txt +316 -0
  82. package/mcp-docs/mobile/components/Select.txt +212 -0
  83. package/mcp-docs/mobile/components/SelectChip.txt +324 -0
  84. package/mcp-docs/mobile/components/SelectOption.txt +85 -0
  85. package/mcp-docs/mobile/components/SlideButton.txt +331 -0
  86. package/mcp-docs/mobile/components/Spacer.txt +84 -0
  87. package/mcp-docs/mobile/components/Sparkline.txt +123 -0
  88. package/mcp-docs/mobile/components/SparklineGradient.txt +107 -0
  89. package/mcp-docs/mobile/components/SparklineInteractive.txt +157 -0
  90. package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +73 -0
  91. package/mcp-docs/mobile/components/Spinner.txt +49 -0
  92. package/mcp-docs/mobile/components/SpotIcon.txt +48 -0
  93. package/mcp-docs/mobile/components/SpotRectangle.txt +48 -0
  94. package/mcp-docs/mobile/components/SpotSquare.txt +48 -0
  95. package/mcp-docs/mobile/components/Stepper.txt +528 -0
  96. package/mcp-docs/mobile/components/SubBrandLogoMark.txt +126 -0
  97. package/mcp-docs/mobile/components/SubBrandLogoWordMark.txt +126 -0
  98. package/mcp-docs/mobile/components/Switch.txt +98 -0
  99. package/mcp-docs/mobile/components/TabIndicator.txt +49 -0
  100. package/mcp-docs/mobile/components/TabLabel.txt +154 -0
  101. package/mcp-docs/mobile/components/TabNavigation.txt +147 -0
  102. package/mcp-docs/mobile/components/TabbedChips.txt +143 -0
  103. package/mcp-docs/mobile/components/Tabs.txt +191 -0
  104. package/mcp-docs/mobile/components/Tag.txt +301 -0
  105. package/mcp-docs/mobile/components/Text.txt +212 -0
  106. package/mcp-docs/mobile/components/TextInput.txt +718 -0
  107. package/mcp-docs/mobile/components/ThemeProvider.txt +133 -0
  108. package/mcp-docs/mobile/components/Toast.txt +197 -0
  109. package/mcp-docs/mobile/components/Tooltip.txt +60 -0
  110. package/mcp-docs/mobile/components/TopNavBar.txt +162 -0
  111. package/mcp-docs/mobile/components/Tour.txt +159 -0
  112. package/mcp-docs/mobile/components/Tray.txt +253 -0
  113. package/mcp-docs/mobile/components/UpsellCard.txt +322 -0
  114. package/mcp-docs/mobile/components/VStack.txt +223 -0
  115. package/mcp-docs/mobile/components/XAxis.txt +622 -0
  116. package/mcp-docs/mobile/components/YAxis.txt +568 -0
  117. package/mcp-docs/mobile/getting-started/introduction.txt +99 -0
  118. package/mcp-docs/mobile/getting-started/mcp-server.txt +94 -0
  119. package/mcp-docs/mobile/getting-started/playground.txt +25 -0
  120. package/mcp-docs/mobile/hooks/useDimensions.txt +47 -0
  121. package/mcp-docs/mobile/hooks/useOverlayContentContext.txt +215 -0
  122. package/mcp-docs/mobile/hooks/useTheme.txt +110 -0
  123. package/mcp-docs/mobile/routes.txt +132 -0
  124. package/mcp-docs/web/components/Accordion.txt +190 -0
  125. package/mcp-docs/web/components/AccordionItem.txt +32 -0
  126. package/mcp-docs/web/components/Alert.txt +165 -0
  127. package/mcp-docs/web/components/AreaChart.txt +511 -0
  128. package/mcp-docs/web/components/Avatar.txt +212 -0
  129. package/mcp-docs/web/components/AvatarButton.txt +241 -0
  130. package/mcp-docs/web/components/Banner.txt +227 -0
  131. package/mcp-docs/web/components/BarChart.txt +1268 -0
  132. package/mcp-docs/web/components/Box.txt +176 -0
  133. package/mcp-docs/web/components/Button.txt +213 -0
  134. package/mcp-docs/web/components/ButtonGroup.txt +80 -0
  135. package/mcp-docs/web/components/Calendar.txt +182 -0
  136. package/mcp-docs/web/components/Carousel.txt +1576 -0
  137. package/mcp-docs/web/components/CartesianChart.txt +1045 -0
  138. package/mcp-docs/web/components/CellMedia.txt +57 -0
  139. package/mcp-docs/web/components/Checkbox.txt +189 -0
  140. package/mcp-docs/web/components/CheckboxCell.txt +203 -0
  141. package/mcp-docs/web/components/CheckboxGroup.txt +220 -0
  142. package/mcp-docs/web/components/Chip.txt +197 -0
  143. package/mcp-docs/web/components/Coachmark.txt +189 -0
  144. package/mcp-docs/web/components/Collapsible.txt +120 -0
  145. package/mcp-docs/web/components/ContainedAssetCard.txt +233 -0
  146. package/mcp-docs/web/components/ContentCard.txt +368 -0
  147. package/mcp-docs/web/components/ContentCardBody.txt +138 -0
  148. package/mcp-docs/web/components/ContentCardFooter.txt +130 -0
  149. package/mcp-docs/web/components/ContentCardHeader.txt +148 -0
  150. package/mcp-docs/web/components/ContentCell.txt +220 -0
  151. package/mcp-docs/web/components/ControlGroup.txt +437 -0
  152. package/mcp-docs/web/components/DatePicker.txt +506 -0
  153. package/mcp-docs/web/components/Divider.txt +144 -0
  154. package/mcp-docs/web/components/DotCount.txt +150 -0
  155. package/mcp-docs/web/components/DotStatusColor.txt +59 -0
  156. package/mcp-docs/web/components/DotSymbol.txt +138 -0
  157. package/mcp-docs/web/components/Dropdown.txt +120 -0
  158. package/mcp-docs/web/components/Fallback.txt +164 -0
  159. package/mcp-docs/web/components/FloatingAssetCard.txt +251 -0
  160. package/mcp-docs/web/components/FullscreenAlert.txt +70 -0
  161. package/mcp-docs/web/components/FullscreenModal.txt +146 -0
  162. package/mcp-docs/web/components/FullscreenModalLayout.txt +188 -0
  163. package/mcp-docs/web/components/Grid.txt +237 -0
  164. package/mcp-docs/web/components/GridColumn.txt +210 -0
  165. package/mcp-docs/web/components/HStack.txt +237 -0
  166. package/mcp-docs/web/components/HeroSquare.txt +49 -0
  167. package/mcp-docs/web/components/Icon.txt +146 -0
  168. package/mcp-docs/web/components/IconButton.txt +391 -0
  169. package/mcp-docs/web/components/InputChip.txt +188 -0
  170. package/mcp-docs/web/components/Interactable.txt +194 -0
  171. package/mcp-docs/web/components/LineChart.txt +1577 -0
  172. package/mcp-docs/web/components/Link.txt +244 -0
  173. package/mcp-docs/web/components/ListCell.txt +397 -0
  174. package/mcp-docs/web/components/LogoMark.txt +85 -0
  175. package/mcp-docs/web/components/LogoWordMark.txt +94 -0
  176. package/mcp-docs/web/components/Lottie.txt +158 -0
  177. package/mcp-docs/web/components/LottieStatusAnimation.txt +58 -0
  178. package/mcp-docs/web/components/MediaQueryProvider.txt +109 -0
  179. package/mcp-docs/web/components/Modal.txt +193 -0
  180. package/mcp-docs/web/components/ModalBody.txt +118 -0
  181. package/mcp-docs/web/components/ModalFooter.txt +120 -0
  182. package/mcp-docs/web/components/ModalHeader.txt +124 -0
  183. package/mcp-docs/web/components/MultiContentModule.txt +382 -0
  184. package/mcp-docs/web/components/NavigationBar.txt +103 -0
  185. package/mcp-docs/web/components/NavigationTitle.txt +26 -0
  186. package/mcp-docs/web/components/NavigationTitleSelect.txt +46 -0
  187. package/mcp-docs/web/components/NudgeCard.txt +182 -0
  188. package/mcp-docs/web/components/Overlay.txt +172 -0
  189. package/mcp-docs/web/components/PageFooter.txt +185 -0
  190. package/mcp-docs/web/components/PageHeader.txt +244 -0
  191. package/mcp-docs/web/components/Pagination.txt +500 -0
  192. package/mcp-docs/web/components/PeriodSelector.txt +704 -0
  193. package/mcp-docs/web/components/Pictogram.txt +49 -0
  194. package/mcp-docs/web/components/Point.txt +461 -0
  195. package/mcp-docs/web/components/PortalProvider.txt +77 -0
  196. package/mcp-docs/web/components/Pressable.txt +194 -0
  197. package/mcp-docs/web/components/ProgressBar.txt +164 -0
  198. package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +213 -0
  199. package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +182 -0
  200. package/mcp-docs/web/components/ProgressCircle.txt +444 -0
  201. package/mcp-docs/web/components/Radio.txt +220 -0
  202. package/mcp-docs/web/components/RadioCell.txt +216 -0
  203. package/mcp-docs/web/components/RadioGroup.txt +289 -0
  204. package/mcp-docs/web/components/ReferenceLine.txt +452 -0
  205. package/mcp-docs/web/components/RemoteImage.txt +166 -0
  206. package/mcp-docs/web/components/RemoteImageGroup.txt +87 -0
  207. package/mcp-docs/web/components/RollingNumber.txt +1022 -0
  208. package/mcp-docs/web/components/Scrubber.txt +232 -0
  209. package/mcp-docs/web/components/SearchInput.txt +118 -0
  210. package/mcp-docs/web/components/SectionHeader.txt +218 -0
  211. package/mcp-docs/web/components/SegmentedTabs.txt +325 -0
  212. package/mcp-docs/web/components/Select.txt +225 -0
  213. package/mcp-docs/web/components/SelectChip.txt +315 -0
  214. package/mcp-docs/web/components/SelectOption.txt +166 -0
  215. package/mcp-docs/web/components/Sidebar.txt +350 -0
  216. package/mcp-docs/web/components/SidebarItem.txt +132 -0
  217. package/mcp-docs/web/components/SidebarMoreMenu.txt +31 -0
  218. package/mcp-docs/web/components/Spacer.txt +174 -0
  219. package/mcp-docs/web/components/Sparkline.txt +123 -0
  220. package/mcp-docs/web/components/SparklineGradient.txt +107 -0
  221. package/mcp-docs/web/components/SparklineInteractive.txt +154 -0
  222. package/mcp-docs/web/components/SparklineInteractiveHeader.txt +77 -0
  223. package/mcp-docs/web/components/Spinner.txt +129 -0
  224. package/mcp-docs/web/components/SpotIcon.txt +49 -0
  225. package/mcp-docs/web/components/SpotRectangle.txt +49 -0
  226. package/mcp-docs/web/components/SpotSquare.txt +49 -0
  227. package/mcp-docs/web/components/Stepper.txt +683 -0
  228. package/mcp-docs/web/components/SubBrandLogoMark.txt +126 -0
  229. package/mcp-docs/web/components/SubBrandLogoWordMark.txt +126 -0
  230. package/mcp-docs/web/components/Switch.txt +86 -0
  231. package/mcp-docs/web/components/TabIndicator.txt +49 -0
  232. package/mcp-docs/web/components/TabLabel.txt +159 -0
  233. package/mcp-docs/web/components/TabNavigation.txt +160 -0
  234. package/mcp-docs/web/components/TabbedChips.txt +156 -0
  235. package/mcp-docs/web/components/Table.txt +368 -0
  236. package/mcp-docs/web/components/TableBody.txt +84 -0
  237. package/mcp-docs/web/components/TableCaption.txt +103 -0
  238. package/mcp-docs/web/components/TableCell.txt +166 -0
  239. package/mcp-docs/web/components/TableCellFallback.txt +98 -0
  240. package/mcp-docs/web/components/TableFooter.txt +84 -0
  241. package/mcp-docs/web/components/TableHeader.txt +101 -0
  242. package/mcp-docs/web/components/TableRow.txt +141 -0
  243. package/mcp-docs/web/components/Tabs.txt +213 -0
  244. package/mcp-docs/web/components/Tag.txt +305 -0
  245. package/mcp-docs/web/components/Text.txt +233 -0
  246. package/mcp-docs/web/components/TextInput.txt +653 -0
  247. package/mcp-docs/web/components/ThemeProvider.txt +200 -0
  248. package/mcp-docs/web/components/TileButton.txt +159 -0
  249. package/mcp-docs/web/components/Toast.txt +204 -0
  250. package/mcp-docs/web/components/Tooltip.txt +90 -0
  251. package/mcp-docs/web/components/Tour.txt +180 -0
  252. package/mcp-docs/web/components/Tray.txt +289 -0
  253. package/mcp-docs/web/components/UpsellCard.txt +320 -0
  254. package/mcp-docs/web/components/VStack.txt +225 -0
  255. package/mcp-docs/web/components/XAxis.txt +620 -0
  256. package/mcp-docs/web/components/YAxis.txt +549 -0
  257. package/mcp-docs/web/getting-started/introduction.txt +99 -0
  258. package/mcp-docs/web/getting-started/mcp-server.txt +94 -0
  259. package/mcp-docs/web/getting-started/playground.txt +25 -0
  260. package/mcp-docs/web/hooks/useBreakpoints.txt +33 -0
  261. package/mcp-docs/web/hooks/useDimensions.txt +55 -0
  262. package/mcp-docs/web/hooks/useHasMounted.txt +55 -0
  263. package/mcp-docs/web/hooks/useIsoEffect.txt +42 -0
  264. package/mcp-docs/web/hooks/useMediaQuery.txt +94 -0
  265. package/mcp-docs/web/hooks/useOverlayContentContext.txt +217 -0
  266. package/mcp-docs/web/hooks/useScrollBlocker.txt +63 -0
  267. package/mcp-docs/web/hooks/useTheme.txt +105 -0
  268. package/mcp-docs/web/routes.txt +155 -0
  269. package/package.json +1 -1
@@ -0,0 +1,1045 @@
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
+ ```jsx
8
+ import { CartesianChart } from '@coinbase/cds-web-visualization'
9
+ ```
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ | --- | --- | --- | --- | --- |
15
+ | `accentHeight` | `string \| number` | No | `-` | - |
16
+ | `accumulate` | `none \| sum` | No | `-` | - |
17
+ | `additive` | `sum \| replace` | No | `-` | - |
18
+ | `alignContent` | `ResponsiveProp<center \| end \| normal \| start \| flex-start \| flex-end \| space-between \| space-around \| space-evenly \| stretch \| baseline \| first baseline \| last baseline>` | No | `-` | - |
19
+ | `alignItems` | `ResponsiveProp<center \| end \| normal \| start \| flex-start \| flex-end \| stretch \| baseline \| first baseline \| last baseline \| self-start \| self-end>` | No | `-` | - |
20
+ | `alignSelf` | `ResponsiveProp<center \| end \| normal \| auto \| start \| flex-start \| flex-end \| stretch \| baseline \| first baseline \| last baseline \| self-start \| self-end>` | No | `-` | - |
21
+ | `alignmentBaseline` | `alphabetic \| hanging \| ideographic \| mathematical \| inherit \| auto \| baseline \| before-edge \| text-before-edge \| middle \| central \| after-edge \| text-after-edge` | No | `-` | - |
22
+ | `allowReorder` | `no \| yes` | No | `-` | - |
23
+ | `alphabetic` | `string \| number` | No | `-` | - |
24
+ | `amplitude` | `string \| number` | No | `-` | - |
25
+ | `animate` | `boolean` | No | `true` | Whether to animate the chart. |
26
+ | `arabicForm` | `initial \| medial \| terminal \| isolated` | No | `-` | - |
27
+ | `as` | `svg` | No | `-` | - |
28
+ | `ascent` | `string \| number` | No | `-` | - |
29
+ | `aspectRatio` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
30
+ | `attributeName` | `string` | No | `-` | - |
31
+ | `attributeType` | `string` | No | `-` | - |
32
+ | `autoReverse` | `false \| true \| true \| false` | No | `-` | - |
33
+ | `azimuth` | `string \| number` | No | `-` | - |
34
+ | `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 | `-` | - |
35
+ | `baseFrequency` | `string \| number` | No | `-` | - |
36
+ | `baseProfile` | `string \| number` | No | `-` | - |
37
+ | `baselineShift` | `string \| number` | No | `-` | - |
38
+ | `bbox` | `string \| number` | No | `-` | - |
39
+ | `begin` | `string \| number` | No | `-` | - |
40
+ | `bias` | `string \| number` | No | `-` | - |
41
+ | `borderBottomLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
42
+ | `borderBottomRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
43
+ | `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
44
+ | `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 | `-` | - |
45
+ | `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
46
+ | `borderRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
47
+ | `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
48
+ | `borderTopLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
49
+ | `borderTopRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
50
+ | `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
51
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
52
+ | `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
53
+ | `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
54
+ | `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
55
+ | `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
56
+ | `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
57
+ | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
58
+ | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
59
+ | `bottom` | `ResponsiveProp<Bottom<string \| number>>` | No | `-` | - |
60
+ | `by` | `string \| number` | No | `-` | - |
61
+ | `calcMode` | `string \| number` | No | `-` | - |
62
+ | `capHeight` | `string \| number` | No | `-` | - |
63
+ | `className` | `string` | No | `-` | - |
64
+ | `clip` | `string \| number` | No | `-` | - |
65
+ | `clipPath` | `string` | No | `-` | - |
66
+ | `clipPathUnits` | `string \| number` | No | `-` | - |
67
+ | `clipRule` | `string \| number` | No | `-` | - |
68
+ | `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 | `-` | - |
69
+ | `colorInterpolation` | `string \| number` | No | `-` | - |
70
+ | `colorInterpolationFilters` | `inherit \| auto \| sRGB \| linearRGB` | No | `-` | - |
71
+ | `colorProfile` | `string \| number` | No | `-` | - |
72
+ | `colorRendering` | `string \| number` | No | `-` | - |
73
+ | `columnGap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
74
+ | `contentScriptType` | `string \| number` | No | `-` | - |
75
+ | `contentStyleType` | `string \| number` | No | `-` | - |
76
+ | `crossOrigin` | ` \| anonymous \| use-credentials` | No | `-` | - |
77
+ | `cursor` | `string \| number` | No | `-` | - |
78
+ | `cx` | `string \| number` | No | `-` | - |
79
+ | `cy` | `string \| number` | No | `-` | - |
80
+ | `d` | `string` | No | `-` | - |
81
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
82
+ | `decelerate` | `string \| number` | No | `-` | - |
83
+ | `descent` | `string \| number` | No | `-` | - |
84
+ | `diffuseConstant` | `string \| number` | No | `-` | - |
85
+ | `direction` | `string \| number` | No | `-` | - |
86
+ | `display` | `ResponsiveProp<grid \| revert \| none \| block \| inline \| inline-block \| flex \| inline-flex \| inline-grid \| contents \| flow-root \| list-item>` | No | `-` | - |
87
+ | `divisor` | `string \| number` | No | `-` | - |
88
+ | `dominantBaseline` | `string \| number` | No | `-` | - |
89
+ | `dur` | `string \| number` | No | `-` | - |
90
+ | `dx` | `string \| number` | No | `-` | - |
91
+ | `dy` | `string \| number` | No | `-` | - |
92
+ | `edgeMode` | `string \| number` | No | `-` | - |
93
+ | `elevation` | `0 \| 1 \| 2` | No | `-` | - |
94
+ | `enableBackground` | `string \| number` | No | `-` | - |
95
+ | `enableScrubbing` | `boolean` | No | `-` | Enables scrubbing interactions. When true, allows scrubbing and makes scrubber components interactive. |
96
+ | `end` | `string \| number` | No | `-` | - |
97
+ | `exponent` | `string \| number` | No | `-` | - |
98
+ | `externalResourcesRequired` | `false \| true \| true \| false` | No | `-` | - |
99
+ | `fill` | `string` | No | `-` | - |
100
+ | `fillOpacity` | `string \| number` | No | `-` | - |
101
+ | `fillRule` | `inherit \| nonzero \| evenodd` | No | `-` | - |
102
+ | `filter` | `string` | No | `-` | - |
103
+ | `filterRes` | `string \| number` | No | `-` | - |
104
+ | `filterUnits` | `string \| number` | No | `-` | - |
105
+ | `flexBasis` | `ResponsiveProp<FlexBasis<string \| number>>` | No | `-` | - |
106
+ | `flexDirection` | `ResponsiveProp<row \| row-reverse \| column \| column-reverse>` | No | `-` | - |
107
+ | `flexGrow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - |
108
+ | `flexShrink` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - |
109
+ | `flexWrap` | `ResponsiveProp<nowrap \| wrap \| wrap-reverse>` | No | `-` | - |
110
+ | `floodColor` | `string \| number` | No | `-` | - |
111
+ | `floodOpacity` | `string \| number` | No | `-` | - |
112
+ | `focusable` | `auto \| Booleanish` | No | `-` | - |
113
+ | `font` | `ResponsiveProp<FontFamily \| inherit>` | No | `-` | - |
114
+ | `fontFamily` | `ResponsiveProp<FontFamily \| inherit>` | No | `-` | - |
115
+ | `fontSize` | `ResponsiveProp<FontSize \| inherit>` | No | `-` | - |
116
+ | `fontSizeAdjust` | `string \| number` | No | `-` | - |
117
+ | `fontStretch` | `string \| number` | No | `-` | - |
118
+ | `fontStyle` | `string \| number` | No | `-` | - |
119
+ | `fontVariant` | `string \| number` | No | `-` | - |
120
+ | `fontWeight` | `ResponsiveProp<FontWeight \| inherit>` | No | `-` | - |
121
+ | `format` | `string \| number` | No | `-` | - |
122
+ | `fr` | `string \| number` | No | `-` | - |
123
+ | `from` | `string \| number` | No | `-` | - |
124
+ | `fx` | `string \| number` | No | `-` | - |
125
+ | `fy` | `string \| number` | No | `-` | - |
126
+ | `g1` | `string \| number` | No | `-` | - |
127
+ | `g2` | `string \| number` | No | `-` | - |
128
+ | `gap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
129
+ | `glyphName` | `string \| number` | No | `-` | - |
130
+ | `glyphOrientationHorizontal` | `string \| number` | No | `-` | - |
131
+ | `glyphOrientationVertical` | `string \| number` | No | `-` | - |
132
+ | `glyphRef` | `string \| number` | No | `-` | - |
133
+ | `gradientTransform` | `string` | No | `-` | - |
134
+ | `gradientUnits` | `string` | No | `-` | - |
135
+ | `grid` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - |
136
+ | `gridArea` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
137
+ | `gridAutoColumns` | `ResponsiveProp<GridAutoColumns<string \| number>>` | No | `-` | - |
138
+ | `gridAutoFlow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| row \| column \| dense` | No | `-` | - |
139
+ | `gridAutoRows` | `ResponsiveProp<GridAutoRows<string \| number>>` | No | `-` | - |
140
+ | `gridColumn` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
141
+ | `gridColumnEnd` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
142
+ | `gridColumnStart` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
143
+ | `gridRow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
144
+ | `gridRowEnd` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
145
+ | `gridRowStart` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
146
+ | `gridTemplate` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - |
147
+ | `gridTemplateAreas` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - |
148
+ | `gridTemplateColumns` | `ResponsiveProp<GridTemplateColumns<string \| number>>` | No | `-` | - |
149
+ | `gridTemplateRows` | `ResponsiveProp<GridTemplateRows<string \| number>>` | No | `-` | - |
150
+ | `hanging` | `string \| number` | No | `-` | - |
151
+ | `height` | `ResponsiveProp<Height<string \| number>>` | No | `-` | - |
152
+ | `horizAdvX` | `string \| number` | No | `-` | - |
153
+ | `horizOriginX` | `string \| number` | No | `-` | - |
154
+ | `href` | `string` | No | `-` | - |
155
+ | `id` | `string` | No | `-` | - |
156
+ | `ideographic` | `string \| number` | No | `-` | - |
157
+ | `imageRendering` | `string \| number` | No | `-` | - |
158
+ | `in` | `string` | No | `-` | - |
159
+ | `in2` | `string \| number` | No | `-` | - |
160
+ | `inset` | `number \| Partial<ChartInset>` | No | `-` | Inset around the entire chart (outside the axes). |
161
+ | `intercept` | `string \| number` | No | `-` | - |
162
+ | `justifyContent` | `ResponsiveProp<left \| right \| center \| end \| normal \| start \| flex-start \| flex-end \| space-between \| space-around \| space-evenly \| stretch>` | No | `-` | - |
163
+ | `k` | `string \| number` | No | `-` | - |
164
+ | `k1` | `string \| number` | No | `-` | - |
165
+ | `k2` | `string \| number` | No | `-` | - |
166
+ | `k3` | `string \| number` | No | `-` | - |
167
+ | `k4` | `string \| number` | No | `-` | - |
168
+ | `kernelMatrix` | `string \| number` | No | `-` | - |
169
+ | `kernelUnitLength` | `string \| number` | No | `-` | - |
170
+ | `kerning` | `string \| number` | No | `-` | - |
171
+ | `key` | `Key \| null` | No | `-` | - |
172
+ | `keyPoints` | `string \| number` | No | `-` | - |
173
+ | `keySplines` | `string \| number` | No | `-` | - |
174
+ | `keyTimes` | `string \| number` | No | `-` | - |
175
+ | `lang` | `string` | No | `-` | - |
176
+ | `left` | `ResponsiveProp<Left<string \| number>>` | No | `-` | - |
177
+ | `lengthAdjust` | `string \| number` | No | `-` | - |
178
+ | `letterSpacing` | `string \| number` | No | `-` | - |
179
+ | `lightingColor` | `string \| number` | No | `-` | - |
180
+ | `limitingConeAngle` | `string \| number` | No | `-` | - |
181
+ | `lineHeight` | `ResponsiveProp<LineHeight \| inherit>` | No | `-` | - |
182
+ | `local` | `string \| number` | No | `-` | - |
183
+ | `margin` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
184
+ | `marginBottom` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
185
+ | `marginEnd` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
186
+ | `marginStart` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
187
+ | `marginTop` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
188
+ | `marginX` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
189
+ | `marginY` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
190
+ | `markerEnd` | `string` | No | `-` | - |
191
+ | `markerHeight` | `string \| number` | No | `-` | - |
192
+ | `markerMid` | `string` | No | `-` | - |
193
+ | `markerStart` | `string` | No | `-` | - |
194
+ | `markerUnits` | `string \| number` | No | `-` | - |
195
+ | `markerWidth` | `string \| number` | No | `-` | - |
196
+ | `mask` | `string` | No | `-` | - |
197
+ | `maskContentUnits` | `string \| number` | No | `-` | - |
198
+ | `maskUnits` | `string \| number` | No | `-` | - |
199
+ | `mathematical` | `string \| number` | No | `-` | - |
200
+ | `max` | `string \| number` | No | `-` | - |
201
+ | `maxHeight` | `ResponsiveProp<MaxHeight<string \| number>>` | No | `-` | - |
202
+ | `maxWidth` | `ResponsiveProp<MaxWidth<string \| number>>` | No | `-` | - |
203
+ | `media` | `string` | No | `-` | - |
204
+ | `method` | `string` | No | `-` | - |
205
+ | `min` | `string \| number` | No | `-` | - |
206
+ | `minHeight` | `ResponsiveProp<MinHeight<string \| number>>` | No | `-` | - |
207
+ | `minWidth` | `ResponsiveProp<MinWidth<string \| number>>` | No | `-` | - |
208
+ | `mode` | `string \| number` | No | `-` | - |
209
+ | `name` | `string` | No | `-` | - |
210
+ | `numOctaves` | `string \| number` | No | `-` | - |
211
+ | `offset` | `string \| number` | No | `-` | - |
212
+ | `onChange` | `FormEventHandler<SVGSVGElement>` | No | `-` | - |
213
+ | `onScrubberPositionChange` | `((index: number) => void) \| undefined` | No | `-` | Callback fired when the scrubber position changes. Receives the dataIndex of the scrubber or undefined when not scrubbing. |
214
+ | `opacity` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - |
215
+ | `operator` | `string \| number` | No | `-` | - |
216
+ | `order` | `string \| number` | No | `-` | - |
217
+ | `orient` | `string \| number` | No | `-` | - |
218
+ | `orientation` | `string \| number` | No | `-` | - |
219
+ | `origin` | `string \| number` | No | `-` | - |
220
+ | `overflow` | `ResponsiveProp<clip \| auto \| visible \| hidden \| scroll>` | No | `-` | - |
221
+ | `overlinePosition` | `string \| number` | No | `-` | - |
222
+ | `overlineThickness` | `string \| number` | No | `-` | - |
223
+ | `padding` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
224
+ | `paddingBottom` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
225
+ | `paddingEnd` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
226
+ | `paddingStart` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
227
+ | `paddingTop` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
228
+ | `paddingX` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
229
+ | `paddingY` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
230
+ | `paintOrder` | `string \| number` | No | `-` | - |
231
+ | `panose1` | `string \| number` | No | `-` | - |
232
+ | `path` | `string` | No | `-` | - |
233
+ | `pathLength` | `string \| number` | No | `-` | - |
234
+ | `patternContentUnits` | `string` | No | `-` | - |
235
+ | `patternTransform` | `string \| number` | No | `-` | - |
236
+ | `patternUnits` | `string` | No | `-` | - |
237
+ | `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
238
+ | `pointerEvents` | `string \| number` | No | `-` | - |
239
+ | `points` | `string` | No | `-` | - |
240
+ | `pointsAtX` | `string \| number` | No | `-` | - |
241
+ | `pointsAtY` | `string \| number` | No | `-` | - |
242
+ | `pointsAtZ` | `string \| number` | No | `-` | - |
243
+ | `position` | `ResponsiveProp<static \| relative \| absolute \| fixed \| sticky>` | No | `-` | - |
244
+ | `preserveAlpha` | `false \| true \| true \| false` | No | `-` | - |
245
+ | `preserveAspectRatio` | `string` | No | `-` | - |
246
+ | `primitiveUnits` | `string \| number` | No | `-` | - |
247
+ | `r` | `string \| number` | No | `-` | - |
248
+ | `radius` | `string \| number` | No | `-` | - |
249
+ | `ref` | `((instance: SVGSVGElement \| null) => void) \| RefObject<SVGSVGElement> \| null` | No | `-` | - |
250
+ | `refX` | `string \| number` | No | `-` | - |
251
+ | `refY` | `string \| number` | No | `-` | - |
252
+ | `renderingIntent` | `string \| number` | No | `-` | - |
253
+ | `repeatCount` | `string \| number` | No | `-` | - |
254
+ | `repeatDur` | `string \| number` | No | `-` | - |
255
+ | `requiredExtensions` | `string \| number` | No | `-` | - |
256
+ | `requiredFeatures` | `string \| number` | No | `-` | - |
257
+ | `restart` | `string \| number` | No | `-` | - |
258
+ | `result` | `string` | No | `-` | - |
259
+ | `right` | `ResponsiveProp<Right<string \| number>>` | No | `-` | - |
260
+ | `role` | `grid \| article \| button \| dialog \| figure \| form \| img \| link \| main \| menu \| menuitem \| option \| search \| table \| switch \| string & {} \| none \| row \| alert \| alertdialog \| application \| banner \| cell \| checkbox \| columnheader \| combobox \| complementary \| contentinfo \| definition \| directory \| document \| feed \| gridcell \| group \| heading \| list \| listbox \| listitem \| log \| marquee \| math \| menubar \| menuitemcheckbox \| menuitemradio \| navigation \| note \| presentation \| progressbar \| radio \| radiogroup \| region \| rowgroup \| rowheader \| scrollbar \| searchbox \| separator \| slider \| spinbutton \| status \| tab \| tablist \| tabpanel \| term \| textbox \| timer \| toolbar \| tooltip \| tree \| treegrid \| treeitem` | No | `-` | - |
261
+ | `rotate` | `string \| number` | No | `-` | - |
262
+ | `rowGap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - |
263
+ | `rx` | `string \| number` | No | `-` | - |
264
+ | `ry` | `string \| number` | No | `-` | - |
265
+ | `scale` | `string \| number` | No | `-` | - |
266
+ | `seed` | `string \| number` | No | `-` | - |
267
+ | `series` | `Series[]` | No | `-` | Configuration objects that define how to visualize the data. Each series contains its own data array. |
268
+ | `shapeRendering` | `string \| number` | No | `-` | - |
269
+ | `slope` | `string \| number` | No | `-` | - |
270
+ | `spacing` | `string \| number` | No | `-` | - |
271
+ | `specularConstant` | `string \| number` | No | `-` | - |
272
+ | `specularExponent` | `string \| number` | No | `-` | - |
273
+ | `speed` | `string \| number` | No | `-` | - |
274
+ | `spreadMethod` | `string` | No | `-` | - |
275
+ | `startOffset` | `string \| number` | No | `-` | - |
276
+ | `stdDeviation` | `string \| number` | No | `-` | - |
277
+ | `stemh` | `string \| number` | No | `-` | - |
278
+ | `stemv` | `string \| number` | No | `-` | - |
279
+ | `stitchTiles` | `string \| number` | No | `-` | - |
280
+ | `stopColor` | `string` | No | `-` | - |
281
+ | `stopOpacity` | `string \| number` | No | `-` | - |
282
+ | `strikethroughPosition` | `string \| number` | No | `-` | - |
283
+ | `strikethroughThickness` | `string \| number` | No | `-` | - |
284
+ | `string` | `string \| number` | No | `-` | - |
285
+ | `stroke` | `string` | No | `-` | - |
286
+ | `strokeDasharray` | `string \| number` | No | `-` | - |
287
+ | `strokeDashoffset` | `string \| number` | No | `-` | - |
288
+ | `strokeLinecap` | `inherit \| butt \| round \| square` | No | `-` | - |
289
+ | `strokeLinejoin` | `inherit \| round \| miter \| bevel` | No | `-` | - |
290
+ | `strokeMiterlimit` | `string \| number` | No | `-` | - |
291
+ | `strokeOpacity` | `string \| number` | No | `-` | - |
292
+ | `strokeWidth` | `string \| number` | No | `-` | - |
293
+ | `style` | `CSSProperties` | No | `-` | - |
294
+ | `suppressHydrationWarning` | `boolean` | No | `-` | - |
295
+ | `surfaceScale` | `string \| number` | No | `-` | - |
296
+ | `systemLanguage` | `string \| number` | No | `-` | - |
297
+ | `tabIndex` | `number` | No | `-` | - |
298
+ | `tableValues` | `string \| number` | No | `-` | - |
299
+ | `target` | `string` | No | `-` | - |
300
+ | `targetX` | `string \| number` | No | `-` | - |
301
+ | `targetY` | `string \| number` | No | `-` | - |
302
+ | `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Under the hood, testID translates to data-testid on Web. On Mobile, testID stays the same - testID |
303
+ | `textAlign` | `ResponsiveProp<center \| end \| start \| justify>` | No | `-` | - |
304
+ | `textAnchor` | `string` | No | `-` | - |
305
+ | `textDecoration` | `ResponsiveProp<none \| underline \| overline \| line-through \| underline overline \| underline double>` | No | `-` | - |
306
+ | `textLength` | `string \| number` | No | `-` | - |
307
+ | `textRendering` | `string \| number` | No | `-` | - |
308
+ | `textTransform` | `ResponsiveProp<capitalize \| lowercase \| none \| uppercase>` | No | `-` | - |
309
+ | `to` | `string \| number` | No | `-` | - |
310
+ | `top` | `ResponsiveProp<Top<string \| number>>` | No | `-` | - |
311
+ | `transform` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - |
312
+ | `type` | `string` | No | `-` | - |
313
+ | `u1` | `string \| number` | No | `-` | - |
314
+ | `u2` | `string \| number` | No | `-` | - |
315
+ | `underlinePosition` | `string \| number` | No | `-` | - |
316
+ | `underlineThickness` | `string \| number` | No | `-` | - |
317
+ | `unicode` | `string \| number` | No | `-` | - |
318
+ | `unicodeBidi` | `string \| number` | No | `-` | - |
319
+ | `unicodeRange` | `string \| number` | No | `-` | - |
320
+ | `unitsPerEm` | `string \| number` | No | `-` | - |
321
+ | `userSelect` | `ResponsiveProp<text \| none \| auto \| all>` | No | `-` | - |
322
+ | `vAlphabetic` | `string \| number` | No | `-` | - |
323
+ | `vHanging` | `string \| number` | No | `-` | - |
324
+ | `vIdeographic` | `string \| number` | No | `-` | - |
325
+ | `vMathematical` | `string \| number` | No | `-` | - |
326
+ | `values` | `string` | No | `-` | - |
327
+ | `vectorEffect` | `string \| number` | No | `-` | - |
328
+ | `version` | `string` | No | `-` | - |
329
+ | `vertAdvY` | `string \| number` | No | `-` | - |
330
+ | `vertOriginX` | `string \| number` | No | `-` | - |
331
+ | `vertOriginY` | `string \| number` | No | `-` | - |
332
+ | `viewBox` | `string` | No | `-` | - |
333
+ | `viewTarget` | `string \| number` | No | `-` | - |
334
+ | `visibility` | `ResponsiveProp<visible \| hidden>` | No | `-` | - |
335
+ | `width` | `ResponsiveProp<Width<string \| number>>` | No | `-` | - |
336
+ | `widths` | `string \| number` | No | `-` | - |
337
+ | `wordSpacing` | `string \| number` | No | `-` | - |
338
+ | `writingMode` | `string \| number` | No | `-` | - |
339
+ | `x` | `string \| number` | No | `-` | - |
340
+ | `x1` | `string \| number` | No | `-` | - |
341
+ | `x2` | `string \| number` | No | `-` | - |
342
+ | `xAxis` | `Partial<Omit<AxisConfigProps, id>>` | No | `-` | Configuration for x-axis. |
343
+ | `xChannelSelector` | `string` | No | `-` | - |
344
+ | `xHeight` | `string \| number` | No | `-` | - |
345
+ | `xlinkActuate` | `string` | No | `-` | - |
346
+ | `xlinkArcrole` | `string` | No | `-` | - |
347
+ | `xlinkHref` | `string` | No | `-` | - |
348
+ | `xlinkRole` | `string` | No | `-` | - |
349
+ | `xlinkShow` | `string` | No | `-` | - |
350
+ | `xlinkTitle` | `string` | No | `-` | - |
351
+ | `xlinkType` | `string` | No | `-` | - |
352
+ | `xmlBase` | `string` | No | `-` | - |
353
+ | `xmlLang` | `string` | No | `-` | - |
354
+ | `xmlSpace` | `string` | No | `-` | - |
355
+ | `xmlns` | `string` | No | `-` | - |
356
+ | `xmlnsXlink` | `string` | No | `-` | - |
357
+ | `y` | `string \| number` | No | `-` | - |
358
+ | `y1` | `string \| number` | No | `-` | - |
359
+ | `y2` | `string \| number` | No | `-` | - |
360
+ | `yAxis` | `Partial<Omit<AxisConfigProps, data>> \| Partial<Omit<AxisConfigProps, data>>[]` | No | `-` | Configuration for y-axis(es). First defined axis becomes default. |
361
+ | `yChannelSelector` | `string` | No | `-` | - |
362
+ | `z` | `string \| number` | No | `-` | - |
363
+ | `zIndex` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - |
364
+ | `zoomAndPan` | `string` | No | `-` | - |
365
+
366
+
367
+ ## Examples
368
+
369
+ 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.
370
+
371
+ ### Basic Example
372
+
373
+ [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.
374
+
375
+ ```jsx live
376
+ <VStack gap={2}>
377
+ <AreaChart
378
+ enableScrubbing
379
+ height={{ base: 150, tablet: 200, desktop: 250 }}
380
+ series={[
381
+ {
382
+ id: 'prices',
383
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
384
+ },
385
+ ]}
386
+ curve="monotone"
387
+ showYAxis
388
+ yAxis={{
389
+ showGrid: true,
390
+ }}
391
+ >
392
+ <Scrubber />
393
+ </AreaChart>
394
+ <BarChart
395
+ enableScrubbing
396
+ height={{ base: 150, tablet: 200, desktop: 250 }}
397
+ series={[
398
+ {
399
+ id: 'prices',
400
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
401
+ },
402
+ ]}
403
+ showYAxis
404
+ yAxis={{
405
+ showGrid: true,
406
+ }}
407
+ >
408
+ <Scrubber hideOverlay seriesIds={[]} />
409
+ </BarChart>
410
+ <LineChart
411
+ enableScrubbing
412
+ height={{ base: 150, tablet: 200, desktop: 250 }}
413
+ series={[
414
+ {
415
+ id: 'prices',
416
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
417
+ },
418
+ ]}
419
+ curve="monotone"
420
+ showYAxis
421
+ showArea
422
+ yAxis={{
423
+ showGrid: true,
424
+ }}
425
+ >
426
+ <Scrubber />
427
+ </LineChart>
428
+ </VStack>
429
+ ```
430
+
431
+ ### Series
432
+
433
+ Series are the data that will be displayed on the chart. Each series must have a defined `id`.
434
+
435
+ #### Series Data
436
+
437
+ 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.
438
+
439
+ ```jsx live
440
+ function ForecastedPrice() {
441
+ const ForecastRect = memo(({ startIndex, endIndex }) => {
442
+ const { drawingArea, getXScale } = useCartesianChartContext();
443
+
444
+ const xScale = getXScale();
445
+
446
+ if (!xScale) return;
447
+
448
+ const startX = xScale(startIndex);
449
+ const endX = xScale(endIndex);
450
+ return (
451
+ <rect
452
+ x={startX}
453
+ y={drawingArea.y}
454
+ width={endX - startX}
455
+ height={drawingArea.height}
456
+ fill="var(--color-accentSubtleBlue)"
457
+ />
458
+ );
459
+ });
460
+ return (
461
+ <CartesianChart
462
+ enableScrubbing
463
+ height={{ base: 150, tablet: 200, desktop: 250 }}
464
+ series={[
465
+ {
466
+ id: 'prices',
467
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 54, 60, 64, 68, 72, 76],
468
+ color: 'var(--color-accentBoldBlue)',
469
+ },
470
+ {
471
+ id: 'variance',
472
+ data: [
473
+ null,
474
+ null,
475
+ null,
476
+ null,
477
+ null,
478
+ null,
479
+ null,
480
+ [52, 52],
481
+ [50, 57],
482
+ [52, 63],
483
+ [55, 75],
484
+ [57, 77],
485
+ [59, 79],
486
+ [60, 80],
487
+ ],
488
+ color: 'var(--color-accentBoldBlue)',
489
+ },
490
+ ]}
491
+ yAxis={{
492
+ showGrid: true,
493
+ }}
494
+ >
495
+ <ForecastRect startIndex={7} endIndex={13} />
496
+ <Area seriesId="variance" type="solid" curve="monotone" fillOpacity={0.3} />
497
+ <Line seriesId="prices" curve="monotone" />
498
+ </CartesianChart>
499
+ );
500
+ }
501
+ ```
502
+
503
+ #### Series Axis IDs
504
+
505
+ Each series can have a different `yAxisId`, allowing you to compare data from different contexts.
506
+
507
+ ```jsx live
508
+ <CartesianChart
509
+ height={{ base: 150, tablet: 200, desktop: 250 }}
510
+ series={[
511
+ {
512
+ id: 'revenue',
513
+ data: [455, 520, 380, 455, 190, 235],
514
+ yAxisId: 'revenue',
515
+ color: 'var(--color-accentBoldYellow)',
516
+ },
517
+ {
518
+ id: 'profit',
519
+ data: [23, 15, 30, 56, 4, 12],
520
+ yAxisId: 'profit',
521
+ color: 'var(--color-fgPositive)',
522
+ },
523
+ ]}
524
+ xAxis={{
525
+ data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
526
+ scaleType: 'band',
527
+ }}
528
+ yAxis={[
529
+ {
530
+ id: 'revenue',
531
+ },
532
+ {
533
+ id: 'profit',
534
+ },
535
+ ]}
536
+ >
537
+ <XAxis showLine showTickMarks />
538
+ <YAxis
539
+ showGrid
540
+ showLine
541
+ showTickMarks
542
+ axisId="revenue"
543
+ position="left"
544
+ requestedTickCount={5}
545
+ tickLabelFormatter={(value) => `$${value}k`}
546
+ width={60}
547
+ />
548
+ <YAxis
549
+ showLine
550
+ showTickMarks
551
+ axisId="profit"
552
+ requestedTickCount={5}
553
+ tickLabelFormatter={(value) => `$${value}k`}
554
+ />
555
+ <BarPlot />
556
+ </CartesianChart>
557
+ ```
558
+
559
+ #### Series Stacks
560
+
561
+ You can provide a `stackId` to stack series together.
562
+
563
+ ```jsx live
564
+ <AreaChart
565
+ enableScrubbing
566
+ height={{ base: 150, tablet: 200, desktop: 250 }}
567
+ series={[
568
+ {
569
+ id: 'pricesA',
570
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
571
+ stackId: 'prices',
572
+ color: 'var(--color-accentBoldGreen)',
573
+ },
574
+ {
575
+ id: 'pricesB',
576
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
577
+ stackId: 'prices',
578
+ color: 'var(--color-accentBoldPurple)',
579
+ },
580
+ ]}
581
+ curve="monotone"
582
+ showYAxis
583
+ yAxis={{
584
+ showGrid: true,
585
+ }}
586
+ >
587
+ <Scrubber />
588
+ </LineChart>
589
+ ```
590
+
591
+ ### Axes
592
+
593
+ 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.
594
+
595
+ ```jsx live
596
+ <CartesianChart
597
+ height={{ base: 150, tablet: 200, desktop: 250 }}
598
+ series={[
599
+ {
600
+ id: 'prices',
601
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
602
+ },
603
+ ]}
604
+ xAxis={{
605
+ scaleType: 'band',
606
+ }}
607
+ yAxis={{
608
+ domain: { min: 0 },
609
+ }}
610
+ >
611
+ <YAxis showLine showTickMarks showGrid />
612
+ <XAxis showLine showTickMarks />
613
+ <BarPlot />
614
+ </CartesianChart>
615
+ ```
616
+
617
+ For more info, learn about [XAxis](/components/graphs/XAxis/#axis-config) and [YAxis](/components/graphs/YAxis/#axis-config) configuration.
618
+
619
+ ### Inset
620
+
621
+ 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.
622
+
623
+ You can also remove the default inset, such as to have a compact line chart.
624
+
625
+ ```jsx live
626
+ function Insets() {
627
+ const data = [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58];
628
+
629
+ const formatPrice = useCallback((dataIndex: number) => {
630
+ const price = data[dataIndex];
631
+ return `$${price.toLocaleString('en-US', {
632
+ minimumFractionDigits: 2,
633
+ maximumFractionDigits: 2,
634
+ })}`;
635
+ }, []);
636
+
637
+ return (
638
+ <HStack gap={2}>
639
+ <VStack gap={1}>
640
+ <Text font="label1">No inset</Text>
641
+ <LineChart
642
+ height={100}
643
+ inset={0}
644
+ series={[
645
+ {
646
+ id: 'prices',
647
+ data,
648
+ },
649
+ ]}
650
+ yAxis={{ domainLimit: 'strict' }}
651
+ curve="monotone"
652
+ showArea
653
+ style={{ border: '2px solid var(--color-fgPrimary)' }}
654
+ />
655
+ </VStack>
656
+ <VStack gap={1}>
657
+ <Text font="label1">Custom inset</Text>
658
+ <LineChart
659
+ enableScrubbing
660
+ height={100}
661
+ inset={{ left: 10, top: 16, right: 10, bottom: 10 }}
662
+ series={[
663
+ {
664
+ id: 'prices',
665
+ data,
666
+ },
667
+ ]}
668
+ yAxis={{ domainLimit: 'strict' }}
669
+ curve="monotone"
670
+ showArea
671
+ style={{ border: '2px solid var(--color-fgPrimary)' }}
672
+ >
673
+ <Scrubber label={formatPrice} />
674
+ </LineChart>
675
+ </VStack>
676
+ <VStack gap={1}>
677
+ <Text font="label1">Default inset</Text>
678
+ <LineChart
679
+ enableScrubbing
680
+ height={100}
681
+ series={[
682
+ {
683
+ id: 'prices',
684
+ data,
685
+ },
686
+ ]}
687
+ yAxis={{ domainLimit: 'strict' }}
688
+ curve="monotone"
689
+ showArea
690
+ style={{ border: '2px solid var(--color-fgPrimary)' }}
691
+ >
692
+ <Scrubber label={formatPrice} />
693
+ </LineChart>
694
+ </VStack>
695
+ </HStack>
696
+ );
697
+ }
698
+ ```
699
+
700
+ ### Scrubbing
701
+
702
+ 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.
703
+
704
+ ```jsx live
705
+ function Scrubbing() {
706
+ const [scrubIndex, setScrubIndex] = useState(undefined);
707
+
708
+ const onScrubberPositionChange = useCallback((index: number | undefined) => {
709
+ setScrubIndex(index);
710
+ }, []);
711
+
712
+ return (
713
+ <VStack gap={2}>
714
+ <Text font="label1">Scrubber index: {scrubIndex ?? 'none'}</Text>
715
+ <LineChart
716
+ enableScrubbing
717
+ onScrubberPositionChange={onScrubberPositionChange}
718
+ height={{ base: 150, tablet: 200, desktop: 250 }}
719
+ series={[
720
+ {
721
+ id: 'prices',
722
+ data: [10, 22, 29, 45, 98, 45, 22, 52, 21, 4, 68, 20, 21, 58],
723
+ },
724
+ ]}
725
+ curve="monotone"
726
+ showYAxis
727
+ showArea
728
+ yAxis={{
729
+ showGrid: true,
730
+ width: 32
731
+ }}
732
+ inset={{ right: 0 }}
733
+ >
734
+ <Scrubber />
735
+ </LineChart>
736
+ </VStack>
737
+ );
738
+ }
739
+ ```
740
+
741
+ ### Customization
742
+
743
+ #### Price with Volume
744
+
745
+ You can showcase the price and volume of an asset over time within one chart.
746
+
747
+ ```jsx live
748
+ function PriceWithVolume() {
749
+ const [scrubIndex, setScrubIndex] = useState(null);
750
+ const btcData = btcCandles
751
+ .slice(0, 180)
752
+ .reverse()
753
+
754
+ const btcPrices = btcData.map((candle) => parseFloat(candle.close));
755
+ const btcVolumes = btcData.map((candle) => parseFloat(candle.volume));
756
+ const btcDates = btcData.map((candle) => new Date(parseInt(candle.start) * 1000));
757
+
758
+ const formatPrice = useCallback((price: number) => {
759
+ return `$${price.toLocaleString('en-US', {
760
+ minimumFractionDigits: 2,
761
+ maximumFractionDigits: 2,
762
+ })}`;
763
+ }, []);
764
+
765
+ const formatPriceInThousands = useCallback((price: number) => {
766
+ return `$${(price / 1000).toLocaleString('en-US', {
767
+ minimumFractionDigits: 0,
768
+ maximumFractionDigits: 2,
769
+ })}k`;
770
+ }, []);
771
+
772
+ const formatVolume = useCallback((volume: number) => {
773
+ return `${(volume / 1000).toFixed(2)}K`;
774
+ }, []);
775
+
776
+ const formatDate = useCallback((date: Date) => {
777
+ return date.toLocaleDateString('en-US', {
778
+ month: 'short',
779
+ day: 'numeric',
780
+ });
781
+ }, []);
782
+
783
+ const displayIndex = scrubIndex ?? btcPrices.length - 1;
784
+ const currentPrice = btcPrices[displayIndex];
785
+ const currentVolume = btcVolumes[displayIndex];
786
+ const currentDate = btcDates[displayIndex];
787
+ const priceChange = displayIndex > 0
788
+ ? ((currentPrice - btcPrices[displayIndex - 1]) / btcPrices[displayIndex - 1])
789
+ : 0;
790
+
791
+ const accessibilityLabel = useMemo(() => {
792
+ if (scrubIndex === null) return `Current Bitcoin price: ${formatPrice(currentPrice)}, Volume: ${formatVolume(currentVolume)}`;
793
+ return `Bitcoin price at ${formatDate(currentDate)}: ${formatPrice(currentPrice)}, Volume: ${formatVolume(currentVolume)}`;
794
+ }, [scrubIndex, currentPrice, currentVolume, currentDate, formatPrice, formatVolume, formatDate]);
795
+
796
+ const ThinSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={1} />);
797
+
798
+ const headerId = useId();
799
+
800
+ return (
801
+ <VStack gap={2}>
802
+ <SectionHeader
803
+ id={headerId}
804
+ style={{ padding: 0 }}
805
+ title={<Text font="title1">Bitcoin</Text>}
806
+ balance={<Text font="title2">{formatPrice(currentPrice)}</Text>}
807
+ end={
808
+ <HStack gap={2}>
809
+ <VStack justifyContent="center" alignItems="flex-end">
810
+ <Text font="label1">{formatDate(currentDate)}</Text>
811
+ <Text font="label2">{formatVolume(currentVolume)}</Text>
812
+ </VStack>
813
+ <VStack justifyContent="center">
814
+ <RemoteImage source={assets.btc.imageUrl} size="xl" shape="circle" />
815
+ </VStack>
816
+ </HStack>
817
+ }
818
+ />
819
+ <CartesianChart
820
+ enableScrubbing
821
+ onScrubberPositionChange={setScrubIndex}
822
+ height={250}
823
+ series={[
824
+ {
825
+ id: 'prices',
826
+ data: btcPrices,
827
+ color: assets.btc.color,
828
+ yAxisId: 'price',
829
+ },
830
+ {
831
+ id: 'volume',
832
+ data: btcVolumes,
833
+ color: 'var(--color-fgMuted)',
834
+ yAxisId: 'volume',
835
+ },
836
+ ]}
837
+ style={{ outlineColor: assets.btc.color }}
838
+ xAxis={{ scaleType: 'band', range: ({ min, max }) => ({ min, max: max - 16 }) }}
839
+ yAxis={[
840
+ {
841
+ id: 'price',
842
+ domain: ({ min, max }) => ({ min: min * 0.9, max }),
843
+ },
844
+ {
845
+ id: 'volume',
846
+ range: ({ min, max }) => ({ min: max - 32, max }),
847
+ },
848
+ ]}
849
+ accessibilityLabel={accessibilityLabel}
850
+ aria-labelledby={headerId}
851
+ inset={{ top: 8, left: 8, right: 0, bottom: 0 }}
852
+ >
853
+ <YAxis axisId="price" showGrid tickLabelFormatter={formatPriceInThousands} width={48} GridLineComponent={ThinSolidLine} />
854
+ <BarPlot seriesIds={['volume']} />
855
+ <Line seriesId="prices" curve="monotone" showArea />
856
+ <Scrubber seriesIds={['prices']} />
857
+ </CartesianChart>
858
+ </VStack>
859
+ );
860
+ }
861
+ ```
862
+
863
+ #### Earnings History
864
+
865
+ You can also create your own type of cartesian chart by using `getSeriesData`, `getXScale`, and `getYScale` directly.
866
+
867
+ ```jsx live
868
+ function EarningsHistory() {
869
+ const CirclePlot = memo(({ seriesId, opacity = 1 }: { seriesId: string, opacity?: number }) => {
870
+ const { drawingArea, getSeries, getSeriesData, getXScale, getYScale } = useCartesianChartContext();
871
+ const series = getSeries(seriesId);
872
+ const data = getSeriesData(seriesId);
873
+ const xScale = getXScale();
874
+ const yScale = getYScale(series?.yAxisId);
875
+
876
+ if (!xScale || !yScale || !data || !isCategoricalScale(xScale)) return null;
877
+
878
+ const yScaleSize = Math.abs(yScale.range()[1] - yScale.range()[0]);
879
+
880
+ // Have circle diameter be the smaller of the x scale bandwidth or 10% of the y space available
881
+ const diameter = Math.min(xScale.bandwidth(), yScaleSize / 10);
882
+
883
+ return (
884
+ <g>
885
+ {data.map((value, index) => {
886
+ if (value === null || value === undefined) return null;
887
+
888
+ // Get x position from band scale - center of the band
889
+ const xPos = xScale(index);
890
+ if (xPos === undefined) return null;
891
+
892
+ const centerX = xPos + xScale.bandwidth() / 2;
893
+
894
+ // Get y position from value
895
+ const yValue = Array.isArray(value) ? value[1] : value;
896
+ const centerY = yScale(yValue);
897
+ if (centerY === undefined) return null;
898
+
899
+ return (
900
+ <circle
901
+ key={`${seriesId}-${index}`}
902
+ cx={centerX}
903
+ cy={centerY}
904
+ fill={series?.color || 'var(--color-fgPrimary)'}
905
+ opacity={opacity}
906
+ r={diameter / 2}
907
+ />
908
+ );
909
+ })}
910
+ </g>
911
+ );
912
+ });
913
+
914
+ const quarters = useMemo(() => ['Q1', 'Q2', 'Q3', 'Q4'], []);
915
+ const estimatedEPS = useMemo(() => [1.71, 1.82, 1.93, 2.34], []);
916
+ const actualEPS = useMemo(() => [1.68, 1.83, 2.01, 2.24], []);
917
+
918
+ const formatEarningAmount = useCallback((value: number) => {
919
+ return `$${value.toLocaleString('en-US', {
920
+ minimumFractionDigits: 2,
921
+ maximumFractionDigits: 2,
922
+ })}`;
923
+ }, []);
924
+
925
+ const surprisePercentage = useCallback(
926
+ (index: number): ChartTextChildren => {
927
+ const percentage = (actualEPS[index] - estimatedEPS[index]) / estimatedEPS[index];
928
+ const percentageString = percentage.toLocaleString('en-US', {
929
+ style: 'percent',
930
+ minimumFractionDigits: 2,
931
+ maximumFractionDigits: 2,
932
+ });
933
+
934
+ return (
935
+ <tspan
936
+ style={{
937
+ fill: percentage > 0 ? 'var(--color-fgPositive)' : 'var(--color-fgNegative)',
938
+ fontWeight: 'bold',
939
+ }}
940
+ >
941
+ {percentage > 0 ? '+' : ''}
942
+ {percentageString}
943
+ </tspan>
944
+ );
945
+ },
946
+ [actualEPS, estimatedEPS],
947
+ );
948
+
949
+ const LegendItem = memo(({ opacity = 1, label }: { opacity?: number, label: string }) => {
950
+ return (
951
+ <Box alignItems="center" gap={0.5}>
952
+ <LegendDot opacity={opacity} />
953
+ <Text font="label2">{label}</Text>
954
+ </Box>
955
+ );
956
+ });
957
+
958
+ const LegendDot = memo((props: BoxBaseProps) => {
959
+ return <Box borderRadius={1000} width={10} height={10} background="bgPositive" {...props} />;
960
+ });
961
+
962
+ return (
963
+ <VStack gap={0.5}>
964
+ <CartesianChart
965
+ overflow="visible"
966
+ animate={false}
967
+ height={250}
968
+ padding={0}
969
+ series={[
970
+ {
971
+ id: 'estimatedEPS',
972
+ data: estimatedEPS,
973
+ color: 'var(--color-bgPositive)',
974
+ },
975
+ { id: 'actualEPS', data: actualEPS, color: 'var(--color-bgPositive)' },
976
+ ]}
977
+ xAxis={{ scaleType: 'band', categoryPadding: 0.25 }}
978
+ >
979
+ <YAxis
980
+ showGrid
981
+ position="left"
982
+ requestedTickCount={3}
983
+ tickLabelFormatter={formatEarningAmount}
984
+ />
985
+ <XAxis height={20} tickLabelFormatter={(index) => quarters[index]} />
986
+ <XAxis height={20} tickLabelFormatter={surprisePercentage} />
987
+ <CirclePlot opacity={0.5} seriesId="estimatedEPS" />
988
+ <CirclePlot seriesId="actualEPS" />
989
+ </CartesianChart>
990
+ <HStack justifyContent="flex-end" gap={2}>
991
+ <LegendItem opacity={0.5} label="Estimated EPS" />
992
+ <LegendItem label="Actual EPS" />
993
+ </HStack>
994
+ </VStack>
995
+ );
996
+ }
997
+ ```
998
+
999
+ #### Trading Trends
1000
+
1001
+ You can have multiple axes with different domains and ranges to showcase different pieces of data over the time time period.
1002
+
1003
+ ```jsx live
1004
+ function TradingTrends() {
1005
+ const profitData = [34, 24, 28, -4, 8, -16, -3, 12, 24, 18, 20, 28];
1006
+ const gains = profitData.map((value) => (value > 0 ? value : 0));
1007
+ const losses = profitData.map((value) => (value < 0 ? value : 0));
1008
+
1009
+ const renderProfit = useCallback((value: number) => {
1010
+ return `$${value}M`;
1011
+ }, []);
1012
+
1013
+ const ThinSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={1} strokeLinecap="butt" />);
1014
+ const ThickSolidLine = memo((props: SolidLineProps) => <SolidLine {...props} strokeWidth={2} strokeLinecap="butt" />);
1015
+
1016
+ return (
1017
+ <CartesianChart
1018
+ height={250}
1019
+ series={[
1020
+ { id: 'gains', data: gains, yAxisId: 'profit', color: 'var(--color-bgPositive)', stackId: 'bars' },
1021
+ { id: 'losses', data: losses, yAxisId: 'profit', color: 'var(--color-bgNegative)', stackId: 'bars' },
1022
+ {
1023
+ id: 'revenue',
1024
+ data: [128, 118, 122, 116, 120, 114, 118, 122, 126, 130, 134, 138],
1025
+ yAxisId: 'revenue',
1026
+ color: 'var(--color-fgMuted)',
1027
+ },
1028
+ ]}
1029
+ xAxis={{ scaleType: 'band', data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }}
1030
+ yAxis={[
1031
+ { id: 'profit', range: ({ min, max }) => ({ min: min, max: max - 64 }), domain: { min: -40, max: 40 } },
1032
+ { id: 'revenue', range: ({ min, max }) => ({ min: max - 64, max }), domain: { min: 100 } },
1033
+ ]}
1034
+ >
1035
+ <YAxis axisId="profit" position="left" showGrid tickLabelFormatter={renderProfit} GridLineComponent={ThinSolidLine} />
1036
+ <XAxis />
1037
+ <ReferenceLine LineComponent={ThickSolidLine} dataY={0} yAxisId="profit" stroke="rgb(var(--gray15))" />
1038
+ <BarPlot seriesIds={['gains', 'losses']} />
1039
+ <Line seriesId="revenue" curve="monotone" showArea />
1040
+ </CartesianChart>
1041
+ );
1042
+ }
1043
+ ```
1044
+
1045
+