@coinbase/cds-mcp-server 8.17.2 → 8.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/mcp-docs/mobile/components/Accordion.txt +188 -0
  3. package/mcp-docs/mobile/components/AccordionItem.txt +29 -0
  4. package/mcp-docs/mobile/components/Alert.txt +155 -0
  5. package/mcp-docs/mobile/components/AreaChart.txt +265 -0
  6. package/mcp-docs/mobile/components/Avatar.txt +195 -0
  7. package/mcp-docs/mobile/components/AvatarButton.txt +225 -0
  8. package/mcp-docs/mobile/components/Banner.txt +221 -0
  9. package/mcp-docs/mobile/components/BarChart.txt +815 -0
  10. package/mcp-docs/mobile/components/Box.txt +173 -0
  11. package/mcp-docs/mobile/components/BrowserBar.txt +146 -0
  12. package/mcp-docs/mobile/components/Button.txt +198 -0
  13. package/mcp-docs/mobile/components/ButtonGroup.txt +79 -0
  14. package/mcp-docs/mobile/components/Carousel.txt +1083 -0
  15. package/mcp-docs/mobile/components/CartesianChart.txt +825 -0
  16. package/mcp-docs/mobile/components/CellMedia.txt +70 -0
  17. package/mcp-docs/mobile/components/Checkbox.txt +245 -0
  18. package/mcp-docs/mobile/components/CheckboxCell.txt +201 -0
  19. package/mcp-docs/mobile/components/CheckboxGroup.txt +284 -0
  20. package/mcp-docs/mobile/components/Chip.txt +194 -0
  21. package/mcp-docs/mobile/components/Coachmark.txt +157 -0
  22. package/mcp-docs/mobile/components/Collapsible.txt +104 -0
  23. package/mcp-docs/mobile/components/ContainedAssetCard.txt +134 -0
  24. package/mcp-docs/mobile/components/ContentCard.txt +365 -0
  25. package/mcp-docs/mobile/components/ContentCardBody.txt +135 -0
  26. package/mcp-docs/mobile/components/ContentCardFooter.txt +127 -0
  27. package/mcp-docs/mobile/components/ContentCardHeader.txt +145 -0
  28. package/mcp-docs/mobile/components/ContentCell.txt +226 -0
  29. package/mcp-docs/mobile/components/ControlGroup.txt +443 -0
  30. package/mcp-docs/mobile/components/DatePicker.txt +496 -0
  31. package/mcp-docs/mobile/components/Divider.txt +138 -0
  32. package/mcp-docs/mobile/components/DotCount.txt +145 -0
  33. package/mcp-docs/mobile/components/DotStatusColor.txt +58 -0
  34. package/mcp-docs/mobile/components/DotSymbol.txt +134 -0
  35. package/mcp-docs/mobile/components/Fallback.txt +157 -0
  36. package/mcp-docs/mobile/components/FloatingAssetCard.txt +155 -0
  37. package/mcp-docs/mobile/components/HStack.txt +234 -0
  38. package/mcp-docs/mobile/components/HeroSquare.txt +47 -0
  39. package/mcp-docs/mobile/components/Icon.txt +51 -0
  40. package/mcp-docs/mobile/components/IconButton.txt +268 -0
  41. package/mcp-docs/mobile/components/InputChip.txt +187 -0
  42. package/mcp-docs/mobile/components/Interactable.txt +186 -0
  43. package/mcp-docs/mobile/components/LineChart.txt +1324 -0
  44. package/mcp-docs/mobile/components/Link.txt +291 -0
  45. package/mcp-docs/mobile/components/ListCell.txt +412 -0
  46. package/mcp-docs/mobile/components/LogoMark.txt +84 -0
  47. package/mcp-docs/mobile/components/LogoWordMark.txt +93 -0
  48. package/mcp-docs/mobile/components/Lottie.txt +138 -0
  49. package/mcp-docs/mobile/components/LottieStatusAnimation.txt +46 -0
  50. package/mcp-docs/mobile/components/Modal.txt +83 -0
  51. package/mcp-docs/mobile/components/ModalBody.txt +33 -0
  52. package/mcp-docs/mobile/components/ModalFooter.txt +24 -0
  53. package/mcp-docs/mobile/components/ModalHeader.txt +27 -0
  54. package/mcp-docs/mobile/components/MultiContentModule.txt +379 -0
  55. package/mcp-docs/mobile/components/NavigationTitle.txt +131 -0
  56. package/mcp-docs/mobile/components/NavigationTitleSelect.txt +141 -0
  57. package/mcp-docs/mobile/components/NudgeCard.txt +89 -0
  58. package/mcp-docs/mobile/components/Numpad.txt +340 -0
  59. package/mcp-docs/mobile/components/Overlay.txt +151 -0
  60. package/mcp-docs/mobile/components/PageFooter.txt +160 -0
  61. package/mcp-docs/mobile/components/PageHeader.txt +185 -0
  62. package/mcp-docs/mobile/components/PeriodSelector.txt +407 -0
  63. package/mcp-docs/mobile/components/Pictogram.txt +47 -0
  64. package/mcp-docs/mobile/components/Point.txt +204 -0
  65. package/mcp-docs/mobile/components/PortalProvider.txt +78 -0
  66. package/mcp-docs/mobile/components/Pressable.txt +210 -0
  67. package/mcp-docs/mobile/components/ProgressBar.txt +129 -0
  68. package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +160 -0
  69. package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +137 -0
  70. package/mcp-docs/mobile/components/ProgressCircle.txt +236 -0
  71. package/mcp-docs/mobile/components/Radio.txt +241 -0
  72. package/mcp-docs/mobile/components/RadioCell.txt +201 -0
  73. package/mcp-docs/mobile/components/RadioGroup.txt +281 -0
  74. package/mcp-docs/mobile/components/ReferenceLine.txt +152 -0
  75. package/mcp-docs/mobile/components/RemoteImage.txt +105 -0
  76. package/mcp-docs/mobile/components/RemoteImageGroup.txt +60 -0
  77. package/mcp-docs/mobile/components/RollingNumber.txt +788 -0
  78. package/mcp-docs/mobile/components/Scrubber.txt +203 -0
  79. package/mcp-docs/mobile/components/SearchInput.txt +191 -0
  80. package/mcp-docs/mobile/components/SectionHeader.txt +204 -0
  81. package/mcp-docs/mobile/components/SegmentedTabs.txt +315 -0
  82. package/mcp-docs/mobile/components/Select.txt +211 -0
  83. package/mcp-docs/mobile/components/SelectChip.txt +323 -0
  84. package/mcp-docs/mobile/components/SelectOption.txt +84 -0
  85. package/mcp-docs/mobile/components/SlideButton.txt +330 -0
  86. package/mcp-docs/mobile/components/Spacer.txt +83 -0
  87. package/mcp-docs/mobile/components/Sparkline.txt +122 -0
  88. package/mcp-docs/mobile/components/SparklineGradient.txt +106 -0
  89. package/mcp-docs/mobile/components/SparklineInteractive.txt +156 -0
  90. package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +72 -0
  91. package/mcp-docs/mobile/components/Spinner.txt +48 -0
  92. package/mcp-docs/mobile/components/SpotIcon.txt +47 -0
  93. package/mcp-docs/mobile/components/SpotRectangle.txt +47 -0
  94. package/mcp-docs/mobile/components/SpotSquare.txt +47 -0
  95. package/mcp-docs/mobile/components/Stepper.txt +527 -0
  96. package/mcp-docs/mobile/components/SubBrandLogoMark.txt +125 -0
  97. package/mcp-docs/mobile/components/SubBrandLogoWordMark.txt +125 -0
  98. package/mcp-docs/mobile/components/Switch.txt +97 -0
  99. package/mcp-docs/mobile/components/TabIndicator.txt +48 -0
  100. package/mcp-docs/mobile/components/TabLabel.txt +153 -0
  101. package/mcp-docs/mobile/components/TabNavigation.txt +146 -0
  102. package/mcp-docs/mobile/components/TabbedChips.txt +142 -0
  103. package/mcp-docs/mobile/components/Tabs.txt +190 -0
  104. package/mcp-docs/mobile/components/Tag.txt +300 -0
  105. package/mcp-docs/mobile/components/Text.txt +211 -0
  106. package/mcp-docs/mobile/components/TextInput.txt +717 -0
  107. package/mcp-docs/mobile/components/ThemeProvider.txt +132 -0
  108. package/mcp-docs/mobile/components/Toast.txt +196 -0
  109. package/mcp-docs/mobile/components/Tooltip.txt +59 -0
  110. package/mcp-docs/mobile/components/TopNavBar.txt +161 -0
  111. package/mcp-docs/mobile/components/Tour.txt +158 -0
  112. package/mcp-docs/mobile/components/Tray.txt +252 -0
  113. package/mcp-docs/mobile/components/UpsellCard.txt +321 -0
  114. package/mcp-docs/mobile/components/VStack.txt +222 -0
  115. package/mcp-docs/mobile/components/XAxis.txt +621 -0
  116. package/mcp-docs/mobile/components/YAxis.txt +567 -0
  117. package/mcp-docs/mobile/getting-started/ai-overview.txt +108 -0
  118. package/mcp-docs/mobile/getting-started/installation.txt +57 -0
  119. package/mcp-docs/mobile/getting-started/introduction.txt +102 -0
  120. package/mcp-docs/mobile/getting-started/playground.txt +28 -0
  121. package/mcp-docs/mobile/getting-started/styling.txt +84 -0
  122. package/mcp-docs/mobile/getting-started/theming.txt +286 -0
  123. package/mcp-docs/mobile/hooks/useDimensions.txt +72 -0
  124. package/mcp-docs/mobile/hooks/useEventHandler.txt +120 -0
  125. package/mcp-docs/mobile/hooks/useMergeRefs.txt +116 -0
  126. package/mcp-docs/mobile/hooks/useOverlayContentContext.txt +280 -0
  127. package/mcp-docs/mobile/hooks/usePreviousValue.txt +74 -0
  128. package/mcp-docs/mobile/hooks/useRefMap.txt +178 -0
  129. package/mcp-docs/mobile/hooks/useTheme.txt +321 -0
  130. package/mcp-docs/mobile/routes.txt +139 -0
  131. package/mcp-docs/web/components/Accordion.txt +189 -0
  132. package/mcp-docs/web/components/AccordionItem.txt +31 -0
  133. package/mcp-docs/web/components/Alert.txt +164 -0
  134. package/mcp-docs/web/components/AreaChart.txt +510 -0
  135. package/mcp-docs/web/components/Avatar.txt +211 -0
  136. package/mcp-docs/web/components/AvatarButton.txt +240 -0
  137. package/mcp-docs/web/components/Banner.txt +226 -0
  138. package/mcp-docs/web/components/BarChart.txt +1267 -0
  139. package/mcp-docs/web/components/Box.txt +175 -0
  140. package/mcp-docs/web/components/Button.txt +212 -0
  141. package/mcp-docs/web/components/ButtonGroup.txt +79 -0
  142. package/mcp-docs/web/components/Calendar.txt +181 -0
  143. package/mcp-docs/web/components/Carousel.txt +1575 -0
  144. package/mcp-docs/web/components/CartesianChart.txt +1044 -0
  145. package/mcp-docs/web/components/CellMedia.txt +56 -0
  146. package/mcp-docs/web/components/Checkbox.txt +188 -0
  147. package/mcp-docs/web/components/CheckboxCell.txt +202 -0
  148. package/mcp-docs/web/components/CheckboxGroup.txt +219 -0
  149. package/mcp-docs/web/components/Chip.txt +196 -0
  150. package/mcp-docs/web/components/Coachmark.txt +188 -0
  151. package/mcp-docs/web/components/Collapsible.txt +119 -0
  152. package/mcp-docs/web/components/ContainedAssetCard.txt +232 -0
  153. package/mcp-docs/web/components/ContentCard.txt +367 -0
  154. package/mcp-docs/web/components/ContentCardBody.txt +137 -0
  155. package/mcp-docs/web/components/ContentCardFooter.txt +129 -0
  156. package/mcp-docs/web/components/ContentCardHeader.txt +147 -0
  157. package/mcp-docs/web/components/ContentCell.txt +219 -0
  158. package/mcp-docs/web/components/ControlGroup.txt +436 -0
  159. package/mcp-docs/web/components/DatePicker.txt +505 -0
  160. package/mcp-docs/web/components/Divider.txt +143 -0
  161. package/mcp-docs/web/components/DotCount.txt +149 -0
  162. package/mcp-docs/web/components/DotStatusColor.txt +58 -0
  163. package/mcp-docs/web/components/DotSymbol.txt +137 -0
  164. package/mcp-docs/web/components/Dropdown.txt +119 -0
  165. package/mcp-docs/web/components/Fallback.txt +163 -0
  166. package/mcp-docs/web/components/FloatingAssetCard.txt +250 -0
  167. package/mcp-docs/web/components/FullscreenAlert.txt +69 -0
  168. package/mcp-docs/web/components/FullscreenModal.txt +145 -0
  169. package/mcp-docs/web/components/FullscreenModalLayout.txt +187 -0
  170. package/mcp-docs/web/components/Grid.txt +236 -0
  171. package/mcp-docs/web/components/GridColumn.txt +209 -0
  172. package/mcp-docs/web/components/HStack.txt +236 -0
  173. package/mcp-docs/web/components/HeroSquare.txt +48 -0
  174. package/mcp-docs/web/components/Icon.txt +145 -0
  175. package/mcp-docs/web/components/IconButton.txt +390 -0
  176. package/mcp-docs/web/components/InputChip.txt +187 -0
  177. package/mcp-docs/web/components/Interactable.txt +193 -0
  178. package/mcp-docs/web/components/LineChart.txt +1576 -0
  179. package/mcp-docs/web/components/Link.txt +243 -0
  180. package/mcp-docs/web/components/ListCell.txt +418 -0
  181. package/mcp-docs/web/components/LogoMark.txt +84 -0
  182. package/mcp-docs/web/components/LogoWordMark.txt +93 -0
  183. package/mcp-docs/web/components/Lottie.txt +157 -0
  184. package/mcp-docs/web/components/LottieStatusAnimation.txt +57 -0
  185. package/mcp-docs/web/components/MediaQueryProvider.txt +108 -0
  186. package/mcp-docs/web/components/Modal.txt +196 -0
  187. package/mcp-docs/web/components/ModalBody.txt +117 -0
  188. package/mcp-docs/web/components/ModalFooter.txt +119 -0
  189. package/mcp-docs/web/components/ModalHeader.txt +123 -0
  190. package/mcp-docs/web/components/MultiContentModule.txt +381 -0
  191. package/mcp-docs/web/components/NavigationBar.txt +102 -0
  192. package/mcp-docs/web/components/NavigationTitle.txt +25 -0
  193. package/mcp-docs/web/components/NavigationTitleSelect.txt +45 -0
  194. package/mcp-docs/web/components/NudgeCard.txt +181 -0
  195. package/mcp-docs/web/components/Overlay.txt +171 -0
  196. package/mcp-docs/web/components/PageFooter.txt +184 -0
  197. package/mcp-docs/web/components/PageHeader.txt +243 -0
  198. package/mcp-docs/web/components/Pagination.txt +499 -0
  199. package/mcp-docs/web/components/PeriodSelector.txt +703 -0
  200. package/mcp-docs/web/components/Pictogram.txt +48 -0
  201. package/mcp-docs/web/components/Point.txt +460 -0
  202. package/mcp-docs/web/components/PortalProvider.txt +76 -0
  203. package/mcp-docs/web/components/Pressable.txt +193 -0
  204. package/mcp-docs/web/components/ProgressBar.txt +163 -0
  205. package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +212 -0
  206. package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +181 -0
  207. package/mcp-docs/web/components/ProgressCircle.txt +443 -0
  208. package/mcp-docs/web/components/Radio.txt +219 -0
  209. package/mcp-docs/web/components/RadioCell.txt +215 -0
  210. package/mcp-docs/web/components/RadioGroup.txt +288 -0
  211. package/mcp-docs/web/components/ReferenceLine.txt +451 -0
  212. package/mcp-docs/web/components/RemoteImage.txt +165 -0
  213. package/mcp-docs/web/components/RemoteImageGroup.txt +86 -0
  214. package/mcp-docs/web/components/RollingNumber.txt +1021 -0
  215. package/mcp-docs/web/components/Scrubber.txt +231 -0
  216. package/mcp-docs/web/components/SearchInput.txt +117 -0
  217. package/mcp-docs/web/components/SectionHeader.txt +217 -0
  218. package/mcp-docs/web/components/SegmentedTabs.txt +324 -0
  219. package/mcp-docs/web/components/Select.txt +224 -0
  220. package/mcp-docs/web/components/SelectChip.txt +314 -0
  221. package/mcp-docs/web/components/SelectOption.txt +165 -0
  222. package/mcp-docs/web/components/Sidebar.txt +349 -0
  223. package/mcp-docs/web/components/SidebarItem.txt +131 -0
  224. package/mcp-docs/web/components/SidebarMoreMenu.txt +30 -0
  225. package/mcp-docs/web/components/Spacer.txt +173 -0
  226. package/mcp-docs/web/components/Sparkline.txt +122 -0
  227. package/mcp-docs/web/components/SparklineGradient.txt +106 -0
  228. package/mcp-docs/web/components/SparklineInteractive.txt +153 -0
  229. package/mcp-docs/web/components/SparklineInteractiveHeader.txt +76 -0
  230. package/mcp-docs/web/components/Spinner.txt +128 -0
  231. package/mcp-docs/web/components/SpotIcon.txt +48 -0
  232. package/mcp-docs/web/components/SpotRectangle.txt +48 -0
  233. package/mcp-docs/web/components/SpotSquare.txt +48 -0
  234. package/mcp-docs/web/components/Stepper.txt +682 -0
  235. package/mcp-docs/web/components/SubBrandLogoMark.txt +125 -0
  236. package/mcp-docs/web/components/SubBrandLogoWordMark.txt +125 -0
  237. package/mcp-docs/web/components/Switch.txt +85 -0
  238. package/mcp-docs/web/components/TabIndicator.txt +48 -0
  239. package/mcp-docs/web/components/TabLabel.txt +158 -0
  240. package/mcp-docs/web/components/TabNavigation.txt +159 -0
  241. package/mcp-docs/web/components/TabbedChips.txt +155 -0
  242. package/mcp-docs/web/components/Table.txt +367 -0
  243. package/mcp-docs/web/components/TableBody.txt +83 -0
  244. package/mcp-docs/web/components/TableCaption.txt +102 -0
  245. package/mcp-docs/web/components/TableCell.txt +165 -0
  246. package/mcp-docs/web/components/TableCellFallback.txt +97 -0
  247. package/mcp-docs/web/components/TableFooter.txt +83 -0
  248. package/mcp-docs/web/components/TableHeader.txt +100 -0
  249. package/mcp-docs/web/components/TableRow.txt +140 -0
  250. package/mcp-docs/web/components/Tabs.txt +212 -0
  251. package/mcp-docs/web/components/Tag.txt +304 -0
  252. package/mcp-docs/web/components/Text.txt +232 -0
  253. package/mcp-docs/web/components/TextInput.txt +652 -0
  254. package/mcp-docs/web/components/ThemeProvider.txt +199 -0
  255. package/mcp-docs/web/components/TileButton.txt +158 -0
  256. package/mcp-docs/web/components/Toast.txt +203 -0
  257. package/mcp-docs/web/components/Tooltip.txt +89 -0
  258. package/mcp-docs/web/components/Tour.txt +179 -0
  259. package/mcp-docs/web/components/Tray.txt +288 -0
  260. package/mcp-docs/web/components/UpsellCard.txt +319 -0
  261. package/mcp-docs/web/components/VStack.txt +224 -0
  262. package/mcp-docs/web/components/XAxis.txt +619 -0
  263. package/mcp-docs/web/components/YAxis.txt +548 -0
  264. package/mcp-docs/web/getting-started/ai-overview.txt +108 -0
  265. package/mcp-docs/web/getting-started/installation.txt +103 -0
  266. package/mcp-docs/web/getting-started/introduction.txt +102 -0
  267. package/mcp-docs/web/getting-started/playground.txt +28 -0
  268. package/mcp-docs/web/getting-started/styling.txt +161 -0
  269. package/mcp-docs/web/getting-started/templates.txt +121 -0
  270. package/mcp-docs/web/getting-started/theming.txt +426 -0
  271. package/mcp-docs/web/hooks/useBreakpoints.txt +61 -0
  272. package/mcp-docs/web/hooks/useDimensions.txt +114 -0
  273. package/mcp-docs/web/hooks/useEventHandler.txt +120 -0
  274. package/mcp-docs/web/hooks/useHasMounted.txt +75 -0
  275. package/mcp-docs/web/hooks/useIsoEffect.txt +58 -0
  276. package/mcp-docs/web/hooks/useMediaQuery.txt +114 -0
  277. package/mcp-docs/web/hooks/useMergeRefs.txt +116 -0
  278. package/mcp-docs/web/hooks/useOverlayContentContext.txt +279 -0
  279. package/mcp-docs/web/hooks/usePreviousValue.txt +74 -0
  280. package/mcp-docs/web/hooks/useRefMap.txt +178 -0
  281. package/mcp-docs/web/hooks/useScrollBlocker.txt +82 -0
  282. package/mcp-docs/web/hooks/useTheme.txt +364 -0
  283. package/mcp-docs/web/routes.txt +163 -0
  284. package/package.json +1 -1
