@coinbase/cds-mcp-server 8.47.1 → 8.47.2

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.47.2 ((2/19/2026, 03:18 PM PST))
12
+
13
+ This is an artificial version bump with no new change.
14
+
11
15
  ## 8.47.1 ((2/19/2026, 01:18 PM PST))
12
16
 
13
17
  This is an artificial version bump with no new change.
@@ -87,7 +87,12 @@ Use `mediaPlacement` to control the position of media content.
87
87
 
88
88
  ### Upsell Card Styles
89
89
 
90
- MessagingCard with `type="upsell"` supports various background colors to match different promotional purposes. Use the `background` prop for semantic tokens, or `dangerouslySetBackground` for custom spectrum colors.
90
+ MessagingCard with `type="upsell"` supports various background colors to match different promotional purposes. Use the `background` prop for semantic tokens.
91
+
92
+ For **custom background colors**, use the recommended approach:
93
+
94
+ - **Non-interactive cards** (`renderAsPressable={false}` or omitted): set the background via `styles.root` (e.g. `styles={{ root: { backgroundColor: 'rgb(...)' } }}`).
95
+ - **Interactive cards** (`renderAsPressable` with `onPress`): set the background via `blendStyles.background` (e.g. `blendStyles={{ background: 'rgb(...)' }}`) so press states are handled correctly.
91
96
 
92
97
  #### General Upsell
93
98
 
