@coinbase/cds-mcp-server 9.0.0-rc.2 → 9.0.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +62 -2
  2. package/mcp-docs/mobile/components/DateInput.txt +3 -2
  3. package/mcp-docs/mobile/components/DatePicker.txt +3 -2
  4. package/mcp-docs/mobile/components/HeroSquare.txt +33 -4
  5. package/mcp-docs/mobile/components/IconButton.txt +10 -0
  6. package/mcp-docs/mobile/components/PageFooter.txt +23 -0
  7. package/mcp-docs/mobile/components/PeriodSelector.txt +2 -1
  8. package/mcp-docs/mobile/components/Pictogram.txt +28 -3
  9. package/mcp-docs/mobile/components/SearchInput.txt +3 -2
  10. package/mcp-docs/mobile/components/SegmentedTabs.txt +29 -1
  11. package/mcp-docs/mobile/components/SelectOption.txt +77 -0
  12. package/mcp-docs/mobile/components/SpotIcon.txt +28 -3
  13. package/mcp-docs/mobile/components/SpotRectangle.txt +28 -3
  14. package/mcp-docs/mobile/components/SpotSquare.txt +28 -3
  15. package/mcp-docs/mobile/components/TabbedChipsAlpha.txt +2 -1
  16. package/mcp-docs/mobile/components/Tabs.txt +38 -22
  17. package/mcp-docs/mobile/components/TextInput.txt +3 -2
  18. package/mcp-docs/mobile/guides/_v9MobileInstallCommands.txt +9 -0
  19. package/mcp-docs/mobile/guides/_v9MobilePeerDependencies.txt +15 -0
  20. package/mcp-docs/mobile/guides/_v9WebInstallCommands.txt +9 -0
  21. package/mcp-docs/mobile/guides/_v9WebPeerDependencies.txt +5 -0
  22. package/mcp-docs/mobile/guides/v9-migration-guide.txt +348 -0
  23. package/mcp-docs/mobile/routes.txt +5 -0
  24. package/mcp-docs/web/components/CellMedia.txt +1 -1
  25. package/mcp-docs/web/components/DateInput.txt +3 -0
  26. package/mcp-docs/web/components/DatePicker.txt +3 -0
  27. package/mcp-docs/web/components/FullscreenAlert.txt +1 -1
  28. package/mcp-docs/web/components/HeroSquare.txt +46 -5
  29. package/mcp-docs/web/components/IconButton.txt +9 -112
  30. package/mcp-docs/web/components/PageFooter.txt +23 -0
  31. package/mcp-docs/web/components/PeriodSelector.txt +2 -1
  32. package/mcp-docs/web/components/Pictogram.txt +39 -4
  33. package/mcp-docs/web/components/SearchInput.txt +3 -0
  34. package/mcp-docs/web/components/SegmentedTabs.txt +29 -1
  35. package/mcp-docs/web/components/SpotIcon.txt +39 -4
  36. package/mcp-docs/web/components/SpotRectangle.txt +39 -4
  37. package/mcp-docs/web/components/SpotSquare.txt +39 -4
  38. package/mcp-docs/web/components/TabbedChipsAlpha.txt +2 -1
  39. package/mcp-docs/web/components/Tabs.txt +38 -22
  40. package/mcp-docs/web/components/TextInput.txt +3 -0
  41. package/mcp-docs/web/guides/_v9MobileInstallCommands.txt +9 -0
  42. package/mcp-docs/web/guides/_v9MobilePeerDependencies.txt +15 -0
  43. package/mcp-docs/web/guides/_v9WebInstallCommands.txt +9 -0
  44. package/mcp-docs/web/guides/_v9WebPeerDependencies.txt +5 -0
  45. package/mcp-docs/web/guides/v9-migration-guide.txt +348 -0
  46. package/mcp-docs/web/routes.txt +5 -0
  47. package/package.json +1 -1
@@ -12,13 +12,13 @@ import { SpotIcon } from '@coinbase/cds-mobile/illustratations/SpotIcon'
12
12
 
13
13
  ## Examples
14
14
 
15
- ### Basic example
15
+ #### Basic example
16
16
 
17
17
  ```jsx
18
18
  <SpotIcon name="shield" dimension="32x32" />
19
19
  ```
20
20
 
21
- ### `scaleMultiplier` prop
21
+ #### `scaleMultiplier` prop
22
22
 
23
23
  If no predefined dimensions fit your use case, you can use the `scaleMultiplier` prop to scale the illustration.
24
24
 
@@ -28,7 +28,7 @@ Use `scaleMultiplier` sparingly and with caution. We have predefined dimensions
28
28
  <SpotIcon name="shield" scaleMultiplier={1.5} />
29
29
  ```
30
30
 
31
- ### Scaling with dimension
31
+ #### Scaling with dimension
32
32
 
33
33
  If `dimension` and `scaleMultiplier` are both provided the component will scale based on the provided dimension.
34
34
 
@@ -36,11 +36,36 @@ If `dimension` and `scaleMultiplier` are both provided the component will scale
36
36
  <SpotIcon name="shield" dimension="24x24" scaleMultiplier={1.5} />
37
37
  ```
38
38
 
