@relayprotocol/relay-kit-ui 10.0.0 → 11.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 (122) hide show
  1. package/_cjs/src/components/common/CustomAddressModal.js +18 -8
  2. package/_cjs/src/components/common/CustomAddressModal.js.map +1 -1
  3. package/_cjs/src/components/common/RefundReason.js +106 -3
  4. package/_cjs/src/components/common/RefundReason.js.map +1 -1
  5. package/_cjs/src/components/common/TokenSelector/PaymentMethod.js +9 -9
  6. package/_cjs/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  7. package/_cjs/src/components/common/TokenSelector/TokenSelector.js +8 -8
  8. package/_cjs/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  9. package/_cjs/src/components/primitives/ChainIcon.js +2 -1
  10. package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
  11. package/_cjs/src/components/primitives/ChainTokenIcon.js +6 -2
  12. package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
  13. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  14. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  15. package/_cjs/src/components/widgets/SwapWidgetRenderer.js +23 -42
  16. package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  17. package/_cjs/src/components/widgets/WidgetContainer.js +1 -1
  18. package/_cjs/src/components/widgets/WidgetContainer.js.map +1 -1
  19. package/_cjs/src/constants/events.js +2 -1
  20. package/_cjs/src/constants/events.js.map +1 -1
  21. package/_cjs/src/constants/walletCompatibility.js +3 -1
  22. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  23. package/_cjs/src/hooks/index.js +7 -3
  24. package/_cjs/src/hooks/index.js.map +1 -1
  25. package/_cjs/src/hooks/useCodexBalances.js +305 -0
  26. package/_cjs/src/hooks/useCodexBalances.js.map +1 -0
  27. package/_cjs/src/hooks/useCurrencyBalance.js +18 -74
  28. package/_cjs/src/hooks/useCurrencyBalance.js.map +1 -1
  29. package/_cjs/src/hooks/useEnhancedTokensList.js.map +1 -1
  30. package/_cjs/src/hooks/useKnownTokenContract.js +45 -0
  31. package/_cjs/src/hooks/useKnownTokenContract.js.map +1 -0
  32. package/_cjs/src/hooks/useMultiWalletBalances.js +19 -37
  33. package/_cjs/src/hooks/useMultiWalletBalances.js.map +1 -1
  34. package/_cjs/src/hooks/useSolanaBalance.js +60 -0
  35. package/_cjs/src/hooks/useSolanaBalance.js.map +1 -0
  36. package/_cjs/src/providers/RelayKitProvider.js +1 -1
  37. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  38. package/_cjs/src/version.js +1 -1
  39. package/_cjs/src/version.js.map +1 -1
  40. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  41. package/_esm/src/components/common/CustomAddressModal.js +24 -10
  42. package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
  43. package/_esm/src/components/common/RefundReason.js +107 -4
  44. package/_esm/src/components/common/RefundReason.js.map +1 -1
  45. package/_esm/src/components/common/TokenSelector/PaymentMethod.js +9 -9
  46. package/_esm/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  47. package/_esm/src/components/common/TokenSelector/TokenSelector.js +10 -10
  48. package/_esm/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  49. package/_esm/src/components/primitives/ChainIcon.js +3 -2
  50. package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
  51. package/_esm/src/components/primitives/ChainTokenIcon.js +6 -3
  52. package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
  53. package/_esm/src/components/widgets/OnrampWidget/widget/index.js +1 -1
  54. package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  55. package/_esm/src/components/widgets/SwapWidgetRenderer.js +28 -46
  56. package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  57. package/_esm/src/components/widgets/WidgetContainer.js +1 -1
  58. package/_esm/src/components/widgets/WidgetContainer.js.map +1 -1
  59. package/_esm/src/constants/events.js +2 -1
  60. package/_esm/src/constants/events.js.map +1 -1
  61. package/_esm/src/constants/walletCompatibility.js +3 -1
  62. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  63. package/_esm/src/hooks/index.js +4 -2
  64. package/_esm/src/hooks/index.js.map +1 -1
  65. package/_esm/src/hooks/useCodexBalances.js +311 -0
  66. package/_esm/src/hooks/useCodexBalances.js.map +1 -0
  67. package/_esm/src/hooks/useCurrencyBalance.js +18 -74
  68. package/_esm/src/hooks/useCurrencyBalance.js.map +1 -1
  69. package/_esm/src/hooks/useEnhancedTokensList.js.map +1 -1
  70. package/_esm/src/hooks/useKnownTokenContract.js +52 -0
  71. package/_esm/src/hooks/useKnownTokenContract.js.map +1 -0
  72. package/_esm/src/hooks/useMultiWalletBalances.js +18 -39
  73. package/_esm/src/hooks/useMultiWalletBalances.js.map +1 -1
  74. package/_esm/src/hooks/useSolanaBalance.js +58 -0
  75. package/_esm/src/hooks/useSolanaBalance.js.map +1 -0
  76. package/_esm/src/providers/RelayKitProvider.js +1 -1
  77. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  78. package/_esm/src/version.js +1 -1
  79. package/_esm/src/version.js.map +1 -1
  80. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  81. package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
  82. package/_types/src/components/common/RefundReason.d.ts.map +1 -1
  83. package/_types/src/components/common/TokenSelector/PaymentMethod.d.ts.map +1 -1
  84. package/_types/src/components/common/TokenSelector/TokenSelector.d.ts.map +1 -1
  85. package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
  86. package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
  87. package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
  88. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
  89. package/_types/src/components/widgets/WidgetContainer.d.ts.map +1 -1
  90. package/_types/src/constants/events.d.ts +1 -0
  91. package/_types/src/constants/events.d.ts.map +1 -1
  92. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  93. package/_types/src/hooks/index.d.ts +4 -2
  94. package/_types/src/hooks/index.d.ts.map +1 -1
  95. package/_types/src/hooks/useCodexBalances.d.ts +45 -0
  96. package/_types/src/hooks/useCodexBalances.d.ts.map +1 -0
  97. package/_types/src/hooks/useCurrencyBalance.d.ts +0 -1
  98. package/_types/src/hooks/useCurrencyBalance.d.ts.map +1 -1
  99. package/_types/src/hooks/useEnhancedTokensList.d.ts +1 -1
  100. package/_types/src/hooks/useEnhancedTokensList.d.ts.map +1 -1
  101. package/_types/src/hooks/useKnownTokenContract.d.ts +35 -0
  102. package/_types/src/hooks/useKnownTokenContract.d.ts.map +1 -0
  103. package/_types/src/hooks/useMultiWalletBalances.d.ts +3 -12
  104. package/_types/src/hooks/useMultiWalletBalances.d.ts.map +1 -1
  105. package/_types/src/hooks/{useEclipseBalance.d.ts → useSolanaBalance.d.ts} +2 -2
  106. package/_types/src/hooks/useSolanaBalance.d.ts.map +1 -0
  107. package/_types/src/providers/RelayKitProvider.d.ts +3 -3
  108. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  109. package/_types/src/version.d.ts +1 -1
  110. package/_types/tsconfig.build.tsbuildinfo +1 -1
  111. package/package.json +3 -3
  112. package/_cjs/src/hooks/useDuneBalances.js +0 -100
  113. package/_cjs/src/hooks/useDuneBalances.js.map +0 -1
  114. package/_cjs/src/hooks/useEclipseBalance.js +0 -47
  115. package/_cjs/src/hooks/useEclipseBalance.js.map +0 -1
  116. package/_esm/src/hooks/useDuneBalances.js +0 -102
  117. package/_esm/src/hooks/useDuneBalances.js.map +0 -1
  118. package/_esm/src/hooks/useEclipseBalance.js +0 -44
  119. package/_esm/src/hooks/useEclipseBalance.js.map +0 -1
  120. package/_types/src/hooks/useDuneBalances.d.ts +0 -25
  121. package/_types/src/hooks/useDuneBalances.d.ts.map +0 -1
  122. package/_types/src/hooks/useEclipseBalance.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChainTokenIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainTokenIcon.tsx"],"names":[],"mappings":";;;;;AACA,0EAAsC;AACtC,gEAA4B;AAC5B,6CAAsC;AActC,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;CACO,CAAA;AAEH,MAAM,cAAc,GAAwB,CAAC,EAClD,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,EACT,IAAI,GAAG,IAAI,EACX,WAAW,GAAG,CAAC,EACf,aAAa,EACd,EAAE,EAAE;IACH,MAAM,gBAAgB,GAAG,YAAY,IAAI,YAAY,KAAK,aAAa,CAAA;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,aAAa,IAAI,UAAU,CAAC,KAAK,CAAA;IAEnD,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,iCACE,SAAS,EAAE,IAAA,UAAE,EACX,qDAAqD,EACrD,SAAS,CACV,EACD,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,KAAK;YACxB,YAAY,EAAE,WAAW;SAC1B,aAEA,gBAAgB,CAAC,CAAC,CAAC,CAClB,gCACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,MAAM,EAAE,UAAU,CAAC,KAAK,EACxB,KAAK,EAAE;oBACL,YAAY,EAAE,IAAI;oBAClB,QAAQ,EAAE,QAAQ;iBACnB,GACD,CACH,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,gCACE,SAAS,EAAC,gKAAgK,EAC1K,KAAK,EAAE;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM,EAAE,UAAU,CAAC,KAAK;iBACzB,YAED,uBAAC,iBAAI,IAAC,KAAK,EAAC,IAAI,YAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAQ,GAC1D,CACP,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,sBAAS,IACR,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,WAAW,EACzB,SAAS,EAAC,uMAAuM,GACjN,IACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAA;AAxDY,QAAA,cAAc,kBAwD1B","sourcesContent":["import { type FC } from 'react'\nimport ChainIcon from './ChainIcon.js'\nimport Text from './Text.js'\nimport { cn } from '../../utils/cn.js'\n\ntype Size = 'sm' | 'base' | 'md' | 'lg'\n\ntype ChainTokenProps = {\n chainId?: number\n tokenlogoURI?: string\n tokenSymbol?: string\n className?: string\n size?: Size\n chainRadius?: number\n chainIconSize?: number\n}\n\nconst SIZES = {\n sm: {\n token: 20,\n chain: 12\n },\n base: {\n token: 24,\n chain: 10\n },\n md: {\n token: 32,\n chain: 16\n },\n lg: {\n token: 40,\n chain: 18\n }\n} as const\n\nexport const ChainTokenIcon: FC<ChainTokenProps> = ({\n chainId,\n tokenlogoURI,\n tokenSymbol,\n className,\n size = 'md',\n chainRadius = 4,\n chainIconSize\n}) => {\n const isValidTokenLogo = tokenlogoURI && tokenlogoURI !== 'missing.png'\n const dimensions = SIZES[size]\n const chainSize = chainIconSize ?? dimensions.chain\n\n return chainId ? (\n <div\n className={cn(\n 'relay:relative relay:shrink-0 relay:overflow-hidden',\n className\n )}\n style={{\n width: dimensions.token,\n height: dimensions.token,\n borderRadius: chainRadius\n }}\n >\n {isValidTokenLogo ? (\n <img\n alt={'Token'}\n src={tokenlogoURI}\n width={dimensions.token}\n height={dimensions.token}\n style={{\n borderRadius: 9999,\n overflow: 'hidden'\n }}\n />\n ) : tokenSymbol ? (\n <div\n className=\"relay:rounded-[50%] relay:bg-[var(--relay-colors-primary4)] relay:text-[color:var(--relay-colors-primary8)] relay:flex relay:items-center relay:justify-center\"\n style={{\n width: dimensions.token,\n height: dimensions.token\n }}\n >\n <Text style=\"h6\">{tokenSymbol?.charAt(0).toUpperCase()}</Text>\n </div>\n ) : null}\n <ChainIcon\n chainId={chainId}\n width={chainSize}\n height={chainSize}\n borderRadius={chainRadius}\n className=\"relay:absolute relay:right-0 relay:bottom-0 relay:overflow-hidden relay:border relay:border-solid relay:border-[var(--relay-colors-modal-background)] relay:bg-[var(--relay-colors-modal-background)]\"\n />\n </div>\n ) : null\n}\n"]}
1
+ {"version":3,"file":"ChainTokenIcon.js","sourceRoot":"","sources":["../../../../src/components/primitives/ChainTokenIcon.tsx"],"names":[],"mappings":";;;;;AAAA,iCAAyC;AACzC,0EAAsC;AACtC,gEAA4B;AAC5B,6CAAsC;AActC,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;IACD,EAAE,EAAE;QACF,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;CACO,CAAA;AAEH,MAAM,cAAc,GAAwB,CAAC,EAClD,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,EACT,IAAI,GAAG,IAAI,EACX,WAAW,GAAG,CAAC,EACf,aAAa,EACd,EAAE,EAAE;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IACjE,MAAM,gBAAgB,GACpB,YAAY;QACZ,YAAY,KAAK,aAAa;QAC9B,UAAU,KAAK,YAAY,CAAA;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,aAAa,IAAI,UAAU,CAAC,KAAK,CAAA;IAEnD,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,iCACE,SAAS,EAAE,IAAA,UAAE,EACX,qDAAqD,EACrD,SAAS,CACV,EACD,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,KAAK;YACxB,YAAY,EAAE,WAAW;SAC1B,aAEA,gBAAgB,CAAC,CAAC,CAAC,CAClB,gCACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,MAAM,EAAE,UAAU,CAAC,KAAK,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,EAClD,KAAK,EAAE;oBACL,YAAY,EAAE,IAAI;oBAClB,QAAQ,EAAE,QAAQ;iBACnB,GACD,CACH,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,gCACE,SAAS,EAAC,gKAAgK,EAC1K,KAAK,EAAE;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM,EAAE,UAAU,CAAC,KAAK;iBACzB,YAED,uBAAC,iBAAI,IAAC,KAAK,EAAC,IAAI,YAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAQ,GAC1D,CACP,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,sBAAS,IACR,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,WAAW,EACzB,SAAS,EAAC,uMAAuM,GACjN,IACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAA;AA7DY,QAAA,cAAc,kBA6D1B","sourcesContent":["import { type FC, useState } from 'react'\nimport ChainIcon from './ChainIcon.js'\nimport Text from './Text.js'\nimport { cn } from '../../utils/cn.js'\n\ntype Size = 'sm' | 'base' | 'md' | 'lg'\n\ntype ChainTokenProps = {\n chainId?: number\n tokenlogoURI?: string\n tokenSymbol?: string\n className?: string\n size?: Size\n chainRadius?: number\n chainIconSize?: number\n}\n\nconst SIZES = {\n sm: {\n token: 20,\n chain: 12\n },\n base: {\n token: 24,\n chain: 10\n },\n md: {\n token: 32,\n chain: 16\n },\n lg: {\n token: 40,\n chain: 18\n }\n} as const\n\nexport const ChainTokenIcon: FC<ChainTokenProps> = ({\n chainId,\n tokenlogoURI,\n tokenSymbol,\n className,\n size = 'md',\n chainRadius = 4,\n chainIconSize\n}) => {\n const [erroredSrc, setErroredSrc] = useState<string | null>(null)\n const isValidTokenLogo =\n tokenlogoURI &&\n tokenlogoURI !== 'missing.png' &&\n erroredSrc !== tokenlogoURI\n const dimensions = SIZES[size]\n const chainSize = chainIconSize ?? dimensions.chain\n\n return chainId ? (\n <div\n className={cn(\n 'relay:relative relay:shrink-0 relay:overflow-hidden',\n className\n )}\n style={{\n width: dimensions.token,\n height: dimensions.token,\n borderRadius: chainRadius\n }}\n >\n {isValidTokenLogo ? (\n <img\n alt={'Token'}\n src={tokenlogoURI}\n width={dimensions.token}\n height={dimensions.token}\n onError={() => setErroredSrc(tokenlogoURI ?? null)}\n style={{\n borderRadius: 9999,\n overflow: 'hidden'\n }}\n />\n ) : tokenSymbol ? (\n <div\n className=\"relay:rounded-[50%] relay:bg-[var(--relay-colors-primary4)] relay:text-[color:var(--relay-colors-primary8)] relay:flex relay:items-center relay:justify-center\"\n style={{\n width: dimensions.token,\n height: dimensions.token\n }}\n >\n <Text style=\"h6\">{tokenSymbol?.charAt(0).toUpperCase()}</Text>\n </div>\n ) : null}\n <ChainIcon\n chainId={chainId}\n width={chainSize}\n height={chainSize}\n borderRadius={chainRadius}\n className=\"relay:absolute relay:right-0 relay:bottom-0 relay:overflow-hidden relay:border relay:border-solid relay:border-[var(--relay-colors-modal-background)] relay:bg-[var(--relay-colors-modal-background)]\"\n />\n </div>\n ) : null\n}\n"]}
@@ -225,7 +225,7 @@ const OnrampWidget = ({ defaultWalletAddress, moonPayApiKey, moonpayOnUrlSignatu
225
225
  else {
226
226
  setOnrampModalOpen(true);
227
227
  }
228
- }, children: ctaCopy }), (0, jsx_runtime_1.jsx)(CustomAddressModal_js_1.CustomAddressModal, { open: addressModalOpen, toAddress: recipient, toChain: toChain, isConnected: (linkedWallets && linkedWallets.length > 0) || isConnected
228
+ }, children: ctaCopy }), (0, jsx_runtime_1.jsx)(CustomAddressModal_js_1.CustomAddressModal, { open: addressModalOpen, toToken: token, toAddress: recipient, toChain: toChain, isConnected: (linkedWallets && linkedWallets.length > 0) || isConnected
229
229
  ? true
230
230
  : false, linkedWallets: linkedWallets ?? [], multiWalletSupportEnabled: multiWalletSupportEnabled, onAnalyticEvent: onAnalyticEvent, onOpenChange: (open) => {
231
231
  setAddressModalOpen(open);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/widgets/OnrampWidget/widget/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { FC } from 'react'\nimport OnrampWidgetRenderer from './OnrampWidgetRenderer.js'\nimport { Box, Button, Flex, Text } from '../../../primitives/index.js'\nimport AmountInput from '../../../common/AmountInput.js'\nimport { useCallback, useContext, useEffect, useState } from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowDownLong } from '@fortawesome/free-solid-svg-icons/faArrowDownLong'\nimport { faArrowUpLong } from '@fortawesome/free-solid-svg-icons/faArrowUpLong'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCreditCard } from '@fortawesome/free-solid-svg-icons/faCreditCard'\nimport TokenSelector from '../../../common/TokenSelector/TokenSelector.js'\nimport { EventNames } from '../../../../constants/events.js'\nimport { TokenTrigger } from '../../../common/TokenSelector/triggers/TokenTrigger.js'\nimport type { LinkedWallet, Token } from '../../../../types/index.js'\nimport type { ChainVM, Execute, RelayChain } from '@relayprotocol/relay-sdk'\nimport { MultiWalletDropdown } from '../../../common/MultiWalletDropdown.js'\nimport { CustomAddressModal } from '../../../common/CustomAddressModal.js'\nimport { useAccount } from 'wagmi'\nimport { OnrampModal } from '../modals/OnrampModal.js'\nimport { formatBN } from '../../../../utils/numbers.js'\nimport { findSupportedWallet } from '../../../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../../../providers/RelayKitProvider.js'\n\ntype BaseOnrampWidgetProps = {\n defaultWalletAddress?: string\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n moonPayApiKey: string\n moonPayThemeId?: string\n moonPayThemeMode?: 'dark' | 'light'\n token?: Token\n setToken?: (token: Token) => void\n disablePasteWalletAddressOption?: boolean\n onTokenChange?: (token?: Token) => void\n onSuccess?: (data: Execute, moonpayRequestId: string) => void\n onError?: (error: string, data?: Execute, moonpayRequestId?: string) => void\n moonpayOnUrlSignatureRequested: (url: string) => Promise<string> | void\n onConnectWallet?: () => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n}\n\ntype MultiWalletDisabledProps = BaseOnrampWidgetProps & {\n multiWalletSupportEnabled?: false\n linkedWallets?: never\n onSetPrimaryWallet?: never\n onLinkNewWallet?: never\n}\n\ntype MultiWalletEnabledProps = BaseOnrampWidgetProps & {\n multiWalletSupportEnabled: true\n linkedWallets: LinkedWallet[]\n onSetPrimaryWallet?: (address: string) => void\n onLinkNewWallet: (params: {\n chain?: RelayChain\n direction: 'to' | 'from'\n }) => Promise<LinkedWallet> | void\n}\n\nexport type OnrampWidgetProps =\n | MultiWalletDisabledProps\n | MultiWalletEnabledProps\n\nconst OnrampWidget: FC<OnrampWidgetProps> = ({\n defaultWalletAddress,\n moonPayApiKey,\n moonpayOnUrlSignatureRequested,\n linkedWallets,\n multiWalletSupportEnabled,\n supportedWalletVMs,\n moonPayThemeId,\n moonPayThemeMode,\n token,\n setToken,\n disablePasteWalletAddressOption,\n onTokenChange,\n onConnectWallet,\n onLinkNewWallet,\n onSetPrimaryWallet,\n onAnalyticEvent: _onAnalyticEvent,\n onSuccess\n}) => {\n const onAnalyticEvent = useCallback(\n (eventName: string, data?: any) => {\n try {\n _onAnalyticEvent?.(eventName, data)\n } catch (e) {\n console.error('Error in onAnalyticEvent', eventName, data, e)\n }\n },\n [_onAnalyticEvent]\n )\n const [addressModalOpen, setAddressModalOpen] = useState(false)\n const [onrampModalOpen, setOnrampModalOpen] = useState(false)\n const { isConnected } = useAccount()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const haptic = useHapticEvent()\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n return (\n <OnrampWidgetRenderer\n defaultWalletAddress={defaultWalletAddress}\n supportedWalletVMs={supportedWalletVMs}\n linkedWallets={linkedWallets}\n multiWalletSupportEnabled={multiWalletSupportEnabled}\n moonPayApiKey={moonPayApiKey}\n token={token}\n setToken={setToken}\n >\n {({\n displayCurrency,\n setDisplayCurrency,\n recipient,\n setRecipient,\n isRecipientLinked,\n isValidRecipient,\n amount,\n amountToToken,\n setInputValue,\n amountToTokenFormatted,\n token,\n fromToken,\n setToken,\n toChain,\n fromChain,\n toDisplayName,\n toChainWalletVMSupported,\n fiatCurrency,\n setFiatCurrency,\n minAmountCurrency,\n notEnoughFiat,\n ctaCopy,\n moonPayCurrencyCode,\n isPassthrough,\n usdRate\n }) => {\n //Reset recipient if no longer valid\n useEffect(() => {\n if (\n multiWalletSupportEnabled &&\n fromChain &&\n recipient &&\n linkedWallets &&\n !isValidRecipient\n ) {\n const supportedAddress = findSupportedWallet(\n fromChain,\n recipient,\n linkedWallets,\n connectorKeyOverrides\n )\n if (supportedAddress) {\n onSetPrimaryWallet?.(supportedAddress)\n }\n }\n\n if (\n multiWalletSupportEnabled &&\n toChain &&\n recipient &&\n linkedWallets &&\n !isValidRecipient\n ) {\n setRecipient(undefined)\n }\n }, [\n multiWalletSupportEnabled,\n fromChain?.id,\n toChain?.id,\n linkedWallets,\n onSetPrimaryWallet,\n isValidRecipient,\n connectorKeyOverrides\n ])\n\n const formattedAmount =\n amount === ''\n ? ''\n : amount.endsWith('.')\n ? new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: 'narrowSymbol',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(+amount) + '.'\n : new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: 'narrowSymbol',\n minimumFractionDigits: amount.includes('.0')\n ? 1\n : amount.endsWith('0') && amount.includes('.')\n ? 2\n : 0,\n maximumFractionDigits: amount.includes('.') ? 2 : 0,\n minimumSignificantDigits: 1,\n maximumSignificantDigits: amount.length\n }).format(+amount)\n\n return (\n <div\n className=\"relay-kit-reset relay:max-w-[408px] relay:min-w-[320px] relay:w-full\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:gap-2 relay:w-full relay:border-widget\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:overflow-hidden relay:px-4 relay:pt-[40px] relay:pb-[24px] relay:rounded-widget-card relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <Text\n style=\"subtitle2\"\n color=\"subtle\"\n className=\"relay:text-center\"\n >\n Enter an amount\n </Text>\n <AmountInput\n value={\n displayCurrency\n ? amountToToken !== ''\n ? `${amountToToken} ${token.symbol}`\n : ''\n : formattedAmount\n }\n setValue={(e) => {\n //unused\n }}\n placeholder={` 0`}\n onChange={(e) => {\n const input = e.target as any\n\n setInputValue(input.value)\n if (displayCurrency) {\n setTimeout(() => {\n const numericValue = input.value.match(/[\\d.]+/g)\n const numericValueLength =\n numericValue !== null\n ? numericValue.join('').length\n : 0\n input.setSelectionRange(\n numericValueLength,\n numericValueLength\n )\n }, 0)\n }\n }}\n onKeyDown={(e) => {\n const input = e.target as HTMLInputElement\n const cursorPosition = input.selectionStart\n\n // Prevent multiple decimals\n if (\n e.key === '.' &&\n (input.value.match(/\\./g) || []).length > 0\n ) {\n e.preventDefault() // Prevent the key press if there's already a decimal\n return\n }\n\n if (e.key === 'ArrowLeft' && cursorPosition !== null) {\n const valueBeforeCursor = input.value.substring(\n 0,\n cursorPosition\n )\n const charBeforeCursor = valueBeforeCursor.charAt(\n cursorPosition - 1\n )\n if (charBeforeCursor === '$') {\n e.preventDefault()\n }\n }\n if (e.key === 'ArrowRight' && cursorPosition !== null) {\n const valueAfterCursor = input.value.substring(\n 0,\n cursorPosition + 1\n )\n const charAfterCursor =\n valueAfterCursor.charAt(cursorPosition)\n if (charAfterCursor === ' ') {\n e.preventDefault()\n }\n }\n }}\n onMouseDown={(e) => {\n const input = e.target as HTMLInputElement\n input.style.caretColor = 'transparent'\n }}\n onMouseUp={(e) => {\n const input = e.target as HTMLInputElement\n const cursorPosition = input.selectionStart // Get the current cursor position\n if (cursorPosition !== null) {\n const valueAfterCursor = input.value.substring(\n 0,\n cursorPosition + 1\n )\n const charAfterCursor =\n valueAfterCursor.charAt(cursorPosition)\n const valueBeforeCursor = input.value.substring(\n 0,\n cursorPosition\n )\n const charBeforeCursor = valueBeforeCursor.charAt(\n cursorPosition - 1\n )\n const specialCharacterRegex = /[ a-zA-Z]/\n const alphaRegex = /[a-zA-Z]/\n if (\n charAfterCursor === '$' ||\n alphaRegex.test(charAfterCursor) ||\n specialCharacterRegex.test(charBeforeCursor)\n ) {\n e.preventDefault()\n e.stopPropagation()\n input.setSelectionRange(1, 1)\n }\n }\n input.style.caretColor = 'initial'\n }}\n className=\"relay:text-center relay:whitespace-pre\"\n inputStyle={{\n fontWeight: '700',\n fontSize: 48,\n lineHeight: '58px',\n textAlign: 'center',\n textIndent:\n amount === '' || amountToToken === ''\n ? '-36px'\n : undefined,\n whiteSpace: 'pre'\n }}\n containerClassName=\"relay:mb-2 relay:w-full\"\n />\n {notEnoughFiat ? (\n <Text color=\"red\" className=\"relay:mb-[24px] relay:text-center\">\n Minimum amount is{' '}\n {displayCurrency && minAmountCurrency\n ? `${minAmountCurrency} ${token.symbol}`\n : '$20'}\n </Text>\n ) : undefined}\n <button\n className=\"relay:gap-2 relay:cursor-pointer relay:flex relay:items-center relay:justify-center relay:mb-[16px] relay:self-center\"\n onClick={() => {\n const _displayCurrency = !displayCurrency\n setDisplayCurrency(_displayCurrency)\n if (_displayCurrency) {\n let _amountToToken = 21 / usdRate\n if (+amountToToken > _amountToToken) {\n _amountToToken = +amountToToken\n }\n setInputValue(\n formatBN(_amountToToken, 5, token.decimals, false),\n _displayCurrency\n )\n }\n }}\n >\n <Text style=\"body2\" color=\"subtle\">\n {displayCurrency\n ? formattedAmount\n : `${amountToTokenFormatted} ${token.symbol}`}\n </Text>\n <Flex\n className=\"relay:text-[color:var(--relay-colors-gray8)]\"\n >\n <FontAwesomeIcon\n className=\"relay:h-[14px]\"\n icon={faArrowUpLong}\n />\n <FontAwesomeIcon\n className=\"relay:h-[14px]\"\n icon={faArrowDownLong}\n />\n </Flex>\n </button>\n <TokenSelector\n address={recipient}\n isValidAddress={isValidRecipient}\n token={token}\n onAnalyticEvent={onAnalyticEvent}\n fromChainWalletVMSupported={false}\n supportedWalletVMs={[]}\n setToken={(token) => {\n setToken(token)\n onTokenChange?.(token)\n }}\n context=\"to\"\n trigger={\n <div\n className=\"relay:w-max relay:mx-auto relay:mb-[16px]\"\n data-testid=\"onramp-token-select-button\"\n >\n <TokenTrigger token={token} />\n </div>\n }\n />\n <Flex className=\"relay:gap-2 relay:mx-auto\">\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('100', false)\n }}\n >\n <Text style=\"subtitle2\">$100</Text>\n </Button>\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('300', false)\n }}\n >\n <Text style=\"subtitle2\">$300</Text>\n </Button>\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('1000', false)\n }}\n >\n <Text style=\"subtitle2\">$1,000</Text>\n </Button>\n </Flex>\n </Flex>\n </Flex>\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:overflow-hidden relay:p-4 relay:rounded-widget-card relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <Flex justify=\"between\" align=\"center\" className=\"relay:mb-2\">\n <Text color=\"subtle\" style=\"subtitle2\">\n Recipient\n </Text>\n {multiWalletSupportEnabled === true &&\n toChainWalletVMSupported ? (\n <MultiWalletDropdown\n context=\"destination\"\n selectedWalletAddress={recipient}\n onSelect={(wallet) => setRecipient(wallet.address)}\n chain={toChain}\n onLinkNewWallet={() => {\n if (\n (!linkedWallets || linkedWallets.length === 0) &&\n toChainWalletVMSupported\n ) {\n onConnectWallet?.()\n } else {\n onLinkNewWallet?.({\n chain: toChain,\n direction: 'to'\n })?.then((wallet) => {\n onSetPrimaryWallet?.(wallet.address)\n })\n }\n }}\n setAddressModalOpen={setAddressModalOpen}\n wallets={linkedWallets!}\n onAnalyticEvent={onAnalyticEvent}\n disablePasteWalletAddressOption={\n disablePasteWalletAddressOption\n }\n testId=\"onramp-wallet-select-button\"\n />\n ) : null}\n {!multiWalletSupportEnabled || !toChainWalletVMSupported ? (\n <Button\n color={\n isValidRecipient && !isRecipientLinked\n ? 'warning'\n : 'secondary'\n }\n corners=\"pill\"\n size=\"none\"\n className=\"relay:flex relay:items-center relay:px-2 relay:py-1\"\n onClick={() => {\n setAddressModalOpen(true)\n onAnalyticEvent?.(EventNames.SWAP_ADDRESS_MODAL_CLICKED)\n }}\n >\n {isValidRecipient && !isRecipientLinked ? (\n <Box className=\"relay:text-[color:var(--relay-colors-amber11)]\">\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n />\n </Box>\n ) : null}\n <Text\n style=\"subtitle2\"\n className={\n isValidRecipient && !isRecipientLinked\n ? 'relay:text-[color:var(--relay-colors-amber11)]'\n : 'relay:text-[color:var(--relay-colors-anchor-color)]'\n }\n >\n {!isValidRecipient ? `Enter Address` : toDisplayName}\n </Text>\n </Button>\n ) : null}\n </Flex>\n <Flex justify=\"between\" align=\"center\">\n <Text color=\"subtle\" style=\"subtitle2\">\n Paying with\n </Text>\n <Flex\n className=\"relay:items-center relay:gap-2 relay:ml-auto relay:mr-2 relay:text-[color:var(--relay-colors-gray9)]\"\n >\n <FontAwesomeIcon style={{ width: 16 }} icon={faCreditCard} />\n <Text style=\"subtitle2\">Card</Text>\n </Flex>\n {/* Hiding this until issues are resolved with MoonPay\n <FiatCurrencyModal\n fiatCurrency={fiatCurrency}\n setFiatCurrency={setFiatCurrency}\n moonPayApiKey={moonPayApiKey}\n /> */}\n </Flex>\n </Flex>\n <Button\n cta={true}\n className=\"relay:w-full relay:justify-center\"\n disabled={notEnoughFiat}\n onClick={() => {\n haptic('medium')\n if (!recipient && toChainWalletVMSupported) {\n if (!linkedWallets || linkedWallets.length === 0) {\n onConnectWallet?.()\n } else {\n onLinkNewWallet?.({\n chain: toChain,\n direction: 'to'\n })?.then((wallet) => {\n onSetPrimaryWallet?.(wallet.address)\n })\n }\n } else if (!recipient) {\n setAddressModalOpen(true)\n } else {\n setOnrampModalOpen(true)\n }\n }}\n >\n {ctaCopy}\n </Button>\n <CustomAddressModal\n open={addressModalOpen}\n toAddress={recipient}\n toChain={toChain}\n isConnected={\n (linkedWallets && linkedWallets.length > 0) || isConnected\n ? true\n : false\n }\n linkedWallets={linkedWallets ?? []}\n multiWalletSupportEnabled={multiWalletSupportEnabled}\n onAnalyticEvent={onAnalyticEvent}\n onOpenChange={(open) => {\n setAddressModalOpen(open)\n }}\n onConfirmed={(address) => {\n setRecipient(address)\n }}\n onClear={() => {\n setRecipient(undefined)\n }}\n />\n <OnrampModal\n open={onrampModalOpen}\n onOpenChange={setOnrampModalOpen}\n onAnalyticEvent={onAnalyticEvent}\n moonpayOnUrlSignatureRequested={moonpayOnUrlSignatureRequested}\n fromToken={fromToken}\n toToken={token}\n fromChain={fromChain}\n toChain={toChain}\n amount={amount}\n amountFormatted={formattedAmount}\n amountToTokenFormatted={amountToTokenFormatted}\n fiatCurrency={fiatCurrency}\n recipient={recipient}\n onSuccess={onSuccess}\n moonPayCurrencyCode={moonPayCurrencyCode}\n isPassthrough={isPassthrough}\n usdRate={usdRate}\n moonPayThemeId={moonPayThemeId}\n moonPayThemeMode={moonPayThemeMode}\n moonPayApiKey={moonPayApiKey}\n />\n </div>\n )\n }}\n </OnrampWidgetRenderer>\n )\n}\n\nexport default OnrampWidget\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/widgets/OnrampWidget/widget/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { FC } from 'react'\nimport OnrampWidgetRenderer from './OnrampWidgetRenderer.js'\nimport { Box, Button, Flex, Text } from '../../../primitives/index.js'\nimport AmountInput from '../../../common/AmountInput.js'\nimport { useCallback, useContext, useEffect, useState } from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowDownLong } from '@fortawesome/free-solid-svg-icons/faArrowDownLong'\nimport { faArrowUpLong } from '@fortawesome/free-solid-svg-icons/faArrowUpLong'\nimport { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard'\nimport { faCreditCard } from '@fortawesome/free-solid-svg-icons/faCreditCard'\nimport TokenSelector from '../../../common/TokenSelector/TokenSelector.js'\nimport { EventNames } from '../../../../constants/events.js'\nimport { TokenTrigger } from '../../../common/TokenSelector/triggers/TokenTrigger.js'\nimport type { LinkedWallet, Token } from '../../../../types/index.js'\nimport type { ChainVM, Execute, RelayChain } from '@relayprotocol/relay-sdk'\nimport { MultiWalletDropdown } from '../../../common/MultiWalletDropdown.js'\nimport { CustomAddressModal } from '../../../common/CustomAddressModal.js'\nimport { useAccount } from 'wagmi'\nimport { OnrampModal } from '../modals/OnrampModal.js'\nimport { formatBN } from '../../../../utils/numbers.js'\nimport { findSupportedWallet } from '../../../../utils/address.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../../../providers/RelayKitProvider.js'\n\ntype BaseOnrampWidgetProps = {\n defaultWalletAddress?: string\n supportedWalletVMs: Omit<ChainVM, 'hypevm' | 'lvm'>[]\n moonPayApiKey: string\n moonPayThemeId?: string\n moonPayThemeMode?: 'dark' | 'light'\n token?: Token\n setToken?: (token: Token) => void\n disablePasteWalletAddressOption?: boolean\n onTokenChange?: (token?: Token) => void\n onSuccess?: (data: Execute, moonpayRequestId: string) => void\n onError?: (error: string, data?: Execute, moonpayRequestId?: string) => void\n moonpayOnUrlSignatureRequested: (url: string) => Promise<string> | void\n onConnectWallet?: () => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n}\n\ntype MultiWalletDisabledProps = BaseOnrampWidgetProps & {\n multiWalletSupportEnabled?: false\n linkedWallets?: never\n onSetPrimaryWallet?: never\n onLinkNewWallet?: never\n}\n\ntype MultiWalletEnabledProps = BaseOnrampWidgetProps & {\n multiWalletSupportEnabled: true\n linkedWallets: LinkedWallet[]\n onSetPrimaryWallet?: (address: string) => void\n onLinkNewWallet: (params: {\n chain?: RelayChain\n direction: 'to' | 'from'\n }) => Promise<LinkedWallet> | void\n}\n\nexport type OnrampWidgetProps =\n | MultiWalletDisabledProps\n | MultiWalletEnabledProps\n\nconst OnrampWidget: FC<OnrampWidgetProps> = ({\n defaultWalletAddress,\n moonPayApiKey,\n moonpayOnUrlSignatureRequested,\n linkedWallets,\n multiWalletSupportEnabled,\n supportedWalletVMs,\n moonPayThemeId,\n moonPayThemeMode,\n token,\n setToken,\n disablePasteWalletAddressOption,\n onTokenChange,\n onConnectWallet,\n onLinkNewWallet,\n onSetPrimaryWallet,\n onAnalyticEvent: _onAnalyticEvent,\n onSuccess\n}) => {\n const onAnalyticEvent = useCallback(\n (eventName: string, data?: any) => {\n try {\n _onAnalyticEvent?.(eventName, data)\n } catch (e) {\n console.error('Error in onAnalyticEvent', eventName, data, e)\n }\n },\n [_onAnalyticEvent]\n )\n const [addressModalOpen, setAddressModalOpen] = useState(false)\n const [onrampModalOpen, setOnrampModalOpen] = useState(false)\n const { isConnected } = useAccount()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const haptic = useHapticEvent()\n const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides\n\n return (\n <OnrampWidgetRenderer\n defaultWalletAddress={defaultWalletAddress}\n supportedWalletVMs={supportedWalletVMs}\n linkedWallets={linkedWallets}\n multiWalletSupportEnabled={multiWalletSupportEnabled}\n moonPayApiKey={moonPayApiKey}\n token={token}\n setToken={setToken}\n >\n {({\n displayCurrency,\n setDisplayCurrency,\n recipient,\n setRecipient,\n isRecipientLinked,\n isValidRecipient,\n amount,\n amountToToken,\n setInputValue,\n amountToTokenFormatted,\n token,\n fromToken,\n setToken,\n toChain,\n fromChain,\n toDisplayName,\n toChainWalletVMSupported,\n fiatCurrency,\n setFiatCurrency,\n minAmountCurrency,\n notEnoughFiat,\n ctaCopy,\n moonPayCurrencyCode,\n isPassthrough,\n usdRate\n }) => {\n //Reset recipient if no longer valid\n useEffect(() => {\n if (\n multiWalletSupportEnabled &&\n fromChain &&\n recipient &&\n linkedWallets &&\n !isValidRecipient\n ) {\n const supportedAddress = findSupportedWallet(\n fromChain,\n recipient,\n linkedWallets,\n connectorKeyOverrides\n )\n if (supportedAddress) {\n onSetPrimaryWallet?.(supportedAddress)\n }\n }\n\n if (\n multiWalletSupportEnabled &&\n toChain &&\n recipient &&\n linkedWallets &&\n !isValidRecipient\n ) {\n setRecipient(undefined)\n }\n }, [\n multiWalletSupportEnabled,\n fromChain?.id,\n toChain?.id,\n linkedWallets,\n onSetPrimaryWallet,\n isValidRecipient,\n connectorKeyOverrides\n ])\n\n const formattedAmount =\n amount === ''\n ? ''\n : amount.endsWith('.')\n ? new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: 'narrowSymbol',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(+amount) + '.'\n : new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: 'narrowSymbol',\n minimumFractionDigits: amount.includes('.0')\n ? 1\n : amount.endsWith('0') && amount.includes('.')\n ? 2\n : 0,\n maximumFractionDigits: amount.includes('.') ? 2 : 0,\n minimumSignificantDigits: 1,\n maximumSignificantDigits: amount.length\n }).format(+amount)\n\n return (\n <div\n className=\"relay-kit-reset relay:max-w-[408px] relay:min-w-[320px] relay:w-full\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:gap-2 relay:w-full relay:border-widget\"\n >\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:overflow-hidden relay:px-4 relay:pt-[40px] relay:pb-[24px] relay:rounded-widget-card relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <Text\n style=\"subtitle2\"\n color=\"subtle\"\n className=\"relay:text-center\"\n >\n Enter an amount\n </Text>\n <AmountInput\n value={\n displayCurrency\n ? amountToToken !== ''\n ? `${amountToToken} ${token.symbol}`\n : ''\n : formattedAmount\n }\n setValue={(e) => {\n //unused\n }}\n placeholder={` 0`}\n onChange={(e) => {\n const input = e.target as any\n\n setInputValue(input.value)\n if (displayCurrency) {\n setTimeout(() => {\n const numericValue = input.value.match(/[\\d.]+/g)\n const numericValueLength =\n numericValue !== null\n ? numericValue.join('').length\n : 0\n input.setSelectionRange(\n numericValueLength,\n numericValueLength\n )\n }, 0)\n }\n }}\n onKeyDown={(e) => {\n const input = e.target as HTMLInputElement\n const cursorPosition = input.selectionStart\n\n // Prevent multiple decimals\n if (\n e.key === '.' &&\n (input.value.match(/\\./g) || []).length > 0\n ) {\n e.preventDefault() // Prevent the key press if there's already a decimal\n return\n }\n\n if (e.key === 'ArrowLeft' && cursorPosition !== null) {\n const valueBeforeCursor = input.value.substring(\n 0,\n cursorPosition\n )\n const charBeforeCursor = valueBeforeCursor.charAt(\n cursorPosition - 1\n )\n if (charBeforeCursor === '$') {\n e.preventDefault()\n }\n }\n if (e.key === 'ArrowRight' && cursorPosition !== null) {\n const valueAfterCursor = input.value.substring(\n 0,\n cursorPosition + 1\n )\n const charAfterCursor =\n valueAfterCursor.charAt(cursorPosition)\n if (charAfterCursor === ' ') {\n e.preventDefault()\n }\n }\n }}\n onMouseDown={(e) => {\n const input = e.target as HTMLInputElement\n input.style.caretColor = 'transparent'\n }}\n onMouseUp={(e) => {\n const input = e.target as HTMLInputElement\n const cursorPosition = input.selectionStart // Get the current cursor position\n if (cursorPosition !== null) {\n const valueAfterCursor = input.value.substring(\n 0,\n cursorPosition + 1\n )\n const charAfterCursor =\n valueAfterCursor.charAt(cursorPosition)\n const valueBeforeCursor = input.value.substring(\n 0,\n cursorPosition\n )\n const charBeforeCursor = valueBeforeCursor.charAt(\n cursorPosition - 1\n )\n const specialCharacterRegex = /[ a-zA-Z]/\n const alphaRegex = /[a-zA-Z]/\n if (\n charAfterCursor === '$' ||\n alphaRegex.test(charAfterCursor) ||\n specialCharacterRegex.test(charBeforeCursor)\n ) {\n e.preventDefault()\n e.stopPropagation()\n input.setSelectionRange(1, 1)\n }\n }\n input.style.caretColor = 'initial'\n }}\n className=\"relay:text-center relay:whitespace-pre\"\n inputStyle={{\n fontWeight: '700',\n fontSize: 48,\n lineHeight: '58px',\n textAlign: 'center',\n textIndent:\n amount === '' || amountToToken === ''\n ? '-36px'\n : undefined,\n whiteSpace: 'pre'\n }}\n containerClassName=\"relay:mb-2 relay:w-full\"\n />\n {notEnoughFiat ? (\n <Text color=\"red\" className=\"relay:mb-[24px] relay:text-center\">\n Minimum amount is{' '}\n {displayCurrency && minAmountCurrency\n ? `${minAmountCurrency} ${token.symbol}`\n : '$20'}\n </Text>\n ) : undefined}\n <button\n className=\"relay:gap-2 relay:cursor-pointer relay:flex relay:items-center relay:justify-center relay:mb-[16px] relay:self-center\"\n onClick={() => {\n const _displayCurrency = !displayCurrency\n setDisplayCurrency(_displayCurrency)\n if (_displayCurrency) {\n let _amountToToken = 21 / usdRate\n if (+amountToToken > _amountToToken) {\n _amountToToken = +amountToToken\n }\n setInputValue(\n formatBN(_amountToToken, 5, token.decimals, false),\n _displayCurrency\n )\n }\n }}\n >\n <Text style=\"body2\" color=\"subtle\">\n {displayCurrency\n ? formattedAmount\n : `${amountToTokenFormatted} ${token.symbol}`}\n </Text>\n <Flex\n className=\"relay:text-[color:var(--relay-colors-gray8)]\"\n >\n <FontAwesomeIcon\n className=\"relay:h-[14px]\"\n icon={faArrowUpLong}\n />\n <FontAwesomeIcon\n className=\"relay:h-[14px]\"\n icon={faArrowDownLong}\n />\n </Flex>\n </button>\n <TokenSelector\n address={recipient}\n isValidAddress={isValidRecipient}\n token={token}\n onAnalyticEvent={onAnalyticEvent}\n fromChainWalletVMSupported={false}\n supportedWalletVMs={[]}\n setToken={(token) => {\n setToken(token)\n onTokenChange?.(token)\n }}\n context=\"to\"\n trigger={\n <div\n className=\"relay:w-max relay:mx-auto relay:mb-[16px]\"\n data-testid=\"onramp-token-select-button\"\n >\n <TokenTrigger token={token} />\n </div>\n }\n />\n <Flex className=\"relay:gap-2 relay:mx-auto\">\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('100', false)\n }}\n >\n <Text style=\"subtitle2\">$100</Text>\n </Button>\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('300', false)\n }}\n >\n <Text style=\"subtitle2\">$300</Text>\n </Button>\n <Button\n color=\"white\"\n corners=\"pill\"\n size=\"none\"\n className=\"relay:h-[30px] relay:px-[14px] relay:py-[4px] relay:text-[14px]\"\n onClick={() => {\n setDisplayCurrency(false)\n setInputValue('1000', false)\n }}\n >\n <Text style=\"subtitle2\">$1,000</Text>\n </Button>\n </Flex>\n </Flex>\n </Flex>\n <Flex\n direction=\"column\"\n className=\"relay:w-full relay:overflow-hidden relay:p-4 relay:rounded-widget-card relay:bg-[var(--relay-colors-widget-background)] relay:border-widget-card relay:mb-[var(--relay-spacing-widget-card-section-gutter)]\"\n >\n <Flex justify=\"between\" align=\"center\" className=\"relay:mb-2\">\n <Text color=\"subtle\" style=\"subtitle2\">\n Recipient\n </Text>\n {multiWalletSupportEnabled === true &&\n toChainWalletVMSupported ? (\n <MultiWalletDropdown\n context=\"destination\"\n selectedWalletAddress={recipient}\n onSelect={(wallet) => setRecipient(wallet.address)}\n chain={toChain}\n onLinkNewWallet={() => {\n if (\n (!linkedWallets || linkedWallets.length === 0) &&\n toChainWalletVMSupported\n ) {\n onConnectWallet?.()\n } else {\n onLinkNewWallet?.({\n chain: toChain,\n direction: 'to'\n })?.then((wallet) => {\n onSetPrimaryWallet?.(wallet.address)\n })\n }\n }}\n setAddressModalOpen={setAddressModalOpen}\n wallets={linkedWallets!}\n onAnalyticEvent={onAnalyticEvent}\n disablePasteWalletAddressOption={\n disablePasteWalletAddressOption\n }\n testId=\"onramp-wallet-select-button\"\n />\n ) : null}\n {!multiWalletSupportEnabled || !toChainWalletVMSupported ? (\n <Button\n color={\n isValidRecipient && !isRecipientLinked\n ? 'warning'\n : 'secondary'\n }\n corners=\"pill\"\n size=\"none\"\n className=\"relay:flex relay:items-center relay:px-2 relay:py-1\"\n onClick={() => {\n setAddressModalOpen(true)\n onAnalyticEvent?.(EventNames.SWAP_ADDRESS_MODAL_CLICKED)\n }}\n >\n {isValidRecipient && !isRecipientLinked ? (\n <Box className=\"relay:text-[color:var(--relay-colors-amber11)]\">\n <FontAwesomeIcon\n icon={faClipboard}\n width={16}\n height={16}\n />\n </Box>\n ) : null}\n <Text\n style=\"subtitle2\"\n className={\n isValidRecipient && !isRecipientLinked\n ? 'relay:text-[color:var(--relay-colors-amber11)]'\n : 'relay:text-[color:var(--relay-colors-anchor-color)]'\n }\n >\n {!isValidRecipient ? `Enter Address` : toDisplayName}\n </Text>\n </Button>\n ) : null}\n </Flex>\n <Flex justify=\"between\" align=\"center\">\n <Text color=\"subtle\" style=\"subtitle2\">\n Paying with\n </Text>\n <Flex\n className=\"relay:items-center relay:gap-2 relay:ml-auto relay:mr-2 relay:text-[color:var(--relay-colors-gray9)]\"\n >\n <FontAwesomeIcon style={{ width: 16 }} icon={faCreditCard} />\n <Text style=\"subtitle2\">Card</Text>\n </Flex>\n {/* Hiding this until issues are resolved with MoonPay\n <FiatCurrencyModal\n fiatCurrency={fiatCurrency}\n setFiatCurrency={setFiatCurrency}\n moonPayApiKey={moonPayApiKey}\n /> */}\n </Flex>\n </Flex>\n <Button\n cta={true}\n className=\"relay:w-full relay:justify-center\"\n disabled={notEnoughFiat}\n onClick={() => {\n haptic('medium')\n if (!recipient && toChainWalletVMSupported) {\n if (!linkedWallets || linkedWallets.length === 0) {\n onConnectWallet?.()\n } else {\n onLinkNewWallet?.({\n chain: toChain,\n direction: 'to'\n })?.then((wallet) => {\n onSetPrimaryWallet?.(wallet.address)\n })\n }\n } else if (!recipient) {\n setAddressModalOpen(true)\n } else {\n setOnrampModalOpen(true)\n }\n }}\n >\n {ctaCopy}\n </Button>\n <CustomAddressModal\n open={addressModalOpen}\n toToken={token}\n toAddress={recipient}\n toChain={toChain}\n isConnected={\n (linkedWallets && linkedWallets.length > 0) || isConnected\n ? true\n : false\n }\n linkedWallets={linkedWallets ?? []}\n multiWalletSupportEnabled={multiWalletSupportEnabled}\n onAnalyticEvent={onAnalyticEvent}\n onOpenChange={(open) => {\n setAddressModalOpen(open)\n }}\n onConfirmed={(address) => {\n setRecipient(address)\n }}\n onClear={() => {\n setRecipient(undefined)\n }}\n />\n <OnrampModal\n open={onrampModalOpen}\n onOpenChange={setOnrampModalOpen}\n onAnalyticEvent={onAnalyticEvent}\n moonpayOnUrlSignatureRequested={moonpayOnUrlSignatureRequested}\n fromToken={fromToken}\n toToken={token}\n fromChain={fromChain}\n toChain={toChain}\n amount={amount}\n amountFormatted={formattedAmount}\n amountToTokenFormatted={amountToTokenFormatted}\n fiatCurrency={fiatCurrency}\n recipient={recipient}\n onSuccess={onSuccess}\n moonPayCurrencyCode={moonPayCurrencyCode}\n isPassthrough={isPassthrough}\n usdRate={usdRate}\n moonPayThemeId={moonPayThemeId}\n moonPayThemeMode={moonPayThemeMode}\n moonPayApiKey={moonPayApiKey}\n />\n </div>\n )\n }}\n </OnrampWidgetRenderer>\n )\n}\n\nexport default OnrampWidget\n"]}
@@ -83,7 +83,7 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
83
83
  setCustomToAddress
84
84
  ]);
85
85
  const recipient = customToAddress ?? defaultRecipient ?? address;
86
- const { value: fromBalance, queryKey: fromBalanceQueryKey, isLoading: isLoadingFromBalance, isError: fromBalanceErrorFetching, isDuneBalance: fromBalanceIsDune, hasPendingBalance: fromBalancePending } = (0, index_js_1.useCurrencyBalance)({
86
+ const { value: fromBalance, queryKey: fromBalanceQueryKey, isLoading: isLoadingFromBalance, isError: fromBalanceErrorFetching, hasPendingBalance: fromBalancePending } = (0, index_js_1.useCurrencyBalance)({
87
87
  chain: fromChain,
88
88
  address: address,
89
89
  currency: fromToken?.address ? fromToken.address : undefined,
@@ -91,7 +91,7 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
91
91
  refreshInterval: undefined,
92
92
  wallet
93
93
  });
94
- const { value: toBalance, queryKey: toBalanceQueryKey, isLoading: isLoadingToBalance, isDuneBalance: toBalanceIsDune, hasPendingBalance: toBalancePending } = (0, index_js_1.useCurrencyBalance)({
94
+ const { value: toBalance, queryKey: toBalanceQueryKey, isLoading: isLoadingToBalance, hasPendingBalance: toBalancePending } = (0, index_js_1.useCurrencyBalance)({
95
95
  chain: toChain,
96
96
  address: recipient,
97
97
  currency: toToken?.address ? toToken.address : undefined,
@@ -100,43 +100,10 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
100
100
  wallet
101
101
  });
102
102
  const invalidateBalanceQueries = (0, react_1.useCallback)(() => {
103
- const invalidatePeriodically = (invalidateFn) => {
104
- let maxRefreshes = 4;
105
- let refreshCount = 0;
106
- const timer = setInterval(() => {
107
- if (maxRefreshes === refreshCount) {
108
- clearInterval(timer);
109
- return;
110
- }
111
- refreshCount++;
112
- invalidateFn();
113
- }, 3000);
114
- };
115
- queryClient.invalidateQueries({ queryKey: ['useDuneBalances'] });
116
- if (fromBalanceIsDune) {
117
- invalidatePeriodically(() => {
118
- queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey });
119
- });
120
- }
121
- else {
122
- queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey });
123
- }
124
- if (toBalanceIsDune) {
125
- invalidatePeriodically(() => {
126
- queryClient.invalidateQueries({ queryKey: toBalanceQueryKey });
127
- });
128
- }
129
- else {
130
- queryClient.invalidateQueries({ queryKey: toBalanceQueryKey });
131
- }
132
- }, [
133
- queryClient,
134
- fromBalanceQueryKey,
135
- toBalanceQueryKey,
136
- toBalanceIsDune,
137
- fromBalanceIsDune,
138
- address
139
- ]);
103
+ queryClient.invalidateQueries({ queryKey: ['useCodexBalances'] });
104
+ queryClient.invalidateQueries({ queryKey: fromBalanceQueryKey });
105
+ queryClient.invalidateQueries({ queryKey: toBalanceQueryKey });
106
+ }, [queryClient, fromBalanceQueryKey, toBalanceQueryKey, address]);
140
107
  const { data: capabilities } = (0, experimental_1.useCapabilities)({
141
108
  query: {
142
109
  enabled: connector &&
@@ -157,8 +124,18 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
157
124
  : undefined) !== undefined;
158
125
  const isValidFromAddress = (0, address_js_1.isValidAddress)(fromChain?.vmType, address ?? '', fromChain?.id, linkedWallet?.connector, connectorKeyOverrides);
159
126
  const fromAddressWithFallback = (0, address_js_1.addressWithFallback)(fromChain?.vmType, address, fromChain?.id, linkedWallet?.connector, connectorKeyOverrides);
160
- const isValidToAddress = (0, address_js_1.isValidAddress)(toChain?.vmType, recipient ?? '', toChain?.id);
161
- const toAddressWithFallback = (0, address_js_1.addressWithFallback)(toChain?.vmType, recipient, toChain?.id);
127
+ const recipientIsDestinationToken = Boolean(toChain &&
128
+ toToken &&
129
+ toToken.chainId === toChain.id &&
130
+ (0, address_js_1.addressesEqual)(toChain.vmType ?? 'evm', recipient, toToken.address));
131
+ const { isKnownTokenContract: recipientMatchesKnownToken } = (0, index_js_1.useKnownTokenContract)(toChain, customToAddress, customToAddress !== undefined && !recipientIsDestinationToken);
132
+ const recipientIsKnownTokenContract = recipientMatchesKnownToken;
133
+ const isValidToAddress = !recipientIsDestinationToken &&
134
+ !recipientIsKnownTokenContract &&
135
+ (0, address_js_1.isValidAddress)(toChain?.vmType, recipient ?? '', toChain?.id);
136
+ const toAddressWithFallback = (0, address_js_1.addressWithFallback)(toChain?.vmType, recipientIsDestinationToken || recipientIsKnownTokenContract
137
+ ? undefined
138
+ : recipient, toChain?.id);
162
139
  const { displayName: toDisplayName } = (0, index_js_1.useDisplayName)(recipient, toChain?.vmType, toChain?.id);
163
140
  const [currentSlippageTolerance, setCurrentSlippageTolerance] = (0, react_1.useState)(slippageTolerance);
164
141
  (0, react_1.useEffect)(() => {
@@ -465,6 +442,9 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
465
442
  if (!wallet && !walletClient.data) {
466
443
  throw new Error('Missing a wallet');
467
444
  }
445
+ if (recipientMatchesKnownToken) {
446
+ throw new Error('Recipient address is a token contract, not a wallet');
447
+ }
468
448
  setSteps(quote?.steps);
469
449
  setQuoteInProgress(quote);
470
450
  setTransactionModalOpen(true);
@@ -590,7 +570,8 @@ const SwapWidgetRenderer = ({ transactionModalOpen, setTransactionModalOpen, dep
590
570
  setQuoteInProgress,
591
571
  invalidateBalanceQueries,
592
572
  linkedWallet,
593
- abortController
573
+ abortController,
574
+ recipientMatchesKnownToken
594
575
  ]);
595
576
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
596
577
  quote,