@@ -152,7 +157,7 @@ function FeatureUpsell() {
152
157
  <MessagingCard
153
158
  key={i}
154
159
  type="upsell"
155
- dangerouslySetBackground={card.bg}
160
+ styles={{ root: { backgroundColor: card.bg } }}
156
161
  title={
157
162
  <Text color="fgInverse" font="headline">
158
163
  Up to 3.29% APR on ETH
@@ -194,7 +199,7 @@ function CommunityUpsell() {
194
199
  <MessagingCard
195
200
  key={i}
196
201
  type="upsell"
197
- dangerouslySetBackground={card.bg}
202
+ styles={{ root: { backgroundColor: card.bg } }}
198
203
  title={
199
204
  <Text color="fgInverse" font="headline">
200
205
  Join the community
@@ -256,7 +261,7 @@ function ProductUpsell() {
256
261
  <MessagingCard
257
262
  key={card.title}
258
263
  type="upsell"
259
- dangerouslySetBackground={card.bg}
264
+ styles={{ root: { backgroundColor: card.bg } }}
260
265
  title={
261
266
  <Text color="fgInverse" font="headline">
262
267
  {card.title}
@@ -303,7 +308,7 @@ function NewsUpsell() {
303
308
  <MessagingCard
304
309
  key={i}
305
310
  type="upsell"
306
- dangerouslySetBackground={card.bg}
311
+ styles={{ root: { backgroundColor: card.bg } }}
307
312
  title={
308
313
  <Text color="fgInverse" font="headline">
309
314
  Help defend crypto in America
@@ -378,7 +383,7 @@ function DismissibleCards() {
378
383
  <VStack gap={2}>
379
384
  <MessagingCard
380
385
  type="upsell"
381
- dangerouslySetBackground={`rgb(${spectrum.teal70})`}
386
+ styles={{ root: { backgroundColor: `rgb(${spectrum.teal70})` } }}
382
387
  title="Dismissible Upsell"
383
388
  description="Upsell card with dismiss button"
384
389
  width={320}
@@ -578,8 +583,10 @@ function DismissibleCardsList() {
578
583
  <MessagingCard
579
584
  key={card.id}
580
585
  type={card.type}
581
- dangerouslySetBackground={
582
- card.type === 'upsell' ? `rgb(${spectrum.gray100})` : undefined
586
+ styles={
587
+ card.type === 'upsell'
588
+ ? { root: { backgroundColor: `rgb(${spectrum.gray100})` } }
589
+ : undefined
583
590
  }
584
591
  title={card.title}
585
592
  description={card.description}
@@ -629,7 +636,7 @@ function InteractiveCards() {
629
636
  renderAsPressable
630
637
  onPress={() => console.log('Card pressed!')}
631
638
  type="upsell"
632
- dangerouslySetBackground={`rgb(${spectrum.teal70})`}
639
+ blendStyles={{ background: `rgb(${spectrum.teal70})` }}
633
640
  title="Interactive Upsell"
634
641
  description="Tap to interact"
635
642
  width={320}
@@ -757,7 +764,7 @@ function MultipleCards() {
757
764
  renderAsPressable
758
765
  onPress={() => console.log('clicked')}
759
766
  type="upsell"
760
- dangerouslySetBackground={`rgb(${spectrum.purple70})`}
767
+ blendStyles={{ background: `rgb(${spectrum.purple70})` }}
761
768
  title="Card 3"
762
769
  description="Card with onPress handler"
763
770
  tag="Action"
@@ -832,7 +839,7 @@ When you need both `onDismissButtonPress` and want the entire card to be pressab
832
839
 
833
840
  #### Color Contrast
834
841
 
835
- MessagingCard supports custom backgrounds via `background` and `dangerouslySetBackground` props. When using custom background colors, ensure sufficient color contrast between text and background:
842
+ MessagingCard supports custom backgrounds via the `background` prop and, for custom colors, `styles.root` (non-interactive) or `blendStyles.background` (interactive). When using custom background colors, ensure sufficient color contrast between text and background:
836
843
 
837
844
  - Use `fgInverse` text color with dark backgrounds (e.g., `accentBoldPurple`, `bgInverse`)
838
845
  - Use `fg` text color with light backgrounds (e.g., `bgPrimaryWash`, `bgAlternate`)
@@ -87,7 +87,12 @@ Use `mediaPlacement` to control the position of media content.
87
87
 
88
88
  ### Upsell Card Styles
89
89
 
90
- MessagingCard with `type="upsell"` supports various background colors to match different promotional purposes. Use the `background` prop for semantic tokens, or `dangerouslySetBackground` for custom spectrum colors.
90
+ MessagingCard with `type="upsell"` supports various background colors to match different promotional purposes. Use the `background` prop for semantic tokens.
91
+
92
+ For **custom background colors**, use the recommended approach:
93
+
94
+ - **Non-interactive cards** (default `as="article"` or `renderAsPressable={false}`): set the background via `styles.root` or `classNames.root` (e.g. `styles={{ root: { backgroundColor: 'rgb(var(--blue80))' } }}`).
95
+ - **Interactive cards** (`renderAsPressable` with `as="a"` or `as="button"`): set the background via `blendStyles.background` (e.g. `blendStyles={{ background: 'rgb(var(--blue80))' }}`) so press states are handled correctly.
91
96
 
92
97
  #### General Upsell
93
98
 
@@ -142,7 +147,7 @@ function FeatureUpsell() {
142
147
  <MessagingCard
143
148
  key={card.label}
144
149
  type="upsell"
145
- dangerouslySetBackground={card.bg}
150
+ styles={{ root: { backgroundColor: card.bg } }}
146
151
  title={
147
152
  <Text color="fgInverse" as="h3" font="headline">
148
153
  Up to 3.29% APR on ETH
@@ -191,7 +196,7 @@ function CommunityUpsell() {
191
196
  <MessagingCard
192
197
  key={i}
193
198
  type="upsell"
194
- dangerouslySetBackground={card.bg}
199
+ styles={{ root: { backgroundColor: card.bg } }}
195
200
  title={
196
201
  <Text color="fgInverse" as="h3" font="headline">
197
202
  Join the community
@@ -252,7 +257,7 @@ function ProductUpsell() {
252
257
  <MessagingCard
253
258
  key={card.title}
254
259
  type="upsell"
255
- dangerouslySetBackground={card.bg}
260
+ styles={{ root: { backgroundColor: card.bg } }}
256
261
  title={
257
262
  <Text color="fgInverse" as="h3" font="headline">
258
263
  {card.title}
@@ -298,7 +303,7 @@ function NewsUpsell() {
298
303
  <MessagingCard
299
304
  key={i}
300
305
  type="upsell"
301
- dangerouslySetBackground={card.bg}
306
+ styles={{ root: { backgroundColor: card.bg } }}
302
307
  title={
303
308
  <Text color="fgInverse" as="h3" font="headline">
304
309
  Help defend crypto in America
@@ -385,7 +390,7 @@ Use `onDismissButtonClick` to add a dismiss button.
385
390
  mediaPlacement="end"
386
391
  onDismissButtonClick={() => alert('Card dismissed!')}
387
392
  dismissButtonAccessibilityLabel="Close card"
388
- dangerouslySetBackground="rgb(var(--teal70))"
393
+ styles={{ root: { backgroundColor: 'rgb(var(--teal70))' } }}
389
394
  />
390
395
  <MessagingCard
391
396
  type="nudge"
@@ -567,7 +572,11 @@ function DismissibleCards() {
567
572
  <MessagingCard
568
573
  key={card.id}
569
574
  type={card.type}
570
- dangerouslySetBackground={card.type === 'upsell' ? 'rgb(var(--gray100))' : undefined}
575
+ styles={
576
+ card.type === 'upsell'
577
+ ? { root: { backgroundColor: 'rgb(var(--gray100))' } }
578
+ : undefined
579
+ }
571
580
  title={card.title}
572
581
  description={card.description}
573
582
  width={360}
@@ -612,7 +621,7 @@ MessagingCard supports polymorphic rendering with `as` and can be made interacti
612
621
  <MessagingCard
613
622
  as="article"
614
623
  type="upsell"
615
- dangerouslySetBackground="rgb(var(--teal70))"
624
+ styles={{ root: { backgroundColor: 'rgb(var(--teal70))' } }}
616
625
  title="Title"
617
626
  description="Description"
618
627
  width={320}
@@ -633,7 +642,7 @@ MessagingCard supports polymorphic rendering with `as` and can be made interacti
633
642
  href="https://www.coinbase.com"
634
643
  target="_blank"
635
644
  type="upsell"
636
- dangerouslySetBackground="rgb(var(--purple70))"
645
+ blendStyles={{ background: 'rgb(var(--purple70))' }}
637
646
  title="Interactive Upsell"
638
647
  description="Clickable card with href"
639
648
  width={320}
@@ -665,7 +674,7 @@ MessagingCard supports polymorphic rendering with `as` and can be made interacti
665
674
  as="button"
666
675
  onClick={() => alert('Card clicked!')}
667
676
  type="upsell"
668
- dangerouslySetBackground="rgb(var(--gray100))"
677
+ blendStyles={{ background: 'rgb(var(--gray100))' }}
669
678
  title="Interactive Card"
670
679
  description="Clickable card with onClick handler"
671
680
  width={320}
@@ -783,7 +792,7 @@ Display multiple cards in a carousel.
783
792
  as="button"
784
793
  onClick={() => console.log('clicked')}
785
794
  type="upsell"
786
- dangerouslySetBackground="rgb(var(--purple70))"
795
+ blendStyles={{ background: 'rgb(var(--purple70))' }}
787
796
  title="Card 3"
788
797
  description="Card with onClick handler"
789
798
  tag="Action"
@@ -862,7 +871,7 @@ When you need both `onDismissButtonClick` and want the entire card to be clickab
862
871
 
863
872
  #### Color Contrast
864
873
 
865
- MessagingCard supports custom backgrounds via `background` and `dangerouslySetBackground` props. When using custom background colors, ensure sufficient color contrast between text and background:
874
+ MessagingCard supports custom backgrounds via the `background` prop and, for custom colors, `styles.root` / `classNames.root` (non-interactive) or `blendStyles.background` (interactive). When using custom background colors, ensure sufficient color contrast between text and background:
866
875
 
867
876
  - Use `fgInverse` text color with dark backgrounds (e.g., `accentBoldPurple`, `bgInverse`)
868
877
  - Use `fg` text color with light backgrounds (e.g., `bgPrimaryWash`, `bgAlternate`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinbase/cds-mcp-server",
3
- "version": "8.47.1",
3
+ "version": "8.47.2",
4
4
  "description": "Coinbase Design System - MCP Server",
5
5
  "repository": {
6
6
  "type": "git",