39
+ ### Theming
40
+
41
+ Use the `applyTheme` prop to enable dynamic theming. When set, the illustration is colored by the active `ThemeProvider`'s illustration palette instead of using the hardcoded light or dark variant.
42
+
43
+ ```jsx
44
+ const customTheme = {
45
+ ...defaultTheme,
46
+ lightIllustrationColor: {
47
+ ...defaultTheme.lightIllustrationColor,
48
+ primary: 'rgb(220, 38, 38)',
49
+ accent1: 'rgb(124, 58, 237)',
50
+ },
51
+ darkIllustrationColor: {
52
+ ...defaultTheme.darkIllustrationColor,
53
+ primary: 'rgb(248, 113, 113)',
54
+ accent1: 'rgb(167, 139, 250)',
55
+ },
56
+ };
57
+
58
+ <ThemeProvider activeColorScheme="light" theme={customTheme}>
59
+ <SpotIcon applyTheme name="shield" dimension="32x32" />
60
+ </ThemeProvider>;
61
+ ```
62
+
39
63
  ## Props
40
64
 
41
65
  | Prop | Type | Required | Default | Description |
42
66
  | --- | --- | --- | --- | --- |
43
67
  | `name` | `done \| warning \| error \| advancedTradeProduct \| arrowsUpDown \| assetHubProduct \| assetManagementProduct \| bank \| base \| borrowProduct \| cloudProduct \| coinbase \| commerceProduct \| custodyProduct \| delegateProduct \| derivativesProduct \| email \| exchangeProduct \| helpCenterProduct \| institutionalProduct \| learningRewardsProduct \| nftProduct \| nodeProduct \| participateProduct \| privateClientProduct \| rewardsProduct \| rosettaProduct \| shield \| venturesProduct \| wallet \| walletLogo \| 2fa \| authenticator \| bonusFivePercent \| bonusTwoPercent \| businessProduct \| chat \| coinbaseOneEarn \| coinbaseOneProductInvestWeekly \| creditCard \| delegate \| fast \| idVerification \| instoDelegate \| outage \| pieChart \| recurringPurchases \| send \| layeredNetworks \| noFees \| assetEmptyStateAa \| assetEmptyStateAb \| assetEmptyStateAc \| assetEmptyStateAd \| assetEmptyStateAe \| assetEmptyStateBa \| assetEmptyStateBb \| assetEmptyStateBc \| assetEmptyStateBd \| assetEmptyStateBe \| assetEmptyStateCa \| assetEmptyStateCb \| assetEmptyStateCc \| assetEmptyStateCd \| assetEmptyStateCe \| assetEmptyStateDa \| assetEmptyStateDb \| assetEmptyStateDc \| assetEmptyStateDd \| assetEmptyStateDe \| assetEmptyStateEa \| assetEmptyStateEb \| assetEmptyStateEc \| assetEmptyStateEd \| assetEmptyStateEe \| cb1Cash \| coinbaseOneChart \| coinbaseOneProduct \| contract \| dataMarketplace \| instantAccess \| instoAdvancedTradeProduct \| instoAssetHubProduct \| instoAuthenticator \| instoBorrowProduct \| instoBusinessProduct \| instoChat \| instoCloudProduct \| instoCoinbaseOneEarn \| instoCommerceProduct \| instoCustodyProduct \| instoDataMarketplace \| instoDerivativesProduct \| instoFast \| instoHelpCenterProduct \| instoIdVerification \| instoLayeredNetworks \| instoLearningRewardsProduct \| instoMultiCoin \| instoPaySDKProduct \| instoPieChart \| instoPrimeProduct \| instoPrivateClientProduct \| instoProductCoinbaseCard \| instoProductCompliance \| instoProductPro \| instoProductWallet \| instoRecurringPurchases \| instoRewardsProduct \| instoShield \| instoSignInProduct \| instoStakingProduct \| instoWalletAsAServiceProduct \| internationalExchangeProduct \| multiCoin \| paySDKProduct \| primeProduct \| productCoinbaseCard \| productCompliance \| productEarn \| productPro \| productWallet \| signInProduct \| stakingProduct \| walletAsAServiceProduct` | Yes | `-` | Name of illustration as defined in Figma |
68
+ | `applyTheme` | `boolean` | No | `-` | Apply the theme to the illustration |
44
69
  | `dimension` | `32x32 \| 24x24` | No | `-` | HeroSquare Default: 240x240 SpotSquare Default: 96x96 Pictogram Default: 48x48 SpotRectangle Default: 240x120 |
45
70
  | `fallback` | `ReactElement<unknown, string \| JSXElementConstructor<any>> \| null` | No | `null` | Fallback element to render if unable to find an illustration with the matching name |
46
71
  | `scaleMultiplier` | `number` | No | `-` | Multiply the width & height while maintaining aspect ratio |
@@ -12,13 +12,13 @@ import { SpotRectangle } from '@coinbase/cds-mobile/illustratations/SpotRectangl
12
12
 
13
13
  ## Examples
14
14
 
15
- ### Basic example
15
+ #### Basic example
16
16
 
17
17
  ```jsx
18
18
  <SpotRectangle name="creditCardExcitement" />
19
19
  ```
20
20
 
21
- ### `scaleMultiplier` prop
21
+ #### `scaleMultiplier` prop
22
22
 
23
23
  If no predefined dimensions fit your use case, you can use the `scaleMultiplier` prop to scale the illustration.
24
24
 
@@ -28,7 +28,7 @@ Use `scaleMultiplier` sparingly and with caution. We have predefined dimensions
28
28
  <SpotRectangle name="creditCardExcitement" scaleMultiplier={1.5} />
