@coinbase/cds-mcp-server 8.28.1 → 8.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/mcp-docs/mobile/components/Accordion.txt +3 -1
- package/mcp-docs/mobile/components/Alert.txt +3 -1
- package/mcp-docs/mobile/components/Banner.txt +14 -14
- package/mcp-docs/mobile/components/Button.txt +173 -30
- package/mcp-docs/mobile/components/Carousel.txt +24 -24
- package/mcp-docs/mobile/components/Combobox.txt +187 -0
- package/mcp-docs/mobile/components/ContainedAssetCard.txt +4 -4
- package/mcp-docs/mobile/components/ContentCard.txt +29 -27
- package/mcp-docs/mobile/components/ContentCardBody.txt +4 -4
- package/mcp-docs/mobile/components/ContentCardHeader.txt +2 -2
- package/mcp-docs/mobile/components/FloatingAssetCard.txt +6 -6
- package/mcp-docs/mobile/components/IconButton.txt +126 -51
- package/mcp-docs/mobile/components/LineChart.txt +3 -2
- package/mcp-docs/mobile/components/MultiContentModule.txt +6 -6
- package/mcp-docs/mobile/components/Numpad.txt +2 -2
- package/mcp-docs/mobile/components/PageHeader.txt +3 -1
- package/mcp-docs/mobile/components/PeriodSelector.txt +4 -4
- package/mcp-docs/mobile/components/Pressable.txt +6 -2
- package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +4 -4
- package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +2 -2
- package/mcp-docs/mobile/components/ProgressCircle.txt +5 -1
- package/mcp-docs/mobile/components/SelectChip.txt +2 -0
- package/mcp-docs/mobile/components/SelectChipAlpha.txt +1 -1
- package/mcp-docs/mobile/components/SlideButton.txt +2 -2
- package/mcp-docs/mobile/components/Sparkline.txt +3 -1
- package/mcp-docs/mobile/components/SparklineGradient.txt +3 -1
- package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +3 -1
- package/mcp-docs/mobile/components/TabbedChips.txt +3 -1
- package/mcp-docs/mobile/components/Tag.txt +19 -9
- package/mcp-docs/mobile/components/TextInput.txt +9 -3
- package/mcp-docs/mobile/components/Tray.txt +2 -0
- package/mcp-docs/mobile/components/UpsellCard.txt +16 -16
- package/mcp-docs/mobile/hooks/useDimensions.txt +4 -4
- package/mcp-docs/mobile/hooks/useMergeRefs.txt +4 -4
- package/mcp-docs/mobile/hooks/usePreviousValue.txt +5 -5
- package/mcp-docs/mobile/hooks/useRefMap.txt +6 -6
- package/mcp-docs/mobile/routes.txt +1 -0
- package/mcp-docs/web/components/Accordion.txt +3 -1
- package/mcp-docs/web/components/Alert.txt +3 -1
- package/mcp-docs/web/components/Banner.txt +14 -14
- package/mcp-docs/web/components/Button.txt +188 -34
- package/mcp-docs/web/components/Carousel.txt +71 -65
- package/mcp-docs/web/components/Combobox.txt +176 -0
- package/mcp-docs/web/components/ContainedAssetCard.txt +4 -4
- package/mcp-docs/web/components/ContentCard.txt +29 -27
- package/mcp-docs/web/components/ContentCardBody.txt +4 -4
- package/mcp-docs/web/components/ContentCardHeader.txt +2 -2
- package/mcp-docs/web/components/FloatingAssetCard.txt +6 -6
- package/mcp-docs/web/components/FullscreenModal.txt +12 -4
- package/mcp-docs/web/components/GridColumn.txt +12 -4
- package/mcp-docs/web/components/IconButton.txt +164 -189
- package/mcp-docs/web/components/LineChart.txt +3 -2
- package/mcp-docs/web/components/MultiContentModule.txt +6 -6
- package/mcp-docs/web/components/PageHeader.txt +11 -9
- package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +4 -4
- package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +2 -2
- package/mcp-docs/web/components/ProgressCircle.txt +5 -1
- package/mcp-docs/web/components/SelectChipAlpha.txt +1 -1
- package/mcp-docs/web/components/Sidebar.txt +2 -2
- package/mcp-docs/web/components/Sparkline.txt +3 -1
- package/mcp-docs/web/components/SparklineGradient.txt +3 -1
- package/mcp-docs/web/components/SparklineInteractiveHeader.txt +3 -1
- package/mcp-docs/web/components/TabbedChips.txt +3 -1
- package/mcp-docs/web/components/TableBody.txt +2 -2
- package/mcp-docs/web/components/TableCaption.txt +2 -2
- package/mcp-docs/web/components/TableCell.txt +6 -6
- package/mcp-docs/web/components/Tag.txt +19 -9
- package/mcp-docs/web/components/TextInput.txt +9 -3
- package/mcp-docs/web/components/Tray.txt +2 -1
- package/mcp-docs/web/components/UpsellCard.txt +16 -16
- package/mcp-docs/web/hooks/useDimensions.txt +4 -4
- package/mcp-docs/web/hooks/useHasMounted.txt +7 -3
- package/mcp-docs/web/hooks/useIsoEffect.txt +1 -1
- package/mcp-docs/web/hooks/useMergeRefs.txt +4 -4
- package/mcp-docs/web/hooks/useOverlayContentContext.txt +8 -8
- package/mcp-docs/web/hooks/usePreviousValue.txt +5 -5
- package/mcp-docs/web/hooks/useRefMap.txt +6 -6
- package/mcp-docs/web/hooks/useScrollBlocker.txt +1 -1
- package/mcp-docs/web/hooks/useTheme.txt +3 -3
- package/mcp-docs/web/routes.txt +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,14 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
<!-- template-start -->
|
|
10
10
|
|
|
11
|
+
## 8.29.0 ((12/12/2025, 01:12 PM PST))
|
|
12
|
+
|
|
13
|
+
This is an artificial version bump with no new change.
|
|
14
|
+
|
|
15
|
+
## 8.28.2 ((12/12/2025, 06:23 AM PST))
|
|
16
|
+
|
|
17
|
+
This is an artificial version bump with no new change.
|
|
18
|
+
|
|
11
19
|
## 8.28.1 ((12/10/2025, 04:33 PM PST))
|
|
12
20
|
|
|
13
21
|
This is an artificial version bump with no new change.
|
|
@@ -38,7 +38,9 @@ Check [here](/components/layout/AccordionItem) for AccordionItem Props.
|
|
|
38
38
|
media={<CellMedia active type="icon" name="wallet" title="BTC" />}
|
|
39
39
|
onPress={(itemKey) => console.log(itemKey)}
|
|
40
40
|
>
|
|
41
|
-
<
|
|
41
|
+
<Text as="p" font="body">
|
|
42
|
+
{loremIpsum.repeat(20)}
|
|
43
|
+
</Text>
|
|
42
44
|
</AccordionItem>
|
|
43
45
|
</Accordion>
|
|
44
46
|
```
|
|
@@ -111,7 +111,9 @@ function AlertOnModalExample() {
|
|
|
111
111
|
openModal(
|
|
112
112
|
<Modal visible onRequestClose={closeModal}>
|
|
113
113
|
<ModalBody>
|
|
114
|
-
<
|
|
114
|
+
<Text as="p" font="body">
|
|
115
|
+
{loremIpsum}
|
|
116
|
+
</Text>
|
|
115
117
|
</ModalBody>
|
|
116
118
|
<ModalFooter
|
|
117
119
|
primaryAction={<Button onPress={closeModal}>Save</Button>}
|
|
@@ -25,10 +25,10 @@ The global warning banner is used to communicate important alerts or warnings to
|
|
|
25
25
|
primaryAction={<Link to="https://www.coinbase.com">Primary</Link>}
|
|
26
26
|
secondaryAction={<Link to="https://www.coinbase.com">Secondary</Link>}
|
|
27
27
|
>
|
|
28
|
-
<
|
|
28
|
+
<Text font="label2">
|
|
29
29
|
Your funds are safe. We’re looking into it and expect our usual service to return soon.
|
|
30
30
|
<Link to="https://www.coinbase.com">Learn more</Link>
|
|
31
|
-
</
|
|
31
|
+
</Text>
|
|
32
32
|
</Banner>
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -46,10 +46,10 @@ The In-line Error Banner is used to display specific error messages directly ben
|
|
|
46
46
|
primaryAction={<Link to="https://www.coinbase.com">Primary</Link>}
|
|
47
47
|
secondaryAction={<Link to="https://www.coinbase.com">Secondary</Link>}
|
|
48
48
|
>
|
|
49
|
-
<
|
|
49
|
+
<Text font="label2">
|
|
50
50
|
Your funds are safe. We’re looking into it and expect our usual service to return soon.
|
|
51
51
|
<Link to="https://www.coinbase.com">Learn more</Link>
|
|
52
|
-
</
|
|
52
|
+
</Text>
|
|
53
53
|
</Banner>
|
|
54
54
|
```
|
|
55
55
|
|
|
@@ -65,10 +65,10 @@ The Contextual Promotional Banner is used to highlight special offers, promotion
|
|
|
65
65
|
title="Some features are temporarily unavailable"
|
|
66
66
|
variant="promotional"
|
|
67
67
|
>
|
|
68
|
-
<
|
|
68
|
+
<Text font="label2">
|
|
69
69
|
Your funds are safe. We’re looking into it and expect our usual service to return soon.
|
|
70
70
|
<Link to="https://www.coinbase.com">Learn more</Link>
|
|
71
|
-
</
|
|
71
|
+
</Text>
|
|
72
72
|
</Banner>
|
|
73
73
|
```
|
|
74
74
|
|
|
@@ -87,10 +87,10 @@ The in-line Informational Banner is used to provide users with additional inform
|
|
|
87
87
|
primaryAction={<Link to="https://www.coinbase.com">Primary</Link>}
|
|
88
88
|
secondaryAction={<Link to="https://www.coinbase.com">Secondary</Link>}
|
|
89
89
|
>
|
|
90
|
-
<
|
|
90
|
+
<Text font="label2">
|
|
91
91
|
Your funds are safe. We’re looking into it and expect our usual service to return soon.
|
|
92
92
|
<Link to="https://www.coinbase.com">Learn more</Link>
|
|
93
|
-
</
|
|
93
|
+
</Text>
|
|
94
94
|
</Banner>
|
|
95
95
|
<Banner
|
|
96
96
|
startIcon="warning"
|
|
@@ -99,9 +99,9 @@ The in-line Informational Banner is used to provide users with additional inform
|
|
|
99
99
|
title="Some features are temporarily unavailable"
|
|
100
100
|
variant="warning"
|
|
101
101
|
>
|
|
102
|
-
<
|
|
102
|
+
<Text font="label2">
|
|
103
103
|
<Link to="https://www.coinbase.com">Retry</Link>
|
|
104
|
-
</
|
|
104
|
+
</Text>
|
|
105
105
|
</Banner>
|
|
106
106
|
</VStack>
|
|
107
107
|
```
|
|
@@ -120,9 +120,9 @@ Customize `borderRadius` to align contextual or in-line banners with surrounding
|
|
|
120
120
|
title="Rounded contextual banner"
|
|
121
121
|
variant="informational"
|
|
122
122
|
>
|
|
123
|
-
<
|
|
123
|
+
<Text font="label2">
|
|
124
124
|
Use moderate rounding to soften banners that live within card-based layouts.
|
|
125
|
-
</
|
|
125
|
+
</Text>
|
|
126
126
|
</Banner>
|
|
127
127
|
<Banner
|
|
128
128
|
borderRadius={400}
|
|
@@ -134,9 +134,9 @@ Customize `borderRadius` to align contextual or in-line banners with surrounding
|
|
|
134
134
|
title="Rounded inline banner"
|
|
135
135
|
variant="promotional"
|
|
136
136
|
>
|
|
137
|
-
<
|
|
137
|
+
<Text font="label2">
|
|
138
138
|
Larger radii can help inline banners feel cohesive with pill-shaped buttons or chips nearby.
|
|
139
|
-
</
|
|
139
|
+
</Text>
|
|
140
140
|
</Banner>
|
|
141
141
|
</VStack>
|
|
142
142
|
```
|
|
@@ -10,79 +10,222 @@ import { Button } from '@coinbase/cds-mobile/buttons/Button'
|
|
|
10
10
|
|
|
11
11
|
## Examples
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Buttons allow users to take actions and make choices with a single tap. They communicate what action will occur when the user interacts with them.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
### Basics
|
|
16
|
+
|
|
17
|
+
The only required prop is `children`, which is the button's label. Buttons default to the `primary` variant.
|
|
16
18
|
|
|
17
19
|
```jsx
|
|
18
|
-
<Button onPress={console.log}
|
|
19
|
-
Primary
|
|
20
|
-
</Button>
|
|
20
|
+
<Button onPress={console.log}>Get started</Button>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
###
|
|
23
|
+
### Variants
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Use variants to communicate the importance and intent of an action.
|
|
26
|
+
|
|
27
|
+
- **Primary** — High emphasis for main actions like "Save" or "Confirm". Limit to one per screen.
|
|
28
|
+
- **Secondary** — Medium emphasis for multiple actions of equal weight.
|
|
29
|
+
- **Tertiary** — High contrast with inverted background.
|
|
30
|
+
- **Negative** — Destructive actions that can't be undone. Use sparingly.
|
|
26
31
|
|
|
27
32
|
```jsx
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
<HStack gap={2} flexWrap="wrap">
|
|
34
|
+
<Button onPress={console.log} variant="primary">
|
|
35
|
+
Primary
|
|
36
|
+
</Button>
|
|
37
|
+
<Button onPress={console.log} variant="secondary">
|
|
38
|
+
Secondary
|
|
39
|
+
</Button>
|
|
40
|
+
<Button onPress={console.log} variant="tertiary">
|
|
41
|
+
Tertiary
|
|
42
|
+
</Button>
|
|
43
|
+
<Button onPress={console.log} variant="negative">
|
|
44
|
+
Negative
|
|
45
|
+
</Button>
|
|
46
|
+
</HStack>
|
|
31
47
|
```
|
|
32
48
|
|
|
33
|
-
|
|
49
|
+
#### Transparent
|
|
34
50
|
|
|
35
|
-
|
|
51
|
+
Use transparent buttons for supplementary actions with lower prominence. The container is only visible on interaction. Works with any variant.
|
|
36
52
|
|
|
37
53
|
```jsx
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
<HStack gap={2}>
|
|
55
|
+
<Button onPress={console.log} transparent>
|
|
56
|
+
Primary
|
|
57
|
+
</Button>
|
|
58
|
+
<Button onPress={console.log} variant="secondary" transparent>
|
|
59
|
+
Secondary
|
|
60
|
+
</Button>
|
|
61
|
+
<Button onPress={console.log} variant="negative" transparent>
|
|
62
|
+
Negative
|
|
63
|
+
</Button>
|
|
64
|
+
</HStack>
|
|
41
65
|
```
|
|
42
66
|
|
|
43
|
-
###
|
|
67
|
+
### States
|
|
68
|
+
|
|
69
|
+
#### Loading
|
|
44
70
|
|
|
45
|
-
|
|
71
|
+
Use the `loading` prop to indicate an action is in progress. The button becomes non-interactive and displays a spinner while preserving its width.
|
|
46
72
|
|
|
47
73
|
```jsx
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
<HStack gap={2}>
|
|
75
|
+
<Button onPress={console.log} loading>
|
|
76
|
+
Save changes
|
|
77
|
+
</Button>
|
|
78
|
+
<Button onPress={console.log} variant="secondary" loading>
|
|
79
|
+
Submit
|
|
80
|
+
</Button>
|
|
81
|
+
</HStack>
|
|
51
82
|
```
|
|
52
83
|
|
|
53
|
-
|
|
84
|
+
#### Disabled
|
|
54
85
|
|
|
55
|
-
|
|
86
|
+
Use the `disabled` prop to prevent interaction and indicate the action is unavailable.
|
|
56
87
|
|
|
57
88
|
```jsx
|
|
58
89
|
<HStack gap={2}>
|
|
59
|
-
<Button onPress={console.log}
|
|
90
|
+
<Button disabled onPress={console.log}>
|
|
60
91
|
Primary
|
|
61
92
|
</Button>
|
|
62
|
-
<Button onPress={console.log} variant="secondary"
|
|
93
|
+
<Button disabled onPress={console.log} variant="secondary">
|
|
63
94
|
Secondary
|
|
64
95
|
</Button>
|
|
65
|
-
<Button onPress={console.log} variant="negative"
|
|
96
|
+
<Button disabled onPress={console.log} variant="negative">
|
|
66
97
|
Negative
|
|
67
98
|
</Button>
|
|
68
99
|
</HStack>
|
|
69
100
|
```
|
|
70
101
|
|
|
71
|
-
###
|
|
102
|
+
### Sizing
|
|
103
|
+
|
|
104
|
+
#### Compact
|
|
72
105
|
|
|
73
|
-
|
|
106
|
+
Use `compact` for smaller buttons with reduced padding. Useful in dense UIs or alongside other compact elements.
|
|
74
107
|
|
|
75
108
|
```jsx
|
|
76
|
-
<HStack gap={2}>
|
|
77
|
-
<Button onPress={console.log}
|
|
78
|
-
|
|
109
|
+
<HStack gap={2} alignItems="center">
|
|
110
|
+
<Button onPress={console.log} compact>
|
|
111
|
+
Compact
|
|
112
|
+
</Button>
|
|
113
|
+
<Button onPress={console.log}>Default</Button>
|
|
114
|
+
</HStack>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### Block
|
|
118
|
+
|
|
119
|
+
Use `block` to make the button expand to fill its container width.
|
|
120
|
+
|
|
121
|
+
```jsx
|
|
122
|
+
<VStack gap={2}>
|
|
123
|
+
<Button onPress={console.log} block>
|
|
124
|
+
Full width button
|
|
125
|
+
</Button>
|
|
126
|
+
<Button onPress={console.log} variant="secondary" block>
|
|
127
|
+
Another full width
|
|
79
128
|
</Button>
|
|
129
|
+
</VStack>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Icons
|
|
133
|
+
|
|
134
|
+
#### End Icon
|
|
135
|
+
|
|
136
|
+
Add an icon after the label to provide additional context or indicate direction.
|
|
137
|
+
|
|
138
|
+
```jsx
|
|
139
|
+
<HStack gap={2}>
|
|
80
140
|
<Button onPress={console.log} endIcon="forwardArrow" variant="secondary" compact>
|
|
81
141
|
See more
|
|
82
142
|
</Button>
|
|
143
|
+
<Button onPress={console.log} endIcon="externalLink" variant="secondary" compact>
|
|
144
|
+
Open link
|
|
145
|
+
</Button>
|
|
146
|
+
</HStack>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
#### Start Icon
|
|
150
|
+
|
|
151
|
+
Add an icon before the label to reinforce the action.
|
|
152
|
+
|
|
153
|
+
```jsx
|
|
154
|
+
<HStack gap={2}>
|
|
155
|
+
<Button onPress={console.log} startIcon="add" startIconActive variant="secondary" compact>
|
|
156
|
+
Add item
|
|
157
|
+
</Button>
|
|
158
|
+
<Button onPress={console.log} startIcon="download" variant="secondary" compact>
|
|
159
|
+
Download
|
|
160
|
+
</Button>
|
|
161
|
+
</HStack>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Full Width with Icons
|
|
165
|
+
|
|
166
|
+
When using `block` with icons, the content automatically spreads across the button width.
|
|
167
|
+
|
|
168
|
+
```jsx
|
|
169
|
+
<Button onPress={console.log} startIcon="wallet" endIcon="forwardArrow" variant="secondary" block>
|
|
170
|
+
Connect wallet
|
|
171
|
+
</Button>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Accessibility
|
|
175
|
+
|
|
176
|
+
Buttons automatically use their `children` as the accessible label. For buttons with only icons or ambiguous labels, provide an `accessibilityLabel`.
|
|
177
|
+
|
|
178
|
+
```jsx
|
|
179
|
+
<Button onPress={handleClose} accessibilityLabel="Close dialog">
|
|
180
|
+
×
|
|
181
|
+
</Button>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Composed Examples
|
|
185
|
+
|
|
186
|
+
#### Confirmation Dialog
|
|
187
|
+
|
|
188
|
+
A common pattern using primary and secondary buttons together.
|
|
189
|
+
|
|
190
|
+
```jsx
|
|
191
|
+
<HStack gap={2} justifyContent="flex-end">
|
|
192
|
+
<Button onPress={console.log} variant="secondary" transparent>
|
|
193
|
+
Cancel
|
|
194
|
+
</Button>
|
|
195
|
+
<Button onPress={console.log}>Confirm</Button>
|
|
196
|
+
</HStack>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### Destructive Confirmation
|
|
200
|
+
|
|
201
|
+
Use negative buttons with a secondary cancel option for destructive actions.
|
|
202
|
+
|
|
203
|
+
```jsx
|
|
204
|
+
<HStack gap={2} justifyContent="flex-end">
|
|
205
|
+
<Button onPress={console.log} variant="secondary" transparent>
|
|
206
|
+
Cancel
|
|
207
|
+
</Button>
|
|
208
|
+
<Button onPress={console.log} variant="negative">
|
|
209
|
+
Delete
|
|
210
|
+
</Button>
|
|
83
211
|
</HStack>
|
|
84
212
|
```
|
|
85
213
|
|
|
214
|
+
#### Form Actions
|
|
215
|
+
|
|
216
|
+
A full-width primary action with a compact secondary option.
|
|
217
|
+
|
|
218
|
+
```jsx
|
|
219
|
+
<VStack gap={2}>
|
|
220
|
+
<Button onPress={console.log} block>
|
|
221
|
+
Create account
|
|
222
|
+
</Button>
|
|
223
|
+
<Button onPress={console.log} variant="secondary" transparent block>
|
|
224
|
+
Already have an account? Sign in
|
|
225
|
+
</Button>
|
|
226
|
+
</VStack>
|
|
227
|
+
```
|
|
228
|
+
|
|
86
229
|
## Props
|
|
87
230
|
|
|
88
231
|
| Prop | Type | Required | Default | Description |
|
|
@@ -107,9 +107,9 @@ function DynamicSizingCarousel() {
|
|
|
107
107
|
action="Start earning"
|
|
108
108
|
dangerouslySetBackground="rgb(var(--purple70))"
|
|
109
109
|
description={
|
|
110
|
-
<
|
|
110
|
+
<Text as="p" font="label2" numberOfLines={3} color="fgInverse">
|
|
111
111
|
Earn staking rewards on ETH by holding it on Coinbase
|
|
112
|
-
</
|
|
112
|
+
</Text>
|
|
113
113
|
}
|
|
114
114
|
media={
|
|
115
115
|
<Box left={16} position="relative" top={12}>
|
|
@@ -119,9 +119,9 @@ function DynamicSizingCarousel() {
|
|
|
119
119
|
minWidth="0"
|
|
120
120
|
onActionPress={NoopFn}
|
|
121
121
|
title={
|
|
122
|
-
<
|
|
122
|
+
<Text color="fgInverse" as="h3" font="headline">
|
|
123
123
|
Up to 3.29% APR on ETHs
|
|
124
|
-
</
|
|
124
|
+
</Text>
|
|
125
125
|
}
|
|
126
126
|
width="100%"
|
|
127
127
|
/>
|
|
@@ -417,9 +417,9 @@ Similar to web, you are provided the `isVisible` render prop, however it is not
|
|
|
417
417
|
}
|
|
418
418
|
minWidth="0"
|
|
419
419
|
title={
|
|
420
|
-
<
|
|
420
|
+
<Text as="h3" font="headline" id="recurring-buy-label">
|
|
421
421
|
Recurring Buy
|
|
422
|
-
</
|
|
422
|
+
</Text>
|
|
423
423
|
}
|
|
424
424
|
width="100%"
|
|
425
425
|
/>
|
|
@@ -497,9 +497,9 @@ function CustomComponentsCarousel() {
|
|
|
497
497
|
carousel: { gap: horizontalGap },
|
|
498
498
|
}}
|
|
499
499
|
title={
|
|
500
|
-
<
|
|
500
|
+
<Text as="h3" font="headline">
|
|
501
501
|
Learn more
|
|
502
|
-
</
|
|
502
|
+
</Text>
|
|
503
503
|
}
|
|
504
504
|
>
|
|
505
505
|
<CarouselItem id="recurring-buy" width={itemWidth}>
|
|
@@ -522,9 +522,9 @@ function CustomComponentsCarousel() {
|
|
|
522
522
|
action="Start earning"
|
|
523
523
|
dangerouslySetBackground="rgb(var(--purple70))"
|
|
524
524
|
description={
|
|
525
|
-
<
|
|
525
|
+
<Text as="p" font="label2" numberOfLines={3} color="fgInverse">
|
|
526
526
|
Earn staking rewards on ETH by holding it on Coinbase
|
|
527
|
-
</
|
|
527
|
+
</Text>
|
|
528
528
|
}
|
|
529
529
|
media={
|
|
530
530
|
<Box left={16} position="relative" top={12}>
|
|
@@ -534,9 +534,9 @@ function CustomComponentsCarousel() {
|
|
|
534
534
|
minWidth={0}
|
|
535
535
|
onActionPress={NoopFn}
|
|
536
536
|
title={
|
|
537
|
-
<
|
|
537
|
+
<Text color="fgInverse" as="h3" font="headline">
|
|
538
538
|
Up to 3.29% APR on ETHs
|
|
539
|
-
</
|
|
539
|
+
</Text>
|
|
540
540
|
}
|
|
541
541
|
width="100%"
|
|
542
542
|
/>
|
|
@@ -546,9 +546,9 @@ function CustomComponentsCarousel() {
|
|
|
546
546
|
action="Start chatting"
|
|
547
547
|
dangerouslySetBackground="rgb(var(--teal70))"
|
|
548
548
|
description={
|
|
549
|
-
<
|
|
549
|
+
<Text as="p" font="label2" numberOfLines={3} color="fgInverse">
|
|
550
550
|
Chat with other devs in our Discord community
|
|
551
|
-
</
|
|
551
|
+
</Text>
|
|
552
552
|
}
|
|
553
553
|
media={
|
|
554
554
|
<Box left={16} position="relative" top={4}>
|
|
@@ -558,9 +558,9 @@ function CustomComponentsCarousel() {
|
|
|
558
558
|
minWidth={0}
|
|
559
559
|
onActionPress={NoopFn}
|
|
560
560
|
title={
|
|
561
|
-
<
|
|
561
|
+
<Text color="fgInverse" as="h3" font="headline">
|
|
562
562
|
Join the community
|
|
563
|
-
</
|
|
563
|
+
</Text>
|
|
564
564
|
}
|
|
565
565
|
width="100%"
|
|
566
566
|
/>
|
|
@@ -570,9 +570,9 @@ function CustomComponentsCarousel() {
|
|
|
570
570
|
action="Get 60 days free"
|
|
571
571
|
dangerouslySetBackground="rgb(var(--blue80))"
|
|
572
572
|
description={
|
|
573
|
-
<
|
|
573
|
+
<Text as="p" font="label2" numberOfLines={3} color="fgInverse">
|
|
574
574
|
Use code NOV60 when you sign up for Coinbase One
|
|
575
|
-
</
|
|
575
|
+
</Text>
|
|
576
576
|
}
|
|
577
577
|
media={
|
|
578
578
|
<Box left={16} position="relative" top={0}>
|
|
@@ -582,9 +582,9 @@ function CustomComponentsCarousel() {
|
|
|
582
582
|
minWidth={0}
|
|
583
583
|
onActionPress={NoopFn}
|
|
584
584
|
title={
|
|
585
|
-
<
|
|
585
|
+
<Text color="fgInverse" as="h3" font="headline">
|
|
586
586
|
Coinbase One offer
|
|
587
|
-
</
|
|
587
|
+
</Text>
|
|
588
588
|
}
|
|
589
589
|
width="100%"
|
|
590
590
|
/>
|
|
@@ -594,9 +594,9 @@ function CustomComponentsCarousel() {
|
|
|
594
594
|
action="Get started"
|
|
595
595
|
dangerouslySetBackground="rgb(var(--gray100))"
|
|
596
596
|
description={
|
|
597
|
-
<
|
|
597
|
+
<Text as="p" font="label2" numberOfLines={3} color="fgInverse">
|
|
598
598
|
Spend USDC to get rewards with our Visa® debit card
|
|
599
|
-
</
|
|
599
|
+
</Text>
|
|
600
600
|
}
|
|
601
601
|
media={
|
|
602
602
|
<Box left={16} position="relative" top={0}>
|
|
@@ -606,9 +606,9 @@ function CustomComponentsCarousel() {
|
|
|
606
606
|
minWidth={0}
|
|
607
607
|
onActionPress={NoopFn}
|
|
608
608
|
title={
|
|
609
|
-
<
|
|
609
|
+
<Text color="fgInverse" as="h3" font="headline">
|
|
610
610
|
Coinbase Card
|
|
611
|
-
</
|
|
611
|
+
</Text>
|
|
612
612
|
}
|
|
613
613
|
width="100%"
|
|
614
614
|
/>
|