@rhinestone/deposit-modal 0.3.1 → 0.4.1

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 (38) hide show
  1. package/dist/{DepositModalReown-G7UX4IBZ.mjs → DepositModalReown-EXI7MW65.mjs} +6 -6
  2. package/dist/{DepositModalReown-MECHBE6P.cjs → DepositModalReown-FMAPWBQM.cjs} +9 -9
  3. package/dist/{WithdrawModalReown-WJ6VBZKK.cjs → WithdrawModalReown-CTT3EXMG.cjs} +8 -8
  4. package/dist/{WithdrawModalReown-CUJAFUQM.mjs → WithdrawModalReown-G7EM6HXO.mjs} +5 -5
  5. package/dist/{chunk-DZQD3DAV.mjs → chunk-3GLQC2KQ.mjs} +86 -18
  6. package/dist/{chunk-R5WDHHVM.mjs → chunk-43RTPRQY.mjs} +14 -4
  7. package/dist/{chunk-3C35DVPE.mjs → chunk-A33QFRKD.mjs} +985 -428
  8. package/dist/{chunk-MILJQWPT.cjs → chunk-ABVRVW3P.cjs} +133 -8
  9. package/dist/{chunk-SPUZLWQS.cjs → chunk-BTDRUAPJ.cjs} +514 -543
  10. package/dist/{chunk-TQ2AYMWS.mjs → chunk-F7P4MV72.mjs} +1 -1
  11. package/dist/{chunk-BAEB5AFZ.mjs → chunk-FJWLC4AM.mjs} +1 -1
  12. package/dist/{chunk-LEL6GMEQ.cjs → chunk-JHT2MJ42.cjs} +175 -107
  13. package/dist/{chunk-MQIJZNTP.cjs → chunk-LJJCPDZO.cjs} +844 -287
  14. package/dist/{chunk-R5CPOBCF.cjs → chunk-NRNJAQUA.cjs} +4 -4
  15. package/dist/{chunk-QYSCCX4K.mjs → chunk-RTAIW3WW.mjs} +452 -481
  16. package/dist/{chunk-AJHFNHG3.cjs → chunk-UEKPBRBY.cjs} +3 -3
  17. package/dist/{chunk-ULEAK63T.cjs → chunk-ULCCXH2A.cjs} +16 -6
  18. package/dist/{chunk-6YRDD462.mjs → chunk-WJX3TJFK.mjs} +135 -10
  19. package/dist/constants.cjs +2 -2
  20. package/dist/constants.mjs +1 -1
  21. package/dist/deposit.cjs +6 -6
  22. package/dist/deposit.d.cts +2 -2
  23. package/dist/deposit.d.ts +2 -2
  24. package/dist/deposit.mjs +5 -5
  25. package/dist/index.cjs +7 -7
  26. package/dist/index.d.cts +1 -1
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.mjs +6 -6
  29. package/dist/polymarket.cjs +6 -6
  30. package/dist/polymarket.mjs +3 -3
  31. package/dist/styles.css +276 -27
  32. package/dist/{types-RzfAD14B.d.ts → types-CFRuisqK.d.cts} +1 -1
  33. package/dist/{types-RzfAD14B.d.cts → types-CFRuisqK.d.ts} +1 -1
  34. package/dist/withdraw.cjs +5 -5
  35. package/dist/withdraw.d.cts +2 -2
  36. package/dist/withdraw.d.ts +2 -2
  37. package/dist/withdraw.mjs +4 -4
  38. package/package.json +1 -1
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  CHAIN_BY_ID,
3
3
  NATIVE_TOKEN_ADDRESS,
4
+ findTokenDecimals,
4
5
  getChainIcon,
5
6
  getChainName,
6
7
  getExplorerTxUrl,
7
8
  getSolanaTokenByMint,
8
9
  getSupportedChainIds,
9
- getTargetTokenSymbol,
10
10
  getTokenAddress,
11
11
  getTokenDecimalsByAddress,
12
12
  getTokenIcon,
13
13
  getTokenSymbol,
14
14
  isSolanaCaip2,
15
15
  parseEvmChainId
16
- } from "./chunk-6YRDD462.mjs";
16
+ } from "./chunk-WJX3TJFK.mjs";
17
17
 
18
18
  // src/components/ui/Modal.tsx