29
29
  ```
30
30
 
31
- ### Scaling with dimension
31
+ #### Scaling with dimension
32
32
 
33
33
  If `dimension` and `scaleMultiplier` are both provided the component will scale based on the provided dimension.
34
34
 
@@ -36,11 +36,36 @@ If `dimension` and `scaleMultiplier` are both provided the component will scale
36
36
  <SpotRectangle name="creditCardExcitement" dimension="240x120" scaleMultiplier={1.5} />
37
37
  ```
38
38
 
39
+ ### Theming
40
+
41
+ Use the `applyTheme` prop to enable dynamic theming. When set, the illustration is colored by the active `ThemeProvider`'s illustration palette instead of using the hardcoded light or dark variant.
42
+
43
+ ```jsx
44
+ const customTheme = {
45
+ ...defaultTheme,
46
+ lightIllustrationColor: {
47
+ ...defaultTheme.lightIllustrationColor,
48
+ primary: 'rgb(220, 38, 38)',
49
+ accent1: 'rgb(124, 58, 237)',
50
+ },
51
+ darkIllustrationColor: {
52
+ ...defaultTheme.darkIllustrationColor,
53
+ primary: 'rgb(248, 113, 113)',
54
+ accent1: 'rgb(167, 139, 250)',
55
+ },
56
+ };
57
+
58
+ <ThemeProvider activeColorScheme="light" theme={customTheme}>
59
+ <SpotRectangle applyTheme name="creditCardExcitement" />
60
+ </ThemeProvider>;
61
+ ```
62
+
39
63
  ## Props
40
64
 
41
65
  | Prop | Type | Required | Default | Description |
42
66
  | --- | --- | --- | --- | --- |
43
67
  | `name` | `margin \| blockchain \| bridging \| calendar \| coinbaseOneLogo \| concierge \| diamond \| earn \| login \| nft \| securityShield \| staking \| tokenSales \| cb1BankTransfers \| ethStakingRewards \| futures \| globalTransactions \| governance \| instoKey \| lightningNetworkSend \| startToday \| usdcLoan \| wrapEth \| phoneNumber \| accessToAdvancedCharts \| addPhoneNumber \| advancedTrading \| advancedTradingChartsIndicatorsCandles \| advancedTradingUi \| appTrackingTransparency \| automaticPayments \| backedByUsDollar \| basedInUsa \| bigBtc \| borrowWallet \| browserExtension \| cardBoosted \| cbbtc \| coinbaseCardLock \| coinbaseCardPocket \| coinbaseFees \| coinbaseOneDiscountedAmount \| coinbaseOnePhoneLightning \| coinbaseOneRewards \| coinbaseOneSavingFunds \| collectingNfts \| commerceAccounting \| commerceInvoices \| completeAQuiz \| congratulationsOnEarningCrypto \| contactsListWarning \| crossBorderPayments \| cryptoAndMore \| cryptoApps \| cryptoAssets \| cryptoEconomy \| cryptoForBeginners \| cryptoPortfolio \| cryptoWallet \| decentralization \| decentralizedWebWeb3 \| defiDecentralizedBorrowingLending \| defiDecentralizedTradingExchange \| defiEarn \| defiHow \| defiRisk \| didDecentralizedIdentity \| digitalCollectibles \| documentCertified \| documentSuccess \| earnInterest \| earnToLearn \| encryptedEverything \| estimatedAmount \| exploreDecentralizedApps \| fileYourCryptoTaxes \| fileYourCryptoTaxesCheck \| focusLimitOrders \| freeBtc \| gainsAndLosses \| gasFeesNetworkFees \| getStartedInMinutes \| graphChartTrading \| hardwareWallets \| holdCrypto \| holdingCrypto \| instoPrimeStaking \| instoStaking \| insuranceProtection \| invest \| layeredNetworks \| leverage \| linkingYourWalletToYourCoinbaseAccount \| liquidationBufferGreen \| liquidationBufferRed \| liquidationBufferYellow \| marginWarning \| mining \| moneyDecentralized \| multicoinSupport \| multiPlatformMobileAppBrowserExtension \| multipleAccountsWalletsForOneUser \| noFees \| notificationsAlt \| onTheList \| openEmail \| optInPushNotificationsEmail \| p2pPayments \| portfolioPerformance \| poweredByEthereum \| primeDeFi \| primeEarn \| primeStaking \| quickAndSimple \| readyToTrade \| referralsBitcoin \| referralsCoinbaseOne \| referralsGenericCoin \| retailUSDCRewards \| secureAndTrusted \| secureGlobalTransactions \| secureStorage \| selfCustody \| semiCustodial \| sendCryptoFaster \| shareOnSocialMedia \| sidechain \| stableValue \| stayInControlSelfHostedWalletsStorage \| stressTestedColdStorage \| switchAdvancedToSimpleTrading \| taxesDetails \| tradeImmediately \| trendingHotAssets \| verifyEmail \| verifyInfo \| walletNotifications \| walletSecurity \| watchVideos \| addBank \| advancedTradeCharts \| apiKey \| appUpdate \| borrowLoan \| browserHistory \| cardWaitlist \| cbEth \| clawMachinePig \| coinGateway \| connectWalletTutorial \| creditCardExcitement \| creditCardExcitementCoinbaseOne \| cryptoEconomyCoin \| cryptoEconomyEurc \| cryptoEconomyUSDC \| currency \| derivativesLoop \| downloadCoinbaseWalletArrow \| downloadingStatement \| emptyNfts \| emptyTrading \| eth2SellSend \| eth2SendSell \| eth2SendSellTwo \| ethAddress \| ethStakeOrWrap \| ethStakeOrWrapTwo \| ethStakingMovement \| ethTrading \| ethTradingTwo \| ethWrappedStakingRewards \| faceId \| fiatInterest \| giftBoxRewards \| highFees \| insto \| instoAboutOnchain \| instoApiKey \| instoConsensusWaitingForApprovals \| instoCryptoAndMore \| instoCurrency \| instoDesignateSigner \| instoEmptyTrading \| instoEthStakingMovement \| instoGetStartedInMinutes \| instoMargin \| instoOnchainSetupInProgress \| instoQRCode \| instoRefreshKey \| instoSemiCustodial \| instoSetupComplete \| instoSetupOnchain \| leadingProtocol \| leadingProtocolMorpho \| ledgerFailed \| ledgerSignatureRejected \| lendGraph \| linkCoinbaseWallet \| loanValue \| noTransactions \| portfolioOverview \| portfolioOverviewRelaunch \| primeOrderConfirmation \| primePriceLadder \| primeTradePreferences \| protectedNotes \| ratDashboard \| ratFoundWallet \| ratMigration \| ratMigrationerror \| referralsBonus \| scanCode \| secureAccount \| sendingCrypto \| stakingUpgrade \| trade \| transferCoins \| transferEth \| transferFunds \| trustedContacts \| unauthorizedTransfers \| uob \| update \| uploadDocument \| usdcLoanEth \| walletReconnect \| walletReconnectSuccess \| wrapEthTwo \| yieldHolding` | Yes | `-` | Name of illustration as defined in Figma |
