@nowramp/form 0.1.30

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 (646) hide show
  1. package/dist/crypto-icons/aave.svg +1 -0
  2. package/dist/crypto-icons/aca.svg +4 -0
  3. package/dist/crypto-icons/ada.svg +1 -0
  4. package/dist/crypto-icons/aleo.svg +4 -0
  5. package/dist/crypto-icons/algo.svg +1 -0
  6. package/dist/crypto-icons/alph.svg +4 -0
  7. package/dist/crypto-icons/ape.svg +1 -0
  8. package/dist/crypto-icons/apt.svg +4 -0
  9. package/dist/crypto-icons/arb.svg +4 -0
  10. package/dist/crypto-icons/astr.svg +4 -0
  11. package/dist/crypto-icons/atom.svg +1 -0
  12. package/dist/crypto-icons/audd.svg +4 -0
  13. package/dist/crypto-icons/avax.svg +1 -0
  14. package/dist/crypto-icons/avt.svg +4 -0
  15. package/dist/crypto-icons/axs.svg +4 -0
  16. package/dist/crypto-icons/azero.svg +4 -0
  17. package/dist/crypto-icons/baju.svg +4 -0
  18. package/dist/crypto-icons/barsik.svg +4 -0
  19. package/dist/crypto-icons/base.svg +4 -0
  20. package/dist/crypto-icons/bat.svg +1 -0
  21. package/dist/crypto-icons/bch.svg +1 -0
  22. package/dist/crypto-icons/bnb.svg +1 -0
  23. package/dist/crypto-icons/bnc.svg +4 -0
  24. package/dist/crypto-icons/boba.svg +4 -0
  25. package/dist/crypto-icons/bora.svg +4 -0
  26. package/dist/crypto-icons/brett.svg +4 -0
  27. package/dist/crypto-icons/bsc.svg +4 -0
  28. package/dist/crypto-icons/bsx.svg +4 -0
  29. package/dist/crypto-icons/btc.svg +1 -0
  30. package/dist/crypto-icons/bzr.svg +4 -0
  31. package/dist/crypto-icons/c98.svg +4 -0
  32. package/dist/crypto-icons/caga.svg +4 -0
  33. package/dist/crypto-icons/cake.svg +4 -0
  34. package/dist/crypto-icons/caps.svg +4 -0
  35. package/dist/crypto-icons/ccd.svg +4 -0
  36. package/dist/crypto-icons/celo.svg +4 -0
  37. package/dist/crypto-icons/chz.svg +1 -0
  38. package/dist/crypto-icons/comp.svg +1 -0
  39. package/dist/crypto-icons/coreum.svg +4 -0
  40. package/dist/crypto-icons/cro.svg +4 -0
  41. package/dist/crypto-icons/cusd.svg +4 -0
  42. package/dist/crypto-icons/cvc.svg +1 -0
  43. package/dist/crypto-icons/dai.svg +1 -0
  44. package/dist/crypto-icons/dingo.svg +4 -0
  45. package/dist/crypto-icons/doge.svg +1 -0
  46. package/dist/crypto-icons/dot.svg +1 -0
  47. package/dist/crypto-icons/eclipse.svg +4 -0
  48. package/dist/crypto-icons/egld.svg +4 -0
  49. package/dist/crypto-icons/ember.svg +4 -0
  50. package/dist/crypto-icons/eos.svg +1 -0
  51. package/dist/crypto-icons/erg.svg +4 -0
  52. package/dist/crypto-icons/etc.svg +1 -0
  53. package/dist/crypto-icons/eth.svg +1 -0
  54. package/dist/crypto-icons/etherlink.svg +4 -0
  55. package/dist/crypto-icons/eur.svg +1 -0
  56. package/dist/crypto-icons/euroc.svg +4 -0
  57. package/dist/crypto-icons/eurq.svg +4 -0
  58. package/dist/crypto-icons/eurr.svg +4 -0
  59. package/dist/crypto-icons/eusd.svg +4 -0
  60. package/dist/crypto-icons/exit.svg +4 -0
  61. package/dist/crypto-icons/fdusd.svg +4 -0
  62. package/dist/crypto-icons/fil.svg +1 -0
  63. package/dist/crypto-icons/flow.svg +4 -0
  64. package/dist/crypto-icons/flr.svg +4 -0
  65. package/dist/crypto-icons/flux.svg +1 -0
  66. package/dist/crypto-icons/ftm.svg +4 -0
  67. package/dist/crypto-icons/fuel.svg +1 -0
  68. package/dist/crypto-icons/gala.svg +4 -0
  69. package/dist/crypto-icons/glmr.svg +4 -0
  70. package/dist/crypto-icons/gmx.svg +4 -0
  71. package/dist/crypto-icons/gnus.svg +4 -0
  72. package/dist/crypto-icons/grt.svg +1 -0
  73. package/dist/crypto-icons/gun.svg +4 -0
  74. package/dist/crypto-icons/hbar.svg +4 -0
  75. package/dist/crypto-icons/hdx.svg +4 -0
  76. package/dist/crypto-icons/hnt.svg +4 -0
  77. package/dist/crypto-icons/htp.svg +4 -0
  78. package/dist/crypto-icons/hvlo.svg +4 -0
  79. package/dist/crypto-icons/icp.svg +1 -0
  80. package/dist/crypto-icons/imx.svg +4 -0
  81. package/dist/crypto-icons/init.svg +4 -0
  82. package/dist/crypto-icons/inj.svg +4 -0
  83. package/dist/crypto-icons/ink.svg +1 -0
  84. package/dist/crypto-icons/intr.svg +4 -0
  85. package/dist/crypto-icons/jam.svg +4 -0
  86. package/dist/crypto-icons/kag.svg +4 -0
  87. package/dist/crypto-icons/kaia.svg +4 -0
  88. package/dist/crypto-icons/kar.svg +4 -0
  89. package/dist/crypto-icons/kau.svg +4 -0
  90. package/dist/crypto-icons/kcs.svg +1 -0
  91. package/dist/crypto-icons/kda.svg +4 -0
  92. package/dist/crypto-icons/kilt.svg +4 -0
  93. package/dist/crypto-icons/kinesis.svg +4 -0
  94. package/dist/crypto-icons/kint.svg +4 -0
  95. package/dist/crypto-icons/klv.svg +4 -0
  96. package/dist/crypto-icons/kmd.svg +1 -0
  97. package/dist/crypto-icons/ksm.svg +1 -0
  98. package/dist/crypto-icons/kub.svg +4 -0
  99. package/dist/crypto-icons/linea.svg +4 -0
  100. package/dist/crypto-icons/link.svg +1 -0
  101. package/dist/crypto-icons/looks.svg +4 -0
  102. package/dist/crypto-icons/lrc.svg +1 -0
  103. package/dist/crypto-icons/lsk.svg +1 -0
  104. package/dist/crypto-icons/ltc.svg +1 -0
  105. package/dist/crypto-icons/mana.svg +1 -0
  106. package/dist/crypto-icons/matic.svg +1 -0
  107. package/dist/crypto-icons/mbx.svg +4 -0
  108. package/dist/crypto-icons/melania.svg +4 -0
  109. package/dist/crypto-icons/metamaskusd.svg +4 -0
  110. package/dist/crypto-icons/metis.svg +4 -0
  111. package/dist/crypto-icons/mezo.svg +4 -0
  112. package/dist/crypto-icons/mezousd.svg +4 -0
  113. package/dist/crypto-icons/mkr.svg +1 -0
  114. package/dist/crypto-icons/mnee.svg +4 -0
  115. package/dist/crypto-icons/mnt.svg +4 -0
  116. package/dist/crypto-icons/mob.svg +4 -0
  117. package/dist/crypto-icons/mon.svg +4 -0
  118. package/dist/crypto-icons/move.svg +4 -0
  119. package/dist/crypto-icons/movr.svg +4 -0
  120. package/dist/crypto-icons/myth.svg +4 -0
  121. package/dist/crypto-icons/near.svg +4 -0
  122. package/dist/crypto-icons/neiro.svg +4 -0
  123. package/dist/crypto-icons/oas.svg +4 -0
  124. package/dist/crypto-icons/omg.svg +1 -0
  125. package/dist/crypto-icons/omusd.svg +4 -0
  126. package/dist/crypto-icons/one.svg +1 -0
  127. package/dist/crypto-icons/op.svg +1 -0
  128. package/dist/crypto-icons/optimism.svg +4 -0
  129. package/dist/crypto-icons/order.svg +4 -0
  130. package/dist/crypto-icons/peaq.svg +4 -0
  131. package/dist/crypto-icons/pen.svg +4 -0
  132. package/dist/crypto-icons/perc.svg +4 -0
  133. package/dist/crypto-icons/pi.svg +4 -0
  134. package/dist/crypto-icons/plmc.svg +4 -0
  135. package/dist/crypto-icons/pol.svg +4 -0
  136. package/dist/crypto-icons/polyx.svg +4 -0
  137. package/dist/crypto-icons/propc.svg +4 -0
  138. package/dist/crypto-icons/pstake.svg +4 -0
  139. package/dist/crypto-icons/pulsechain.svg +4 -0
  140. package/dist/crypto-icons/q.svg +4 -0
  141. package/dist/crypto-icons/qrdo.svg +4 -0
  142. package/dist/crypto-icons/qrl.svg +1 -0
  143. package/dist/crypto-icons/qubic.svg +4 -0
  144. package/dist/crypto-icons/rbx.svg +4 -0
  145. package/dist/crypto-icons/revu.svg +4 -0
  146. package/dist/crypto-icons/rite.svg +4 -0
  147. package/dist/crypto-icons/rlusd.svg +4 -0
  148. package/dist/crypto-icons/rollux.svg +4 -0
  149. package/dist/crypto-icons/ron.svg +4 -0
  150. package/dist/crypto-icons/ronin.svg +4 -0
  151. package/dist/crypto-icons/rune.svg +4 -0
  152. package/dist/crypto-icons/s.svg +4 -0
  153. package/dist/crypto-icons/sand.svg +1 -0
  154. package/dist/crypto-icons/sei.svg +4 -0
  155. package/dist/crypto-icons/snx.svg +1 -0
  156. package/dist/crypto-icons/soil.svg +4 -0
  157. package/dist/crypto-icons/sol.svg +1 -0
  158. package/dist/crypto-icons/solo.svg +4 -0
  159. package/dist/crypto-icons/somi.svg +4 -0
  160. package/dist/crypto-icons/sophon.svg +4 -0
  161. package/dist/crypto-icons/stark.svg +4 -0
  162. package/dist/crypto-icons/strk.svg +4 -0
  163. package/dist/crypto-icons/sui.svg +4 -0
  164. package/dist/crypto-icons/supr.svg +4 -0
  165. package/dist/crypto-icons/supra.svg +4 -0
  166. package/dist/crypto-icons/sushi.svg +1 -0
  167. package/dist/crypto-icons/sys.svg +1 -0
  168. package/dist/crypto-icons/tbtc.svg +4 -0
  169. package/dist/crypto-icons/thorchain.svg +4 -0
  170. package/dist/crypto-icons/ton.svg +4 -0
  171. package/dist/crypto-icons/tron.svg +4 -0
  172. package/dist/crypto-icons/trump.svg +4 -0
  173. package/dist/crypto-icons/trx.svg +1 -0
  174. package/dist/crypto-icons/twt.svg +4 -0
  175. package/dist/crypto-icons/uni.svg +1 -0
  176. package/dist/crypto-icons/unichain.svg +4 -0
  177. package/dist/crypto-icons/uranium.svg +4 -0
  178. package/dist/crypto-icons/usd0.svg +4 -0
  179. package/dist/crypto-icons/usd1.svg +4 -0
  180. package/dist/crypto-icons/usdc.svg +1 -0
  181. package/dist/crypto-icons/usde.svg +4 -0
  182. package/dist/crypto-icons/usdp.svg +4 -0
  183. package/dist/crypto-icons/usdq.svg +4 -0
  184. package/dist/crypto-icons/usdr.svg +4 -0
  185. package/dist/crypto-icons/usdt.svg +1 -0
  186. package/dist/crypto-icons/usdt0.svg +4 -0
  187. package/dist/crypto-icons/verse.svg +4 -0
  188. package/dist/crypto-icons/vfx.svg +4 -0
  189. package/dist/crypto-icons/vic.svg +4 -0
  190. package/dist/crypto-icons/wal.svg +4 -0
  191. package/dist/crypto-icons/waves.svg +1 -0
  192. package/dist/crypto-icons/waxp.svg +4 -0
  193. package/dist/crypto-icons/wbtc.svg +1 -0
  194. package/dist/crypto-icons/weth.svg +4 -0
  195. package/dist/crypto-icons/wld.svg +4 -0
  196. package/dist/crypto-icons/wlfi.svg +4 -0
  197. package/dist/crypto-icons/wolf.svg +4 -0
  198. package/dist/crypto-icons/wombat.svg +4 -0
  199. package/dist/crypto-icons/xch.svg +4 -0
  200. package/dist/crypto-icons/xlm.svg +1 -0
  201. package/dist/crypto-icons/xprt.svg +4 -0
  202. package/dist/crypto-icons/xrp.svg +1 -0
  203. package/dist/crypto-icons/xtz.svg +1 -0
  204. package/dist/crypto-icons/yfi.svg +1 -0
  205. package/dist/crypto-icons/zbu.svg +4 -0
  206. package/dist/crypto-icons/zchf.svg +4 -0
  207. package/dist/crypto-icons/zec.svg +1 -0
  208. package/dist/crypto-icons/zeta.svg +4 -0
  209. package/dist/crypto-icons/zksync.svg +4 -0
  210. package/dist/crypto-icons/ztg.svg +4 -0
  211. package/dist/flags/ac.svg +1 -0
  212. package/dist/flags/ad.svg +1 -0
  213. package/dist/flags/ae.svg +1 -0
  214. package/dist/flags/af-emirate.svg +1 -0
  215. package/dist/flags/af.svg +1 -0
  216. package/dist/flags/ag.svg +1 -0
  217. package/dist/flags/ai.svg +1 -0
  218. package/dist/flags/al.svg +1 -0
  219. package/dist/flags/am.svg +1 -0
  220. package/dist/flags/an.svg +1 -0
  221. package/dist/flags/ao.svg +1 -0
  222. package/dist/flags/aq-true_south.svg +1 -0
  223. package/dist/flags/aq.svg +1 -0
  224. package/dist/flags/ar.svg +1 -0
  225. package/dist/flags/artsakh.svg +1 -0
  226. package/dist/flags/as.svg +1 -0
  227. package/dist/flags/at.svg +1 -0
  228. package/dist/flags/au-aboriginal.svg +1 -0
  229. package/dist/flags/au-act.svg +1 -0
  230. package/dist/flags/au-nsw.svg +1 -0
  231. package/dist/flags/au-nt.svg +1 -0
  232. package/dist/flags/au-qld.svg +1 -0
  233. package/dist/flags/au-sa.svg +1 -0
  234. package/dist/flags/au-tas.svg +1 -0
  235. package/dist/flags/au-torres_strait_islands.svg +1 -0
  236. package/dist/flags/au-vic.svg +1 -0
  237. package/dist/flags/au-wa.svg +1 -0
  238. package/dist/flags/au.svg +1 -0
  239. package/dist/flags/aw.svg +1 -0
  240. package/dist/flags/ax.svg +1 -0
  241. package/dist/flags/az.svg +1 -0
  242. package/dist/flags/ba.svg +1 -0
  243. package/dist/flags/bb.svg +1 -0
  244. package/dist/flags/bd.svg +1 -0
  245. package/dist/flags/be.svg +1 -0
  246. package/dist/flags/bf.svg +1 -0
  247. package/dist/flags/bg.svg +1 -0
  248. package/dist/flags/bh.svg +1 -0
  249. package/dist/flags/bi.svg +1 -0
  250. package/dist/flags/bj.svg +1 -0
  251. package/dist/flags/bl.svg +1 -0
  252. package/dist/flags/bm.svg +1 -0
  253. package/dist/flags/bn.svg +1 -0
  254. package/dist/flags/bo.svg +1 -0
  255. package/dist/flags/bq-bo.svg +1 -0
  256. package/dist/flags/bq-sa.svg +1 -0
  257. package/dist/flags/bq-se.svg +1 -0
  258. package/dist/flags/bq.svg +1 -0
  259. package/dist/flags/br.svg +1 -0
  260. package/dist/flags/bs.svg +1 -0
  261. package/dist/flags/bt.svg +1 -0
  262. package/dist/flags/bv.svg +1 -0
  263. package/dist/flags/bw.svg +1 -0
  264. package/dist/flags/by-historical.svg +1 -0
  265. package/dist/flags/by.svg +1 -0
  266. package/dist/flags/bz.svg +1 -0
  267. package/dist/flags/ca-bc.svg +1 -0
  268. package/dist/flags/ca-qc.svg +1 -0
  269. package/dist/flags/ca.svg +1 -0
  270. package/dist/flags/cc.svg +1 -0
  271. package/dist/flags/cd.svg +1 -0
  272. package/dist/flags/cf.svg +1 -0
  273. package/dist/flags/cg.svg +1 -0
  274. package/dist/flags/ch-gr.svg +1 -0
  275. package/dist/flags/ch.svg +1 -0
  276. package/dist/flags/ci.svg +1 -0
  277. package/dist/flags/ck.svg +1 -0
  278. package/dist/flags/cl.svg +1 -0
  279. package/dist/flags/cm.svg +1 -0
  280. package/dist/flags/cn-hk.svg +1 -0
  281. package/dist/flags/cn-xj.svg +1 -0
  282. package/dist/flags/cn-xz.svg +1 -0
  283. package/dist/flags/cn.svg +1 -0
  284. package/dist/flags/co.svg +1 -0
  285. package/dist/flags/cp.svg +1 -0
  286. package/dist/flags/cq.svg +1 -0
  287. package/dist/flags/cr.svg +1 -0
  288. package/dist/flags/cu.svg +1 -0
  289. package/dist/flags/cv.svg +1 -0
  290. package/dist/flags/cw.svg +1 -0
  291. package/dist/flags/cx.svg +1 -0
  292. package/dist/flags/cy.svg +1 -0
  293. package/dist/flags/cz.svg +1 -0
  294. package/dist/flags/de.svg +1 -0
  295. package/dist/flags/dg.svg +1 -0
  296. package/dist/flags/dj.svg +1 -0
  297. package/dist/flags/dk.svg +1 -0
  298. package/dist/flags/dm.svg +1 -0
  299. package/dist/flags/do.svg +1 -0
  300. package/dist/flags/dz.svg +1 -0
  301. package/dist/flags/ea.svg +1 -0
  302. package/dist/flags/east_african_federation.svg +1 -0
  303. package/dist/flags/easter_island.svg +1 -0
  304. package/dist/flags/ec-w.svg +1 -0
  305. package/dist/flags/ec.svg +1 -0
  306. package/dist/flags/ee.svg +1 -0
  307. package/dist/flags/eg.svg +1 -0
  308. package/dist/flags/eh.svg +1 -0
  309. package/dist/flags/er.svg +1 -0
  310. package/dist/flags/es-ar.svg +1 -0
  311. package/dist/flags/es-ce.svg +1 -0
  312. package/dist/flags/es-cn.svg +1 -0
  313. package/dist/flags/es-ct.svg +1 -0
  314. package/dist/flags/es-ga.svg +1 -0
  315. package/dist/flags/es-ib.svg +1 -0
  316. package/dist/flags/es-ml.svg +1 -0
  317. package/dist/flags/es-pv.svg +1 -0
  318. package/dist/flags/es-variant.svg +1 -0
  319. package/dist/flags/es.svg +1 -0
  320. package/dist/flags/et-af.svg +1 -0
  321. package/dist/flags/et-am.svg +1 -0
  322. package/dist/flags/et-be.svg +1 -0
  323. package/dist/flags/et-ga.svg +1 -0
  324. package/dist/flags/et-ha.svg +1 -0
  325. package/dist/flags/et-or.svg +1 -0
  326. package/dist/flags/et-si.svg +1 -0
  327. package/dist/flags/et-sn.svg +1 -0
  328. package/dist/flags/et-so.svg +1 -0
  329. package/dist/flags/et-sw.svg +1 -0
  330. package/dist/flags/et-ti.svg +1 -0
  331. package/dist/flags/et.svg +1 -0
  332. package/dist/flags/eu.svg +1 -0
  333. package/dist/flags/european_union.svg +1 -0
  334. package/dist/flags/ewe.svg +1 -0
  335. package/dist/flags/fi.svg +1 -0
  336. package/dist/flags/fj.svg +1 -0
  337. package/dist/flags/fk.svg +1 -0
  338. package/dist/flags/fm.svg +1 -0
  339. package/dist/flags/fo.svg +1 -0
  340. package/dist/flags/fr-20r.svg +1 -0
  341. package/dist/flags/fr-bre.svg +1 -0
  342. package/dist/flags/fr-cp.svg +1 -0
  343. package/dist/flags/fr.svg +1 -0
  344. package/dist/flags/fx.svg +1 -0
  345. package/dist/flags/ga.svg +1 -0
  346. package/dist/flags/gb-con.svg +1 -0
  347. package/dist/flags/gb-eng.svg +1 -0
  348. package/dist/flags/gb-nir.svg +1 -0
  349. package/dist/flags/gb-ork.svg +1 -0
  350. package/dist/flags/gb-sct.svg +1 -0
  351. package/dist/flags/gb-wls.svg +1 -0
  352. package/dist/flags/gb.svg +1 -0
  353. package/dist/flags/gd.svg +1 -0
  354. package/dist/flags/ge-ab.svg +1 -0
  355. package/dist/flags/ge.svg +1 -0
  356. package/dist/flags/gf.svg +1 -0
  357. package/dist/flags/gg.svg +1 -0
  358. package/dist/flags/gh.svg +1 -0
  359. package/dist/flags/gi.svg +1 -0
  360. package/dist/flags/gl.svg +1 -0
  361. package/dist/flags/gm.svg +1 -0
  362. package/dist/flags/gn.svg +1 -0
  363. package/dist/flags/gp.svg +1 -0
  364. package/dist/flags/gq.svg +1 -0
  365. package/dist/flags/gr.svg +1 -0
  366. package/dist/flags/gs.svg +1 -0
  367. package/dist/flags/gt.svg +1 -0
  368. package/dist/flags/gu.svg +1 -0
  369. package/dist/flags/guarani.svg +1 -0
  370. package/dist/flags/gw.svg +1 -0
  371. package/dist/flags/gy.svg +1 -0
  372. package/dist/flags/hausa.svg +1 -0
  373. package/dist/flags/hk.svg +1 -0
  374. package/dist/flags/hm.svg +1 -0
  375. package/dist/flags/hmong.svg +1 -0
  376. package/dist/flags/hn.svg +1 -0
  377. package/dist/flags/hr.svg +1 -0
  378. package/dist/flags/ht.svg +1 -0
  379. package/dist/flags/hu.svg +1 -0
  380. package/dist/flags/ic.svg +1 -0
  381. package/dist/flags/id-jb.svg +1 -0
  382. package/dist/flags/id-jt.svg +1 -0
  383. package/dist/flags/id.svg +1 -0
  384. package/dist/flags/ie.svg +1 -0
  385. package/dist/flags/il.svg +1 -0
  386. package/dist/flags/im.svg +1 -0
  387. package/dist/flags/in-as.svg +1 -0
  388. package/dist/flags/in-gj.svg +1 -0
  389. package/dist/flags/in-ka.svg +1 -0
  390. package/dist/flags/in-mn.svg +1 -0
  391. package/dist/flags/in-mz.svg +1 -0
  392. package/dist/flags/in-or.svg +1 -0
  393. package/dist/flags/in-tg.svg +1 -0
  394. package/dist/flags/in-tn.svg +1 -0
  395. package/dist/flags/in.svg +1 -0
  396. package/dist/flags/io.svg +1 -0
  397. package/dist/flags/iq-kr.svg +1 -0
  398. package/dist/flags/iq.svg +1 -0
  399. package/dist/flags/ir.svg +1 -0
  400. package/dist/flags/is.svg +1 -0
  401. package/dist/flags/it-21.svg +1 -0
  402. package/dist/flags/it-23.svg +1 -0
  403. package/dist/flags/it-25.svg +1 -0
  404. package/dist/flags/it-32.svg +1 -0
  405. package/dist/flags/it-34.svg +1 -0
  406. package/dist/flags/it-36.svg +1 -0
  407. package/dist/flags/it-42.svg +1 -0
  408. package/dist/flags/it-45.svg +1 -0
  409. package/dist/flags/it-52.svg +1 -0
  410. package/dist/flags/it-55.svg +1 -0
  411. package/dist/flags/it-57.svg +1 -0
  412. package/dist/flags/it-62.svg +1 -0
  413. package/dist/flags/it-65.svg +1 -0
  414. package/dist/flags/it-67.svg +1 -0
  415. package/dist/flags/it-72.svg +1 -0
  416. package/dist/flags/it-75.svg +1 -0
  417. package/dist/flags/it-77.svg +1 -0
  418. package/dist/flags/it-78.svg +1 -0
  419. package/dist/flags/it-82.svg +1 -0
  420. package/dist/flags/it-88.svg +1 -0
  421. package/dist/flags/it.svg +1 -0
  422. package/dist/flags/je.svg +1 -0
  423. package/dist/flags/jm.svg +1 -0
  424. package/dist/flags/jo.svg +1 -0
  425. package/dist/flags/jp.svg +1 -0
  426. package/dist/flags/kanuri.svg +1 -0
  427. package/dist/flags/ke.svg +1 -0
  428. package/dist/flags/kg.svg +1 -0
  429. package/dist/flags/kh.svg +1 -0
  430. package/dist/flags/ki.svg +1 -0
  431. package/dist/flags/kikuyu.svg +1 -0
  432. package/dist/flags/km.svg +1 -0
  433. package/dist/flags/kn.svg +1 -0
  434. package/dist/flags/kongo.svg +1 -0
  435. package/dist/flags/kp.svg +1 -0
  436. package/dist/flags/kr.svg +1 -0
  437. package/dist/flags/kw.svg +1 -0
  438. package/dist/flags/ky.svg +1 -0
  439. package/dist/flags/kz.svg +1 -0
  440. package/dist/flags/la.svg +1 -0
  441. package/dist/flags/lb.svg +1 -0
  442. package/dist/flags/lc.svg +1 -0
  443. package/dist/flags/li.svg +1 -0
  444. package/dist/flags/lk.svg +1 -0
  445. package/dist/flags/lr.svg +1 -0
  446. package/dist/flags/ls.svg +1 -0
  447. package/dist/flags/lt.svg +1 -0
  448. package/dist/flags/lu.svg +1 -0
  449. package/dist/flags/lv.svg +1 -0
  450. package/dist/flags/ly.svg +1 -0
  451. package/dist/flags/ma.svg +1 -0
  452. package/dist/flags/malayali.svg +1 -0
  453. package/dist/flags/maori.svg +1 -0
  454. package/dist/flags/mc.svg +1 -0
  455. package/dist/flags/md.svg +1 -0
  456. package/dist/flags/me.svg +1 -0
  457. package/dist/flags/mf.svg +1 -0
  458. package/dist/flags/mg.svg +1 -0
  459. package/dist/flags/mh.svg +1 -0
  460. package/dist/flags/mk.svg +1 -0
  461. package/dist/flags/ml.svg +1 -0
  462. package/dist/flags/mm.svg +1 -0
  463. package/dist/flags/mn.svg +1 -0
  464. package/dist/flags/mo.svg +1 -0
  465. package/dist/flags/mp.svg +1 -0
  466. package/dist/flags/mq-old.svg +1 -0
  467. package/dist/flags/mq.svg +1 -0
  468. package/dist/flags/mr.svg +1 -0
  469. package/dist/flags/ms.svg +1 -0
  470. package/dist/flags/mt-civil_ensign.svg +1 -0
  471. package/dist/flags/mt.svg +1 -0
  472. package/dist/flags/mu.svg +1 -0
  473. package/dist/flags/mv.svg +1 -0
  474. package/dist/flags/mw.svg +1 -0
  475. package/dist/flags/mx.svg +1 -0
  476. package/dist/flags/my.svg +1 -0
  477. package/dist/flags/mz.svg +1 -0
  478. package/dist/flags/na.svg +1 -0
  479. package/dist/flags/nc.svg +1 -0
  480. package/dist/flags/ne.svg +1 -0
  481. package/dist/flags/nf.svg +1 -0
  482. package/dist/flags/ng.svg +1 -0
  483. package/dist/flags/ni.svg +1 -0
  484. package/dist/flags/nl-fr.svg +1 -0
  485. package/dist/flags/nl.svg +1 -0
  486. package/dist/flags/no.svg +1 -0
  487. package/dist/flags/northern_cyprus.svg +1 -0
  488. package/dist/flags/np.svg +1 -0
  489. package/dist/flags/nr.svg +1 -0
  490. package/dist/flags/nu.svg +1 -0
  491. package/dist/flags/nz.svg +1 -0
  492. package/dist/flags/occitania.svg +1 -0
  493. package/dist/flags/om.svg +1 -0
  494. package/dist/flags/otomi.svg +1 -0
  495. package/dist/flags/pa.svg +1 -0
  496. package/dist/flags/pe.svg +1 -0
  497. package/dist/flags/pf.svg +1 -0
  498. package/dist/flags/pg.svg +1 -0
  499. package/dist/flags/ph.svg +1 -0
  500. package/dist/flags/pk-jk.svg +1 -0
  501. package/dist/flags/pk-sd.svg +1 -0
  502. package/dist/flags/pk.svg +1 -0
  503. package/dist/flags/pl.svg +1 -0
  504. package/dist/flags/pm.svg +1 -0
  505. package/dist/flags/pn.svg +1 -0
  506. package/dist/flags/pr.svg +1 -0
  507. package/dist/flags/ps.svg +1 -0
  508. package/dist/flags/pt-20.svg +1 -0
  509. package/dist/flags/pt-30.svg +1 -0
  510. package/dist/flags/pt.svg +1 -0
  511. package/dist/flags/pw.svg +1 -0
  512. package/dist/flags/py.svg +1 -0
  513. package/dist/flags/qa.svg +1 -0
  514. package/dist/flags/quechua.svg +1 -0
  515. package/dist/flags/re.svg +1 -0
  516. package/dist/flags/ro.svg +1 -0
  517. package/dist/flags/rs.svg +1 -0
  518. package/dist/flags/ru-ba.svg +1 -0
  519. package/dist/flags/ru-ce.svg +1 -0
  520. package/dist/flags/ru-cu.svg +1 -0
  521. package/dist/flags/ru-da.svg +1 -0
  522. package/dist/flags/ru-dpr.svg +1 -0
  523. package/dist/flags/ru-ko.svg +1 -0
  524. package/dist/flags/ru-lpr.svg +1 -0
  525. package/dist/flags/ru-ta.svg +1 -0
  526. package/dist/flags/ru-ud.svg +1 -0
  527. package/dist/flags/ru.svg +1 -0
  528. package/dist/flags/rw.svg +1 -0
  529. package/dist/flags/sa.svg +1 -0
  530. package/dist/flags/sami.svg +1 -0
  531. package/dist/flags/sb.svg +1 -0
  532. package/dist/flags/sc.svg +1 -0
  533. package/dist/flags/sd.svg +1 -0
  534. package/dist/flags/se.svg +1 -0
  535. package/dist/flags/sealand.svg +1 -0
  536. package/dist/flags/sg.svg +1 -0
  537. package/dist/flags/sh-ac.svg +1 -0
  538. package/dist/flags/sh-hl.svg +1 -0
  539. package/dist/flags/sh-ta.svg +1 -0
  540. package/dist/flags/sh.svg +1 -0
  541. package/dist/flags/si.svg +1 -0
  542. package/dist/flags/sj.svg +1 -0
  543. package/dist/flags/sk.svg +1 -0
  544. package/dist/flags/sl.svg +1 -0
  545. package/dist/flags/sm.svg +1 -0
  546. package/dist/flags/sn.svg +1 -0
  547. package/dist/flags/so.svg +1 -0
  548. package/dist/flags/somaliland.svg +1 -0
  549. package/dist/flags/south_ossetia.svg +1 -0
  550. package/dist/flags/soviet_union.svg +1 -0
  551. package/dist/flags/sr.svg +1 -0
  552. package/dist/flags/ss.svg +1 -0
  553. package/dist/flags/st.svg +1 -0
  554. package/dist/flags/su.svg +1 -0
  555. package/dist/flags/sv.svg +1 -0
  556. package/dist/flags/sx.svg +1 -0
  557. package/dist/flags/sy.svg +1 -0
  558. package/dist/flags/sz.svg +1 -0
  559. package/dist/flags/ta.svg +1 -0
  560. package/dist/flags/tc.svg +1 -0
  561. package/dist/flags/td.svg +1 -0
  562. package/dist/flags/tf.svg +1 -0
  563. package/dist/flags/tg.svg +1 -0
  564. package/dist/flags/th.svg +1 -0
  565. package/dist/flags/tj.svg +1 -0
  566. package/dist/flags/tk.svg +1 -0
  567. package/dist/flags/tl.svg +1 -0
  568. package/dist/flags/tm.svg +1 -0
  569. package/dist/flags/tn.svg +1 -0
  570. package/dist/flags/to.svg +1 -0
  571. package/dist/flags/tr.svg +1 -0
  572. package/dist/flags/transnistria.svg +1 -0
  573. package/dist/flags/tt.svg +1 -0
  574. package/dist/flags/tv.svg +1 -0
  575. package/dist/flags/tw.svg +1 -0
  576. package/dist/flags/tz-zanzibar.svg +1 -0
  577. package/dist/flags/tz.svg +1 -0
  578. package/dist/flags/ua-bpr.svg +1 -0
  579. package/dist/flags/ua-kpr.svg +1 -0
  580. package/dist/flags/ua.svg +1 -0
  581. package/dist/flags/ug.svg +1 -0
  582. package/dist/flags/uk.svg +1 -0
  583. package/dist/flags/um.svg +1 -0
  584. package/dist/flags/un.svg +1 -0
  585. package/dist/flags/us-ak.svg +1 -0
  586. package/dist/flags/us-al.svg +1 -0
  587. package/dist/flags/us-ar.svg +1 -0
  588. package/dist/flags/us-as.svg +1 -0
  589. package/dist/flags/us-az.svg +1 -0
  590. package/dist/flags/us-betsy_ross.svg +1 -0
  591. package/dist/flags/us-ca.svg +1 -0
  592. package/dist/flags/us-co.svg +1 -0
  593. package/dist/flags/us-confederate_battle.svg +1 -0
  594. package/dist/flags/us-dc.svg +1 -0
  595. package/dist/flags/us-fl.svg +1 -0
  596. package/dist/flags/us-ga.svg +1 -0
  597. package/dist/flags/us-gu.svg +1 -0
  598. package/dist/flags/us-hi.svg +1 -0
  599. package/dist/flags/us-in.svg +1 -0
  600. package/dist/flags/us-md.svg +1 -0
  601. package/dist/flags/us-mn.svg +1 -0
  602. package/dist/flags/us-mo.svg +1 -0
  603. package/dist/flags/us-mp.svg +1 -0
  604. package/dist/flags/us-ms.svg +1 -0
  605. package/dist/flags/us-nc.svg +1 -0
  606. package/dist/flags/us-nm.svg +1 -0
  607. package/dist/flags/us-or.svg +1 -0
  608. package/dist/flags/us-pr.svg +1 -0
  609. package/dist/flags/us-ri.svg +1 -0
  610. package/dist/flags/us-sc.svg +1 -0
  611. package/dist/flags/us-tn.svg +1 -0
  612. package/dist/flags/us-tx.svg +1 -0
  613. package/dist/flags/us-um.svg +1 -0
  614. package/dist/flags/us-vi.svg +1 -0
  615. package/dist/flags/us-wa.svg +1 -0
  616. package/dist/flags/us-wi.svg +1 -0
  617. package/dist/flags/us-wy.svg +1 -0
  618. package/dist/flags/us.svg +1 -0
  619. package/dist/flags/uy.svg +1 -0
  620. package/dist/flags/uz.svg +1 -0
  621. package/dist/flags/va.svg +1 -0
  622. package/dist/flags/vc.svg +1 -0
  623. package/dist/flags/ve.svg +1 -0
  624. package/dist/flags/vg.svg +1 -0
  625. package/dist/flags/vi.svg +1 -0
  626. package/dist/flags/vn.svg +1 -0
  627. package/dist/flags/vu.svg +1 -0
  628. package/dist/flags/wf.svg +1 -0
  629. package/dist/flags/wiphala.svg +1 -0
  630. package/dist/flags/ws.svg +1 -0
  631. package/dist/flags/xk.svg +1 -0
  632. package/dist/flags/xx.svg +1 -0
  633. package/dist/flags/ye.svg +1 -0
  634. package/dist/flags/yorubaland.svg +1 -0
  635. package/dist/flags/yt.svg +1 -0
  636. package/dist/flags/yu.svg +1 -0
  637. package/dist/flags/za.svg +1 -0
  638. package/dist/flags/zm.svg +1 -0
  639. package/dist/flags/zw.svg +1 -0
  640. package/dist/index.cjs +12 -0
  641. package/dist/index.cjs.map +1 -0
  642. package/dist/index.js +2582 -0
  643. package/dist/index.js.map +1 -0
  644. package/dist/nowramp-form.iife.js +55 -0
  645. package/dist/nowramp-form.iife.js.map +1 -0
  646. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/hooks/useRamp.ts","../src/context/RampContext.tsx","../src/components/CheckoutStep.tsx","../src/components/ProcessingStep.tsx","../src/components/CompleteStep.tsx","../src/components/ErrorStep.tsx","../src/components/ConfirmStep.tsx","../src/components/ui/Modal.tsx","../src/components/ui/AnimatedNumber.tsx","../src/components/ui/Skeleton.tsx","../src/data/cryptoData.ts","../src/components/ui/icons.tsx","../src/components/ui/CloseButton.tsx","../src/components/ui/SearchInput.tsx","../src/components/modals/FiatCurrencyModal.tsx","../src/components/modals/CryptoCurrencyModal.tsx","../src/components/ui/ToggleSwitch.tsx","../src/components/modals/SettingsScreen.tsx","../src/components/RampForm.tsx","../src/components/CheckoutForm.tsx","../src/components/ui/SkinSwatch.tsx","../src/components/modals/ChooseRampModal.tsx"],"sourcesContent":["/**\n * React hooks for NowRamp Onramp API\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n RampApi,\n type RampApiConfig,\n type OnrampSupported,\n type QuotesResponse,\n type GetQuotesParams,\n type CheckoutIntent,\n type CreateCheckoutIntentParams,\n type Transaction,\n type FlowType,\n} from '@nowramp/sdk';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseRampConfigResult {\n config: OnrampSupported | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\nexport interface UseQuotesResult {\n quotes: QuotesResponse | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\nexport interface UseCheckoutIntentResult {\n order: CheckoutIntent | null;\n loading: boolean;\n error: Error | null;\n createOrder: (params: CreateCheckoutIntentParams) => Promise<CheckoutIntent>;\n reset: () => void;\n}\n\nexport interface UseTransactionResult {\n status: Transaction | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\n/**\n * Hook to fetch onramp supported configuration\n * Returns gateways, currencies, and payment methods\n */\nexport function useRampConfig(\n config: Pick<RampApiConfig, 'apiUrl' | 'projectId'>,\n orderType?: FlowType\n): UseRampConfigResult {\n const [data, setData] = useState<OnrampSupported | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const apiRef = useRef<RampApi | null>(null);\n\n // Memoize API instance\n if (!apiRef.current || apiRef.current !== config) {\n apiRef.current = new RampApi({ apiKey: '', ...config });\n }\n\n const fetchConfig = useCallback(async () => {\n if (!config.projectId) {\n setError(new Error('projectId is required'));\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await apiRef.current!.getSupported(orderType);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch config'));\n } finally {\n setLoading(false);\n }\n }, [config.projectId, orderType]);\n\n useEffect(() => {\n fetchConfig();\n }, [fetchConfig]);\n\n return { config: data, loading, error, refetch: fetchConfig };\n}\n\n/**\n * Hook to fetch quotes from all gateways\n * Auto-refreshes when params change\n */\nexport function useQuotes(\n config: Pick<RampApiConfig, 'apiUrl' | 'projectId'>,\n params: GetQuotesParams | null\n): UseQuotesResult {\n const [data, setData] = useState<QuotesResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const apiRef = useRef<RampApi | null>(null);\n const configKeyRef = useRef('');\n\n // Recreate API instance when config changes\n const configKey = `${config.apiUrl}|${config.projectId}`;\n if (!apiRef.current || configKeyRef.current !== configKey) {\n apiRef.current = new RampApi({ apiKey: '', ...config });\n configKeyRef.current = configKey;\n }\n\n const fetchIdRef = useRef(0);\n\n useEffect(() => {\n // Bump fetch ID on every param change to invalidate in-flight requests\n const id = ++fetchIdRef.current;\n\n if (!params || !config.projectId) {\n setData(null);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n apiRef.current!.getQuotes(params).then(\n (result) => {\n if (fetchIdRef.current === id) {\n setData(result);\n setLoading(false);\n }\n },\n (err) => {\n if (fetchIdRef.current === id) {\n setError(err instanceof Error ? err : new Error('Failed to fetch quotes'));\n setData(null);\n setLoading(false);\n }\n }\n );\n }, [config.projectId, params?.fiatCurrency, params?.fiatAmount, params?.cryptoAmount, params?.cryptoCurrency, params?.network, params?.paymentMethodId, params?.country, params?.orderType]);\n\n const refetch = useCallback(async () => {\n if (!params || !config.projectId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await apiRef.current!.getQuotes(params);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch quotes'));\n } finally {\n setLoading(false);\n }\n }, [config.projectId, params]);\n\n return { quotes: data, loading, error, refetch };\n}\n\n/**\n * Hook to create a checkout intent\n */\nexport function useCheckoutIntent(\n config: Pick<RampApiConfig, 'apiUrl' | 'projectId'>\n): UseCheckoutIntentResult {\n const [order, setOrder] = useState<CheckoutIntent | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const apiRef = useRef<RampApi | null>(null);\n const configKeyRef = useRef('');\n\n // Recreate API instance when config changes\n const configKey = `${config.apiUrl}|${config.projectId}`;\n if (!apiRef.current || configKeyRef.current !== configKey) {\n apiRef.current = new RampApi({ apiKey: '', ...config });\n configKeyRef.current = configKey;\n }\n\n const createOrder = useCallback(async (params: CreateCheckoutIntentParams): Promise<CheckoutIntent> => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await apiRef.current!.createCheckoutIntent(params);\n setOrder(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create checkout intent');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const reset = useCallback(() => {\n setOrder(null);\n setError(null);\n }, []);\n\n return { order, loading, error, createOrder, reset };\n}\n\n/**\n * Hook to poll transaction status\n */\nexport function useTransaction(\n config: Pick<RampApiConfig, 'apiUrl'>,\n transactionId: string | null,\n options?: { pollInterval?: number; initialDelay?: number }\n): UseTransactionResult {\n const [status, setStatus] = useState<Transaction | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const apiRef = useRef<RampApi | null>(null);\n\n if (!apiRef.current) {\n apiRef.current = new RampApi({ apiKey: '', projectId: '', ...config });\n }\n\n const fetchStatus = useCallback(async () => {\n if (!transactionId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await apiRef.current!.getTransaction(transactionId);\n setStatus(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch status'));\n } finally {\n setLoading(false);\n }\n }, [transactionId]);\n\n // Initial fetch (with optional delay to let checkout iframe load first)\n useEffect(() => {\n if (!transactionId) return;\n\n const delay = options?.initialDelay ?? 0;\n if (delay > 0) {\n const timer = setTimeout(fetchStatus, delay);\n return () => clearTimeout(timer);\n }\n\n fetchStatus();\n }, [fetchStatus, transactionId, options?.initialDelay]);\n\n // Polling — only start after the initial (possibly delayed) fetch has\n // returned a status. Without the `!status` guard the setInterval would\n // bypass initialDelay entirely, firing its first callback at pollInterval\n // (e.g. 5 s) even though we asked for a 15 s delay.\n useEffect(() => {\n if (!transactionId || !options?.pollInterval) return;\n\n // Wait for the initial fetch to populate status before polling\n if (!status) return;\n\n // Stop polling if order is in terminal state\n const terminalStatuses = ['completed', 'failed', 'cancelled', 'expired', 'refunded'];\n if (terminalStatuses.includes(status.status)) {\n return;\n }\n\n const interval = setInterval(fetchStatus, options.pollInterval);\n return () => clearInterval(interval);\n }, [transactionId, options?.pollInterval, status?.status, fetchStatus]);\n\n return { status, loading, error, refetch: fetchStatus };\n}\n","/**\n * Ramp Context Provider\n * Provides configuration and state management for the ramp form\n */\n\nimport React, { createContext, useContext, useReducer, useCallback, useMemo, useRef } from 'react';\nimport type {\n RampApiConfig,\n OnrampSupported,\n QuotesResponse,\n Quote,\n CheckoutIntent,\n Transaction,\n FieldLocksConfig,\n FlowType,\n} from '@nowramp/sdk';\nimport {\n useRampConfig,\n useQuotes,\n useCheckoutIntent,\n useTransaction,\n} from '../hooks/useRamp';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type RampStep =\n | 'confirm' // Confirm pre-filled order (session mode)\n | 'amount' // Select currency and amount\n | 'quotes' // View and compare quotes\n | 'wallet' // Enter wallet address\n | 'checkout' // Provider checkout (iframe/redirect)\n | 'processing' // Waiting for completion\n | 'complete' // Success\n | 'error'; // Error state\n\nexport interface RampFormState {\n step: RampStep;\n flowType: FlowType;\n fiatCurrency: string;\n fiatAmount: string;\n cryptoCurrency: string;\n cryptoAmount: string;\n network: string;\n paymentMethodId: string;\n walletAddress: string;\n walletError: string | null;\n selectedProvider: string | null;\n selectedQuote: Quote | null;\n customerId: string;\n email: string;\n country: string;\n errorMessage: string | null;\n}\n\ntype RampAction =\n | { type: 'SET_STEP'; step: RampStep }\n | { type: 'SET_FLOW_TYPE'; flowType: FlowType }\n | { type: 'SET_FIAT_CURRENCY'; currency: string }\n | { type: 'SET_FIAT_AMOUNT'; amount: string }\n | { type: 'SET_CRYPTO_CURRENCY'; currency: string }\n | { type: 'SET_CRYPTO_AMOUNT'; amount: string }\n | { type: 'SET_NETWORK'; network: string }\n | { type: 'SET_CRYPTO_CHAIN'; chain: string }\n | { type: 'SET_PAYMENT_METHOD'; methodId: string }\n | { type: 'SET_WALLET_ADDRESS'; address: string }\n | { type: 'SET_WALLET_ERROR'; message: string }\n | { type: 'SELECT_QUOTE'; quote: Quote }\n | { type: 'SET_CUSTOMER_ID'; customerId: string }\n | { type: 'SET_EMAIL'; email: string }\n | { type: 'SET_COUNTRY'; country: string }\n | { type: 'SET_ERROR'; message: string }\n | { type: 'CLEAR_ERROR' }\n | { type: 'RESET' };\n\nexport interface RampContextValue {\n // Configuration\n apiConfig: Pick<RampApiConfig, 'apiUrl' | 'projectId'>;\n /** Base URL for static assets (crypto icons, flags). Empty string = root-relative. */\n assetBaseUrl: string;\n config: OnrampSupported | null;\n configLoading: boolean;\n configError: Error | null;\n\n // Form state\n state: RampFormState;\n dispatch: React.Dispatch<RampAction>;\n\n // Quotes\n quotes: QuotesResponse | null;\n quotesLoading: boolean;\n quotesError: Error | null;\n fetchQuotes: () => void;\n\n // Order\n order: CheckoutIntent | null;\n orderLoading: boolean;\n orderError: Error | null;\n createOrder: () => Promise<void>;\n\n // Order status\n orderStatus: Transaction | null;\n orderStatusLoading: boolean;\n\n // Session-aware props\n fieldLocks: FieldLocksConfig | null;\n defaultGateway: string | null;\n\n // Validation\n amountError: string | null;\n\n // Navigation helpers\n goToStep: (step: RampStep) => void;\n goBack: () => void;\n canProceed: boolean;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/** Strip trailing zeros and limit decimal places (cleans backend values like \"33.00000000\") */\nfunction normalizeAmount(value: string, maxDecimals: number): string {\n if (!value) return value;\n const dotIndex = value.indexOf('.');\n if (dotIndex === -1) return value;\n let result = value;\n if (result.length - dotIndex - 1 > maxDecimals) {\n result = result.slice(0, dotIndex + maxDecimals + 1);\n }\n result = result.replace(/0+$/, '').replace(/\\.$/, '');\n return result;\n}\n\n// =============================================================================\n// Initial State & Reducer\n// =============================================================================\n\nconst initialState: RampFormState = {\n step: 'amount',\n flowType: 'buy',\n fiatCurrency: 'USD',\n fiatAmount: '',\n cryptoCurrency: '',\n cryptoAmount: '',\n network: '',\n paymentMethodId: '',\n walletAddress: '',\n walletError: null,\n selectedProvider: null,\n selectedQuote: null,\n customerId: '',\n email: '',\n country: '',\n errorMessage: null,\n};\n\nfunction rampReducer(state: RampFormState, action: RampAction): RampFormState {\n switch (action.type) {\n case 'SET_STEP':\n return { ...state, step: action.step, errorMessage: null };\n case 'SET_FLOW_TYPE':\n return {\n ...state,\n flowType: action.flowType,\n fiatAmount: '',\n cryptoAmount: '',\n selectedQuote: null,\n selectedProvider: null,\n errorMessage: null,\n };\n case 'SET_FIAT_CURRENCY':\n return { ...state, fiatCurrency: action.currency };\n case 'SET_FIAT_AMOUNT':\n return { ...state, fiatAmount: action.amount };\n case 'SET_CRYPTO_CURRENCY':\n return { ...state, cryptoCurrency: action.currency, network: '' };\n case 'SET_CRYPTO_AMOUNT':\n return { ...state, cryptoAmount: action.amount };\n case 'SET_NETWORK':\n return { ...state, network: action.network };\n case 'SET_CRYPTO_CHAIN':\n return { ...state, network: action.chain };\n case 'SET_PAYMENT_METHOD':\n return { ...state, paymentMethodId: action.methodId };\n case 'SET_WALLET_ADDRESS':\n return { ...state, walletAddress: action.address, walletError: null };\n case 'SET_WALLET_ERROR':\n return { ...state, walletError: action.message };\n case 'SELECT_QUOTE':\n return {\n ...state,\n selectedQuote: action.quote,\n selectedProvider: action.quote.gatewayId,\n };\n case 'SET_CUSTOMER_ID':\n return { ...state, customerId: action.customerId };\n case 'SET_EMAIL':\n return { ...state, email: action.email };\n case 'SET_COUNTRY':\n return { ...state, country: action.country };\n case 'SET_ERROR':\n return { ...state, step: 'error', errorMessage: action.message };\n case 'CLEAR_ERROR':\n return { ...state, errorMessage: null };\n case 'RESET':\n return initialState;\n default:\n return state;\n }\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst RampContext = createContext<RampContextValue | null>(null);\n\nexport interface RampProviderProps {\n /** Project ID (required) */\n projectId: string;\n /** API base URL (optional) */\n apiUrl?: string;\n /** Base URL for static assets (crypto icons, flags). Use CDN URL for standalone/IIFE deployments. */\n assetBaseUrl?: string;\n /** Flow type: 'buy' (onramp) or 'sell' (offramp) */\n flowType?: FlowType;\n /** External customer ID */\n customerId?: string;\n /** Initial fiat currency */\n defaultFiatCurrency?: string;\n /** Initial crypto currency */\n defaultCryptoCurrency?: string;\n /** Initial network */\n defaultNetwork?: string;\n /** Initial fiat amount */\n defaultFiatAmount?: string;\n /** Initial crypto amount (used for sell/offramp) */\n defaultCryptoAmount?: string;\n /** Initial wallet address */\n defaultWalletAddress?: string;\n /** Default gateway ID to pre-select. Falls back to project config if not set. */\n defaultGateway?: string;\n /** Field locks from session */\n fieldLocks?: FieldLocksConfig;\n /** Poll interval for order status (ms) */\n statusPollInterval?: number;\n /** Callback when order completes */\n onComplete?: (status: Transaction) => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n children: React.ReactNode;\n}\n\nexport function RampProvider({\n projectId,\n apiUrl = 'https://api.nowramp.com',\n assetBaseUrl = '',\n flowType = 'buy',\n customerId = '',\n defaultFiatCurrency = 'USD',\n defaultCryptoCurrency = 'BTC',\n defaultNetwork: defaultNetworkProp = '',\n defaultFiatAmount = '',\n defaultCryptoAmount = '',\n defaultWalletAddress = '',\n defaultGateway,\n fieldLocks,\n statusPollInterval = 5000,\n onComplete,\n onError,\n children,\n}: RampProviderProps) {\n const apiConfig = useMemo(() => ({ apiUrl, projectId }), [apiUrl, projectId]);\n\n // If no network specified but crypto is, use lowercase ticker as default (matches Banxa network IDs)\n const defaultNetwork = defaultNetworkProp || (defaultCryptoCurrency ? defaultCryptoCurrency.toLowerCase() : '');\n\n // Determine initial step: if all fields are pre-set with a gateway, go to confirm\n // For sell: wallet is optional, so don't require it\n const initialIsSell = flowType === 'sell';\n const hasAmount = initialIsSell ? !!defaultCryptoAmount : !!defaultFiatAmount;\n const hasAllFields = initialIsSell\n ? !!(hasAmount && defaultCryptoCurrency && defaultNetwork)\n : !!(hasAmount && defaultCryptoCurrency && defaultNetwork && defaultWalletAddress);\n const initialStep: RampStep = (hasAllFields && defaultGateway) ? 'confirm' : 'amount';\n\n // Initialize state with defaults\n const [state, dispatch] = useReducer(rampReducer, {\n ...initialState,\n step: initialStep,\n flowType,\n fiatCurrency: defaultFiatCurrency,\n cryptoCurrency: defaultCryptoCurrency,\n network: defaultNetwork,\n fiatAmount: normalizeAmount(defaultFiatAmount, 2),\n cryptoAmount: normalizeAmount(defaultCryptoAmount, 6),\n walletAddress: defaultWalletAddress,\n customerId,\n });\n\n const isSell = state.flowType === 'sell';\n\n // Fetch supported config (pass orderType for sell to get sell-specific currencies/limits)\n const {\n config,\n loading: configLoading,\n error: configError,\n } = useRampConfig(apiConfig, state.flowType);\n\n // Auto-select first network when config loads and crypto is set but network is empty\n React.useEffect(() => {\n if (!config || !state.cryptoCurrency || state.network) return;\n const crypto = config.cryptos?.find((c: any) => c.code === state.cryptoCurrency);\n const defaultNet = crypto?.networks?.find((n: any) => n.isDefault) || crypto?.networks?.[0];\n if (defaultNet?.id) {\n dispatch({ type: 'SET_NETWORK', network: defaultNet.id });\n }\n }, [config, state.cryptoCurrency, state.network]);\n\n // Amount validation against min/max limits\n // Computed before quoteParams so invalid amounts never trigger a fetch\n // For sell, user enters crypto amount — skip fiat-based validation (backend validates)\n const amountError = useMemo(() => {\n if (isSell) {\n // For sell, basic presence check only — backend validates crypto amount limits\n if (!state.cryptoAmount) return null;\n const amount = parseFloat(state.cryptoAmount);\n if (isNaN(amount) || amount <= 0) return 'Enter a valid amount';\n return null;\n }\n\n if (!config || !state.fiatAmount) return null;\n\n const amount = parseFloat(state.fiatAmount);\n if (isNaN(amount)) return null;\n\n const fiat = config.fiats.find((f) => f.code === state.fiatCurrency);\n if (!fiat) return null;\n\n const min = parseFloat(fiat.minAmount);\n const max = parseFloat(fiat.maxAmount);\n\n if (!isNaN(min) && amount < min) {\n return `Minimum amount is ${fiat.minAmount} ${state.fiatCurrency}`;\n }\n if (!isNaN(max) && amount > max) {\n return `Maximum amount is ${fiat.maxAmount} ${state.fiatCurrency}`;\n }\n return null;\n }, [config, state.fiatAmount, state.fiatCurrency, state.cryptoAmount, isSell]);\n\n // Fetch quotes when form is filled, config loaded, and amount is valid\n const quoteParams = useMemo(() => {\n const hasAmount = isSell ? !!state.cryptoAmount : !!state.fiatAmount;\n if (!config || !hasAmount || !state.cryptoCurrency || !state.network) {\n return null;\n }\n if (amountError) {\n return null;\n }\n return {\n fiatCurrency: state.fiatCurrency,\n ...(isSell ? { cryptoAmount: state.cryptoAmount } : { fiatAmount: state.fiatAmount }),\n cryptoCurrency: state.cryptoCurrency,\n network: state.network,\n paymentMethodId: state.paymentMethodId || undefined,\n country: state.country || undefined,\n orderType: state.flowType,\n };\n }, [config, state.fiatCurrency, state.fiatAmount, state.cryptoAmount, state.cryptoCurrency, state.network, state.paymentMethodId, state.country, amountError, isSell, state.flowType]);\n\n const {\n quotes,\n loading: quotesLoading,\n error: quotesError,\n refetch: fetchQuotes,\n } = useQuotes(apiConfig, quoteParams);\n\n // Order creation\n const {\n order,\n loading: orderLoading,\n error: orderError,\n createOrder: createOrderApi,\n } = useCheckoutIntent(apiConfig);\n\n // Order status polling — delay the initial fetch to give the checkout\n // iframe time to load before we start polling. Without this, the first\n // poll can return a 'processing' status from the provider and the\n // CheckoutStep immediately transitions to ProcessingStep before the\n // user even sees the iframe (race condition with iframe-based providers\n // like Banxa that move to 'processing' quickly).\n const CHECKOUT_POLL_INITIAL_DELAY = 15_000; // 15 seconds\n\n const {\n status: orderStatus,\n loading: orderStatusLoading,\n } = useTransaction(\n { apiUrl },\n order?.orderId ?? null,\n { pollInterval: statusPollInterval, initialDelay: CHECKOUT_POLL_INITIAL_DELAY }\n );\n\n // Handle order completion\n React.useEffect(() => {\n if (orderStatus?.status === 'completed' && onComplete) {\n onComplete(orderStatus);\n }\n }, [orderStatus?.status, onComplete]);\n\n // Handle errors — only propagate config and order errors as fatal.\n // Quote errors are non-fatal (validation rejections, transient failures)\n // and are already surfaced via quotesError in the UI.\n React.useEffect(() => {\n const error = configError || orderError;\n if (error && onError) {\n onError(error);\n }\n }, [configError, orderError, onError]);\n\n // Resolve effective default gateway: explicit prop > project config\n const effectiveDefaultGateway = defaultGateway || config?.defaultGateway || null;\n\n // Use refs to avoid stale closures — async data loads mean callbacks may\n // capture earlier null values even with useCallback deps.\n const gatewayRef = useRef(effectiveDefaultGateway);\n gatewayRef.current = effectiveDefaultGateway;\n\n const quotesRef = useRef(quotes);\n quotesRef.current = quotes;\n\n // Create order handler\n const createOrder = useCallback(async () => {\n const gateway = state.selectedQuote?.gatewayId || quotesRef.current?.bestQuote?.gatewayId || gatewayRef.current;\n if (!gateway || !state.walletAddress) {\n const missing = [!gateway && 'gateway', !state.walletAddress && 'walletAddress'].filter(Boolean).join(', ');\n dispatch({ type: 'SET_ERROR', message: `Missing required fields: ${missing}` });\n return;\n }\n\n try {\n await createOrderApi({\n gateway,\n customerId: state.customerId || undefined,\n fiatCurrency: state.fiatCurrency,\n ...(isSell\n ? { cryptoAmount: state.cryptoAmount }\n : { fiatAmount: state.fiatAmount }\n ),\n cryptoCurrency: state.cryptoCurrency,\n network: state.network,\n walletAddress: state.walletAddress,\n paymentMethodId: state.paymentMethodId || undefined,\n email: state.email || undefined,\n orderType: state.flowType,\n });\n\n // Move to checkout step\n dispatch({ type: 'SET_STEP', step: 'checkout' });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create order';\n // Wallet address validation errors stay inline instead of going to error screen\n if (/wallet|address/i.test(message)) {\n dispatch({ type: 'SET_WALLET_ERROR', message: message.replace(/^Failed to create checkout intent:\\s*/i, '') });\n } else {\n dispatch({ type: 'SET_ERROR', message });\n }\n }\n }, [state, createOrderApi, isSell]);\n\n // Navigation helpers\n const goToStep = useCallback((step: RampStep) => {\n dispatch({ type: 'SET_STEP', step });\n }, []);\n\n const goBack = useCallback(() => {\n const stepOrder: RampStep[] = ['confirm', 'amount', 'quotes', 'wallet', 'checkout', 'processing', 'complete'];\n const currentIndex = stepOrder.indexOf(state.step);\n if (currentIndex > 0) {\n dispatch({ type: 'SET_STEP', step: stepOrder[currentIndex - 1] });\n }\n }, [state.step, isSell]);\n\n // Check if user can proceed to next step\n const canProceed = useMemo(() => {\n const hasAmount = isSell ? !!state.cryptoAmount : !!state.fiatAmount;\n switch (state.step) {\n case 'confirm':\n return !!(hasAmount && state.cryptoCurrency && state.network && state.walletAddress && !amountError);\n case 'amount':\n return !!(hasAmount && state.cryptoCurrency && state.network && !amountError);\n case 'quotes':\n return !!state.selectedQuote;\n case 'wallet':\n return !!state.walletAddress;\n default:\n return false;\n }\n }, [state, amountError, isSell]);\n\n const value: RampContextValue = {\n apiConfig,\n assetBaseUrl,\n config,\n configLoading,\n configError,\n state,\n dispatch,\n quotes,\n quotesLoading,\n quotesError,\n fetchQuotes,\n order,\n orderLoading,\n orderError,\n createOrder,\n orderStatus,\n orderStatusLoading,\n fieldLocks: fieldLocks || null,\n defaultGateway: effectiveDefaultGateway,\n amountError,\n goToStep,\n goBack,\n canProceed,\n };\n\n return (\n <RampContext.Provider value={value}>\n {children}\n </RampContext.Provider>\n );\n}\n\n/**\n * Hook to access ramp context\n */\nexport function useRamp(): RampContextValue {\n const context = useContext(RampContext);\n if (!context) {\n throw new Error('useRamp must be used within a RampProvider');\n }\n return context;\n}\n","/**\n * Checkout Step Component\n * Displays provider checkout iframe or redirect button.\n * Restyled with NowRamp theme tokens.\n */\n\nimport { useEffect, useState } from 'react';\nimport { useRamp } from '../context/RampContext';\n\nexport interface CheckoutStepProps {\n className?: string;\n iframeHeight?: number;\n autoRedirect?: boolean;\n redirectDelay?: number;\n}\n\nexport function CheckoutStep({\n className = '',\n iframeHeight = 600,\n autoRedirect = false,\n redirectDelay = 3000,\n}: CheckoutStepProps) {\n const { order, orderStatus, goToStep, goBack } = useRamp();\n const [iframeLoaded, setIframeLoaded] = useState(false);\n const [redirectCountdown, setRedirectCountdown] = useState<number | null>(null);\n\n const isExpired = order?.checkout.expiresAt\n ? Date.now() > order.checkout.expiresAt\n : false;\n\n // Handle auto-redirect\n useEffect(() => {\n if (order?.checkout.method === 'redirect' && autoRedirect && !isExpired) {\n setRedirectCountdown(Math.ceil(redirectDelay / 1000));\n const timer = setTimeout(() => {\n window.location.href = order.checkout.url;\n }, redirectDelay);\n\n const countdownInterval = setInterval(() => {\n setRedirectCountdown((prev) => (prev && prev > 1 ? prev - 1 : null));\n }, 1000);\n\n return () => {\n clearTimeout(timer);\n clearInterval(countdownInterval);\n };\n }\n }, [order, autoRedirect, redirectDelay, isExpired]);\n\n // Navigate on terminal statuses\n useEffect(() => {\n if (!orderStatus) return;\n if (orderStatus.status === 'completed') {\n goToStep('complete');\n } else if (['failed', 'cancelled', 'expired'].includes(orderStatus.status)) {\n goToStep('error');\n }\n }, [orderStatus?.status, goToStep]);\n\n if (!order) {\n return (\n <div className={`flex flex-col items-center justify-center p-8 ${className}`} style={{ color: 'var(--t-text)' }}>\n <p className=\"text-[15px] mb-4\">No order found</p>\n <button\n className=\"font-semibold text-[14px] transition-all\"\n style={{ height: 48, borderRadius: 5, background: 'var(--t-surface)', color: 'var(--t-text)', paddingLeft: 24, paddingRight: 24 }}\n onClick={goBack}\n >\n Go Back\n </button>\n </div>\n );\n }\n\n if (isExpired) {\n return (\n <div className={`flex flex-col items-center justify-center p-8 text-center ${className}`} style={{ color: 'var(--t-text)' }}>\n <div className=\"text-[48px] mb-4\">&#9200;</div>\n <h3 className=\"text-[18px] font-semibold mb-2\">Checkout Expired</h3>\n <p className=\"text-[14px] mb-6\" style={{ color: 'var(--t-text-secondary)' }}>\n The checkout link has expired. Please try again.\n </p>\n <button\n className=\"w-full font-semibold text-[16px] transition-all\"\n style={{ height: 60, borderRadius: 5, background: 'var(--t-cta-bg)', color: 'var(--t-cta-text)' }}\n onClick={goBack}\n >\n Start Over\n </button>\n </div>\n );\n }\n\n // Iframe checkout\n if (order.checkout.method === 'iframe') {\n return (\n <div className={`flex flex-col flex-1 ${className}`}>\n <div className=\"relative flex-1\" style={{ height: iframeHeight, borderRadius: 5, overflow: 'hidden', background: 'var(--t-surface)' }}>\n {!iframeLoaded && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n <div className=\"nramp-spinner\" />\n <p className=\"text-[14px] mt-4\" style={{ color: 'var(--t-text-secondary)' }}>Loading checkout...</p>\n </div>\n )}\n <iframe\n src={order.checkout.url}\n style={{\n display: iframeLoaded ? 'block' : 'none',\n width: '100%',\n height: '100%',\n border: 'none',\n }}\n allow={order.checkout.allowedFeatures?.join('; ') || 'payment; camera; microphone; geolocation; clipboard-read; clipboard-write; accelerometer; gyroscope; magnetometer; fullscreen; autoplay; encrypted-media; web-share'}\n onLoad={() => setIframeLoaded(true)}\n title=\"Provider Checkout\"\n />\n </div>\n </div>\n );\n }\n\n // Redirect checkout\n if (order.checkout.method === 'redirect') {\n return (\n <div className={`flex flex-col items-center justify-center p-8 text-center ${className}`} style={{ color: 'var(--t-text)' }}>\n <div className=\"text-[48px] mb-4\">&#128279;</div>\n <h3 className=\"text-[18px] font-semibold mb-2\">Complete Payment</h3>\n <p className=\"text-[14px] mb-4\" style={{ color: 'var(--t-text-secondary)' }}>\n You'll be redirected to {order.gateway} to complete your payment.\n </p>\n {redirectCountdown !== null && (\n <p className=\"text-[13px] mb-4\" style={{ color: 'var(--t-text-muted)' }}>\n Redirecting in {redirectCountdown}...\n </p>\n )}\n <a\n href={order.checkout.url}\n className=\"w-full font-semibold text-[16px] flex items-center justify-center transition-all\"\n style={{ height: 60, borderRadius: 5, background: 'var(--t-cta-bg)', color: 'var(--t-cta-text)', textDecoration: 'none' }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Continue to {order.gateway}\n </a>\n <button\n className=\"w-full font-semibold text-[14px] mt-2 transition-all\"\n style={{ height: 48, borderRadius: 5, background: 'var(--t-surface)', color: 'var(--t-text)' }}\n onClick={goBack}\n >\n Cancel\n </button>\n </div>\n );\n }\n\n // Widget checkout\n if (order.checkout.method === 'widget' && order.widgetConfig) {\n const widgetUrl = buildWidgetUrl(order.checkout.url, order.widgetConfig);\n return (\n <div className={`flex flex-col flex-1 ${className}`}>\n <div className=\"relative flex-1\" style={{ height: iframeHeight, borderRadius: 5, overflow: 'hidden', background: 'var(--t-surface)' }}>\n {!iframeLoaded && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n <div className=\"nramp-spinner\" />\n <p className=\"text-[14px] mt-4\" style={{ color: 'var(--t-text-secondary)' }}>Loading checkout...</p>\n </div>\n )}\n <iframe\n src={widgetUrl}\n style={{\n display: iframeLoaded ? 'block' : 'none',\n width: '100%',\n height: '100%',\n border: 'none',\n }}\n allow=\"payment; camera; microphone; geolocation; clipboard-read; clipboard-write; accelerometer; gyroscope; magnetometer; fullscreen; autoplay; encrypted-media; web-share\"\n onLoad={() => setIframeLoaded(true)}\n title=\"Payment Checkout\"\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className={`flex flex-col items-center justify-center p-8 ${className}`} style={{ color: 'var(--t-text)' }}>\n <p className=\"text-[15px] mb-4\">Unknown checkout method</p>\n <button\n className=\"font-semibold text-[14px] transition-all\"\n style={{ height: 48, borderRadius: 5, background: 'var(--t-surface)', color: 'var(--t-text)', paddingLeft: 24, paddingRight: 24 }}\n onClick={goBack}\n >\n Go Back\n </button>\n </div>\n );\n}\n\nfunction buildWidgetUrl(baseUrl: string, config: Record<string, unknown>): string {\n const url = new URL('/en/partner/widget', baseUrl);\n for (const [key, value] of Object.entries(config)) {\n if (value != null && value !== '') {\n url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n","/**\n * Processing Step Component\n * Shows order processing status with live updates.\n * Restyled with NowRamp theme tokens.\n */\n\nimport { useEffect } from 'react';\nimport { useRamp } from '../context/RampContext';\n\nexport interface ProcessingStepProps {\n className?: string;\n}\n\nexport function ProcessingStep({ className = '' }: ProcessingStepProps) {\n const { orderStatus, orderStatusLoading, goToStep } = useRamp();\n\n useEffect(() => {\n if (!orderStatus) return;\n if (orderStatus.status === 'completed') {\n goToStep('complete');\n } else if (['failed', 'cancelled', 'expired', 'refunded'].includes(orderStatus.status)) {\n goToStep('error');\n }\n }, [orderStatus?.status, goToStep]);\n\n const getStatusMessage = () => {\n if (!orderStatus) return 'Processing your order...';\n switch (orderStatus.status) {\n case 'pending':\n return 'Waiting for payment confirmation...';\n case 'processing':\n return 'Processing your transaction...';\n default:\n return 'Processing...';\n }\n };\n\n return (\n <div className={`flex flex-col items-center justify-center px-8 py-12 text-center ${className}`}>\n <div className=\"mb-6\">\n <div className=\"nramp-spinner-large nramp-spinner\" />\n </div>\n\n <h2 className=\"text-[20px] font-semibold mb-3\" style={{ color: 'var(--t-text)' }}>\n {getStatusMessage()}\n </h2>\n\n {orderStatusLoading && (\n <p className=\"text-[13px] mb-4\" style={{ color: 'var(--t-text-muted)' }}>Checking status...</p>\n )}\n\n {orderStatus && (\n <div className=\"w-full mt-6 text-left\" style={{ background: 'var(--t-surface)', borderRadius: 5, padding: 16 }}>\n <DetailRow label=\"Order ID\" value={orderStatus.orderId} mono />\n <DetailRow label=\"Provider\" value={orderStatus.gateway} />\n <DetailRow\n label=\"Amount\"\n value={`${orderStatus.fiatAmount} ${orderStatus.fiatCurrency}`}\n />\n <DetailRow\n label=\"Receiving\"\n value={`${orderStatus.cryptoAmount || '...'} ${orderStatus.cryptoCurrency}`}\n />\n <DetailRow label=\"Network\" value={orderStatus.network} />\n <DetailRow\n label=\"To Address\"\n value={`${orderStatus.walletAddress.slice(0, 10)}...${orderStatus.walletAddress.slice(-8)}`}\n mono\n />\n </div>\n )}\n\n <div className=\"mt-6\">\n <p className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>\n This usually takes a few minutes.\n </p>\n <p className=\"text-[12px] mt-1\" style={{ color: 'var(--t-text-muted)' }}>\n You can safely close this page - we'll send you an email when complete.\n </p>\n </div>\n </div>\n );\n}\n\nfunction DetailRow({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div\n className=\"flex justify-between items-center py-2\"\n style={{ borderBottom: '1px solid var(--t-divider)' }}\n >\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>{label}</span>\n <span\n className={`text-[13px] font-medium ${mono ? 'font-mono' : ''}`}\n style={{ color: 'var(--t-text)' }}\n >\n {value}\n </span>\n </div>\n );\n}\n","/**\n * Complete Step Component\n * Success screen with transaction details.\n * Restyled with NowRamp theme tokens.\n */\n\nimport { useRamp } from '../context/RampContext';\n\nexport interface CompleteStepProps {\n className?: string;\n explorerUrl?: string;\n onDone?: () => void;\n doneButtonText?: string;\n}\n\nexport function CompleteStep({\n className = '',\n explorerUrl,\n onDone,\n doneButtonText = 'Done',\n}: CompleteStepProps) {\n const { orderStatus, state, dispatch } = useRamp();\n const isSell = state.flowType === 'sell';\n\n const getExplorerUrl = () => {\n if (!orderStatus?.transactionHash) return null;\n if (!explorerUrl) {\n const defaultExplorers: Record<string, string> = {\n ethereum: 'https://etherscan.io/tx/{txHash}',\n polygon: 'https://polygonscan.com/tx/{txHash}',\n arbitrum: 'https://arbiscan.io/tx/{txHash}',\n optimism: 'https://optimistic.etherscan.io/tx/{txHash}',\n base: 'https://basescan.org/tx/{txHash}',\n bitcoin: 'https://mempool.space/tx/{txHash}',\n solana: 'https://solscan.io/tx/{txHash}',\n avalanche: 'https://snowtrace.io/tx/{txHash}',\n fantom: 'https://ftmscan.com/tx/{txHash}',\n };\n const baseUrl = defaultExplorers[state.network] || defaultExplorers.ethereum;\n return baseUrl.replace('{txHash}', orderStatus.transactionHash);\n }\n return explorerUrl.replace('{txHash}', orderStatus.transactionHash);\n };\n\n const handleDone = () => {\n if (onDone) {\n onDone();\n } else {\n dispatch({ type: 'RESET' });\n }\n };\n\n const explorerLink = getExplorerUrl();\n\n return (\n <div className={`flex flex-col items-center px-8 py-12 text-center ${className}`}>\n {/* Success icon */}\n <div\n className=\"flex items-center justify-center mb-5\"\n style={{ width: 64, height: 64, borderRadius: '50%', background: 'var(--t-success, #10b981)' }}\n >\n <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" fill=\"white\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" />\n </svg>\n </div>\n\n <h2 className=\"text-[20px] font-semibold mb-2\" style={{ color: 'var(--t-text)' }}>\n {isSell ? 'Sale Complete!' : 'Purchase Complete!'}\n </h2>\n\n <p className=\"text-[14px] mb-6\" style={{ color: 'var(--t-text-secondary)' }}>\n {isSell\n ? `Your ${orderStatus?.fiatCurrency || state.fiatCurrency} payout is being processed.`\n : `Your ${orderStatus?.cryptoCurrency || state.cryptoCurrency} has been sent to your wallet.`\n }\n </p>\n\n {orderStatus && (\n <div className=\"w-full text-left mb-6\" style={{ background: 'var(--t-surface)', borderRadius: 5, padding: 16 }}>\n <DetailRow\n label={isSell ? 'Amount Sold' : 'Amount Received'}\n value={`${orderStatus.cryptoAmount} ${orderStatus.cryptoCurrency}`}\n highlight\n />\n <DetailRow\n label={isSell ? 'Payout Amount' : 'Amount Paid'}\n value={`${orderStatus.fiatAmount} ${orderStatus.fiatCurrency}`}\n />\n <DetailRow label=\"Network\" value={orderStatus.network} />\n <DetailRow\n label=\"Wallet\"\n value={`${orderStatus.walletAddress.slice(0, 10)}...${orderStatus.walletAddress.slice(-8)}`}\n mono\n />\n {orderStatus.transactionHash && (\n <DetailRow\n label=\"Transaction\"\n value={`${orderStatus.transactionHash.slice(0, 10)}...${orderStatus.transactionHash.slice(-8)}`}\n mono\n />\n )}\n <DetailRow label=\"Provider\" value={orderStatus.gateway} />\n <DetailRow label=\"Order ID\" value={orderStatus.orderId} mono />\n {orderStatus.completedAt && (\n <DetailRow\n label=\"Completed\"\n value={new Date(orderStatus.completedAt).toLocaleString()}\n />\n )}\n </div>\n )}\n\n <div className=\"w-full flex flex-col gap-2\">\n {explorerLink && (\n <a\n href={explorerLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"w-full font-semibold text-[14px] flex items-center justify-center transition-all\"\n style={{ height: 48, borderRadius: 5, background: 'var(--t-surface)', color: 'var(--t-text)', textDecoration: 'none' }}\n >\n View on Explorer\n </a>\n )}\n <button\n className=\"w-full font-semibold text-[16px] transition-all\"\n style={{ height: 60, borderRadius: 5, background: 'var(--t-cta-bg)', color: 'var(--t-cta-text)' }}\n onClick={handleDone}\n >\n {doneButtonText}\n </button>\n </div>\n </div>\n );\n}\n\nfunction DetailRow({ label, value, mono, highlight }: { label: string; value: string; mono?: boolean; highlight?: boolean }) {\n return (\n <div\n className=\"flex justify-between items-center py-2\"\n style={{ borderBottom: '1px solid var(--t-divider)' }}\n >\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>{label}</span>\n <span\n className={`text-[13px] font-medium ${mono ? 'font-mono' : ''}`}\n style={{ color: highlight ? 'var(--t-success, #10b981)' : 'var(--t-text)' }}\n >\n {value}\n </span>\n </div>\n );\n}\n","/**\n * Error Step Component\n * Displays error state with retry options.\n * Restyled with NowRamp theme tokens.\n */\n\nimport { useRamp } from '../context/RampContext';\n\nexport interface ErrorStepProps {\n className?: string;\n onRetry?: () => void;\n supportEmail?: string;\n}\n\nexport function ErrorStep({\n className = '',\n onRetry,\n supportEmail = 'support@nowramp.com',\n}: ErrorStepProps) {\n const { state, orderStatus, dispatch, goToStep } = useRamp();\n const isSell = state.flowType === 'sell';\n\n const getErrorTitle = () => {\n if (orderStatus) {\n switch (orderStatus.status) {\n case 'failed': return 'Payment Failed';\n case 'cancelled': return 'Order Cancelled';\n case 'expired': return 'Order Expired';\n case 'refunded': return 'Order Refunded';\n default: return 'Something Went Wrong';\n }\n }\n return 'Something Went Wrong';\n };\n\n const getErrorMessage = () => {\n if (state.errorMessage) return state.errorMessage;\n if (orderStatus) {\n switch (orderStatus.status) {\n case 'failed':\n return isSell\n ? 'Your sale could not be processed. Please try again.'\n : 'Your payment could not be processed. Please try again or use a different payment method.';\n case 'cancelled':\n return isSell\n ? 'Your sale was cancelled. No crypto was transferred.'\n : 'Your order was cancelled. No payment was processed.';\n case 'expired':\n return isSell\n ? 'Your order has expired. Please start a new sale.'\n : 'Your order has expired. Please start a new purchase.';\n case 'refunded':\n return isSell\n ? 'Your crypto has been returned. The funds should appear in your wallet shortly.'\n : 'Your payment has been refunded. The funds should appear in your account within 5-10 business days.';\n default:\n return 'An unexpected error occurred. Please try again.';\n }\n }\n return 'An unexpected error occurred. Please try again.';\n };\n\n const handleRetry = () => {\n dispatch({ type: 'CLEAR_ERROR' });\n if (onRetry) {\n onRetry();\n } else {\n dispatch({ type: 'RESET' });\n goToStep('amount');\n }\n };\n\n const handleStartOver = () => {\n dispatch({ type: 'RESET' });\n goToStep('amount');\n };\n\n return (\n <div className={`flex flex-col items-center px-8 py-12 text-center ${className}`}>\n {/* Error icon */}\n <div\n className=\"flex items-center justify-center mb-5\"\n style={{ width: 64, height: 64, borderRadius: '50%', background: 'var(--t-error, #EF4444)' }}\n >\n <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" fill=\"white\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>\n </div>\n\n <h2 className=\"text-[20px] font-semibold mb-2\" style={{ color: 'var(--t-text)' }}>\n {getErrorTitle()}\n </h2>\n\n <p className=\"text-[14px] mb-6\" style={{ color: 'var(--t-text-secondary)' }}>\n {getErrorMessage()}\n </p>\n\n {orderStatus && (\n <div className=\"w-full text-left mb-6\" style={{ background: 'var(--t-surface)', borderRadius: 5, padding: 16 }}>\n <div className=\"flex justify-between items-center py-2\" style={{ borderBottom: '1px solid var(--t-divider)' }}>\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>Order ID</span>\n <span className=\"text-[13px] font-medium font-mono\" style={{ color: 'var(--t-text)' }}>\n {orderStatus.orderId}\n </span>\n </div>\n <div className=\"flex justify-between items-center py-2\">\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>Status</span>\n <span\n className=\"text-[12px] font-medium px-2 py-0.5\"\n style={{ background: 'rgba(239,68,68,0.15)', color: '#EF4444', borderRadius: 4 }}\n >\n {orderStatus.gatewayStatus}\n </span>\n </div>\n </div>\n )}\n\n <div className=\"w-full flex flex-col gap-2\">\n <button\n className=\"w-full font-semibold text-[16px] transition-all\"\n style={{ height: 60, borderRadius: 5, background: 'var(--t-cta-bg)', color: 'var(--t-cta-text)' }}\n onClick={handleRetry}\n >\n Try Again\n </button>\n <button\n className=\"w-full font-semibold text-[14px] transition-all\"\n style={{ height: 48, borderRadius: 5, background: 'var(--t-surface)', color: 'var(--t-text)' }}\n onClick={handleStartOver}\n >\n Start Over\n </button>\n </div>\n\n <div className=\"mt-6\">\n <p className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>\n Need help? Contact{' '}\n <a\n href={`mailto:${supportEmail}`}\n className=\"underline\"\n style={{ color: 'var(--t-accent)' }}\n >\n {supportEmail}\n </a>\n </p>\n {orderStatus && (\n <p className=\"text-[12px] mt-1\" style={{ color: 'var(--t-text-muted)' }}>\n Reference: {orderStatus.orderId}\n </p>\n )}\n </div>\n </div>\n );\n}\n","/**\n * Confirm Step Component\n * Shown when all fields are pre-configured (session mode).\n * Restyled with NowRamp theme tokens.\n */\n\nimport { useState } from 'react';\nimport { useRamp } from '../context/RampContext';\n\nexport interface ConfirmStepProps {\n className?: string;\n}\n\nfunction truncateAddress(address: string): string {\n if (address.length <= 12) return address;\n return `${address.slice(0, 6)}...${address.slice(-6)}`;\n}\n\nexport function ConfirmStep({ className = '' }: ConfirmStepProps) {\n const {\n config,\n configLoading,\n state,\n defaultGateway,\n fetchQuotes,\n createOrder,\n orderLoading,\n } = useRamp();\n\n const isSell = state.flowType === 'sell';\n const [error, setError] = useState<string | null>(null);\n\n const gatewayInfo = config?.gateways.find((g) => g.id === defaultGateway);\n\n const handleConfirm = async () => {\n setError(null);\n try {\n fetchQuotes();\n await createOrder();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create order';\n setError(message);\n }\n };\n\n if (configLoading) {\n return (\n <div className={`flex flex-col items-center justify-center p-12 ${className}`}>\n <div className=\"nramp-spinner\" />\n <p className=\"text-[14px] mt-4\" style={{ color: 'var(--t-text-secondary)' }}>Loading...</p>\n </div>\n );\n }\n\n return (\n <div className={`flex flex-col items-center px-8 py-12 ${className}`}>\n <h2 className=\"text-[20px] font-semibold mb-6\" style={{ color: 'var(--t-text)' }}>\n {isSell ? 'Confirm Sale' : 'Confirm Purchase'}\n </h2>\n\n <div className=\"w-full text-left mb-6\" style={{ background: 'var(--t-surface)', borderRadius: 5, padding: 16 }}>\n {gatewayInfo && (\n <div className=\"flex justify-between items-center py-2\" style={{ borderBottom: '1px solid var(--t-divider)' }}>\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>Provider</span>\n <span className=\"flex items-center gap-2\">\n {gatewayInfo.logo && (\n <img src={gatewayInfo.logo} alt={gatewayInfo.name} width={20} height={20} style={{ borderRadius: 4 }} />\n )}\n <span className=\"text-[13px] font-medium\" style={{ color: 'var(--t-text)' }}>{gatewayInfo.name}</span>\n </span>\n </div>\n )}\n\n {isSell ? (\n <>\n <DetailRow label=\"You sell\" value={`${state.cryptoAmount} ${state.cryptoCurrency}`} highlight />\n <DetailRow label=\"You receive\" value={`${state.fiatCurrency} payout`} />\n </>\n ) : (\n <>\n <DetailRow label=\"You pay\" value={`${state.fiatAmount} ${state.fiatCurrency}`} highlight />\n <DetailRow label=\"You receive\" value={`${state.cryptoCurrency} on ${state.network}`} />\n <DetailRow label=\"Wallet\" value={truncateAddress(state.walletAddress)} mono />\n </>\n )}\n\n <DetailRow label=\"Network\" value={state.network} />\n\n {isSell && state.walletAddress && (\n <DetailRow label=\"Refund address\" value={truncateAddress(state.walletAddress)} mono />\n )}\n </div>\n\n {error && (\n <p className=\"text-[12px] mb-4\" style={{ color: '#EF4444' }}>{error}</p>\n )}\n\n <button\n className=\"w-full font-semibold text-[16px] transition-all flex items-center justify-center gap-2\"\n style={{ height: 60, borderRadius: 5, background: 'var(--t-cta-bg)', color: 'var(--t-cta-text)', opacity: orderLoading ? 0.7 : 1 }}\n disabled={orderLoading}\n onClick={handleConfirm}\n >\n {orderLoading ? (\n <>\n <span className=\"nramp-spinner-inline\" />\n Processing...\n </>\n ) : (\n isSell ? 'Confirm & Sell' : 'Confirm & Pay'\n )}\n </button>\n </div>\n );\n}\n\nfunction DetailRow({ label, value, mono, highlight }: { label: string; value: string; mono?: boolean; highlight?: boolean }) {\n return (\n <div className=\"flex justify-between items-center py-2\" style={{ borderBottom: '1px solid var(--t-divider)' }}>\n <span className=\"text-[13px]\" style={{ color: 'var(--t-text-secondary)' }}>{label}</span>\n <span\n className={`text-[13px] font-medium ${mono ? 'font-mono' : ''}`}\n style={{ color: highlight ? 'var(--t-success, #10b981)' : 'var(--t-text)' }}\n >\n {value}\n </span>\n </div>\n );\n}\n","import type React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\n\nexport function Modal({\n isOpen,\n onClose,\n children,\n}: {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode | ((close: () => void) => React.ReactNode);\n}) {\n const [mounted, setMounted] = useState(false);\n const [animating, setAnimating] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setMounted(true);\n requestAnimationFrame(() => requestAnimationFrame(() => setAnimating(true)));\n } else if (mounted) {\n setAnimating(false);\n const t = setTimeout(() => setMounted(false), 250);\n return () => clearTimeout(t);\n }\n }, [isOpen]);\n\n const handleClose = useCallback(() => {\n setAnimating(false);\n setTimeout(() => onClose(), 250);\n }, [onClose]);\n\n if (!mounted) return null;\n\n return (\n <div\n className=\"absolute inset-0 z-20 transition-opacity duration-250\"\n style={{ opacity: animating ? 1 : 0 }}\n >\n <div\n className=\"absolute inset-0 flex flex-col transition-transform duration-250 ease-out\"\n style={{ background: 'var(--t-modal-bg)', transform: animating ? 'translateY(0)' : 'translateY(24px)' }}\n >\n {typeof children === 'function' ? children(handleClose) : children}\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nexport function AnimatedDigit({ char, height = 38 }: { char: string; height?: number }) {\n const digits = '0123456789';\n const idx = digits.indexOf(char);\n if (idx === -1) return <span>{char}</span>;\n return (\n <span className=\"digit-slot\" style={{ height, lineHeight: `${height}px` }}>\n <span className=\"digit-slot-inner block\" style={{ transform: `translateY(-${idx * height}px)` }}>\n {digits.split('').map(d => (\n <span key={d} className=\"block\" style={{ height, lineHeight: `${height}px` }}>{d}</span>\n ))}\n </span>\n </span>\n );\n}\n\nexport function AnimatedNumber({\n value,\n height = 38,\n className = '',\n style = {},\n}: {\n value: string;\n height?: number;\n className?: string;\n style?: React.CSSProperties;\n}) {\n return (\n <span className={className} style={{ display: 'inline-flex', ...style }}>\n {value.split('').map((ch, i) => (\n <AnimatedDigit key={i} char={ch} height={height} />\n ))}\n </span>\n );\n}\n","export function Skeleton({\n w,\n h,\n className = '',\n}: {\n w: number | string;\n h: number | string;\n className?: string;\n}) {\n return <div className={`skeleton ${className}`} style={{ width: w, height: h }} />;\n}\n\nexport function FormSkeleton() {\n return (\n <div className=\"flex-1 px-5 flex flex-col\">\n <div className=\"px-[18px] pt-[14px] pb-[18px]\" style={{ background: 'var(--t-surface)', borderRadius: 5 }}>\n <Skeleton w={70} h={14} className=\"mb-3\" />\n <div className=\"flex justify-between items-center\">\n <Skeleton w={120} h={32} />\n <Skeleton w={75} h={32} />\n </div>\n </div>\n <div className=\"px-[18px] pt-[12px] pb-[18px]\" style={{ background: 'var(--t-surface)', borderRadius: 5, marginTop: 4 }}>\n <Skeleton w={50} h={14} className=\"mb-3\" />\n <div className=\"flex justify-between items-center\">\n <Skeleton w={180} h={32} />\n <Skeleton w={85} h={32} />\n </div>\n </div>\n <div className=\"flex justify-between mt-3 px-[2px]\">\n <Skeleton w={140} h={12} />\n <Skeleton w={90} h={12} />\n </div>\n <div className=\"mt-8\">\n <Skeleton w={65} h={14} className=\"mb-2.5\" />\n <Skeleton w=\"100%\" h={47} />\n </div>\n <div className=\"flex-1\" />\n <Skeleton w=\"100%\" h={60} className=\"mb-2\" />\n <div className=\"text-center py-3\">\n <span className=\"text-[11px]\" style={{ color: 'var(--t-text-tertiary)' }}>Powered by NowRamp</span>\n </div>\n </div>\n );\n}\n","/**\n * Complete Banxa-supported cryptocurrencies and blockchains data.\n * TypeScript conversion of the crypto data module.\n * Icons are stored locally in /crypto-icons/{ticker}.svg\n */\n\n// ── TypeScript interfaces ──\n\nexport interface BlockchainInfo {\n name: string;\n shortName?: string;\n icon: string;\n}\n\nexport interface CryptoCurrency {\n code: string;\n name: string;\n chains: string[];\n popular: boolean;\n}\n\nexport interface FiatCurrency {\n code: string;\n name: string;\n}\n\nexport interface Skin {\n id: string;\n name: string;\n accent: string | null;\n}\n\nexport interface CryptoChainCombo {\n code: string;\n name: string;\n chain: string;\n /** Display name from provider (e.g. \"Ethereum Mainnet\") */\n chainName?: string;\n popular: boolean;\n}\n\n// ── Blockchain / Network definitions ──\n// Maps blockchain codes to display names and their icon ticker\n\nexport const BLOCKCHAINS: Record<string, BlockchainInfo> = {\n ETH: { name: 'Ethereum (ERC20)', shortName: 'Ethereum', icon: 'eth' },\n BSC: { name: 'Binance Smart Chain (BEP20)', shortName: 'Binance', icon: 'bnb' },\n BTC: { name: 'Bitcoin', icon: 'btc' },\n SOL: { name: 'Solana', icon: 'sol' },\n MATIC: { name: 'Polygon', icon: 'pol' },\n ARB: { name: 'Arbitrum', icon: 'arb' },\n BASE: { name: 'Base', icon: 'base' },\n OPTIMISM: { name: 'Optimism', icon: 'op' },\n AVAX_C: { name: 'Avalanche C-Chain', shortName: 'Avalanche C', icon: 'avax' },\n AVAX_X: { name: 'Avalanche X-Chain', shortName: 'Avalanche X', icon: 'avax' },\n ADA: { name: 'Cardano', icon: 'ada' },\n DOT: { name: 'Polkadot', icon: 'dot' },\n TRON: { name: 'Tron (TRC20)', shortName: 'Tron', icon: 'trx' },\n XRP: { name: 'Ripple', icon: 'xrp' },\n XLM: { name: 'Stellar', icon: 'xlm' },\n ALGO: { name: 'Algorand', icon: 'algo' },\n ATOM: { name: 'Cosmos', icon: 'atom' },\n NEAR: { name: 'NEAR Protocol', shortName: 'NEAR', icon: 'near' },\n SUI: { name: 'Sui', icon: 'sui' },\n APT: { name: 'Aptos', icon: 'apt' },\n TON: { name: 'Ton', icon: 'ton' },\n FIL: { name: 'Filecoin', icon: 'fil' },\n FLOW: { name: 'Flow', icon: 'flow' },\n HBAR: { name: 'Hedera Hashgraph', shortName: 'Hedera', icon: 'hbar' },\n INJ: { name: 'Injective', icon: 'inj' },\n SEI_EVM: { name: 'SEI (EVM)', shortName: 'SEI', icon: 'sei' },\n ZKSYNC: { name: 'zkSync', icon: 'zksync' },\n LINEA: { name: 'Linea', icon: 'linea' },\n STARK: { name: 'StarkNet', icon: 'strk' },\n LN: { name: 'Lightning', icon: 'btc' },\n CELO: { name: 'Celo', icon: 'celo' },\n CRO: { name: 'Cronos', icon: 'cro' },\n FTM: { name: 'Fantom', icon: 'ftm' },\n GLMR: { name: 'Moonbeam', icon: 'glmr' },\n MOVR: { name: 'Moonriver', icon: 'movr' },\n KSM: { name: 'Kusama', icon: 'ksm' },\n EOS: { name: 'EOS', icon: 'eos' },\n ETC: { name: 'Ethereum Classic', shortName: 'ETH Classic', icon: 'etc' },\n LTC: { name: 'Litecoin', icon: 'ltc' },\n BCH: { name: 'Bitcoin Cash', shortName: 'BTC Cash', icon: 'bch' },\n DOGE: { name: 'Dogecoin', icon: 'doge' },\n BNB: { name: 'Binance Chain (BEP2)', shortName: 'Binance', icon: 'bnb' },\n ONE: { name: 'Harmony', icon: 'one' },\n KLAY: { name: 'Kaia', icon: 'kaia' },\n RON: { name: 'Ronin', icon: 'ron' },\n LRC: { name: 'Loopring', icon: 'lrc' },\n ICP: { name: 'Internet Computer', shortName: 'ICP', icon: 'icp' },\n EGLD: { name: 'MultiversX', icon: 'egld' },\n FLUX: { name: 'Flux', icon: 'flux' },\n KDA: { name: 'Kadena', icon: 'kda' },\n WAVES: { name: 'Waves', icon: 'waves' },\n XTZ: { name: 'Tezos', icon: 'xtz' },\n ACA: { name: 'Acala', icon: 'aca' },\n ALEO: { name: 'Aleo', icon: 'aleo' },\n ALPH: { name: 'Alephium', icon: 'alph' },\n APE: { name: 'ApeChain', icon: 'ape' },\n ASTR: { name: 'Astar', icon: 'astr' },\n AZERO: { name: 'Aleph Zero', icon: 'azero' },\n AZERO_EVM: { name: 'Aleph Zero EVM', shortName: 'Aleph Zero', icon: 'azero' },\n BAJU: { name: 'Bajun Network', shortName: 'Bajun', icon: 'baju' },\n BNCPOLKA: { name: 'Bifrost Polkadot', shortName: 'Bifrost', icon: 'bnc' },\n BNC: { name: 'Bifrost Kusama', shortName: 'Bifrost', icon: 'bnc' },\n BOBA: { name: 'Boba Network', shortName: 'Boba', icon: 'boba' },\n BSX: { name: 'Basilisk', icon: 'bsx' },\n CHZ: { name: 'Chiliz', icon: 'chz' },\n VIC: { name: 'Viction', icon: 'vic' },\n CCD: { name: 'Concordium', icon: 'ccd' },\n COREUM: { name: 'Coreum', icon: 'coreum' },\n DINGO: { name: 'Dingocoin', icon: 'dingo' },\n HDX: { name: 'Hydration', icon: 'hdx' },\n PLMC: { name: 'Polimec', icon: 'plmc' },\n MNT: { name: 'Mantle', icon: 'mnt' },\n ERG: { name: 'Ergo', icon: 'erg' },\n ECLIPSE: { name: 'Eclipse', icon: 'eclipse' },\n FUEL: { name: 'Fuel Ignition', shortName: 'Fuel', icon: 'fuel' },\n INK: { name: 'Ink', icon: 'ink' },\n SOPHON: { name: 'Sophon', icon: 'sophon' },\n UNICHAIN: { name: 'Unichain', icon: 'unichain' },\n WLD: { name: 'Worldchain', icon: 'wld' },\n ETHERLINK: { name: 'Etherlink', icon: 'etherlink' },\n MOB: { name: 'MobileCoin', icon: 'mob' },\n GALA: { name: 'Gala', icon: 'gala' },\n GUNZ: { name: 'Gunz', icon: 'gun' },\n HNT: { name: 'Helium', icon: 'hnt' },\n BITKUB: { name: 'BitKub', icon: 'kub' },\n IMMUTABLE_ZKEVM: { name: 'Immutable-zkEVM', shortName: 'Immutable', icon: 'imx' },\n INIT: { name: 'Initia', icon: 'init' },\n INTR: { name: 'Interlay', icon: 'intr' },\n KINESIS: { name: 'Kinesis', icon: 'kag' },\n KAR: { name: 'Karura', icon: 'kar' },\n KCC: { name: 'KuCoin Community Chain', shortName: 'KuCoin', icon: 'kcs' },\n KILT: { name: 'KILT Spiritnet', shortName: 'KILT', icon: 'kilt' },\n KINT: { name: 'Kintsugi', icon: 'kint' },\n KMD: { name: 'Komodo', icon: 'kmd' },\n LSK: { name: 'Lisk', icon: 'lsk' },\n METIS: { name: 'Metis Andromeda', shortName: 'Metis', icon: 'metis' },\n MYTH: { name: 'Myth', icon: 'myth' },\n OAS: { name: 'Oasys', icon: 'oas' },\n PEAQ_EVM: { name: 'Peaq (EVM)', shortName: 'Peaq', icon: 'peaq' },\n PEN: { name: 'Pendulum', icon: 'pen' },\n PI: { name: 'Pi', icon: 'pi' },\n POLYX: { name: 'Polymesh', icon: 'polyx' },\n Q: { name: 'QuantumCoin', icon: 'q' },\n QRL: { name: 'Quantum Resistant Ledger', shortName: 'QRL', icon: 'qrl' },\n QUBIC: { name: 'Qubic', icon: 'qubic' },\n RBX: { name: 'ReserveBlock', icon: 'rbx' },\n ROLLUX: { name: 'Rollux', icon: 'rollux' },\n THORCHAIN: { name: 'Thorchain', icon: 'rune' },\n S: { name: 'Sonic', icon: 's' },\n SONIC: { name: 'Sonic', icon: 's' },\n TERNOA: { name: 'Ternoa', icon: 'caps' },\n SX: { name: 'SX Network', icon: 'sol' },\n WAX: { name: 'WAX', icon: 'waxp' },\n XCH: { name: 'Chia Chain', icon: 'xch' },\n XPRT: { name: 'Persistence', icon: 'xprt' },\n ZETACHAIN: { name: 'ZetaChain', icon: 'zeta' },\n ZTG: { name: 'Zeitgeist', icon: 'ztg' },\n PLS: { name: 'Pulsechain', icon: 'pulsechain' },\n MEZO: { name: 'Mezo', icon: 'mezo' },\n BSV: { name: 'Bitcoin SV', shortName: 'BTC SV', icon: 'btc' },\n MONAD: { name: 'Monad', icon: 'mon' },\n SUPRA: { name: 'Supra', icon: 'supra' },\n SOMI: { name: 'Somnia', icon: 'somi' },\n VERIFIEDX: { name: 'VerifiedX', icon: 'vfx' },\n MOVE: { name: 'Movement', icon: 'move' },\n FLR: { name: 'Flare', icon: 'flr' },\n ASSETHUB: { name: 'Asset Hub Polkadot', shortName: 'Asset Hub', icon: 'dot' },\n BOB: { name: 'BOB', icon: 'btc' },\n GLUE: { name: 'Glue', icon: 'eth' },\n DYDX: { name: 'StarkEx', icon: 'stark' },\n OKC: { name: 'OKX Chain', icon: 'eth' },\n UNI_CHAIN: { name: 'UNI', icon: 'uni' },\n ZEC: { name: 'ZCash', icon: 'zec' },\n};\n\n// ── Full Banxa-supported cryptocurrencies ──\n// Each entry: { code, name, chains[], popular }\n// chains[] lists the blockchain codes this crypto is available on\n\nexport const CRYPTO_CURRENCIES: CryptoCurrency[] = [\n // --- Popular / Top coins ---\n { code: 'BTC', name: 'Bitcoin', chains: ['BTC', 'LN'], popular: true },\n { code: 'ETH', name: 'Ethereum', chains: ['ETH', 'ARB', 'BASE', 'BSC', 'OPTIMISM', 'LINEA', 'ZKSYNC', 'LRC', 'STARK', 'APE', 'ECLIPSE', 'FUEL', 'INK', 'SOPHON', 'UNICHAIN', 'WLD'], popular: true },\n { code: 'USDC', name: 'USD Coin', chains: ['ETH', 'SOL', 'ARB', 'BASE', 'BSC', 'MATIC', 'OPTIMISM', 'AVAX_C', 'ALGO', 'APT', 'CELO', 'FLOW', 'HBAR', 'LINEA', 'LRC', 'ZKSYNC', 'STARK', 'SUI', 'XLM', 'ECLIPSE', 'HDX', 'INK', 'LSK', 'METIS', 'MONAD', 'SEI_EVM', 'SONIC', 'SOPHON', 'SX', 'UNICHAIN', 'APE', 'BNCPOLKA', 'GLMR', 'PEAQ_EVM', 'PLMC', 'RON', 'UNI_CHAIN', 'WLD', 'BITKUB', 'BOB', 'DYDX', 'ETHERLINK', 'GLUE', 'ASSETHUB'], popular: true },\n { code: 'USDT', name: 'Tether', chains: ['ETH', 'BSC', 'TRON', 'ARB', 'MATIC', 'AVAX_C', 'SOL', 'OPTIMISM', 'ZKSYNC', 'STARK', 'APT', 'CELO', 'KLAY', 'LRC', 'LSK', 'ECLIPSE', 'ETHERLINK', 'OKC', 'PEAQ_EVM', 'BNCPOLKA', 'GLMR', 'HDX', 'PLMC', 'VIC', 'ASSETHUB'], popular: true },\n { code: 'SOL', name: 'Solana', chains: ['SOL'], popular: true },\n { code: 'XRP', name: 'Ripple', chains: ['XRP'], popular: true },\n { code: 'ADA', name: 'Cardano', chains: ['ADA'], popular: true },\n { code: 'DOGE', name: 'Dogecoin', chains: ['DOGE'], popular: true },\n { code: 'DOT', name: 'Polkadot', chains: ['DOT', 'BSC', 'BNCPOLKA', 'GLMR', 'HDX', 'PLMC'], popular: true },\n { code: 'AVAX', name: 'Avalanche', chains: ['AVAX_C', 'AVAX_X', 'BSC'], popular: true },\n { code: 'LINK', name: 'ChainLink', chains: ['ETH', 'BSC'], popular: true },\n { code: 'LTC', name: 'Litecoin', chains: ['LTC'], popular: true },\n\n // --- Major altcoins ---\n { code: 'AAVE', name: 'Aave', chains: ['ETH', 'BSC'], popular: false },\n { code: 'ACA', name: 'Acala', chains: ['ACA'], popular: false },\n { code: 'ALEO', name: 'Aleo', chains: ['ALEO'], popular: false },\n { code: 'ALGO', name: 'Algorand', chains: ['ALGO'], popular: false },\n { code: 'ALPH', name: 'Alephium', chains: ['ALPH'], popular: false },\n { code: 'APE', name: 'ApeCoin', chains: ['APE', 'ETH'], popular: false },\n { code: 'APT', name: 'Aptos', chains: ['APT'], popular: false },\n { code: 'ARB', name: 'Arbitrum', chains: ['ARB'], popular: false },\n { code: 'ASTR', name: 'Astar', chains: ['ASTR'], popular: false },\n { code: 'ATOM', name: 'Cosmos', chains: ['ATOM'], popular: false },\n { code: 'AUDD', name: 'Novatti Australian Digital Dollar', chains: ['ETH'], popular: false },\n { code: 'AVT', name: 'Aventus', chains: ['ETH'], popular: false },\n { code: 'AXS', name: 'Axie Infinity', chains: ['ETH', 'RON'], popular: false },\n { code: 'AZERO', name: 'Aleph Zero', chains: ['AZERO', 'AZERO_EVM'], popular: false },\n { code: 'BAJU', name: 'Bajun Network', chains: ['BAJU'], popular: false },\n { code: 'BARSIK', name: \"Hasbulla's Cat\", chains: ['SOL'], popular: false },\n { code: 'BAT', name: 'Basic Attention Token', chains: ['ETH', 'BSC'], popular: false },\n { code: 'BCH', name: 'Bitcoin Cash', chains: ['BCH'], popular: false },\n { code: 'BNB', name: 'Binance Coin', chains: ['BNB', 'BSC'], popular: false },\n { code: 'BNC', name: 'Bifrost Native Coin', chains: ['BNC', 'BNCPOLKA'], popular: false },\n { code: 'BOBA', name: 'Boba Network', chains: ['BOBA', 'ETH'], popular: false },\n { code: 'BORA', name: 'Bora', chains: ['KLAY'], popular: false },\n { code: 'BRETT', name: 'Brett', chains: ['BASE'], popular: false },\n { code: 'BSX', name: 'Basilisk', chains: ['BSX'], popular: false },\n { code: 'BZR', name: 'Bazaars', chains: ['ETH'], popular: false },\n { code: 'CAGA', name: 'Crypto Asset Governance Alliance', chains: ['ETH'], popular: false },\n { code: 'CAKE', name: 'PancakeSwap', chains: ['BSC'], popular: false },\n { code: 'CAPS', name: 'Caps', chains: ['TERNOA'], popular: false },\n { code: 'CELO', name: 'Celo', chains: ['CELO'], popular: false },\n { code: 'CHZ', name: 'Chiliz', chains: ['CHZ', 'BNB', 'ETH'], popular: false },\n { code: 'C98', name: 'Coin98', chains: ['VIC'], popular: false },\n { code: 'CCD', name: 'Concordium', chains: ['CCD'], popular: false },\n { code: 'COMP', name: 'Compound', chains: ['ETH', 'BSC'], popular: false },\n { code: 'COREUM', name: 'Coreum', chains: ['COREUM', 'XRP'], popular: false },\n { code: 'CRO', name: 'Cronos', chains: ['CRO'], popular: false },\n { code: 'CUSD', name: 'Celo Dollar', chains: ['CELO'], popular: false },\n { code: 'CVC', name: 'Civic', chains: ['ETH'], popular: false },\n { code: 'DAI', name: 'Dai', chains: ['ETH', 'BASE', 'MATIC'], popular: false },\n { code: 'DINGO', name: 'Dingocoin', chains: ['DINGO'], popular: false },\n { code: 'EGLD', name: 'MultiversX', chains: ['EGLD'], popular: false },\n { code: 'EMBER', name: 'Ember Sword', chains: ['MNT'], popular: false },\n { code: 'EOS', name: 'EOS', chains: ['EOS'], popular: false },\n { code: 'ERG', name: 'Ergo', chains: ['ERG'], popular: false },\n { code: 'ETC', name: 'Ethereum Classic', chains: ['ETC', 'BSC'], popular: false },\n { code: 'EUR', name: 'EURC', chains: ['BASE'], popular: false },\n { code: 'EUROC', name: 'Euro Coin', chains: ['ETH'], popular: false },\n { code: 'EURQ', name: 'Quantoz EURQ', chains: ['ETH'], popular: false },\n { code: 'EURR', name: 'StablR EUR', chains: ['ETH'], popular: false },\n { code: 'EUSD', name: 'Electronic USD', chains: ['MOB'], popular: false },\n { code: 'EXIT', name: 'EXIT - Designer Token', chains: ['BSC'], popular: false },\n { code: 'FDUSD', name: 'First Digital USD', chains: ['SUI'], popular: false },\n { code: 'FIL', name: 'Filecoin', chains: ['FIL', 'BSC'], popular: false },\n { code: 'FLOW', name: 'Flow', chains: ['FLOW'], popular: false },\n { code: 'FLR', name: 'Flare', chains: ['FLR'], popular: false },\n { code: 'FLUX', name: 'Flux', chains: ['FLUX'], popular: false },\n { code: 'FTM', name: 'Fantom', chains: ['FTM', 'ETH', 'BSC'], popular: false },\n { code: 'GALA', name: 'Gala', chains: ['GALA'], popular: false },\n { code: 'GLMR', name: 'Moonbeam', chains: ['GLMR'], popular: false },\n { code: 'GMX', name: 'GMX', chains: ['ARB'], popular: false },\n { code: 'GNUS', name: 'Genius AI', chains: ['ETH'], popular: false },\n { code: 'GRT', name: 'The Graph', chains: ['ETH', 'ARB'], popular: false },\n { code: 'GUN', name: 'Gunz', chains: ['GUNZ'], popular: false },\n { code: 'HBAR', name: 'Hedera', chains: ['HBAR'], popular: false },\n { code: 'HDX', name: 'HydraDX', chains: ['HDX'], popular: false },\n { code: 'HNT', name: 'Helium', chains: ['HNT'], popular: false },\n { code: 'HTP', name: 'HowToPay', chains: ['BSC'], popular: false },\n { code: 'HVLO', name: 'Hivello', chains: ['SOL'], popular: false },\n { code: 'ICP', name: 'Internet Computer', chains: ['ICP'], popular: false },\n { code: 'IMX', name: 'Immutable X', chains: ['ETH'], popular: false },\n { code: 'INIT', name: 'Initia', chains: ['INIT'], popular: false },\n { code: 'INJ', name: 'Injective', chains: ['INJ'], popular: false },\n { code: 'INTR', name: 'Interlay', chains: ['INTR'], popular: false },\n { code: 'JAM', name: 'Jam Tune.FM', chains: ['HBAR'], popular: false },\n { code: 'KAG', name: 'Silver', chains: ['KINESIS'], popular: false },\n { code: 'KAIA', name: 'Kaia', chains: ['KLAY'], popular: false },\n { code: 'KAR', name: 'Karura', chains: ['KAR'], popular: false },\n { code: 'KAU', name: 'Gold', chains: ['KINESIS'], popular: false },\n { code: 'KCS', name: 'KuCoin Token', chains: ['ETH', 'KCC'], popular: false },\n { code: 'KDA', name: 'Kadena', chains: ['KDA'], popular: false },\n { code: 'KILT', name: 'KILT', chains: ['KILT'], popular: false },\n { code: 'KINT', name: 'Kintsugi', chains: ['KINT'], popular: false },\n { code: 'KLV', name: 'Klever', chains: ['TRON'], popular: false },\n { code: 'KMD', name: 'Komodo', chains: ['KMD'], popular: false },\n { code: 'KSM', name: 'Kusama', chains: ['KSM'], popular: false },\n { code: 'KUB', name: 'Bitkub Coin', chains: ['BITKUB'], popular: false },\n { code: 'LOOKS', name: 'LooksRare', chains: ['ETH'], popular: false },\n { code: 'LRC', name: 'Loopring', chains: ['ETH', 'LRC'], popular: false },\n { code: 'LSK', name: 'Lisk', chains: ['LSK'], popular: false },\n { code: 'MANA', name: 'Decentraland', chains: ['ETH'], popular: false },\n { code: 'MBX', name: 'Marblex', chains: ['IMMUTABLE_ZKEVM', 'KLAY'], popular: false },\n { code: 'MELANIA', name: 'Melania', chains: ['SOL'], popular: false },\n { code: 'METAMASKUSD', name: 'Metamask USD', chains: ['ETH', 'LINEA'], popular: false },\n { code: 'METIS', name: 'Metis', chains: ['METIS'], popular: false },\n { code: 'MEZOUSD', name: 'MUSD', chains: ['ETH', 'MEZO'], popular: false },\n { code: 'MKR', name: 'Maker', chains: ['ETH', 'BSC'], popular: false },\n { code: 'MNEE', name: 'MNEE', chains: ['BSV', 'ETH'], popular: false },\n { code: 'MNT', name: 'Mantle', chains: ['ETH', 'MNT'], popular: false },\n { code: 'MOB', name: 'MobileCoin', chains: ['MOB'], popular: false },\n { code: 'MON', name: 'Monad', chains: ['MONAD'], popular: false },\n { code: 'MOVE', name: 'Movement', chains: ['MOVE'], popular: false },\n { code: 'MOVR', name: 'Moonriver', chains: ['MOVR'], popular: false },\n { code: 'MYTH', name: 'Myth', chains: ['MYTH'], popular: false },\n { code: 'NEAR', name: 'NEAR Protocol', chains: ['NEAR', 'BSC'], popular: false },\n { code: 'NEIRO', name: 'NEIRO Ethereum', chains: ['ETH'], popular: false },\n { code: 'OAS', name: 'Oasys', chains: ['OAS'], popular: false },\n { code: 'OMG', name: 'OmiseGo', chains: ['ETH'], popular: false },\n { code: 'OMUSD', name: 'Open Money USD', chains: ['ETH'], popular: false },\n { code: 'ONE', name: 'Harmony', chains: ['ONE', 'BNB', 'ETH'], popular: false },\n { code: 'OP', name: 'Optimism', chains: ['OPTIMISM'], popular: false },\n { code: 'ORDER', name: 'Orderly Network', chains: ['ETH'], popular: false },\n { code: 'PEAQ', name: 'Peaq', chains: ['PEAQ_EVM'], popular: false },\n { code: 'PEN', name: 'Pendulum', chains: ['PEN'], popular: false },\n { code: 'PERC', name: 'Perion', chains: ['ETH'], popular: false },\n { code: 'PI', name: 'Pi', chains: ['PI'], popular: false },\n { code: 'PLMC', name: 'Polimec', chains: ['PLMC'], popular: false },\n { code: 'POL', name: 'Polygon', chains: ['ETH', 'MATIC'], popular: false },\n { code: 'POLYX', name: 'Polymesh', chains: ['POLYX'], popular: false },\n { code: 'PROPC', name: 'Propchain', chains: ['ETH'], popular: false },\n { code: 'PSTAKE', name: 'pSTAKE Finance', chains: ['ETH'], popular: false },\n { code: 'Q', name: 'QuantumCoin', chains: ['Q'], popular: false },\n { code: 'QRDO', name: 'Qredo', chains: ['ETH'], popular: false },\n { code: 'QRL', name: 'Quantum Resistant Ledger', chains: ['QRL'], popular: false },\n { code: 'QUBIC', name: 'QUBIC', chains: ['QUBIC'], popular: false },\n { code: 'RBX', name: 'ReserveBlock', chains: ['RBX'], popular: false },\n { code: 'REVU', name: 'Revuto', chains: ['ADA'], popular: false },\n { code: 'RITE', name: 'Ritestream', chains: ['BSC'], popular: false },\n { code: 'RLUSD', name: 'Ripple USD', chains: ['ETH'], popular: false },\n { code: 'RON', name: 'Ronin', chains: ['RON'], popular: false },\n { code: 'RUNE', name: 'THORChain', chains: ['THORCHAIN'], popular: false },\n { code: 'S', name: 'Sonic', chains: ['S'], popular: false },\n { code: 'SAND', name: 'The Sandbox', chains: ['ETH', 'BSC'], popular: false },\n { code: 'SEI', name: 'SEI', chains: ['SEI_EVM'], popular: false },\n { code: 'SNX', name: 'Synthetix', chains: ['ETH'], popular: false },\n { code: 'SOIL', name: 'Sun Minimeal', chains: ['PLS'], popular: false },\n { code: 'SOLO', name: 'Sologenic', chains: ['XRP'], popular: false },\n { code: 'SOMI', name: 'Somnia', chains: ['SOMI'], popular: false },\n { code: 'STRK', name: 'Starknet', chains: ['STARK'], popular: false },\n { code: 'SUI', name: 'Sui', chains: ['SUI'], popular: false },\n { code: 'SUPR', name: 'SuperDapp', chains: ['ROLLUX'], popular: false },\n { code: 'SUPRA', name: 'Supra', chains: ['SUPRA'], popular: false },\n { code: 'SUSHI', name: 'SushiSwap', chains: ['ETH', 'BSC'], popular: false },\n { code: 'SYS', name: 'Syscoin', chains: ['ROLLUX'], popular: false },\n { code: 'TBTC', name: 'tBTC', chains: ['SUI', 'STARK'], popular: false },\n { code: 'TON', name: 'Toncoin', chains: ['TON'], popular: false },\n { code: 'TRUMP', name: 'TRUMP', chains: ['SOL'], popular: false },\n { code: 'TRX', name: 'Tron', chains: ['TRON', 'BSC'], popular: false },\n { code: 'TWT', name: 'Trust Wallet Token', chains: ['BSC'], popular: false },\n { code: 'UNI', name: 'Uniswap', chains: ['ETH', 'BSC'], popular: false },\n { code: 'URANIUM', name: 'Uranium', chains: ['ETHERLINK'], popular: false },\n { code: 'USD0', name: 'Usual USD', chains: ['ETH'], popular: false },\n { code: 'USD1', name: 'World Liberty Financial USD', chains: ['SOL'], popular: false },\n { code: 'USDE', name: 'Ethena USDe', chains: ['ETH'], popular: false },\n { code: 'USDP', name: 'Pax Dollar', chains: ['ETH'], popular: false },\n { code: 'USDQ', name: 'Quantoz USDQ', chains: ['ETH'], popular: false },\n { code: 'USDR', name: 'StablR USD', chains: ['ETH'], popular: false },\n { code: 'USDT0', name: 'USDT0', chains: ['INK'], popular: false },\n { code: 'VFX', name: 'VerifiedX', chains: ['VERIFIEDX'], popular: false },\n { code: 'VERSE', name: 'Verse', chains: ['ETH', 'MATIC'], popular: false },\n { code: 'VIC', name: 'Viction', chains: ['VIC'], popular: false },\n { code: 'WAL', name: 'Walrus', chains: ['SUI'], popular: false },\n { code: 'WAVES', name: 'Waves', chains: ['WAVES'], popular: false },\n { code: 'WAXP', name: 'WAX', chains: ['WAX'], popular: false },\n { code: 'WBTC', name: 'Wrapped Bitcoin', chains: ['ETH', 'STARK'], popular: false },\n { code: 'WETH', name: 'Wrapped Ether', chains: ['ETHERLINK'], popular: false },\n { code: 'WLD', name: 'Worldcoin', chains: ['WLD'], popular: false },\n { code: 'WLFI', name: 'World Liberty Financial', chains: ['ETH'], popular: false },\n { code: 'WOLF', name: 'LandWolf', chains: ['ETH'], popular: false },\n { code: 'WOMBAT', name: 'Wombat', chains: ['MATIC'], popular: false },\n { code: 'XCH', name: 'Chia', chains: ['XCH'], popular: false },\n { code: 'XLM', name: 'Stellar Lumens', chains: ['XLM', 'BSC'], popular: false },\n { code: 'XPRT', name: 'Persistence', chains: ['XPRT'], popular: false },\n { code: 'XTZ', name: 'Tezos', chains: ['XTZ', 'ETHERLINK'], popular: false },\n { code: 'YFI', name: 'yearn.finance', chains: ['ETH'], popular: false },\n { code: 'ZBU', name: 'Zeebu', chains: ['BSC'], popular: false },\n { code: 'ZEC', name: 'ZCash', chains: ['ZEC'], popular: false },\n { code: 'ZCHF', name: 'Frankencoin', chains: ['ETH'], popular: false },\n { code: 'ZETA', name: 'Zeta', chains: ['ETH', 'ZETACHAIN'], popular: false },\n { code: 'ZTG', name: 'Zeitgeist', chains: ['ZTG'], popular: false },\n];\n\n// ── Fiat currency code -> ISO country code for flag lookup ──\n\nexport const FIAT_TO_COUNTRY: Record<string, string> = {\n USD: 'us',\n EUR: 'eu',\n GBP: 'gb',\n JPY: 'jp',\n CAD: 'ca',\n AUD: 'au',\n BRL: 'br',\n CHF: 'ch',\n MXN: 'mx',\n INR: 'in',\n ARS: 'ar',\n ALL: 'al',\n};\n\n// ── Icon URL helpers ──\n\n/**\n * Get the icon URL for a crypto ticker.\n * Icons are stored as SVGs in /crypto-icons/{ticker}.svg\n * @param baseUrl Optional base URL prefix (e.g. CDN URL). Defaults to root-relative.\n */\nexport function getCryptoIconUrl(ticker: string, baseUrl = ''): string {\n return `${baseUrl}/crypto-icons/${ticker.toLowerCase()}.svg`;\n}\n\n/**\n * Get the flag URL for a fiat currency code.\n * Flags are stored as SVGs in /flags/{country_code}.svg\n * @param baseUrl Optional base URL prefix (e.g. CDN URL). Defaults to root-relative.\n */\nexport function getFiatFlagUrl(currencyCode: string, baseUrl = ''): string {\n const country = FIAT_TO_COUNTRY[currencyCode] || 'us';\n return `${baseUrl}/flags/${country}.svg`;\n}\n\n/**\n * Get the icon URL for a blockchain/chain.\n * Uses the chain's native token icon.\n * @param baseUrl Optional base URL prefix (e.g. CDN URL). Defaults to root-relative.\n */\nexport function getChainIconUrl(chainCode: string, baseUrl = ''): string {\n const chain = BLOCKCHAINS[chainCode];\n if (chain) return `${baseUrl}/crypto-icons/${chain.icon}.svg`;\n return `${baseUrl}/crypto-icons/${chainCode.toLowerCase()}.svg`;\n}\n\n// ── Fiat currencies ──\n\nexport const FIAT_CURRENCIES: FiatCurrency[] = [\n { code: 'ALL', name: 'Albania Lek' },\n { code: 'ARS', name: 'Argentina Peso' },\n { code: 'AUD', name: 'Australian Dollar' },\n { code: 'BRL', name: 'Brazilian Real' },\n { code: 'CAD', name: 'Canadian Dollar' },\n { code: 'EUR', name: 'Euro' },\n { code: 'GBP', name: 'British Pound' },\n { code: 'JPY', name: 'Japanese Yen' },\n { code: 'USD', name: 'US Dollar' },\n { code: 'CHF', name: 'Swiss Franc' },\n { code: 'MXN', name: 'Mexican Peso' },\n { code: 'INR', name: 'Indian Rupee' },\n];\n\n// ── Skin presets ──\n\nexport const SKINS: Skin[] = [\n { id: 'blue', name: 'Blue', accent: '#0077FF' },\n { id: 'violet', name: 'Violet', accent: '#7C3AED' },\n { id: 'green', name: 'Green', accent: '#10B981' },\n { id: 'orange', name: 'Orange', accent: '#F59E0B' },\n { id: 'rose', name: 'Rose', accent: '#F43F5E' },\n { id: 'mono', name: 'Mono', accent: null },\n];\n\n// ── Mock rates ──\n\nexport const MOCK_RATES: Record<string, Record<string, number>> = {\n USDC: { USD: 0.9962, EUR: 1.0814, GBP: 1.2573, JPY: 0.00667, CAD: 0.7198, AUD: 0.6384, BRL: 0.1726, CHF: 1.1306, MXN: 0.0487, INR: 0.01187, ARS: 0.000855, ALL: 0.01058 },\n USDT: { USD: 0.9958, EUR: 1.0810, GBP: 1.2568, JPY: 0.00666, CAD: 0.7194, AUD: 0.6380, BRL: 0.1724, CHF: 1.1301, MXN: 0.0486, INR: 0.01186, ARS: 0.000854, ALL: 0.01057 },\n BTC: { USD: 0.0000104, EUR: 0.00001129, GBP: 0.00001313, JPY: 0.0000000696, CAD: 0.00000751, AUD: 0.00000666, BRL: 0.0000018, CHF: 0.0000118, MXN: 0.000000508, INR: 0.000000124, ARS: 0.00000000892, ALL: 0.00000011 },\n ETH: { USD: 0.000316, EUR: 0.000343, GBP: 0.000399, JPY: 0.00000211, CAD: 0.000228, AUD: 0.000202, BRL: 0.0000547, CHF: 0.000358, MXN: 0.0000154, INR: 0.00000376, ARS: 0.000000271, ALL: 0.00000335 },\n SOL: { USD: 0.00424, EUR: 0.004607, GBP: 0.005356, JPY: 0.0000284, CAD: 0.003063, AUD: 0.002716, BRL: 0.000734, CHF: 0.004812, MXN: 0.000207, INR: 0.0000505, ARS: 0.00000364, ALL: 0.000045 },\n XRP: { USD: 0.4081, EUR: 0.4432, GBP: 0.5153, JPY: 0.00273, CAD: 0.2948, AUD: 0.2614, BRL: 0.0707, CHF: 0.4630, MXN: 0.01992, INR: 0.00486, ARS: 0.000350, ALL: 0.00433 },\n DOGE: { USD: 3.896, EUR: 4.232, GBP: 4.920, JPY: 0.02607, CAD: 2.815, AUD: 2.496, BRL: 0.6750, CHF: 4.421, MXN: 0.1902, INR: 0.04641, ARS: 0.003345, ALL: 0.04134 },\n ADA: { USD: 1.333, EUR: 1.448, GBP: 1.683, JPY: 0.00892, CAD: 0.963, AUD: 0.854, BRL: 0.2309, CHF: 1.512, MXN: 0.0651, INR: 0.01588, ARS: 0.001145, ALL: 0.01414 },\n};\n\n// ── Helper functions ──\n\nexport function getMockRate(crypto: string, fiat: string): number {\n return MOCK_RATES[crypto]?.[fiat] ?? MOCK_RATES['USDC']?.[fiat] ?? 1;\n}\n\nexport function parseAmount(str: string): number {\n return parseFloat(str.replace(/,/g, '')) || 0;\n}\n\nexport function formatOutput(num: number): string {\n if (num === 0) return '0';\n if (num >= 1000) return num.toLocaleString('en-US', { maximumFractionDigits: 2 });\n if (num >= 1) return num.toFixed(2);\n if (num >= 0.01) return num.toFixed(4);\n const s = num.toPrecision(4);\n return parseFloat(s).toString();\n}\n\nexport const isValidHex = (str: string): boolean => /^#([0-9A-Fa-f]{3}){1,2}$/.test(str);\n\n// ── Validation constants ──\n\nexport const MIN_FIAT_AMOUNT = 10;\nexport const MIN_CRYPTO_AMOUNT = 0.0001;\n\n// ── Pre-built flat list of every crypto+chain combination ──\n\nexport const CRYPTO_CHAIN_COMBOS: CryptoChainCombo[] = (() => {\n const list: CryptoChainCombo[] = [];\n for (const c of CRYPTO_CURRENCIES) {\n for (const chain of c.chains) {\n list.push({ code: c.code, name: c.name, chain, popular: c.popular });\n }\n }\n return list;\n})();\n","import type React from 'react';\nimport { getCryptoIconUrl, getFiatFlagUrl } from '../../data/cryptoData';\n\n/* ───────────── icon helpers ───────────── */\n\nexport function CryptoIcon({ ticker, size = 32, baseUrl = '' }: { ticker: string; size?: number; baseUrl?: string }) {\n return (\n <img\n src={getCryptoIconUrl(ticker, baseUrl)}\n alt={ticker}\n width={size}\n height={size}\n className=\"rounded-full shrink-0\"\n style={{ width: size, height: size }}\n />\n );\n}\n\nexport function FiatFlag({ currencyCode, size = 16, baseUrl = '' }: { currencyCode: string; size?: number; baseUrl?: string }) {\n return (\n <img\n src={getFiatFlagUrl(currencyCode, baseUrl)}\n alt={currencyCode}\n width={size}\n height={size}\n className=\"rounded-full shrink-0\"\n style={{ width: size, height: size }}\n />\n );\n}\n\nexport function GenericCoinIcon({ size = 32, color = '#888' }: { size?: number; color?: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 32 32\" fill=\"none\">\n <circle cx=\"16\" cy=\"16\" r=\"16\" fill={color} />\n <circle cx=\"16\" cy=\"16\" r=\"8\" stroke=\"white\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n );\n}\n\nexport function BankIcon({ size = 24 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 32 32\" fill=\"none\">\n <circle cx=\"16\" cy=\"16\" r=\"16\" fill=\"#0077FF\" />\n <path d=\"M8 15l8-6 8 6H8z\" fill=\"white\" />\n <rect x=\"10\" y=\"16\" width=\"2\" height=\"6\" fill=\"white\" />\n <rect x=\"15\" y=\"16\" width=\"2\" height=\"6\" fill=\"white\" />\n <rect x=\"20\" y=\"16\" width=\"2\" height=\"6\" fill=\"white\" />\n <rect x=\"8\" y=\"22\" width=\"16\" height=\"2\" rx=\"0.5\" fill=\"white\" />\n </svg>\n );\n}\n\nexport function RevolutIcon({ size = 32 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full flex items-center justify-center text-white font-semibold shrink-0\"\n style={{ width: size, height: size, backgroundColor: '#333', fontSize: size * 0.45 }}\n >\n R\n </div>\n );\n}\n\nexport function ApplePayIcon({ size = 32 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full bg-black border border-white/20 flex items-center justify-center text-white shrink-0\"\n style={{ width: size, height: size, fontSize: size * 0.3 }}\n >\n <span style={{ fontFamily: '-apple-system, system-ui, sans-serif', fontWeight: 600 }}>Pay</span>\n </div>\n );\n}\n\nexport function GooglePayIcon({ size = 32 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full bg-white flex items-center justify-center shrink-0\"\n style={{ width: size, height: size, fontSize: size * 0.28, fontWeight: 700, color: '#333' }}\n >\n G<span style={{ color: '#4285F4', fontSize: size * 0.2 }}>Pay</span>\n </div>\n );\n}\n\nexport function PayPalIcon({ size = 32 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full flex items-center justify-center shrink-0\"\n style={{ width: size, height: size, background: '#003087' }}\n >\n <span className=\"text-white font-bold\" style={{ fontSize: size * 0.38 }}>P</span>\n </div>\n );\n}\n\nexport function CardIcon({ size = 32 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full flex items-center justify-center shrink-0\"\n style={{ width: size, height: size, background: 'var(--t-card-icon-bg)' }}\n >\n <svg width={size * 0.55} height={size * 0.55} viewBox=\"0 0 18 14\" fill=\"none\">\n <rect x=\"0.5\" y=\"0.5\" width=\"17\" height=\"13\" rx=\"2\" stroke=\"var(--t-card-icon-stroke)\" />\n <rect y=\"3\" width=\"18\" height=\"3\" fill=\"var(--t-card-icon-stroke)\" />\n </svg>\n </div>\n );\n}\n\nexport function CoinifyIcon({ size = 18 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full bg-white flex items-center justify-center shrink-0\"\n style={{ width: size, height: size }}\n >\n <span className=\"text-black font-bold\" style={{ fontSize: size * 0.55 }}>C</span>\n </div>\n );\n}\n\nexport function ChevronDown() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"var(--t-text-secondary)\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function ChevronRight() {\n return (\n <svg width=\"8\" height=\"14\" viewBox=\"0 0 8 14\" fill=\"none\">\n <path d=\"M1 1L7 7L1 13\" stroke=\"var(--t-icon-stroke)\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ onClick }: { onClick: () => void }) {\n return (\n <button onClick={onClick} className=\"hover:opacity-70 transition-opacity\">\n <svg width=\"24\" height=\"16\" viewBox=\"0 0 24 16\" fill=\"none\">\n <path\n d=\"M4 0.799805H20C21.7673 0.799805 23.2002 2.23269 23.2002 4V12C23.2002 13.7673 21.7673 15.2002 20 15.2002H4C2.23269 15.2002 0.799805 13.7673 0.799805 12V4C0.799805 2.23269 2.23269 0.799805 4 0.799805Z\"\n stroke=\"var(--t-icon-stroke)\" strokeWidth=\"1.6\"\n />\n </svg>\n </button>\n );\n}\n\nexport function DarkModeIcon({ size = 40 }: { size?: number }) {\n return (\n <div\n className=\"rounded-full flex items-center justify-center shrink-0\"\n style={{ width: size, height: size, background: 'var(--t-surface)' }}\n >\n <svg width={size * 0.5} height={size * 0.5} viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" stroke=\"var(--t-text)\" strokeWidth=\"1.5\" />\n <path d=\"M10 2.5A7.5 7.5 0 0 1 10 17.5\" fill=\"var(--t-text)\" />\n </svg>\n </div>\n );\n}\n\nexport function getPaymentIcon(type: string, size = 32): React.ReactNode {\n switch (type) {\n case 'revolut': return <RevolutIcon size={size} />;\n case 'applepay': return <ApplePayIcon size={size} />;\n case 'card': return <CardIcon size={size} />;\n case 'googlepay': return <GooglePayIcon size={size} />;\n case 'paypal': return <PayPalIcon size={size} />;\n case 'bank': return <BankIcon size={size} />;\n default: return <GenericCoinIcon size={size} />;\n }\n}\n","export function CloseButton({ onClick }: { onClick: () => void }) {\n return (\n <button\n onClick={onClick}\n className=\"flex items-center justify-center transition-colors rounded-full shrink-0\"\n style={{ width: 30, height: 30, backgroundColor: 'var(--t-close-bg)' }}\n onMouseEnter={e => (e.currentTarget.style.backgroundColor = 'var(--t-close-hover)')}\n onMouseLeave={e => (e.currentTarget.style.backgroundColor = 'var(--t-close-bg)')}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M1 1L9 9M9 1L1 9\" stroke=\"var(--t-icon-close)\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n </button>\n );\n}\n","export function SearchInput({\n value,\n onChange,\n placeholder = '',\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n}) {\n return (\n <div className=\"relative mx-5 mb-5\">\n <input\n type=\"text\"\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n style={{ height: 47, borderRadius: 4.5, borderColor: 'var(--t-border)', color: 'var(--t-text)', paddingLeft: 14, paddingRight: value ? 40 : 14, fontSize: 14 }}\n className=\"w-full bg-transparent border outline-none transition-colors\"\n />\n {value && (\n <button\n onClick={() => onChange('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center justify-center transition-colors rounded\"\n style={{ width: 22, height: 22, backgroundColor: 'var(--t-close-bg)', borderRadius: 4 }}\n >\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n <path d=\"M1 1L7 7M7 1L1 7\" stroke=\"var(--t-icon-close)\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","/**\n * Fiat Currency Selector Modal\n * Searchable list of fiat currencies with flag icons.\n * Uses API currencies if provided, falls back to static FIAT_CURRENCIES data.\n */\n\nimport { useState, useMemo } from 'react';\nimport { CloseButton } from '../ui/CloseButton';\nimport { SearchInput } from '../ui/SearchInput';\nimport { FiatFlag } from '../ui/icons';\nimport { FIAT_CURRENCIES, type FiatCurrency } from '../../data/cryptoData';\n\nexport interface FiatCurrencyModalProps {\n\tonClose: () => void;\n\tonSelect: (code: string) => void;\n\t/** Currencies from API config — takes precedence over static fallback */\n\tcurrencies?: Array<{ code: string; name?: string }>;\n}\n\nexport function FiatCurrencyModal({ onClose, onSelect, currencies }: FiatCurrencyModalProps) {\n\tconst [search, setSearch] = useState('');\n\n\t// Merge API data with static fallback for display names\n\tconst currencyList = useMemo<FiatCurrency[]>(() => {\n\t\tif (!currencies || currencies.length === 0) return FIAT_CURRENCIES;\n\n\t\t// Build a lookup from static data for display names\n\t\tconst staticMap = new Map(FIAT_CURRENCIES.map((c) => [c.code, c.name]));\n\n\t\treturn currencies.map((c) => ({\n\t\t\tcode: c.code,\n\t\t\tname: c.name || staticMap.get(c.code) || c.code,\n\t\t}));\n\t}, [currencies]);\n\n\tconst filtered = useMemo(() => {\n\t\tconst raw = search.trim().toLowerCase();\n\t\tif (!raw) return currencyList;\n\t\treturn currencyList.filter(\n\t\t\t(c) => c.code.toLowerCase().includes(raw) || c.name.toLowerCase().includes(raw)\n\t\t);\n\t}, [currencyList, search]);\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex justify-end px-5 pt-5\">\n\t\t\t\t<CloseButton onClick={onClose} />\n\t\t\t</div>\n\t\t\t<h2\n\t\t\t\tclassName=\"text-center text-[17px] font-medium mt-2 mb-6\"\n\t\t\t\tstyle={{ color: 'var(--t-text)' }}\n\t\t\t>\n\t\t\t\tSelect fiat currency\n\t\t\t</h2>\n\t\t\t<SearchInput value={search} onChange={setSearch} />\n\t\t\t<div className=\"flex-1 overflow-y-auto custom-scroll px-5\">\n\t\t\t\t{filtered.map((c) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={c.code}\n\t\t\t\t\t\tonClick={() => onSelect(c.code)}\n\t\t\t\t\t\tclassName=\"flex items-center gap-3.5 w-full py-3.5 transition-colors\"\n\t\t\t\t\t\tstyle={{ color: 'var(--t-text)' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FiatFlag currencyCode={c.code} size={32} />\n\t\t\t\t\t\t<div className=\"text-left\">\n\t\t\t\t\t\t\t<div className=\"font-semibold text-[15px] leading-tight\">{c.code}</div>\n\t\t\t\t\t\t\t<div className=\"text-[13px] mt-0.5\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\t\t{c.name}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t\t{filtered.length === 0 && (\n\t\t\t\t\t<div className=\"text-center py-10 text-[14px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\tNo currencies found\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","/**\n * Crypto Currency + Chain Selector Modal\n * Searchable list of crypto+chain combinations with compound icons (crypto icon + chain badge).\n * Smart search ranking: exact code > starts with > popular > other.\n * Uses API data if provided, falls back to static CRYPTO_CHAIN_COMBOS.\n */\n\nimport { useState, useMemo } from 'react';\nimport { CloseButton } from '../ui/CloseButton';\nimport { SearchInput } from '../ui/SearchInput';\nimport {\n\tCRYPTO_CHAIN_COMBOS,\n\tBLOCKCHAINS,\n\tgetCryptoIconUrl,\n\tgetChainIconUrl,\n\ttype CryptoChainCombo,\n} from '../../data/cryptoData';\n\nexport interface CryptoCurrencyModalProps {\n\tonClose: () => void;\n\tonSelect: (code: string, chain: string) => void;\n\t/** Crypto data from API config — takes precedence over static fallback */\n\tcryptos?: Array<{\n\t\tcode: string;\n\t\tname?: string;\n\t\tnetworks?: Array<{ code: string; id?: string; name?: string }>;\n\t}>;\n\t/** Base URL for static assets (crypto icons) */\n\tassetBaseUrl?: string;\n}\n\nexport function CryptoCurrencyModal({ onClose, onSelect, cryptos, assetBaseUrl = '' }: CryptoCurrencyModalProps) {\n\tconst [search, setSearch] = useState('');\n\n\t// Build flat combo list from API data or fall back to static data\n\tconst comboList = useMemo<CryptoChainCombo[]>(() => {\n\t\tif (!cryptos || cryptos.length === 0) return CRYPTO_CHAIN_COMBOS;\n\n\t\tconst list: CryptoChainCombo[] = [];\n\t\tfor (const c of cryptos) {\n\t\t\tconst networks = c.networks || [];\n\t\t\tif (networks.length === 0) {\n\t\t\t\t// No networks listed — add a single entry with the code as chain\n\t\t\t\tlist.push({ code: c.code, name: c.name || c.code, chain: c.code, popular: false });\n\t\t\t} else {\n\t\t\t\tfor (const net of networks) {\n\t\t\t\t\tconst chainCode = net.code || net.id || net.name || c.code;\n\t\t\t\t\tlist.push({\n\t\t\t\t\t\tcode: c.code,\n\t\t\t\t\t\tname: c.name || c.code,\n\t\t\t\t\t\tchain: chainCode,\n\t\t\t\t\t\tchainName: net.name,\n\t\t\t\t\t\tpopular: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t}, [cryptos]);\n\n\t// Filtered and ranked results\n\tconst filtered = useMemo(() => {\n\t\tconst raw = search.trim().toLowerCase();\n\t\tif (!raw) return comboList;\n\n\t\tconst terms = raw.split(/\\s+/);\n\t\tconst scored: Array<{ item: CryptoChainCombo; score: number }> = [];\n\n\t\tfor (const c of comboList) {\n\t\t\tconst chain = BLOCKCHAINS[c.chain];\n\t\t\tconst chainName = chain ? chain.name.toLowerCase() : '';\n\t\t\tconst chainShort = chain?.shortName?.toLowerCase() || '';\n\t\t\tconst chainCode = c.chain.toLowerCase();\n\t\t\tconst code = c.code.toLowerCase();\n\t\t\tconst name = c.name.toLowerCase();\n\t\t\tconst fields = [code, name, chainName, chainShort, chainCode];\n\n\t\t\t// All search terms must match at least one field\n\t\t\tconst allMatch = terms.every((t) => fields.some((f) => f.includes(t)));\n\t\t\tif (!allMatch) continue;\n\n\t\t\t// Scoring: exact code match > starts with > chain match bonus > popular\n\t\t\tlet score = 0;\n\t\t\tif (code === raw) score += 100;\n\t\t\telse if (code.startsWith(terms[0])) score += 50;\n\t\t\tif (c.popular) score += 10;\n\t\t\tif (\n\t\t\t\tterms.length > 1 &&\n\t\t\t\t(chainName.includes(terms[1]) ||\n\t\t\t\t\tchainShort.includes(terms[1]) ||\n\t\t\t\t\tchainCode.includes(terms[1]))\n\t\t\t) {\n\t\t\t\tscore += 25;\n\t\t\t}\n\t\t\tscored.push({ item: c, score });\n\t\t}\n\n\t\tscored.sort((a, b) => b.score - a.score);\n\t\treturn scored.map((s) => s.item);\n\t}, [comboList, search]);\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex justify-end px-5 pt-5\">\n\t\t\t\t<CloseButton onClick={onClose} />\n\t\t\t</div>\n\t\t\t<h2\n\t\t\t\tclassName=\"text-center text-[17px] font-medium mt-2 mb-6\"\n\t\t\t\tstyle={{ color: 'var(--t-text)' }}\n\t\t\t>\n\t\t\t\tSelect crypto currency\n\t\t\t</h2>\n\t\t\t<SearchInput value={search} onChange={setSearch} />\n\t\t\t<div className=\"flex-1 overflow-y-auto custom-scroll px-5\">\n\t\t\t\t{filtered.map((c) => {\n\t\t\t\t\tconst chain = BLOCKCHAINS[c.chain];\n\t\t\t\t\tconst chainName = chain?.name || c.chainName || c.chain;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={`${c.code}-${c.chain}`}\n\t\t\t\t\t\t\tonClick={() => onSelect(c.code, c.chain)}\n\t\t\t\t\t\t\tclassName=\"flex items-center gap-3.5 w-full py-3.5 transition-colors\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Compound icon: crypto icon + chain badge */}\n\t\t\t\t\t\t\t<div className=\"relative shrink-0\" style={{ width: 40, height: 40 }}>\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={getCryptoIconUrl(c.code, assetBaseUrl)}\n\t\t\t\t\t\t\t\t\talt={c.code}\n\t\t\t\t\t\t\t\t\twidth={32}\n\t\t\t\t\t\t\t\t\theight={32}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-full absolute top-0 left-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: 32, height: 32 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={getChainIconUrl(c.chain, assetBaseUrl)}\n\t\t\t\t\t\t\t\t\talt={c.chain}\n\t\t\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-full absolute\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 16,\n\t\t\t\t\t\t\t\t\t\theight: 16,\n\t\t\t\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\t\t\t\tborder: '2px solid var(--t-chain-border)',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-left flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold text-[15px] leading-tight\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: 'var(--t-text)' }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{c.code}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"text-[13px] mt-0.5\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\t\t\t{c.name}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-right shrink-0\">\n\t\t\t\t\t\t\t\t<div className=\"text-[13px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\t\t\t\t{chainName}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{filtered.length === 0 && (\n\t\t\t\t\t<div className=\"text-center py-10 text-[14px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\tNo currencies found\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","export function ToggleSwitch({\n checked,\n onChange,\n accentColor = 'var(--t-accent)',\n}: {\n checked: boolean;\n onChange: (v: boolean) => void;\n accentColor?: string;\n}) {\n return (\n <button\n onClick={() => onChange(!checked)}\n className=\"relative shrink-0 transition-colors duration-200\"\n style={{\n width: 48,\n height: 28,\n borderRadius: 14,\n backgroundColor: checked ? accentColor : 'var(--t-border)',\n }}\n >\n <div\n className=\"absolute top-[3px] rounded-full bg-white shadow transition-transform duration-200\"\n style={{\n width: 22,\n height: 22,\n transform: checked ? 'translateX(23px)' : 'translateX(3px)',\n }}\n />\n </button>\n );\n}\n","/**\n * Settings Screen Modal\n * Dark mode toggle, theme skin picker, and links (Privacy Policy, Terms of Use).\n */\n\nimport { CloseButton } from '../ui/CloseButton';\nimport { DarkModeIcon, ChevronRight } from '../ui/icons';\nimport { ToggleSwitch } from '../ui/ToggleSwitch';\n// import { SkinSwatch } from '../ui/SkinSwatch';\n// import { SKINS } from '../../data/cryptoData';\n\nconst SETTINGS_LINKS = [\n { label: 'Privacy policy', href: 'https://nowramp.com/privacy-policy' },\n { label: 'Terms of use', href: 'https://nowramp.com/terms-and-conditions' },\n];\n\nexport interface SettingsScreenProps {\n onClose: () => void;\n darkMode: boolean;\n onToggleDarkMode: (v: boolean) => void;\n skinId: string;\n onSelectSkin: (id: string) => void;\n}\n\nexport function SettingsScreen({\n onClose,\n darkMode,\n onToggleDarkMode,\n skinId: _skinId,\n onSelectSkin: _onSelectSkin,\n}: SettingsScreenProps) {\n void _skinId;\n void _onSelectSkin;\n\n return (\n <>\n <div className=\"flex justify-end items-center px-5 pt-5\">\n <CloseButton onClick={onClose} />\n </div>\n <div className=\"px-5 flex-1 pt-6 overflow-y-auto custom-scroll\">\n {/* Dark mode toggle */}\n <div style={{ borderTop: '1px solid var(--t-divider)' }}>\n <div className=\"flex items-center justify-between w-full py-5\">\n <div className=\"flex items-center gap-3.5\">\n <DarkModeIcon size={40} />\n <span\n className=\"font-medium text-[15px]\"\n style={{ color: 'var(--t-text)' }}\n >\n Dark Mode\n </span>\n </div>\n <ToggleSwitch checked={darkMode} onChange={onToggleDarkMode} accentColor=\"#4CD964\" />\n </div>\n </div>\n <div style={{ height: 1, background: 'var(--t-divider)' }} />\n\n {/* Skin picker — controlled via code props only, hidden from end-user settings */}\n {/* <div className=\"py-5\">\n <div\n className=\"text-[15px] font-medium mb-4\"\n style={{ color: 'var(--t-text)' }}\n >\n Theme\n </div>\n <div className=\"flex gap-3\">\n {SKINS.map(skin => (\n <SkinSwatch\n key={skin.id}\n skin={skin}\n active={skin.id === skinId}\n dimmed={hasCustomAccent}\n onClick={() => onSelectSkin(skin.id)}\n darkMode={darkMode}\n />\n ))}\n </div>\n </div>\n <div style={{ height: 1, background: 'var(--t-divider)' }} /> */}\n\n {/* Links: Privacy Policy, Terms of Use */}\n {SETTINGS_LINKS.map((item) => (\n <div key={item.label}>\n <a\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center justify-between w-full py-5 transition-colors\"\n >\n <span\n className=\"font-medium text-[15px]\"\n style={{ color: 'var(--t-text)' }}\n >\n {item.label}\n </span>\n <ChevronRight />\n </a>\n <div style={{ height: 1, background: 'var(--t-divider)' }} />\n </div>\n ))}\n </div>\n </>\n );\n}\n","/**\n * RampForm\n * Main single-screen form with modal overlays (new NowRamp design).\n * Replaces the old multi-step wizard.\n */\n\nimport { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { RampProvider, useRamp, type RampProviderProps } from '../context/RampContext';\nimport { CheckoutStep } from './CheckoutStep';\nimport { ProcessingStep } from './ProcessingStep';\nimport { CompleteStep } from './CompleteStep';\nimport { ErrorStep } from './ErrorStep';\nimport { ConfirmStep } from './ConfirmStep';\nimport { Modal } from './ui/Modal';\nimport { AnimatedNumber } from './ui/AnimatedNumber';\nimport { Skeleton, FormSkeleton } from './ui/Skeleton';\nimport { CryptoIcon, FiatFlag, ChevronDown, MenuIcon } from './ui/icons';\nimport { FiatCurrencyModal } from './modals/FiatCurrencyModal';\nimport { CryptoCurrencyModal } from './modals/CryptoCurrencyModal';\nimport { SettingsScreen } from './modals/SettingsScreen';\nimport {\n\tBLOCKCHAINS,\n\tSKINS,\n\tparseAmount,\n\tisValidHex,\n\tMIN_FIAT_AMOUNT,\n\tMIN_CRYPTO_AMOUNT,\n\tgetChainIconUrl,\n\ttype Skin,\n} from '../data/cryptoData';\nimport type { Transaction } from '@nowramp/sdk';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RampFormProps extends Omit<RampProviderProps, 'children'> {\n\tclassName?: string;\n\ttheme?: 'light' | 'dark';\n\t/** Skin preset ID */\n\tskinId?: string;\n\t/** Custom accent color override (hex) */\n\taccentColor?: string;\n\t/** Custom background color override (hex) */\n\tbgColor?: string;\n\t/** Custom background image URL */\n\tbgImage?: string;\n\t/** Custom border color (hex) */\n\tborderColor?: string;\n\t/** Custom border radius (CSS value, e.g. '5px') */\n\tborderRadius?: string;\n\t/** Show Buy/Sell flow toggle (default: true). Set false to lock to the provided flowType. */\n\tshowFlowToggle?: boolean;\n\t/** Auto-redirect for redirect checkouts */\n\tautoRedirect?: boolean;\n\t/** Block explorer URL pattern */\n\texplorerUrl?: string;\n\t/** Done button text */\n\tdoneButtonText?: string;\n\t/** Support email */\n\tsupportEmail?: string;\n\t/** Show email field in wallet step */\n\tshowEmail?: boolean;\n\t/** Require email */\n\trequireEmail?: boolean;\n\t/** Callback when user clicks done */\n\tonDone?: () => void;\n\tonComplete?: (status: Transaction) => void;\n\tonError?: (error: Error) => void;\n}\n\n// =============================================================================\n// Inner Form\n// =============================================================================\n\ninterface InnerFormProps {\n\tclassName?: string;\n\ttheme?: 'light' | 'dark';\n\tskinId?: string;\n\taccentColor?: string;\n\tbgColor?: string;\n\tbgImage?: string;\n\tborderColor?: string;\n\tborderRadius?: string;\n\tshowFlowToggle?: boolean;\n\tautoRedirect?: boolean;\n\texplorerUrl?: string;\n\tdoneButtonText?: string;\n\tsupportEmail?: string;\n\tonDone?: () => void;\n}\n\ntype ModalType = 'fiat' | 'crypto' | 'settings' | null;\n\nfunction InnerForm({\n\tclassName = '',\n\ttheme = 'dark',\n\tskinId: skinIdProp = 'mono',\n\taccentColor: accentColorProp,\n\tbgColor: bgColorProp,\n\tbgImage: bgImageProp,\n\tborderColor: borderColorProp,\n\tborderRadius: borderRadiusProp,\n\tshowFlowToggle = true,\n\tautoRedirect = false,\n\texplorerUrl,\n\tdoneButtonText = 'Done',\n\tsupportEmail,\n\tonDone,\n}: InnerFormProps) {\n\tconst {\n\t\tstate,\n\t\tdispatch,\n\t\tconfig,\n\t\tconfigLoading,\n\t\tquotes,\n\t\tquotesLoading,\n\t\tquotesError,\n\t\tfetchQuotes,\n\t\tcreateOrder,\n\t\torderLoading,\n\t\tamountError,\n\t\tfieldLocks,\n\t\tapiConfig,\n\t\tassetBaseUrl,\n\t} = useRamp();\n\n\t// Local UI state\n\tconst [darkMode, setDarkMode] = useState(theme === 'dark');\n\tconst [skinId, setSkinId] = useState(skinIdProp);\n\tconst [modal, setModal] = useState<ModalType>(null);\n\tconst [amountTouched, setAmountTouched] = useState(false);\n\tconst [walletTouched, setWalletTouched] = useState(false);\n\tconst [walletValidating, setWalletValidating] = useState(false);\n\tconst [walletServerValid, setWalletServerValid] = useState<boolean | null>(null);\n\tconst [loading, setLoading] = useState(true);\n\tconst [switching, setSwitching] = useState(false);\n\tconst [autoSelectPending, setAutoSelectPending] = useState(false);\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst walletValidationTimer = useRef<ReturnType<typeof setTimeout>>();\n\tconst prevTabRef = useRef(state.flowType);\n\n\t// Sync darkMode with theme prop\n\tuseEffect(() => {\n\t\tsetDarkMode(theme === 'dark');\n\t}, [theme]);\n\n\t// Initial load animation\n\tuseEffect(() => {\n\t\tconst t = setTimeout(() => setLoading(false), configLoading ? 0 : 800);\n\t\treturn () => clearTimeout(t);\n\t}, [configLoading]);\n\n\t// Tab switching animation\n\tuseEffect(() => {\n\t\tif (prevTabRef.current !== state.flowType && !loading) {\n\t\t\tprevTabRef.current = state.flowType;\n\t\t\tsetSwitching(true);\n\t\t\tsetAmountTouched(false);\n\t\t\tsetWalletTouched(false);\n\t\t\tconst t = setTimeout(() => setSwitching(false), 350);\n\t\t\treturn () => clearTimeout(t);\n\t\t}\n\t\tprevTabRef.current = state.flowType;\n\t}, [state.flowType, loading]);\n\n\tconst tab = state.flowType;\n\tconst isBuy = tab === 'buy';\n\n\t// Compute display values from real quotes only\n\tconst cryptoCode = state.cryptoCurrency || 'BTC';\n\tconst fiatCode = state.fiatCurrency || 'USD';\n\tconst spendAmount = isBuy ? state.fiatAmount : state.cryptoAmount;\n\tconst spendNumeric = parseAmount(spendAmount);\n\n\tconst quoteRate = quotes?.bestQuote?.exchangeRate\n\t\t? parseFloat(quotes.bestQuote.exchangeRate)\n\t\t: null;\n\n\t// Persist last known rate so it stays visible between quote fetches\n\tconst lastRateRef = useRef<{ rate: number; crypto: string; fiat: string } | null>(null);\n\tif (quoteRate && cryptoCode && fiatCode) {\n\t\tlastRateRef.current = { rate: quoteRate, crypto: cryptoCode, fiat: fiatCode };\n\t}\n\n\tconst receiveAmount = useMemo(() => {\n\t\tif (quotes?.bestQuote) {\n\t\t\tconst amt = isBuy ? quotes.bestQuote.cryptoAmount : quotes.bestQuote.fiatAmount;\n\t\t\tif (amt) return amt;\n\t\t}\n\t\treturn '0';\n\t}, [quotes, isBuy]);\n\n\tconst displayRate = useMemo(() => {\n\t\tconst r = quoteRate || lastRateRef.current?.rate;\n\t\tconst cc = quoteRate ? cryptoCode : lastRateRef.current?.crypto;\n\t\tconst fc = quoteRate ? fiatCode : lastRateRef.current?.fiat;\n\t\tif (!r || !cc || !fc) return '';\n\t\treturn `1 ${cc} ≈ ${r.toFixed(2)} ${fc}`;\n\t}, [cryptoCode, fiatCode, quoteRate]);\n\n\t// Server-side wallet address validation (debounced)\n\tuseEffect(() => {\n\t\tconst addr = state.walletAddress.trim();\n\t\tconst network = state.network;\n\n\t\t// Reset when empty\n\t\tif (!addr || addr.length < 10) {\n\t\t\tsetWalletServerValid(null);\n\t\t\tdispatch({ type: 'SET_WALLET_ERROR', message: '' });\n\t\t\treturn;\n\t\t}\n\n\t\tsetWalletValidating(true);\n\t\tsetWalletServerValid(null);\n\n\t\tclearTimeout(walletValidationTimer.current);\n\t\twalletValidationTimer.current = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`${apiConfig.apiUrl}/public/validate/address`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\tbody: JSON.stringify({ address: addr, ...(network ? { network } : {}) }),\n\t\t\t\t});\n\t\t\t\tconst data = await res.json();\n\t\t\t\tconst result = data.data?.attributes || data.data || data;\n\t\t\t\tif (result.isValid) {\n\t\t\t\t\tsetWalletServerValid(true);\n\t\t\t\t\tdispatch({ type: 'SET_WALLET_ERROR', message: '' });\n\t\t\t\t} else {\n\t\t\t\t\tsetWalletServerValid(false);\n\t\t\t\t\tconst msg = result.errors?.[0] || result.details?.formatMessage || 'Invalid wallet address';\n\t\t\t\t\tdispatch({ type: 'SET_WALLET_ERROR', message: msg });\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Network error — don't block the user, allow submission\n\t\t\t\tsetWalletServerValid(null);\n\t\t\t} finally {\n\t\t\t\tsetWalletValidating(false);\n\t\t\t}\n\t\t}, 500);\n\n\t\treturn () => clearTimeout(walletValidationTimer.current);\n\t}, [state.walletAddress, state.network, apiConfig.apiUrl]);\n\n\t// Validation — use server-provided limits (amountError) as source of truth, fall back to hardcoded\n\tconst amountIsEmpty = !spendAmount || spendNumeric === 0;\n\tconst amountBelowMin = spendNumeric > 0 && (isBuy ? spendNumeric < MIN_FIAT_AMOUNT : spendNumeric < MIN_CRYPTO_AMOUNT);\n\tconst hasAmountError = !!amountError || amountBelowMin || (amountTouched && amountIsEmpty);\n\tconst isAmountValid = spendNumeric > 0 && !amountError && !amountBelowMin;\n\tconst isWalletValid = state.walletAddress.trim().length >= 10 && walletServerValid !== false && !walletValidating;\n\tconst isFormValid = isAmountValid && isWalletValid && !!state.cryptoCurrency && !!state.network;\n\n\tconst handleAmountChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tlet raw = e.target.value.replace(/[^0-9.,]/g, '');\n\t\t// Limit decimal places: 2 for fiat, 6 for crypto\n\t\tconst maxDecimals = isBuy ? 2 : 6;\n\t\tconst dotIndex = raw.indexOf('.');\n\t\tif (dotIndex !== -1 && raw.length - dotIndex - 1 > maxDecimals) {\n\t\t\traw = raw.slice(0, dotIndex + maxDecimals + 1);\n\t\t}\n\t\tif (isBuy) {\n\t\t\tdispatch({ type: 'SET_FIAT_AMOUNT', amount: raw });\n\t\t} else {\n\t\t\tdispatch({ type: 'SET_CRYPTO_AMOUNT', amount: raw });\n\t\t}\n\t};\n\n\tconst handleTabSwitch = (newTab: 'buy' | 'sell') => {\n\t\tif (newTab === tab) return;\n\t\tdispatch({ type: 'SET_FLOW_TYPE', flowType: newTab });\n\t};\n\n\tconst handleFiatSelect = useCallback(\n\t\t(code: string) => {\n\t\t\tdispatch({ type: 'SET_FIAT_CURRENCY', currency: code });\n\t\t},\n\t\t[dispatch]\n\t);\n\n\tconst handleCryptoSelect = useCallback(\n\t\t(code: string, chain: string) => {\n\t\t\tdispatch({ type: 'SET_CRYPTO_CURRENCY', currency: code });\n\t\t\tdispatch({ type: 'SET_CRYPTO_CHAIN', chain });\n\t\t},\n\t\t[dispatch]\n\t);\n\n\tconst handleCtaClick = () => {\n\t\tif (!isFormValid) return;\n\t\tsetAutoSelectPending(true);\n\t\tfetchQuotes();\n\t};\n\n\t// Auto-select best quote when quotes arrive after CTA click\n\tuseEffect(() => {\n\t\tif (!autoSelectPending || quotesLoading) return;\n\n\t\tif (quotes?.bestQuote) {\n\t\t\tsetAutoSelectPending(false);\n\t\t\tdispatch({ type: 'SELECT_QUOTE', quote: quotes.bestQuote });\n\t\t\tcreateOrder().catch(() => {\n\t\t\t\t// Error handled by context\n\t\t\t});\n\t\t} else if (quotesError) {\n\t\t\tsetAutoSelectPending(false);\n\t\t\tdispatch({ type: 'SET_ERROR', message: quotesError.message || 'No quotes available' });\n\t\t} else if (quotes && !quotes.bestQuote) {\n\t\t\t// Quotes loaded successfully but no providers available\n\t\t\tsetAutoSelectPending(false);\n\t\t\tconst reasons = (quotes as any).unavailableGateways\n\t\t\t\t?.map((g: any) => g.reason)\n\t\t\t\t.filter(Boolean);\n\t\t\tconst message = reasons?.length\n\t\t\t\t? `No providers available: ${reasons.join('; ')}`\n\t\t\t\t: 'No providers available for this currency/network combination';\n\t\t\tdispatch({ type: 'SET_ERROR', message });\n\t\t}\n\t}, [autoSelectPending, quotes, quotesLoading, quotesError, dispatch, createOrder]);\n\n\t// Theme computation\n\tconst themeClass = darkMode ? 'theme-dark' : 'theme-light';\n\tconst activeSkin = SKINS.find((s: Skin) => s.id === skinId) || SKINS[0];\n\tconst isMono = activeSkin.accent === null;\n\n\tconst hasCustomAccent = accentColorProp ? isValidHex(accentColorProp) : false;\n\tconst accentStyle: Record<string, string> = hasCustomAccent\n\t\t? { '--t-accent': accentColorProp!, '--t-cta-bg': accentColorProp!, '--t-cta-text': '#ffffff' }\n\t\t: isMono\n\t\t\t? {\n\t\t\t\t\t'--t-accent': darkMode ? '#ffffff' : '#111111',\n\t\t\t\t\t'--t-cta-bg': darkMode ? '#ffffff' : '#111111',\n\t\t\t\t\t'--t-cta-text': darkMode ? '#000000' : '#ffffff',\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t'--t-accent': activeSkin.accent!,\n\t\t\t\t\t'--t-cta-bg': activeSkin.accent!,\n\t\t\t\t\t'--t-cta-text': '#ffffff',\n\t\t\t\t};\n\n\tconst backgroundStyle: Record<string, string> = {};\n\tif (bgColorProp && isValidHex(bgColorProp)) {\n\t\tbackgroundStyle.backgroundColor = bgColorProp;\n\t} else {\n\t\tbackgroundStyle.backgroundColor = 'var(--t-bg)';\n\t}\n\tif (bgImageProp) {\n\t\tbackgroundStyle.backgroundImage = `url(${bgImageProp})`;\n\t\tbackgroundStyle.backgroundSize = 'cover';\n\t\tbackgroundStyle.backgroundPosition = 'center';\n\t}\n\n\tconst borderStyle: Record<string, string> = {};\n\tif (borderColorProp && isValidHex(borderColorProp)) {\n\t\tborderStyle.border = `1px solid ${borderColorProp}`;\n\t}\n\tif (borderRadiusProp) {\n\t\tborderStyle.borderRadius = borderRadiusProp;\n\t}\n\n\t// If we're in a post-form step, render inside the same themed container\n\tconst postFormStep =\n\t\tstate.step === 'checkout' ? <CheckoutStep autoRedirect={autoRedirect} /> :\n\t\tstate.step === 'processing' ? <ProcessingStep /> :\n\t\tstate.step === 'complete' ? <CompleteStep explorerUrl={explorerUrl} doneButtonText={doneButtonText} onDone={onDone} /> :\n\t\tstate.step === 'error' ? <ErrorStep supportEmail={supportEmail} /> :\n\t\tstate.step === 'confirm' ? <ConfirmStep /> :\n\t\tnull;\n\n\tif (postFormStep) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`${themeClass} relative w-full max-w-[390px] h-[640px] overflow-hidden flex flex-col select-none transition-colors duration-300 ${className}`}\n\t\t\t\tstyle={{\n\t\t\t\t\tfontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n\t\t\t\t\t...backgroundStyle,\n\t\t\t\t\t...accentStyle,\n\t\t\t\t\t...borderStyle,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{postFormStep}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst chainCode = state.network;\n\tconst chainInfo = chainCode ? BLOCKCHAINS[chainCode] : null;\n\tconst chainDisplay = chainInfo?.shortName || chainInfo?.name || chainCode;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${themeClass} relative w-full max-w-[390px] min-h-[640px] overflow-hidden flex flex-col select-none transition-colors duration-300 ${className}`}\n\t\t\tstyle={{\n\t\t\t\tfontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n\t\t\t\t...backgroundStyle,\n\t\t\t\t...accentStyle,\n\t\t\t\t...borderStyle,\n\t\t\t}}\n\t\t>\n\t\t\t{/* Menu icon */}\n\t\t\t<div className={`flex justify-end items-center px-5 pt-3 ${showFlowToggle ? 'pb-1' : 'pb-5'}`}>\n\t\t\t\t<MenuIcon onClick={() => setModal('settings')} />\n\t\t\t</div>\n\n\t\t\t{/* Buy / Sell tabs */}\n\t\t\t{showFlowToggle ? (\n\t\t\t\t<div className=\"flex flex-col items-center pt-3 pb-5\">\n\t\t\t\t\t<div className=\"flex\" style={{ width: 165 }}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={() => handleTabSwitch('buy')}\n\t\t\t\t\t\t\tclassName=\"flex-1 pb-2.5 text-[16px] font-medium text-center transition-colors duration-200\"\n\t\t\t\t\t\t\tstyle={{ color: tab === 'buy' ? 'var(--t-text)' : 'var(--t-text-secondary)' }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tBuy\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={() => handleTabSwitch('sell')}\n\t\t\t\t\t\t\tclassName=\"flex-1 pb-2.5 text-[16px] font-medium text-center transition-colors duration-200\"\n\t\t\t\t\t\t\tstyle={{ color: tab === 'sell' ? 'var(--t-text)' : 'var(--t-text-secondary)' }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSell\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"relative\" style={{ width: 165, height: 1 }}>\n\t\t\t\t\t\t<div className=\"absolute inset-0\" style={{ background: 'var(--t-divider)' }} />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"absolute top-0 h-full transition-all duration-300 ease-in-out\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: '50%',\n\t\t\t\t\t\t\t\tleft: tab === 'buy' ? '0%' : '50%',\n\t\t\t\t\t\t\t\tbackground: 'var(--t-accent)',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{loading || switching || configLoading ? (\n\t\t\t\t<FormSkeleton />\n\t\t\t) : (\n\t\t\t\t<div key={tab} className=\"flex-1 overflow-hidden px-5 flex flex-col tab-fade-in\">\n\t\t\t\t\t{/* You spend card */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"px-[18px] pt-[14px] pb-[18px]\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: 'var(--t-surface)',\n\t\t\t\t\t\t\tborderRadius: 5,\n\t\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\tamountTouched && hasAmountError ? '1px solid #EF4444' : '1px solid transparent',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"text-[13px] mb-2.5\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\tYou spend\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tvalue={spendAmount}\n\t\t\t\t\t\t\t\tonChange={handleAmountChange}\n\t\t\t\t\t\t\t\tonBlur={() => setAmountTouched(true)}\n\t\t\t\t\t\t\t\tplaceholder={isBuy ? '250' : '0.01'}\n\t\t\t\t\t\t\t\tclassName=\"bg-transparent outline-none w-0 flex-1 mr-3\"\n\t\t\t\t\t\t\t\tstyle={{ color: 'var(--t-text)', fontSize: 24, fontWeight: 600, lineHeight: '32px' }}\n\t\t\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\t\t\tdisabled={!!fieldLocks?.sourceAmount?.locked}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isBuy ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => setModal('fiat')}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1.5 shrink-0 transition-colors\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground: 'var(--t-pill-bg)',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\tpaddingLeft: 10,\n\t\t\t\t\t\t\t\t\t\tpaddingRight: 10,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={!!fieldLocks?.sourceCurrency?.locked}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FiatFlag currencyCode={fiatCode} size={16} baseUrl={assetBaseUrl} />\n\t\t\t\t\t\t\t\t\t<span className=\"text-[13px] font-medium\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t{fiatCode}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<ChevronDown />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-end shrink-0\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={() => setModal('crypto')}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1.5 transition-colors\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackground: 'var(--t-pill-bg)',\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: 10,\n\t\t\t\t\t\t\t\t\t\t\tpaddingRight: 10,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdisabled={!!fieldLocks?.destinationCurrency?.locked}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<CryptoIcon ticker={cryptoCode} size={16} baseUrl={assetBaseUrl} />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[13px] font-medium\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t\t{cryptoCode}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<ChevronDown />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t{chainCode && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1 mt-1.5 mr-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={getChainIconUrl(chainCode, assetBaseUrl)}\n\t\t\t\t\t\t\t\t\t\t\t\talt={chainCode}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={14}\n\t\t\t\t\t\t\t\t\t\t\t\theight={14}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[12px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{chainDisplay}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{amountTouched && hasAmountError && (\n\t\t\t\t\t\t<div className=\"text-[12px] mt-1.5 px-[2px]\" style={{ color: '#EF4444' }}>\n\t\t\t\t\t\t\t{amountError\n\t\t\t\t\t\t\t\t|| (amountIsEmpty\n\t\t\t\t\t\t\t\t\t? 'Amount should be more than 0'\n\t\t\t\t\t\t\t\t\t: isBuy\n\t\t\t\t\t\t\t\t\t\t? `Minimum amount is ${MIN_FIAT_AMOUNT} ${fiatCode}`\n\t\t\t\t\t\t\t\t\t\t: `Minimum amount is ${MIN_CRYPTO_AMOUNT} ${cryptoCode}`)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* You get card */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"px-[18px] pt-[12px] pb-[14px]\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: 'var(--t-surface)',\n\t\t\t\t\t\t\tborderTopLeftRadius: 5,\n\t\t\t\t\t\t\tborderTopRightRadius: 5,\n\t\t\t\t\t\t\tborderBottomLeftRadius: 0,\n\t\t\t\t\t\t\tborderBottomRightRadius: 0,\n\t\t\t\t\t\t\tmarginTop: 4,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"text-[13px] mb-2.5\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\tYou get\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-start justify-between\">\n\t\t\t\t\t\t\t{quotesLoading ? (\n\t\t\t\t\t\t\t\t<Skeleton w={180} h={32} />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<AnimatedNumber\n\t\t\t\t\t\t\t\t\tvalue={spendNumeric > 0 ? receiveAmount : '0'}\n\t\t\t\t\t\t\t\t\theight={32}\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: spendNumeric > 0 ? 'var(--t-text)' : 'var(--t-text-muted)', fontSize: 24 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{isBuy ? (\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-end shrink-0\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={() => setModal('crypto')}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1.5 transition-colors\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackground: 'var(--t-pill-bg)',\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: 10,\n\t\t\t\t\t\t\t\t\t\t\tpaddingRight: 10,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdisabled={!!fieldLocks?.destinationCurrency?.locked}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<CryptoIcon ticker={cryptoCode} size={16} baseUrl={assetBaseUrl} />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[13px] font-medium\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t\t{cryptoCode}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<ChevronDown />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t{chainCode && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1 mt-1.5 mr-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={getChainIconUrl(chainCode, assetBaseUrl)}\n\t\t\t\t\t\t\t\t\t\t\t\talt={chainCode}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={14}\n\t\t\t\t\t\t\t\t\t\t\t\theight={14}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[12px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{chainDisplay}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => setModal('fiat')}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1.5 shrink-0 transition-colors\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground: 'var(--t-pill-bg)',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\tpaddingLeft: 10,\n\t\t\t\t\t\t\t\t\t\tpaddingRight: 10,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={!!fieldLocks?.sourceCurrency?.locked}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FiatFlag currencyCode={fiatCode} size={16} baseUrl={assetBaseUrl} />\n\t\t\t\t\t\t\t\t\t<span className=\"text-[13px] font-medium\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t{fiatCode}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<ChevronDown />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Exchange rate row */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex items-center justify-between mt-[2px] px-[18px] pt-[12px] pb-[14px]\"\n\t\t\t\t\t\tstyle={{ background: 'var(--t-surface)' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"text-[12px]\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\t{displayRate || '\\u00A0'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Wallet address */}\n\t\t\t\t\t<div className=\"mt-8\">\n\t\t\t\t\t\t<div className=\"text-[13px] mb-2.5\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\tWallet address\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tvalue={state.walletAddress}\n\t\t\t\t\t\t\tonChange={(e) => dispatch({ type: 'SET_WALLET_ADDRESS', address: e.target.value })}\n\t\t\t\t\t\t\tonBlur={() => setWalletTouched(true)}\n\t\t\t\t\t\t\tplaceholder=\"Enter your wallet address\"\n\t\t\t\t\t\t\tspellCheck={false}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\tclassName=\"w-full bg-transparent text-[13px] outline-none transition-colors\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\t\tstate.walletError || (walletTouched && !isWalletValid)\n\t\t\t\t\t\t\t\t\t\t? '1px solid #EF4444'\n\t\t\t\t\t\t\t\t\t\t: '1px solid var(--t-border)',\n\t\t\t\t\t\t\t\tborderRadius: 3.5,\n\t\t\t\t\t\t\t\theight: 47,\n\t\t\t\t\t\t\t\tpaddingLeft: 14,\n\t\t\t\t\t\t\t\tpaddingRight: 14,\n\t\t\t\t\t\t\t\tcolor: 'var(--t-text)',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={!!fieldLocks?.destinationAddress?.locked}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{state.walletError ? (\n\t\t\t\t\t\t\t<div className=\"text-[12px] mt-1.5\" style={{ color: '#EF4444' }}>\n\t\t\t\t\t\t\t\t{state.walletError}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : walletTouched && !isWalletValid && !walletValidating ? (\n\t\t\t\t\t\t\t<div className=\"text-[12px] mt-1.5\" style={{ color: '#EF4444' }}>\n\t\t\t\t\t\t\t\tEnter a valid wallet address\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : walletValidating && state.walletAddress.trim().length >= 10 ? (\n\t\t\t\t\t\t\t<div className=\"text-[12px] mt-1.5\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\t\t\tValidating address...\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"flex-1\" />\n\n\t\t\t\t\t{/* CTA button */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tdisabled={!isFormValid || orderLoading || autoSelectPending}\n\t\t\t\t\t\tonClick={handleCtaClick}\n\t\t\t\t\t\tclassName=\"w-full font-semibold text-[16px] transition-all\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: 60,\n\t\t\t\t\t\t\tborderRadius: 5,\n\t\t\t\t\t\t\tbackground: 'var(--t-cta-bg)',\n\t\t\t\t\t\t\tcolor: 'var(--t-cta-text)',\n\t\t\t\t\t\t\topacity: isFormValid && !orderLoading && !autoSelectPending ? 1 : 0.4,\n\t\t\t\t\t\t\tcursor:\n\t\t\t\t\t\t\t\tisFormValid && !orderLoading && !autoSelectPending ? 'pointer' : 'not-allowed',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{autoSelectPending\n\t\t\t\t\t\t\t? 'Getting best price...'\n\t\t\t\t\t\t\t: orderLoading\n\t\t\t\t\t\t\t\t? 'Processing...'\n\t\t\t\t\t\t\t\t: isBuy\n\t\t\t\t\t\t\t\t\t? `Buy ${cryptoCode}`\n\t\t\t\t\t\t\t\t\t: `Sell ${cryptoCode}`}\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{/* Footer */}\n\t\t\t\t\t<div className=\"text-center py-3\">\n\t\t\t\t\t\t<span className=\"text-[11px]\" style={{ color: 'var(--t-text-tertiary)' }}>\n\t\t\t\t\t\t\tPowered by NowRamp\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Modal overlays */}\n\t\t\t<Modal isOpen={modal === 'fiat'} onClose={() => setModal(null)}>\n\t\t\t\t{(close) => (\n\t\t\t\t\t<FiatCurrencyModal\n\t\t\t\t\t\tonClose={close}\n\t\t\t\t\t\tonSelect={(v) => {\n\t\t\t\t\t\t\thandleFiatSelect(v);\n\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tcurrencies={config?.fiats?.map((f) => ({ code: f.code, name: f.code }))}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Modal>\n\t\t\t<Modal isOpen={modal === 'crypto'} onClose={() => setModal(null)}>\n\t\t\t\t{(close) => (\n\t\t\t\t\t<CryptoCurrencyModal\n\t\t\t\t\t\tonClose={close}\n\t\t\t\t\t\tonSelect={(code, chain) => {\n\t\t\t\t\t\t\thandleCryptoSelect(code, chain);\n\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tcryptos={config?.cryptos?.map((c) => ({\n\t\t\t\t\t\t\tcode: c.code,\n\t\t\t\t\t\t\tname: c.code,\n\t\t\t\t\t\t\tnetworks: c.networks?.map((n) => ({ code: n.id, name: n.name })),\n\t\t\t\t\t\t}))}\n\t\t\t\t\t\tassetBaseUrl={assetBaseUrl}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Modal>\n\t\t\t<Modal isOpen={modal === 'settings'} onClose={() => setModal(null)}>\n\t\t\t\t{(close) => (\n\t\t\t\t\t<SettingsScreen\n\t\t\t\t\t\tonClose={close}\n\t\t\t\t\t\tdarkMode={darkMode}\n\t\t\t\t\t\tonToggleDarkMode={setDarkMode}\n\t\t\t\t\t\tskinId={skinId}\n\t\t\t\t\t\tonSelectSkin={(id) => {\n\t\t\t\t\t\t\tsetSkinId(id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Modal>\n\t\t</div>\n\t);\n}\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport function RampForm({\n\tprojectId,\n\tapiUrl,\n\tassetBaseUrl,\n\tflowType,\n\tcustomerId,\n\tdefaultFiatCurrency,\n\tdefaultCryptoCurrency,\n\tdefaultNetwork,\n\tdefaultFiatAmount,\n\tdefaultCryptoAmount,\n\tdefaultWalletAddress,\n\tdefaultGateway,\n\tfieldLocks,\n\tstatusPollInterval,\n\tonComplete,\n\tonError,\n\tclassName,\n\ttheme,\n\tskinId,\n\taccentColor,\n\tbgColor,\n\tbgImage,\n\tborderColor,\n\tborderRadius,\n\tshowFlowToggle,\n\tautoRedirect,\n\texplorerUrl,\n\tdoneButtonText,\n\tsupportEmail,\n\tonDone,\n}: RampFormProps) {\n\treturn (\n\t\t<RampProvider\n\t\t\tprojectId={projectId}\n\t\t\tapiUrl={apiUrl}\n\t\t\tassetBaseUrl={assetBaseUrl}\n\t\t\tflowType={flowType}\n\t\t\tcustomerId={customerId}\n\t\t\tdefaultFiatCurrency={defaultFiatCurrency}\n\t\t\tdefaultCryptoCurrency={defaultCryptoCurrency}\n\t\t\tdefaultNetwork={defaultNetwork}\n\t\t\tdefaultFiatAmount={defaultFiatAmount}\n\t\t\tdefaultCryptoAmount={defaultCryptoAmount}\n\t\t\tdefaultWalletAddress={defaultWalletAddress}\n\t\t\tdefaultGateway={defaultGateway}\n\t\t\tfieldLocks={fieldLocks}\n\t\t\tstatusPollInterval={statusPollInterval}\n\t\t\tonComplete={onComplete}\n\t\t\tonError={onError}\n\t\t>\n\t\t\t<InnerForm\n\t\t\t\tclassName={className}\n\t\t\t\ttheme={theme}\n\t\t\t\tskinId={skinId}\n\t\t\t\taccentColor={accentColor}\n\t\t\t\tbgColor={bgColor}\n\t\t\t\tbgImage={bgImage}\n\t\t\t\tborderColor={borderColor}\n\t\t\t\tborderRadius={borderRadius}\n\t\t\t\tshowFlowToggle={showFlowToggle}\n\t\t\t\tautoRedirect={autoRedirect}\n\t\t\t\texplorerUrl={explorerUrl}\n\t\t\t\tdoneButtonText={doneButtonText}\n\t\t\t\tsupportEmail={supportEmail}\n\t\t\t\tonDone={onDone}\n\t\t\t/>\n\t\t</RampProvider>\n\t);\n}\n","/**\n * CheckoutForm Component\n * Single-page checkout form using the same NowRamp design as RampForm.\n * This is the hosted-checkout variant — both components now produce the\n * same visual since the new design is inherently single-page.\n */\n\nimport { RampForm, type RampFormProps } from './RampForm';\n\nexport interface CheckoutFormProps extends RampFormProps {\n /** Submit button text (legacy — maps to nothing in new design, kept for API compat) */\n submitButtonText?: string;\n /** Rate refresh interval in ms (legacy, kept for API compat) */\n rateRefreshInterval?: number;\n}\n\n/**\n * Hosted checkout form.\n * Now uses the same NowRamp design as RampForm.\n */\nexport function CheckoutForm({\n submitButtonText: _submitButtonText,\n rateRefreshInterval: _rateRefreshInterval,\n ...props\n}: CheckoutFormProps) {\n return <RampForm {...props} />;\n}\n","export interface Skin {\n id: string;\n name: string;\n accent: string | null;\n}\n\nexport function SkinSwatch({\n skin,\n active,\n onClick,\n darkMode,\n dimmed,\n}: {\n skin: Skin;\n active: boolean;\n onClick: () => void;\n darkMode: boolean;\n dimmed: boolean;\n}) {\n const isMono = skin.accent === null;\n const size = 32;\n return (\n <button\n onClick={onClick}\n className=\"relative shrink-0\"\n style={{ width: size, height: size, opacity: dimmed ? 0.4 : 1, transition: 'opacity 0.2s' }}\n >\n {isMono ? (\n <svg width={size} height={size} viewBox=\"0 0 32 32\">\n <clipPath id=\"mono-left\"><rect x=\"0\" y=\"0\" width=\"16\" height=\"32\" /></clipPath>\n <clipPath id=\"mono-right\"><rect x=\"16\" y=\"0\" width=\"16\" height=\"32\" /></clipPath>\n <circle cx=\"16\" cy=\"16\" r=\"15\" fill=\"#111111\" clipPath=\"url(#mono-left)\" />\n <circle cx=\"16\" cy=\"16\" r=\"15\" fill=\"#ffffff\" clipPath=\"url(#mono-right)\" />\n <circle cx=\"16\" cy=\"16\" r=\"15\" fill=\"none\" stroke={darkMode ? 'rgba(255,255,255,0.15)' : 'rgba(0,0,0,0.1)'} strokeWidth=\"1\" />\n </svg>\n ) : (\n <svg width={size} height={size} viewBox=\"0 0 32 32\">\n <circle cx=\"16\" cy=\"16\" r=\"15\" fill={skin.accent!} />\n </svg>\n )}\n {active && !dimmed && (\n <div\n className=\"absolute inset-0 rounded-full\"\n style={{ boxShadow: '0 0 0 2px var(--t-bg), 0 0 0 4px var(--t-text)' }}\n />\n )}\n </button>\n );\n}\n","/**\n * Choose Ramp (Provider) Modal\n * Displays REAL quotes from the aggregation engine in a ranked list.\n * First item (best quote) gets a border outline, remaining items get surface background.\n * Shows loading skeletons while quotes load, and an empty state if no quotes available.\n */\n\nimport { useState, useMemo } from 'react';\nimport { CloseButton } from '../ui/CloseButton';\nimport { SearchInput } from '../ui/SearchInput';\nimport { GenericCoinIcon } from '../ui/icons';\nimport { Skeleton } from '../ui/Skeleton';\nimport type { Quote, QuotesResponse } from '@nowramp/sdk';\n\nexport interface ChooseRampModalProps {\n\tonClose: () => void;\n\tonSelect: (quote: Quote) => void;\n\t/** Real quotes from the aggregation engine */\n\tquotes: QuotesResponse | null;\n\t/** Whether quotes are still loading */\n\tquotesLoading: boolean;\n\t/** The selected crypto currency code (for display) */\n\tcryptoCurrency: string;\n}\n\nfunction QuoteTag({ quote }: { quote: Quote }) {\n\tif (quote.isBestRate) {\n\t\treturn (\n\t\t\t<div className=\"text-[12px]\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\tBest price\n\t\t\t</div>\n\t\t);\n\t}\n\tif (quote.isRecommended) {\n\t\treturn (\n\t\t\t<div className=\"text-[12px]\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\tRecommended\n\t\t\t</div>\n\t\t);\n\t}\n\tif (quote.rank && quote.rank <= 3) {\n\t\treturn (\n\t\t\t<div className=\"text-[12px]\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t#{quote.rank}\n\t\t\t</div>\n\t\t);\n\t}\n\treturn null;\n}\n\nfunction ProviderIcon({ quote }: { quote: Quote }) {\n\tif (quote.gatewayLogo) {\n\t\treturn (\n\t\t\t<img\n\t\t\t\tsrc={quote.gatewayLogo}\n\t\t\t\talt={quote.gatewayName}\n\t\t\t\twidth={36}\n\t\t\t\theight={36}\n\t\t\t\tclassName=\"rounded-full shrink-0\"\n\t\t\t\tstyle={{ width: 36, height: 36 }}\n\t\t\t/>\n\t\t);\n\t}\n\treturn <GenericCoinIcon size={36} />;\n}\n\nfunction LoadingSkeletons() {\n\treturn (\n\t\t<div className=\"space-y-2\">\n\t\t\t{[0, 1, 2].map((i) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={i}\n\t\t\t\t\tclassName=\"w-full flex items-center gap-3.5\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tborderRadius: 5,\n\t\t\t\t\t\theight: 64,\n\t\t\t\t\t\tpaddingLeft: 16,\n\t\t\t\t\t\tpaddingRight: 16,\n\t\t\t\t\t\tbackground: 'var(--t-surface)',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Skeleton w={36} h={36} className=\"rounded-full shrink-0\" />\n\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t<Skeleton w={90} h={14} className=\"mb-1.5\" />\n\t\t\t\t\t\t<Skeleton w={60} h={12} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"text-right\">\n\t\t\t\t\t\t<Skeleton w={40} h={10} className=\"mb-1.5\" />\n\t\t\t\t\t\t<Skeleton w={80} h={14} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function ChooseRampModal({\n\tonClose,\n\tonSelect,\n\tquotes,\n\tquotesLoading,\n\tcryptoCurrency,\n}: ChooseRampModalProps) {\n\tconst [search, setSearch] = useState('');\n\n\tconst filteredQuotes = useMemo(() => {\n\t\tif (!quotes?.quotes) return [];\n\t\tconst raw = search.trim().toLowerCase();\n\t\tif (!raw) return quotes.quotes;\n\t\treturn quotes.quotes.filter((q) => q.gatewayName.toLowerCase().includes(raw));\n\t}, [quotes, search]);\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex justify-end px-5 pt-5\">\n\t\t\t\t<CloseButton onClick={onClose} />\n\t\t\t</div>\n\t\t\t<h2\n\t\t\t\tclassName=\"text-center text-[17px] font-medium mt-2 mb-6\"\n\t\t\t\tstyle={{ color: 'var(--t-text)' }}\n\t\t\t>\n\t\t\t\tChoose Ramp\n\t\t\t</h2>\n\t\t\t<SearchInput value={search} onChange={setSearch} />\n\t\t\t<div className=\"flex-1 overflow-y-auto custom-scroll px-5 space-y-2\">\n\t\t\t\t{quotesLoading ? (\n\t\t\t\t\t<LoadingSkeletons />\n\t\t\t\t) : filteredQuotes.length === 0 ? (\n\t\t\t\t\t<div className=\"text-center py-10 text-[14px]\" style={{ color: 'var(--t-text-muted)' }}>\n\t\t\t\t\t\t{quotes && quotes.quotes.length === 0\n\t\t\t\t\t\t\t? 'No quotes available for this request'\n\t\t\t\t\t\t\t: 'No providers found'}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\tfilteredQuotes.map((quote, i) => {\n\t\t\t\t\t\tconst isBest = i === 0;\n\t\t\t\t\t\tconst receiveAmount = parseFloat(quote.cryptoAmount);\n\t\t\t\t\t\tconst displayAmount =\n\t\t\t\t\t\t\treceiveAmount >= 1 ? receiveAmount.toFixed(4) : receiveAmount.toPrecision(6);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={quote.gatewayId}\n\t\t\t\t\t\t\t\tonClick={() => onSelect(quote)}\n\t\t\t\t\t\t\t\tclassName=\"w-full flex items-center gap-3.5 transition-colors\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tborderRadius: isBest ? 4.5 : 5,\n\t\t\t\t\t\t\t\t\theight: isBest ? 63 : 64,\n\t\t\t\t\t\t\t\t\tpaddingLeft: 16,\n\t\t\t\t\t\t\t\t\tpaddingRight: 16,\n\t\t\t\t\t\t\t\t\tborder: isBest ? '1px solid var(--t-border)' : '1px solid transparent',\n\t\t\t\t\t\t\t\t\tbackground: isBest ? 'transparent' : 'var(--t-surface)',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ProviderIcon quote={quote} />\n\t\t\t\t\t\t\t\t<div className=\"text-left flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t<div className=\"font-medium text-[15px]\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t{quote.gatewayName}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<QuoteTag quote={quote} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"text-right shrink-0\">\n\t\t\t\t\t\t\t\t\t<div className=\"text-[11px]\" style={{ color: 'var(--t-text-secondary)' }}>\n\t\t\t\t\t\t\t\t\t\tYou get\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className=\"font-medium text-[14px]\" style={{ color: 'var(--t-text)' }}>\n\t\t\t\t\t\t\t\t\t\t{cryptoCurrency} {displayAmount}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t)}\n\n\t\t\t\t{/* Unavailable gateways info */}\n\t\t\t\t{!quotesLoading && quotes?.unavailableGateways && quotes.unavailableGateways.length > 0 && (\n\t\t\t\t\t<div className=\"pt-3\">\n\t\t\t\t\t\t{quotes.unavailableGateways.map((g) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={g.gatewayId}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-between py-2 text-[12px]\"\n\t\t\t\t\t\t\t\tstyle={{ color: 'var(--t-text-muted)' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span>{g.gatewayName}</span>\n\t\t\t\t\t\t\t\t<span>{g.reason}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],"names":["useRampConfig","config","orderType","data","setData","useState","loading","setLoading","error","setError","apiRef","useRef","RampApi","fetchConfig","useCallback","result","err","useEffect","useQuotes","params","configKeyRef","configKey","fetchIdRef","id","refetch","useCheckoutIntent","order","setOrder","createOrder","reset","useTransaction","transactionId","options","status","setStatus","fetchStatus","delay","timer","interval","normalizeAmount","value","maxDecimals","dotIndex","initialState","rampReducer","state","action","RampContext","createContext","RampProvider","projectId","apiUrl","assetBaseUrl","flowType","customerId","defaultFiatCurrency","defaultCryptoCurrency","defaultNetworkProp","defaultFiatAmount","defaultCryptoAmount","defaultWalletAddress","defaultGateway","fieldLocks","statusPollInterval","onComplete","onError","children","apiConfig","useMemo","defaultNetwork","initialIsSell","hasAmount","initialStep","dispatch","useReducer","isSell","configLoading","configError","React","crypto","_a","c","defaultNet","_b","n","_c","amountError","amount","fiat","f","min","max","quoteParams","quotes","quotesLoading","quotesError","fetchQuotes","orderLoading","orderError","createOrderApi","CHECKOUT_POLL_INITIAL_DELAY","orderStatus","orderStatusLoading","effectiveDefaultGateway","gatewayRef","quotesRef","gateway","missing","message","goToStep","step","goBack","stepOrder","currentIndex","canProceed","jsx","useRamp","context","useContext","CheckoutStep","className","iframeHeight","autoRedirect","redirectDelay","iframeLoaded","setIframeLoaded","redirectCountdown","setRedirectCountdown","isExpired","countdownInterval","prev","jsxs","widgetUrl","buildWidgetUrl","baseUrl","url","key","ProcessingStep","getStatusMessage","DetailRow","label","mono","CompleteStep","explorerUrl","onDone","doneButtonText","getExplorerUrl","defaultExplorers","handleDone","explorerLink","highlight","ErrorStep","onRetry","supportEmail","getErrorTitle","getErrorMessage","handleRetry","handleStartOver","truncateAddress","address","ConfirmStep","gatewayInfo","handleConfirm","Fragment","Modal","isOpen","onClose","mounted","setMounted","animating","setAnimating","t","handleClose","AnimatedDigit","char","height","digits","idx","d","AnimatedNumber","style","ch","Skeleton","w","h","FormSkeleton","BLOCKCHAINS","CRYPTO_CURRENCIES","FIAT_TO_COUNTRY","getCryptoIconUrl","ticker","getFiatFlagUrl","currencyCode","country","getChainIconUrl","chainCode","chain","FIAT_CURRENCIES","SKINS","MOCK_RATES","getMockRate","parseAmount","str","formatOutput","num","s","isValidHex","MIN_FIAT_AMOUNT","MIN_CRYPTO_AMOUNT","CRYPTO_CHAIN_COMBOS","list","CryptoIcon","size","FiatFlag","GenericCoinIcon","color","BankIcon","RevolutIcon","ApplePayIcon","GooglePayIcon","PayPalIcon","CardIcon","CoinifyIcon","ChevronDown","ChevronRight","MenuIcon","onClick","DarkModeIcon","getPaymentIcon","type","CloseButton","e","SearchInput","onChange","placeholder","FiatCurrencyModal","onSelect","currencies","search","setSearch","currencyList","staticMap","filtered","raw","CryptoCurrencyModal","cryptos","comboList","networks","net","terms","scored","chainName","chainShort","code","name","fields","score","a","b","ToggleSwitch","checked","accentColor","SETTINGS_LINKS","SettingsScreen","darkMode","onToggleDarkMode","_skinId","_onSelectSkin","item","InnerForm","theme","skinIdProp","accentColorProp","bgColorProp","bgImageProp","borderColorProp","borderRadiusProp","showFlowToggle","setDarkMode","skinId","setSkinId","modal","setModal","amountTouched","setAmountTouched","walletTouched","setWalletTouched","walletValidating","setWalletValidating","walletServerValid","setWalletServerValid","switching","setSwitching","autoSelectPending","setAutoSelectPending","inputRef","walletValidationTimer","prevTabRef","tab","isBuy","cryptoCode","fiatCode","spendAmount","spendNumeric","quoteRate","lastRateRef","receiveAmount","amt","displayRate","r","cc","fc","addr","network","msg","amountIsEmpty","amountBelowMin","hasAmountError","isAmountValid","isWalletValid","isFormValid","handleAmountChange","handleTabSwitch","newTab","handleFiatSelect","handleCryptoSelect","handleCtaClick","reasons","g","themeClass","activeSkin","isMono","accentStyle","backgroundStyle","borderStyle","postFormStep","chainInfo","chainDisplay","_d","_e","_f","_g","close","v","RampForm","bgColor","bgImage","borderColor","borderRadius","CheckoutForm","_submitButtonText","_rateRefreshInterval","props","SkinSwatch","skin","active","dimmed","QuoteTag","quote","ProviderIcon","LoadingSkeletons","i","ChooseRampModal","cryptoCurrency","filteredQuotes","q","isBest","displayAmount"],"mappings":"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"}