@coinbase/cds-mcp-server 8.41.0 → 8.42.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.
@@ -1,6 +1,6 @@
1
1
  # FloatingAssetCard
2
2
 
3
- Asset Cards display current and potential future assets, offering a straightforward method to view and manage a customer's holdings. They provide a clear visual and informative overview, simplifying asset management and investment considerations.
3
+ Asset Cards display current and potential future assets, offering a straightforward method to view and manage a customer's holdings.
4
4
 
5
5
  ## Import
6
6
 
@@ -0,0 +1,526 @@
1
+ # MediaCard
2
+
3
+ MediaCard displays content with optional media in a contained card layout. Use it to showcase assets, products, or content with a thumbnail, title, subtitle, description, and optional media placement. MediaCard replaces the deprecated FloatingAssetCard and ContainedAssetCard components.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { MediaCard } from '@coinbase/cds-mobile/cards/MediaCard'
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ MediaCard provides a contained card layout with optional media, ideal for showcasing assets, products, or promotional content.
14
+
15
+ :::info Migrating from FloatingAssetCard or ContainedAssetCard?
16
+ See the [Migration Guide](#migration-from-deprecated-components) at the end of this page.
17
+ :::
18
+
19
+ ### Basic
20
+
21
+ At minimum, provide a `thumbnail` to display visual content and a `title` for the card heading.
22
+
23
+ ```jsx
24
+ <VStack gap={2}>
25
+ <MediaCard
26
+ thumbnail={
27
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
28
+ }
29
+ title="Title"
30
+ subtitle="Subtitle"
31
+ description="Description"
32
+ width={320}
33
+ />
34
+ <MediaCard
35
+ thumbnail={
36
+ <RemoteImage
37
+ accessibilityLabel="Ethereum"
38
+ shape="circle"
39
+ size="l"
40
+ source={CDSDataAssets.ethBackground}
41
+ />
42
+ }
43
+ title="Title"
44
+ subtitle="Subtitle"
45
+ description="Description"
46
+ width={320}
47
+ media={
48
+ <RemoteImage
49
+ accessibilityLabel="Media"
50
+ height="100%"
51
+ resizeMode="cover"
52
+ shape="rectangle"
53
+ source={ethBackground}
54
+ width="100%"
55
+ />
56
+ }
57
+ />
58
+ </VStack>
59
+ ```
60
+
61
+ ### Media Placement
62
+
63
+ Use the `media` prop to display larger visual content. Control its position with `mediaPlacement`:
64
+
65
+ - `start`: Media on the left
66
+ - `end` (default): Media on the right
67
+
68
+ ```jsx
69
+ <VStack gap={2}>
70
+ <MediaCard
71
+ thumbnail={
72
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
73
+ }
74
+ title="Title"
75
+ subtitle="Subtitle"
76
+ description="Description"
77
+ width={320}
78
+ media={
79
+ <RemoteImage
80
+ accessibilityLabel="Media"
81
+ height="100%"
82
+ resizeMode="cover"
83
+ shape="rectangle"
84
+ source={ethBackground}
85
+ width="100%"
86
+ />
87
+ }
88
+ mediaPlacement="start"
89
+ />
90
+ <MediaCard
91
+ thumbnail={
92
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
93
+ }
94
+ title="Title"
95
+ subtitle="Subtitle"
96
+ description="Description"
97
+ width={320}
98
+ media={
99
+ <RemoteImage
100
+ accessibilityLabel="Media"
101
+ height="100%"
102
+ resizeMode="cover"
103
+ shape="rectangle"
104
+ source={ethBackground}
105
+ width="100%"
106
+ />
107
+ }
108
+ mediaPlacement="end"
109
+ />
110
+ </VStack>
111
+ ```
112
+
113
+ ### Interactive
114
+
115
+ MediaCard can be made interactive with the `onPress` prop and `renderAsPressable`.
116
+
117
+ ```jsx
118
+ <MediaCard
119
+ renderAsPressable
120
+ accessibilityLabel="View Ethereum details"
121
+ thumbnail={
122
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
123
+ }
124
+ title="Interactive Card"
125
+ subtitle="Button"
126
+ description="Clickable card with onPress handler"
127
+ width={320}
128
+ media={
129
+ <RemoteImage
130
+ accessibilityLabel="Media"
131
+ height="100%"
132
+ resizeMode="cover"
133
+ shape="rectangle"
134
+ source={ethBackground}
135
+ width="100%"
136
+ />
137
+ }
138
+ onPress={() => console.log('Card clicked!')}
139
+ />
140
+ ```
141
+
142
+ ### Text Content
143
+
144
+ #### Long Text
145
+
146
+ The card handles long text content with truncation.
147
+
148
+ ```jsx
149
+ <MediaCard
150
+ thumbnail={
151
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
152
+ }
153
+ title="This is a very long title text that will get truncated"
154
+ subtitle="This is a very long subtitle text that will get truncated"
155
+ description="This is a very long description text that demonstrates how the card handles longer content"
156
+ width={320}
157
+ media={
158
+ <RemoteImage
159
+ accessibilityLabel="Media"
160
+ height="100%"
161
+ resizeMode="cover"
162
+ shape="rectangle"
163
+ source={ethBackground}
164
+ width="100%"
165
+ />
166
+ }
167
+ />
168
+ ```
169
+
170
+ #### Custom Content
171
+
172
+ Use React nodes for custom styled text content.
173
+
174
+ ```jsx
175
+ <MediaCard
176
+ thumbnail={
177
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
178
+ }
179
+ title={<Text font="title3">Custom Title</Text>}
180
+ subtitle={
181
+ <Text font="headline" color="fgPositive">
182
+ Custom Subtitle
183
+ </Text>
184
+ }
185
+ description={
186
+ <Text font="label2">
187
+ Custom description with <Text font="headline">bold text</Text> and{' '}
188
+ <Text font="label1">italic text</Text>
189
+ </Text>
190
+ }
191
+ width={320}
192
+ media={
193
+ <RemoteImage
194
+ accessibilityLabel="Media"
195
+ height="100%"
196
+ resizeMode="cover"
197
+ shape="rectangle"
198
+ source={ethBackground}
199
+ width="100%"
200
+ />
201
+ }
202
+ />
203
+ ```
204
+
205
+ ### Styling
206
+
207
+ Use the `styles` prop to customize specific parts of the card.
208
+
209
+ ```jsx
210
+ <VStack gap={2}>
211
+ <MediaCard
212
+ thumbnail={
213
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
214
+ }
215
+ title="Title"
216
+ subtitle="Subtitle"
217
+ description="Description"
218
+ width={320}
219
+ media={
220
+ <RemoteImage
221
+ accessibilityLabel="Media"
222
+ height="100%"
223
+ resizeMode="cover"
224
+ shape="rectangle"
225
+ source={ethBackground}
226
+ width="100%"
227
+ />
228
+ }
229
+ styles={{
230
+ layoutContainer: { gap: 3 },
231
+ contentContainer: { padding: 3, gap: 2 },
232
+ textContainer: { gap: 1 },
233
+ headerContainer: { gap: 1 },
234
+ mediaContainer: { borderRadius: 300 },
235
+ }}
236
+ />
237
+ <MediaCard
238
+ thumbnail={
239
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
240
+ }
241
+ title="Title"
242
+ subtitle="Subtitle"
243
+ description="Description"
244
+ width={320}
245
+ media={
246
+ <RemoteImage
247
+ accessibilityLabel="Media"
248
+ height="100%"
249
+ resizeMode="cover"
250
+ shape="rectangle"
251
+ source={ethBackground}
252
+ width="100%"
253
+ />
254
+ }
255
+ styles={{
256
+ root: { borderWidth: 2, borderColor: 'blue' },
257
+ }}
258
+ />
259
+ </VStack>
260
+ ```
261
+
262
+ ### Multiple Cards
263
+
264
+ Display multiple cards in a carousel.
265
+
266
+ ```jsx
267
+ <Carousel styles={{ carousel: { gap: 16 } }}>
268
+ <CarouselItem id="card1">
269
+ <MediaCard
270
+ thumbnail={
271
+ <RemoteImage accessibilityLabel="Ethereum" shape="circle" size="l" source={ethBackground} />
272
+ }
273
+ title="Title"
274
+ subtitle="Subtitle"
275
+ description="Description"
276
+ width={320}
277
+ media={
278
+ <RemoteImage
279
+ accessibilityLabel="Media"
280
+ height="100%"
281
+ resizeMode="cover"
282
+ shape="rectangle"
283
+ source={ethBackground}
284
+ width="100%"
285
+ />
286
+ }
287
+ />
288
+ </CarouselItem>
289
+ <CarouselItem id="card2">
290
+ <MediaCard
291
+ renderAsPressable
292
+ accessibilityLabel="View Bitcoin details"
293
+ thumbnail={
294
+ <RemoteImage
295
+ accessibilityLabel="Bitcoin thumbnail"
296
+ shape="square"
297
+ size="l"
298
+ source={assets.btc.imageUrl}
299
+ />
300
+ }
301
+ title="Bitcoin"
302
+ subtitle="BTC"
303
+ description="Another card with different content"
304
+ width={320}
305
+ media={
306
+ <RemoteImage
307
+ accessibilityLabel="Ethereum background media"
308
+ height="100%"
309
+ resizeMode="cover"
310
+ shape="rectangle"
311
+ source={ethBackground}
312
+ width="100%"
313
+ />
314
+ }
315
+ />
316
+ </CarouselItem>
317
+ <CarouselItem id="card3">
318
+ <MediaCard
319
+ renderAsPressable
320
+ accessibilityLabel="View Ethereum details"
321
+ thumbnail={
322
+ <RemoteImage
323
+ accessibilityLabel="Ethereum thumbnail"
324
+ shape="circle"
325
+ size="l"
326
+ source={ethBackground}
327
+ />
328
+ }
329
+ title="Ethereum"
330
+ subtitle="ETH"
331
+ description="Card with onPress handler"
332
+ width={320}
333
+ onPress={() => {}}
334
+ />
335
+ </CarouselItem>
336
+ </Carousel>
337
+ ```
338
+
339
+ ### Accessibility
340
+
341
+ #### Interactive Cards
342
+
343
+ When making MediaCard interactive with `renderAsPressable`:
344
+
345
+ - Add an `accessibilityLabel` to summarize the card's action for VoiceOver users (e.g., `accessibilityLabel="View Ethereum details"`)
346
+
347
+ :::warning Avoid Nested Interactive Elements
348
+ Don't place buttons or pressables inside an interactive card, as this creates accessibility issues for VoiceOver users and can cause unexpected behavior when tapping.
349
+ :::
350
+
351
+ #### Color Contrast
352
+
353
+ When customizing card backgrounds, ensure sufficient color contrast between text and background colors. WCAG AA requires a minimum contrast ratio of 4.5:1 for normal text.
354
+
355
+ ### Migration from Deprecated Components
356
+
357
+ #### Migrating from ContainedAssetCard
358
+
359
+ Replace `ContainedAssetCard` with `MediaCard`:
360
+
361
+ ```jsx
362
+ // Before
363
+ <ContainedAssetCard
364
+ header={<RemoteImage source={assets.btc.imageUrl} width={32} height={32} />}
365
+ title="$309.43"
366
+ subtitle="Bitcoin"
367
+ description={<Text color="fgPositive">↗3.37%</Text>}
368
+ size="l"
369
+ >
370
+ <RemoteImage source={ethBackground} ... />
371
+ </ContainedAssetCard>
372
+
373
+ // After
374
+ <MediaCard
375
+ thumbnail={<RemoteImage source={assets.btc.imageUrl} shape="circle" size="l" />}
376
+ title="$309.43"
377
+ subtitle="Bitcoin"
378
+ description={<Text color="fgPositive">↗3.37%</Text>}
379
+ media={<RemoteImage source={ethBackground} height="100%" width="100%" resizeMode="cover" />}
380
+ mediaPlacement="end"
381
+ />
382
+ ```
383
+
384
+ #### Migrating from FloatingAssetCard
385
+
386
+ Replace `FloatingAssetCard` with `MediaCard`. Note that the floating variation (media outside the card container) is no longer supported:
387
+
388
+ ```jsx
389
+ // Before
390
+ <FloatingAssetCard
391
+ title="Balancing the Air"
392
+ subtitle="Amber V's Artwork"
393
+ description="0.5 ETH"
394
+ media={<RemoteImage source={{ uri: '...' }} ... />}
395
+ />
396
+
397
+ // After
398
+ <MediaCard
399
+ thumbnail={<RemoteImage source={{ uri: '...' }} shape="circle" size="l" />}
400
+ title="Balancing the Air"
401
+ subtitle="Amber V's Artwork"
402
+ description="0.5 ETH"
403
+ />
404
+ ```
405
+
406
+ ## Props
407
+
408
+ | Prop | Type | Required | Default | Description |
409
+ | --- | --- | --- | --- | --- |
410
+ | `thumbnail` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | Yes | `-` | React node to display as a thumbnail in the content area. |
411
+ | `alignContent` | `flex-start \| flex-end \| center \| stretch \| space-between \| space-around \| space-evenly` | No | `-` | - |
412
+ | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
413
+ | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
414
+ | `aspectRatio` | `string \| number` | No | `-` | - |
415
+ | `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 | `-` | Background color of the overlay (element being interacted with). |
416
+ | `blendStyles` | `InteractableBlendStyles` | No | `-` | - |
417
+ | `block` | `boolean` | No | `-` | Set element to block and expand to 100% width. |
418
+ | `borderBottomLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
419
+ | `borderBottomRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
420
+ | `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
421
+ | `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 | `-` | - |
422
+ | `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
423
+ | `borderRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
424
+ | `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
425
+ | `borderTopLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
426
+ | `borderTopRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
427
+ | `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
428
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
429
+ | `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
430
+ | `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
431
+ | `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
432
+ | `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
433
+ | `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
434
+ | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
435
+ | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
436
+ | `bottom` | `string \| number` | No | `-` | - |
437
+ | `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 | `-` | - |
438
+ | `columnGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
439
+ | `contentStyle` | `null \| false \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>>` | No | `-` | Apply animated styles to the inner container. |
440
+ | `dangerouslySetBackground` | `string` | No | `-` | - |
441
+ | `debounceTime` | `number` | No | `500` | The amount of time to wait (in milliseconds) before invoking the debounced function. This prop is used in conjunction with the disableDebounce prop. The debounce function is configured to be invoked as soon as its called, but subsequent calls within the debounceTime period will be ignored. |
442
+ | `description` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Text or React node to display as the card description. Use a Text component to override default color and font. |
443
+ | `disableDebounce` | `boolean` | No | `-` | React Native is historically trash at debouncing touch events. This can cause a lot of unwanted behavior such as double navigations where we push a screen onto the stack 2 times. Debouncing the event 500 miliseconds, but taking the leading event prevents this effect and the accidental double-tap. |
444
+ | `disabled` | `boolean` | No | `-` | Is the element currently disabled. Whether the press behavior is disabled. |
445
+ | `display` | `flex \| none` | No | `-` | - |
446
+ | `elevation` | `0 \| 1 \| 2` | No | `-` | Determines box shadow styles. Parent should have overflow set to visible to ensure styles are not clipped. Is the element elevated. |
447
+ | `feedback` | `none \| light \| normal \| heavy` | No | `none` | Haptic feedback to trigger when being pressed. |
448
+ | `flexBasis` | `string \| number` | No | `-` | - |
449
+ | `flexDirection` | `row \| column \| row-reverse \| column-reverse` | No | `-` | - |
450
+ | `flexGrow` | `number` | No | `-` | - |
451
+ | `flexShrink` | `number` | No | `-` | - |
452
+ | `flexWrap` | `wrap \| nowrap \| wrap-reverse` | No | `-` | - |
453
+ | `font` | `inherit \| FontFamily` | No | `-` | - |
454
+ | `fontFamily` | `inherit \| FontFamily` | No | `-` | - |
455
+ | `fontSize` | `inherit \| FontSize` | No | `-` | - |
456
+ | `fontWeight` | `inherit \| FontWeight` | No | `-` | - |
457
+ | `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
458
+ | `height` | `string \| number` | No | `-` | - |
459
+ | `justifyContent` | `flex-start \| flex-end \| center \| space-between \| space-around \| space-evenly` | No | `-` | - |
460
+ | `key` | `Key \| null` | No | `-` | - |
461
+ | `left` | `string \| number` | No | `-` | - |
462
+ | `lineHeight` | `inherit \| LineHeight` | No | `-` | - |
463
+ | `loading` | `boolean` | No | `-` | Is the element currenty loading. When set to true, will disable element from press and keyboard events Is the element currenty loading. |
464
+ | `margin` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
465
+ | `marginBottom` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
466
+ | `marginEnd` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
467
+ | `marginStart` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
468
+ | `marginTop` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
469
+ | `marginX` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
470
+ | `marginY` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
471
+ | `maxHeight` | `string \| number` | No | `-` | - |
472
+ | `maxWidth` | `string \| number` | No | `-` | - |
473
+ | `media` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | React node to display as the main media content. When provided, it will be rendered in an HStack container taking up 50% of the card width. |
474
+ | `mediaPlacement` | `end \| start` | No | `'end'` | The position of the media within the card. |
475
+ | `minHeight` | `string \| number` | No | `-` | - |
476
+ | `minWidth` | `string \| number` | No | `-` | - |
477
+ | `noScaleOnPress` | `boolean` | No | `-` | Dont scale element on press. |
478
+ | `onPointerCancel` | `((event: PointerEvent) => void)` | No | `-` | - |
479
+ | `onPointerCancelCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
480
+ | `onPointerDown` | `((event: PointerEvent) => void)` | No | `-` | - |
481
+ | `onPointerDownCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
482
+ | `onPointerEnter` | `((event: PointerEvent) => void)` | No | `-` | - |
483
+ | `onPointerEnterCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
484
+ | `onPointerLeave` | `((event: PointerEvent) => void)` | No | `-` | - |
485
+ | `onPointerLeaveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
486
+ | `onPointerMove` | `((event: PointerEvent) => void)` | No | `-` | - |
487
+ | `onPointerMoveCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
488
+ | `onPointerUp` | `((event: PointerEvent) => void)` | No | `-` | - |
489
+ | `onPointerUpCapture` | `((event: PointerEvent) => void)` | No | `-` | - |
490
+ | `onPress` | `((event: GestureResponderEvent) => void) \| null` | No | `-` | Called when a single tap gesture is detected. |
491
+ | `onPressIn` | `(((event: GestureResponderEvent) => void) & ((event: GestureResponderEvent) => void))` | No | `-` | Callback fired before onPress when button is pressed. Called when a touch is engaged before onPress. |
492
+ | `onPressOut` | `(((event: GestureResponderEvent) => void) & ((event: GestureResponderEvent) => void))` | No | `-` | Callback fired before onPress when button is released. Called when a touch is released before onPress. |
493
+ | `opacity` | `number \| AnimatedNode` | No | `-` | - |
494
+ | `overflow` | `visible \| hidden \| scroll` | No | `-` | - |
495
+ | `padding` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
496
+ | `paddingBottom` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
497
+ | `paddingEnd` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
498
+ | `paddingStart` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
499
+ | `paddingTop` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
500
+ | `paddingX` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
501
+ | `paddingY` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
502
+ | `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
503
+ | `position` | `static \| relative \| fixed \| absolute \| sticky` | No | `-` | - |
504
+ | `ref` | `((instance: View \| null) => void) \| RefObject<View> \| null` | No | `-` | - |
505
+ | `renderAsPressable` | `boolean` | No | `false` | If true, the CardRoot will be rendered as a Pressable component. When false, renders as an HStack for layout purposes. |
506
+ | `right` | `string \| number` | No | `-` | - |
507
+ | `rowGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
508
+ | `style` | `null \| false \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>>` | No | `-` | - |
509
+ | `styles` | `({ layoutContainer?: StyleProp<ViewStyle>; contentContainer?: StyleProp<ViewStyle>; textContainer?: StyleProp<ViewStyle>; headerContainer?: StyleProp<ViewStyle>; mediaContainer?: StyleProp<ViewStyle>; } & { root?: StyleProp<ViewStyle>; })` | No | `-` | - |
510
+ | `subtitle` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Text or React node to display as the card subtitle. Use a Text component to override default color and font. |
511
+ | `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. |
512
+ | `textAlign` | `left \| right \| auto \| center \| justify` | No | `-` | - |
513
+ | `textDecorationLine` | `none \| underline \| line-through \| underline line-through` | No | `-` | - |
514
+ | `textDecorationStyle` | `solid \| dotted \| dashed \| double` | No | `-` | - |
515
+ | `textTransform` | `none \| capitalize \| uppercase \| lowercase` | No | `-` | - |
516
+ | `title` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Text or React node to display as the card title. Use a Text component to override default color and font. |
517
+ | `top` | `string \| number` | No | `-` | - |
518
+ | `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 | `-` | - |
519
+ | `transparentWhileInactive` | `boolean` | No | `-` | Mark the background and border as transparent until the element is interacted with (hovered, pressed, etc). Must be used in conjunction with the pressed prop |
520
+ | `transparentWhilePressed` | `boolean` | No | `-` | Mark the background and border as transparent even while element is interacted with (elevation underlay issue). Must be used in conjunction with the pressed prop |
521
+ | `userSelect` | `none \| auto \| contain \| text \| all` | No | `-` | - |
522
+ | `width` | `string \| number` | No | `-` | - |
523
+ | `wrapperStyles` | `{ base?: StyleProp<ViewStyle>; pressed?: StyleProp<ViewStyle>; disabled?: StyleProp<ViewStyle>; }` | No | `-` | Apply styles to the outer container. |
524
+ | `zIndex` | `number` | No | `-` | - |
525
+
526
+