68
+ | `applyTheme` | `boolean` | No | `-` | Apply the theme to the illustration |
44
69
  | `dimension` | `240x120` | No | `-` | HeroSquare Default: 240x240 SpotSquare Default: 96x96 Pictogram Default: 48x48 SpotRectangle Default: 240x120 |
45
70
  | `fallback` | `ReactElement<unknown, string \| JSXElementConstructor<any>> \| null` | No | `null` | Fallback element to render if unable to find an illustration with the matching name |
46
71
  | `scaleMultiplier` | `number` | No | `-` | Multiply the width & height while maintaining aspect ratio |
@@ -12,13 +12,13 @@ import { SpotSquare } from '@coinbase/cds-mobile/illustratations/SpotSquare'
12
12
 
13
13
  ## Examples
14
14
 
15
- ### Basic example
15
+ #### Basic example
16
16
 
17
17
  ```jsx
18
18
  <SpotSquare name="yieldCenterUSDC" />
19
19
  ```
20
20
 
21
- ### `scaleMultiplier` prop
21
+ #### `scaleMultiplier` prop
22
22
 
23
23
  If no predefined dimensions fit your use case, you can use the `scaleMultiplier` prop to scale the illustration.
24
24
 
@@ -28,7 +28,7 @@ Use `scaleMultiplier` sparingly and with caution. We have predefined dimensions
28
28
  <SpotSquare name="yieldCenterUSDC" scaleMultiplier={1.5} />
29
29
  ```
30
30
 
31
- ### Scaling with dimension
31
+ #### Scaling with dimension
32
32
 
33
33
  If `dimension` and `scaleMultiplier` are both provided the component will scale based on the provided dimension.
34
34
 
@@ -36,11 +36,36 @@ If `dimension` and `scaleMultiplier` are both provided the component will scale
36
36
  <SpotSquare name="yieldCenterUSDC" dimension="120x120" scaleMultiplier={1.5} />
37
37
  ```
38
38
 
39
+ ### Theming
40
+
41
+ Use the `applyTheme` prop to enable dynamic theming. When set, the illustration is colored by the active `ThemeProvider`'s illustration palette instead of using the hardcoded light or dark variant.
42
+
43
+ ```jsx
44
+ const customTheme = {
45
+ ...defaultTheme,
46
+ lightIllustrationColor: {
47
+ ...defaultTheme.lightIllustrationColor,
48
+ primary: 'rgb(220, 38, 38)',
49
+ accent1: 'rgb(124, 58, 237)',
50
+ },
51
+ darkIllustrationColor: {
52
+ ...defaultTheme.darkIllustrationColor,
53
+ primary: 'rgb(248, 113, 113)',
54
+ accent1: 'rgb(167, 139, 250)',
55
+ },
56
+ };
57
+
58
+ <ThemeProvider activeColorScheme="light" theme={customTheme}>
59
+ <SpotSquare applyTheme name="yieldCenterUSDC" />
60
+ </ThemeProvider>;
61
+ ```
62
+
39
63
  ## Props
40
64
 
41
65
  | Prop | Type | Required | Default | Description |
42
66
  | --- | --- | --- | --- | --- |
