@coinbase/cds-mcp-server 8.38.7 → 8.39.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
CHANGED
|
@@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
<!-- template-start -->
|
|
10
10
|
|
|
11
|
+
## 8.39.0 ((1/27/2026, 11:17 AM PST))
|
|
12
|
+
|
|
13
|
+
This is an artificial version bump with no new change.
|
|
14
|
+
|
|
11
15
|
## 8.38.7 ((1/26/2026, 10:28 AM PST))
|
|
12
16
|
|
|
13
17
|
This is an artificial version bump with no new change.
|
|
@@ -381,6 +381,78 @@ function OverflowCarousel() {
|
|
|
381
381
|
}
|
|
382
382
|
```
|
|
383
383
|
|
|
384
|
+
### Looping
|
|
385
|
+
|
|
386
|
+
Enable infinite looping with the `loop` prop. You must have at least two pages of content to enable looping.
|
|
387
|
+
|
|
388
|
+
Looping works with both `snap` and `free` drag modes, and with both `page` and `item` snap modes.
|
|
389
|
+
|
|
390
|
+
#### Looping with Snap
|
|
391
|
+
|
|
392
|
+
When looping is enabled with snap drag mode, the carousel will snap to the nearest item or page (depending on `snapMode`) after releasing, allowing infinite scrolling in either direction.
|
|
393
|
+
|
|
394
|
+
```jsx
|
|
395
|
+
function LoopingSnapCarousel() {
|
|
396
|
+
const theme = useTheme();
|
|
397
|
+
const windowWidth = Dimensions.get('window').width;
|
|
398
|
+
|
|
399
|
+
const horizontalPadding = theme.space[2];
|
|
400
|
+
const carouselWidth = windowWidth - horizontalPadding * 2;
|
|
401
|
+
const horizontalGap = theme.space[1];
|
|
402
|
+
|
|
403
|
+
return (
|
|
404
|
+
<Carousel
|
|
405
|
+
loop
|
|
406
|
+
title="Infinite Scroll"
|
|
407
|
+
styles={{
|
|
408
|
+
root: { paddingHorizontal: horizontalPadding },
|
|
409
|
+
carousel: { gap: horizontalGap },
|
|
410
|
+
}}
|
|
411
|
+
>
|
|
412
|
+
{Object.values(assets).map((asset) => (
|
|
413
|
+
<CarouselItem key={asset.symbol} id={asset.symbol} accessibilityLabel={asset.name}>
|
|
414
|
+
<SquareAssetCard imageUrl={asset.imageUrl} name={asset.symbol} />
|
|
415
|
+
</CarouselItem>
|
|
416
|
+
))}
|
|
417
|
+
</Carousel>
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
#### Looping with Free Drag
|
|
423
|
+
|
|
424
|
+
When looping with free drag, the carousel scrolls continuously without snapping, creating a smooth endless scrolling experience.
|
|
425
|
+
|
|
426
|
+
```jsx
|
|
427
|
+
function LoopingFreeDragCarousel() {
|
|
428
|
+
const theme = useTheme();
|
|
429
|
+
const windowWidth = Dimensions.get('window').width;
|
|
430
|
+
|
|
431
|
+
const horizontalPadding = theme.space[2];
|
|
432
|
+
const carouselWidth = windowWidth - horizontalPadding * 2;
|
|
433
|
+
const horizontalGap = theme.space[1];
|
|
434
|
+
|
|
435
|
+
return (
|
|
436
|
+
<Carousel
|
|
437
|
+
loop
|
|
438
|
+
drag="free"
|
|
439
|
+
snapMode="item"
|
|
440
|
+
title="Free Scroll Loop"
|
|
441
|
+
styles={{
|
|
442
|
+
root: { paddingHorizontal: horizontalPadding },
|
|
443
|
+
carousel: { gap: horizontalGap },
|
|
444
|
+
}}
|
|
445
|
+
>
|
|
446
|
+
{Object.values(assets).map((asset) => (
|
|
447
|
+
<CarouselItem key={asset.symbol} id={asset.symbol} accessibilityLabel={asset.name}>
|
|
448
|
+
<SquareAssetCard imageUrl={asset.imageUrl} name={asset.symbol} />
|
|
449
|
+
</CarouselItem>
|
|
450
|
+
))}
|
|
451
|
+
</Carousel>
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
```
|
|
455
|
+
|
|
384
456
|
### Accessibility
|
|
385
457
|
|
|
386
458
|
The carousel is accessible by default.
|
|
@@ -1034,6 +1106,7 @@ You can use the `onChangePage`, `onDragStart`, and `onDragEnd` callbacks to list
|
|
|
1034
1106
|
| `key` | `Key \| null` | No | `-` | - |
|
|
1035
1107
|
| `left` | `string \| number` | No | `-` | - |
|
|
1036
1108
|
| `lineHeight` | `inherit \| LineHeight` | No | `-` | - |
|
|
1109
|
+
| `loop` | `boolean` | No | `-` | Enables infinite looping. When true, the carousel will seamlessly loop from the last item back to the first. |
|
|
1037
1110
|
| `margin` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
|
|
1038
1111
|
| `marginBottom` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
|
|
1039
1112
|
| `marginEnd` | `0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10` | No | `-` | - |
|
|
@@ -635,6 +635,96 @@ function OverflowCarousel() {
|
|
|
635
635
|
}
|
|
636
636
|
```
|
|
637
637
|
|
|
638
|
+
### Looping
|
|
639
|
+
|
|
640
|
+
Enable infinite looping with the `loop` prop. You must have at least two pages of content to enable looping.
|
|
641
|
+
|
|
642
|
+
Looping works with both `snap` and `free` drag modes, and with both `page` and `item` snap modes.
|
|
643
|
+
|
|
644
|
+
#### Looping with Snap
|
|
645
|
+
|
|
646
|
+
When looping is enabled with snap drag mode, the carousel will snap to the nearest item or page (depending on `snapMode`) after releasing, allowing infinite scrolling in either direction.
|
|
647
|
+
|
|
648
|
+
```jsx live
|
|
649
|
+
function LoopingSnapCarousel() {
|
|
650
|
+
function SquareAssetCard({ imageUrl, name }) {
|
|
651
|
+
return (
|
|
652
|
+
<ContainedAssetCard
|
|
653
|
+
description={
|
|
654
|
+
<Text as="p" font="label2" color="fgPositive" numberOfLines={2}>
|
|
655
|
+
↗6.37%
|
|
656
|
+
</Text>
|
|
657
|
+
}
|
|
658
|
+
header={<RemoteImage height="32px" source={imageUrl} width="32px" />}
|
|
659
|
+
subtitle={name}
|
|
660
|
+
title="$0.87"
|
|
661
|
+
/>
|
|
662
|
+
);
|
|
663
|
+
}
|
|
664
|
+
return (
|
|
665
|
+
<Box marginX={-3}>
|
|
666
|
+
<Carousel
|
|
667
|
+
loop
|
|
668
|
+
title="Infinite Scroll"
|
|
669
|
+
styles={{
|
|
670
|
+
root: { paddingInline: 'var(--space-3)' },
|
|
671
|
+
carousel: { gap: 'var(--space-1)' },
|
|
672
|
+
}}
|
|
673
|
+
>
|
|
674
|
+
{Object.values(assets).map((asset) => (
|
|
675
|
+
<CarouselItem key={asset.symbol} id={asset.symbol} accessibilityLabel={asset.name}>
|
|
676
|
+
<SquareAssetCard imageUrl={asset.imageUrl} name={asset.symbol} />
|
|
677
|
+
</CarouselItem>
|
|
678
|
+
))}
|
|
679
|
+
</Carousel>
|
|
680
|
+
</Box>
|
|
681
|
+
);
|
|
682
|
+
}
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
#### Looping with Free Drag
|
|
686
|
+
|
|
687
|
+
When looping with free drag, the carousel scrolls continuously without snapping, creating a smooth endless scrolling experience.
|
|
688
|
+
|
|
689
|
+
```jsx live
|
|
690
|
+
function LoopingFreeDragCarousel() {
|
|
691
|
+
function SquareAssetCard({ imageUrl, name }) {
|
|
692
|
+
return (
|
|
693
|
+
<ContainedAssetCard
|
|
694
|
+
description={
|
|
695
|
+
<Text as="p" font="label2" color="fgPositive" numberOfLines={2}>
|
|
696
|
+
↗6.37%
|
|
697
|
+
</Text>
|
|
698
|
+
}
|
|
699
|
+
header={<RemoteImage height="32px" source={imageUrl} width="32px" />}
|
|
700
|
+
subtitle={name}
|
|
701
|
+
title="$0.87"
|
|
702
|
+
/>
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
return (
|
|
706
|
+
<Box marginX={-3}>
|
|
707
|
+
<Carousel
|
|
708
|
+
loop
|
|
709
|
+
drag="free"
|
|
710
|
+
snapMode="item"
|
|
711
|
+
title="Free Scroll Loop"
|
|
712
|
+
styles={{
|
|
713
|
+
root: { paddingInline: 'var(--space-3)' },
|
|
714
|
+
carousel: { gap: 'var(--space-1)' },
|
|
715
|
+
}}
|
|
716
|
+
>
|
|
717
|
+
{Object.values(assets).map((asset) => (
|
|
718
|
+
<CarouselItem key={asset.symbol} id={asset.symbol} accessibilityLabel={asset.name}>
|
|
719
|
+
<SquareAssetCard imageUrl={asset.imageUrl} name={asset.symbol} />
|
|
720
|
+
</CarouselItem>
|
|
721
|
+
))}
|
|
722
|
+
</Carousel>
|
|
723
|
+
</Box>
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
```
|
|
727
|
+
|
|
638
728
|
### Accessibility
|
|
639
729
|
|
|
640
730
|
The carousel is accessible by default.
|
|
@@ -1533,6 +1623,7 @@ You can use the `onChangePage`, `onDragStart`, and `onDragEnd` callbacks to list
|
|
|
1533
1623
|
| `key` | `Key \| null` | No | `-` | - |
|
|
1534
1624
|
| `left` | `ResponsiveProp<Left<string \| number>>` | No | `-` | - |
|
|
1535
1625
|
| `lineHeight` | `ResponsiveProp<LineHeight \| inherit>` | No | `-` | - |
|
|
1626
|
+
| `loop` | `boolean` | No | `-` | Enables infinite looping. When true, the carousel will seamlessly loop from the last item back to the first. |
|
|
1536
1627
|
| `margin` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
|
|
1537
1628
|
| `marginBottom` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
|
|
1538
1629
|
| `marginEnd` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - |
|