@@ -0,0 +1,181 @@
1
+ # ProgressBarWithFloatLabel
2
+
3
+ A ProgressBar with a floating label that moves with progress.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { ProgressBarWithFloatLabel } from '@coinbase/cds-web/visualizations/ProgressBarWithFloatLabel'
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ ### Label Above
14
+
15
+ ```jsx live
16
+ <VStack gap={2}>
17
+ <ProgressBarWithFloatLabel label={0} progress={0} labelPlacement="above">
18
+ <ProgressBar progress={0} />
19
+ </ProgressBarWithFloatLabel>
20
+ <ProgressBarWithFloatLabel label={20} progress={0.2} labelPlacement="above">
21
+ <ProgressBar progress={0.2} />
22
+ </ProgressBarWithFloatLabel>
23
+ </VStack>
24
+ ```
25
+
26
+ ### Label Below
27
+
28
+ ```jsx live
29
+ <VStack gap={2}>
30
+ <ProgressBarWithFloatLabel label={0} progress={0} labelPlacement="below">
31
+ <ProgressBar progress={0} />
32
+ </ProgressBarWithFloatLabel>
33
+ <ProgressBarWithFloatLabel label={20} progress={0.2} labelPlacement="below">
34
+ <ProgressBar progress={0.2} />
35
+ </ProgressBarWithFloatLabel>
36
+ </VStack>
37
+ ```
38
+
39
+ ### Disabled
40
+
41
+ ```jsx live
42
+ <VStack gap={2}>
43
+ <ProgressBarWithFloatLabel label={70} progress={0.7} disabled>
44
+ <ProgressBar progress={0.7} disabled />
45
+ </ProgressBarWithFloatLabel>
46
+ </VStack>
47
+ ```
48
+
49
+ ### Custom Labels
50
+
51
+ ```jsx live
52
+ function Example() {
53
+ const renderLabelNumStr = useCallback((num) => {
54
+ return `$${num.toLocaleString()}`;
55
+ }, []);
56
+
57
+ const renderLabelNum = useCallback((num, disabled) => {
58
+ return (
59
+ <TextTitle3 as="span" disabled={disabled}>
60
+ ${num.toLocaleString()}
61
+ </TextTitle3>
62
+ );
63
+ }, []);
64
+
65
+ return (
66
+ <VStack gap={2}>
67
+ <ProgressBarWithFloatLabel
68
+ progress={0.6}
69
+ label={{ value: 12500, render: renderLabelNumStr }}
70
+ labelPlacement="above"
71
+ >
72
+ <ProgressBar progress={0.6} />
73
+ </ProgressBarWithFloatLabel>
74
+ <ProgressBarWithFloatLabel
75
+ progress={0.6}
76
+ label={{ value: 12500, render: renderLabelNum }}
77
+ labelPlacement="above"
78
+ >
79
+ <ProgressBar progress={0.6} />
80
+ </ProgressBarWithFloatLabel>
81
+ <ProgressBarWithFloatLabel
82
+ progress={0.6}
83
+ label={{ value: 12500, render: renderLabelNumStr }}
84
+ labelPlacement="above"
85
+ disabled
86
+ >
87
+ <ProgressBar disabled progress={0.6} />
88
+ </ProgressBarWithFloatLabel>
89
+ <ProgressBarWithFloatLabel
90
+ progress={0.6}
91
+ label={{ value: 12500, render: renderLabelNum }}
92
+ labelPlacement="above"
93
+ disabled
94
+ >
95
+ <ProgressBar disabled progress={0.6} />
96
+ </ProgressBarWithFloatLabel>
97
+ </VStack>
98
+ );
99
+ }
100
+ ```
101
+
102
+ ### Custom Styles
103
+
104
+ You can customize the appearance of the progress bar and float label using the `styles` prop.
105
+
106
+ ```tsx live
107
+ <ProgressContainerWithButtons>
108
+ {({ calculateProgress }) => (
109
+ <VStack gap={2}>
110
+ <ProgressBarWithFloatLabel
111
+ label={Math.round(calculateProgress(0.4) * 100)}
112
+ labelPlacement="above"
113
+ progress={calculateProgress(0.4)}
114
+ styles={{
115
+ label: {
116
+ color: 'var(--color-bgPrimary)',
117
+ fontWeight: 'bold',
118
+ },
119
+ }}
120
+ >
121
+ <ProgressBar
122
+ color="bgPrimary"
123
+ progress={calculateProgress(0.4)}
124
+ styles={{
125
+ container: {
126
+ height: 'var(--space-8)',
127
+ borderRadius: 'var(--borderRadius-1000)',
128
+ },
129
+ progress: {
130
+ borderRadius: 'var(--borderRadius-1000)',
131
+ },
132
+ }}
133
+ />
134
+ </ProgressBarWithFloatLabel>
135
+ </VStack>
136
+ )}
137
+ </ProgressContainerWithButtons>
138
+ ```
139
+
140
+ ### Interactive Demo
141
+
142
+ This is for demo purposes. ProgressContainerWithButtons isn't designed for production usage.
143
+
144
+ ```jsx live
145
+ <ProgressContainerWithButtons>
146
+ {({ calculateProgress }) => (
147
+ <VStack gap={2}>
148
+ <ProgressBarWithFloatLabel
149
+ label={Math.round(calculateProgress(0) * 100)}
150
+ progress={calculateProgress(0)}
151
+ labelPlacement="above"
152
+ >
153
+ <ProgressBar progress={calculateProgress(0)} />
154
+ </ProgressBarWithFloatLabel>
155
+ <ProgressBarWithFloatLabel
156
+ label={Math.round(calculateProgress(0.2) * 100)}
157
+ progress={calculateProgress(0.2)}
158
+ labelPlacement="above"
159
+ >
160
+ <ProgressBar progress={calculateProgress(0.2)} />
161
+ </ProgressBarWithFloatLabel>
162
+ </VStack>
163
+ )}
164
+ </ProgressContainerWithButtons>
165
+ ```
166
+
167
+ ## Props
168
+
169
+ | Prop | Type | Required | Default | Description |
170
+ | --- | --- | --- | --- | --- |
171
+ | `label` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | Yes | `-` | Label that is floated at the end of the filled in bar. If a number is used then it will format it as a percentage. |
172
+ | `progress` | `number` | Yes | `-` | Number between 0-1 representing the progress percentage |
173
+ | `className` | `string` | No | `-` | Custom class name for the progress bar with float label root. |
174
+ | `classNames` | `{ root?: string; labelContainer?: string \| undefined; label?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the progress bar with float label. |
175
+ | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
176
+ | `labelPlacement` | `above \| below` | No | `above` | Position of label relative to the bar |
177
+ | `style` | `CSSProperties` | No | `-` | Custom styles for the progress bar with float label root. |
178
+ | `styles` | `{ root?: CSSProperties; labelContainer?: CSSProperties \| undefined; label?: CSSProperties \| undefined; } \| undefined` | No | `-` | Custom styles for the progress bar with float label. |
179
+ | `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 |
180
+
181
+
@@ -0,0 +1,443 @@
1
+ # ProgressCircle
2
+
3
+ A circular visual indicator of completion progress.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ ### Default
14
+
15
+ ```jsx live
16
+ <HStack gap={2}>
17
+ <ProgressCircle progress={0} size={100} />
18
+ <ProgressCircle progress={0.5} size={100} />
19
+ <ProgressCircle progress={1} size={100} />
20
+ </HStack>
21
+ ```
22
+
23
+ ### Thin
24
+
25
+ ```jsx live
26
+ <HStack gap={2}>
27
+ <ProgressCircle progress={0} weight="thin" size={100} />
28
+ <ProgressCircle progress={0.5} weight="thin" size={100} />
29
+ <ProgressCircle progress={1} weight="thin" size={100} />
30
+ </HStack>
31
+ ```
32
+
33
+ ### Semiheavy
34
+
35
+ ```jsx live
36
+ <HStack gap={2}>
37
+ <ProgressCircle progress={0} weight="semiheavy" size={100} />
38
+ <ProgressCircle progress={0.5} weight="semiheavy" size={100} />
39
+ <ProgressCircle progress={1} weight="semiheavy" size={100} />
40
+ </HStack>
41
+ ```
42
+
43
+ ### Heavy
44
+
45
+ ```jsx live
46
+ <HStack gap={2}>
47
+ <ProgressCircle progress={0} weight="heavy" size={100} />
48
+ <ProgressCircle progress={0.5} weight="heavy" size={100} />
49
+ <ProgressCircle progress={1} weight="heavy" size={100} />
50
+ </HStack>
51
+ ```
52
+
53
+ ### No Text
54
+
55
+ ```jsx live
56
+ <HStack gap={2}>
57
+ <ProgressCircle progress={0} hideContent size={25} />
58
+ <ProgressCircle progress={0.5} hideContent size={25} />
59
+ <ProgressCircle progress={1} hideContent size={25} />
60
+ </HStack>
61
+ ```
62
+
63
+ ### Disabled
64
+
65
+ ```jsx live
66
+ <HStack gap={2}>
67
+ <ProgressCircle progress={0} disabled size={100} />
68
+ <ProgressCircle progress={0.5} disabled size={100} />
69
+ <ProgressCircle progress={1} disabled size={100} />
70
+ </HStack>
71
+ ```
72
+
73
+ ### Colors
74
+
75
+ ```jsx live
76
+ <HStack gap={2}>
77
+ <ProgressCircle progress={0.5} color="bgPositive" size={100} />
78
+ <ProgressCircle progress={0.5} color="bgNegative" size={100} />
79
+ <ProgressCircle progress={0.5} color="bgPrimary" size={100} />
80
+ <ProgressCircle progress={0.5} color="fg" size={100} />
81
+ </HStack>
82
+ ```
83
+
84
+ ### Fill Parent
85
+
86
+ The progress circle can be dynamically sized to fit its parent. If you drag the browser window smaller or larger then the ProgressCircle will resize accordingly.
87
+
88
+ ```jsx live
89
+ <HStack gap={2} flexWrap="wrap">
90
+ <div style={{ height: '15vw', width: '15vw', minWidth: '60px', minHeight: '60px' }}>
91
+ <ProgressCircle progress={1} />
92
+ </div>
93
+ <div style={{ height: '10vw', width: '10vw', minWidth: '60px', minHeight: '60px' }}>
94
+ <ProgressCircle progress={1} />
95
+ </div>
96
+ <div style={{ height: '5vw', width: '5vw', minWidth: '60px', minHeight: '60px' }}>
97
+ <ProgressCircle progress={1} />
98
+ </div>
99
+ </HStack>
100
+ ```
101
+
102
+ ### Content Node Customization
103
+
104
+ You can override the default content node to display a custom node. Note that the content node is clipped to the circle.
105
+
106
+ #### With Asset
107
+
108
+ You can provide an image, such as an asset, as the content node.
109
+
110
+ ```jsx live
111
+ <VStack gap={2}>
112
+ <HStack gap={2}>
113
+ <ProgressCircle
114
+ progress={1}
115
+ size={56}
116
+ styles={{
117
+ progress: {
118
+ stroke: assets.eth.color,
119
+ },
120
+ }}
121
+ contentNode={
122
+ <Box height="100%" padding={0.25} width="100%">
123
+ <RemoteImage
124
+ alt={assets.eth.name}
125
+ shape="circle"
126
+ source={assets.eth.imageUrl}
127
+ style={{ width: '100%', height: '100%' }}
128
+ />
129
+ </Box>
130
+ }
131
+ weight="thin"
132
+ />
133
+
134
+ <ProgressCircle
135
+ progress={0.75}
136
+ size={56}
137
+ styles={{
138
+ progress: {
139
+ stroke: assets.ltc.color,
140
+ },
141
+ }}
142
+ contentNode={
143
+ <Box height="100%" padding={0.25} width="100%">
144
+ <RemoteImage
145
+ alt={assets.ltc.name}
146
+ shape="circle"
147
+ source={assets.ltc.imageUrl}
148
+ style={{ width: '100%', height: '100%' }}
149
+ />
150
+ </Box>
151
+ }
152
+ weight="thin"
153
+ />
154
+ <ProgressCircle
155
+ progress={0.5}
156
+ size={56}
157
+ styles={{
158
+ progress: {
159
+ stroke: assets.dai.color,
160
+ },
161
+ }}
162
+ contentNode={
163
+ <Box height="100%" padding={0.25} width="100%">
164
+ <RemoteImage
165
+ shape="circle"
166
+ source={assets.dai.imageUrl}
167
+ style={{ width: '100%', height: '100%' }}
168
+ />
169
+ </Box>
170
+ }
171
+ weight="thin"
172
+ />
173
+ <ProgressCircle
174
+ progress={0.25}
175
+ size={56}
176
+ styles={{
177
+ progress: {
178
+ stroke: assets.sushi.color,
179
+ },
180
+ }}
181
+ contentNode={
182
+ <Box height="100%" padding={0.25} width="100%">
183
+ <RemoteImage
184
+ alt={assets.sushi.name}
185
+ shape="circle"
186
+ source={assets.sushi.imageUrl}
187
+ style={{ width: '100%', height: '100%' }}
188
+ />
189
+ </Box>
190
+ }
191
+ weight="thin"
192
+ />
193
+ <ProgressCircle
194
+ progress={0}
195
+ size={56}
196
+ styles={{
197
+ progress: {
198
+ stroke: assets.xrp.color,
199
+ },
200
+ }}
201
+ contentNode={
202
+ <Box height="100%" padding={0.25} width="100%">
203
+ <RemoteImage
204
+ alt={assets.xrp.name}
205
+ shape="circle"
206
+ source={assets.xrp.imageUrl}
207
+ style={{ width: '100%', height: '100%' }}
208
+ />
209
+ </Box>
210
+ }
211
+ weight="thin"
212
+ />
213
+ </HStack>
214
+ <HStack gap={2}>
215
+ <ProgressCircle
216
+ styles={{
217
+ progress: {
218
+ stroke: assets.btc.color,
219
+ },
220
+ }}
221
+ progress={0.24}
222
+ size={24}
223
+ contentNode={
224
+ <Box height="100%" padding={0.25} width="100%">
225
+ <RemoteImage
226
+ alt={assets.btc.name}
227
+ shape="circle"
228
+ source={assets.btc.imageUrl}
229
+ style={{ width: '100%', height: '100%' }}
230
+ />
231
+ </Box>
232
+ }
233
+ weight="thin"
234
+ />
235
+ <ProgressCircle
236
+ styles={{
237
+ progress: {
238
+ stroke: assets.btc.color,
239
+ },
240
+ }}
241
+ progress={0.24}
242
+ size={32}
243
+ contentNode={
244
+ <Box height="100%" padding={0.25} width="100%">
245
+ <RemoteImage
246
+ alt={assets.btc.name}
247
+ shape="circle"
248
+ source={assets.btc.imageUrl}
249
+ style={{ width: '100%', height: '100%' }}
250
+ />
251
+ </Box>
252
+ }
253
+ weight="thin"
254
+ />
255
+ <ProgressCircle
256
+ styles={{
257
+ progress: {
258
+ stroke: assets.btc.color,
259
+ },
260
+ }}
261
+ progress={0.24}
262
+ size={40}
263
+ contentNode={
264
+ <Box height="100%" padding={0.25} width="100%">
265
+ <RemoteImage
266
+ alt={assets.btc.name}
267
+ shape="circle"
268
+ source={assets.btc.imageUrl}
269
+ style={{ width: '100%', height: '100%' }}
270
+ />
271
+ </Box>
272
+ }
273
+ weight="thin"
274
+ />
275
+ <ProgressCircle
276
+ styles={{
277
+ progress: {
278
+ stroke: assets.btc.color,
279
+ },
280
+ }}
281
+ progress={0.24}
282
+ size={48}
283
+ contentNode={
284
+ <Box height="100%" padding={0.25} width="100%">
285
+ <RemoteImage
286
+ alt={assets.btc.name}
287
+ shape="circle"
288
+ source={assets.btc.imageUrl}
289
+ style={{ width: '100%', height: '100%' }}
290
+ />
291
+ </Box>
292
+ }
293
+ weight="thin"
294
+ />
295
+ <ProgressCircle
296
+ styles={{
297
+ progress: {
298
+ stroke: assets.btc.color,
299
+ },
300
+ }}
301
+ progress={0.24}
302
+ size={56}
303
+ contentNode={
304
+ <Box height="100%" padding={0.25} width="100%">
305
+ <RemoteImage
306
+ alt={assets.btc.name}
307
+ shape="circle"
308
+ source={assets.btc.imageUrl}
309
+ style={{ width: '100%', height: '100%' }}
310
+ />
311
+ </Box>
312
+ }
313
+ weight="thin"
314
+ />
315
+ </HStack>
316
+ </VStack>
317
+ ```
318
+
319
+ #### Custom Text Color
320
+
321
+ The progress circle's default content can be customized to display a custom text color.
322
+
323
+ ```jsx live
324
+ <HStack gap={2}>
325
+ <ProgressCircle
326
+ color="fgPrimary"
327
+ progress={0.2}
328
+ size={100}
329
+ contentNode={<DefaultProgressCircleContent color="fgPrimary" progress={0.2} />}
330
+ />
331
+ <ProgressCircle
332
+ color="fgPositive"
333
+ progress={0.4}
334
+ size={100}
335
+ contentNode={<DefaultProgressCircleContent color="fgPositive" progress={0.4} />}
336
+ />
337
+ </HStack>
338
+ ```
339
+
340
+ ### Custom Styles
341
+
342
+ The progress circle can be customized with styles and class names.
343
+
344
+ ```jsx live
345
+ <HStack gap={2}>
346
+ <ProgressCircle
347
+ progress={0.4}
348
+ size={100}
349
+ styles={{
350
+ circle: {
351
+ stroke: 'transparent',
352
+ },
353
+ }}
354
+ contentNode={<TextTitle1 color="fgPrimary">40%</TextTitle1>}
355
+ weight="semiheavy"
356
+ />
357
+ <ProgressCircle
358
+ color="fgPositive"
359
+ progress={0.6}
360
+ size={100}
361
+ styles={{
362
+ progress: {
363
+ strokeLinecap: 'square',
364
+ },
365
+ }}
366
+ contentNode={<Icon color="fgPositive" name="circleCheckmark" size="l" />}
367
+ />
368
+ </HStack>
369
+ ```
370
+
371
+ ### Interactive Demo
372
+
373
+ This is for demo purposes. ProgressContainerWithButtons isn't designed for production usage.
374
+
375
+ ```jsx live
376
+ <ProgressContainerWithButtons>
377
+ {({ calculateProgress }) => (
378
+ <HStack gap={2}>
379
+ <ProgressCircle progress={calculateProgress(0)} size={100} />
380
+ <ProgressCircle progress={calculateProgress(0.2)} size={100} />
381
+ </HStack>
382
+ )}
383
+ </ProgressContainerWithButtons>
384
+ ```
385
+
386
+ ### Animation Callbacks
387
+
388
+ You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
389
+
390
+ ```jsx live
391
+ function Example() {
392
+ const [animationStatus, setAnimationStatus] = React.useState('Ready');
393
+
394
+ const handleAnimationStart = useCallback(() => {
395
+ setAnimationStatus('Animating...');
396
+ }, []);
397
+
398
+ const handleAnimationEnd = useCallback(() => {
399
+ setAnimationStatus('Animation Ended');
400
+ }, []);
401
+
402
+ return (
403
+ <ProgressContainerWithButtons>
404
+ {({ calculateProgress }) => (
405
+ <VStack gap={2}>
406
+ <Text>Animation Status: {animationStatus}</Text>
407
+ <ProgressCircle
408
+ onAnimationEnd={handleAnimationEnd}
409
+ onAnimationStart={handleAnimationStart}
410
+ progress={calculateProgress(0.2)}
411
+ size={100}
412
+ />
413
+ </VStack>
414
+ )}
415
+ </ProgressContainerWithButtons>
416
+ );
417
+ }
418
+ ```
419
+
420
+ ## Props
421
+
422
+ | Prop | Type | Required | Default | Description |
423
+ | --- | --- | --- | --- | --- |
424
+ | `progress` | `number` | Yes | `-` | Number between 0-1 representing the progress percentage |
425
+ | `className` | `string` | No | `-` | Custom class name for the progress circle root. |
426
+ | `classNames` | `{ root?: string; svg?: string \| undefined; circle?: string \| undefined; progress?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the progress circle. |
427
+ | `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 | `primary` | Custom progress color. |
428
+ | `contentNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Optional component to override the default content rendered inside the circle. |
429
+ | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
430
+ | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
431
+ | `hideContent` | `boolean` | No | `-` | Toggle used to hide the content node rendered inside the circle. |
432
+ | `hideText` | `boolean` | No | `-` | - |
433
+ | `key` | `Key \| null` | No | `-` | - |
434
+ | `onAnimationEnd` | `(() => void)` | No | `-` | Callback fired when the progress animation ends. |
435
+ | `onAnimationStart` | `(() => void)` | No | `-` | Callback fired when the progress animation starts. |
436
+ | `ref` | `RefObject<HTMLDivElement> \| ((instance: HTMLDivElement \| null) => void) \| null` | No | `-` | - |
437
+ | `size` | `number` | No | `-` | Optional size in px for the visualization. This is useful if the visualization is used in an HStack. If this is omitted the visualization will fill the parent width or height. Since its a circular visualization it will fill the smaller of the parent width or height |
438
+ | `style` | `CSSProperties` | No | `-` | Custom styles for the progress circle root. |
439
+ | `styles` | `{ root?: CSSProperties; svg?: CSSProperties \| undefined; circle?: CSSProperties \| undefined; progress?: CSSProperties \| undefined; } \| undefined` | No | `-` | Custom styles for the progress circle. |
440
+ | `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 |
441
+ | `weight` | `normal \| heavy \| thin \| semiheavy` | No | `normal` | Toggle used to change thickness of progress visualization |
442
+
443
+