43
67
  | `name` | `baseQuickBuy \| blockchain \| bridging \| coinbaseOneLogo \| earn \| nft \| options \| pieChartWithArrow \| priceAlerts \| refresh \| securityShield \| staking \| addCard \| baseCreatorCoin \| bonusFivePercent \| bonusTwoPercent \| cardBlocked \| cardDeclined \| coinbaseOneEarn \| coinbaseUnlockOffers \| ethStaking \| ethStakingRewards \| futures \| globalTransactions \| idError \| inrTrade \| instoAuthenticatorProgress \| lightningNetworkSend \| outage \| pieChartWithArrowBlue \| startToday \| wrapEth \| phoneNumber \| accessToAdvancedCharts \| addPhoneNumber \| advancedTrading \| advancedTradingChartsIndicatorsCandles \| advancedTradingUi \| appTrackingTransparency \| automaticPayments \| backedByUsDollar \| basedInUsa \| bigBtc \| borrowWallet \| browserExtension \| coinbaseCardLock \| coinbaseCardPocket \| coinbaseFees \| coinbaseOneDiscountedAmount \| coinbaseOneRewards \| coinbaseOneSavingFunds \| coinbaseOneTokenRewards \| coinbaseOneZeroPortal \| coinFifty \| collectingNfts \| commerceAccounting \| commerceInvoices \| completeAQuiz \| congratulationsOnEarningCrypto \| contactsListWarning \| crossBorderPayments \| cryptoAndMore \| cryptoApps \| cryptoAssets \| cryptoEconomy \| cryptoForBeginners \| cryptoPortfolio \| cryptoWallet \| decentralization \| decentralizedWebWeb3 \| defiDecentralizedBorrowingLending \| defiDecentralizedTradingExchange \| defiEarn \| defiHow \| defiRisk \| didDecentralizedIdentity \| digitalCollectibles \| documentCertified \| documentSuccess \| earnInterest \| earnToLearn \| encryptedEverything \| estimatedAmount \| focusLimitOrders \| freeBtc \| gainsAndLosses \| gasFeesNetworkFees \| getStartedInMinutes \| hardwareWallets \| holdCrypto \| holdingCrypto \| instoEthStakingRewards \| instoPrimeStaking \| instoStaking \| insuranceProtection \| invest \| layeredNetworks \| layerThree \| linkingYourWalletToYourCoinbaseAccount \| mining \| moneyDecentralized \| multicoinSupport \| multiPlatformMobileAppBrowserExtension \| multipleAccountsWalletsForOneUser \| noFees \| notificationsAlt \| onTheList \| openEmail \| optInPushNotificationsEmail \| p2pPayments \| performance \| portfolioPerformance \| poweredByEthereum \| predictionsMarkets \| primeDeFi \| primeEarn \| primeStaking \| quickAndSimple \| readyToTrade \| retailUSDCRewards \| secureAndTrusted \| secureGlobalTransactions \| secureStorage \| selfCustody \| semiCustodial \| sendCryptoFaster \| shareOnSocialMedia \| sidechain \| stableValue \| stayInControlSelfHostedWalletsStorage \| stressTestedColdStorage \| switchAdvancedToSimpleTrading \| taxesDetails \| tradeImmediately \| trendingHotAssets \| verifyEmail \| verifyInfo \| walletNotifications \| walletSecurity \| watchVideos \| eth2SendSell \| ethStakeOrWrap \| ethStakeOrWrapTwo \| linkCoinbaseWallet \| addEth \| addMultipleCrypto \| addPasswordProtection \| announcementAdvancedTrading \| assetForward \| assetRefresh \| baseCautionMedium \| baseChartMedium \| baseCheckMedium \| baseCheckTrophyMedium \| baseCoinCryptoMedium \| baseCoinNetworkMedium \| baseConnectMedium \| baseDecentralizationMedium \| baseDiamondMedium \| baseEmptyMedium \| baseErrorButterflyMedium \| baseErrorMedium \| baseIdMedium \| baseLoadingMedium \| baseLocationMedium \| baseMintNftMedium \| baseNetworkMedium \| baseNftMedium \| basePaycoinMedium \| basePeopleMedium \| basePiechartMedium \| baseRewardChest \| baseRewardClam \| baseRewardPlate \| baseRewardPodium \| baseRewardSun \| baseRewardTrophyEmblem \| baseRewardTrophyStars \| baseSecurityMedium \| baseSendMedium \| baseSwitch \| baseTargetMedium \| baseUsdcMedium \| boostedCard \| borrowLimitsAddressed \| bullishCase \| cardAnnouncement \| cardAutoReload \| cardShipped \| cbEthWrappingUnavailable \| checkVerifacation \| coinbaseCardSparkle \| coinbaseLock \| coinbaseOneBoostedCard \| coinbaseOneBoostedCardCB1 \| coinbaseOneConcierge \| coinbaseOneStakeOrWrap \| coinbaseOneStaking \| coinbaseOneStarToken \| coinbaseOneUSDC \| coinbaseOneZero \| confirmAddress \| confirmEmail \| confirmIDCard \| confirmSocialSecurity \| cryptoEconomyArrows \| dappWallet \| darkModeIntroduction \| defiEarnAnnouncement \| defiNfts \| directDepositExcitement \| earnInterestOnCryptocurrency \| fileYourCryptoTaxesCheckOther \| fileYourCryptoTaxesOther \| frameEmpty \| giftBoxCrypto \| gifting \| goldSilverFutures \| guideBullCase \| guideCryptoBeginner \| guideFiveThings \| guideNftDefi \| guideStartInvesting \| instantUnstaking \| instoDappWallet \| instoEthStaking \| instoPixDeposits \| instoSecurityKey \| instoSideChainSide \| instoUbiKey \| instoWaiting \| interestForYou \| miniGift \| moneyRewards \| nftTag \| noPortfolio \| nuxChecklist \| nuxEarnCrypto \| nuxEarnYield \| nuxPopularAssets \| nuxRecurringBuys \| offersEmpty \| phoneNotifications \| pixBankDeposits \| pixDeposits \| recommendInvestments \| referralsPeople \| refreshMobileApp \| rewardExpiring \| saveTheDate \| sparkleToken \| starToken \| swapEth \| switchReward \| taxDocuments \| transferringCrypto \| unsupportedAsset \| waitlistSignup \| walletApp \| walletQuestsChest \| walletQuestsTrophy \| yieldCenter \| yieldCenterUSDC` | Yes | `-` | Name of illustration as defined in Figma |
