@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,322 @@
1
+ # UpsellCard
2
+
3
+ Upsell Cards are used to promote new features, products, or actions within the app. They are part of the upsell framework and aim to drive user engagement and revenue.
4
+
5
+ ## Import
6
+
7
+ ```jsx
8
+ import { UpsellCard } from '@coinbase/cds-mobile/cards/UpsellCard'
9
+ ```
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ | --- | --- | --- | --- | --- |
15
+ | `title` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | Yes | `-` | Text or ReactNode to be displayed in TextHeadline |
16
+ | `action` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Node to display for the card action |
17
+ | `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 | `'bgPrimaryWash'` | Background color for the card. |
18
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
19
+ | `description` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Content to be displayed below the title |
20
+ | `media` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Remote Image or other node with media content. |
21
+ | `onActionPress` | `((event: GestureResponderEvent) => void) \| null` | No | `-` | Callback fired when the action button is pressed |
22
+ | `onDismissPress` | `((event: GestureResponderEvent) => void) \| null` | No | `-` | Callback fired when the dismiss button is pressed |
23
+ | `onPress` | `((event: GestureResponderEvent) => void) \| null` | No | `-` | Callback fired when the card is pressed |
24
+ | `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 |
25
+
26
+
27
+ ## Examples
28
+
29
+ ### General Upsell
30
+
31
+ Utilize our Primary Wash Upsell for general information and non-urgent promotions. Its versatile design is perfect for a broad range of content, providing a subtle yet effective approach to engage users. It's also the only Upsell Card that supports Pictogram Illustrations.
32
+
33
+ ```jsx
34
+ function Example() {
35
+ function NoopFn() {
36
+ console.log('pressed');
37
+ }
38
+ return (
39
+ <VStack minHeight={300} padding={2} alignItems="center" justifyContent="center">
40
+ <UpsellCard
41
+ title="Recurring Buy"
42
+ description="Want to add funds to your card every week or month?"
43
+ action={'Get started'}
44
+ onActionPress={NoopFn}
45
+ onDismissPress={NoopFn}
46
+ media={
47
+ <Box position="relative" right={24} bottom={6}>
48
+ <Pictogram name="recurringPurchases" dimension="64x64" />
49
+ </Box>
50
+ }
51
+ />
52
+ </VStack>
53
+ );
54
+ }
55
+ ```
56
+
57
+ ### Feature Upsell
58
+
59
+ Ideal for highlighting Coinbase tools, innovative features, and unique functionalities. Choose from our palette of four distinct colors to make your Feature Upsell stand out. Each color is carefully selected to grab attention while aligning with the specific nature of the feature being promoted
60
+
61
+ ```jsx
62
+ function Example() {
63
+ const { colorScheme } = useTheme();
64
+ function NoopFn() {
65
+ console.log('pressed');
66
+ }
67
+ const image = (
68
+ <Box position="relative" left={16} top={4}>
69
+ <RemoteImage source="/img/feature.png" height={174} />
70
+ </Box>
71
+ );
72
+ const theme = useTheme();
73
+ console.log('@@ theme', theme);
74
+ const cards = [
75
+ {
76
+ title: 'Up to 3.29% APR on ETHs',
77
+ description: 'Earn staking rewards on ETH by holding it on Coinbase',
78
+ action: 'Start earning',
79
+ onActionPress: NoopFn,
80
+ onDismissPress: NoopFn,
81
+ media: image,
82
+ dangerouslySetBackground: `rgb(${theme.spectrum.purple70})`,
83
+ },
84
+ {
85
+ title: 'Up to 3.29% APR on ETHs',
86
+ description: 'Earn staking rewards on ETH by holding it on Coinbase',
87
+ action: 'Start earning',
88
+ onActionPress: NoopFn,
89
+ onDismissPress: NoopFn,
90
+ media: image,
91
+ dangerouslySetBackground: `rgb(${theme.spectrum.teal50})`,
92
+ },
93
+ {
94
+ title: 'Up to 3.29% APR on ETHs',
95
+ description: 'Earn staking rewards on ETH by holding it on Coinbase',
96
+ action: 'Start earning',
97
+ onActionPress: NoopFn,
98
+ onDismissPress: NoopFn,
99
+ media: image,
100
+ dangerouslySetBackground: `rgb(${theme.spectrum.blue80})`,
101
+ },
102
+ {
103
+ title: 'Up to 3.29% APR on ETHs',
104
+ description: 'Earn staking rewards on ETH by holding it on Coinbase',
105
+ action: 'Start earning',
106
+ onActionPress: NoopFn,
107
+ onDismissPress: NoopFn,
108
+ media: image,
109
+ dangerouslySetBackground: `rgb(${theme.spectrum.indigo70})`,
110
+ },
111
+ ];
112
+ return (
113
+ <VStack minHeight={300} padding={2} alignItems="center" justifyContent="center" gap={1}>
114
+ {cards.map((card) => {
115
+ return (
116
+ <UpsellCard
117
+ {...card}
118
+ title={
119
+ <TextHeadline color="fgInverse" as="h3">
120
+ {card.title}
121
+ </TextHeadline>
122
+ }
123
+ description={
124
+ <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
125
+ {card.description}
126
+ </TextLabel2>
127
+ }
128
+ />
129
+ );
130
+ })}
131
+ </VStack>
132
+ );
133
+ }
134
+ ```
135
+
136
+ ### Community Upsell
137
+
138
+ Designed for community-focused upsells, our Community Upsell uses vibrant yellow and purple hues. These energetic colors are excellent for sparking enthusiasm and encouraging active participation, fostering a sense of community engagement
139
+
140
+ ```jsx
141
+ function Example() {
142
+ const { colorScheme, spectrum } = useTheme();
143
+ function NoopFn() {
144
+ console.log('pressed');
145
+ }
146
+ const cards = [
147
+ {
148
+ title: 'Join the community',
149
+ description: 'Chat with other devs in our Discord community',
150
+ action: 'Start earning',
151
+ onActionPress: NoopFn,
152
+ onDismissPress: NoopFn,
153
+ media: (
154
+ <Box position="relative" left={16} top={4}>
155
+ <RemoteImage source="/img/community.png" height={174} />
156
+ </Box>
157
+ ),
158
+ dangerouslySetBackground: `rgb(${spectrum.teal70})`,
159
+ },
160
+ {
161
+ title: 'Join the community',
162
+ description: 'Chat with other devs in our Discord community',
163
+ action: 'Start earning',
164
+ onActionPress: NoopFn,
165
+ onDismissPress: NoopFn,
166
+ media: (
167
+ <Box position="relative" left={16} top={4}>
168
+ <RemoteImage source="/img/radial.png" height={174} />
169
+ </Box>
170
+ ),
171
+ dangerouslySetBackground: `rgb(${spectrum.purple70})`,
172
+ },
173
+ ];
174
+ return (
175
+ <VStack minHeight={300} padding={2} alignItems="center" justifyContent="center" gap={1}>
176
+ {cards.map((card) => {
177
+ return (
178
+ <UpsellCard
179
+ {...card}
180
+ title={
181
+ <TextHeadline color="fgInverse" as="h3">
182
+ {card.title}
183
+ </TextHeadline>
184
+ }
185
+ description={
186
+ <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
187
+ {card.description}
188
+ </TextLabel2>
189
+ }
190
+ />
191
+ );
192
+ })}
193
+ </VStack>
194
+ );
195
+ }
196
+ ```
197
+
198
+ ### Product Upsell
199
+
200
+ Optimal for business products, security features, and functionalities that emphasize trust and reliability, such as Coinbase One and Coinbase Card. Our blue and black card options symbolize stability, trustworthiness, and professionalism, aligning with the core values of your product offerings
201
+
202
+ ```jsx
203
+ function Example() {
204
+ const { colorScheme, spectrum } = useTheme();
205
+ function NoopFn() {
206
+ console.log('pressed');
207
+ }
208
+ const cards = [
209
+ {
210
+ title: 'Coinbase One offer',
211
+ description: 'Use code NOV60 when you sign up for Coinbase One',
212
+ action: 'Get 60 days free',
213
+ onActionPress: NoopFn,
214
+ onDismissPress: NoopFn,
215
+ media: (
216
+ <Box position="relative" left={16} top={0}>
217
+ <RemoteImage source="/img/marketing.png" height={174} />
218
+ </Box>
219
+ ),
220
+ dangerouslySetBackground: `rgb(${spectrum.blue80})`,
221
+ },
222
+ {
223
+ title: 'Coinbase Card',
224
+ description: 'Spend USDC to get rewards with our Visa® debit card',
225
+ action: 'Get started',
226
+ onActionPress: NoopFn,
227
+ onDismissPress: NoopFn,
228
+ media: (
229
+ <Box position="relative" left={16} top={0}>
230
+ <RemoteImage source="/img/object.png" height={174} />
231
+ </Box>
232
+ ),
233
+ dangerouslySetBackground: `rgb(${spectrum.gray100})`,
234
+ },
235
+ ];
236
+ return (
237
+ <VStack minHeight={300} padding={2} alignItems="center" justifyContent="center" gap={1}>
238
+ {cards.map((card) => {
239
+ return (
240
+ <UpsellCard
241
+ {...card}
242
+ title={
243
+ <TextHeadline color="fgInverse" as="h3">
244
+ {card.title}
245
+ </TextHeadline>
246
+ }
247
+ description={
248
+ <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
249
+ {card.description}
250
+ </TextLabel2>
251
+ }
252
+ />
253
+ );
254
+ })}
255
+ </VStack>
256
+ );
257
+ }
258
+ ```
259
+
260
+ ### News Upsell
261
+
262
+ Our News Upsell is specifically tailored for company announcements and policy updates. Its design ensures that important information is conveyed clearly and prominently, ensuring users stays well-informed about the latest developments.
263
+
264
+ ```jsx
265
+ function Example() {
266
+ const { colorScheme, spectrum } = useTheme();
267
+ function NoopFn() {
268
+ console.log('pressed');
269
+ }
270
+ const cards = [
271
+ {
272
+ title: 'Help defend crypto in America',
273
+ description: 'Help us keep crypto in America with a single click',
274
+ action: 'Join the fight',
275
+ onActionPress: NoopFn,
276
+ onDismissPress: NoopFn,
277
+ media: (
278
+ <Box position="relative" left={30} top={0}>
279
+ <RemoteImage source="/img/place.png" height={196} />
280
+ </Box>
281
+ ),
282
+ dangerouslySetBackground: `rgb(${spectrum.gray100})`,
283
+ },
284
+ {
285
+ title: 'Help defend crypto in America',
286
+ description: 'Help us keep crypto in America with a single click',
287
+ action: 'Join the fight',
288
+ onActionPress: NoopFn,
289
+ onDismissPress: NoopFn,
290
+ media: (
291
+ <Box position="relative" left={30} top={0}>
292
+ <RemoteImage source="/img/place.png" height={196} />
293
+ </Box>
294
+ ),
295
+ dangerouslySetBackground: `rgb(${spectrum.indigo70})`,
296
+ },
297
+ ];
298
+ return (
299
+ <VStack minHeight={300} padding={2} alignItems="center" justifyContent="center" gap={1}>
300
+ {cards.map((card) => {
301
+ return (
302
+ <UpsellCard
303
+ {...card}
304
+ title={
305
+ <TextHeadline color="fgInverse" as="h3">
306
+ {card.title}
307
+ </TextHeadline>
308
+ }
309
+ description={
310
+ <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
311
+ {card.description}
312
+ </TextLabel2>
313
+ }
314
+ />
315
+ );
316
+ })}
317
+ </VStack>
318
+ );
319
+ }
320
+ ```
321
+
322
+
@@ -0,0 +1,223 @@
1
+ # VStack
2
+
3
+ A Box with flexDirection="column" set by default.
4
+
5
+ ## Import
6
+
7
+ ```jsx
8
+ import { VStack } from '@coinbase/cds-mobile/layout/VStack'
9
+ ```
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ | --- | --- | --- | --- | --- |
15
+ | `alignContent` | `flex-start \| flex-end \| center \| stretch \| space-between \| space-around \| space-evenly` | No | `-` | - |
16
+ | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
17
+ | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
18
+ | `animated` | `boolean` | No | `-` | - |
19
+ | `aspectRatio` | `string \| number` | No | `-` | - |
20
+ | `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 | `-` | - |
21
+ | `borderBottomLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
22
+ | `borderBottomRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
23
+ | `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
24
+ | `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 | `-` | - |
25
+ | `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
26
+ | `borderRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
27
+ | `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
28
+ | `borderTopLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
29
+ | `borderTopRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
30
+ | `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
31
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
32
+ | `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
33
+ | `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
34
+ | `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
35
+ | `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
36
+ | `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
37
+ | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
38
+ | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
39
+ | `bottom` | `string \| number` | No | `-` | - |
40
+ | `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 | `-` | - |
41
+ | `columnGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
42
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
43
+ | `display` | `flex \| none` | No | `-` | - |
44
+ | `elevation` | `0 \| 1 \| 2` | No | `-` | Determines box shadow styles. Parent should have overflow set to visible to ensure styles are not clipped. |
45
+ | `flexBasis` | `string \| number` | No | `-` | - |
46
+ | `flexDirection` | `row \| column \| row-reverse \| column-reverse` | No | `-` | - |
47
+ | `flexGrow` | `number` | No | `-` | - |
48
+ | `flexShrink` | `number` | No | `-` | - |
49
+ | `flexWrap` | `wrap \| nowrap \| wrap-reverse` | No | `-` | - |
50
+ | `font` | `inherit \| FontFamily` | No | `-` | - |
51
+ | `fontFamily` | `inherit \| FontFamily` | No | `-` | - |
52
+ | `fontSize` | `inherit \| FontSize` | No | `-` | - |
53
+ | `fontWeight` | `inherit \| FontWeight` | No | `-` | - |
54
+ | `gap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
55
+ | `height` | `string \| number` | No | `-` | - |
56
+ | `justifyContent` | `flex-start \| flex-end \| center \| space-between \| space-around \| space-evenly` | No | `-` | - |
57
+ | `key` | `Key \| null` | No | `-` | - |
58
+ | `left` | `string \| number` | No | `-` | - |
59
+ | `lineHeight` | `inherit \| LineHeight` | No | `-` | - |
60
+ | `margin` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
61
+ | `marginBottom` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
62
+ | `marginEnd` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
63
+ | `marginStart` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
64
+ | `marginTop` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
65
+ | `marginX` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
66
+ | `marginY` | `0 \| -1 \| -2 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1.5` | No | `-` | - |
67
+ | `maxHeight` | `string \| number` | No | `-` | - |
68
+ | `maxWidth` | `string \| number` | No | `-` | - |
69
+ | `minHeight` | `string \| number` | No | `-` | - |
70
+ | `minWidth` | `string \| number` | No | `-` | - |
71
+ | `onPointerCancel` | `((event: PointerEvent) => void)` | No | `-` | - |
72
+ | `onPointerCancelCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
73
+ | `onPointerDown` | `((event: PointerEvent) => void)` | No | `-` | - |
74
+ | `onPointerDownCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
75
+ | `onPointerEnter` | `((event: PointerEvent) => void)` | No | `-` | - |
76
+ | `onPointerEnterCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
77
+ | `onPointerLeave` | `((event: PointerEvent) => void)` | No | `-` | - |
78
+ | `onPointerLeaveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
79
+ | `onPointerMove` | `((event: PointerEvent) => void)` | No | `-` | - |
80
+ | `onPointerMoveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
81
+ | `onPointerUp` | `((event: PointerEvent) => void)` | No | `-` | - |
82
+ | `onPointerUpCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
83
+ | `opacity` | `number \| AnimatedNode` | No | `-` | - |
84
+ | `overflow` | `visible \| hidden \| scroll` | No | `-` | - |
85
+ | `padding` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
86
+ | `paddingBottom` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
87
+ | `paddingEnd` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
88
+ | `paddingStart` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
89
+ | `paddingTop` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
90
+ | `paddingX` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
91
+ | `paddingY` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
92
+ | `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
93
+ | `position` | `absolute \| relative \| static \| fixed \| sticky` | No | `-` | - |
94
+ | `ref` | `((instance: View \| null) => void) \| RefObject<View> \| null` | No | `-` | - |
95
+ | `right` | `string \| number` | No | `-` | - |
96
+ | `rowGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
97
+ | `style` | `false \| RegisteredStyle<ViewStyle> \| Value \| AnimatedInterpolation<string \| number> \| WithAnimatedObject<ViewStyle> \| WithAnimatedArray<Falsy \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<Falsy \| ViewStyle \| RegisteredStyle<ViewStyle>> \| readonly (Falsy \| ViewStyle \| RegisteredStyle<ViewStyle>)[]> \| null` | No | `-` | - |
98
+ | `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Used to locate this view in end-to-end tests. |
99
+ | `textAlign` | `left \| right \| auto \| center \| justify` | No | `-` | - |
100
+ | `textDecorationLine` | `none \| underline \| line-through \| underline line-through` | No | `-` | - |
101
+ | `textDecorationStyle` | `solid \| dotted \| dashed \| double` | No | `-` | - |
102
+ | `textTransform` | `none \| capitalize \| uppercase \| lowercase` | No | `-` | - |
103
+ | `top` | `string \| number` | No | `-` | - |
104
+ | `transform` | `string \| (({ scaleX: AnimatableNumericValue; } & { scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scaleY: AnimatableNumericValue; } & { scaleX?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateX: AnimatableNumericValue \| ${number}%; } & { scaleX?: undefined; scaleY?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ translateY: AnimatableNumericValue \| ${number}%; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ perspective: AnimatableNumericValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotate: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateX: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateY: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ rotateZ: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ scale: AnimatableNumericValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; skewX?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewX: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewY?: undefined; matrix?: undefined; }) \| ({ skewY: AnimatableStringValue; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; matrix?: undefined; }) \| ({ matrix: AnimatableNumericValue[]; } & { scaleX?: undefined; scaleY?: undefined; translateX?: undefined; translateY?: undefined; perspective?: undefined; rotate?: undefined; rotateX?: undefined; rotateY?: undefined; rotateZ?: undefined; scale?: undefined; skewX?: undefined; skewY?: undefined; }))[]` | No | `-` | - |
105
+ | `userSelect` | `none \| auto \| contain \| text \| all` | No | `-` | - |
106
+ | `width` | `string \| number` | No | `-` | - |
107
+ | `zIndex` | `number` | No | `-` | - |
108
+
109
+
110
+ ## Examples
111
+
112
+ HStack component uses [flexbox](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox) to lay content out in a column.
113
+
114
+ **On mobile only** HStack is essentially the same component as [Box](/components/layout/Box), because Box by default has [flexbox](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox) enabled (`display: flex`) and takes `column` as its initial `flex-direction` value.
115
+
116
+ You should use VStack when:
117
+
118
+ - you want to lay content out in rows that are sized to their content (height only, by default each child will fill the width of the VStack)
119
+ - you want to add gaps between columns
120
+ - you want to lay content out in columns that fill the available space within the parent container
121
+ - you need columns of proportionate size to each other (also known as a ratio-based layout)
122
+
123
+ ### Rows Sized to Content
124
+
125
+ ```jsx
126
+ <VStack gap={1}>
127
+ <Box height={100} bordered>
128
+ I am 100px tall
129
+ </Box>
130
+ <Box height={200} bordered>
131
+ I am 200px tall
132
+ </Box>
133
+ <Box bordered>I am as tall as my content</Box>
134
+ </VStack>
135
+ ```
136
+
137
+ ### Rows with Gaps
138
+
139
+ ```jsx
140
+ <VStack gap={1}>
141
+ <Box gap={3} background="bgAlternate">
142
+ First
143
+ </Box>
144
+ <Box gap={3} background="bgAlternate">
145
+ Second
146
+ </Box>
147
+ <Box gap={3} background="bgAlternate">
148
+ Third
149
+ </Box>
150
+ </VStack>
151
+ ```
152
+
153
+ ### Rows that Fill the Available Space
154
+
155
+ ```jsx
156
+ <Box height={200}>
157
+ <VStack gap={3} flexGrow={1} background="bgAlternate">
158
+ I will fill the entire width and height of my parent
159
+ </VStack>
160
+ </Box>
161
+ ```
162
+
163
+ ### Rows that Have Proportionate Sizes
164
+
165
+ ```jsx
166
+ <VStack gap={1} height={600}>
167
+ <Box gap={3} flexGrow={1} background="bgAlternate">
168
+ First
169
+ </Box>
170
+ <Box gap={3} flexGrow={2} background="bgAlternate">
171
+ Second
172
+ </Box>
173
+ <Box gap={3} flexGrow={3} background="bgAlternate">
174
+ Third
175
+ </Box>
176
+ </VStack>
177
+ ```
178
+
179
+ ### A11y
180
+
181
+ Has the same accessibility requirements as [Box](/components/layout/Box#a11y).
182
+
183
+ ### Responsive Styles
184
+
185
+ **Web only** You can create responsive layouts by passing a configuration object to each supported property of VStack and specify unique styles for phones, tablets, or desktops.
186
+
187
+ Please note, there are no default responsive styles for VStack. This is an additive feature that you will need to configure yourself.
188
+
189
+ #### Supported Properties
190
+
191
+ - Padding
192
+ - Margin
193
+ - Gap
194
+ - Flex styles (justify content, align content, align items, align self, flex direction, and flex wrap)
195
+ - Display
196
+ - Visibility
197
+
198
+ #### Usage
199
+
200
+ ```jsx
201
+ function ResponsiveVStack() {
202
+ return (
203
+ <VStack
204
+ padding={{ base: 4, tablet: 3, desktop: 2 }}
205
+ gap={{ base: 0.5, tablet: 2, desktop: 3 }}
206
+ justifyContent={{ base: 'flex-end', tablet: 'flex-start', desktop: 'center' }}
207
+ alignItems={{ base: 'flex-end', tablet: 'flex-start', desktop: 'center' }}
208
+ >
209
+ <HStack background="bgAlternate" padding={1}>
210
+ <Text as="p">First</Text>
211
+ </HStack>
212
+ <HStack background="bgSecondary" padding={1}>
213
+ <Text as="p">Second</Text>
214
+ </HStack>
215
+ <HStack background="bgOverlay" padding={1}>
216
+ <Text as="p">Third</Text>
217
+ </HStack>
218
+ </VStack>
219
+ );
220
+ }
221
+ ```
222
+
223
+