19
19
  import {
@@ -169,9 +169,9 @@ import {
169
169
  CircleArrowOutUpLeft,
170
170
  CreditCard,
171
171
  Landmark,
172
- Apple
172
+ Unplug
173
173
  } from "lucide-react";
174
- import { jsx as jsx2 } from "react/jsx-runtime";
174
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
175
175
  var WalletIcon = Wallet;
176
176
  var ExternalLinkIcon = ExternalLink;
177
177
  var CheckIcon = Check;
@@ -214,10 +214,43 @@ var PlusCircleIcon = CirclePlus;
214
214
  var CircleArrowOutUpLeftIcon = CircleArrowOutUpLeft;
215
215
  var CardIcon = CreditCard;
216
216
  var BankIcon = Landmark;
217
- var AppleIcon = Apple;
217
+ var UnplugIcon = Unplug;
218
+ function AppleIcon() {
219
+ return /* @__PURE__ */ jsxs(
220
+ "svg",
221
+ {
222
+ width: "24",
223
+ height: "24",
224
+ viewBox: "0 0 24 24",
225
+ fill: "none",
226
+ xmlns: "http://www.w3.org/2000/svg",
227
+ "aria-hidden": "true",
228
+ children: [
229
+ /* @__PURE__ */ jsx2(
230
+ "path",
231
+ {
232
+ d: "M16.36 1.43c0 1.14-.49 2.27-1.18 3.08-.74.9-1.99 1.57-2.98 1.57-.12 0-.23-.02-.3-.03-.01-.06-.04-.22-.04-.39 0-1.15.57-2.27 1.2-2.98.8-.94 2.15-1.64 3.25-1.68.03.13.05.28.05.43z",
233
+ stroke: "currentColor",
234
+ strokeWidth: "1.6",
235
+ strokeLinejoin: "round"
236
+ }
237
+ ),
238
+ /* @__PURE__ */ jsx2(
239
+ "path",
240
+ {
241
+ d: "M20.93 17.14c-.03.07-.46 1.58-1.52 3.12-.94 1.34-1.94 2.71-3.43 2.71-1.51 0-1.9-.88-3.63-.88-1.7 0-2.3.91-3.67.91-1.38 0-2.33-1.26-3.43-2.8-1.29-1.82-2.32-4.63-2.32-7.28 0-4.28 2.8-6.55 5.55-6.55 1.45 0 2.68.95 3.6.95.86 0 2.22-1.01 3.9-1.01.61 0 2.89.06 4.37 2.19-.13.09-2.38 1.37-2.38 4.19 0 3.26 2.85 4.42 2.96 4.45z",
242
+ stroke: "currentColor",
243
+ strokeWidth: "1.6",
244
+ strokeLinejoin: "round"
245
+ }
246
+ )
247
+ ]
248
+ }
249
+ );
250
+ }
218
251
 
219
252
  // src/components/ui/Callout.tsx
220
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
253
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
221
254
  function CircleAlertIcon() {
222
255
  return /* @__PURE__ */ jsx3(
223
256
  "svg",
@@ -242,7 +275,7 @@ function CircleAlertIcon() {
242
275
  );
243
276
  }
244
277
  function Callout({ variant = "error", children, role }) {
245
- return /* @__PURE__ */ jsxs(
278
+ return /* @__PURE__ */ jsxs2(
246
279
  "div",
247
280
  {
248
281
  className: `rs-callout rs-callout--${variant}`,
@@ -1549,31 +1582,35 @@ function applyTheme(element, theme) {
1549
1582
  }
1550
1583
 
1551
1584
  // src/components/ui/BodyHeader.tsx
1552
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
1585
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1553
1586
  function BodyHeader({
1554
1587
  icon,
1555
1588
  title,
1556
1589
  subtitle,
1557
- variant = "default"
1590
+ variant = "default",
1591
+ aside
1558
1592
  }) {
1559
1593
  const iconClasses = [
1560
1594
  "rs-body-header-icon",
1561
1595
  variant === "success" ? "rs-body-header-icon--success" : "",
1562
1596
  variant === "error" ? "rs-body-header-icon--error" : ""
1563
1597
  ].filter(Boolean).join(" ");
1564
- return /* @__PURE__ */ jsxs2("div", { className: "rs-body-header", children: [
1598
+ return /* @__PURE__ */ jsxs3("div", { className: "rs-body-header", children: [
1565
1599
  /* @__PURE__ */ jsx4("div", { className: iconClasses, children: icon }),
1566
- /* @__PURE__ */ jsxs2("div", { className: "rs-body-header-text", children: [
1567
- /* @__PURE__ */ jsx4("h2", { className: "rs-body-header-title", children: title }),
1568
- subtitle && /* @__PURE__ */ jsx4("p", { className: "rs-body-header-subtitle", children: subtitle })
1600
+ /* @__PURE__ */ jsxs3("div", { className: "rs-body-header-main", children: [
1601
+ /* @__PURE__ */ jsxs3("div", { className: "rs-body-header-text", children: [
1602
+ /* @__PURE__ */ jsx4("h2", { className: "rs-body-header-title", children: title }),
1603
+ subtitle && /* @__PURE__ */ jsx4("p", { className: "rs-body-header-subtitle", children: subtitle })
1604
+ ] }),
1605
+ aside && /* @__PURE__ */ jsx4("div", { className: "rs-body-header-aside", children: aside })
1569
1606
  ] })
1570
1607
  ] });
1571
1608
  }
1572
1609
  BodyHeader.displayName = "BodyHeader";
1573
1610
 
1574
1611
  // src/components/ui/PoweredBy.tsx
1575
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
1576
- var rhinestoneLogo = /* @__PURE__ */ jsxs3(
1612
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
1613
+ var rhinestoneLogo = /* @__PURE__ */ jsxs4(
1577
1614
  "svg",
1578
1615
  {
1579
1616
  className: "rs-powered-by-logo",
@@ -1582,7 +1619,7 @@ var rhinestoneLogo = /* @__PURE__ */ jsxs3(
1582
1619
  xmlns: "http://www.w3.org/2000/svg",
1583
1620
  "aria-hidden": "true",
1584
1621
  children: [
1585
- /* @__PURE__ */ jsxs3("g", { fill: "currentColor", clipPath: "url(#rs-pb-clip)", children: [
1622
+ /* @__PURE__ */ jsxs4("g", { fill: "currentColor", clipPath: "url(#rs-pb-clip)", children: [
1586
1623
  /* @__PURE__ */ jsx5(
1587
1624
  "path",
1588
1625
  {
@@ -1626,7 +1663,7 @@ var rhinestoneLogo = /* @__PURE__ */ jsxs3(
1626
1663
  }
1627
1664
  );
1628
1665
  function PoweredBy() {
1629
- return /* @__PURE__ */ jsxs3("div", { className: "rs-powered-by", "aria-label": "Powered by Rhinestone", children: [
1666
+ return /* @__PURE__ */ jsxs4("div", { className: "rs-powered-by", "aria-label": "Powered by Rhinestone", children: [
1630
1667
  /* @__PURE__ */ jsx5("span", { children: "Powered by" }),
1631
1668
  /* @__PURE__ */ jsx5(
1632
1669
  "a",
@@ -1643,9 +1680,9 @@ function PoweredBy() {
1643
1680
  PoweredBy.displayName = "PoweredBy";
1644
1681
 
1645
1682
  // src/components/ui/Spinner.tsx
1646
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
1683
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1647
1684
  function Spinner({ className }) {
1648
- return /* @__PURE__ */ jsxs4(
1685
+ return /* @__PURE__ */ jsxs5(
1649
1686
  "svg",
1650
1687
  {
1651
1688
  className: `rs-spinner ${className || ""}`,
@@ -1672,8 +1709,11 @@ function Spinner({ className }) {
1672
1709
  );
1673
1710
  }
1674
1711
 
1712
+ // src/components/steps/ConnectStep.tsx
1713
+ import { useState } from "react";
1714
+
1675
1715
  // src/components/ui/ListRow.tsx
1676
- import { Fragment, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
1716
+ import { Fragment, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1677
1717
  function ListRow({
1678
1718
  leading,
1679
1719
  leadingMedia,
@@ -1687,10 +1727,10 @@ function ListRow({
1687
1727
  disabled,
1688
1728
  ...props
1689
1729
  }) {
1690
- const inner = /* @__PURE__ */ jsxs5(Fragment, { children: [
1730
+ const inner = /* @__PURE__ */ jsxs6(Fragment, { children: [
1691
1731
  leadingMedia ? /* @__PURE__ */ jsx7("span", { className: "rs-list-row-leading rs-list-row-leading--media", children: /* @__PURE__ */ jsx7("img", { src: leadingMedia, alt: "" }) }) : leading ? /* @__PURE__ */ jsx7("span", { className: "rs-list-row-leading", children: leading }) : null,
1692
- /* @__PURE__ */ jsxs5("div", { className: "rs-list-row-body", children: [
1693
- /* @__PURE__ */ jsxs5("div", { className: "rs-list-row-text", children: [
1732
+ /* @__PURE__ */ jsxs6("div", { className: "rs-list-row-body", children: [
1733
+ /* @__PURE__ */ jsxs6("div", { className: "rs-list-row-text", children: [
1694
1734
  /* @__PURE__ */ jsx7("span", { className: "rs-list-row-title", children: title }),
1695
1735
  subtitle && /* @__PURE__ */ jsx7("span", { className: "rs-list-row-subtitle", children: subtitle })
1696
1736
  ] }),
@@ -1745,10 +1785,71 @@ function ListRow({
1745
1785
  }
1746
1786
  ListRow.displayName = "ListRow";
1747
1787
 
1788
+ // src/components/ui/SegmentedToggle.tsx
1789
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1790
+ var SEGMENTED_INSET_PX = 2;
1791
+ function SegmentedToggle({
1792
+ options,
1793
+ value,
1794
+ onChange,
1795
+ ariaLabel
1796
+ }) {
1797
+ const activeIndex = Math.max(
1798
+ 0,
1799
+ options.findIndex((opt) => opt.value === value)
1800
+ );
1801
+ const count = Math.max(options.length, 1);
1802
+ const totalInsetPx = SEGMENTED_INSET_PX * (count + 1);
1803
+ const offsetPercent = activeIndex / count * 100;
1804
+ const offsetCorrectionPx = activeIndex * SEGMENTED_INSET_PX / count;
1805
+ const segmentedStyle = {
1806
+ "--rs-segmented-count": count,
1807
+ "--rs-segmented-index": activeIndex,
1808
+ "--rs-segmented-inset": `${SEGMENTED_INSET_PX}px`,
1809
+ "--rs-segmented-thumb-width": `calc((100% - ${totalInsetPx}px) / ${count})`,
1810
+ "--rs-segmented-thumb-offset": `calc(${offsetPercent}% - ${offsetCorrectionPx}px)`
1811
+ };
1812
+ return /* @__PURE__ */ jsxs7(
1813
+ "div",
1814
+ {
1815
+ className: "rs-segmented",
1816
+ role: "tablist",
1817
+ "aria-label": ariaLabel,
1818
+ style: segmentedStyle,
1819
+ children: [
1820
+ /* @__PURE__ */ jsx8(
1821
+ "span",
1822
+ {
1823
+ className: "rs-segmented-thumb",
1824
+ "data-value": value,
1825
+ "aria-hidden": "true"
1826
+ }
1827
+ ),
1828
+ options.map((opt) => {
1829
+ const active = opt.value === value;
1830
+ return /* @__PURE__ */ jsx8(
1831
+ "button",
1832
+ {
1833
+ type: "button",
1834
+ role: "tab",
1835
+ "aria-selected": active,
1836
+ className: `rs-segmented-option${active ? " rs-segmented-option--active" : ""}`,
1837
+ onClick: () => onChange(opt.value),
1838
+ children: opt.label
1839
+ },
1840
+ opt.value
1841
+ );
1842
+ })
1843
+ ]
1844
+ }
1845
+ );
1846
+ }
1847
+ SegmentedToggle.displayName = "SegmentedToggle";
1848
+
1748
1849
  // src/components/ui/WalletBadgeIcons/RabbyIcon.tsx
1749
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
1850
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
1750
1851
  function RabbyIcon() {
1751
- return /* @__PURE__ */ jsxs6(
1852
+ return /* @__PURE__ */ jsxs8(
1752
1853
  "svg",
1753
1854
  {
1754
1855
  width: "20",
@@ -1757,8 +1858,8 @@ function RabbyIcon() {
1757
1858
  fill: "none",
1758
1859
  xmlns: "http://www.w3.org/2000/svg",
1759
1860
  children: [
1760
- /* @__PURE__ */ jsxs6("g", { clipPath: "url(#rs-rabby-clip)", children: [
1761
- /* @__PURE__ */ jsx8(
1861
+ /* @__PURE__ */ jsxs8("g", { clipPath: "url(#rs-rabby-clip)", children: [
1862
+ /* @__PURE__ */ jsx9(
1762
1863
  "mask",
1763
1864
  {
1764
1865
  id: "rs-rabby-mask",
@@ -1768,7 +1869,7 @@ function RabbyIcon() {
1768
1869
  y: "0",
1769
1870
  width: "20",
1770
1871
  height: "20",
1771
- children: /* @__PURE__ */ jsx8(
1872
+ children: /* @__PURE__ */ jsx9(
1772
1873
  "path",
1773
1874
  {
1774
1875
  d: "M20 10C20 4.47 15.52 0 10 0C4.47 0 0 4.47 0 10C0 15.52 4.47 20 10 20C15.52 20 20 15.52 20 10Z",
@@ -1777,22 +1878,22 @@ function RabbyIcon() {
1777
1878
  )
1778
1879
  }
1779
1880
  ),
1780
- /* @__PURE__ */ jsxs6("g", { mask: "url(#rs-rabby-mask)", children: [
1781
- /* @__PURE__ */ jsx8(
1881
+ /* @__PURE__ */ jsxs8("g", { mask: "url(#rs-rabby-mask)", children: [
1882
+ /* @__PURE__ */ jsx9(
1782
1883
  "path",
1783
1884
  {
1784
1885
  d: "M20 10C20 4.47 15.52 0 10 0C4.47 0 0 4.47 0 10C0 15.52 4.47 20 10 20C15.52 20 20 15.52 20 10Z",
1785
1886
  fill: "#7084FF"
1786
1887
  }
1787
1888
  ),
1788
- /* @__PURE__ */ jsx8(
1889
+ /* @__PURE__ */ jsx9(
1789
1890
  "path",
1790
1891
  {
1791
1892
  d: "M17.25 10.86C17.82 9.57 14.98 5.97 12.26 4.47C10.55 3.31 8.77 3.47 8.41 3.98C7.62 5.10 11.03 6.05 13.32 7.16C12.83 7.37 12.36 7.76 12.09 8.25C11.24 7.31 9.37 6.51 7.18 7.16C5.70 7.59 4.47 8.62 3.99 10.18C3.85 10.11 3.70 10.09 3.54 10.10C3.39 10.11 3.24 10.16 3.11 10.25C2.98 10.33 2.87 10.45 2.80 10.58C2.72 10.72 2.69 10.87 2.69 11.03C2.69 11.55 3.10 11.96 3.62 11.96C3.71 11.96 4.01 11.90 4.01 11.90L8.77 11.93C6.87 14.96 5.36 15.41 5.36 15.93C5.36 16.46 6.80 16.32 7.34 16.12C9.93 15.18 12.71 12.26 13.19 11.42C15.19 11.67 16.87 11.70 17.25 10.86Z",
1792
1893
  fill: "url(#rs-rabby-grad0)"
1793
1894
  }
1794
1895
  ),
1795
- /* @__PURE__ */ jsx8(
1896
+ /* @__PURE__ */ jsx9(
1796
1897
  "path",
1797
1898
  {
1798
1899
  fillRule: "evenodd",
@@ -1801,7 +1902,7 @@ function RabbyIcon() {
1801
1902
  fill: "url(#rs-rabby-grad1)"
1802
1903
  }
1803
1904
  ),
1804
- /* @__PURE__ */ jsx8(
1905
+ /* @__PURE__ */ jsx9(
1805
1906
  "path",
1806
1907
  {
1807
1908
  fillRule: "evenodd",
@@ -1810,7 +1911,7 @@ function RabbyIcon() {
1810
1911
  fill: "url(#rs-rabby-grad2)"
1811
1912
  }
1812
1913
  ),
1813
- /* @__PURE__ */ jsx8(
1914
+ /* @__PURE__ */ jsx9(
1814
1915
  "path",
1815
1916
  {
1816
1917
  d: "M3.94 11.70C4.11 13.19 4.96 13.77 6.68 13.94C8.40 14.12 9.39 14.00 10.71 14.12C11.81 14.22 12.79 14.78 13.15 14.59C13.48 14.42 13.30 13.78 12.86 13.38C12.29 12.85 11.50 12.49 10.12 12.36C10.39 11.60 10.32 10.54 9.89 9.96C9.27 9.12 8.13 8.75 6.68 8.91C5.17 9.08 3.72 9.83 3.94 11.70Z",
@@ -1819,8 +1920,8 @@ function RabbyIcon() {
1819
1920
  )
1820
1921
  ] })
1821
1922
  ] }),
1822
- /* @__PURE__ */ jsxs6("defs", { children: [
1823
- /* @__PURE__ */ jsxs6(
1923
+ /* @__PURE__ */ jsxs8("defs", { children: [
1924
+ /* @__PURE__ */ jsxs8(
1824
1925
  "linearGradient",
1825
1926
  {
1826
1927
  id: "rs-rabby-grad0",
@@ -1830,12 +1931,12 @@ function RabbyIcon() {
1830
1931
  y2: "12.58",
1831
1932
  gradientUnits: "userSpaceOnUse",
1832
1933
  children: [
1833
- /* @__PURE__ */ jsx8("stop", { stopColor: "white" }),
1834
- /* @__PURE__ */ jsx8("stop", { offset: "1", stopColor: "white" })
1934
+ /* @__PURE__ */ jsx9("stop", { stopColor: "white" }),
1935
+ /* @__PURE__ */ jsx9("stop", { offset: "1", stopColor: "white" })
1835
1936
  ]
1836
1937
  }
1837
1938
  ),
1838
- /* @__PURE__ */ jsxs6(
1939
+ /* @__PURE__ */ jsxs8(
1839
1940
  "linearGradient",
1840
1941
  {
1841
1942
  id: "rs-rabby-grad1",
@@ -1845,12 +1946,12 @@ function RabbyIcon() {
1845
1946
  y2: "2.21",
1846
1947
  gradientUnits: "userSpaceOnUse",
1847
1948
  children: [
1848
- /* @__PURE__ */ jsx8("stop", { stopColor: "#8697FF" }),
1849
- /* @__PURE__ */ jsx8("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
1949
+ /* @__PURE__ */ jsx9("stop", { stopColor: "#8697FF" }),
1950
+ /* @__PURE__ */ jsx9("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
1850
1951
  ]
1851
1952
  }
1852
1953
  ),
1853
- /* @__PURE__ */ jsxs6(
1954
+ /* @__PURE__ */ jsxs8(
1854
1955
  "linearGradient",
1855
1956
  {
1856
1957
  id: "rs-rabby-grad2",
@@ -1860,12 +1961,12 @@ function RabbyIcon() {
1860
1961
  y2: "9.61",
1861
1962
  gradientUnits: "userSpaceOnUse",
1862
1963
  children: [
1863
- /* @__PURE__ */ jsx8("stop", { stopColor: "#8697FF" }),
1864
- /* @__PURE__ */ jsx8("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
1964
+ /* @__PURE__ */ jsx9("stop", { stopColor: "#8697FF" }),
1965
+ /* @__PURE__ */ jsx9("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
1865
1966
  ]
1866
1967
  }
1867
1968
  ),
1868
- /* @__PURE__ */ jsxs6(
1969
+ /* @__PURE__ */ jsxs8(
1869
1970
  "linearGradient",
1870
1971
  {
1871
1972
  id: "rs-rabby-grad3",
@@ -1875,12 +1976,12 @@ function RabbyIcon() {
1875
1976
  y2: "15.67",
1876
1977
  gradientUnits: "userSpaceOnUse",
1877
1978
  children: [
1878
- /* @__PURE__ */ jsx8("stop", { stopColor: "white" }),
1879
- /* @__PURE__ */ jsx8("stop", { offset: "0.98", stopColor: "#D1D8FF" })
1979
+ /* @__PURE__ */ jsx9("stop", { stopColor: "white" }),
1980
+ /* @__PURE__ */ jsx9("stop", { offset: "0.98", stopColor: "#D1D8FF" })
1880
1981
  ]
1881
1982
  }
1882
1983
  ),
1883
- /* @__PURE__ */ jsx8("clipPath", { id: "rs-rabby-clip", children: /* @__PURE__ */ jsx8("rect", { width: "20", height: "20", fill: "white" }) })
1984
+ /* @__PURE__ */ jsx9("clipPath", { id: "rs-rabby-clip", children: /* @__PURE__ */ jsx9("rect", { width: "20", height: "20", fill: "white" }) })
1884
1985
  ] })
1885
1986
  ]
1886
1987
  }
@@ -1888,9 +1989,9 @@ function RabbyIcon() {
1888
1989
  }
1889
1990
 
1890
1991
  // src/components/ui/WalletBadgeIcons/PhantomIcon.tsx
1891
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
1992
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1892
1993
  function PhantomIcon() {
1893
- return /* @__PURE__ */ jsxs7(
1994
+ return /* @__PURE__ */ jsxs9(
1894
1995
  "svg",
1895
1996
  {
1896
1997
  width: "20",
@@ -1899,14 +2000,14 @@ function PhantomIcon() {
1899
2000
  fill: "none",
1900
2001
  xmlns: "http://www.w3.org/2000/svg",
1901
2002
  children: [
1902
- /* @__PURE__ */ jsx9(
2003
+ /* @__PURE__ */ jsx10(
1903
2004
  "path",
1904
2005
  {
1905
2006
  d: "M15.18 0H4.81C2.15 0 0 2.15 0 4.81V15.18C0 17.84 2.15 20 4.81 20H15.18C17.84 20 20 17.84 20 15.18V4.81C20 2.15 17.84 0 15.18 0Z",
1906
2007
  fill: "#AB9FF2"
1907
2008
  }
1908
2009
  ),
1909
- /* @__PURE__ */ jsx9(
2010
+ /* @__PURE__ */ jsx10(
1910
2011
  "path",
1911
2012
  {
1912
2013
  fillRule: "evenodd",
@@ -1921,9 +2022,9 @@ function PhantomIcon() {
1921
2022
  }
1922
2023
 
1923
2024
  // src/components/ui/WalletBadgeIcons/WalletConnectIcon.tsx
1924
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
2025
+ import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1925
2026
  function WalletConnectIcon() {
1926
- return /* @__PURE__ */ jsxs8(
2027
+ return /* @__PURE__ */ jsxs10(
1927
2028
  "svg",
1928
2029
  {
1929
2030
  width: "20",
@@ -1932,8 +2033,8 @@ function WalletConnectIcon() {
1932
2033
  fill: "none",
1933
2034
  xmlns: "http://www.w3.org/2000/svg",
1934
2035
  children: [
1935
- /* @__PURE__ */ jsx10("rect", { width: "20", height: "20", rx: "2.5", fill: "#3B99FC" }),
1936
- /* @__PURE__ */ jsx10(
2036
+ /* @__PURE__ */ jsx11("rect", { width: "20", height: "20", rx: "2.5", fill: "#3B99FC" }),
2037
+ /* @__PURE__ */ jsx11(
1937
2038
  "path",
1938
2039
  {
1939
2040
  d: "M6.18 7.96a5.36 5.36 0 0 1 7.64 0l.25.26a.26.26 0 0 1 0 .37l-.87.87a.13.13 0 0 1-.19 0l-.35-.35a3.74 3.74 0 0 0-5.32 0l-.38.37a.13.13 0 0 1-.19 0l-.86-.86a.26.26 0 0 1 0-.37l.27-.29Zm9.43 1.79.78.78a.26.26 0 0 1 0 .37l-3.54 3.54a.26.26 0 0 1-.37 0l-2.51-2.5a.07.07 0 0 0-.09 0l-2.51 2.5a.26.26 0 0 1-.37 0L3.46 10.9a.26.26 0 0 1 0-.37l.78-.78a.26.26 0 0 1 .37 0l2.5 2.5a.07.07 0 0 0 .1 0L9.72 9.75a.26.26 0 0 1 .37 0l2.5 2.5a.07.07 0 0 0 .1 0l2.5-2.5a.26.26 0 0 1 .37 0Z",
@@ -1946,9 +2047,9 @@ function WalletConnectIcon() {
1946
2047
  }
1947
2048
 
1948
2049
  // src/components/ui/WalletBadgeIcons/EthBadgeIcon.tsx
1949
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
2050
+ import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1950
2051
  function EthBadgeIcon() {
1951
- return /* @__PURE__ */ jsxs9(
2052
+ return /* @__PURE__ */ jsxs11(
1952
2053
  "svg",
1953
2054
  {
1954
2055
  width: "20",
@@ -1957,28 +2058,28 @@ function EthBadgeIcon() {
1957
2058
  fill: "none",
1958
2059
  xmlns: "http://www.w3.org/2000/svg",
1959
2060
  children: [
1960
- /* @__PURE__ */ jsx11(
2061
+ /* @__PURE__ */ jsx12(
1961
2062
  "path",
1962
2063
  {
1963
2064
  d: "M9.99 19.93C15.48 19.93 19.93 15.48 19.93 9.99C19.93 4.51 15.48 0.06 9.99 0.06C4.51 0.06 0.06 4.51 0.06 9.99C0.06 15.48 4.51 19.93 9.99 19.93Z",
1964
2065
  fill: "#E3E3E3"
1965
2066
  }
1966
2067
  ),
1967
- /* @__PURE__ */ jsx11("path", { d: "M10.00 2.18L14.69 9.99L10.02 7.98L10.00 2.18Z", fill: "#2F3030" }),
1968
- /* @__PURE__ */ jsx11("path", { d: "M5.31 9.99L9.98 2.18L10.00 7.98L5.31 9.99Z", fill: "#828384" }),
1969
- /* @__PURE__ */ jsx11("path", { d: "M9.98 12.80L5.31 10.04L10.00 8.11L9.98 12.80Z", fill: "#343535" }),
1970
- /* @__PURE__ */ jsx11("path", { d: "M14.69 10.04L10.02 8.11L10.00 12.80L14.69 10.04Z", fill: "#131313" }),
1971
- /* @__PURE__ */ jsx11("path", { d: "M10.00 14.00L14.69 11.24L10.00 17.80V14.00Z", fill: "#2F3030" }),
1972
- /* @__PURE__ */ jsx11("path", { d: "M10.00 14.00L5.31 11.24L10.00 17.80V14.00Z", fill: "#828384" })
2068
+ /* @__PURE__ */ jsx12("path", { d: "M10.00 2.18L14.69 9.99L10.02 7.98L10.00 2.18Z", fill: "#2F3030" }),
2069
+ /* @__PURE__ */ jsx12("path", { d: "M5.31 9.99L9.98 2.18L10.00 7.98L5.31 9.99Z", fill: "#828384" }),
2070
+ /* @__PURE__ */ jsx12("path", { d: "M9.98 12.80L5.31 10.04L10.00 8.11L9.98 12.80Z", fill: "#343535" }),
2071
+ /* @__PURE__ */ jsx12("path", { d: "M14.69 10.04L10.02 8.11L10.00 12.80L14.69 10.04Z", fill: "#131313" }),
2072
+ /* @__PURE__ */ jsx12("path", { d: "M10.00 14.00L14.69 11.24L10.00 17.80V14.00Z", fill: "#2F3030" }),
2073
+ /* @__PURE__ */ jsx12("path", { d: "M10.00 14.00L5.31 11.24L10.00 17.80V14.00Z", fill: "#828384" })
1973
2074
  ]
1974
2075
  }
1975
2076
  );
1976
2077
  }
1977
2078
 
1978
2079
  // src/components/ui/WalletBadgeIcons/SolBadgeIcon.tsx
1979
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
2080
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1980
2081
  function SolBadgeIcon() {
1981
- return /* @__PURE__ */ jsxs10(
2082
+ return /* @__PURE__ */ jsxs12(
1982
2083
  "svg",
1983
2084
  {
1984
2085
  width: "20",
@@ -1987,8 +2088,8 @@ function SolBadgeIcon() {
1987
2088
  fill: "none",
1988
2089
  xmlns: "http://www.w3.org/2000/svg",
1989
2090
  children: [
1990
- /* @__PURE__ */ jsx12("rect", { width: "20", height: "20", rx: "10", fill: "#0C0C0C" }),
1991
- /* @__PURE__ */ jsx12(
2091
+ /* @__PURE__ */ jsx13("rect", { width: "20", height: "20", rx: "10", fill: "#0C0C0C" }),
2092
+ /* @__PURE__ */ jsx13(
1992
2093
  "path",
1993
2094
  {
1994
2095
  fillRule: "evenodd",
@@ -1997,7 +2098,7 @@ function SolBadgeIcon() {
1997
2098
  fill: "url(#rs-sol-badge-grad)"
1998
2099
  }
1999
2100
  ),
2000
- /* @__PURE__ */ jsx12("defs", { children: /* @__PURE__ */ jsxs10(
2101
+ /* @__PURE__ */ jsx13("defs", { children: /* @__PURE__ */ jsxs12(
2001
2102
  "linearGradient",
2002
2103
  {
2003
2104
  id: "rs-sol-badge-grad",
@@ -2007,8 +2108,8 @@ function SolBadgeIcon() {
2007
2108
  y2: "5.08",
2008
2109
  gradientUnits: "userSpaceOnUse",
2009
2110
  children: [
2010
- /* @__PURE__ */ jsx12("stop", { stopColor: "#CB4EE8" }),
2011
- /* @__PURE__ */ jsx12("stop", { offset: "1", stopColor: "#10F4B1" })
2111
+ /* @__PURE__ */ jsx13("stop", { stopColor: "#CB4EE8" }),
2112
+ /* @__PURE__ */ jsx13("stop", { offset: "1", stopColor: "#10F4B1" })
2012
2113
  ]
2013
2114
  }
2014
2115
  ) })
@@ -2018,9 +2119,9 @@ function SolBadgeIcon() {
2018
2119
  }
2019
2120
 
2020
2121
  // src/components/ui/WalletBadgeIcons/BaseBadgeIcon.tsx
2021
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
2122
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
2022
2123
  function BaseBadgeIcon() {
2023
- return /* @__PURE__ */ jsxs11(
2124
+ return /* @__PURE__ */ jsxs13(
2024
2125
  "svg",
2025
2126
  {
2026
2127
  width: "20",
@@ -2029,8 +2130,8 @@ function BaseBadgeIcon() {
2029
2130
  fill: "none",
2030
2131
  xmlns: "http://www.w3.org/2000/svg",
2031
2132
  children: [
2032
- /* @__PURE__ */ jsx13("circle", { cx: "55.5", cy: "55.5", r: "55.5", fill: "#0052FF" }),
2033
- /* @__PURE__ */ jsx13(
2133
+ /* @__PURE__ */ jsx14("circle", { cx: "55.5", cy: "55.5", r: "55.5", fill: "#0052FF" }),
2134
+ /* @__PURE__ */ jsx14(
2034
2135
  "path",
2035
2136
  {
2036
2137
  d: "M54.92 93.4c20.94 0 37.92-16.97 37.92-37.92S75.86 17.55 54.92 17.55c-19.49 0-35.57 14.72-37.65 33.64h49.82v5.54h-49.82C19.35 75.67 35.42 93.4 54.92 93.4z",
@@ -2043,41 +2144,191 @@ function BaseBadgeIcon() {
2043
2144
  }
2044
2145
 
2045
2146
  // src/components/ui/WalletBadgeIcons/index.tsx
2046
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
2147
+ import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
2047
2148
  function WalletBadgeIcons() {
2048
- return /* @__PURE__ */ jsxs12("span", { className: "rs-list-row-meta-icons", children: [
2049
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(RabbyIcon, {}) }),
2050
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(PhantomIcon, {}) }),
2051
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(WalletConnectIcon, {}) })
2149
+ return /* @__PURE__ */ jsxs14("span", { className: "rs-list-row-meta-icons", children: [
2150
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(RabbyIcon, {}) }),
2151
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(PhantomIcon, {}) }),
2152
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(WalletConnectIcon, {}) })
2052
2153
  ] });
2053
2154
  }
2054
2155
  WalletBadgeIcons.displayName = "WalletBadgeIcons";
2055
2156
  function ChainBadgeIcons() {
2056
- return /* @__PURE__ */ jsxs12("span", { className: "rs-list-row-meta-icons", children: [
2057
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(EthBadgeIcon, {}) }),
2058
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(SolBadgeIcon, {}) }),
2059
- /* @__PURE__ */ jsx14("span", { children: /* @__PURE__ */ jsx14(BaseBadgeIcon, {}) })
2157
+ return /* @__PURE__ */ jsxs14("span", { className: "rs-list-row-meta-icons", children: [
2158
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(EthBadgeIcon, {}) }),
2159
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(SolBadgeIcon, {}) }),
2160
+ /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(BaseBadgeIcon, {}) })
2060
2161
  ] });
2061
2162
  }
2062
2163
  ChainBadgeIcons.displayName = "ChainBadgeIcons";
2063
2164
 
2165
+ // src/components/ui/ExchangeLogos.tsx
2166
+ import { jsx as jsx16 } from "react/jsx-runtime";
2167
+ var EXCHANGE_LOGO_SOURCES = {
2168
+ binance: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSIjMEMwRTEyIi8+CjxwYXRoIGQ9Ik05Mi4zMDEgMTExLjczNkwxMjUuMzE5IDc4LjczMTdMMTU4LjM1MSAxMTEuNzYzTDE3Ny41NTIgOTIuNTQ4NkwxMjUuMzE5IDQwLjMwMjJMNzMuMDg2MyA5Mi41MzUyTDkyLjMwMSAxMTEuNzM2WiIgZmlsbD0iI0YzQkEyRiIvPgo8cGF0aCBkPSJNNDAuMzAzIDEyNS4zMDhMNTkuNTEwNyAxMDYuMUw3OC43MTg0IDEyNS4zMDhMNTkuNTEwNyAxNDQuNTE2TDQwLjMwMyAxMjUuMzA4WiIgZmlsbD0iI0YzQkEyRiIvPgo8cGF0aCBkPSJNOTIuMzAxMiAxMzguODczTDEyNS4zMTkgMTcxLjg5MUwxNTguMzUxIDEzOC44NkwxNzcuNTY2IDE1OC4wNDhMMTc3LjU1MiAxNTguMDYxTDEyNS4zMTkgMjEwLjMwOEw3My4wODY0IDE1OC4wODhMNzMuMDU5NiAxNTguMDYxTDkyLjMwMTIgMTM4Ljg3M1oiIGZpbGw9IiNGM0JBMkYiLz4KPHBhdGggZD0iTTE3MS44ODcgMTI1LjMxMkwxOTEuMDk1IDEwNi4xMDVMMjEwLjMwMyAxMjUuMzEyTDE5MS4wOTUgMTQ0LjUyTDE3MS44ODcgMTI1LjMxMloiIGZpbGw9IiNGM0JBMkYiLz4KPHBhdGggZD0iTTE0NC44MDMgMTI1LjI5OEwxMjUuMzE5IDEwNS44MDJMMTEwLjkxMiAxMjAuMjA5TDEwOS4yNDcgMTIxLjg2MUwxMDUuODM2IDEyNS4yNzJMMTA1LjgwOSAxMjUuMjk4TDEwNS44MzYgMTI1LjMzOUwxMjUuMzE5IDE0NC44MDlMMTQ0LjgwMyAxMjUuMzEyTDE0NC44MTYgMTI1LjI5OEgxNDQuODAzWiIgZmlsbD0iI0YzQkEyRiIvPgo8L3N2Zz4K",
2169
+ bitfinex: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfNDc2OV8xNTk5NjEpIi8+CjxwYXRoIGQ9Ik00Ni40NDQ4IDE4NS42MTJDNTQuMjc0NSAxOTMuOTE1IDk3LjMyOTcgMjMzLjcwMSAxNjQuOTA0IDE4Ny41MjRDMjEzLjc3OCAxNDkuNDcxIDIxMi41NTIgNjYuOTczIDIwNy44NjEgNDIuMDQ1NUMyMDYuMjI2IDQ1LjY3NDMgMTQ5LjUyMiAxNjkuOTY5IDQ2LjQ0NDggMTg1LjYxMlpNMjA3Ljg2MSA0Mi4wMjkxQzIwNy4yNTYgNDEuNzgzOSAxNDQuMzkgMzMuMjE4NyA4Mi4yNDI0IDczLjI0OThDNDMuNjQ5NiA5OC4wOTU2IDM4LjUzMzQgMTM0LjQ4MiA0MC4yOTg3IDE1OC43ODhDMTMwLjY0MyAxNDguNjIxIDIwNS44MDEgNDQuODg5NyAyMDcuODYxIDQyLjAyOTFaIiBmaWxsPSIjMDJDQTlCIi8+CjxwYXRoIGQ9Ik0yMDcuODYxIDQyLjAyOTFDMjA3LjI1NiA0MS43ODM5IDE0NC4zOSAzMy4yMTg3IDgyLjI0MjQgNzMuMjQ5OEM0My42NDk2IDk4LjA5NTYgMzguNTMzNCAxMzQuNDgyIDQwLjI5ODcgMTU4Ljc4OEMxMzAuNjQzIDE0OC42MjEgMjA1LjgwMSA0NC44ODk3IDIwNy44NjEgNDIuMDI5MVoiIGZpbGw9IiMwMkNBOUIiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80NzY5XzE1OTk2MSIgeDE9IjI1MCIgeTE9IjcuNTI1MDllLTA2IiB4Mj0iMy4wMDAwMSIgeTI9IjI1Mi41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNCMDJDMkQiLz4KPHN0b3Agb2Zmc2V0PSIwLjMyMTEzMSIgc3RvcC1jb2xvcj0iIzE3MzU1QSIvPgo8c3RvcCBvZmZzZXQ9IjAuNzUiIHN0b3AtY29sb3I9IiMxRTQ0NzQiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDQ3RTYxIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==",
2170
+ btcturk: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSJ3aGl0ZSIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNDc2OV8xNTk5NzgpIj4KPHBhdGggZD0iTTE0NC44NTIgMTg4LjY4MkMxMzQuOTQ3IDE5NS42ODYgMTI5LjA4NyAyMDQuNDQ3IDEzMS44MyAyMDguMjQzQzEzNC41NzMgMjEyLjA0IDE0NC43MTYgMjA5LjQ1NiAxNTQuNjIxIDIwMi40NjNDMTY0LjUyNyAxOTUuNDcxIDE3MC4zNjMgMTg2LjcxIDE2Ny42NDMgMTgyLjkwMkMxNjYuODA1IDE4MS43NjkgMTY1LjIyOSAxODEuMTQ1IDE2My4xNjcgMTgxLjE0NUMxNTguNjMzIDE4MS4xNDUgMTUxLjY2MyAxODMuODc3IDE0NC44NTIgMTg4LjY4MlpNOTAuNDUxOSAxNzMuNzIyQzcxLjMwOTkgMTgxLjY2NyA1OC4wMzg2IDE5My40NDIgNjAuNzkyNiAyMDAuMTI5QzYzLjU0NjYgMjA2LjgxNSA4MS4yOTQ2IDIwNS44NTIgMTAwLjQ1OSAxOTcuOTUzQzExOS42MjQgMTkwLjA1MyAxMzIuODM5IDE3OC4yNjcgMTMwLjA4NSAxNzEuNTM1QzEyOC44NDkgMTY4LjU0MyAxMjQuNjQ1IDE2Ny4wOTIgMTE4LjY2MSAxNjcuMDkyQzExMS4yMjYgMTY3LjA5MiAxMDEuMDQ5IDE2OS4zNTkgOTAuNDUxOSAxNzMuNzIyWk0xNzguMjE3IDE2NS43ODlDMTc0LjgxNyAxNzIuMjM3IDE3My43NzUgMTc4LjM0NiAxNzUuODQ5IDE3OS4zODlDMTc3LjkyMyAxODAuNDMxIDE4Mi4zMiAxNzYuMTI1IDE4NS42OTcgMTY5LjY3NkMxODkuMDc1IDE2My4yMjcgMTkwLjE0IDE1Ny4xMTkgMTg4LjA2NiAxNTYuMDc2QzE4Ny44NDkgMTU1Ljk2NCAxODcuNjA3IDE1NS45MDkgMTg3LjM2MyAxNTUuOTE3QzE4NS4wOTcgMTU1LjkxNyAxODEuMjQzIDE2MC4wMDkgMTc4LjIxNyAxNjUuNzg5Wk0xNTAuNTc1IDE0Ny45MjdDMTQ0LjAxMyAxNTEuNzEzIDE0MC41OTEgMTU4LjA1OSAxNDIuOTE0IDE2Mi4wOTRDMTQ1LjIzNyAxNjYuMTI5IDE1Mi40MzQgMTY2LjMyMSAxNTguOTk2IDE2Mi41MzZDMTY1LjU1OCAxNTguNzUxIDE2OC45ODEgMTUyLjQwNCAxNjYuNjU3IDE0OC4zNjlDMTY1LjQ0NSAxNDYuMjczIDE2Mi45MTcgMTQ1LjIwNyAxNTkuODU3IDE0NS4yMDdDMTU2LjU4NSAxNDUuMzAyIDE1My4zOTIgMTQ2LjIzOSAxNTAuNTg3IDE0Ny45MjdNMTc0Ljg0IDEzOS4zMjVDMTcyLjkzNiAxNDIuNjIzIDE3My4wNjEgMTQ2LjI3MyAxNzUuMTIzIDE0Ny40NjNDMTc3LjE4NiAxNDguNjUzIDE4MC40MDUgMTQ2Ljk1MyAxODIuMzA5IDE0My42NDNDMTg0LjIxMyAxNDAuMzM0IDE4NC4wODggMTM2LjY5NiAxODIuMDE0IDEzNS41MDZDMTgxLjU3IDEzNS4yNDggMTgxLjA2NSAxMzUuMTE1IDE4MC41NTIgMTM1LjEyMUMxNzguNjI1IDEzNS4xMjEgMTc2LjMzNiAxMzYuNzMgMTc0Ljg4NSAxMzkuMzI1TTE1MC40MDUgMTI1LjE3QzE1MC40MDUgMTI5LjExNCAxNTQuMDMyIDEzMi4zMjEgMTU4LjUwOSAxMzIuMzIxQzE2Mi45ODUgMTMyLjMyMSAxNjYuNjEyIDEyOS4xMTQgMTY2LjYxMiAxMjUuMTdDMTY2LjYxMiAxMjEuMjI2IDE2Mi45ODUgMTE4LjAxOSAxNTguNTA5IDExOC4wMTlDMTU0LjAzMiAxMTguMDE5IDE1MC40MDUgMTIxLjIxNSAxNTAuNDA1IDEyNS4xN1pNOTYuMzExMyAxMjUuMTdDOTYuMzExMyAxMzQuMDIxIDEwNi4yOTYgMTQxLjE5NSAxMTguNjE1IDE0MS4xOTVDMTMwLjkzNSAxNDEuMTk1IDE0MC44OTcgMTM0LjA2NyAxNDAuODk3IDEyNS4xN0MxNDAuODk3IDExNi4yNzMgMTMwLjkzNSAxMDkuMTMzIDExOC42MTUgMTA5LjEzM0MxMDYuMjk2IDEwOS4xMzMgOTYuMzExMyAxMTYuMzE5IDk2LjMxMTMgMTI1LjE3Wk0xNzUuMzUgMTAyLjUwM0MxNzMuMjg3IDEwMy42MzcgMTczLjE2MyAxMDcuMzQzIDE3NS4wNjcgMTEwLjY0MUMxNzYuOTcxIDExMy45MzkgMTgwLjE3OCAxMTUuNjYxIDE4Mi4yNTIgMTE0LjQ2QzE4NC4zMjYgMTEzLjI1OSAxODQuNDM5IDEwOS42MzIgMTgyLjUzNSAxMDYuMzIzQzE4MS4wMzkgMTAzLjczOSAxNzguNzM5IDEwMi4xMTggMTc2Ljg2OSAxMDIuMTE4QzE3Ni4zNTIgMTAyLjExNyAxNzUuODQ1IDEwMi4yNDkgMTc1LjM5NSAxMDIuNTAzTTE0My4xNjMgODcuOTA2QzE0MC44OTcgOTEuOTQwNyAxNDQuMjk3IDk4LjI4NzMgMTUwLjgyNSAxMDIuMDczQzE1Ny4zNTMgMTA1Ljg1OCAxNjQuNTgzIDEwNS42NjUgMTY2LjkwNyAxMDEuNjMxQzE2OS4yMyA5Ny41OTYgMTY1Ljc3MyA5MS4yNjA3IDE1OS4yNDUgODcuNDY0QzE1Ni40MzUgODUuNzc4NCAxNTMuMjM5IDg0Ljg0NTUgMTQ5Ljk2MyA4NC43NTUzQzE0Ni44OTIgODQuNzU1MyAxNDQuMzY1IDg1LjgwOTMgMTQzLjE2MyA4Ny45MDZaTTE3NS44MDMgNzAuNkMxNzMuNzQxIDcxLjczMzMgMTc0Ljc5NSA3Ny43OTY3IDE3OC4xNzIgODQuMkMxODEuNTQ5IDkwLjYwMzMgMTg1Ljk1OCA5NS4wMDA3IDE4OC4wMzIgOTMuOTEyN0MxOTAuMTA2IDkyLjgyNDcgMTg5LjAyOSA4Ni43MTYgMTg1LjY1MiA4MC4zMTI3QzE4Mi42MjYgNzQuNTMyNyAxNzguNzYxIDcwLjQ0MTMgMTc2LjUwNiA3MC40NDEzQzE3Ni4yNjMgNzAuNDQxMiAxNzYuMDIzIDcwLjQ5NTQgMTc1LjgwMyA3MC42Wk02MC43OTI2IDQ5LjkxNjdDNTguMDM4NiA1Ni42MDMzIDcxLjMyMTMgNjguNDM1MyA5MC40NTE5IDc2LjMzNDdDMTA5LjU4MyA4NC4yMzQgMTI3LjI5NyA4NS4yMDg3IDEzMC4wODUgNzguNTMzM0MxMzIuODczIDcxLjg1OCAxMTkuNTU2IDYwLjAwMzMgMTAwLjQyNSA1Mi4xMDRDODkuODI4NiA0Ny43MjkzIDc5LjY5NjYgNDUuNDc0IDcyLjIxNjYgNDUuNDc0QzY2LjIzMjYgNDUuNDc0IDYyLjAxNjYgNDYuOTM2IDYwLjc5MjYgNDkuOTE2N1pNMTMxLjcyOCA0MS43NTY3QzEyOS4wNDIgNDUuNTY0NyAxMzQuOTAxIDU0LjMxNCAxNDQuODA3IDYxLjMxOEMxNTQuNzEyIDY4LjMyMiAxNjQuOTIzIDcwLjkwNiAxNjcuNTk4IDY3LjA5OEMxNzAuMjczIDYzLjI5IDE2NC40MjUgNTQuNTQwNyAxNTQuNDk3IDQ3LjUzNjdDMTQ3LjY5NyA0Mi43MzEzIDE0MC43NjEgNDAgMTM2LjIwNSA0MEMxMzQuMTQyIDQwIDEzMi41NjcgNDAuNTY2NyAxMzEuNjcxIDQxLjc1NjciIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfNDc2OV8xNTk5NzgiPgo8cmVjdCB3aWR0aD0iMTI4LjY5IiBoZWlnaHQ9IjE3MCIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjQzMDEgNDApIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
2171
+ bybit: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTY4LjI2IDE0Mi45NDhWOTFIMTc4LjY0M1YxNDIuOTQ4SDE2OC4yNloiIGZpbGw9IiNGN0E2MDAiLz4KPHBhdGggZD0iTTQ3LjI1NzkgMTU4LjM3OEgyNVYxMDYuNDMxSDQ2LjM2MzhDNTYuNzQ2NCAxMDYuNDMxIDYyLjc5NDkgMTEyLjEyMyA2Mi43OTQ5IDEyMS4wMjNDNjIuNzk0OSAxMjYuNzg1IDU4LjkwODkgMTMwLjUxIDU2LjIxOTcgMTMxLjc1QzU5LjQzMTEgMTMzLjIwNyA2My41Mzg5IDEzNi40OTEgNjMuNTM4OSAxNDMuNDI0QzYzLjUzODkgMTUzLjEyNSA1Ni43NDY0IDE1OC4zNzggNDcuMjU3OSAxNTguMzc4Wk00NS41NDEzIDExNS40NzlIMzUuMzgyN1YxMjcuNDQ1SDQ1LjUzOUM0OS45NDQ4IDEyNy40NDUgNTIuNDA5OSAxMjUuMDM4IDUyLjQwOTkgMTIxLjQ1OUM1Mi40MDk5IDExNy44ODggNDkuOTQ3MSAxMTUuNDc5IDQ1LjU0MTMgMTE1LjQ3OVpNNDYuMjExMyAxMzYuNTY1SDM1LjM4NVYxNDkuMzM1SDQ2LjIxNTlDNTAuOTIyMSAxNDkuMzM1IDUzLjE1ODUgMTQ2LjQxNyA1My4xNTg1IDE0Mi45MTNDNTMuMTU4NSAxMzkuNDExIDUwLjkxNzQgMTM2LjU2NSA0Ni4yMTU5IDEzNi41NjVINDYuMjExM1pNOTUuMjA2OCAxMzcuMDc2VjE1OC4zNzhIODQuODk4VjEzNy4wNzZMNjguOTEyNyAxMDYuNDMxSDgwLjE5MThMOTAuMTI2MyAxMjcuMzcxTDk5LjkxMDYgMTA2LjQzMUgxMTEuMTg3TDk1LjIwNjggMTM3LjA3NlpNMTQwLjYyNCAxNTguMzc4SDExOC4zNjZWMTA2LjQzMUgxMzkuNzI3QzE1MC4xMSAxMDYuNDMxIDE1Ni4xNjEgMTEyLjEyMyAxNTYuMTYxIDEyMS4wMjNDMTU2LjE2MSAxMjYuNzg1IDE1Mi4yNzUgMTMwLjUxIDE0OS41ODUgMTMxLjc1QzE1Mi43OTcgMTMzLjIwNyAxNTYuOTA1IDEzNi40OTEgMTU2LjkwNSAxNDMuNDI0QzE1Ni45MDUgMTUzLjEyNSAxNTAuMTEyIDE1OC4zNzggMTQwLjYyNCAxNTguMzc4Wk0xMzguOTA3IDExNS40NzlIMTI4Ljc0OFYxMjcuNDQ1SDEzOC45MDdDMTQzLjMxMyAxMjcuNDQ1IDE0NS43NzggMTI1LjAzOCAxNDUuNzc4IDEyMS40NTlDMTQ1Ljc3OCAxMTcuODg4IDE0My4zMTMgMTE1LjQ3OSAxMzguOTA3IDExNS40NzlaTTEzOS41NzcgMTM2LjU2NUgxMjguNzQ2VjE0OS4zMzVIMTM5LjU3N0MxNDQuMjg1IDE0OS4zMzUgMTQ2LjUyMiAxNDYuNDE3IDE0Ni41MjIgMTQyLjkxM0MxNDYuNTIyIDEzOS40MTEgMTQ0LjI4NSAxMzYuNTY1IDEzOS41NzcgMTM2LjU2NVpNMjEyLjEwNiAxMTUuNDgxVjE1OC4zODNIMjAxLjcyM1YxMTUuNDc5SDE4Ny44MzNWMTA2LjQzMUgyMjZWMTE1LjQ3OUwyMTIuMTA2IDExNS40ODFaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
2172
+ coinbase: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSIjMDA1MkZGIi8+CjxwYXRoIGQ9Ik0xMjUuMTYgMTY3LjVDMTAxLjYzNSAxNjcuNSA4Mi41OCAxNDguNDggODIuNTggMTI1QzgyLjU4IDEwMS41MiAxMDEuNjMgODIuNSAxMjUuMTYgODIuNUMxMzUuMjA3IDgyLjUwMTggMTQ0LjkyOCA4Ni4wNTg0IDE1Mi42MDQgOTIuNTQwMUMxNjAuMjggOTkuMDIxOSAxNjUuNDE1IDEwOC4wMTEgMTY3LjEgMTE3LjkxNUgyMTBDMjA2LjM4IDc0LjI4NSAxNjkuOCA0MCAxMjUuMTYgNDBDNzguMTQ1IDQwIDQwIDc4LjA3NSA0MCAxMjVDNDAgMTcxLjkyNSA3OC4xNDUgMjEwIDEyNS4xNiAyMTBDMTY5Ljc5NSAyMTAgMjA2LjM4IDE3NS43MTUgMjEwIDEzMi4wODVIMTY3LjFDMTY1LjQxNSAxNDEuOTg5IDE2MC4yOCAxNTAuOTc4IDE1Mi42MDQgMTU3LjQ2QzE0NC45MjggMTYzLjk0MiAxMzUuMjA3IDE2Ny40OTggMTI1LjE2IDE2Ny41WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
2173
+ gateio: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTI1IDE3MS43MTNDOTkuMTcwMyAxNzEuNzEzIDc4LjI4NjYgMTUwLjgzIDc4LjI4NjYgMTI1Qzc4LjI4NjYgOTkuMTcwMyA5OS4xNzAzIDc4LjI4NjYgMTI1IDc4LjI4NjZWNDBDNzguMTAzNSA0MCA0MCA3OC4xMDM1IDQwIDEyNUM0MCAxNzEuODk3IDc4LjEwMzUgMjEwIDEyNSAyMTBDMTcxLjg5NyAyMTAgMjEwIDE3MS44OTcgMjEwIDEyNUgxNzEuNzEzQzE3MS43MTMgMTUwLjgzIDE1MC44MyAxNzEuNzEzIDEyNSAxNzEuNzEzWiIgZmlsbD0iIzIzNTRFNiIvPgo8cGF0aCBkPSJNMTcxLjcxMyA3OC4yODY2SDEyNVYxMjVIMTcxLjcxM1Y3OC4yODY2WiIgZmlsbD0iIzE3RTZBMSIvPgo8L3N2Zz4K",
2174
+ htx: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTQ0LjQ1IDkyLjI4OTJDMTQ0LjQ1IDY3Ljg5OCAxMzIuNTY3IDQ2Ljg5MTggMTIzLjUxNiA0MC4wNzM4QzEyMy41MTYgNDAuMDczOCAxMjIuODIgMzkuNjg5NyAxMjIuODkyIDQwLjY3NEMxMjIuMTQ4IDg3Ljc5OTkgOTguMDY4NyAxMDAuNTcyIDg0Ljg0MDggMTE3Ljc2MUM1NC4zMDM5IDE1Ny40NjggODIuNjgwMiAyMDAuOTkzIDExMS42MzMgMjA5LjAzNkMxMjcuNzY1IDIxMy41NDkgMTA3Ljg4OCAyMDEuMDY1IDEwNS4zMTkgMTc0LjcyOUMxMDIuMTc0IDE0Mi45NDQgMTQ0LjQ1IDExOC42NDkgMTQ0LjQ1IDkyLjI4OTJaIiBmaWxsPSIjMUIyMTQzIi8+CjxwYXRoIGQ9Ik0xNTguMzI2IDEwOC4zNUMxNTguMTM0IDEwOC4yMyAxNTcuODcgMTA4LjEzNCAxNTcuNzAyIDEwOC40NDZDMTU3LjE5OCAxMTQuMzc2IDE1MS4xNDggMTI3LjA1MiAxNDMuNDY2IDEzOC43MTlDMTE3LjQxOCAxNzguMjM1IDEzMi4yNTUgMTk3LjI5NyAxNDAuNjA5IDIwNy41NDhDMTQ1LjQ1OSAyMTMuNDc3IDE0MC42MDkgMjA3LjU0OCAxNTIuNzA5IDIwMS40NzRDMTY3LjY2NSAxOTIuMzk5IDE3Ny4zNjQgMTc2LjY5OCAxNzguODA0IDE1OS4yNjlDMTgxLjE4MSAxMzEuMTgxIDE2NC4zMjggMTEzLjQ4OCAxNTguMzI2IDEwOC4zNVoiIGZpbGw9IiMyQ0E2RTAiLz4KPC9zdmc+Cg==",
2175
+ kraken: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSIjNTg0MUQ4Ii8+CjxwYXRoIGQ9Ik0xMjYuMTMgNTcuMDQzNUM3OC44MTkxIDU3LjA0MzUgNDAgOTUuMjU2IDQwIDE0My4xNzNWMTgwLjE3M0M0MCAxODYuODQ1IDQ1LjQ1ODkgMTkyLjMwNCA1Mi4xMzEgMTkyLjMwNEM1OC44MDMgMTkyLjMwNCA2NC4yNjE5IDE4Ni44NDUgNjQuMjYxOSAxODAuMTczVjE0My4xNzNDNjQuMjYxOSAxMzYuNTAxIDY5LjcyMDkgMTMxLjA0MiA3Ni4zOTI5IDEzMS4wNDJDODMuMDY0OSAxMzEuMDQyIDg4LjUyMzkgMTM2LjUwMSA4OC41MjM5IDE0My4xNzNWMTgwLjE3M0M4OC41MjM5IDE4Ni44NDUgOTMuOTgyOCAxOTIuMzA0IDEwMC42NTUgMTkyLjMwNEMxMDcuMzI3IDE5Mi4zMDQgMTEyLjc4NiAxODYuODQ1IDExMi43ODYgMTgwLjE3M1YxNDMuMTczQzExMi43ODYgMTM2LjUwMSAxMTguMjQ1IDEzMS4wNDIgMTI0LjkxNyAxMzEuMDQyQzEzMS41ODkgMTMxLjA0MiAxMzcuMDQ4IDEzNi41MDEgMTM3LjA0OCAxNDMuMTczVjE4MC4xNzNDMTM3LjA0OCAxODYuODQ1IDE0Mi41MDcgMTkyLjMwNCAxNDkuMTc5IDE5Mi4zMDRDMTU1Ljg1MSAxOTIuMzA0IDE2MS4zMSAxODYuODQ1IDE2MS4zMSAxODAuMTczVjE0My4xNzNDMTYxLjMxIDEzNi41MDEgMTY2Ljc2OSAxMzEuMDQyIDE3My40NDEgMTMxLjA0MkMxODAuMTEzIDEzMS4wNDIgMTg1LjU3MiAxMzYuNTAxIDE4NS41NzIgMTQzLjE3M1YxODAuMTczQzE4NS41NzIgMTg2Ljg0NSAxOTEuMDMxIDE5Mi4zMDQgMTk3LjcwMyAxOTIuMzA0QzIwNC4zNzUgMTkyLjMwNCAyMDkuODM0IDE4Ni44NDUgMjA5LjgzNCAxODAuMTczVjE0My4xNzNDMjEyLjg2NiA5NS4yNTYgMTc0LjA0NyA1Ny4wNDM1IDEyNi4xMyA1Ny4wNDM1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
2176
+ kucoin: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBmaWxsPSIjMDBCNDdEIi8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80NzY5XzE2MDAyNCkiPgo8cGF0aCBkPSJNMTc3Ljg2MyAxNDMuNTFMMTQ2LjAwNyAxNzUuMjE3TDk1LjE1NSAxMjQuOTExTDE0NS45MSA3NC42ODU3TDE3Ny44NjMgMTA2LjQ4OUMxODMuNTMgMTEyLjEwOCAxOTIuNjgxIDExMi4xMDggMTk4LjMgMTA2LjQ0QzIwMy45MTggMTAwLjc3MiAyMDMuODkzIDkxLjYyMTYgMTk4LjI1MSA4Ni4wMDM1TDE1Ni4yNDkgNDQuMTk4M0MxNTAuNTgyIDM4LjU4MDIgMTQxLjQzIDM4LjYwNDcgMTM1LjgxMiA0NC4yNDczQzEzNS43ODkgNDQuMjcwNCAxMzQuNzg4IDQ1LjEwMiAxMzQuMzQgNDUuNTQ3NEw3NS45MDEgMTAzLjM1OFY2OC44MDUyQzc1LjkwMSA2MC44MzIzIDY5LjQyNDEgNTQuMzU1NCA2MS40NTA1IDU0LjM1NTRDNTMuNDc2OSA1NC4zNTU0IDQ3LjAyNDUgNjAuODMyMyA0NyA2OC44MDUyVjE4MS4wOTlDNDcgMTg5LjA3MyA1My40NzY5IDE5NS41NSA2MS40NTA1IDE5NS41NUM2OS40MjQxIDE5NS41NSA3NS45MDEgMTg5LjA3IDc1LjkwMSAxODEuMDk5VjE0Ni40N0wxMzQuMzQgMjA0LjI4MUMxMzQuNTkyIDIwNC41MzIgMTM1LjU3IDIwNS41MDggMTM1LjgxMiAyMDUuNzUzQzE0MS40MyAyMTEuMzk3IDE1MC41ODIgMjExLjQyIDE1Ni4yNDkgMjA1LjgwMkwxOTguMjUxIDE2My45OTZDMjAzLjg5NSAxNTguMzc4IDIwMy45MTggMTQ5LjIyNyAxOTguMyAxNDMuNTU5QzE5Mi42NTcgMTM3LjkyIDE4My41MDYgMTM3Ljg5MiAxNzcuODYzIDE0My41MVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNDYuMTQxIDEzOS41ODVDMTU0LjE4OSAxMzkuNTg1IDE2MC43MTQgMTMzLjA2MSAxNjAuNzE0IDEyNS4wMTJDMTYwLjcxNCAxMTYuOTY0IDE1NC4xODkgMTEwLjQzOSAxNDYuMTQxIDExMC40MzlDMTM4LjA5MiAxMTAuNDM5IDEzMS41NjggMTE2Ljk2NCAxMzEuNTY4IDEyNS4wMTJDMTMxLjU2OCAxMzMuMDYxIDEzOC4wOTIgMTM5LjU4NSAxNDYuMTQxIDEzOS41ODVaIiBmaWxsPSJibGFjayIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzQ3NjlfMTYwMDI0Ij4KPHJlY3Qgd2lkdGg9IjE1NS40OTgiIGhlaWdodD0iMTcwIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDcgNDApIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="
2177
+ };
2178
+ var EXCHANGE_LOGO_ALIASES = {
2179
+ gate: "gateio"
2180
+ };
2181
+ function normalize(value) {
2182
+ return value.toLowerCase().replace(/[^a-z0-9]/g, "");
2183
+ }
2184
+ function getLogoSource(value) {
2185
+ const key = normalize(value);
2186
+ return EXCHANGE_LOGO_SOURCES[EXCHANGE_LOGO_ALIASES[key] ?? key] ?? null;
2187
+ }
2188
+ function getExchangeLogoSrc(name, connection) {
2189
+ return getLogoSource(name) ?? getLogoSource(connection ?? "");
2190
+ }
2191
+ function getExchangeLogo(name, connection) {
2192
+ const src = getExchangeLogoSrc(name, connection);
2193
+ return src ? /* @__PURE__ */ jsx16("img", { src, alt: "", loading: "lazy", decoding: "async" }) : null;
2194
+ }
2195
+
2196
+ // src/components/ui/BrandIcons.tsx
2197
+ import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
2198
+ function VisaMark() {
2199
+ return /* @__PURE__ */ jsxs15(
2200
+ "svg",
2201
+ {
2202
+ width: "38",
2203
+ height: "24",
2204
+ viewBox: "0 0 38 24",
2205
+ fill: "none",
2206
+ xmlns: "http://www.w3.org/2000/svg",
2207
+ "aria-hidden": "true",
2208
+ children: [
2209
+ /* @__PURE__ */ jsx17("rect", { width: "37.2537", height: "24", rx: "4.2985", fill: "white" }),
2210
+ /* @__PURE__ */ jsx17(
2211
+ "path",
2212
+ {
2213
+ d: "M18.3993 8.08878L16.6616 16.2114H14.5605L16.2984 8.08878H18.3993ZM27.2397 13.3336L28.3459 10.2833L28.9824 13.3336H27.2397ZM29.584 16.2114H31.5276L29.8316 8.08878H28.0376C27.6345 8.08878 27.2944 8.32324 27.143 8.6847L23.9906 16.2114H26.1972L26.6352 14.9985H29.331L29.584 16.2114ZM24.1001 13.5593C24.1091 11.4155 21.1354 11.2975 21.156 10.3398C21.1622 10.048 21.4401 9.7385 22.0471 9.65906C22.3486 9.61972 23.1777 9.58964 24.1192 10.0228L24.4878 8.30036C23.9821 8.1168 23.3314 7.94019 22.5221 7.94019C20.4454 7.94019 18.9836 9.04437 18.9713 10.6254C18.9582 11.7947 20.0148 12.4471 20.811 12.8359C21.6295 13.2341 21.9046 13.4891 21.901 13.8452C21.8956 14.3905 21.248 14.6306 20.6439 14.6401C19.5873 14.6568 18.9741 14.355 18.4854 14.1272L18.1047 15.907C18.5954 16.1325 19.5017 16.3284 20.4418 16.3384C22.6489 16.3384 24.0929 15.2478 24.1001 13.5593ZM15.3968 8.08878L11.9925 16.2114H9.77099L8.09583 9.72898C7.99402 9.32973 7.90559 9.18371 7.59631 9.01532C7.09165 8.74152 6.25741 8.48418 5.52344 8.32479L5.57357 8.08878H9.14885C9.6044 8.08878 10.0145 8.39214 10.1178 8.91685L11.0027 13.6174L13.1892 8.08878H15.3968Z",
2214
+ fill: "#1434CB"
2215
+ }
2216
+ )
2217
+ ]
2218
+ }
2219
+ );
2220
+ }
2221
+ function MastercardMark() {
2222
+ return /* @__PURE__ */ jsxs15(
2223
+ "svg",
2224
+ {
2225
+ width: "38",
2226
+ height: "24",
2227
+ viewBox: "0 0 38 24",
2228
+ fill: "none",
2229
+ xmlns: "http://www.w3.org/2000/svg",
2230
+ "aria-hidden": "true",
2231
+ children: [
2232
+ /* @__PURE__ */ jsx17("rect", { width: "37.2537", height: "24", rx: "4.2985", fill: "white" }),
2233
+ /* @__PURE__ */ jsx17(
2234
+ "path",
2235
+ {
2236
+ d: "M21.303 7.07157H15.8179V16.9284H21.303V7.07157Z",
2237
+ fill: "#FF5F00"
2238
+ }
2239
+ ),
2240
+ /* @__PURE__ */ jsx17(
2241
+ "path",
2242
+ {
2243
+ d: "M16.1662 12C16.1653 11.0507 16.3804 10.1136 16.7953 9.25979C17.2101 8.40593 17.8137 7.65764 18.5605 7.07156C17.6357 6.34468 16.5251 5.89265 15.3556 5.76713C14.1861 5.6416 13.0048 5.84765 11.9469 6.36172C10.8889 6.87579 9.99698 7.67715 9.37294 8.67419C8.7489 9.67124 8.41797 10.8237 8.41797 12C8.41797 13.1762 8.7489 14.3287 9.37294 15.3257C9.99698 16.3228 10.8889 17.1241 11.9469 17.6382C13.0048 18.1523 14.1861 18.3583 15.3556 18.2328C16.5251 18.1073 17.6357 17.6553 18.5605 16.9284C17.8137 16.3423 17.2101 15.594 16.7953 14.7401C16.3805 13.8863 16.1653 12.9492 16.1662 12Z",
2244
+ fill: "#EB001B"
2245
+ }
2246
+ ),
2247
+ /* @__PURE__ */ jsx17(
2248
+ "path",
2249
+ {
2250
+ d: "M28.7026 12C28.7027 13.1762 28.3718 14.3287 27.7478 15.3257C27.1238 16.3228 26.2318 17.1241 25.1739 17.6382C24.116 18.1523 22.9348 18.3583 21.7653 18.2328C20.5958 18.1073 19.4852 17.6553 18.5605 16.9284C19.3066 16.3417 19.9097 15.5933 20.3245 14.7396C20.7392 13.8858 20.9547 12.9491 20.9547 12C20.9547 11.0508 20.7392 10.1141 20.3245 9.26037C19.9097 8.40665 19.3066 7.65824 18.5605 7.07156C19.4852 6.34468 20.5958 5.89265 21.7653 5.76712C22.9348 5.6416 24.116 5.84765 25.1739 6.36173C26.2318 6.87581 27.1238 7.67717 27.7478 8.67421C28.3718 9.67126 28.7027 10.8238 28.7026 12Z",
2251
+ fill: "#F79E1B"
2252
+ }
2253
+ ),
2254
+ /* @__PURE__ */ jsx17(
2255
+ "path",
2256
+ {
2257
+ d: "M28.1046 15.8844V15.6826H28.1859V15.6415H27.9787V15.6826H28.0601V15.8844H28.1046ZM28.5069 15.8844V15.6411H28.4434L28.3703 15.8084L28.2972 15.6411H28.2337V15.8844H28.2785V15.7009L28.347 15.8591H28.3936L28.4621 15.7005V15.8844H28.5069Z",
2258
+ fill: "#F79E1B"
2259
+ }
2260
+ )
2261
+ ]
2262
+ }
2263
+ );
2264
+ }
2265
+ function AmexMark() {
2266
+ return /* @__PURE__ */ jsxs15(
2267
+ "svg",
2268
+ {
2269
+ width: "38",
2270
+ height: "24",
2271
+ viewBox: "0 0 38 24",
2272
+ fill: "none",
2273
+ xmlns: "http://www.w3.org/2000/svg",
2274
+ "aria-hidden": "true",
2275
+ children: [
2276
+ /* @__PURE__ */ jsx17("rect", { width: "37.2537", height: "24", rx: "4.2985", fill: "#006FCF" }),
2277
+ /* @__PURE__ */ jsx17(
2278
+ "path",
2279
+ {
2280
+ fillRule: "evenodd",
2281
+ clipRule: "evenodd",
2282
+ d: "M37.268 4.34531H34.1845L32.5727 8.9706L30.8908 4.34531H27.7373V11.5472L24.5136 4.34531H21.9208L18.6971 11.7036H20.9395L21.5702 10.232H24.9341L25.5648 11.7036H29.7696V6.58776L31.6617 11.7036H33.4136L35.3057 6.58776V11.7036H37.268V12.8248H34.675L32.5727 15.1375L30.4003 12.8248H21.5003V20.1831H30.3303L32.5026 17.8004L34.675 20.1831H37.268V21.0939H34.1845L32.5026 19.272L30.8206 21.0939H20.379V12.6846H17.0151L21.2199 3.22388H25.2845L26.756 6.44759V3.22388H31.8019L32.6427 5.6767L33.4838 3.22388H37.268V4.34531ZM37.268 14.4366L35.3759 16.4689L37.268 18.5011V20.1831L33.8342 16.4689L37.268 12.8248V14.4366ZM27.7373 20.1831V18.4312H23.5325V17.3099H27.6671V15.628H23.5325V14.5068H27.7373V12.8248L31.2411 16.4689L27.7373 20.1831ZM22.2009 8.62005L23.1822 6.23742L24.1632 8.62005H22.2009Z",
2283
+ fill: "white"
2284
+ }
2285
+ )
2286
+ ]
2287
+ }
2288
+ );
2289
+ }
2290
+ function ExchangeBadgeImage({ name }) {
2291
+ const src = getExchangeLogoSrc(name);
2292
+ return src ? /* @__PURE__ */ jsx17("img", { src, alt: "", loading: "lazy", decoding: "async" }) : null;
2293
+ }
2294
+ function CardNetworkIcons() {
2295
+ return /* @__PURE__ */ jsxs15("span", { className: "rs-list-row-meta-icons rs-list-row-meta-icons--cards", children: [
2296
+ /* @__PURE__ */ jsx17("span", { className: "rs-card-network rs-card-network--amex", children: /* @__PURE__ */ jsx17(AmexMark, {}) }),
2297
+ /* @__PURE__ */ jsx17("span", { className: "rs-card-network rs-card-network--visa", children: /* @__PURE__ */ jsx17(VisaMark, {}) }),
2298
+ /* @__PURE__ */ jsx17("span", { className: "rs-card-network rs-card-network--mastercard", children: /* @__PURE__ */ jsx17(MastercardMark, {}) })
2299
+ ] });
2300
+ }
2301
+ CardNetworkIcons.displayName = "CardNetworkIcons";
2302
+ function ExchangeBadgeIcons() {
2303
+ return /* @__PURE__ */ jsxs15("span", { className: "rs-list-row-meta-icons rs-list-row-meta-icons--exchanges", children: [
2304
+ /* @__PURE__ */ jsx17("span", { children: /* @__PURE__ */ jsx17(ExchangeBadgeImage, { name: "Coinbase" }) }),
2305
+ /* @__PURE__ */ jsx17("span", { children: /* @__PURE__ */ jsx17(ExchangeBadgeImage, { name: "Binance" }) }),
2306
+ /* @__PURE__ */ jsx17("span", { children: /* @__PURE__ */ jsx17(ExchangeBadgeImage, { name: "Kraken" }) })
2307
+ ] });
2308
+ }
2309
+ ExchangeBadgeIcons.displayName = "ExchangeBadgeIcons";
2310
+
2064
2311
  // src/components/steps/ConnectStep.tsx
2065
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
2312
+ import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2066
2313
  function formatBalanceUsd(value) {
2067
2314
  if (!Number.isFinite(value) || value <= 0) return "$0.00";
2068
2315
  return `$${value.toFixed(2)}`;
2069
2316
  }
2070
2317
  function fiatIcon(name) {
2071
- if (name === "apple") return /* @__PURE__ */ jsx15(AppleIcon, {});
2072
- if (name === "bank") return /* @__PURE__ */ jsx15(BankIcon, {});
2073
- return /* @__PURE__ */ jsx15(CardIcon, {});
2318
+ if (name === "apple") return /* @__PURE__ */ jsx18(AppleIcon, {});
2319
+ if (name === "bank") return /* @__PURE__ */ jsx18(BankIcon, {});
2320
+ return /* @__PURE__ */ jsx18(CardIcon, {});
2321
+ }
2322
+ function fiatMeta(name) {
2323
+ if (name === "apple" || name === "bank") return void 0;
2324
+ return /* @__PURE__ */ jsx18(CardNetworkIcons, {});
2074
2325
  }
2075
2326
  function shorten(addr) {
2076
2327
  return addr.length > 12 ? `${addr.slice(0, 6)}...${addr.slice(-4)}` : addr;
2077
2328
  }
2078
2329
  function renderWalletLeading(row) {
2079
2330
  if (row.icon) {
2080
- return /* @__PURE__ */ jsx15(
2331
+ return /* @__PURE__ */ jsx18(
2081
2332
  "img",
2082
2333
  {
2083
2334
  src: row.icon,
@@ -2086,19 +2337,24 @@ function renderWalletLeading(row) {
2086
2337
  }
2087
2338
  );
2088
2339
  }
2089
- return /* @__PURE__ */ jsx15(WalletIcon, {});
2340
+ return /* @__PURE__ */ jsx18(WalletIcon, {});
2090
2341
  }
2091
- var TRANSFER_CRYPTO_LEADING = /* @__PURE__ */ jsx15(TransferCryptoIcon, {});
2092
- var WALLET_LEADING = /* @__PURE__ */ jsx15(WalletIcon, {});
2093
- var SMALL_SPINNER = /* @__PURE__ */ jsx15(Spinner, { className: "rs-spinner--sm" });
2094
- var CONNECT_META = /* @__PURE__ */ jsxs13(Fragment2, { children: [
2095
- /* @__PURE__ */ jsx15(WalletBadgeIcons, {}),
2096
- "+100 wallets"
2342
+ var TRANSFER_CRYPTO_LEADING = /* @__PURE__ */ jsx18(TransferCryptoIcon, {});
2343
+ var WALLET_LEADING = /* @__PURE__ */ jsx18(WalletIcon, {});
2344
+ var EXCHANGE_LEADING = /* @__PURE__ */ jsx18(UnplugIcon, {});
2345
+ var SMALL_SPINNER = /* @__PURE__ */ jsx18(Spinner, { className: "rs-spinner--sm" });
2346
+ var CONNECT_META = /* @__PURE__ */ jsxs16(Fragment2, { children: [
2347
+ /* @__PURE__ */ jsx18(WalletBadgeIcons, {}),
2348
+ "+100"
2349
+ ] });
2350
+ var EXCHANGE_META = /* @__PURE__ */ jsxs16(Fragment2, { children: [
2351
+ /* @__PURE__ */ jsx18(ExchangeBadgeIcons, {}),
2352
+ "+6"
2097
2353
  ] });
2098
2354
  var EXTRA_CHAIN_COUNT = Math.max(0, getSupportedChainIds().length - 3);
2099
- var CHAIN_BADGE_META = /* @__PURE__ */ jsxs13(Fragment2, { children: [
2100
- /* @__PURE__ */ jsx15(ChainBadgeIcons, {}),
2101
- EXTRA_CHAIN_COUNT > 0 ? `+${EXTRA_CHAIN_COUNT} chains` : "All chains"
2355
+ var CHAIN_BADGE_META = /* @__PURE__ */ jsxs16(Fragment2, { children: [
2356
+ /* @__PURE__ */ jsx18(ChainBadgeIcons, {}),
2357
+ EXTRA_CHAIN_COUNT > 0 ? `+${EXTRA_CHAIN_COUNT}` : null
2102
2358
  ] });
2103
2359
  function renderRowTrailing(state) {
2104
2360
  if (state === "loading") {
@@ -2122,7 +2378,8 @@ function ConnectStep({
2122
2378
  dappImports,
2123
2379
  onSelectDappImport,
2124
2380
  title = "Deposit",
2125
- subtitle
2381
+ subtitle,
2382
+ defaultMethodTab = "crypto"
2126
2383
  }) {
2127
2384
  const rows = walletRows ?? [];
2128
2385
  const handleConnect = onConnect ?? onRequestConnect;
@@ -2131,145 +2388,211 @@ function ConnectStep({
2131
2388
  );
2132
2389
  const showDappImports = (dappImports?.length ?? 0) > 0;
2133
2390
  const defaultSubtitle = onSelectTransferCrypto ? "Add money to your balance" : "Choose a wallet to continue";
2134
- return /* @__PURE__ */ jsxs13("div", { className: "rs-screen", children: [
2135
- /* @__PURE__ */ jsxs13("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
2136
- /* @__PURE__ */ jsx15(
2137
- BodyHeader,
2391
+ const cryptoRows = [];
2392
+ if (onSelectTransferCrypto) {
2393
+ cryptoRows.push(
2394
+ /* @__PURE__ */ jsx18(
2395
+ ListRow,
2138
2396
  {
2139
- icon: /* @__PURE__ */ jsx15(HandCoinsIcon, {}),
2140
- title,
2141
- subtitle: subtitle ?? defaultSubtitle
2142
- }
2143
- ),
2144
- /* @__PURE__ */ jsxs13("div", { className: "rs-list", children: [
2145
- onSelectTransferCrypto && /* @__PURE__ */ jsx15(
2146
- ListRow,
2147
- {
2148
- leading: TRANSFER_CRYPTO_LEADING,
2149
- title: "Transfer crypto",
2150
- subtitle: transferCryptoState === "error" ? transferCryptoErrorReason ?? "Couldn't prepare account \u2014 tap to retry" : "Instant - No limit",
2151
- meta: CHAIN_BADGE_META,
2152
- onClick: onSelectTransferCrypto
2153
- }
2154
- ),
2155
- fiatPaymentMethods && fiatPaymentMethods.length > 0 && onSelectFiatMethod ? fiatPaymentMethods.map((opt) => /* @__PURE__ */ jsx15(
2156
- ListRow,
2157
- {
2158
- leading: fiatIcon(opt.icon),
2159
- title: opt.label,
2160
- subtitle: opt.sublabel,
2161
- onClick: () => onSelectFiatMethod(opt.method)
2162
- },
2163
- opt.method
2164
- )) : onSelectPayWithCard && /* @__PURE__ */ jsx15(
2165
- ListRow,
2166
- {
2167
- leading: /* @__PURE__ */ jsx15(CardIcon, {}),
2168
- title: "Pay with Card",
2169
- subtitle: "Buy crypto with card or bank",
2170
- onClick: onSelectPayWithCard
2171
- }
2172
- ),
2173
- onSelectFundFromExchange && /* @__PURE__ */ jsx15(
2174
- ListRow,
2175
- {
2176
- leading: /* @__PURE__ */ jsx15(BankIcon, {}),
2177
- title: "Fund from Exchange",
2178
- subtitle: "Use Coinbase, Binance, MetaMask\u2026",
2179
- onClick: onSelectFundFromExchange
2180
- }
2181
- ),
2182
- rows.map((row) => {
2183
- const collapseToExternal = Boolean(onSelectTransferCrypto) && row.kind !== "solana";
2184
- const subtitleText = row.state === "loading" ? "Preparing\u2026" : row.state === "error" ? row.errorReason ?? "Couldn't prepare wallet \u2014 tap to retry" : shorten(row.address);
2185
- return /* @__PURE__ */ jsx15(
2397
+ leading: TRANSFER_CRYPTO_LEADING,
2398
+ title: "Transfer crypto",
2399
+ subtitle: transferCryptoState === "error" ? transferCryptoErrorReason ?? "Couldn't prepare account \u2014 tap to retry" : "Instant - No limit",
2400
+ meta: CHAIN_BADGE_META,
2401
+ onClick: onSelectTransferCrypto
2402
+ },
2403
+ "transfer-crypto"
2404
+ )
2405
+ );
2406
+ }
2407
+ for (const row of rows) {
2408
+ const collapseToExternal = Boolean(onSelectTransferCrypto) && row.kind !== "solana";
2409
+ const subtitleText = row.state === "loading" ? "Preparing\u2026" : row.state === "error" ? row.errorReason ?? "Couldn't prepare wallet \u2014 tap to retry" : shorten(row.address);
2410
+ cryptoRows.push(
2411
+ /* @__PURE__ */ jsx18(
2412
+ ListRow,
2413
+ {
2414
+ leading: renderWalletLeading(row),
2415
+ title: collapseToExternal ? "External wallet" : row.label,
2416
+ subtitle: subtitleText,
2417
+ onClick: () => onConfirmWallet?.(row.id),
2418
+ disabled: row.state === "loading",
2419
+ trailing: renderRowTrailing(row.state)
2420
+ },
2421
+ row.id
2422
+ )
2423
+ );
2424
+ }
2425
+ if (!hasReownWallet && handleConnect) {
2426
+ cryptoRows.push(
2427
+ /* @__PURE__ */ jsx18(
2428
+ ListRow,
2429
+ {
2430
+ leading: WALLET_LEADING,
2431
+ title: "Connect wallet",
2432
+ subtitle: "Instant - No limit",
2433
+ meta: CONNECT_META,
2434
+ onClick: handleConnect
2435
+ },
2436
+ "connect-wallet"
2437
+ )
2438
+ );
2439
+ }
2440
+ if (onSelectFundFromExchange) {
2441
+ cryptoRows.push(
2442
+ /* @__PURE__ */ jsx18(
2443
+ ListRow,
2444
+ {
2445
+ leading: EXCHANGE_LEADING,
2446
+ title: "Connect exchange",
2447
+ subtitle: "Instant - No limit",
2448
+ meta: EXCHANGE_META,
2449
+ onClick: onSelectFundFromExchange
2450
+ },
2451
+ "connect-exchange"
2452
+ )
2453
+ );
2454
+ }
2455
+ if (showDappImports) {
2456
+ for (const row of dappImports ?? []) {
2457
+ if (!hasReownWallet) {
2458
+ cryptoRows.push(
2459
+ /* @__PURE__ */ jsx18(
2186
2460
  ListRow,
2187
2461
  {
2188
- leading: renderWalletLeading(row),
2189
- title: collapseToExternal ? "External wallet" : row.label,
2190
- subtitle: subtitleText,
2191
- onClick: () => onConfirmWallet?.(row.id),
2192
- disabled: row.state === "loading",
2193
- trailing: renderRowTrailing(row.state)
2462
+ leading: row.icon,
2463
+ title: row.label,
2464
+ subtitle: "Connect wallet to view balance",
2465
+ onClick: handleConnect,
2466
+ disabled: !handleConnect
2194
2467
  },
2195
2468
  row.id
2196
- );
2197
- }),
2198
- !hasReownWallet && handleConnect && /* @__PURE__ */ jsx15(
2199
- ListRow,
2200
- {
2201
- leading: WALLET_LEADING,
2202
- title: "Connect wallet",
2203
- subtitle: "Instant - No limit",
2204
- meta: CONNECT_META,
2205
- onClick: handleConnect
2206
- }
2207
- ),
2208
- showDappImports && dappImports?.map((row) => {
2209
- if (!hasReownWallet) {
2210
- return /* @__PURE__ */ jsx15(
2211
- ListRow,
2212
- {
2213
- leading: row.icon,
2214
- title: row.label,
2215
- subtitle: "Connect wallet to view balance",
2216
- onClick: handleConnect,
2217
- disabled: !handleConnect
2218
- },
2219
- row.id
2220
- );
2221
- }
2222
- if (row.status === "loading" || row.status === "needs-connect") {
2223
- return /* @__PURE__ */ jsx15(
2224
- ListRow,
2225
- {
2226
- leading: row.icon,
2227
- title: row.label,
2228
- subtitle: "Checking balance\u2026",
2229
- disabled: true,
2230
- trailing: SMALL_SPINNER
2231
- },
2232
- row.id
2233
- );
2234
- }
2235
- if (row.status.enabled) {
2236
- return /* @__PURE__ */ jsx15(
2237
- ListRow,
2238
- {
2239
- leading: row.icon,
2240
- title: row.label,
2241
- subtitle: formatBalanceUsd(row.status.balanceUsd),
2242
- onClick: () => onSelectDappImport?.(row.id)
2243
- },
2244
- row.id
2245
- );
2246
- }
2247
- if (row.status.retryable) {
2248
- return /* @__PURE__ */ jsx15(
2249
- ListRow,
2250
- {
2251
- leading: row.icon,
2252
- title: row.label,
2253
- subtitle: row.status.reason,
2254
- onClick: () => onSelectDappImport?.(row.id)
2255
- },
2256
- row.id
2257
- );
2258
- }
2259
- return /* @__PURE__ */ jsx15(
2469
+ )
2470
+ );
2471
+ continue;
2472
+ }
2473
+ if (row.status === "loading" || row.status === "needs-connect") {
2474
+ cryptoRows.push(
2475
+ /* @__PURE__ */ jsx18(
2476
+ ListRow,
2477
+ {
2478
+ leading: row.icon,
2479
+ title: row.label,
2480
+ subtitle: "Checking balance\u2026",
2481
+ disabled: true,
2482
+ trailing: SMALL_SPINNER
2483
+ },
2484
+ row.id
2485
+ )
2486
+ );
2487
+ continue;
2488
+ }
2489
+ if (row.status.enabled) {
2490
+ cryptoRows.push(
2491
+ /* @__PURE__ */ jsx18(
2492
+ ListRow,
2493
+ {
2494
+ leading: row.icon,
2495
+ title: row.label,
2496
+ subtitle: formatBalanceUsd(row.status.balanceUsd),
2497
+ onClick: () => onSelectDappImport?.(row.id)
2498
+ },
2499
+ row.id
2500
+ )
2501
+ );
2502
+ continue;
2503
+ }
2504
+ if (row.status.retryable) {
2505
+ cryptoRows.push(
2506
+ /* @__PURE__ */ jsx18(
2260
2507
  ListRow,
2261
2508
  {
2262
2509
  leading: row.icon,
2263
2510
  title: row.label,
2264
2511
  subtitle: row.status.reason,
2265
- disabled: true
2512
+ onClick: () => onSelectDappImport?.(row.id)
2266
2513
  },
2267
2514
  row.id
2268
- );
2269
- })
2270
- ] })
2515
+ )
2516
+ );
2517
+ continue;
2518
+ }
2519
+ cryptoRows.push(
2520
+ /* @__PURE__ */ jsx18(
2521
+ ListRow,
2522
+ {
2523
+ leading: row.icon,
2524
+ title: row.label,
2525
+ subtitle: row.status.reason,
2526
+ disabled: true
2527
+ },
2528
+ row.id
2529
+ )
2530
+ );
2531
+ }
2532
+ }
2533
+ const cashRows = [];
2534
+ if (fiatPaymentMethods && fiatPaymentMethods.length > 0 && onSelectFiatMethod) {
2535
+ for (const opt of fiatPaymentMethods) {
2536
+ cashRows.push(
2537
+ /* @__PURE__ */ jsx18(
2538
+ ListRow,
2539
+ {
2540
+ leading: fiatIcon(opt.icon),
2541
+ title: opt.label,
2542
+ subtitle: opt.sublabel,
2543
+ meta: fiatMeta(opt.icon),
2544
+ onClick: () => onSelectFiatMethod(opt.method)
2545
+ },
2546
+ opt.method
2547
+ )
2548
+ );
2549
+ }
2550
+ } else if (onSelectPayWithCard) {
2551
+ cashRows.push(
2552
+ /* @__PURE__ */ jsx18(
2553
+ ListRow,
2554
+ {
2555
+ leading: /* @__PURE__ */ jsx18(CardIcon, {}),
2556
+ title: "Debit/Credit card",
2557
+ subtitle: "Instant - $10,000 limit",
2558
+ meta: /* @__PURE__ */ jsx18(CardNetworkIcons, {}),
2559
+ onClick: onSelectPayWithCard
2560
+ },
2561
+ "pay-with-card"
2562
+ )
2563
+ );
2564
+ }
2565
+ const hasCrypto = cryptoRows.length > 0;
2566
+ const hasCash = cashRows.length > 0;
2567
+ const showToggle = hasCrypto && hasCash;
2568
+ const [tab, setTab] = useState(defaultMethodTab);
2569
+ const activeTab = showToggle ? tab : hasCash && !hasCrypto ? "cash" : "crypto";
2570
+ const activeRows = activeTab === "cash" ? cashRows : cryptoRows;
2571
+ return /* @__PURE__ */ jsxs16("div", { className: "rs-screen", children: [
2572
+ /* @__PURE__ */ jsxs16("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
2573
+ /* @__PURE__ */ jsx18(
2574
+ BodyHeader,
2575
+ {
2576
+ icon: /* @__PURE__ */ jsx18(HandCoinsIcon, {}),
2577
+ title,
2578
+ subtitle: subtitle ?? defaultSubtitle,
2579
+ aside: showToggle ? /* @__PURE__ */ jsx18(
2580
+ SegmentedToggle,
2581
+ {
2582
+ ariaLabel: "Deposit method type",
2583
+ value: activeTab,
2584
+ onChange: setTab,
2585
+ options: [
2586
+ { value: "crypto", label: "Crypto" },
2587
+ { value: "cash", label: "Cash" }
2588
+ ]
2589
+ }
2590
+ ) : void 0
2591
+ }
2592
+ ),
2593
+ /* @__PURE__ */ jsx18("div", { className: "rs-list", children: activeRows })
2271
2594
  ] }),
2272
- onDisconnect && hasReownWallet && /* @__PURE__ */ jsx15("div", { className: "rs-screen-tight-row", children: /* @__PURE__ */ jsx15(
2595
+ onDisconnect && hasReownWallet && /* @__PURE__ */ jsx18("div", { className: "rs-screen-tight-row", children: /* @__PURE__ */ jsx18(
2273
2596
  "button",
2274
2597
  {
2275
2598
  type: "button",
@@ -2278,17 +2601,16 @@ function ConnectStep({
2278
2601
  children: "Disconnect wallet"
2279
2602
  }
2280
2603
  ) }),
2281
- /* @__PURE__ */ jsx15(PoweredBy, {})
2604
+ /* @__PURE__ */ jsx18(PoweredBy, {})
2282
2605
  ] });
2283
2606
  }
2284
2607
  ConnectStep.displayName = "ConnectStep";
2285
2608
 
2286
2609
  // src/components/steps/ProcessingStep.tsx
2287
- import { useCallback as useCallback3, useEffect as useEffect4, useRef as useRef4, useState as useState2 } from "react";
2288
- import { formatUnits } from "viem";
2610
+ import { useCallback as useCallback3, useEffect as useEffect5, useRef as useRef4, useState as useState5 } from "react";
2289
2611
 
2290
2612
  // src/components/ui/Button.tsx
2291
- import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
2613
+ import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2292
2614
  function Button({
2293
2615
  children,
2294
2616
  variant = "accent",
@@ -2308,19 +2630,19 @@ function Button({
2308
2630
  className
2309
2631
  ].filter(Boolean).join(" ");
2310
2632
  const showInlineLoadingText = loading && loadingText !== void 0;
2311
- return /* @__PURE__ */ jsx16(
2633
+ return /* @__PURE__ */ jsx19(
2312
2634
  "button",
2313
2635
  {
2314
2636
  className: classes,
2315
2637
  disabled: disabled || loading,
2316
2638
  "aria-busy": loading || void 0,
2317
2639
  ...props,
2318
- children: showInlineLoadingText ? /* @__PURE__ */ jsxs14("span", { className: "rs-button__loading-row", children: [
2319
- /* @__PURE__ */ jsx16(Spinner, { className: "rs-spinner--sm" }),
2320
- /* @__PURE__ */ jsx16("span", { children: loadingText })
2321
- ] }) : /* @__PURE__ */ jsxs14(Fragment3, { children: [
2322
- /* @__PURE__ */ jsx16("span", { className: loading ? "rs-button__content--hidden" : "", children }),
2323
- loading && /* @__PURE__ */ jsx16("span", { className: "rs-button__spinner", children: /* @__PURE__ */ jsx16(Spinner, { className: "rs-spinner--sm" }) })
2640
+ children: showInlineLoadingText ? /* @__PURE__ */ jsxs17("span", { className: "rs-button__loading-row", children: [
2641
+ /* @__PURE__ */ jsx19(Spinner, { className: "rs-spinner--sm" }),
2642
+ /* @__PURE__ */ jsx19("span", { children: loadingText })
2643
+ ] }) : /* @__PURE__ */ jsxs17(Fragment3, { children: [
2644
+ /* @__PURE__ */ jsx19("span", { className: loading ? "rs-button__content--hidden" : "", children }),
2645
+ loading && /* @__PURE__ */ jsx19("span", { className: "rs-button__spinner", children: /* @__PURE__ */ jsx19(Spinner, { className: "rs-spinner--sm" }) })
2324
2646
  ] })
2325
2647
  }
2326
2648
  );
@@ -2329,16 +2651,16 @@ Button.displayName = "Button";
2329
2651
 
2330
2652
  // src/components/ui/Tooltip.tsx
2331
2653
  import {
2332
- useState,
2654
+ useState as useState2,
2333
2655
  useRef as useRef3,
2334
2656
  useEffect as useEffect3,
2335
2657
  useCallback as useCallback2
2336
2658
  } from "react";
2337
2659
  import { createPortal as createPortal2 } from "react-dom";
2338
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
2660
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
2339
2661
  function Tooltip({ content, children, className }) {
2340
- const [open, setOpen] = useState(false);
2341
- const [position, setPosition] = useState(null);
2662
+ const [open, setOpen] = useState2(false);
2663
+ const [position, setPosition] = useState2(null);
2342
2664
  const triggerRef = useRef3(null);
2343
2665
  const bubbleRef = useRef3(null);
2344
2666
  const updatePosition = useCallback2(() => {
@@ -2376,7 +2698,7 @@ function Tooltip({ content, children, className }) {
2376
2698
  window.removeEventListener("resize", updatePosition);
2377
2699
  };
2378
2700
  }, [open, updatePosition]);
2379
- return /* @__PURE__ */ jsxs15(
2701
+ return /* @__PURE__ */ jsxs18(
2380
2702
  "span",
2381
2703
  {
2382
2704
  ref: triggerRef,
@@ -2384,7 +2706,7 @@ function Tooltip({ content, children, className }) {
2384
2706
  onMouseEnter: () => setOpen(true),
2385
2707
  onMouseLeave: () => setOpen(false),
2386
2708
  children: [
2387
- /* @__PURE__ */ jsx17(
2709
+ /* @__PURE__ */ jsx20(
2388
2710
  "span",
2389
2711
  {
2390
2712
  className: "rs-tooltip-trigger",
@@ -2406,7 +2728,7 @@ function Tooltip({ content, children, className }) {
2406
2728
  }
2407
2729
  ),
2408
2730
  open && position && typeof document !== "undefined" && createPortal2(
2409
- /* @__PURE__ */ jsx17(
2731
+ /* @__PURE__ */ jsx20(
2410
2732
  "span",
2411
2733
  {
2412
2734
  ref: bubbleRef,
@@ -2424,6 +2746,89 @@ function Tooltip({ content, children, className }) {
2424
2746
  }
2425
2747
  Tooltip.displayName = "Tooltip";
2426
2748
 
2749
+ // src/components/ui/FeesAccordion.tsx
2750
+ import { useState as useState3 } from "react";
2751
+ import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
2752
+ function FeesAccordion({ total, rows }) {
2753
+ const [open, setOpen] = useState3(false);
2754
+ const expandable = rows.length > 0;
2755
+ return /* @__PURE__ */ jsxs19("div", { className: "rs-fees-accordion", children: [
2756
+ /* @__PURE__ */ jsxs19(
2757
+ "button",
2758
+ {
2759
+ type: "button",
2760
+ className: "rs-fees-accordion-summary",
2761
+ "aria-expanded": expandable ? open : void 0,
2762
+ disabled: !expandable,
2763
+ onClick: () => expandable && setOpen((o) => !o),
2764
+ children: [
2765
+ /* @__PURE__ */ jsx21("span", { children: "Fees" }),
2766
+ /* @__PURE__ */ jsxs19("span", { className: "rs-review-detail-value", children: [
2767
+ /* @__PURE__ */ jsx21("span", { children: total }),
2768
+ expandable && /* @__PURE__ */ jsx21(
2769
+ "span",
2770
+ {
2771
+ className: `rs-fees-accordion-chevron${open ? " rs-fees-accordion-chevron--open" : ""}`,
2772
+ "aria-hidden": "true",
2773
+ children: /* @__PURE__ */ jsx21(ChevronDownIcon, {})
2774
+ }
2775
+ )
2776
+ ] })
2777
+ ]
2778
+ }
2779
+ ),
2780
+ expandable && open && /* @__PURE__ */ jsx21("div", { className: "rs-fees-accordion-rows", children: rows.map((row, i) => /* @__PURE__ */ jsxs19("div", { className: "rs-fees-accordion-row", children: [
2781
+ /* @__PURE__ */ jsx21("span", { children: row.label }),
2782
+ /* @__PURE__ */ jsx21("span", { className: "rs-review-detail-value", children: row.value })
2783
+ ] }, `${row.label}-${i}`)) })
2784
+ ] });
2785
+ }
2786
+ FeesAccordion.displayName = "FeesAccordion";
2787
+
2788
+ // src/components/steps/SwappedReceipt.tsx
2789
+ import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
2790
+ function SwappedReceipt({
2791
+ onrampMethod,
2792
+ amountPaid,
2793
+ depositedAmount,
2794
+ depositedIcon,
2795
+ feesTotal,
2796
+ feeRows,
2797
+ newLabel,
2798
+ onNewDeposit,
2799
+ onClose
2800
+ }) {
2801
+ return /* @__PURE__ */ jsxs20("div", { className: "rs-screen", children: [
2802
+ /* @__PURE__ */ jsxs20("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
2803
+ /* @__PURE__ */ jsx22(BodyHeader, { icon: /* @__PURE__ */ jsx22(CheckIcon, {}), title: "Deposit successful" }),
2804
+ /* @__PURE__ */ jsxs20("div", { className: "rs-review-details", children: [
2805
+ onrampMethod && /* @__PURE__ */ jsxs20("div", { className: "rs-review-detail-row", children: [
2806
+ /* @__PURE__ */ jsx22("span", { children: "Onramp method" }),
2807
+ /* @__PURE__ */ jsx22("span", { className: "rs-review-detail-value", children: onrampMethod })
2808
+ ] }),
2809
+ amountPaid && /* @__PURE__ */ jsxs20("div", { className: "rs-review-detail-row", children: [
2810
+ /* @__PURE__ */ jsx22("span", { children: "Amount paid" }),
2811
+ /* @__PURE__ */ jsx22("span", { className: "rs-review-detail-value", children: amountPaid })
2812
+ ] }),
2813
+ /* @__PURE__ */ jsxs20("div", { className: "rs-review-detail-row", children: [
2814
+ /* @__PURE__ */ jsx22("span", { children: "Deposited amount" }),
2815
+ /* @__PURE__ */ jsxs20("span", { className: "rs-review-detail-value", children: [
2816
+ /* @__PURE__ */ jsx22("span", { children: depositedAmount }),
2817
+ depositedIcon && /* @__PURE__ */ jsx22("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx22("img", { src: depositedIcon, alt: "" }) })
2818
+ ] })
2819
+ ] }),
2820
+ feesTotal != null && /* @__PURE__ */ jsx22(FeesAccordion, { total: feesTotal, rows: feeRows ?? [] })
2821
+ ] }),
2822
+ /* @__PURE__ */ jsxs20("div", { className: "rs-screen-button-row", children: [
2823
+ onNewDeposit && /* @__PURE__ */ jsx22(Button, { variant: "outline", onClick: onNewDeposit, fullWidth: true, children: newLabel }),
2824
+ onClose && /* @__PURE__ */ jsx22(Button, { onClick: onClose, fullWidth: true, children: "Done" })
2825
+ ] })
2826
+ ] }),
2827
+ /* @__PURE__ */ jsx22(PoweredBy, {})
2828
+ ] });
2829
+ }
2830
+ SwappedReceipt.displayName = "SwappedReceipt";
2831
+
2427
2832
  // src/core/webhook.ts
2428
2833
  function isRecord(value) {
2429
2834
  return typeof value === "object" && value !== null;
@@ -2496,6 +2901,26 @@ function getEventSourceDetails(event) {
2496
2901
  }
2497
2902
  return {};
2498
2903
  }
2904
+ function asChain(value) {
2905
+ if (typeof value === "string" && value.trim().startsWith("solana")) {
2906
+ return "solana";
2907
+ }
2908
+ return asNumber(value);
2909
+ }
2910
+ function getEventDestinationDetails(event) {
2911
+ if (!event?.type || !isRecord(event.data)) return {};
2912
+ if (event.type !== "bridge-started" && event.type !== "bridge-complete" && event.type !== "post-bridge-swap-complete") {
2913
+ return {};
2914
+ }
2915
+ const destination = isRecord(event.data.destination) ? event.data.destination : void 0;
2916
+ if (!destination) return {};
2917
+ const token = asString(destination.asset);
2918
+ return {
2919
+ chainId: asChain(destination.chain),
2920
+ amount: asAmount(destination.amount),
2921
+ token: token?.trim() || void 0
2922
+ };
2923
+ }
2499
2924
  function isDepositEvent(event) {
2500
2925
  return event?.type === "deposit-received" || event?.type === "bridge-started" || event?.type === "bridge-complete" || event?.type === "bridge-failed" || event?.type === "post-bridge-swap-complete" || event?.type === "post-bridge-swap-failed" || event?.type === "error";
2501
2926
  }
@@ -2547,10 +2972,131 @@ function failureMessageForEvent(event) {
2547
2972
  return formatBridgeFailedMessage(event).message;
2548
2973
  }
2549
2974
 
2975
+ // src/core/token-amount.ts
2976
+ import { formatUnits } from "viem";
2977
+ var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set([
2978
+ "USDC",
2979
+ "USDT",
2980
+ "USDT0",
2981
+ "DAI",
2982
+ "FRAX",
2983
+ "PYUSD",
2984
+ "USDP",
2985
+ "TUSD",
2986
+ "GUSD",
2987
+ "USDS",
2988
+ "LUSD",
2989
+ "BUSD",
2990
+ "USDE"
2991
+ ]);
2992
+ var EVM_ADDRESS_RE = /^0x[a-fA-F0-9]{40}$/;
2993
+ function resolveTokenDisplay(token, chain, fallback) {
2994
+ if (token !== void 0) {
2995
+ if (chain === "solana") {
2996
+ const solanaToken = getSolanaTokenByMint(token);
2997
+ if (solanaToken) {
2998
+ return { symbol: solanaToken.symbol, decimals: solanaToken.decimals };
2999
+ }
3000
+ } else if (EVM_ADDRESS_RE.test(token)) {
3001
+ const symbol = getTokenSymbol(token, chain);
3002
+ const decimals = findTokenDecimals(token, chain);
3003
+ if (symbol !== "Token" || decimals !== void 0) {
3004
+ return {
3005
+ symbol: symbol !== "Token" ? symbol : fallback?.symbol ?? symbol,
3006
+ decimals: decimals ?? fallback?.decimals
3007
+ };
3008
+ }
3009
+ }
3010
+ }
3011
+ return {
3012
+ symbol: fallback?.symbol ?? "Token",
3013
+ decimals: fallback?.decimals
3014
+ };
3015
+ }
3016
+ function maxFractionDigitsFor(symbol) {
3017
+ if (!symbol) return 6;
3018
+ return STABLECOIN_SYMBOLS.has(symbol.toUpperCase()) ? 3 : 6;
3019
+ }
3020
+ function formatTokenAmount(amount, symbol) {
3021
+ if (!Number.isFinite(amount)) return void 0;
3022
+ return amount.toLocaleString("en-US", {
3023
+ minimumFractionDigits: 2,
3024
+ maximumFractionDigits: maxFractionDigitsFor(symbol)
3025
+ });
3026
+ }
3027
+ function tokenAmountToNumber(rawAmount, decimals) {
3028
+ if (decimals === void 0) return void 0;
3029
+ try {
3030
+ const value = Number(formatUnits(BigInt(rawAmount), decimals));
3031
+ return Number.isFinite(value) ? value : void 0;
3032
+ } catch {
3033
+ return void 0;
3034
+ }
3035
+ }
3036
+ function formatRawTokenAmount(rawAmount, token) {
3037
+ const value = tokenAmountToNumber(rawAmount, token.decimals);
3038
+ if (value === void 0) return void 0;
3039
+ return formatTokenAmount(value, token.symbol);
3040
+ }
3041
+ function priceUsdFor(symbol, prices) {
3042
+ if (!symbol) return void 0;
3043
+ const upper = symbol.toUpperCase();
3044
+ const quoted = prices[upper];
3045
+ if (typeof quoted === "number" && quoted > 0) return quoted;
3046
+ return STABLECOIN_SYMBOLS.has(upper) ? 1 : void 0;
3047
+ }
3048
+ function estimateReceiveAmount(params) {
3049
+ const { sourceAmount, sourceSymbol, targetSymbol, sourceAmountUsd, prices } = params;
3050
+ if (sourceSymbol !== void 0 && sourceSymbol.toUpperCase() === targetSymbol.toUpperCase()) {
3051
+ return sourceAmount;
3052
+ }
3053
+ const usdValue = sourceAmountUsd !== void 0 && Number.isFinite(sourceAmountUsd) ? sourceAmountUsd : sourceAmount !== void 0 ? (() => {
3054
+ const sourcePrice = priceUsdFor(sourceSymbol, prices);
3055
+ return sourcePrice !== void 0 ? sourceAmount * sourcePrice : void 0;
3056
+ })() : void 0;
3057
+ if (usdValue === void 0) return void 0;
3058
+ const targetPrice = priceUsdFor(targetSymbol, prices);
3059
+ if (targetPrice === void 0) return void 0;
3060
+ return usdValue / targetPrice;
3061
+ }
3062
+ function formatReceiveEstimate(params) {
3063
+ const estimate = estimateReceiveAmount(params);
3064
+ if (estimate === void 0) return void 0;
3065
+ const formatted = formatTokenAmount(estimate, params.targetSymbol);
3066
+ if (formatted === void 0) return void 0;
3067
+ const sameSymbol = params.sourceSymbol.toUpperCase() === params.targetSymbol.toUpperCase();
3068
+ return sameSymbol ? `${formatted} ${params.targetSymbol}` : `~${formatted} ${params.targetSymbol}`;
3069
+ }
3070
+
3071
+ // src/core/useTokenPrices.ts
3072
+ import { useEffect as useEffect4, useState as useState4 } from "react";
3073
+ function useTokenPrices(service, symbols) {
3074
+ const [prices, setPrices] = useState4({});
3075
+ const symbolsKey = [
3076
+ ...new Set(
3077
+ symbols.filter((symbol) => Boolean(symbol)).map((symbol) => symbol.toUpperCase())
3078
+ )
3079
+ ].sort().join(",");
3080
+ useEffect4(() => {
3081
+ if (!symbolsKey) return;
3082
+ let cancelled = false;
3083
+ service.fetchPrices(symbolsKey.split(",")).then((result) => {
3084
+ if (!cancelled && result && Object.keys(result).length > 0) {
3085
+ setPrices(result);
3086
+ }
3087
+ }).catch(() => {
3088
+ });
3089
+ return () => {
3090
+ cancelled = true;
3091
+ };
3092
+ }, [service, symbolsKey]);
3093
+ return prices;
3094
+ }
3095
+
2550
3096
  // src/components/steps/ProcessingStep.tsx
2551
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
3097
+ import { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
2552
3098
  function SuccessBadge() {
2553
- return /* @__PURE__ */ jsxs16(
3099
+ return /* @__PURE__ */ jsxs21(
2554
3100
  "svg",
2555
3101
  {
2556
3102
  width: "40",
@@ -2560,7 +3106,7 @@ function SuccessBadge() {
2560
3106
  xmlns: "http://www.w3.org/2000/svg",
2561
3107
  "aria-hidden": "true",
2562
3108
  children: [
2563
- /* @__PURE__ */ jsx18(
3109
+ /* @__PURE__ */ jsx23(
2564
3110
  "rect",
2565
3111
  {
2566
3112
  width: "40",
@@ -2569,7 +3115,7 @@ function SuccessBadge() {
2569
3115
  fill: "var(--rs-icon-wrapper-bg)"
2570
3116
  }
2571
3117
  ),
2572
- /* @__PURE__ */ jsx18(
3118
+ /* @__PURE__ */ jsx23(
2573
3119
  "path",
2574
3120
  {
2575
3121
  d: "M28 14L17 25L12 20",
@@ -2584,7 +3130,7 @@ function SuccessBadge() {
2584
3130
  );
2585
3131
  }
2586
3132
  function FailedBadge() {
2587
- return /* @__PURE__ */ jsxs16(
3133
+ return /* @__PURE__ */ jsxs21(
2588
3134
  "svg",
2589
3135
  {
2590
3136
  width: "40",
@@ -2594,8 +3140,8 @@ function FailedBadge() {
2594
3140
  xmlns: "http://www.w3.org/2000/svg",
2595
3141
  "aria-hidden": "true",
2596
3142
  children: [
2597
- /* @__PURE__ */ jsx18("rect", { width: "40", height: "40", rx: "8", fill: "#FB2C36" }),
2598
- /* @__PURE__ */ jsx18(
3143
+ /* @__PURE__ */ jsx23("rect", { width: "40", height: "40", rx: "8", fill: "#FB2C36" }),
3144
+ /* @__PURE__ */ jsx23(
2599
3145
  "path",
2600
3146
  {
2601
3147
  d: "M26 14L14 26M14 14L26 26",
@@ -2619,24 +3165,6 @@ var SOFT_DELAY_MS = {
2619
3165
  bridging: 4 * 60 * 1e3
2620
3166
  };
2621
3167
  var PHASE_TIMINGS_PREFIX = "rhinestone:phase-timings";
2622
- var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set([
2623
- "USDC",
2624
- "USDT",
2625
- "DAI",
2626
- "FRAX",
2627
- "PYUSD",
2628
- "USDP",
2629
- "TUSD",
2630
- "GUSD",
2631
- "USDS",
2632
- "LUSD",
2633
- "BUSD",
2634
- "USDE"
2635
- ]);
2636
- function maxFractionDigitsFor(symbol) {
2637
- if (!symbol) return 6;
2638
- return STABLECOIN_SYMBOLS.has(symbol.toUpperCase()) ? 3 : 6;
2639
- }
2640
3168
  var PAYMENT_METHOD_LABELS = {
2641
3169
  creditcard: "Card",
2642
3170
  debitcard: "Card",
@@ -2713,10 +3241,10 @@ function formatTimer(seconds) {
2713
3241
  return `${mins}:${String(secs).padStart(2, "0")}`;
2714
3242
  }
2715
3243
  function TickerChar({ value }) {
2716
- const [current, setCurrent] = useState2(value);
2717
- const [previous, setPrevious] = useState2(null);
2718
- const [animKey, setAnimKey] = useState2(0);
2719
- useEffect4(() => {
3244
+ const [current, setCurrent] = useState5(value);
3245
+ const [previous, setPrevious] = useState5(null);
3246
+ const [animKey, setAnimKey] = useState5(0);
3247
+ useEffect5(() => {
2720
3248
  if (value === current) return;
2721
3249
  setPrevious(current);
2722
3250
  setCurrent(value);
@@ -2724,16 +3252,16 @@ function TickerChar({ value }) {
2724
3252
  const timeout = setTimeout(() => setPrevious(null), 360);
2725
3253
  return () => clearTimeout(timeout);
2726
3254
  }, [value, current]);
2727
- return /* @__PURE__ */ jsxs16("span", { className: "rs-ticker-slot", children: [
2728
- previous !== null && /* @__PURE__ */ jsx18("span", { className: "rs-ticker-out", children: previous }, `out-${animKey}`),
2729
- /* @__PURE__ */ jsx18("span", { className: "rs-ticker-in", children: current }, `in-${animKey}`)
3255
+ return /* @__PURE__ */ jsxs21("span", { className: "rs-ticker-slot", children: [
3256
+ previous !== null && /* @__PURE__ */ jsx23("span", { className: "rs-ticker-out", children: previous }, `out-${animKey}`),
3257
+ /* @__PURE__ */ jsx23("span", { className: "rs-ticker-in", children: current }, `in-${animKey}`)
2730
3258
  ] });
2731
3259
  }
2732
3260
  function Ticker({ value }) {
2733
- return /* @__PURE__ */ jsx18("span", { className: "rs-ticker", "aria-label": value, children: value.split("").map((char, index) => (
3261
+ return /* @__PURE__ */ jsx23("span", { className: "rs-ticker", "aria-label": value, children: value.split("").map((char, index) => (
2734
3262
  // Position-stable key so each slot keeps its own animation state.
2735
3263
  // eslint-disable-next-line react/no-array-index-key
2736
- /* @__PURE__ */ jsx18(TickerChar, { value: char }, index)
3264
+ /* @__PURE__ */ jsx23(TickerChar, { value: char }, index)
2737
3265
  )) });
2738
3266
  }
2739
3267
  function getPhaseStartTime(phaseId, phaseTimings) {
@@ -2806,11 +3334,11 @@ function ProcessingStep({
2806
3334
  const onDepositCompleteRef = useLatestRef(onDepositComplete);
2807
3335
  const onDepositFailedRef = useLatestRef(onDepositFailed);
2808
3336
  const onErrorRef = useLatestRef(onError);
2809
- const [state, setState] = useState2(
3337
+ const [state, setState] = useState5(
2810
3338
  directTransfer ? { type: "complete" } : { type: "processing" }
2811
3339
  );
2812
- const [elapsedSeconds, setElapsedSeconds] = useState2(0);
2813
- const [phaseTimings, setPhaseTimings] = useState2(() => {
3340
+ const [elapsedSeconds, setElapsedSeconds] = useState5(0);
3341
+ const [phaseTimings, setPhaseTimings] = useState5(() => {
2814
3342
  const saved = loadPhaseTimings(txHash);
2815
3343
  if (saved) {
2816
3344
  startTimeRef.current = saved.startedAt;
@@ -2818,7 +3346,7 @@ function ProcessingStep({
2818
3346
  }
2819
3347
  return { startedAt: startTimeRef.current };
2820
3348
  });
2821
- const [hasEscalatedDelay, setHasEscalatedDelay] = useState2(false);
3349
+ const [hasEscalatedDelay, setHasEscalatedDelay] = useState5(false);
2822
3350
  const updatePhaseTimings = useCallback3(
2823
3351
  (updater) => {
2824
3352
  setPhaseTimings((previous) => {
@@ -2829,7 +3357,7 @@ function ProcessingStep({
2829
3357
  },
2830
3358
  [txHash]
2831
3359
  );
2832
- useEffect4(() => {
3360
+ useEffect5(() => {
2833
3361
  if (!directTransfer) return;
2834
3362
  const completedAt = Date.now();
2835
3363
  updatePhaseTimings(() => ({
@@ -2860,7 +3388,7 @@ function ProcessingStep({
2860
3388
  txHash,
2861
3389
  updatePhaseTimings
2862
3390
  ]);
2863
- useEffect4(() => {
3391
+ useEffect5(() => {
2864
3392
  if (directTransfer || state.type !== "processing") return;
2865
3393
  const updateElapsed = () => {
2866
3394
  setElapsedSeconds(
@@ -2871,7 +3399,7 @@ function ProcessingStep({
2871
3399
  const intervalId = setInterval(updateElapsed, 1e3);
2872
3400
  return () => clearInterval(intervalId);
2873
3401
  }, [directTransfer, state.type]);
2874
- useEffect4(() => {
3402
+ useEffect5(() => {
2875
3403
  if (state.type === "processing") return;
2876
3404
  const endedAt = state.type === "complete" ? phaseTimings.completedAt ?? Date.now() : Date.now();
2877
3405
  setElapsedSeconds(Math.floor((endedAt - startTimeRef.current) / 1e3));
@@ -2879,14 +3407,14 @@ function ProcessingStep({
2879
3407
  (previous) => previous.endedAt !== void 0 ? previous : { ...previous, endedAt }
2880
3408
  );
2881
3409
  }, [phaseTimings.completedAt, state.type, updatePhaseTimings]);
2882
- useEffect4(() => {
3410
+ useEffect5(() => {
2883
3411
  if (!state.lastEvent) return;
2884
3412
  updatePhaseTimings(
2885
3413
  (previous) => syncPhaseTimings(previous, state.lastEvent)
2886
3414
  );
2887
3415
  }, [state.lastEvent?.time, state.lastEvent?.type, updatePhaseTimings]);
2888
- const [swappedFiatContext, setSwappedFiatContext] = useState2(null);
2889
- useEffect4(() => {
3416
+ const [swappedFiatContext, setSwappedFiatContext] = useState5(null);
3417
+ useEffect5(() => {
2890
3418
  let cancelled = false;
2891
3419
  service.fetchSwappedOrderStatus(smartAccount).then((res) => {
2892
3420
  if (cancelled || !res) return;
@@ -2907,7 +3435,7 @@ function ProcessingStep({
2907
3435
  cancelled = true;
2908
3436
  };
2909
3437
  }, [service, smartAccount, txHash, isSwappedOrder]);
2910
- useEffect4(() => {
3438
+ useEffect5(() => {
2911
3439
  if (directTransfer) return;
2912
3440
  if (state.type !== "processing") {
2913
3441
  pollIntervalRef.current = INITIAL_POLL_INTERVAL;
@@ -3067,7 +3595,7 @@ function ProcessingStep({
3067
3595
  state.type,
3068
3596
  txHash
3069
3597
  ]);
3070
- useEffect4(() => {
3598
+ useEffect5(() => {
3071
3599
  if (directTransfer || state.type !== "processing") return;
3072
3600
  const timeoutId = setTimeout(() => {
3073
3601
  if (escalatedDelayRef.current) return;
@@ -3098,82 +3626,71 @@ function ProcessingStep({
3098
3626
  const displayAmount = sourceDetails.amount ?? amount;
3099
3627
  const sourceExplorerUrl = getExplorerTxUrl(displaySourceChain, txHash);
3100
3628
  const destExplorerUrl = destinationTxHash ? getExplorerTxUrl(targetChain, destinationTxHash) : null;
3101
- const isEvmSourceToken = /^0x[a-fA-F0-9]{40}$/.test(displaySourceToken);
3102
- const sourceSymbol = displaySourceChain === "solana" ? providedSourceSymbol ?? "SOL" : isEvmSourceToken ? getTokenSymbol(displaySourceToken, displaySourceChain) : providedSourceSymbol ?? "Token";
3103
- const sourceDecimals = displaySourceChain === "solana" ? providedSourceDecimals ?? 9 : isEvmSourceToken ? getTokenDecimalsByAddress(
3104
- displaySourceToken,
3105
- displaySourceChain
3106
- ) : providedSourceDecimals ?? 18;
3107
- const amountMaxDigits = maxFractionDigitsFor(sourceSymbol);
3108
- const formattedReceivedAmount = (() => {
3109
- try {
3110
- const raw = formatUnits(BigInt(displayAmount), sourceDecimals);
3111
- const numeric = Number(raw);
3112
- if (!Number.isFinite(numeric)) return raw;
3113
- return numeric.toLocaleString("en-US", {
3114
- minimumFractionDigits: 2,
3115
- maximumFractionDigits: amountMaxDigits
3116
- });
3117
- } catch {
3118
- return Number(displayAmount).toLocaleString("en-US", {
3119
- minimumFractionDigits: 2,
3120
- maximumFractionDigits: amountMaxDigits
3121
- });
3122
- }
3629
+ const sourceDisplay = (() => {
3630
+ const resolved = resolveTokenDisplay(displaySourceToken, displaySourceChain, {
3631
+ symbol: providedSourceSymbol ?? (displaySourceChain === "solana" ? "SOL" : "Token"),
3632
+ decimals: providedSourceDecimals
3633
+ });
3634
+ return {
3635
+ symbol: resolved.symbol,
3636
+ decimals: resolved.decimals ?? (displaySourceChain === "solana" ? 9 : 18)
3637
+ };
3123
3638
  })();
3124
- const destinationAmountRaw = (() => {
3125
- const dest = lastEvent?.data?.destination;
3126
- if (!dest || dest.amount === void 0) return void 0;
3127
- try {
3128
- return BigInt(dest.amount);
3129
- } catch {
3130
- return void 0;
3131
- }
3639
+ const sourceSymbol = sourceDisplay.symbol;
3640
+ const formattedSentAmount = formatRawTokenAmount(displayAmount, sourceDisplay) ?? // Not raw base units (e.g. a decimal string) — render the number as-is.
3641
+ formatTokenAmount(Number(displayAmount), sourceDisplay.symbol) ?? displayAmount;
3642
+ const isBridgeHopDestination = hasPostBridgeActions && (lastEvent?.type === "bridge-started" || lastEvent?.type === "bridge-complete");
3643
+ const eventDestination = isBridgeHopDestination ? {} : getEventDestinationDetails(lastEvent);
3644
+ const targetDisplay = resolveTokenDisplay(
3645
+ eventDestination.token ?? targetToken,
3646
+ eventDestination.chainId ?? targetChain,
3647
+ // Dapp deposits default to USDC targets; mirror the source symbol last so
3648
+ // unresolvable same-token routes still label sensibly.
3649
+ { symbol: providedSourceSymbol ?? "USDC" }
3650
+ );
3651
+ const targetSymbol = targetDisplay.symbol;
3652
+ const formattedDestinationAmount = eventDestination.amount !== void 0 ? formatRawTokenAmount(eventDestination.amount, targetDisplay) : void 0;
3653
+ const amountUsdNumber = amountUsd !== void 0 && Number(amountUsd) > 0 ? Number(amountUsd) : void 0;
3654
+ const prices = useTokenPrices(service, [
3655
+ sourceDisplay.symbol,
3656
+ targetDisplay.symbol
3657
+ ]);
3658
+ const estimatedReceiveAmount = (() => {
3659
+ const estimate = estimateReceiveAmount({
3660
+ sourceAmount: tokenAmountToNumber(displayAmount, sourceDisplay.decimals),
3661
+ sourceSymbol: sourceDisplay.symbol,
3662
+ targetSymbol: targetDisplay.symbol,
3663
+ sourceAmountUsd: amountUsdNumber,
3664
+ prices
3665
+ });
3666
+ return estimate !== void 0 ? formatTokenAmount(estimate, targetDisplay.symbol) : void 0;
3132
3667
  })();
3133
- const sourceAmountRaw = (() => {
3134
- try {
3135
- return BigInt(displayAmount);
3136
- } catch {
3668
+ const receiveDisplay = formattedDestinationAmount ? `${formattedDestinationAmount} ${targetSymbol}` : estimatedReceiveAmount !== void 0 ? `~${estimatedReceiveAmount} ${targetSymbol}` : amountUsdNumber !== void 0 ? `~$${amountUsdNumber.toFixed(2)}` : (
3669
+ // Cross-token with no price and no USD context (rare QR case):
3670
+ // an honest dash beats a wrong number.
3671
+ "\u2014"
3672
+ );
3673
+ const formattedBridgingCost = (() => {
3674
+ if (sourceSymbol.toUpperCase() !== targetSymbol.toUpperCase()) {
3137
3675
  return void 0;
3138
3676
  }
3139
- })();
3140
- const bridgingCostRaw = sourceAmountRaw !== void 0 && destinationAmountRaw !== void 0 && sourceAmountRaw > destinationAmountRaw ? sourceAmountRaw - destinationAmountRaw : void 0;
3141
- const formattedDestinationAmount = destinationAmountRaw !== void 0 ? (() => {
3142
- try {
3143
- const raw = formatUnits(destinationAmountRaw, sourceDecimals);
3144
- const numeric = Number(raw);
3145
- if (!Number.isFinite(numeric)) return raw;
3146
- return numeric.toLocaleString("en-US", {
3147
- minimumFractionDigits: 2,
3148
- maximumFractionDigits: amountMaxDigits
3149
- });
3150
- } catch {
3677
+ const sentValue = tokenAmountToNumber(displayAmount, sourceDisplay.decimals);
3678
+ const receivedValue = eventDestination.amount !== void 0 ? tokenAmountToNumber(eventDestination.amount, targetDisplay.decimals) : void 0;
3679
+ if (sentValue === void 0 || receivedValue === void 0 || sentValue <= receivedValue) {
3151
3680
  return void 0;
3152
3681
  }
3153
- })() : void 0;
3154
- const formattedBridgingCost = bridgingCostRaw !== void 0 ? (() => {
3155
- try {
3156
- const raw = formatUnits(bridgingCostRaw, sourceDecimals);
3157
- const numeric = Number(raw);
3158
- if (!Number.isFinite(numeric)) return raw;
3159
- return numeric.toLocaleString("en-US", {
3160
- minimumFractionDigits: 2,
3161
- maximumFractionDigits: amountMaxDigits
3162
- });
3163
- } catch {
3682
+ const formatted = formatTokenAmount(sentValue - receivedValue, sourceSymbol);
3683
+ if (formatted === void 0 || Number(formatted.replace(/,/g, "")) === 0) {
3164
3684
  return void 0;
3165
3685
  }
3166
- })() : void 0;
3686
+ return formatted;
3687
+ })();
3167
3688
  const currentPhaseId = getCurrentPhaseId(state, phaseTimings);
3168
3689
  const activePhaseStartedAt = currentPhaseId ? getPhaseStartTime(currentPhaseId, phaseTimings) : void 0;
3169
3690
  const activePhaseElapsedMs = isProcessing && activePhaseStartedAt !== void 0 ? timelineNowMs - activePhaseStartedAt : 0;
3170
3691
  const delayPhaseId = isProcessing && currentPhaseId && activePhaseElapsedMs >= SOFT_DELAY_MS[currentPhaseId] ? currentPhaseId : void 0;
3171
3692
  void delayPhaseId;
3172
3693
  void hasEscalatedDelay;
3173
- const targetSymbol = (() => {
3174
- const resolved = getTargetTokenSymbol(targetToken, targetChain);
3175
- return resolved !== "Token" ? resolved : providedSourceSymbol ?? "USDC";
3176
- })();
3177
3694
  const targetTokenIcon = getTokenIcon(targetSymbol);
3178
3695
  const sourceChainIcon = getChainIcon(displaySourceChain);
3179
3696
  const targetChainIcon = getChainIcon(targetChain);
@@ -3185,23 +3702,58 @@ function ProcessingStep({
3185
3702
  const feeTooltip = uiConfig?.feeTooltip ?? (feeSponsored ? "Network fees are sponsored for this deposit." : "Network fees apply.");
3186
3703
  const stateTitle = isComplete ? `${flowCapitalized} successful` : isFailed ? `${flowCapitalized} failed` : "Processing...";
3187
3704
  const handleRetry = onRetry ?? onNewDeposit;
3188
- const headerContent = isComplete ? /* @__PURE__ */ jsxs16("div", { className: "rs-body-header", children: [
3189
- /* @__PURE__ */ jsx18(SuccessBadge, {}),
3190
- /* @__PURE__ */ jsx18("div", { className: "rs-body-header-text", children: /* @__PURE__ */ jsx18("h2", { className: "rs-body-header-title", children: stateTitle }) })
3191
- ] }) : isFailed ? /* @__PURE__ */ jsxs16("div", { className: "rs-body-header", children: [
3192
- /* @__PURE__ */ jsx18(FailedBadge, {}),
3193
- /* @__PURE__ */ jsx18("div", { className: "rs-body-header-text", children: /* @__PURE__ */ jsx18("h2", { className: "rs-body-header-title", children: stateTitle }) })
3194
- ] }) : /* @__PURE__ */ jsx18(BodyHeader, { icon: /* @__PURE__ */ jsx18(WalletIcon, {}), title: stateTitle });
3195
- return /* @__PURE__ */ jsxs16("div", { className: "rs-screen", children: [
3196
- /* @__PURE__ */ jsxs16("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
3705
+ const headerContent = isComplete ? /* @__PURE__ */ jsxs21("div", { className: "rs-body-header", children: [
3706
+ /* @__PURE__ */ jsx23(SuccessBadge, {}),
3707
+ /* @__PURE__ */ jsx23("div", { className: "rs-body-header-text", children: /* @__PURE__ */ jsx23("h2", { className: "rs-body-header-title", children: stateTitle }) })
3708
+ ] }) : isFailed ? /* @__PURE__ */ jsxs21("div", { className: "rs-body-header", children: [
3709
+ /* @__PURE__ */ jsx23(FailedBadge, {}),
3710
+ /* @__PURE__ */ jsx23("div", { className: "rs-body-header-text", children: /* @__PURE__ */ jsx23("h2", { className: "rs-body-header-title", children: stateTitle }) })
3711
+ ] }) : /* @__PURE__ */ jsx23(BodyHeader, { icon: /* @__PURE__ */ jsx23(WalletIcon, {}), title: stateTitle });
3712
+ if (isComplete && isSwappedOrder) {
3713
+ const onrampMethod = swappedFiatContext?.paymentMethod ? formatPaymentMethod(swappedFiatContext.paymentMethod) : null;
3714
+ const amountPaid = swappedFiatContext?.paidAmountUsd != null ? `$${swappedFiatContext.paidAmountUsd.toFixed(2)}` : null;
3715
+ const depositedAmount = receiveDisplay;
3716
+ const onrampFeeUsd = swappedFiatContext?.onrampFeeUsd ?? null;
3717
+ const networkFeeUsd = quotedFeeAmount !== void 0 && Number.isFinite(Number(quotedFeeAmount)) ? Number(quotedFeeAmount) : null;
3718
+ const feeRows = [];
3719
+ if (onrampFeeUsd != null) {
3720
+ feeRows.push({
3721
+ label: "On-ramp fee",
3722
+ value: `$${onrampFeeUsd.toFixed(2)}`
3723
+ });
3724
+ }
3725
+ if (networkFeeUsd != null) {
3726
+ feeRows.push({
3727
+ label: "Network fee",
3728
+ value: `$${networkFeeUsd.toFixed(2)}`
3729
+ });
3730
+ }
3731
+ const feesTotal = feeRows.length > 0 ? `$${((onrampFeeUsd ?? 0) + (networkFeeUsd ?? 0)).toFixed(2)}` : null;
3732
+ return /* @__PURE__ */ jsx23(
3733
+ SwappedReceipt,
3734
+ {
3735
+ onrampMethod,
3736
+ amountPaid,
3737
+ depositedAmount,
3738
+ depositedIcon: targetTokenIcon,
3739
+ feesTotal,
3740
+ feeRows,
3741
+ newLabel: `New ${flowNoun}`,
3742
+ onNewDeposit,
3743
+ onClose
3744
+ }
3745
+ );
3746
+ }
3747
+ return /* @__PURE__ */ jsxs21("div", { className: "rs-screen", children: [
3748
+ /* @__PURE__ */ jsxs21("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
3197
3749
  headerContent,
3198
- /* @__PURE__ */ jsxs16("div", { className: "rs-review-details", children: [
3199
- /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3200
- /* @__PURE__ */ jsx18("span", { children: "Source chain" }),
3201
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3202
- /* @__PURE__ */ jsx18("span", { children: sourceChainName }),
3203
- sourceChainIcon && /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx18("img", { src: sourceChainIcon, alt: "" }) }),
3204
- sourceExplorerUrl && /* @__PURE__ */ jsx18(
3750
+ /* @__PURE__ */ jsxs21("div", { className: "rs-review-details", children: [
3751
+ /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3752
+ /* @__PURE__ */ jsx23("span", { children: "Source chain" }),
3753
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3754
+ /* @__PURE__ */ jsx23("span", { children: sourceChainName }),
3755
+ sourceChainIcon && /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx23("img", { src: sourceChainIcon, alt: "" }) }),
3756
+ sourceExplorerUrl && /* @__PURE__ */ jsx23(
3205
3757
  "a",
3206
3758
  {
3207
3759
  href: sourceExplorerUrl,
@@ -3209,17 +3761,17 @@ function ProcessingStep({
3209
3761
  rel: "noopener noreferrer",
3210
3762
  className: "rs-review-detail-link",
3211
3763
  "aria-label": "View source transaction",
3212
- children: /* @__PURE__ */ jsx18(ExternalLinkIcon, {})
3764
+ children: /* @__PURE__ */ jsx23(ExternalLinkIcon, {})
3213
3765
  }
3214
3766
  )
3215
3767
  ] })
3216
3768
  ] }),
3217
- /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3218
- /* @__PURE__ */ jsx18("span", { children: "Destination chain" }),
3219
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3220
- /* @__PURE__ */ jsx18("span", { children: targetChainName }),
3221
- targetChainIcon && /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx18("img", { src: targetChainIcon, alt: "" }) }),
3222
- destExplorerUrl && /* @__PURE__ */ jsx18(
3769
+ /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3770
+ /* @__PURE__ */ jsx23("span", { children: "Destination chain" }),
3771
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3772
+ /* @__PURE__ */ jsx23("span", { children: targetChainName }),
3773
+ targetChainIcon && /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx23("img", { src: targetChainIcon, alt: "" }) }),
3774
+ destExplorerUrl && /* @__PURE__ */ jsx23(
3223
3775
  "a",
3224
3776
  {
3225
3777
  href: destExplorerUrl,
@@ -3227,75 +3779,75 @@ function ProcessingStep({
3227
3779
  rel: "noopener noreferrer",
3228
3780
  className: "rs-review-detail-link",
3229
3781
  "aria-label": "View destination transaction",
3230
- children: /* @__PURE__ */ jsx18(ExternalLinkIcon, {})
3782
+ children: /* @__PURE__ */ jsx23(ExternalLinkIcon, {})
3231
3783
  }
3232
3784
  )
3233
3785
  ] })
3234
3786
  ] }),
3235
- /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3236
- /* @__PURE__ */ jsx18("span", { children: isProcessing ? "Time elapsed" : "Total time" }),
3237
- /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-value", children: /* @__PURE__ */ jsx18(Ticker, { value: timerText }) })
3787
+ /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3788
+ /* @__PURE__ */ jsx23("span", { children: isProcessing ? "Time elapsed" : "Total time" }),
3789
+ /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-value", children: /* @__PURE__ */ jsx23(Ticker, { value: timerText }) })
3238
3790
  ] }),
3239
- isSwappedOrder ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
3240
- swappedFiatContext?.paidAmountUsd != null && /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3241
- /* @__PURE__ */ jsx18("span", { children: "You pay" }),
3242
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3791
+ isSwappedOrder ? /* @__PURE__ */ jsxs21(Fragment4, { children: [
3792
+ swappedFiatContext?.paidAmountUsd != null && /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3793
+ /* @__PURE__ */ jsx23("span", { children: "You pay" }),
3794
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3243
3795
  "$",
3244
3796
  swappedFiatContext.paidAmountUsd.toFixed(2),
3245
- swappedFiatContext.paymentMethod && /* @__PURE__ */ jsxs16("span", { style: { color: "#71717b", marginLeft: 6 }, children: [
3797
+ swappedFiatContext.paymentMethod && /* @__PURE__ */ jsxs21("span", { style: { color: "#71717b", marginLeft: 6 }, children: [
3246
3798
  "via",
3247
3799
  " ",
3248
3800
  formatPaymentMethod(swappedFiatContext.paymentMethod)
3249
3801
  ] })
3250
3802
  ] })
3251
3803
  ] }),
3252
- swappedFiatContext?.onrampFeeUsd != null && /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3253
- /* @__PURE__ */ jsx18("span", { children: "On-ramp fee" }),
3254
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3804
+ swappedFiatContext?.onrampFeeUsd != null && /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3805
+ /* @__PURE__ */ jsx23("span", { children: "On-ramp fee" }),
3806
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3255
3807
  "$",
3256
3808
  swappedFiatContext.onrampFeeUsd.toFixed(2)
3257
3809
  ] })
3258
3810
  ] }),
3259
- formattedBridgingCost && /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3260
- /* @__PURE__ */ jsx18("span", { children: "Bridging cost" }),
3261
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3262
- /* @__PURE__ */ jsxs16("span", { children: [
3811
+ formattedBridgingCost && /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3812
+ /* @__PURE__ */ jsx23("span", { children: "Bridging cost" }),
3813
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3814
+ /* @__PURE__ */ jsxs21("span", { children: [
3263
3815
  formattedBridgingCost,
3264
3816
  " ",
3265
3817
  sourceSymbol
3266
3818
  ] }),
3267
- sourceTokenIcon && /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx18("img", { src: sourceTokenIcon, alt: "" }) })
3819
+ sourceTokenIcon && /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx23("img", { src: sourceTokenIcon, alt: "" }) })
3268
3820
  ] })
3269
3821
  ] })
3270
- ] }) : /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3271
- /* @__PURE__ */ jsx18("span", { children: isProcessing ? "You send" : "You sent" }),
3272
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3273
- /* @__PURE__ */ jsxs16("span", { children: [
3274
- formattedReceivedAmount,
3822
+ ] }) : /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3823
+ /* @__PURE__ */ jsx23("span", { children: isProcessing ? "You send" : "You sent" }),
3824
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3825
+ /* @__PURE__ */ jsxs21("span", { children: [
3826
+ formattedSentAmount,
3275
3827
  " ",
3276
3828
  sourceSymbol
3277
3829
  ] }),
3278
- sourceTokenIcon && /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx18("img", { src: sourceTokenIcon, alt: "" }) })
3830
+ sourceTokenIcon && /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx23("img", { src: sourceTokenIcon, alt: "" }) })
3279
3831
  ] })
3280
3832
  ] }),
3281
- /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3282
- /* @__PURE__ */ jsx18("span", { children: isProcessing ? "Receive" : "Received" }),
3283
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3284
- /* @__PURE__ */ jsx18("span", { children: formattedDestinationAmount ? `${formattedDestinationAmount} ${targetSymbol}` : `~${formattedReceivedAmount} ${targetSymbol}` }),
3285
- targetTokenIcon && /* @__PURE__ */ jsx18("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx18("img", { src: targetTokenIcon, alt: "" }) })
3833
+ /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3834
+ /* @__PURE__ */ jsx23("span", { children: isProcessing ? "Receive" : "Received" }),
3835
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3836
+ /* @__PURE__ */ jsx23("span", { children: receiveDisplay }),
3837
+ targetTokenIcon && /* @__PURE__ */ jsx23("span", { className: "rs-review-detail-icon", children: /* @__PURE__ */ jsx23("img", { src: targetTokenIcon, alt: "" }) })
3286
3838
  ] })
3287
3839
  ] }),
3288
- isFailed && balanceAfterUsd !== void 0 && /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3289
- /* @__PURE__ */ jsx18("span", { children: "Balance" }),
3290
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3840
+ isFailed && balanceAfterUsd !== void 0 && /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3841
+ /* @__PURE__ */ jsx23("span", { children: "Balance" }),
3842
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3291
3843
  "$",
3292
3844
  balanceAfterUsd.toFixed(2)
3293
3845
  ] })
3294
3846
  ] }),
3295
- isSwappedOrder ? quotedFeeAmount !== void 0 && /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3296
- /* @__PURE__ */ jsx18("span", { children: "Fees" }),
3297
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3298
- /* @__PURE__ */ jsxs16(
3847
+ isSwappedOrder ? quotedFeeAmount !== void 0 && /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3848
+ /* @__PURE__ */ jsx23("span", { children: "Fees" }),
3849
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3850
+ /* @__PURE__ */ jsxs21(
3299
3851
  "span",
3300
3852
  {
3301
3853
  style: feeSponsored ? { textDecoration: "line-through" } : void 0,
@@ -3306,22 +3858,22 @@ function ProcessingStep({
3306
3858
  ]
3307
3859
  }
3308
3860
  ),
3309
- /* @__PURE__ */ jsx18(Tooltip, { content: feeTooltip, children: /* @__PURE__ */ jsx18(
3861
+ /* @__PURE__ */ jsx23(Tooltip, { content: feeTooltip, children: /* @__PURE__ */ jsx23(
3310
3862
  "span",
3311
3863
  {
3312
3864
  className: "rs-review-detail-info",
3313
3865
  "aria-label": "Fee info",
3314
- children: /* @__PURE__ */ jsx18(InfoIcon, {})
3866
+ children: /* @__PURE__ */ jsx23(InfoIcon, {})
3315
3867
  }
3316
3868
  ) })
3317
3869
  ] })
3318
3870
  ] }) : (() => {
3319
3871
  const feeValue = quotedFeeAmount ?? formattedBridgingCost;
3320
3872
  if (feeValue === void 0) return null;
3321
- return /* @__PURE__ */ jsxs16("div", { className: "rs-review-detail-row", children: [
3322
- /* @__PURE__ */ jsx18("span", { children: "Fees" }),
3323
- /* @__PURE__ */ jsxs16("span", { className: "rs-review-detail-value", children: [
3324
- /* @__PURE__ */ jsxs16(
3873
+ return /* @__PURE__ */ jsxs21("div", { className: "rs-review-detail-row", children: [
3874
+ /* @__PURE__ */ jsx23("span", { children: "Fees" }),
3875
+ /* @__PURE__ */ jsxs21("span", { className: "rs-review-detail-value", children: [
3876
+ /* @__PURE__ */ jsxs21(
3325
3877
  "span",
3326
3878
  {
3327
3879
  style: feeSponsored ? { textDecoration: "line-through" } : void 0,
@@ -3332,20 +3884,20 @@ function ProcessingStep({
3332
3884
  ]
3333
3885
  }
3334
3886
  ),
3335
- /* @__PURE__ */ jsx18(Tooltip, { content: feeTooltip, children: /* @__PURE__ */ jsx18(
3887
+ /* @__PURE__ */ jsx23(Tooltip, { content: feeTooltip, children: /* @__PURE__ */ jsx23(
3336
3888
  "span",
3337
3889
  {
3338
3890
  className: "rs-review-detail-info",
3339
3891
  "aria-label": "Fee info",
3340
- children: /* @__PURE__ */ jsx18(InfoIcon, {})
3892
+ children: /* @__PURE__ */ jsx23(InfoIcon, {})
3341
3893
  }
3342
3894
  ) })
3343
3895
  ] })
3344
3896
  ] });
3345
3897
  })()
3346
3898
  ] }),
3347
- isFailed && failureMessage && /* @__PURE__ */ jsx18(Callout, { variant: "error", children: failureMessage }),
3348
- isProcessing && /* @__PURE__ */ jsx18(
3899
+ isFailed && failureMessage && /* @__PURE__ */ jsx23(Callout, { variant: "error", children: failureMessage }),
3900
+ isProcessing && /* @__PURE__ */ jsx23(
3349
3901
  Button,
3350
3902
  {
3351
3903
  fullWidth: true,
@@ -3355,19 +3907,19 @@ function ProcessingStep({
3355
3907
  children: "Submitting transaction\u2026"
3356
3908
  }
3357
3909
  ),
3358
- isComplete && /* @__PURE__ */ jsxs16("div", { className: "rs-screen-button-row", children: [
3359
- onNewDeposit && /* @__PURE__ */ jsxs16(Button, { variant: "outline", onClick: onNewDeposit, fullWidth: true, children: [
3910
+ isComplete && /* @__PURE__ */ jsxs21("div", { className: "rs-screen-button-row", children: [
3911
+ onNewDeposit && /* @__PURE__ */ jsxs21(Button, { variant: "outline", onClick: onNewDeposit, fullWidth: true, children: [
3360
3912
  "New ",
3361
3913
  flowNoun
3362
3914
  ] }),
3363
- onClose && /* @__PURE__ */ jsx18(Button, { onClick: onClose, fullWidth: true, children: "Done" })
3915
+ onClose && /* @__PURE__ */ jsx23(Button, { onClick: onClose, fullWidth: true, children: "Done" })
3364
3916
  ] }),
3365
- isFailed && /* @__PURE__ */ jsxs16("div", { className: "rs-screen-button-row", children: [
3366
- onClose && /* @__PURE__ */ jsx18(Button, { variant: "outline", onClick: onClose, fullWidth: true, children: "Cancel" }),
3367
- handleRetry && /* @__PURE__ */ jsx18(Button, { onClick: handleRetry, fullWidth: true, children: "Try again" })
3917
+ isFailed && /* @__PURE__ */ jsxs21("div", { className: "rs-screen-button-row", children: [
3918
+ onClose && /* @__PURE__ */ jsx23(Button, { variant: "outline", onClick: onClose, fullWidth: true, children: "Cancel" }),
3919
+ handleRetry && /* @__PURE__ */ jsx23(Button, { onClick: handleRetry, fullWidth: true, children: "Try again" })
3368
3920
  ] })
3369
3921
  ] }),
3370
- /* @__PURE__ */ jsx18(PoweredBy, {})
3922
+ /* @__PURE__ */ jsx23(PoweredBy, {})
3371
3923
  ] });
3372
3924
  }
3373
3925
 
@@ -3440,10 +3992,12 @@ export {
3440
3992
  PlusCircleIcon,
3441
3993
  CircleArrowOutUpLeftIcon,
3442
3994
  BankIcon,
3995
+ UnplugIcon,
3443
3996
  Callout,
3444
3997
  BodyHeader,
3445
3998
  PoweredBy,
3446
3999
  Spinner,
4000
+ getExchangeLogo,
3447
4001
  ConnectStep,
3448
4002
  useLatestRef,
3449
4003
  Button,
@@ -3459,12 +4013,15 @@ export {
3459
4013
  isUnsupportedChainSwitchError,
3460
4014
  formatUserError,
3461
4015
  Tooltip,
4016
+ formatTokenAmount,
4017
+ formatReceiveEstimate,
3462
4018
  getEventTxHash,
3463
4019
  getEventSourceDetails,
3464
4020
  isDepositEvent,
3465
4021
  isFailedEvent,
3466
4022
  txRefsMatch,
3467
4023
  failureMessageForEvent,
4024
+ useTokenPrices,
3468
4025
  ProcessingStep,
3469
4026
  getPublicClient,
3470
4027
  getHyperEvmReadClient,