68
+ | `applyTheme` | `boolean` | No | `-` | Apply the theme to the illustration |
44
69
  | `dimension` | `96x96` | No | `-` | HeroSquare Default: 240x240 SpotSquare Default: 96x96 Pictogram Default: 48x48 SpotRectangle Default: 240x120 |
45
70
  | `fallback` | `ReactElement<unknown, string \| JSXElementConstructor<any>> \| null` | No | `null` | Fallback element to render if unable to find an illustration with the matching name |
46
71
  | `scaleMultiplier` | `number` | No | `-` | Multiply the width & height while maintaining aspect ratio |
@@ -194,6 +194,7 @@ render(<Example />);
194
194
  | `tabs` | `TabbedChipProps<TabId>[]` | Yes | `-` | - |
195
195
  | `TabComponent` | `FC<TabbedChipProps<TabId>>` | No | `-` | - |
196
196
  | `TabsActiveIndicatorComponent` | `TabsActiveIndicatorComponent` | No | `-` | - |
197
+ | `activeColor` | `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 | `-` | Color when a tab is active. |
197
198
  | `alignContent` | `flex-start \| flex-end \| center \| stretch \| space-between \| space-around \| space-evenly` | No | `-` | - |
198
199
  | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
199
200
  | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
@@ -220,7 +221,7 @@ render(<Example />);
220
221
  | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
221
222
  | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
222
223
  | `bottom` | `null \| number \| AnimatedNode \| auto \| ${number}%` | No | `-` | - |
223
- | `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 | `-` | - |
224
+ | `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 | `-` | Color when a tab is inactive. |
224
225
  | `columnGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
225
226
  | `compact` | `boolean` | No | `false` | Turn on to use a compact Chip component for each tab. |
226
227
  | `dangerouslySetBackground` | `string` | No | `-` | - |
@@ -12,11 +12,11 @@ import { Tabs, DefaultTabsActiveIndicator } from '@coinbase/cds-mobile/tabs'
12
12
 
13
13
  ## Examples
14
14
 
15
- Tabs manages which tab is active and positions the animated indicator. For the common **underline** pattern, pass **`TabsActiveIndicatorComponent={DefaultTabsActiveIndicator}`** and rely on the default **`TabComponent` (`DefaultTab`)**. Use a custom **`TabComponent`** when you need layout or content beyond what `DefaultTab` provides. For **pill / segmented** controls, use [SegmentedTabs](/components/navigation/SegmentedTabs/) instead.
15
+ Tabs manages which tab is active and positions the animated indicator. For **pill / segmented** controls, use [SegmentedTabs](/components/navigation/SegmentedTabs/) instead.
16
16
 
17
17
  ### Basics
18
18
 
19
- Out of the box, **`Tabs`** uses **`DefaultTab`** for each row (headline text, optional [DotCount](/components/other/DotCount/) via `count` / `max` on each tab) and **`DefaultTabsActiveIndicator`** for the animated underline. **`activeBackground`** sets the **underline color** (it is forwarded to the indicator as its `background` token).
19
+ Out of the box, **`Tabs`** uses **`DefaultTab`** for each row (headline text, optional [DotCount](/components/other/DotCount/) via `count` / `max` on each tab) and **`DefaultTabsActiveIndicator`** for the animated underline. Set **`color`** / **`activeColor`** on **`Tabs`** for inactive / active label tokens, and **`activeBackground`** for the underline (forwarded to the indicator as its **`background`** token).
20
20
 
21
21
  ```jsx
22
22
  function Example() {
@@ -29,23 +29,15 @@ function Example() {
29
29
  return (
30
30
  <Tabs
31
31
  accessibilityLabel="Example tabs"
32
- activeBackground="bgPrimary"
33
32
  activeTab={activeTab}
34
- background="bg"
35
33
  gap={4}
36
34
  onChange={setActiveTab}
37
- // default value; can be omitted.
38
- TabComponent={DefaultTab}
39
35
  tabs={tabs}
40
- // default value; can be omitted.
41
- TabsActiveIndicatorComponent={DefaultTabsActiveIndicator}
42
36
  />
43
37
  );
44
38
  }
45
39
  ```
46
40
 
47
- You can omit `TabComponent` explicitly: **`Tabs`** defaults it to **`DefaultTab`**.
48
-
49
41
  #### No initial selection
50
42
 
51
43
  ```jsx
@@ -59,9 +51,7 @@ function Example() {
59
51
  return (
60
52
  <Tabs
61
53
  accessibilityLabel="Example tabs"
62
- activeBackground="bgPrimary"
63
54
  activeTab={activeTab}
64
- background="bg"
65
55
  gap={4}
66
56
  onChange={setActiveTab}
67
57
  tabs={tabs}
@@ -82,9 +72,7 @@ function Example() {
82
72
  return (
83
73
  <Tabs
84
74
  accessibilityLabel="Mail folders"
85
- activeBackground="bgPrimary"
86
75
  activeTab={activeTab}
87
- background="bg"
88
76
  gap={4}
89
77
  onChange={setActiveTab}
90
78
  tabs={tabs}
@@ -106,9 +94,40 @@ function Example() {
106
94
  return (
107
95
  <Tabs
108
96
  accessibilityLabel="Example tabs"
109
- activeBackground="bgPrimary"
110
97
  activeTab={activeTab}
111
- background="bg"
98
+ gap={4}
99
+ onChange={setActiveTab}
100
+ tabs={tabs}
101
+ />
102
+ );
103
+ }
104
+ ```
105
+
106
+ ### Accessibility
107
+
108
+ Set **`accessibilityLabel`** on **`Tabs`**. **`DefaultTab`** wires `accessibilityRole="tab"` and selection state; keep tab panels in sync in your screen content.
109
+
110
+ ### Styling
111
+
112
+ #### Colors
113
+
114
+ You can set **`color`** and **`activeColor`** for label tokens, and **`activeBackground`** for the underline.
115
+
116
+ ```jsx
117
+ function Example() {
118
+ const tabs = [
119
+ { id: 'tab1', label: 'Tab 1' },
120
+ { id: 'tab2', label: 'Tab 2' },
121
+ { id: 'tab3', label: 'Tab 3' },
122
+ ];
123
+ const [activeTab, setActiveTab] = useState(tabs[0]);
124
+ return (
125
+ <Tabs
126
+ accessibilityLabel="Example tabs"
127
+ activeBackground="fg"
128
+ activeColor="fg"
129
+ activeTab={activeTab}
130
+ color="fgMuted"
112
131
  gap={4}
113
132
  onChange={setActiveTab}
114
133
  tabs={tabs}
@@ -147,7 +166,7 @@ function Example() {
147
166
  }, []);
148
167
 
149
168
  const ActiveIndicator = useCallback(
150
- (props) => <TabsActiveIndicator {...props} background="bgPrimary" bottom={0} height={2} />,
169
+ (props) => <TabsActiveIndicator {...props} background="bgPositive" bottom={0} height={2} />,
151
170
  [],
152
171
  );
153
172
 
@@ -214,10 +233,6 @@ function Example() {
214
233
  }
215
234
  ```
216
235
 
217
- ### Accessibility
218
-
219
- Set **`accessibilityLabel`** on **`Tabs`**. **`DefaultTab`** wires `accessibilityRole="tab"` and selection state; keep tab panels in sync in your screen content.
220
-
221
236
  ## Props
222
237
 
223
238
  | Prop | Type | Required | Default | Description |
@@ -228,6 +243,7 @@ Set **`accessibilityLabel`** on **`Tabs`**. **`DefaultTab`** wires `accessibilit
228
243
  | `TabComponent` | `TabComponent<TabId, TTab>` | No | `-` | The default Component to render each tab. |
229
244
  | `TabsActiveIndicatorComponent` | `TabsActiveIndicatorComponent` | No | `-` | The default Component to render the tabs active indicator. |
230
245
  | `activeBackground` | `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 passed to the TabsActiveIndicatorComponent. |
246
+ | `activeColor` | `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 | `-` | Color when a tab is active. |
231
247
  | `alignContent` | `flex-start \| flex-end \| center \| stretch \| space-between \| space-around \| space-evenly` | No | `-` | - |
232
248
  | `alignItems` | `flex-start \| flex-end \| center \| stretch \| baseline` | No | `-` | - |
233
249
  | `alignSelf` | `auto \| FlexAlignType` | No | `-` | - |
@@ -253,7 +269,7 @@ Set **`accessibilityLabel`** on **`Tabs`**. **`DefaultTab`** wires `accessibilit
253
269
  | `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
254
270
  | `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
255
271
  | `bottom` | `null \| number \| AnimatedNode \| auto \| ${number}%` | No | `-` | - |
256
- | `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 | `-` | - |
272
+ | `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 | `-` | Color when a tab is inactive. |
257
273
  | `columnGap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `-` | - |
258
274
  | `dangerouslySetBackground` | `string` | No | `-` | - |
259
275
  | `disabled` | `boolean` | No | `-` | Disable interactions on all the tabs. |
@@ -716,6 +716,8 @@ function TextInputKeyboardExample() {
716
716
  | `keyboardAppearance` | `light \| default \| dark` | No | `-` | Determines the color of the keyboard. |
717
717
  | `keyboardType` | `default \| url \| number-pad \| decimal-pad \| numeric \| email-address \| phone-pad \| visible-password \| ascii-capable \| numbers-and-punctuation \| name-phone-pad \| twitter \| web-search` | No | `-` | enum(default, numeric, email-address, ascii-capable, numbers-and-punctuation, url, number-pad, phone-pad, name-phone-pad, decimal-pad, twitter, web-search, visible-password) Determines which keyboard to open, e.g.numeric. The following values work across platforms: - default - numeric - email-address - phone-pad The following values work on iOS: - ascii-capable - numbers-and-punctuation - url - number-pad - name-phone-pad - decimal-pad - twitter - web-search The following values work on Android: - visible-password |
718
718
  | `label` | `string` | No | `-` | Short messageArea indicating purpose of input |
719
+ | `labelColor` | `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 | `-` | Color token for the field label. |
720
+ | `labelFont` | `display1 \| display2 \| display3 \| title1 \| title2 \| title3 \| title4 \| headline \| body \| label1 \| label2 \| caption \| legal` | No | `-` | Typography token for the field label. |
719
721
  | `labelNode` | `null \| string \| number \| bigint \| false \| true \| ReactElement<unknown, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| Promise<AwaitedReactNode>` | No | `-` | React node to render label. Takes precedence over label. |
720
722
  | `labelVariant` | `inside \| outside` | No | `'outside'` | The variant of the label. Only used when compact is not true. |
721
723
  | `lineBreakModeIOS` | `middle \| wordWrapping \| char \| clip \| head \| tail` | No | `-` | Set line break mode on iOS. |
@@ -753,7 +755,7 @@ function TextInputKeyboardExample() {
753
755
  | `passwordRules` | `string \| null` | No | `-` | Provide rules for your password. For example, say you want to require a password with at least eight characters consisting of a mix of uppercase and lowercase letters, at least one number, and at most two consecutive characters. required: upper; required: lower; required: digit; max-consecutive: 2; minlength: 8; |
754
756
  | `placeholder` | `string` | No | `-` | Placeholder text displayed inside of the input. Will be replaced if there is a value. The string that will be rendered before text input has been entered |
755
757
  | `placeholderTextColor` | `string \| OpaqueColorValue` | No | `-` | The text color of the placeholder string |
756
- | `readOnly` | `boolean` | No | `-` | If true, text is not editable. The default value is false. |
758
+ | `readOnly` | `boolean` | No | `-` | When true, the value cannot be edited but the control may remain focusable (unlike disabled). If true, text is not editable. The default value is false. |
757
759
  | `ref` | `null \| RefObject<View \| null> \| (instance: View \| null) => void \| (() => VoidOrUndefinedOnly)` | No | `-` | Allows getting a ref to the component instance. Once the component unmounts, React will set ref.current to null (or call the ref with null if you passed a callback ref). |
758
760
  | `rejectResponderTermination` | `boolean \| null` | No | `-` | If true, allows TextInput to pass touch events to the parent component. This allows components to be swipeable from the TextInput on iOS, as is the case on Android by default. If false, TextInput always asks to handle the input (except when disabled). |
759
761
  | `returnKeyLabel` | `string` | No | `-` | Sets the return key to the label. Use it instead of returnKeyType. |
@@ -762,7 +764,6 @@ function TextInputKeyboardExample() {
762
764
  | `secureTextEntry` | `boolean` | No | `-` | If true, the text input obscures the text entered so that sensitive text like passwords stay secure. The default value is false. |
763
765
  | `selectTextOnFocus` | `boolean` | No | `-` | If true, all text will automatically be selected on focus |
764
766
  | `selection` | `{ start: number; end?: number; } \| undefined` | No | `-` | The start and end of the text inputs selection. Set start and end to the same value to position the cursor. |
765
- | `selectionColor` | `string \| OpaqueColorValue` | No | `-` | The highlight (and cursor on ios) color of the text input |
766
767
  | `selectionHandleColor` | `ColorValue \| null` | No | `-` | When provided it will set the color of the selection handles when highlighting text. Unlike the behavior of selectionColor the handle color will be set independently from the color of the text selection box. |
767
768
  | `selectionState` | `DocumentSelectionState` | No | `-` | See DocumentSelectionState.js, some state that is responsible for maintaining selection information for a document |
768
769
  | `showSoftInputOnFocus` | `boolean` | No | `-` | When false, it will prevent the soft keyboard from showing when the field is focused. The default value is true |
@@ -0,0 +1,9 @@
1
+ **📖 Live documentation:** https://cds.coinbase.com/guides/_v9MobileInstallCommands/
2
+
3
+ ```bash
4
+ # npm
5
+ npm install @coinbase/cds-common@9.0.0-rc.2 @coinbase/cds-mobile@9.0.0-rc.2
6
+
7
+ # yarn
8
+ yarn add @coinbase/cds-common@9.0.0-rc.2 @coinbase/cds-mobile@9.0.0-rc.2
9
+ ```
@@ -0,0 +1,15 @@
1
+ **📖 Live documentation:** https://cds.coinbase.com/guides/_v9MobilePeerDependencies/
2
+
3
+ <br />
4
+
5
+ | Package | Previous range | Required range |
6
+ | -------------------------------- | -------------- | -------------- |
7
+ | `react` | `^18.3.1` | `~19.1.2` |
8
+ | `react-native` | `^0.74.5` | `~0.81.5` |
9
+ | `lottie-react-native` | `^6.7.0` | `7.3.1` |
10
+ | `react-native-gesture-handler` | `^2.16.2` | `2.28.0` |
11
+ | `react-native-reanimated` | `^3.14.0` | `4.1.1` |
12
+ | `react-native-safe-area-context` | `^4.10.5` | `5.6.0` |
13
+ | `react-native-svg` | `^14.1.0` | `15.12.1` |
14
+ | `@shopify/react-native-skia` | - | `2.2.12` |
15
+ | `react-native-worklets` | - | `0.5.2` |
@@ -0,0 +1,9 @@
1
+ **📖 Live documentation:** https://cds.coinbase.com/guides/_v9WebInstallCommands/
2
+
3
+ ```bash
4
+ # npm
5
+ npm install @coinbase/cds-common@9.0.0-rc.2 @coinbase/cds-web@9.0.0-rc.2
6
+
7
+ # yarn
8
+ yarn add @coinbase/cds-common@9.0.0-rc.2 @coinbase/cds-web@9.0.0-rc.2
9
+ ```
@@ -0,0 +1,5 @@
1
+ **📖 Live documentation:** https://cds.coinbase.com/guides/_v9WebPeerDependencies/
2
+
3
+ <br />
4
+
5
+ No required peer dependency changes for web.