From 5f4d9e343b8a7b6ec696b887e3618c89c4e59969 Mon Sep 17 00:00:00 2001 From: cole nguyen Date: Mon, 27 Apr 2026 23:40:51 +0700 Subject: [PATCH 1/3] init --- src/problem1/p1.js | 67 + src/problem2/fancy-form/.gitignore | 24 + src/problem2/fancy-form/.prettierrc | 10 + src/problem2/fancy-form/README.md | 73 + src/problem2/fancy-form/components.json | 25 + src/problem2/fancy-form/eslint.config.js | 36 + src/problem2/fancy-form/index.html | 14 + src/problem2/fancy-form/package-lock.json | 3433 +++++++++++++++++ src/problem2/fancy-form/package.json | 45 + src/problem2/fancy-form/public/favicon.svg | 1 + src/problem2/fancy-form/public/icons.svg | 24 + src/problem2/fancy-form/src/App.css | 184 + src/problem2/fancy-form/src/App.tsx | 41 + src/problem2/fancy-form/src/api/client.ts | 33 + src/problem2/fancy-form/src/api/mockData.ts | 44 + src/problem2/fancy-form/src/api/prices.ts | 19 + src/problem2/fancy-form/src/assets/hero.png | Bin 0 -> 13057 bytes src/problem2/fancy-form/src/assets/react.svg | 1 + .../src/assets/token-icon/1INCH.svg | 17 + .../fancy-form/src/assets/token-icon/AAVE.svg | 4 + .../fancy-form/src/assets/token-icon/ACT.svg | 15 + .../fancy-form/src/assets/token-icon/ADA.svg | 4 + .../fancy-form/src/assets/token-icon/AEVO.svg | 12 + .../fancy-form/src/assets/token-icon/AGI.svg | 6 + .../src/assets/token-icon/AI16Z.svg | 19 + .../src/assets/token-icon/AIXBT.svg | 19 + .../fancy-form/src/assets/token-icon/AKRO.svg | 10 + .../fancy-form/src/assets/token-icon/AKT.svg | 5 + .../fancy-form/src/assets/token-icon/ALGO.svg | 4 + .../src/assets/token-icon/ALPHA.svg | 20 + .../fancy-form/src/assets/token-icon/ALT.svg | 15 + .../fancy-form/src/assets/token-icon/AMP.svg | 5 + .../fancy-form/src/assets/token-icon/ANC.svg | 6 + .../fancy-form/src/assets/token-icon/ANDR.svg | 48 + .../src/assets/token-icon/ANIME.svg | 97 + .../fancy-form/src/assets/token-icon/ANKR.svg | 4 + .../fancy-form/src/assets/token-icon/ANT.svg | 20 + .../fancy-form/src/assets/token-icon/ANY.svg | 10 + .../fancy-form/src/assets/token-icon/APE.svg | 14 + .../src/assets/token-icon/APOLLO.svg | 21 + .../fancy-form/src/assets/token-icon/APT.svg | 11 + .../fancy-form/src/assets/token-icon/AR.svg | 5 + .../fancy-form/src/assets/token-icon/ARB.svg | 16 + .../fancy-form/src/assets/token-icon/ARCH.svg | 11 + .../fancy-form/src/assets/token-icon/ASA.svg | 4 + .../src/assets/token-icon/ASTRO.svg | 12 + .../src/assets/token-icon/ATOM-dATOM.svg | 20 + .../fancy-form/src/assets/token-icon/ATOM.svg | 9 + .../src/assets/token-icon/AUDIO.svg | 10 + .../fancy-form/src/assets/token-icon/AUT.svg | 208 + .../fancy-form/src/assets/token-icon/AVA.svg | 10 + .../src/assets/token-icon/AVAIL.svg | 200 + .../fancy-form/src/assets/token-icon/AVAX.svg | 4 + .../fancy-form/src/assets/token-icon/AXL.svg | 4 + .../fancy-form/src/assets/token-icon/AXS.svg | 4 + .../fancy-form/src/assets/token-icon/AXT.svg | 71 + .../fancy-form/src/assets/token-icon/BAKE.svg | 16 + .../fancy-form/src/assets/token-icon/BAL.svg | 6 + .../fancy-form/src/assets/token-icon/BAND.svg | 4 + .../fancy-form/src/assets/token-icon/BAT.svg | 4 + .../fancy-form/src/assets/token-icon/BCD.svg | 4 + .../fancy-form/src/assets/token-icon/BCH.svg | 4 + .../fancy-form/src/assets/token-icon/BCHA.svg | 5 + .../fancy-form/src/assets/token-icon/BCN.svg | 4 + .../fancy-form/src/assets/token-icon/BCNA.svg | 6 + .../fancy-form/src/assets/token-icon/BELT.svg | 1 + .../fancy-form/src/assets/token-icon/BERA.svg | 11 + .../fancy-form/src/assets/token-icon/BETH.svg | 21 + .../fancy-form/src/assets/token-icon/BHC.svg | 4 + .../fancy-form/src/assets/token-icon/BIT.svg | 4 + .../src/assets/token-icon/BLAST.svg | 11 + .../fancy-form/src/assets/token-icon/BLD.svg | 19 + .../fancy-form/src/assets/token-icon/BLOX.svg | 23 + .../fancy-form/src/assets/token-icon/BLUR.svg | 19 + .../fancy-form/src/assets/token-icon/BNB.svg | 4 + .../fancy-form/src/assets/token-icon/BNT.svg | 4 + .../fancy-form/src/assets/token-icon/BOLT.svg | 21 + .../fancy-form/src/assets/token-icon/BONK.svg | 424 ++ .../fancy-form/src/assets/token-icon/BOOT.svg | 10 + .../src/assets/token-icon/BRAINS.svg | 11 + .../src/assets/token-icon/BRETT.svg | 34 + .../fancy-form/src/assets/token-icon/BRKL.svg | 276 ++ .../fancy-form/src/assets/token-icon/BTC.svg | 5 + .../src/assets/token-icon/BTCST.svg | 4 + .../fancy-form/src/assets/token-icon/BTG.svg | 4 + .../fancy-form/src/assets/token-icon/BTM.svg | 7 + .../fancy-form/src/assets/token-icon/BTMX.svg | 5 + .../fancy-form/src/assets/token-icon/BTSG.svg | 4 + .../fancy-form/src/assets/token-icon/BTT.svg | 7 + .../src/assets/token-icon/BUNNY.svg | 4 + .../fancy-form/src/assets/token-icon/BUSD.svg | 8 + .../src/assets/token-icon/BUSDT.svg | 5 + .../fancy-form/src/assets/token-icon/C98.svg | 7 + .../fancy-form/src/assets/token-icon/CAKE.svg | 8 + .../src/assets/token-icon/CANTO.svg | 11 + .../fancy-form/src/assets/token-icon/CARB.svg | 11 + .../fancy-form/src/assets/token-icon/CAT.svg | 65 + .../fancy-form/src/assets/token-icon/CEL.svg | 11 + .../fancy-form/src/assets/token-icon/CELO.svg | 4 + .../fancy-form/src/assets/token-icon/CETH.svg | 17 + .../fancy-form/src/assets/token-icon/CFX.svg | 5 + .../fancy-form/src/assets/token-icon/CGAS.svg | 4 + .../fancy-form/src/assets/token-icon/CHEQ.svg | 34 + .../fancy-form/src/assets/token-icon/CHOG.svg | 20 + .../fancy-form/src/assets/token-icon/CHSB.svg | 10 + .../fancy-form/src/assets/token-icon/CHT.svg | 54 + .../fancy-form/src/assets/token-icon/CHZ.svg | 4 + .../fancy-form/src/assets/token-icon/CKB.svg | 5 + .../fancy-form/src/assets/token-icon/CMDX.svg | 4 + .../fancy-form/src/assets/token-icon/CMST.svg | 13 + .../fancy-form/src/assets/token-icon/CNT.svg | 110 + .../fancy-form/src/assets/token-icon/COIN.svg | 4 + .../fancy-form/src/assets/token-icon/COMP.svg | 4 + .../fancy-form/src/assets/token-icon/COOK.svg | 40 + .../src/assets/token-icon/CRBRUS.svg | 88 + .../fancy-form/src/assets/token-icon/CRE.svg | 42 + .../fancy-form/src/assets/token-icon/CRO.svg | 8 + .../fancy-form/src/assets/token-icon/CRV.svg | 790 ++++ .../fancy-form/src/assets/token-icon/CTK.svg | 7 + .../fancy-form/src/assets/token-icon/CW.svg | 13 + .../fancy-form/src/assets/token-icon/DAG.svg | 10 + .../fancy-form/src/assets/token-icon/DAI.svg | 4 + .../fancy-form/src/assets/token-icon/DAK.svg | 20 + .../fancy-form/src/assets/token-icon/DARC.svg | 9 + .../fancy-form/src/assets/token-icon/DASH.svg | 5 + .../fancy-form/src/assets/token-icon/DBC.svg | 4 + .../fancy-form/src/assets/token-icon/DCR.svg | 11 + .../fancy-form/src/assets/token-icon/DEC.svg | 38 + .../src/assets/token-icon/DEGEN.svg | 12 + .../fancy-form/src/assets/token-icon/DENT.svg | 15 + .../fancy-form/src/assets/token-icon/DGB.svg | 4 + .../fancy-form/src/assets/token-icon/DIG.svg | 54 + .../fancy-form/src/assets/token-icon/DKT.svg | 65 + .../fancy-form/src/assets/token-icon/DODO.svg | 6 + .../fancy-form/src/assets/token-icon/DOGE.svg | 124 + .../fancy-form/src/assets/token-icon/DOT.svg | 5 + .../fancy-form/src/assets/token-icon/DPL.svg | 16 + .../fancy-form/src/assets/token-icon/DPX.svg | 15 + .../fancy-form/src/assets/token-icon/DRFT.svg | 83 + .../fancy-form/src/assets/token-icon/DROP.svg | 13 + .../fancy-form/src/assets/token-icon/DSM.svg | 4 + .../fancy-form/src/assets/token-icon/DUVT.svg | 24 + .../fancy-form/src/assets/token-icon/DVPN.svg | 5 + .../fancy-form/src/assets/token-icon/DYDX.svg | 20 + .../fancy-form/src/assets/token-icon/DYM.svg | 11 + .../fancy-form/src/assets/token-icon/EEUR.svg | 16 + .../fancy-form/src/assets/token-icon/EGLD.svg | 36 + .../src/assets/token-icon/EIGEN.svg | 4 + .../fancy-form/src/assets/token-icon/ELA.svg | 5 + .../fancy-form/src/assets/token-icon/ELF.svg | 4 + .../fancy-form/src/assets/token-icon/ENA.svg | 21 + .../fancy-form/src/assets/token-icon/ENJ.svg | 63 + .../fancy-form/src/assets/token-icon/ENS.svg | 10 + .../fancy-form/src/assets/token-icon/EOS.svg | 4 + .../fancy-form/src/assets/token-icon/EPS.svg | 25 + .../fancy-form/src/assets/token-icon/ETC.svg | 6 + .../fancy-form/src/assets/token-icon/ETH.svg | 9 + .../src/assets/token-icon/ETHBTC.svg | 10 + .../fancy-form/src/assets/token-icon/ETN.svg | 4 + .../src/assets/token-icon/EUROC.svg | 12 + .../fancy-form/src/assets/token-icon/EUT.svg | 208 + .../src/assets/token-icon/EVMOS.svg | 4 + .../fancy-form/src/assets/token-icon/EWT.svg | 5 + .../src/assets/token-icon/FARTCOIN.svg | 158 + .../fancy-form/src/assets/token-icon/FBTC.svg | 29 + .../fancy-form/src/assets/token-icon/FEES.svg | 10 + .../fancy-form/src/assets/token-icon/FET.svg | 19 + .../fancy-form/src/assets/token-icon/FIL.svg | 4 + .../fancy-form/src/assets/token-icon/FIS.svg | 20 + .../fancy-form/src/assets/token-icon/FLIX.svg | 37 + .../fancy-form/src/assets/token-icon/FLM.svg | 13 + .../fancy-form/src/assets/token-icon/FLOW.svg | 5 + .../src/assets/token-icon/FLUID.svg | 53 + .../fancy-form/src/assets/token-icon/FLUO.svg | 11 + .../src/assets/token-icon/FRANK.svg | 268 ++ .../src/assets/token-icon/FSGLP.svg | 15 + .../fancy-form/src/assets/token-icon/FTM.svg | 4 + .../fancy-form/src/assets/token-icon/FTT.svg | 7 + .../fancy-form/src/assets/token-icon/FTTC.svg | 7 + .../fancy-form/src/assets/token-icon/FUN.svg | 4 + .../fancy-form/src/assets/token-icon/GALA.svg | 6 + .../src/assets/token-icon/GAMBIT.svg | 24 + .../fancy-form/src/assets/token-icon/GAS.svg | 4 + .../fancy-form/src/assets/token-icon/GBT.svg | 212 + .../fancy-form/src/assets/token-icon/GLP.svg | 15 + .../fancy-form/src/assets/token-icon/GM.svg | 7 + .../fancy-form/src/assets/token-icon/GMX.svg | 15 + .../fancy-form/src/assets/token-icon/GNO.svg | 7 + .../fancy-form/src/assets/token-icon/GNS.svg | 34 + .../fancy-form/src/assets/token-icon/GOAT.svg | 2174 +++++++++++ .../src/assets/token-icon/GRASS.svg | 4 + .../fancy-form/src/assets/token-icon/GRAV.svg | 44 + .../fancy-form/src/assets/token-icon/GRT.svg | 4 + .../fancy-form/src/assets/token-icon/GT.svg | 4 + .../fancy-form/src/assets/token-icon/HBAR.svg | 4 + .../fancy-form/src/assets/token-icon/HDN.png | Bin 0 -> 20649 bytes .../fancy-form/src/assets/token-icon/HDN.svg | 9 + .../src/assets/token-icon/HELMET.svg | 9 + .../fancy-form/src/assets/token-icon/HKT.svg | 45 + .../fancy-form/src/assets/token-icon/HNT.svg | 4 + .../fancy-form/src/assets/token-icon/HOPE.svg | 144 + .../fancy-form/src/assets/token-icon/HOT.svg | 4 + .../fancy-form/src/assets/token-icon/HT.svg | 5 + .../src/assets/token-icon/HUAHUA.svg | 22 + .../fancy-form/src/assets/token-icon/HUNY.svg | 1 + .../fancy-form/src/assets/token-icon/HUSD.svg | 6 + .../fancy-form/src/assets/token-icon/HYPE.svg | 4 + .../fancy-form/src/assets/token-icon/IBCX.svg | 14 + .../fancy-form/src/assets/token-icon/ICP.svg | 16 + .../fancy-form/src/assets/token-icon/ICX.svg | 7 + .../fancy-form/src/assets/token-icon/IDT.svg | 54 + .../fancy-form/src/assets/token-icon/INIT.svg | 11 + .../fancy-form/src/assets/token-icon/INJ.svg | 14 + .../fancy-form/src/assets/token-icon/INT.svg | 82 + .../fancy-form/src/assets/token-icon/ION.svg | 114 + .../fancy-form/src/assets/token-icon/IOST.svg | 4 + .../fancy-form/src/assets/token-icon/IOTX.svg | 26 + .../fancy-form/src/assets/token-icon/IOV.svg | 9 + .../fancy-form/src/assets/token-icon/IP.svg | 24 + .../fancy-form/src/assets/token-icon/IRIS.svg | 51 + .../fancy-form/src/assets/token-icon/IXO.svg | 4 + .../fancy-form/src/assets/token-icon/JPT.svg | 54 + .../fancy-form/src/assets/token-icon/JTO.svg | 6 + .../fancy-form/src/assets/token-icon/JUNO.svg | 6 + .../fancy-form/src/assets/token-icon/JUP.svg | 34 + .../src/assets/token-icon/KAITO.svg | 16 + .../fancy-form/src/assets/token-icon/KAS.svg | 3 + .../src/assets/token-icon/KBONK.svg | 424 ++ .../fancy-form/src/assets/token-icon/KCS.svg | 4 + .../src/assets/token-icon/KFLOKI.svg | 40 + .../fancy-form/src/assets/token-icon/KLAY.svg | 7 + .../fancy-form/src/assets/token-icon/KMD.svg | 15 + .../fancy-form/src/assets/token-icon/KNC.svg | 7 + .../src/assets/token-icon/KPEPE.svg | 28 + .../fancy-form/src/assets/token-icon/KRT.svg | 248 ++ .../src/assets/token-icon/KSHIB.svg | 17 + .../fancy-form/src/assets/token-icon/KSM.svg | 4 + .../fancy-form/src/assets/token-icon/KUJI.svg | 19 + .../src/assets/token-icon/LAYER.svg | 11 + .../fancy-form/src/assets/token-icon/LBTC.svg | 26 + .../fancy-form/src/assets/token-icon/LDO.svg | 12 + .../fancy-form/src/assets/token-icon/LEO.svg | 77 + .../fancy-form/src/assets/token-icon/LET.svg | 15 + .../fancy-form/src/assets/token-icon/LIKE.svg | 41 + .../fancy-form/src/assets/token-icon/LINK.svg | 4 + .../fancy-form/src/assets/token-icon/LKT.svg | 16 + .../fancy-form/src/assets/token-icon/LOOM.svg | 15 + .../fancy-form/src/assets/token-icon/LOOP.svg | 35 + .../fancy-form/src/assets/token-icon/LOTA.svg | 10 + .../assets/token-icon/LPLBTC_29MAY2025.svg | 35 + .../fancy-form/src/assets/token-icon/LPT.svg | 4 + .../token-icon/LPberaSTONE_10APR2025.svg | 29 + .../assets/token-icon/LPcmETH_26JUN2025.svg | 31 + .../fancy-form/src/assets/token-icon/LRC.svg | 4 + .../fancy-form/src/assets/token-icon/LSI.svg | 53 + .../fancy-form/src/assets/token-icon/LSK.svg | 4 + .../fancy-form/src/assets/token-icon/LTC.svg | 4 + .../fancy-form/src/assets/token-icon/LUM.svg | 12 + .../fancy-form/src/assets/token-icon/LUNA.svg | 15 + .../src/assets/token-icon/LUNAX.svg | 10 + .../fancy-form/src/assets/token-icon/LUNC.svg | 6 + .../fancy-form/src/assets/token-icon/LUNI.svg | 29 + .../fancy-form/src/assets/token-icon/LUNR.svg | 4 + .../fancy-form/src/assets/token-icon/LUV.svg | 49 + .../fancy-form/src/assets/token-icon/LVN.svg | 11 + .../token-icon/Liquid Staking Index.svg | 29 + .../fancy-form/src/assets/token-icon/M87.svg | 11 + .../fancy-form/src/assets/token-icon/MANA.svg | 26 + .../src/assets/token-icon/MANTA.svg | 25 + .../src/assets/token-icon/MARBLE.svg | 8 + .../fancy-form/src/assets/token-icon/MATH.svg | 4 + .../src/assets/token-icon/MATIC.svg | 10 + .../fancy-form/src/assets/token-icon/MDX.svg | 5 + .../fancy-form/src/assets/token-icon/ME.svg | 11 + .../fancy-form/src/assets/token-icon/MED.svg | 8 + .../fancy-form/src/assets/token-icon/MEME.svg | 13 + .../src/assets/token-icon/METIS.svg | 11 + .../fancy-form/src/assets/token-icon/MEW.svg | 25 + .../fancy-form/src/assets/token-icon/MIAW.svg | 7 + .../fancy-form/src/assets/token-icon/MILK.svg | 12 + .../fancy-form/src/assets/token-icon/MINA.svg | 4 + .../fancy-form/src/assets/token-icon/MINE.svg | 11 + .../src/assets/token-icon/MIOTA.svg | 4 + .../fancy-form/src/assets/token-icon/MIR.svg | 4 + .../fancy-form/src/assets/token-icon/MKR.svg | 10 + .../fancy-form/src/assets/token-icon/MMOG.svg | 20 + .../fancy-form/src/assets/token-icon/MNT.svg | 4 + .../fancy-form/src/assets/token-icon/MNTA.svg | 18 + .../fancy-form/src/assets/token-icon/MNTL.svg | 17 + .../fancy-form/src/assets/token-icon/MON.svg | 11 + .../src/assets/token-icon/MOODENG.svg | 15 + .../src/assets/token-icon/MORPHO.svg | 14 + .../fancy-form/src/assets/token-icon/MYT.svg | 171 + .../fancy-form/src/assets/token-icon/NANO.svg | 6 + .../fancy-form/src/assets/token-icon/NAS.svg | 4 + .../fancy-form/src/assets/token-icon/NAT.svg | 8 + .../fancy-form/src/assets/token-icon/NEAR.svg | 4 + .../src/assets/token-icon/NEIROETH.svg | 15 + .../fancy-form/src/assets/token-icon/NEO.svg | 6 + .../fancy-form/src/assets/token-icon/NETA.svg | 6 + .../fancy-form/src/assets/token-icon/NEX.svg | 5 + .../fancy-form/src/assets/token-icon/NEXO.svg | 9 + .../fancy-form/src/assets/token-icon/NGM.svg | 6 + .../fancy-form/src/assets/token-icon/NIM.svg | 23 + .../fancy-form/src/assets/token-icon/NKN.svg | 22 + .../fancy-form/src/assets/token-icon/NMR.svg | 5 + .../fancy-form/src/assets/token-icon/NOT.svg | 11 + .../fancy-form/src/assets/token-icon/NOTE.svg | 17 + .../src/assets/token-icon/NTRN-dATOM.svg | 21 + .../fancy-form/src/assets/token-icon/NTRN.svg | 12 + .../fancy-form/src/assets/token-icon/NXM.svg | 8 + .../src/assets/token-icon/OCEAN.svg | 4 + .../fancy-form/src/assets/token-icon/OCH.svg | 15 + .../fancy-form/src/assets/token-icon/OGN.svg | 4 + .../fancy-form/src/assets/token-icon/OKB.svg | 15 + .../fancy-form/src/assets/token-icon/OKT.svg | 15 + .../fancy-form/src/assets/token-icon/OM.svg | 15 + .../fancy-form/src/assets/token-icon/OMG.svg | 7 + .../src/assets/token-icon/OMG_2.svg | 4 + .../fancy-form/src/assets/token-icon/OMI.svg | 18 + .../fancy-form/src/assets/token-icon/OMNI.svg | 11 + .../fancy-form/src/assets/token-icon/ONDO.svg | 11 + .../fancy-form/src/assets/token-icon/ONE.svg | 10 + .../fancy-form/src/assets/token-icon/ONT.svg | 4 + .../fancy-form/src/assets/token-icon/OP.svg | 12 + .../fancy-form/src/assets/token-icon/OPUL.svg | 7 + .../fancy-form/src/assets/token-icon/ORDI.svg | 11 + .../src/assets/token-icon/ORION.svg | 8 + .../fancy-form/src/assets/token-icon/ORNE.svg | 6 + .../fancy-form/src/assets/token-icon/OSMO.svg | 121 + .../fancy-form/src/assets/token-icon/OXT.svg | 7 + .../fancy-form/src/assets/token-icon/OXY.svg | 22 + .../fancy-form/src/assets/token-icon/PAX.svg | 11 + .../fancy-form/src/assets/token-icon/PAXG.svg | 22 + .../src/assets/token-icon/PENDLE.svg | 17 + .../src/assets/token-icon/PENGU.svg | 15 + .../fancy-form/src/assets/token-icon/PEPE.svg | 28 + .../fancy-form/src/assets/token-icon/PHT.svg | 124 + .../fancy-form/src/assets/token-icon/PLAY.svg | 23 + .../fancy-form/src/assets/token-icon/PLQ.svg | 15 + .../fancy-form/src/assets/token-icon/PLY.svg | 42 + .../fancy-form/src/assets/token-icon/PNUT.svg | 15 + .../fancy-form/src/assets/token-icon/POL.svg | 19 + .../fancy-form/src/assets/token-icon/POLY.svg | 55 + .../src/assets/token-icon/POPCAT.svg | 10 + .../fancy-form/src/assets/token-icon/PORT.svg | 4 + .../fancy-form/src/assets/token-icon/PROM.svg | 5 + .../fancy-form/src/assets/token-icon/PSI.svg | 4 + .../src/assets/token-icon/PSTAKE.svg | 5 + .../assets/token-icon/PTLBTC_29MAY2025.svg | 27 + .../assets/token-icon/PTMETH_26DEC2024.svg | 30 + .../token-icon/PTberaSTONE_10APR2025.svg | 21 + .../assets/token-icon/PTcmETH_26JUN2025.svg | 23 + .../src/assets/token-icon/PUDGY.svg | 23 + .../fancy-form/src/assets/token-icon/PUMP.svg | 67 + .../src/assets/token-icon/PUNDIX.svg | 4 + .../fancy-form/src/assets/token-icon/PURR.svg | 62 + .../src/assets/token-icon/PURSE.svg | 22 + .../fancy-form/src/assets/token-icon/PYTH.svg | 12 + .../fancy-form/src/assets/token-icon/QCK.svg | 80 + .../fancy-form/src/assets/token-icon/QKC.svg | 10 + .../fancy-form/src/assets/token-icon/QNT.svg | 10 + .../fancy-form/src/assets/token-icon/QTUM.svg | 4 + .../fancy-form/src/assets/token-icon/RAY.svg | 14 + .../fancy-form/src/assets/token-icon/RBN.svg | 4 + .../fancy-form/src/assets/token-icon/REEF.svg | 10 + .../src/assets/token-icon/REGEN.svg | 24 + .../fancy-form/src/assets/token-icon/REN.svg | 16 + .../fancy-form/src/assets/token-icon/REP.svg | 5 + .../fancy-form/src/assets/token-icon/REV.svg | 12 + .../fancy-form/src/assets/token-icon/RLB.svg | 11 + .../fancy-form/src/assets/token-icon/RLC.svg | 4 + .../fancy-form/src/assets/token-icon/RNDR.svg | 11 + .../fancy-form/src/assets/token-icon/ROAR.svg | 18 + .../src/assets/token-icon/ROWAN.svg | 11 + .../fancy-form/src/assets/token-icon/RSR.svg | 4 + .../fancy-form/src/assets/token-icon/RUNE.svg | 10 + .../fancy-form/src/assets/token-icon/RVN.svg | 6 + .../fancy-form/src/assets/token-icon/S.svg | 4 + .../src/assets/token-icon/SAFEMOON.svg | 27 + .../fancy-form/src/assets/token-icon/SAGA.svg | 12 + .../fancy-form/src/assets/token-icon/SAND.svg | 10 + .../src/assets/token-icon/SAYVE.svg | 5 + .../fancy-form/src/assets/token-icon/SC.svg | 4 + .../fancy-form/src/assets/token-icon/SCRT.svg | 5 + .../fancy-form/src/assets/token-icon/SDT.svg | 48 + .../fancy-form/src/assets/token-icon/SEI.svg | 14 + .../fancy-form/src/assets/token-icon/SET.svg | 65 + .../fancy-form/src/assets/token-icon/SGT.svg | 138 + .../fancy-form/src/assets/token-icon/SHD.svg | 34 + .../fancy-form/src/assets/token-icon/SHIB.svg | 17 + .../src/assets/token-icon/SHIDO.svg | 20 + .../fancy-form/src/assets/token-icon/SITY.svg | 8 + .../src/assets/token-icon/SLERF.svg | 24 + .../fancy-form/src/assets/token-icon/SNT.svg | 4 + .../fancy-form/src/assets/token-icon/SNX.svg | 10 + .../fancy-form/src/assets/token-icon/SOL.svg | 12 + .../src/assets/token-icon/SOLETH.svg | 12 + .../fancy-form/src/assets/token-icon/SOM.svg | 10 + .../fancy-form/src/assets/token-icon/SOMM.svg | 65 + .../fancy-form/src/assets/token-icon/SPEC.svg | 4 + .../fancy-form/src/assets/token-icon/SRM.svg | 20 + .../fancy-form/src/assets/token-icon/SRV.svg | 5 + .../src/assets/token-icon/STARS.svg | 16 + .../src/assets/token-icon/STEEM.svg | 6 + .../fancy-form/src/assets/token-icon/STMX.svg | 4 + .../src/assets/token-icon/STORJ.svg | 13 + .../src/assets/token-icon/STRAX.svg | 12 + .../fancy-form/src/assets/token-icon/STRD.svg | 4 + .../src/assets/token-icon/STREAM.svg | 4 + .../fancy-form/src/assets/token-icon/STRK.svg | 13 + .../fancy-form/src/assets/token-icon/STT.svg | 4 + .../fancy-form/src/assets/token-icon/STX.svg | 4 + .../fancy-form/src/assets/token-icon/SUI.svg | 11 + .../fancy-form/src/assets/token-icon/SUN.svg | 60 + .../src/assets/token-icon/SUSHI.svg | 26 + .../src/assets/token-icon/SWTH-LEGACY.svg | 4 + .../fancy-form/src/assets/token-icon/SWTH.svg | 71 + .../fancy-form/src/assets/token-icon/SXP.svg | 10 + .../fancy-form/src/assets/token-icon/TAO.svg | 4 + .../fancy-form/src/assets/token-icon/TEL.svg | 4 + .../src/assets/token-icon/TFUEL.svg | 11 + .../src/assets/token-icon/THETA.svg | 13 + .../fancy-form/src/assets/token-icon/THT.svg | 68 + .../fancy-form/src/assets/token-icon/TIA.svg | 11 + .../fancy-form/src/assets/token-icon/TICK.svg | 17 + .../src/assets/token-icon/TITAN.svg | 11 + .../src/assets/token-icon/TLAND.svg | 5 + .../fancy-form/src/assets/token-icon/TLM.svg | 16 + .../fancy-form/src/assets/token-icon/TOMO.svg | 6 + .../fancy-form/src/assets/token-icon/TON.svg | 11 + .../fancy-form/src/assets/token-icon/TPC.svg | 17 + .../src/assets/token-icon/TRAXX.svg | 14 + .../fancy-form/src/assets/token-icon/TRB.svg | 11 + .../fancy-form/src/assets/token-icon/TRU.svg | 6 + .../src/assets/token-icon/TRUMP.svg | 20 + .../fancy-form/src/assets/token-icon/TRX.svg | 4 + .../fancy-form/src/assets/token-icon/TTT.svg | 6 + .../fancy-form/src/assets/token-icon/TUSD.svg | 6 + .../fancy-form/src/assets/token-icon/TWD.svg | 18 + .../fancy-form/src/assets/token-icon/TWT.svg | 77 + .../src/assets/token-icon/Token.svg | 15 + .../fancy-form/src/assets/token-icon/UBQ.svg | 7 + .../fancy-form/src/assets/token-icon/UMEE.svg | 39 + .../fancy-form/src/assets/token-icon/UNA.svg | 7 + .../fancy-form/src/assets/token-icon/UNI.svg | 15 + .../fancy-form/src/assets/token-icon/UOS.svg | 5 + .../src/assets/token-icon/USC-Minted.svg | 37 + .../fancy-form/src/assets/token-icon/USC.svg | 37 + .../fancy-form/src/assets/token-icon/USD.svg | 8 + .../src/assets/token-icon/USDC-dATOM.svg | 17 + .../src/assets/token-icon/USDC.e.svg | 6 + .../src/assets/token-icon/USDC.grv.svg | 14 + .../fancy-form/src/assets/token-icon/USDC.svg | 6 + .../fancy-form/src/assets/token-icon/USDP.svg | 12 + .../fancy-form/src/assets/token-icon/USDT.svg | 5 + .../fancy-form/src/assets/token-icon/USDY.svg | 11 + .../fancy-form/src/assets/token-icon/USK.svg | 19 + .../fancy-form/src/assets/token-icon/UST.svg | 5 + .../src/assets/token-icon/USUAL.svg | 48 + .../fancy-form/src/assets/token-icon/VDL.svg | 6 + .../fancy-form/src/assets/token-icon/VET.svg | 4 + .../src/assets/token-icon/VIRTUAL.svg | 24 + .../fancy-form/src/assets/token-icon/VKR.svg | 4 + .../fancy-form/src/assets/token-icon/VRTX.svg | 22 + .../fancy-form/src/assets/token-icon/W.svg | 11 + .../fancy-form/src/assets/token-icon/WAL.svg | 11 + .../src/assets/token-icon/WAVAX.svg | 4 + .../fancy-form/src/assets/token-icon/WAVE.svg | 4 + .../fancy-form/src/assets/token-icon/WBNB.svg | 4 + .../fancy-form/src/assets/token-icon/WBTC.svg | 9 + .../fancy-form/src/assets/token-icon/WETH.svg | 17 + .../src/assets/token-icon/WHALE.svg | 10 + .../fancy-form/src/assets/token-icon/WIF.svg | 23 + .../fancy-form/src/assets/token-icon/WIN.svg | 5 + .../fancy-form/src/assets/token-icon/WLD.svg | 11 + .../src/assets/token-icon/WMATIC.svg | 6 + .../fancy-form/src/assets/token-icon/WMNT.svg | 4 + .../fancy-form/src/assets/token-icon/WMON.png | Bin 0 -> 826 bytes .../fancy-form/src/assets/token-icon/WRX.svg | 7 + .../fancy-form/src/assets/token-icon/XCAD.svg | 12 + .../fancy-form/src/assets/token-icon/XDC.svg | 6 + .../fancy-form/src/assets/token-icon/XEM.svg | 4 + .../fancy-form/src/assets/token-icon/XKI.svg | 5 + .../fancy-form/src/assets/token-icon/XLM.svg | 5 + .../fancy-form/src/assets/token-icon/XMR.svg | 5 + .../fancy-form/src/assets/token-icon/XPRT.svg | 5 + .../fancy-form/src/assets/token-icon/XRP.svg | 4 + .../fancy-form/src/assets/token-icon/XSGD.svg | 11 + .../fancy-form/src/assets/token-icon/XTRA.svg | 9 + .../fancy-form/src/assets/token-icon/XTZ.svg | 4 + .../fancy-form/src/assets/token-icon/XVG.svg | 4 + .../fancy-form/src/assets/token-icon/XVS.svg | 11 + .../fancy-form/src/assets/token-icon/YAKI.svg | 20 + .../fancy-form/src/assets/token-icon/YAM.svg | 47 + .../fancy-form/src/assets/token-icon/YFI.svg | 6 + .../src/assets/token-icon/YieldUSD.svg | 17 + .../fancy-form/src/assets/token-icon/ZCH.svg | 6 + .../fancy-form/src/assets/token-icon/ZEC.svg | 10 + .../fancy-form/src/assets/token-icon/ZEN.svg | 20 + .../fancy-form/src/assets/token-icon/ZIL.svg | 7 + .../fancy-form/src/assets/token-icon/ZRO.svg | 12 + .../fancy-form/src/assets/token-icon/ZRX.svg | 7 + .../fancy-form/src/assets/token-icon/ZWAP.svg | 5 + .../src/assets/token-icon/ampKUJI.svg | 12 + .../src/assets/token-icon/ampLUNA.svg | 15 + .../src/assets/token-icon/axlUSDC.svg | 6 + .../fancy-form/src/assets/token-icon/bCFX.svg | 5 + .../fancy-form/src/assets/token-icon/bNEO.svg | 12 + .../src/assets/token-icon/beraSTONE.svg | 20 + .../fancy-form/src/assets/token-icon/cUSD.svg | 21 + .../src/assets/token-icon/cbBTC.svg | 5 + .../src/assets/token-icon/cbETH.svg | 10 + .../src/assets/token-icon/cmETH.svg | 22 + .../src/assets/token-icon/dATOM.svg | 13 + .../fancy-form/src/assets/token-icon/dGLP.svg | 20 + .../fancy-form/src/assets/token-icon/dINJ.svg | 20 + .../src/assets/token-icon/dXCAD.svg | 13 + .../src/assets/token-icon/eGLD(1).svg | 36 + .../src/assets/token-icon/ePLAY.svg | 23 + .../src/assets/token-icon/esFLUO.svg | 18 + .../fancy-form/src/assets/token-icon/gZIL.svg | 12 + .../fancy-form/src/assets/token-icon/iSEI.svg | 10 + .../fancy-form/src/assets/token-icon/iUSD.svg | 5 + .../fancy-form/src/assets/token-icon/mETH.svg | 24 + .../src/assets/token-icon/milkTIA.svg | 18 + .../src/assets/token-icon/nLEND.svg | 19 + .../fancy-form/src/assets/token-icon/nNEO.svg | 6 + .../src/assets/token-icon/rATOM.svg | 55 + .../src/assets/token-icon/rSWTH.svg | 88 + .../src/assets/token-icon/sARCH.svg | 11 + .../src/assets/token-icon/stATOM.svg | 22 + .../src/assets/token-icon/stDYDX.svg | 6 + .../src/assets/token-icon/stDYM.svg | 11 + .../src/assets/token-icon/stETH.svg | 18 + .../src/assets/token-icon/stEVMOS.svg | 16 + .../src/assets/token-icon/stFLUO.svg | 18 + .../src/assets/token-icon/stIBCX.svg | 4 + .../src/assets/token-icon/stINJ.svg | 4 + .../src/assets/token-icon/stJUNO.svg | 5 + .../src/assets/token-icon/stLUNA.svg | 9 + .../src/assets/token-icon/stOKT.svg | 8 + .../src/assets/token-icon/stOSMO.svg | 16 + .../src/assets/token-icon/stSAGA.svg | 5 + .../src/assets/token-icon/stSTARS.svg | 5 + .../src/assets/token-icon/stTIA.svg | 4 + .../src/assets/token-icon/stZIL.svg | 8 + .../src/assets/token-icon/stkATOM.svg | 20 + .../src/assets/token-icon/stkDYDX.svg | 22 + .../src/assets/token-icon/stkSTARS.svg | 15 + .../src/assets/token-icon/vZWAP.svg | 12 + .../src/assets/token-icon/veFLUO.svg | 18 + .../fancy-form/src/assets/token-icon/wKAS.svg | 5 + .../src/assets/token-icon/wstETH.svg | 11 + src/problem2/fancy-form/src/assets/vite.svg | 1 + .../src/components/layout/Background.tsx | 17 + .../src/components/layout/ThemeToggle.tsx | 20 + .../src/components/swap/SwapButton.tsx | 37 + .../src/components/swap/SwapCard.tsx | 146 + .../src/components/swap/SwapDetails.tsx | 102 + .../components/swap/SwapDirectionButton.tsx | 35 + .../src/components/swap/TokenInput.tsx | 111 + .../src/components/swap/TokenSelectModal.tsx | 169 + .../fancy-form/src/components/ui/Spinner.tsx | 20 + .../fancy-form/src/components/ui/button.tsx | 58 + .../fancy-form/src/components/ui/dialog.tsx | 158 + .../fancy-form/src/components/ui/input.tsx | 20 + .../fancy-form/src/components/ui/skeleton.tsx | 15 + .../fancy-form/src/context/ThemeContext.tsx | 49 + src/problem2/fancy-form/src/hooks/useSwap.ts | 193 + .../fancy-form/src/hooks/useTokenPrices.ts | 27 + src/problem2/fancy-form/src/index.css | 91 + src/problem2/fancy-form/src/lib/utils.ts | 6 + src/problem2/fancy-form/src/main.tsx | 10 + src/problem2/fancy-form/src/types/index.ts | 3 + src/problem2/fancy-form/src/types/swap.ts | 24 + src/problem2/fancy-form/src/types/token.ts | 14 + src/problem2/fancy-form/src/utils/format.ts | 77 + src/problem2/fancy-form/src/utils/token.ts | 79 + src/problem2/fancy-form/tsconfig.app.json | 28 + src/problem2/fancy-form/tsconfig.json | 13 + src/problem2/fancy-form/tsconfig.node.json | 24 + src/problem2/fancy-form/vite.config.ts | 14 + src/problem2/fancy-form/yarn.lock | 1531 ++++++++ src/problem2/index.html | 27 - src/problem2/script.js | 0 src/problem2/style.css | 8 - 587 files changed, 21667 insertions(+), 35 deletions(-) create mode 100644 src/problem1/p1.js create mode 100644 src/problem2/fancy-form/.gitignore create mode 100644 src/problem2/fancy-form/.prettierrc create mode 100644 src/problem2/fancy-form/README.md create mode 100644 src/problem2/fancy-form/components.json create mode 100644 src/problem2/fancy-form/eslint.config.js create mode 100644 src/problem2/fancy-form/index.html create mode 100644 src/problem2/fancy-form/package-lock.json create mode 100644 src/problem2/fancy-form/package.json create mode 100644 src/problem2/fancy-form/public/favicon.svg create mode 100644 src/problem2/fancy-form/public/icons.svg create mode 100644 src/problem2/fancy-form/src/App.css create mode 100644 src/problem2/fancy-form/src/App.tsx create mode 100644 src/problem2/fancy-form/src/api/client.ts create mode 100644 src/problem2/fancy-form/src/api/mockData.ts create mode 100644 src/problem2/fancy-form/src/api/prices.ts create mode 100644 src/problem2/fancy-form/src/assets/hero.png create mode 100644 src/problem2/fancy-form/src/assets/react.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/1INCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AAVE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ACT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ADA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AEVO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AGI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AI16Z.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AIXBT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AKRO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ALGO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ALPHA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ALT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AMP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANDR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANIME.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANKR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ANY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/APE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/APOLLO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/APT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ARB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ARCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ASA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ASTRO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ATOM-dATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AUDIO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AUT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AVA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AVAIL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AVAX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AXL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AXS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/AXT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BAKE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BAL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BAND.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BAT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BCD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BCHA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BCN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BCNA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BELT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BERA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BHC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BIT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BLAST.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BLD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BLOX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BLUR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BNB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BOLT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BONK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BOOT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BRAINS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BRETT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BRKL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTCST.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTMX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTSG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BTT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BUNNY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/BUSDT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/C98.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CAKE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CANTO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CARB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CAT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CEL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CELO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CFX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CGAS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CHEQ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CHOG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CHSB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CHT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CHZ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CKB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CMDX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CMST.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/COIN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/COMP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/COOK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CRBRUS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CRE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CRO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CRV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CTK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/CW.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DAG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DAI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DAK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DARC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DASH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DBC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DCR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DEC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DEGEN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DENT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DGB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DIG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DODO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DOGE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DOT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DPL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DPX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DRFT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DROP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DSM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DUVT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DVPN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DYDX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/DYM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EEUR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EGLD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EIGEN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ELA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ELF.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ENA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ENJ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ENS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EOS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EPS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ETC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ETHBTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ETN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EUROC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EUT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EVMOS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/EWT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FARTCOIN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FBTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FEES.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FET.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FIL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FIS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FLIX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FLM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FLOW.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FLUID.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FLUO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FRANK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FSGLP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FTM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FTT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FTTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/FUN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GALA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GAMBIT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GAS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GBT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GLP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GMX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GNO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GNS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GOAT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GRASS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GRAV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GRT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/GT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HBAR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HDN.png create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HDN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HELMET.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HOPE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HOT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HUAHUA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HUNY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/HYPE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IBCX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ICP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ICX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IDT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/INIT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/INJ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/INT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ION.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IOST.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IOTX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IOV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IRIS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/IXO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/JPT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/JTO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/JUNO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/JUP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KAITO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KAS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KBONK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KCS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KFLOKI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KLAY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KMD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KNC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KPEPE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KRT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KSHIB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KSM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/KUJI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LAYER.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LBTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LDO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LEO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LET.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LIKE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LINK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LOOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LOOP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LOTA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LPLBTC_29MAY2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LPT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LPberaSTONE_10APR2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LPcmETH_26JUN2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LRC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LSI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LSK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUNA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUNAX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUNC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUNI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUNR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LUV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/LVN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/Liquid Staking Index.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/M87.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MANA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MANTA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MARBLE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MATH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MATIC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MDX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ME.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MED.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MEME.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/METIS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MEW.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MIAW.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MILK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MINA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MINE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MIOTA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MIR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MKR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MMOG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MNTA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MNTL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MON.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MOODENG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MORPHO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/MYT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NANO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NAS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NAT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NEAR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NEIROETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NEO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NETA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NEX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NEXO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NGM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NIM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NKN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NMR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NOT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NOTE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NTRN-dATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NTRN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/NXM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OCEAN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OGN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OKB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OMG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OMG_2.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OMI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OMNI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ONDO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ONE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ONT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OPUL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ORDI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ORION.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ORNE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OSMO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OXT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/OXY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PAX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PAXG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PENDLE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PENGU.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PEPE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PHT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PLAY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PLQ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PLY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PNUT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/POL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/POLY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/POPCAT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PORT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PROM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PSI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PSTAKE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PTLBTC_29MAY2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PTMETH_26DEC2024.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PTberaSTONE_10APR2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PTcmETH_26JUN2025.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PUDGY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PUMP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PUNDIX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PURR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PURSE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/PYTH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/QCK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/QKC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/QNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/QTUM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RAY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RBN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/REEF.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/REGEN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/REN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/REP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/REV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RLB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RLC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RNDR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ROAR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ROWAN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RSR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RUNE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/RVN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/S.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SAFEMOON.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SAGA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SAND.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SAYVE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SCRT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SDT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SEI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SET.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SGT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SHD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SHIB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SHIDO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SITY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SLERF.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SNX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SOL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SOLETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SOMM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SPEC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SRM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SRV.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STARS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STEEM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STMX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STORJ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STRAX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STRD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STREAM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STRK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/STX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SUI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SUN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SUSHI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SWTH-LEGACY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SWTH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/SXP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TAO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TEL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TFUEL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/THETA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/THT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TIA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TICK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TITAN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TLAND.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TLM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TOMO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TON.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TPC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TRAXX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TRB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TRU.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TRUMP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TRX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TTT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TWD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/TWT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/Token.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UBQ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UMEE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UNA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UNI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UOS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USC-Minted.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDC-dATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDC.e.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDC.grv.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USDY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USK.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/UST.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/USUAL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/VDL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/VET.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/VIRTUAL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/VKR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/VRTX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/W.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WAL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WAVAX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WAVE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WBNB.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WBTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WHALE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WIF.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WIN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WLD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WMATIC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WMNT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WMON.png create mode 100644 src/problem2/fancy-form/src/assets/token-icon/WRX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XCAD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XDC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XEM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XKI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XLM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XMR.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XPRT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XRP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XSGD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XTRA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XTZ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XVG.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/XVS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/YAKI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/YAM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/YFI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/YieldUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZEC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZEN.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZIL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZRO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZRX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ZWAP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ampKUJI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ampLUNA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/axlUSDC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/bCFX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/bNEO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/beraSTONE.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/cUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/cbBTC.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/cbETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/cmETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/dATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/dGLP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/dINJ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/dXCAD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/eGLD(1).svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/ePLAY.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/esFLUO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/gZIL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/iSEI.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/iUSD.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/mETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/milkTIA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/nLEND.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/nNEO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/rATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/rSWTH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/sARCH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stDYDX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stDYM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stETH.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stEVMOS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stFLUO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stIBCX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stINJ.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stJUNO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stLUNA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stOKT.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stOSMO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stSAGA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stSTARS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stTIA.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stZIL.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stkATOM.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stkDYDX.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/stkSTARS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/vZWAP.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/veFLUO.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/wKAS.svg create mode 100644 src/problem2/fancy-form/src/assets/token-icon/wstETH.svg create mode 100644 src/problem2/fancy-form/src/assets/vite.svg create mode 100644 src/problem2/fancy-form/src/components/layout/Background.tsx create mode 100644 src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/SwapButton.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/SwapCard.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/SwapDetails.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/SwapDirectionButton.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/TokenInput.tsx create mode 100644 src/problem2/fancy-form/src/components/swap/TokenSelectModal.tsx create mode 100644 src/problem2/fancy-form/src/components/ui/Spinner.tsx create mode 100644 src/problem2/fancy-form/src/components/ui/button.tsx create mode 100644 src/problem2/fancy-form/src/components/ui/dialog.tsx create mode 100644 src/problem2/fancy-form/src/components/ui/input.tsx create mode 100644 src/problem2/fancy-form/src/components/ui/skeleton.tsx create mode 100644 src/problem2/fancy-form/src/context/ThemeContext.tsx create mode 100644 src/problem2/fancy-form/src/hooks/useSwap.ts create mode 100644 src/problem2/fancy-form/src/hooks/useTokenPrices.ts create mode 100644 src/problem2/fancy-form/src/index.css create mode 100644 src/problem2/fancy-form/src/lib/utils.ts create mode 100644 src/problem2/fancy-form/src/main.tsx create mode 100644 src/problem2/fancy-form/src/types/index.ts create mode 100644 src/problem2/fancy-form/src/types/swap.ts create mode 100644 src/problem2/fancy-form/src/types/token.ts create mode 100644 src/problem2/fancy-form/src/utils/format.ts create mode 100644 src/problem2/fancy-form/src/utils/token.ts create mode 100644 src/problem2/fancy-form/tsconfig.app.json create mode 100644 src/problem2/fancy-form/tsconfig.json create mode 100644 src/problem2/fancy-form/tsconfig.node.json create mode 100644 src/problem2/fancy-form/vite.config.ts create mode 100644 src/problem2/fancy-form/yarn.lock delete mode 100644 src/problem2/index.html delete mode 100644 src/problem2/script.js delete mode 100644 src/problem2/style.css diff --git a/src/problem1/p1.js b/src/problem1/p1.js new file mode 100644 index 0000000000..de9ed3f435 --- /dev/null +++ b/src/problem1/p1.js @@ -0,0 +1,67 @@ +// ==================== Task ==================== +// Provide 3 unique implementations of the following function in JavaScript. +// Input: n - any integer +// Output: return - summation to n, i.e. sum_to_n(5) === 1 + 2 + 3 + 4 + 5 === 15. + + +// Idea: Iterative approach. Uses a loop to add each number from 1 to n to an accumulator. +// Complexity: Time O(n), Space O(1) +var sum_to_n_a = function (n) { + let sum = 0; + for (var i = 1; i <= n; i++) { + sum += i; + } + return sum; +}; + +// Idea: Recursive approach. The sum to n is n plus the sum to n-1. +// Complexity: Time O(n), Space O(n) (due to call stack overhead) +var sum_to_n_b = function (n) { + if (n < 1) { + return 0; + } + return n + sum_to_n_b(n - 1); +}; + +// Idea: Mathematical formula (Arithmetic progression sum). Uses the formula n * (n + 1) / 2. +// Complexity: Time O(1), Space O(1) +var sum_to_n_c = function (n) { + return n * (n + 1) / 2; +}; + +function test() { + const testCases = [ + { input: 0, expected: 0 }, + { input: 1, expected: 1 }, + { input: 2, expected: 3 }, + { input: 5, expected: 15 }, + { input: 10, expected: 55 }, + { input: 42, expected: 903 }, + { input: 50, expected: 1275 }, + { input: 100, expected: 5050 }, + { input: 500, expected: 125250 }, + { input: 1000, expected: 500500 } + ]; + + console.log("Running 10 test cases for all 3 implementations:\n"); + + testCases.forEach(({ input: n, expected }, index) => { + const resA = sum_to_n_a(n); + const resB = sum_to_n_b(n); + const resC = sum_to_n_c(n); + + const passedA = resA === expected; + const passedB = resB === expected; + const passedC = resC === expected; + const allPassed = passedA && passedB && passedC; + + console.log(`Test ${index + 1} (input number 'n' = ${n}, expected result = ${expected}):`); + console.log(` sum_to_n_a: ${resA} (${passedA ? "PASS" : "FAIL"})`); + console.log(` sum_to_n_b: ${resB} (${passedB ? "PASS" : "FAIL"})`); + console.log(` sum_to_n_c: ${resC} (${passedC ? "PASS" : "FAIL"})`); + console.log(` Overall result status: ${allPassed ? "PASS" : "FAIL"}`); + console.log("-----------------------"); + }); +} + +test(); \ No newline at end of file diff --git a/src/problem2/fancy-form/.gitignore b/src/problem2/fancy-form/.gitignore new file mode 100644 index 0000000000..a547bf36d8 --- /dev/null +++ b/src/problem2/fancy-form/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/src/problem2/fancy-form/.prettierrc b/src/problem2/fancy-form/.prettierrc new file mode 100644 index 0000000000..3f752c1ba5 --- /dev/null +++ b/src/problem2/fancy-form/.prettierrc @@ -0,0 +1,10 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "all", + "printWidth": 100, + "bracketSpacing": true, + "arrowParens": "always", + "endOfLine": "auto" +} diff --git a/src/problem2/fancy-form/README.md b/src/problem2/fancy-form/README.md new file mode 100644 index 0000000000..7dbf7ebf3b --- /dev/null +++ b/src/problem2/fancy-form/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/src/problem2/fancy-form/components.json b/src/problem2/fancy-form/components.json new file mode 100644 index 0000000000..15addee81f --- /dev/null +++ b/src/problem2/fancy-form/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "base-nova", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/src/problem2/fancy-form/eslint.config.js b/src/problem2/fancy-form/eslint.config.js new file mode 100644 index 0000000000..82f37d2941 --- /dev/null +++ b/src/problem2/fancy-form/eslint.config.js @@ -0,0 +1,36 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import tseslint from 'typescript-eslint'; +import eslintPluginPrettier from 'eslint-plugin-prettier'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import { defineConfig, globalIgnores } from 'eslint/config'; + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + }, + plugins: { + prettier: eslintPluginPrettier, + }, + rules: { + ...eslintConfigPrettier.rules, + 'prettier/prettier': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, + ], + '@typescript-eslint/consistent-type-imports': 'warn', + }, + }, +]); diff --git a/src/problem2/fancy-form/index.html b/src/problem2/fancy-form/index.html new file mode 100644 index 0000000000..c7932bfbb6 --- /dev/null +++ b/src/problem2/fancy-form/index.html @@ -0,0 +1,14 @@ + + + + + + + + Fancy Form — Token Swap + + +
+ + + diff --git a/src/problem2/fancy-form/package-lock.json b/src/problem2/fancy-form/package-lock.json new file mode 100644 index 0000000000..ddd2db0d90 --- /dev/null +++ b/src/problem2/fancy-form/package-lock.json @@ -0,0 +1,3433 @@ +{ + "name": "fancy-form", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fancy-form", + "version": "0.0.0", + "dependencies": { + "@base-ui/react": "^1.4.1", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-slot": "^1.2.4", + "@tanstack/react-query": "^5.100.5", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "framer-motion": "^12.38.0", + "lucide-react": "^1.11.0", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-hot-toast": "^2.6.0", + "tailwind-merge": "^3.5.0" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@tailwindcss/vite": "^4.2.4", + "@types/node": "^24.12.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.2.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.5.0", + "prettier": "^3.8.3", + "tailwindcss": "^4.2.4", + "typescript": "~6.0.2", + "typescript-eslint": "^8.58.2", + "vite": "^8.0.10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base-ui/react": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.4.1.tgz", + "integrity": "sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@base-ui/utils": "0.2.8", + "@floating-ui/react-dom": "^2.1.8", + "@floating-ui/utils": "^0.2.11", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@date-fns/tz": "^1.2.0", + "@types/react": "^17 || ^18 || ^19", + "date-fns": "^4.0.0", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@date-fns/tz": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "date-fns": { + "optional": true + } + } + }, + "node_modules/@base-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@floating-ui/utils": "^0.2.11", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", + "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", + "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz", + "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", + "tailwindcss": "4.2.4" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.100.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.100.5.tgz", + "integrity": "sha512-t20KrhKkf0HXzqQkPbJ5erhFesup68BAbwFgYmTrS7bxMF7O5MdmL8jUkik4thsG7Hg00fblz30h6yF1d5TxGg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.100.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.100.5.tgz", + "integrity": "sha512-aNwj1mi2v2bQ9IxkyR1grLOUkv3BYWoykHy9KDyLNbjC3tsahbOHJibK+Wjtr1wRhG59/AvJhiJG5OlthaCgJA==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.100.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz", + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", + "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.7" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz", + "integrity": "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", + "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.5.5", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz", + "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/goober": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz", + "integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.11.0.tgz", + "integrity": "sha512-UOhjdztXCgdBReRcIhsvz2siIBogfv/lhJEIViCpLt924dO+GDms9T7DNoucI23s6kEPpe988m5N0D2ajnzb2g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-hot-toast": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz", + "integrity": "sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz", + "integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.127.0", + "@rolldown/pluginutils": "1.0.0-rc.17" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-x64": "1.0.0-rc.17", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", + "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz", + "integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.59.0", + "@typescript-eslint/parser": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vite": { + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz", + "integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.10", + "rolldown": "1.0.0-rc.17", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/src/problem2/fancy-form/package.json b/src/problem2/fancy-form/package.json new file mode 100644 index 0000000000..9135ca1381 --- /dev/null +++ b/src/problem2/fancy-form/package.json @@ -0,0 +1,45 @@ +{ + "name": "fancy-form", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@base-ui/react": "^1.4.1", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-slot": "^1.2.4", + "@tanstack/react-query": "^5.100.5", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "framer-motion": "^12.38.0", + "lucide-react": "^1.11.0", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-hot-toast": "^2.6.0", + "tailwind-merge": "^3.5.0" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@tailwindcss/vite": "^4.2.4", + "@types/node": "^24.12.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.2.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.5.0", + "prettier": "^3.8.3", + "tailwindcss": "^4.2.4", + "typescript": "~6.0.2", + "typescript-eslint": "^8.58.2", + "vite": "^8.0.10" + } +} diff --git a/src/problem2/fancy-form/public/favicon.svg b/src/problem2/fancy-form/public/favicon.svg new file mode 100644 index 0000000000..6893eb1323 --- /dev/null +++ b/src/problem2/fancy-form/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/fancy-form/public/icons.svg b/src/problem2/fancy-form/public/icons.svg new file mode 100644 index 0000000000..e9522193d9 --- /dev/null +++ b/src/problem2/fancy-form/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/App.css b/src/problem2/fancy-form/src/App.css new file mode 100644 index 0000000000..f90339d8f7 --- /dev/null +++ b/src/problem2/fancy-form/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/src/problem2/fancy-form/src/App.tsx b/src/problem2/fancy-form/src/App.tsx new file mode 100644 index 0000000000..6f5bc198b1 --- /dev/null +++ b/src/problem2/fancy-form/src/App.tsx @@ -0,0 +1,41 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { Toaster } from 'react-hot-toast'; +import { ThemeProvider } from '@/context/ThemeContext'; +import { SwapCard } from '@/components/swap/SwapCard'; +import { Background } from '@/components/layout/Background'; +import { ThemeToggle } from '@/components/layout/ThemeToggle'; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + }, + }, +}); + +function App() { + return ( + + +
+ + + {/* Theme toggle - top right */} +
+ +
+ + {/* Swap Form */} +
+ +
+ + {/* Toast notifications */} + +
+
+
+ ); +} + +export default App; diff --git a/src/problem2/fancy-form/src/api/client.ts b/src/problem2/fancy-form/src/api/client.ts new file mode 100644 index 0000000000..6386df2169 --- /dev/null +++ b/src/problem2/fancy-form/src/api/client.ts @@ -0,0 +1,33 @@ +const API_BASE_URL = 'https://interview.switcheo.com'; +const DEFAULT_TIMEOUT_MS = 10_000; + +/** + * Lightweight fetch wrapper with timeout and error handling. + */ +export async function apiGet(endpoint: string): Promise { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS); + + try { + const response = await fetch(`${API_BASE_URL}${endpoint}`, { + method: 'GET', + signal: controller.signal, + headers: { + 'Content-Type': 'application/json', + }, + }); + + if (!response.ok) { + throw new Error(`API Error: ${response.status} ${response.statusText}`); + } + + return (await response.json()) as T; + } catch (error) { + if (error instanceof DOMException && error.name === 'AbortError') { + throw new Error('Request timed out. Please try again.'); + } + throw error; + } finally { + clearTimeout(timeoutId); + } +} diff --git a/src/problem2/fancy-form/src/api/mockData.ts b/src/problem2/fancy-form/src/api/mockData.ts new file mode 100644 index 0000000000..f6806c4620 --- /dev/null +++ b/src/problem2/fancy-form/src/api/mockData.ts @@ -0,0 +1,44 @@ +import type { TokenPrice } from '@/types'; + +/** + * Fallback mock data for token prices. + * Used when the API call fails (e.g., due to CORS restrictions in browser). + */ +export const MOCK_TOKEN_PRICES: TokenPrice[] = [ + { currency: 'BLUR', date: '2023-08-29T07:10:40.000Z', price: 0.20811525423728813 }, + { currency: 'bNEO', date: '2023-08-29T07:10:50.000Z', price: 7.1282679 }, + { currency: 'BUSD', date: '2023-08-29T07:10:40.000Z', price: 0.999183113 }, + { currency: 'BUSD', date: '2023-08-29T07:10:40.000Z', price: 0.9998782611186441 }, + { currency: 'USD', date: '2023-08-29T07:10:30.000Z', price: 1 }, + { currency: 'ETH', date: '2023-08-29T07:10:52.000Z', price: 1645.9337373737374 }, + { currency: 'GMX', date: '2023-08-29T07:10:40.000Z', price: 36.345114372881355 }, + { currency: 'STEVMOS', date: '2023-08-29T07:10:40.000Z', price: 0.07276706779661017 }, + { currency: 'LUNA', date: '2023-08-29T07:10:40.000Z', price: 0.40955638983050846 }, + { currency: 'RATOM', date: '2023-08-29T07:10:40.000Z', price: 10.250918915254237 }, + { currency: 'STRD', date: '2023-08-29T07:10:40.000Z', price: 0.7386553389830508 }, + { currency: 'EVMOS', date: '2023-08-29T07:10:40.000Z', price: 0.06246181355932203 }, + { currency: 'IBCX', date: '2023-08-29T07:10:40.000Z', price: 41.26811355932203 }, + { currency: 'IRIS', date: '2023-08-29T07:10:40.000Z', price: 0.0177095593220339 }, + { currency: 'ampLUNA', date: '2023-08-29T07:10:40.000Z', price: 0.49548589830508477 }, + { currency: 'KUJI', date: '2023-08-29T07:10:45.000Z', price: 0.675 }, + { currency: 'STOSMO', date: '2023-08-29T07:10:45.000Z', price: 0.431318 }, + { currency: 'USDC', date: '2023-08-29T07:10:40.000Z', price: 0.989832 }, + { currency: 'axlUSDC', date: '2023-08-29T07:10:40.000Z', price: 0.989832 }, + { currency: 'ATOM', date: '2023-08-29T07:10:50.000Z', price: 7.186657333333334 }, + { currency: 'STATOM', date: '2023-08-29T07:10:45.000Z', price: 8.512162050847458 }, + { currency: 'OSMO', date: '2023-08-29T07:10:50.000Z', price: 0.3772974333333333 }, + { currency: 'rSWTH', date: '2023-08-29T07:10:40.000Z', price: 0.00408771 }, + { currency: 'STLUNA', date: '2023-08-29T07:10:40.000Z', price: 0.44232210169491526 }, + { currency: 'LSI', date: '2023-08-29T07:10:50.000Z', price: 67.69661525423729 }, + { currency: 'OKB', date: '2023-08-29T07:10:40.000Z', price: 42.97562059322034 }, + { currency: 'OKT', date: '2023-08-29T07:10:40.000Z', price: 13.561577966101694 }, + { currency: 'SWTH', date: '2023-08-29T07:10:45.000Z', price: 0.004039850455012084 }, + { currency: 'USC', date: '2023-08-29T07:10:40.000Z', price: 0.994 }, + { currency: 'USDC', date: '2023-08-29T07:10:30.000Z', price: 1 }, + { currency: 'USDC', date: '2023-08-29T07:10:30.000Z', price: 1 }, + { currency: 'USDC', date: '2023-08-29T07:10:40.000Z', price: 0.9998782611186441 }, + { currency: 'WBTC', date: '2023-08-29T07:10:52.000Z', price: 26002.82202020202 }, + { currency: 'wstETH', date: '2023-08-29T07:10:40.000Z', price: 1872.2579742372882 }, + { currency: 'YieldUSD', date: '2023-08-29T07:10:40.000Z', price: 1.0290847966101695 }, + { currency: 'ZIL', date: '2023-08-29T07:10:50.000Z', price: 0.01651813559322034 }, +]; diff --git a/src/problem2/fancy-form/src/api/prices.ts b/src/problem2/fancy-form/src/api/prices.ts new file mode 100644 index 0000000000..350e00af1a --- /dev/null +++ b/src/problem2/fancy-form/src/api/prices.ts @@ -0,0 +1,19 @@ +import type { TokenPrice } from '@/types'; +import { apiGet } from './client'; +import { MOCK_TOKEN_PRICES } from './mockData'; + +/** + * Fetches token price data from the Switcheo API. + * Falls back to mock data if the API call fails (e.g., CORS restrictions). + */ +export async function fetchTokenPrices(): Promise { + try { + return await apiGet('/prices.json'); + } catch (error) { + console.warn( + '[fetchTokenPrices] API call failed, using mock data as fallback.', + error instanceof Error ? error.message : error, + ); + return MOCK_TOKEN_PRICES; + } +} diff --git a/src/problem2/fancy-form/src/assets/hero.png b/src/problem2/fancy-form/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/src/problem2/fancy-form/src/assets/react.svg b/src/problem2/fancy-form/src/assets/react.svg new file mode 100644 index 0000000000..6c87de9bb3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/1INCH.svg b/src/problem2/fancy-form/src/assets/token-icon/1INCH.svg new file mode 100644 index 0000000000..5970f7bd55 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/1INCH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AAVE.svg b/src/problem2/fancy-form/src/assets/token-icon/AAVE.svg new file mode 100644 index 0000000000..10e65a3210 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AAVE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ACT.svg b/src/problem2/fancy-form/src/assets/token-icon/ACT.svg new file mode 100644 index 0000000000..2415fef55c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ACT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ADA.svg b/src/problem2/fancy-form/src/assets/token-icon/ADA.svg new file mode 100644 index 0000000000..c57bee9598 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ADA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AEVO.svg b/src/problem2/fancy-form/src/assets/token-icon/AEVO.svg new file mode 100644 index 0000000000..26c36a62dd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AEVO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AGI.svg b/src/problem2/fancy-form/src/assets/token-icon/AGI.svg new file mode 100644 index 0000000000..2617764b4c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AGI.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AI16Z.svg b/src/problem2/fancy-form/src/assets/token-icon/AI16Z.svg new file mode 100644 index 0000000000..d6b38455f9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AI16Z.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AIXBT.svg b/src/problem2/fancy-form/src/assets/token-icon/AIXBT.svg new file mode 100644 index 0000000000..2fd4c736d7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AIXBT.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AKRO.svg b/src/problem2/fancy-form/src/assets/token-icon/AKRO.svg new file mode 100644 index 0000000000..33501e5c2e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AKRO.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AKT.svg b/src/problem2/fancy-form/src/assets/token-icon/AKT.svg new file mode 100644 index 0000000000..a0733cd5e8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AKT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ALGO.svg b/src/problem2/fancy-form/src/assets/token-icon/ALGO.svg new file mode 100644 index 0000000000..0c79ab88fd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ALGO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ALPHA.svg b/src/problem2/fancy-form/src/assets/token-icon/ALPHA.svg new file mode 100644 index 0000000000..9d916fb949 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ALPHA.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ALT.svg b/src/problem2/fancy-form/src/assets/token-icon/ALT.svg new file mode 100644 index 0000000000..fb551dfa7d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ALT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AMP.svg b/src/problem2/fancy-form/src/assets/token-icon/AMP.svg new file mode 100644 index 0000000000..71bec9f9b4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AMP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANC.svg b/src/problem2/fancy-form/src/assets/token-icon/ANC.svg new file mode 100644 index 0000000000..bd414783cf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANDR.svg b/src/problem2/fancy-form/src/assets/token-icon/ANDR.svg new file mode 100644 index 0000000000..fc7e23b4ef --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANDR.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANIME.svg b/src/problem2/fancy-form/src/assets/token-icon/ANIME.svg new file mode 100644 index 0000000000..975db35cd4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANIME.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANKR.svg b/src/problem2/fancy-form/src/assets/token-icon/ANKR.svg new file mode 100644 index 0000000000..b8599f0165 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANKR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANT.svg b/src/problem2/fancy-form/src/assets/token-icon/ANT.svg new file mode 100644 index 0000000000..f805ff79f5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANT.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ANY.svg b/src/problem2/fancy-form/src/assets/token-icon/ANY.svg new file mode 100644 index 0000000000..c504391175 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ANY.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/APE.svg b/src/problem2/fancy-form/src/assets/token-icon/APE.svg new file mode 100644 index 0000000000..26ff9cfd4e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/APE.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/APOLLO.svg b/src/problem2/fancy-form/src/assets/token-icon/APOLLO.svg new file mode 100644 index 0000000000..852aa5cea2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/APOLLO.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/APT.svg b/src/problem2/fancy-form/src/assets/token-icon/APT.svg new file mode 100644 index 0000000000..df0a169047 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/APT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AR.svg b/src/problem2/fancy-form/src/assets/token-icon/AR.svg new file mode 100644 index 0000000000..5efc91fdb4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ARB.svg b/src/problem2/fancy-form/src/assets/token-icon/ARB.svg new file mode 100644 index 0000000000..2666c28ab2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ARB.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ARCH.svg b/src/problem2/fancy-form/src/assets/token-icon/ARCH.svg new file mode 100644 index 0000000000..b6deb843a1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ARCH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ASA.svg b/src/problem2/fancy-form/src/assets/token-icon/ASA.svg new file mode 100644 index 0000000000..7023a06245 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ASA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ASTRO.svg b/src/problem2/fancy-form/src/assets/token-icon/ASTRO.svg new file mode 100644 index 0000000000..23047ab947 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ASTRO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ATOM-dATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/ATOM-dATOM.svg new file mode 100644 index 0000000000..07e4a7d4c2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ATOM-dATOM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/ATOM.svg new file mode 100644 index 0000000000..f3f9d10429 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ATOM.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AUDIO.svg b/src/problem2/fancy-form/src/assets/token-icon/AUDIO.svg new file mode 100644 index 0000000000..527d7ae79e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AUDIO.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AUT.svg b/src/problem2/fancy-form/src/assets/token-icon/AUT.svg new file mode 100644 index 0000000000..4f442bcfe1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AUT.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AVA.svg b/src/problem2/fancy-form/src/assets/token-icon/AVA.svg new file mode 100644 index 0000000000..b88859ee56 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AVA.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AVAIL.svg b/src/problem2/fancy-form/src/assets/token-icon/AVAIL.svg new file mode 100644 index 0000000000..6b011a7f67 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AVAIL.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AVAX.svg b/src/problem2/fancy-form/src/assets/token-icon/AVAX.svg new file mode 100644 index 0000000000..e85981529c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AVAX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AXL.svg b/src/problem2/fancy-form/src/assets/token-icon/AXL.svg new file mode 100644 index 0000000000..a0d81a72ff --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AXL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AXS.svg b/src/problem2/fancy-form/src/assets/token-icon/AXS.svg new file mode 100644 index 0000000000..ab64a1a097 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AXS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/AXT.svg b/src/problem2/fancy-form/src/assets/token-icon/AXT.svg new file mode 100644 index 0000000000..a0be2a7e32 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/AXT.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BAKE.svg b/src/problem2/fancy-form/src/assets/token-icon/BAKE.svg new file mode 100644 index 0000000000..48e18cc4c8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BAKE.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BAL.svg b/src/problem2/fancy-form/src/assets/token-icon/BAL.svg new file mode 100644 index 0000000000..274d48692b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BAL.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BAND.svg b/src/problem2/fancy-form/src/assets/token-icon/BAND.svg new file mode 100644 index 0000000000..fe0b053178 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BAND.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BAT.svg b/src/problem2/fancy-form/src/assets/token-icon/BAT.svg new file mode 100644 index 0000000000..6bea15edba --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BAT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BCD.svg b/src/problem2/fancy-form/src/assets/token-icon/BCD.svg new file mode 100644 index 0000000000..2eae4d86ac --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BCD.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BCH.svg b/src/problem2/fancy-form/src/assets/token-icon/BCH.svg new file mode 100644 index 0000000000..c1b2185860 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BCH.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BCHA.svg b/src/problem2/fancy-form/src/assets/token-icon/BCHA.svg new file mode 100644 index 0000000000..d1c50093bd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BCHA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BCN.svg b/src/problem2/fancy-form/src/assets/token-icon/BCN.svg new file mode 100644 index 0000000000..446afbc222 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BCN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BCNA.svg b/src/problem2/fancy-form/src/assets/token-icon/BCNA.svg new file mode 100644 index 0000000000..81cb2950dc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BCNA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BELT.svg b/src/problem2/fancy-form/src/assets/token-icon/BELT.svg new file mode 100644 index 0000000000..0711b1485c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BELT.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/BERA.svg b/src/problem2/fancy-form/src/assets/token-icon/BERA.svg new file mode 100644 index 0000000000..e77de0c563 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BERA.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BETH.svg b/src/problem2/fancy-form/src/assets/token-icon/BETH.svg new file mode 100644 index 0000000000..46a2401959 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BETH.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BHC.svg b/src/problem2/fancy-form/src/assets/token-icon/BHC.svg new file mode 100644 index 0000000000..c1b2185860 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BHC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BIT.svg b/src/problem2/fancy-form/src/assets/token-icon/BIT.svg new file mode 100644 index 0000000000..123a839eb5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BIT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BLAST.svg b/src/problem2/fancy-form/src/assets/token-icon/BLAST.svg new file mode 100644 index 0000000000..d931df3f89 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BLAST.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BLD.svg b/src/problem2/fancy-form/src/assets/token-icon/BLD.svg new file mode 100644 index 0000000000..1674899d4e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BLD.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BLOX.svg b/src/problem2/fancy-form/src/assets/token-icon/BLOX.svg new file mode 100644 index 0000000000..7a3045c57f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BLOX.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BLUR.svg b/src/problem2/fancy-form/src/assets/token-icon/BLUR.svg new file mode 100644 index 0000000000..bf1e280984 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BLUR.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BNB.svg b/src/problem2/fancy-form/src/assets/token-icon/BNB.svg new file mode 100644 index 0000000000..a7c6699768 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BNB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BNT.svg b/src/problem2/fancy-form/src/assets/token-icon/BNT.svg new file mode 100644 index 0000000000..4c29bec3c9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BOLT.svg b/src/problem2/fancy-form/src/assets/token-icon/BOLT.svg new file mode 100644 index 0000000000..a74a21608e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BOLT.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BONK.svg b/src/problem2/fancy-form/src/assets/token-icon/BONK.svg new file mode 100644 index 0000000000..5df777e894 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BONK.svg @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BOOT.svg b/src/problem2/fancy-form/src/assets/token-icon/BOOT.svg new file mode 100644 index 0000000000..2469b80cfd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BOOT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BRAINS.svg b/src/problem2/fancy-form/src/assets/token-icon/BRAINS.svg new file mode 100644 index 0000000000..5c6a1d4184 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BRAINS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BRETT.svg b/src/problem2/fancy-form/src/assets/token-icon/BRETT.svg new file mode 100644 index 0000000000..a799d64779 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BRETT.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BRKL.svg b/src/problem2/fancy-form/src/assets/token-icon/BRKL.svg new file mode 100644 index 0000000000..5963d18244 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BRKL.svg @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTC.svg b/src/problem2/fancy-form/src/assets/token-icon/BTC.svg new file mode 100644 index 0000000000..cd3b1e78e2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTC.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTCST.svg b/src/problem2/fancy-form/src/assets/token-icon/BTCST.svg new file mode 100644 index 0000000000..63d5b3c441 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTCST.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTG.svg b/src/problem2/fancy-form/src/assets/token-icon/BTG.svg new file mode 100644 index 0000000000..41629e7d6a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTM.svg b/src/problem2/fancy-form/src/assets/token-icon/BTM.svg new file mode 100644 index 0000000000..16fdbdfda4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTM.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTMX.svg b/src/problem2/fancy-form/src/assets/token-icon/BTMX.svg new file mode 100644 index 0000000000..5e4a26a71e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTMX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTSG.svg b/src/problem2/fancy-form/src/assets/token-icon/BTSG.svg new file mode 100644 index 0000000000..9b82cf6a0b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTSG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BTT.svg b/src/problem2/fancy-form/src/assets/token-icon/BTT.svg new file mode 100644 index 0000000000..736450a2db --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BTT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BUNNY.svg b/src/problem2/fancy-form/src/assets/token-icon/BUNNY.svg new file mode 100644 index 0000000000..4bed16291f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BUNNY.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/BUSD.svg new file mode 100644 index 0000000000..b992764bd1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BUSD.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/BUSDT.svg b/src/problem2/fancy-form/src/assets/token-icon/BUSDT.svg new file mode 100644 index 0000000000..08bbf0587d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/BUSDT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/C98.svg b/src/problem2/fancy-form/src/assets/token-icon/C98.svg new file mode 100644 index 0000000000..3a0ff2bb70 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/C98.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CAKE.svg b/src/problem2/fancy-form/src/assets/token-icon/CAKE.svg new file mode 100644 index 0000000000..ce45fbe253 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CAKE.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CANTO.svg b/src/problem2/fancy-form/src/assets/token-icon/CANTO.svg new file mode 100644 index 0000000000..d2758becf9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CANTO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CARB.svg b/src/problem2/fancy-form/src/assets/token-icon/CARB.svg new file mode 100644 index 0000000000..02e14d0bfe --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CARB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CAT.svg b/src/problem2/fancy-form/src/assets/token-icon/CAT.svg new file mode 100644 index 0000000000..8f81af95be --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CAT.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CEL.svg b/src/problem2/fancy-form/src/assets/token-icon/CEL.svg new file mode 100644 index 0000000000..02cfbd269c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CEL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CELO.svg b/src/problem2/fancy-form/src/assets/token-icon/CELO.svg new file mode 100644 index 0000000000..5ff3c6c83c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CELO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CETH.svg b/src/problem2/fancy-form/src/assets/token-icon/CETH.svg new file mode 100644 index 0000000000..448a94a7a7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CETH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CFX.svg b/src/problem2/fancy-form/src/assets/token-icon/CFX.svg new file mode 100644 index 0000000000..07e8c434db --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CFX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CGAS.svg b/src/problem2/fancy-form/src/assets/token-icon/CGAS.svg new file mode 100644 index 0000000000..3c31d75c0c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CGAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CHEQ.svg b/src/problem2/fancy-form/src/assets/token-icon/CHEQ.svg new file mode 100644 index 0000000000..ed1621a482 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CHEQ.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CHOG.svg b/src/problem2/fancy-form/src/assets/token-icon/CHOG.svg new file mode 100644 index 0000000000..adee63f975 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CHOG.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CHSB.svg b/src/problem2/fancy-form/src/assets/token-icon/CHSB.svg new file mode 100644 index 0000000000..0118cfce5c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CHSB.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CHT.svg b/src/problem2/fancy-form/src/assets/token-icon/CHT.svg new file mode 100644 index 0000000000..19d6392712 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CHT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CHZ.svg b/src/problem2/fancy-form/src/assets/token-icon/CHZ.svg new file mode 100644 index 0000000000..68897c58f1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CHZ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CKB.svg b/src/problem2/fancy-form/src/assets/token-icon/CKB.svg new file mode 100644 index 0000000000..888ff3323e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CKB.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CMDX.svg b/src/problem2/fancy-form/src/assets/token-icon/CMDX.svg new file mode 100644 index 0000000000..028d44e951 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CMDX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CMST.svg b/src/problem2/fancy-form/src/assets/token-icon/CMST.svg new file mode 100644 index 0000000000..cd6cb419eb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CMST.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CNT.svg b/src/problem2/fancy-form/src/assets/token-icon/CNT.svg new file mode 100644 index 0000000000..c098860f72 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CNT.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/COIN.svg b/src/problem2/fancy-form/src/assets/token-icon/COIN.svg new file mode 100644 index 0000000000..098ee36d37 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/COIN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/COMP.svg b/src/problem2/fancy-form/src/assets/token-icon/COMP.svg new file mode 100644 index 0000000000..563bf3af25 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/COMP.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/COOK.svg b/src/problem2/fancy-form/src/assets/token-icon/COOK.svg new file mode 100644 index 0000000000..615625b404 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/COOK.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CRBRUS.svg b/src/problem2/fancy-form/src/assets/token-icon/CRBRUS.svg new file mode 100644 index 0000000000..d847b37b3c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CRBRUS.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CRE.svg b/src/problem2/fancy-form/src/assets/token-icon/CRE.svg new file mode 100644 index 0000000000..4008331be2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CRE.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CRO.svg b/src/problem2/fancy-form/src/assets/token-icon/CRO.svg new file mode 100644 index 0000000000..75ddad7d51 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CRO.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CRV.svg b/src/problem2/fancy-form/src/assets/token-icon/CRV.svg new file mode 100644 index 0000000000..f9fa597fac --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CRV.svg @@ -0,0 +1,790 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CTK.svg b/src/problem2/fancy-form/src/assets/token-icon/CTK.svg new file mode 100644 index 0000000000..96bfa4f618 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CTK.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/CW.svg b/src/problem2/fancy-form/src/assets/token-icon/CW.svg new file mode 100644 index 0000000000..e0d8eef0af --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/CW.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DAG.svg b/src/problem2/fancy-form/src/assets/token-icon/DAG.svg new file mode 100644 index 0000000000..a06db4c405 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DAG.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DAI.svg b/src/problem2/fancy-form/src/assets/token-icon/DAI.svg new file mode 100644 index 0000000000..00fdd7ae1b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DAI.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DAK.svg b/src/problem2/fancy-form/src/assets/token-icon/DAK.svg new file mode 100644 index 0000000000..bbfa1b2640 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DAK.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DARC.svg b/src/problem2/fancy-form/src/assets/token-icon/DARC.svg new file mode 100644 index 0000000000..8e131ded9b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DARC.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DASH.svg b/src/problem2/fancy-form/src/assets/token-icon/DASH.svg new file mode 100644 index 0000000000..17e5eb7146 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DASH.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DBC.svg b/src/problem2/fancy-form/src/assets/token-icon/DBC.svg new file mode 100644 index 0000000000..91e7b72378 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DBC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DCR.svg b/src/problem2/fancy-form/src/assets/token-icon/DCR.svg new file mode 100644 index 0000000000..d97040bcfe --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DCR.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DEC.svg b/src/problem2/fancy-form/src/assets/token-icon/DEC.svg new file mode 100644 index 0000000000..025f6329b0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DEC.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DEGEN.svg b/src/problem2/fancy-form/src/assets/token-icon/DEGEN.svg new file mode 100644 index 0000000000..44233e8e9d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DEGEN.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DENT.svg b/src/problem2/fancy-form/src/assets/token-icon/DENT.svg new file mode 100644 index 0000000000..10035d5a1a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DENT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DGB.svg b/src/problem2/fancy-form/src/assets/token-icon/DGB.svg new file mode 100644 index 0000000000..ecf85eb29f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DGB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DIG.svg b/src/problem2/fancy-form/src/assets/token-icon/DIG.svg new file mode 100644 index 0000000000..b75f6740df --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DIG.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DKT.svg b/src/problem2/fancy-form/src/assets/token-icon/DKT.svg new file mode 100644 index 0000000000..8d1d5a5604 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DKT.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DODO.svg b/src/problem2/fancy-form/src/assets/token-icon/DODO.svg new file mode 100644 index 0000000000..514dd23b5e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DODO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DOGE.svg b/src/problem2/fancy-form/src/assets/token-icon/DOGE.svg new file mode 100644 index 0000000000..f019ca4b5e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DOGE.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DOT.svg b/src/problem2/fancy-form/src/assets/token-icon/DOT.svg new file mode 100644 index 0000000000..db6de54b24 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DOT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DPL.svg b/src/problem2/fancy-form/src/assets/token-icon/DPL.svg new file mode 100644 index 0000000000..e511541f14 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DPL.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DPX.svg b/src/problem2/fancy-form/src/assets/token-icon/DPX.svg new file mode 100644 index 0000000000..d96e812979 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DPX.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DRFT.svg b/src/problem2/fancy-form/src/assets/token-icon/DRFT.svg new file mode 100644 index 0000000000..3f64fd9620 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DRFT.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DROP.svg b/src/problem2/fancy-form/src/assets/token-icon/DROP.svg new file mode 100644 index 0000000000..dbb6c318b4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DROP.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DSM.svg b/src/problem2/fancy-form/src/assets/token-icon/DSM.svg new file mode 100644 index 0000000000..b305f5f5ea --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DSM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DUVT.svg b/src/problem2/fancy-form/src/assets/token-icon/DUVT.svg new file mode 100644 index 0000000000..4bced3bdb9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DUVT.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DVPN.svg b/src/problem2/fancy-form/src/assets/token-icon/DVPN.svg new file mode 100644 index 0000000000..cb35dbc086 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DVPN.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DYDX.svg b/src/problem2/fancy-form/src/assets/token-icon/DYDX.svg new file mode 100644 index 0000000000..7977307c0f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DYDX.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/DYM.svg b/src/problem2/fancy-form/src/assets/token-icon/DYM.svg new file mode 100644 index 0000000000..e696de4fd5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/DYM.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EEUR.svg b/src/problem2/fancy-form/src/assets/token-icon/EEUR.svg new file mode 100644 index 0000000000..25f940a5b3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EEUR.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EGLD.svg b/src/problem2/fancy-form/src/assets/token-icon/EGLD.svg new file mode 100644 index 0000000000..e42ad2510e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EGLD.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EIGEN.svg b/src/problem2/fancy-form/src/assets/token-icon/EIGEN.svg new file mode 100644 index 0000000000..350b748dd4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EIGEN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ELA.svg b/src/problem2/fancy-form/src/assets/token-icon/ELA.svg new file mode 100644 index 0000000000..7612168452 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ELA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ELF.svg b/src/problem2/fancy-form/src/assets/token-icon/ELF.svg new file mode 100644 index 0000000000..fd3bc6cfe8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ELF.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ENA.svg b/src/problem2/fancy-form/src/assets/token-icon/ENA.svg new file mode 100644 index 0000000000..2445033b08 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ENA.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ENJ.svg b/src/problem2/fancy-form/src/assets/token-icon/ENJ.svg new file mode 100644 index 0000000000..7b832779f7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ENJ.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ENS.svg b/src/problem2/fancy-form/src/assets/token-icon/ENS.svg new file mode 100644 index 0000000000..94d385bc10 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ENS.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EOS.svg b/src/problem2/fancy-form/src/assets/token-icon/EOS.svg new file mode 100644 index 0000000000..61de71db6d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EOS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EPS.svg b/src/problem2/fancy-form/src/assets/token-icon/EPS.svg new file mode 100644 index 0000000000..ef8bb614e1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EPS.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ETC.svg b/src/problem2/fancy-form/src/assets/token-icon/ETC.svg new file mode 100644 index 0000000000..7b3e8b3869 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ETC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ETH.svg b/src/problem2/fancy-form/src/assets/token-icon/ETH.svg new file mode 100644 index 0000000000..6a7cd5afc4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ETH.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ETHBTC.svg b/src/problem2/fancy-form/src/assets/token-icon/ETHBTC.svg new file mode 100644 index 0000000000..bd01fc187e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ETHBTC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ETN.svg b/src/problem2/fancy-form/src/assets/token-icon/ETN.svg new file mode 100644 index 0000000000..a13bc14247 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ETN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EUROC.svg b/src/problem2/fancy-form/src/assets/token-icon/EUROC.svg new file mode 100644 index 0000000000..81134495c6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EUROC.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EUT.svg b/src/problem2/fancy-form/src/assets/token-icon/EUT.svg new file mode 100644 index 0000000000..56c4d324a5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EUT.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EVMOS.svg b/src/problem2/fancy-form/src/assets/token-icon/EVMOS.svg new file mode 100644 index 0000000000..8d0b90acb4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EVMOS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/EWT.svg b/src/problem2/fancy-form/src/assets/token-icon/EWT.svg new file mode 100644 index 0000000000..db6e0ec632 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/EWT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FARTCOIN.svg b/src/problem2/fancy-form/src/assets/token-icon/FARTCOIN.svg new file mode 100644 index 0000000000..9fa8534fdc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FARTCOIN.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FBTC.svg b/src/problem2/fancy-form/src/assets/token-icon/FBTC.svg new file mode 100644 index 0000000000..89b376bbf9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FBTC.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FEES.svg b/src/problem2/fancy-form/src/assets/token-icon/FEES.svg new file mode 100644 index 0000000000..f31a2e1f85 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FEES.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FET.svg b/src/problem2/fancy-form/src/assets/token-icon/FET.svg new file mode 100644 index 0000000000..20b53be3d1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FET.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FIL.svg b/src/problem2/fancy-form/src/assets/token-icon/FIL.svg new file mode 100644 index 0000000000..a875441006 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FIL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FIS.svg b/src/problem2/fancy-form/src/assets/token-icon/FIS.svg new file mode 100644 index 0000000000..ae28f926c9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FIS.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FLIX.svg b/src/problem2/fancy-form/src/assets/token-icon/FLIX.svg new file mode 100644 index 0000000000..962e47fb2d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FLIX.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FLM.svg b/src/problem2/fancy-form/src/assets/token-icon/FLM.svg new file mode 100644 index 0000000000..73ba619981 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FLM.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FLOW.svg b/src/problem2/fancy-form/src/assets/token-icon/FLOW.svg new file mode 100644 index 0000000000..7cf7e32db2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FLOW.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FLUID.svg b/src/problem2/fancy-form/src/assets/token-icon/FLUID.svg new file mode 100644 index 0000000000..9202222f8f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FLUID.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FLUO.svg b/src/problem2/fancy-form/src/assets/token-icon/FLUO.svg new file mode 100644 index 0000000000..d4e4c7f345 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FLUO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FRANK.svg b/src/problem2/fancy-form/src/assets/token-icon/FRANK.svg new file mode 100644 index 0000000000..6a49dcfec1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FRANK.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FSGLP.svg b/src/problem2/fancy-form/src/assets/token-icon/FSGLP.svg new file mode 100644 index 0000000000..1392a246bb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FSGLP.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FTM.svg b/src/problem2/fancy-form/src/assets/token-icon/FTM.svg new file mode 100644 index 0000000000..0f46c6923c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FTM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FTT.svg b/src/problem2/fancy-form/src/assets/token-icon/FTT.svg new file mode 100644 index 0000000000..fcd829ef4f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FTT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FTTC.svg b/src/problem2/fancy-form/src/assets/token-icon/FTTC.svg new file mode 100644 index 0000000000..b53103bc49 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FTTC.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/FUN.svg b/src/problem2/fancy-form/src/assets/token-icon/FUN.svg new file mode 100644 index 0000000000..59cdc4bf25 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/FUN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GALA.svg b/src/problem2/fancy-form/src/assets/token-icon/GALA.svg new file mode 100644 index 0000000000..58a423f8bb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GALA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GAMBIT.svg b/src/problem2/fancy-form/src/assets/token-icon/GAMBIT.svg new file mode 100644 index 0000000000..b2ef5aadb3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GAMBIT.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GAS.svg b/src/problem2/fancy-form/src/assets/token-icon/GAS.svg new file mode 100644 index 0000000000..3c31d75c0c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GBT.svg b/src/problem2/fancy-form/src/assets/token-icon/GBT.svg new file mode 100644 index 0000000000..7dcf617c3e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GBT.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GLP.svg b/src/problem2/fancy-form/src/assets/token-icon/GLP.svg new file mode 100644 index 0000000000..c5eefed0ad --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GLP.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GM.svg b/src/problem2/fancy-form/src/assets/token-icon/GM.svg new file mode 100644 index 0000000000..7739426dcb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GM.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GMX.svg b/src/problem2/fancy-form/src/assets/token-icon/GMX.svg new file mode 100644 index 0000000000..80a8c19e74 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GMX.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GNO.svg b/src/problem2/fancy-form/src/assets/token-icon/GNO.svg new file mode 100644 index 0000000000..b53b4961bc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GNO.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GNS.svg b/src/problem2/fancy-form/src/assets/token-icon/GNS.svg new file mode 100644 index 0000000000..f47eaabf71 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GNS.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GOAT.svg b/src/problem2/fancy-form/src/assets/token-icon/GOAT.svg new file mode 100644 index 0000000000..f52285aaa9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GOAT.svg @@ -0,0 +1,2174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GRASS.svg b/src/problem2/fancy-form/src/assets/token-icon/GRASS.svg new file mode 100644 index 0000000000..caa370fffe --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GRASS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GRAV.svg b/src/problem2/fancy-form/src/assets/token-icon/GRAV.svg new file mode 100644 index 0000000000..658e155072 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GRAV.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GRT.svg b/src/problem2/fancy-form/src/assets/token-icon/GRT.svg new file mode 100644 index 0000000000..2d283004da --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GRT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/GT.svg b/src/problem2/fancy-form/src/assets/token-icon/GT.svg new file mode 100644 index 0000000000..6cb00ff5c5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/GT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HBAR.svg b/src/problem2/fancy-form/src/assets/token-icon/HBAR.svg new file mode 100644 index 0000000000..62d8831906 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HBAR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HDN.png b/src/problem2/fancy-form/src/assets/token-icon/HDN.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7e612922734d7b5dcc6cdae2d9e3c1b7a9e1cc GIT binary patch literal 20649 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 + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HELMET.svg b/src/problem2/fancy-form/src/assets/token-icon/HELMET.svg new file mode 100644 index 0000000000..1a50859878 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HELMET.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HKT.svg b/src/problem2/fancy-form/src/assets/token-icon/HKT.svg new file mode 100644 index 0000000000..d2f5c930a7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HKT.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HNT.svg b/src/problem2/fancy-form/src/assets/token-icon/HNT.svg new file mode 100644 index 0000000000..402e236890 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HOPE.svg b/src/problem2/fancy-form/src/assets/token-icon/HOPE.svg new file mode 100644 index 0000000000..b7541ae4a9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HOPE.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HOT.svg b/src/problem2/fancy-form/src/assets/token-icon/HOT.svg new file mode 100644 index 0000000000..eab9101a1f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HOT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HT.svg b/src/problem2/fancy-form/src/assets/token-icon/HT.svg new file mode 100644 index 0000000000..72cdfdd097 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HUAHUA.svg b/src/problem2/fancy-form/src/assets/token-icon/HUAHUA.svg new file mode 100644 index 0000000000..e94cd98d8d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HUAHUA.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HUNY.svg b/src/problem2/fancy-form/src/assets/token-icon/HUNY.svg new file mode 100644 index 0000000000..b06f2f5457 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HUNY.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/HUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/HUSD.svg new file mode 100644 index 0000000000..30b26c0373 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HUSD.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/HYPE.svg b/src/problem2/fancy-form/src/assets/token-icon/HYPE.svg new file mode 100644 index 0000000000..24eb8536f1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/HYPE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IBCX.svg b/src/problem2/fancy-form/src/assets/token-icon/IBCX.svg new file mode 100644 index 0000000000..061c6ccefe --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IBCX.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ICP.svg b/src/problem2/fancy-form/src/assets/token-icon/ICP.svg new file mode 100644 index 0000000000..c7a99ba9bd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ICP.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ICX.svg b/src/problem2/fancy-form/src/assets/token-icon/ICX.svg new file mode 100644 index 0000000000..53efc54ef9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ICX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IDT.svg b/src/problem2/fancy-form/src/assets/token-icon/IDT.svg new file mode 100644 index 0000000000..91288c58bf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IDT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/INIT.svg b/src/problem2/fancy-form/src/assets/token-icon/INIT.svg new file mode 100644 index 0000000000..47395f6439 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/INIT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/INJ.svg b/src/problem2/fancy-form/src/assets/token-icon/INJ.svg new file mode 100644 index 0000000000..b6d304e498 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/INJ.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/INT.svg b/src/problem2/fancy-form/src/assets/token-icon/INT.svg new file mode 100644 index 0000000000..9ab0d29f35 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/INT.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ION.svg b/src/problem2/fancy-form/src/assets/token-icon/ION.svg new file mode 100644 index 0000000000..adad5f300f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ION.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IOST.svg b/src/problem2/fancy-form/src/assets/token-icon/IOST.svg new file mode 100644 index 0000000000..8f791796a3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IOST.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IOTX.svg b/src/problem2/fancy-form/src/assets/token-icon/IOTX.svg new file mode 100644 index 0000000000..97a8461838 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IOTX.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IOV.svg b/src/problem2/fancy-form/src/assets/token-icon/IOV.svg new file mode 100644 index 0000000000..2c37835fff --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IOV.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IP.svg b/src/problem2/fancy-form/src/assets/token-icon/IP.svg new file mode 100644 index 0000000000..be63bba6d7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IP.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IRIS.svg b/src/problem2/fancy-form/src/assets/token-icon/IRIS.svg new file mode 100644 index 0000000000..59b13b5aa6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IRIS.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/IXO.svg b/src/problem2/fancy-form/src/assets/token-icon/IXO.svg new file mode 100644 index 0000000000..0d1fb10136 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/IXO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/JPT.svg b/src/problem2/fancy-form/src/assets/token-icon/JPT.svg new file mode 100644 index 0000000000..14014e4cb8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/JPT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/JTO.svg b/src/problem2/fancy-form/src/assets/token-icon/JTO.svg new file mode 100644 index 0000000000..3ce7f51587 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/JTO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/JUNO.svg b/src/problem2/fancy-form/src/assets/token-icon/JUNO.svg new file mode 100644 index 0000000000..d65fb3da31 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/JUNO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/JUP.svg b/src/problem2/fancy-form/src/assets/token-icon/JUP.svg new file mode 100644 index 0000000000..adf9284819 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/JUP.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KAITO.svg b/src/problem2/fancy-form/src/assets/token-icon/KAITO.svg new file mode 100644 index 0000000000..f51471047a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KAITO.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KAS.svg b/src/problem2/fancy-form/src/assets/token-icon/KAS.svg new file mode 100644 index 0000000000..1c9ea6bc49 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KAS.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KBONK.svg b/src/problem2/fancy-form/src/assets/token-icon/KBONK.svg new file mode 100644 index 0000000000..5df777e894 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KBONK.svg @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KCS.svg b/src/problem2/fancy-form/src/assets/token-icon/KCS.svg new file mode 100644 index 0000000000..a4b333dfb8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KCS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KFLOKI.svg b/src/problem2/fancy-form/src/assets/token-icon/KFLOKI.svg new file mode 100644 index 0000000000..d35699e87e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KFLOKI.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KLAY.svg b/src/problem2/fancy-form/src/assets/token-icon/KLAY.svg new file mode 100644 index 0000000000..6f1d4cabef --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KLAY.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KMD.svg b/src/problem2/fancy-form/src/assets/token-icon/KMD.svg new file mode 100644 index 0000000000..62598658bb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KMD.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KNC.svg b/src/problem2/fancy-form/src/assets/token-icon/KNC.svg new file mode 100644 index 0000000000..d9ed00657f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KNC.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KPEPE.svg b/src/problem2/fancy-form/src/assets/token-icon/KPEPE.svg new file mode 100644 index 0000000000..92665e5502 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KPEPE.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KRT.svg b/src/problem2/fancy-form/src/assets/token-icon/KRT.svg new file mode 100644 index 0000000000..e6ea416cf6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KRT.svg @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KSHIB.svg b/src/problem2/fancy-form/src/assets/token-icon/KSHIB.svg new file mode 100644 index 0000000000..adbb2f009b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KSHIB.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KSM.svg b/src/problem2/fancy-form/src/assets/token-icon/KSM.svg new file mode 100644 index 0000000000..771f73596e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KSM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/KUJI.svg b/src/problem2/fancy-form/src/assets/token-icon/KUJI.svg new file mode 100644 index 0000000000..7c169dd724 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/KUJI.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LAYER.svg b/src/problem2/fancy-form/src/assets/token-icon/LAYER.svg new file mode 100644 index 0000000000..9e9036df30 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LAYER.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LBTC.svg b/src/problem2/fancy-form/src/assets/token-icon/LBTC.svg new file mode 100644 index 0000000000..1476de62ab --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LBTC.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LDO.svg b/src/problem2/fancy-form/src/assets/token-icon/LDO.svg new file mode 100644 index 0000000000..c8860768cf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LDO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LEO.svg b/src/problem2/fancy-form/src/assets/token-icon/LEO.svg new file mode 100644 index 0000000000..f94a11c945 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LEO.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LET.svg b/src/problem2/fancy-form/src/assets/token-icon/LET.svg new file mode 100644 index 0000000000..8f6a4a06e6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LET.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LIKE.svg b/src/problem2/fancy-form/src/assets/token-icon/LIKE.svg new file mode 100644 index 0000000000..a0ac6ac6ac --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LIKE.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LINK.svg b/src/problem2/fancy-form/src/assets/token-icon/LINK.svg new file mode 100644 index 0000000000..8484106a43 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LINK.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LKT.svg b/src/problem2/fancy-form/src/assets/token-icon/LKT.svg new file mode 100644 index 0000000000..f224ae0ff2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LKT.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LOOM.svg b/src/problem2/fancy-form/src/assets/token-icon/LOOM.svg new file mode 100644 index 0000000000..5ad0435613 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LOOM.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LOOP.svg b/src/problem2/fancy-form/src/assets/token-icon/LOOP.svg new file mode 100644 index 0000000000..6c69420439 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LOOP.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LOTA.svg b/src/problem2/fancy-form/src/assets/token-icon/LOTA.svg new file mode 100644 index 0000000000..10c742ae6d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LOTA.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LPLBTC_29MAY2025.svg b/src/problem2/fancy-form/src/assets/token-icon/LPLBTC_29MAY2025.svg new file mode 100644 index 0000000000..d75f81bcd5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LPLBTC_29MAY2025.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LPT.svg b/src/problem2/fancy-form/src/assets/token-icon/LPT.svg new file mode 100644 index 0000000000..c026842d93 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LPT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LPberaSTONE_10APR2025.svg b/src/problem2/fancy-form/src/assets/token-icon/LPberaSTONE_10APR2025.svg new file mode 100644 index 0000000000..24fd8ebe9a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LPberaSTONE_10APR2025.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LPcmETH_26JUN2025.svg b/src/problem2/fancy-form/src/assets/token-icon/LPcmETH_26JUN2025.svg new file mode 100644 index 0000000000..dd4bb6fbbc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LPcmETH_26JUN2025.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LRC.svg b/src/problem2/fancy-form/src/assets/token-icon/LRC.svg new file mode 100644 index 0000000000..2319bb063d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LRC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LSI.svg b/src/problem2/fancy-form/src/assets/token-icon/LSI.svg new file mode 100644 index 0000000000..48618f66b3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LSI.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LSK.svg b/src/problem2/fancy-form/src/assets/token-icon/LSK.svg new file mode 100644 index 0000000000..d7b38f123e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LSK.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LTC.svg b/src/problem2/fancy-form/src/assets/token-icon/LTC.svg new file mode 100644 index 0000000000..d734c3ac54 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LTC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUM.svg b/src/problem2/fancy-form/src/assets/token-icon/LUM.svg new file mode 100644 index 0000000000..8994d02ad5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUM.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUNA.svg b/src/problem2/fancy-form/src/assets/token-icon/LUNA.svg new file mode 100644 index 0000000000..6a839981dd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUNA.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUNAX.svg b/src/problem2/fancy-form/src/assets/token-icon/LUNAX.svg new file mode 100644 index 0000000000..afc19e17de --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUNAX.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUNC.svg b/src/problem2/fancy-form/src/assets/token-icon/LUNC.svg new file mode 100644 index 0000000000..fe40173c96 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUNC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUNI.svg b/src/problem2/fancy-form/src/assets/token-icon/LUNI.svg new file mode 100644 index 0000000000..1721643744 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUNI.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUNR.svg b/src/problem2/fancy-form/src/assets/token-icon/LUNR.svg new file mode 100644 index 0000000000..1b8b15237f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUNR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LUV.svg b/src/problem2/fancy-form/src/assets/token-icon/LUV.svg new file mode 100644 index 0000000000..0f7342c490 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LUV.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/LVN.svg b/src/problem2/fancy-form/src/assets/token-icon/LVN.svg new file mode 100644 index 0000000000..65aac46ea5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/LVN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/Liquid Staking Index.svg b/src/problem2/fancy-form/src/assets/token-icon/Liquid Staking Index.svg new file mode 100644 index 0000000000..58533746be --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/Liquid Staking Index.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/M87.svg b/src/problem2/fancy-form/src/assets/token-icon/M87.svg new file mode 100644 index 0000000000..77f8c882b5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/M87.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MANA.svg b/src/problem2/fancy-form/src/assets/token-icon/MANA.svg new file mode 100644 index 0000000000..0629467224 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MANA.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MANTA.svg b/src/problem2/fancy-form/src/assets/token-icon/MANTA.svg new file mode 100644 index 0000000000..1970537a1f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MANTA.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MARBLE.svg b/src/problem2/fancy-form/src/assets/token-icon/MARBLE.svg new file mode 100644 index 0000000000..4e9c2214f2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MARBLE.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MATH.svg b/src/problem2/fancy-form/src/assets/token-icon/MATH.svg new file mode 100644 index 0000000000..144d40f0bb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MATH.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MATIC.svg b/src/problem2/fancy-form/src/assets/token-icon/MATIC.svg new file mode 100644 index 0000000000..98d07c7d95 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MATIC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MDX.svg b/src/problem2/fancy-form/src/assets/token-icon/MDX.svg new file mode 100644 index 0000000000..8f3b267801 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MDX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ME.svg b/src/problem2/fancy-form/src/assets/token-icon/ME.svg new file mode 100644 index 0000000000..f354182728 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ME.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MED.svg b/src/problem2/fancy-form/src/assets/token-icon/MED.svg new file mode 100644 index 0000000000..900d139258 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MED.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MEME.svg b/src/problem2/fancy-form/src/assets/token-icon/MEME.svg new file mode 100644 index 0000000000..d784304a65 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MEME.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/METIS.svg b/src/problem2/fancy-form/src/assets/token-icon/METIS.svg new file mode 100644 index 0000000000..3bd43ffadb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/METIS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MEW.svg b/src/problem2/fancy-form/src/assets/token-icon/MEW.svg new file mode 100644 index 0000000000..dc9532c537 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MEW.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MIAW.svg b/src/problem2/fancy-form/src/assets/token-icon/MIAW.svg new file mode 100644 index 0000000000..ddf46721c7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MIAW.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MILK.svg b/src/problem2/fancy-form/src/assets/token-icon/MILK.svg new file mode 100644 index 0000000000..e6a434e9c1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MILK.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MINA.svg b/src/problem2/fancy-form/src/assets/token-icon/MINA.svg new file mode 100644 index 0000000000..d5aafd7398 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MINA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MINE.svg b/src/problem2/fancy-form/src/assets/token-icon/MINE.svg new file mode 100644 index 0000000000..ff71cab9e7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MINE.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MIOTA.svg b/src/problem2/fancy-form/src/assets/token-icon/MIOTA.svg new file mode 100644 index 0000000000..3d3c08c604 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MIOTA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MIR.svg b/src/problem2/fancy-form/src/assets/token-icon/MIR.svg new file mode 100644 index 0000000000..0247791318 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MIR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MKR.svg b/src/problem2/fancy-form/src/assets/token-icon/MKR.svg new file mode 100644 index 0000000000..9a639d1374 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MKR.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MMOG.svg b/src/problem2/fancy-form/src/assets/token-icon/MMOG.svg new file mode 100644 index 0000000000..6bb1f33b10 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MMOG.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MNT.svg b/src/problem2/fancy-form/src/assets/token-icon/MNT.svg new file mode 100644 index 0000000000..1aa231ddd4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MNTA.svg b/src/problem2/fancy-form/src/assets/token-icon/MNTA.svg new file mode 100644 index 0000000000..e3b7cfa957 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MNTA.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MNTL.svg b/src/problem2/fancy-form/src/assets/token-icon/MNTL.svg new file mode 100644 index 0000000000..71e1c497e9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MNTL.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MON.svg b/src/problem2/fancy-form/src/assets/token-icon/MON.svg new file mode 100644 index 0000000000..be988333af --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MON.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MOODENG.svg b/src/problem2/fancy-form/src/assets/token-icon/MOODENG.svg new file mode 100644 index 0000000000..679ffc5b35 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MOODENG.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MORPHO.svg b/src/problem2/fancy-form/src/assets/token-icon/MORPHO.svg new file mode 100644 index 0000000000..a27a0fb363 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MORPHO.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/MYT.svg b/src/problem2/fancy-form/src/assets/token-icon/MYT.svg new file mode 100644 index 0000000000..92cbc6468d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/MYT.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NANO.svg b/src/problem2/fancy-form/src/assets/token-icon/NANO.svg new file mode 100644 index 0000000000..9ed54dd843 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NANO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NAS.svg b/src/problem2/fancy-form/src/assets/token-icon/NAS.svg new file mode 100644 index 0000000000..071766c17c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NAT.svg b/src/problem2/fancy-form/src/assets/token-icon/NAT.svg new file mode 100644 index 0000000000..d72f7e18fc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NAT.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NEAR.svg b/src/problem2/fancy-form/src/assets/token-icon/NEAR.svg new file mode 100644 index 0000000000..7bc784c808 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NEAR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NEIROETH.svg b/src/problem2/fancy-form/src/assets/token-icon/NEIROETH.svg new file mode 100644 index 0000000000..3ced226feb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NEIROETH.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NEO.svg b/src/problem2/fancy-form/src/assets/token-icon/NEO.svg new file mode 100644 index 0000000000..d4a90e1b27 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NEO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NETA.svg b/src/problem2/fancy-form/src/assets/token-icon/NETA.svg new file mode 100644 index 0000000000..b617dbef98 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NETA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NEX.svg b/src/problem2/fancy-form/src/assets/token-icon/NEX.svg new file mode 100644 index 0000000000..34be620b9e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NEX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NEXO.svg b/src/problem2/fancy-form/src/assets/token-icon/NEXO.svg new file mode 100644 index 0000000000..4f8507a40f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NEXO.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NGM.svg b/src/problem2/fancy-form/src/assets/token-icon/NGM.svg new file mode 100644 index 0000000000..ebdc8a035d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NGM.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NIM.svg b/src/problem2/fancy-form/src/assets/token-icon/NIM.svg new file mode 100644 index 0000000000..ec74006b7c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NIM.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NKN.svg b/src/problem2/fancy-form/src/assets/token-icon/NKN.svg new file mode 100644 index 0000000000..e008ac5d71 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NKN.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NMR.svg b/src/problem2/fancy-form/src/assets/token-icon/NMR.svg new file mode 100644 index 0000000000..fcb458cafa --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NMR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NOT.svg b/src/problem2/fancy-form/src/assets/token-icon/NOT.svg new file mode 100644 index 0000000000..5561ccec77 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NOT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NOTE.svg b/src/problem2/fancy-form/src/assets/token-icon/NOTE.svg new file mode 100644 index 0000000000..9f44e1971f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NOTE.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NTRN-dATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/NTRN-dATOM.svg new file mode 100644 index 0000000000..5b3303f21b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NTRN-dATOM.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NTRN.svg b/src/problem2/fancy-form/src/assets/token-icon/NTRN.svg new file mode 100644 index 0000000000..150a6137d2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NTRN.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/NXM.svg b/src/problem2/fancy-form/src/assets/token-icon/NXM.svg new file mode 100644 index 0000000000..165bc3b984 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/NXM.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OCEAN.svg b/src/problem2/fancy-form/src/assets/token-icon/OCEAN.svg new file mode 100644 index 0000000000..ad0f99d6ae --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OCEAN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OCH.svg b/src/problem2/fancy-form/src/assets/token-icon/OCH.svg new file mode 100644 index 0000000000..51c3f8e039 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OCH.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OGN.svg b/src/problem2/fancy-form/src/assets/token-icon/OGN.svg new file mode 100644 index 0000000000..e15dbac858 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OGN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OKB.svg b/src/problem2/fancy-form/src/assets/token-icon/OKB.svg new file mode 100644 index 0000000000..786f75ba42 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OKB.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OKT.svg b/src/problem2/fancy-form/src/assets/token-icon/OKT.svg new file mode 100644 index 0000000000..0afcd8a1cf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OKT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OM.svg b/src/problem2/fancy-form/src/assets/token-icon/OM.svg new file mode 100644 index 0000000000..6305bd1560 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OM.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OMG.svg b/src/problem2/fancy-form/src/assets/token-icon/OMG.svg new file mode 100644 index 0000000000..2d3d8ae8e6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OMG.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OMG_2.svg b/src/problem2/fancy-form/src/assets/token-icon/OMG_2.svg new file mode 100644 index 0000000000..5735f9f726 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OMG_2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OMI.svg b/src/problem2/fancy-form/src/assets/token-icon/OMI.svg new file mode 100644 index 0000000000..b1d5020084 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OMI.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OMNI.svg b/src/problem2/fancy-form/src/assets/token-icon/OMNI.svg new file mode 100644 index 0000000000..ea1ce8353d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OMNI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ONDO.svg b/src/problem2/fancy-form/src/assets/token-icon/ONDO.svg new file mode 100644 index 0000000000..84482f794d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ONDO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ONE.svg b/src/problem2/fancy-form/src/assets/token-icon/ONE.svg new file mode 100644 index 0000000000..63c1260c06 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ONE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ONT.svg b/src/problem2/fancy-form/src/assets/token-icon/ONT.svg new file mode 100644 index 0000000000..93378b4745 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ONT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OP.svg b/src/problem2/fancy-form/src/assets/token-icon/OP.svg new file mode 100644 index 0000000000..b5feac7946 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OPUL.svg b/src/problem2/fancy-form/src/assets/token-icon/OPUL.svg new file mode 100644 index 0000000000..c7ae4dbf3e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OPUL.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ORDI.svg b/src/problem2/fancy-form/src/assets/token-icon/ORDI.svg new file mode 100644 index 0000000000..380181270d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ORDI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ORION.svg b/src/problem2/fancy-form/src/assets/token-icon/ORION.svg new file mode 100644 index 0000000000..b5f9ba6fff --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ORION.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ORNE.svg b/src/problem2/fancy-form/src/assets/token-icon/ORNE.svg new file mode 100644 index 0000000000..d986b3f31e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ORNE.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OSMO.svg b/src/problem2/fancy-form/src/assets/token-icon/OSMO.svg new file mode 100644 index 0000000000..e98545517b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OSMO.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OXT.svg b/src/problem2/fancy-form/src/assets/token-icon/OXT.svg new file mode 100644 index 0000000000..bba9547da1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OXT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/OXY.svg b/src/problem2/fancy-form/src/assets/token-icon/OXY.svg new file mode 100644 index 0000000000..9175a0b900 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/OXY.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PAX.svg b/src/problem2/fancy-form/src/assets/token-icon/PAX.svg new file mode 100644 index 0000000000..32b0ef8211 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PAX.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PAXG.svg b/src/problem2/fancy-form/src/assets/token-icon/PAXG.svg new file mode 100644 index 0000000000..5ff89051f8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PAXG.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PENDLE.svg b/src/problem2/fancy-form/src/assets/token-icon/PENDLE.svg new file mode 100644 index 0000000000..367540fbb0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PENDLE.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PENGU.svg b/src/problem2/fancy-form/src/assets/token-icon/PENGU.svg new file mode 100644 index 0000000000..a5c99add38 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PENGU.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PEPE.svg b/src/problem2/fancy-form/src/assets/token-icon/PEPE.svg new file mode 100644 index 0000000000..1e6ba151a3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PEPE.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PHT.svg b/src/problem2/fancy-form/src/assets/token-icon/PHT.svg new file mode 100644 index 0000000000..d515118058 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PHT.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PLAY.svg b/src/problem2/fancy-form/src/assets/token-icon/PLAY.svg new file mode 100644 index 0000000000..bae2577420 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PLAY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PLQ.svg b/src/problem2/fancy-form/src/assets/token-icon/PLQ.svg new file mode 100644 index 0000000000..31b353bb45 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PLQ.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PLY.svg b/src/problem2/fancy-form/src/assets/token-icon/PLY.svg new file mode 100644 index 0000000000..c79b320445 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PLY.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PNUT.svg b/src/problem2/fancy-form/src/assets/token-icon/PNUT.svg new file mode 100644 index 0000000000..90abdb384d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PNUT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/POL.svg b/src/problem2/fancy-form/src/assets/token-icon/POL.svg new file mode 100644 index 0000000000..ceff03709c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/POL.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/POLY.svg b/src/problem2/fancy-form/src/assets/token-icon/POLY.svg new file mode 100644 index 0000000000..b894fef5d5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/POLY.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/POPCAT.svg b/src/problem2/fancy-form/src/assets/token-icon/POPCAT.svg new file mode 100644 index 0000000000..ab8fa4c5e5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/POPCAT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PORT.svg b/src/problem2/fancy-form/src/assets/token-icon/PORT.svg new file mode 100644 index 0000000000..d846537361 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PORT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PROM.svg b/src/problem2/fancy-form/src/assets/token-icon/PROM.svg new file mode 100644 index 0000000000..044c9e3576 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PROM.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PSI.svg b/src/problem2/fancy-form/src/assets/token-icon/PSI.svg new file mode 100644 index 0000000000..674744b4e5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PSI.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PSTAKE.svg b/src/problem2/fancy-form/src/assets/token-icon/PSTAKE.svg new file mode 100644 index 0000000000..caf13d8d63 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PSTAKE.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PTLBTC_29MAY2025.svg b/src/problem2/fancy-form/src/assets/token-icon/PTLBTC_29MAY2025.svg new file mode 100644 index 0000000000..afb01c923b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PTLBTC_29MAY2025.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PTMETH_26DEC2024.svg b/src/problem2/fancy-form/src/assets/token-icon/PTMETH_26DEC2024.svg new file mode 100644 index 0000000000..3256ec9f5f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PTMETH_26DEC2024.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PTberaSTONE_10APR2025.svg b/src/problem2/fancy-form/src/assets/token-icon/PTberaSTONE_10APR2025.svg new file mode 100644 index 0000000000..1444e75dfb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PTberaSTONE_10APR2025.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PTcmETH_26JUN2025.svg b/src/problem2/fancy-form/src/assets/token-icon/PTcmETH_26JUN2025.svg new file mode 100644 index 0000000000..860a1e3892 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PTcmETH_26JUN2025.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PUDGY.svg b/src/problem2/fancy-form/src/assets/token-icon/PUDGY.svg new file mode 100644 index 0000000000..239424d8cd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PUDGY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PUMP.svg b/src/problem2/fancy-form/src/assets/token-icon/PUMP.svg new file mode 100644 index 0000000000..3b8ac28fda --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PUMP.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PUNDIX.svg b/src/problem2/fancy-form/src/assets/token-icon/PUNDIX.svg new file mode 100644 index 0000000000..a522d0d26e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PUNDIX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PURR.svg b/src/problem2/fancy-form/src/assets/token-icon/PURR.svg new file mode 100644 index 0000000000..c8b82375cb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PURR.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PURSE.svg b/src/problem2/fancy-form/src/assets/token-icon/PURSE.svg new file mode 100644 index 0000000000..9188e092de --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PURSE.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/PYTH.svg b/src/problem2/fancy-form/src/assets/token-icon/PYTH.svg new file mode 100644 index 0000000000..b34cc9ea3d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/PYTH.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/QCK.svg b/src/problem2/fancy-form/src/assets/token-icon/QCK.svg new file mode 100644 index 0000000000..358cb7dbbf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/QCK.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/QKC.svg b/src/problem2/fancy-form/src/assets/token-icon/QKC.svg new file mode 100644 index 0000000000..e312777506 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/QKC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/QNT.svg b/src/problem2/fancy-form/src/assets/token-icon/QNT.svg new file mode 100644 index 0000000000..a611eaa24a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/QNT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/QTUM.svg b/src/problem2/fancy-form/src/assets/token-icon/QTUM.svg new file mode 100644 index 0000000000..e96f6cf2ca --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/QTUM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RAY.svg b/src/problem2/fancy-form/src/assets/token-icon/RAY.svg new file mode 100644 index 0000000000..e769284e27 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RAY.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RBN.svg b/src/problem2/fancy-form/src/assets/token-icon/RBN.svg new file mode 100644 index 0000000000..ef40c376d8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RBN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/REEF.svg b/src/problem2/fancy-form/src/assets/token-icon/REEF.svg new file mode 100644 index 0000000000..5c777f840f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/REEF.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/REGEN.svg b/src/problem2/fancy-form/src/assets/token-icon/REGEN.svg new file mode 100644 index 0000000000..242a4c66c9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/REGEN.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/REN.svg b/src/problem2/fancy-form/src/assets/token-icon/REN.svg new file mode 100644 index 0000000000..bae08ca56f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/REN.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/REP.svg b/src/problem2/fancy-form/src/assets/token-icon/REP.svg new file mode 100644 index 0000000000..c311970b6d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/REP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/REV.svg b/src/problem2/fancy-form/src/assets/token-icon/REV.svg new file mode 100644 index 0000000000..6dcaa131aa --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/REV.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RLB.svg b/src/problem2/fancy-form/src/assets/token-icon/RLB.svg new file mode 100644 index 0000000000..344fe8e022 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RLB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RLC.svg b/src/problem2/fancy-form/src/assets/token-icon/RLC.svg new file mode 100644 index 0000000000..c816edf016 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RLC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RNDR.svg b/src/problem2/fancy-form/src/assets/token-icon/RNDR.svg new file mode 100644 index 0000000000..031e8816b3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RNDR.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ROAR.svg b/src/problem2/fancy-form/src/assets/token-icon/ROAR.svg new file mode 100644 index 0000000000..d29ab09634 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ROAR.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ROWAN.svg b/src/problem2/fancy-form/src/assets/token-icon/ROWAN.svg new file mode 100644 index 0000000000..6b395742d4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ROWAN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RSR.svg b/src/problem2/fancy-form/src/assets/token-icon/RSR.svg new file mode 100644 index 0000000000..f85bb78c23 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RSR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RUNE.svg b/src/problem2/fancy-form/src/assets/token-icon/RUNE.svg new file mode 100644 index 0000000000..ccbb65ceff --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RUNE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/RVN.svg b/src/problem2/fancy-form/src/assets/token-icon/RVN.svg new file mode 100644 index 0000000000..4d6d30eeef --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/RVN.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/S.svg b/src/problem2/fancy-form/src/assets/token-icon/S.svg new file mode 100644 index 0000000000..b216a1804f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/S.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SAFEMOON.svg b/src/problem2/fancy-form/src/assets/token-icon/SAFEMOON.svg new file mode 100644 index 0000000000..9ff12873a5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SAFEMOON.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SAGA.svg b/src/problem2/fancy-form/src/assets/token-icon/SAGA.svg new file mode 100644 index 0000000000..53455ea0dd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SAGA.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SAND.svg b/src/problem2/fancy-form/src/assets/token-icon/SAND.svg new file mode 100644 index 0000000000..4e01196b45 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SAND.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SAYVE.svg b/src/problem2/fancy-form/src/assets/token-icon/SAYVE.svg new file mode 100644 index 0000000000..2cea35fc51 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SAYVE.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SC.svg b/src/problem2/fancy-form/src/assets/token-icon/SC.svg new file mode 100644 index 0000000000..aebc27644b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SCRT.svg b/src/problem2/fancy-form/src/assets/token-icon/SCRT.svg new file mode 100644 index 0000000000..9451de4116 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SCRT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SDT.svg b/src/problem2/fancy-form/src/assets/token-icon/SDT.svg new file mode 100644 index 0000000000..222a72897f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SDT.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SEI.svg b/src/problem2/fancy-form/src/assets/token-icon/SEI.svg new file mode 100644 index 0000000000..65ea99277e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SEI.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SET.svg b/src/problem2/fancy-form/src/assets/token-icon/SET.svg new file mode 100644 index 0000000000..f46a6ba24f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SET.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SGT.svg b/src/problem2/fancy-form/src/assets/token-icon/SGT.svg new file mode 100644 index 0000000000..a975dece90 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SGT.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SHD.svg b/src/problem2/fancy-form/src/assets/token-icon/SHD.svg new file mode 100644 index 0000000000..bdb7e6c29c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SHD.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SHIB.svg b/src/problem2/fancy-form/src/assets/token-icon/SHIB.svg new file mode 100644 index 0000000000..adbb2f009b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SHIB.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SHIDO.svg b/src/problem2/fancy-form/src/assets/token-icon/SHIDO.svg new file mode 100644 index 0000000000..bd7deeeb4b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SHIDO.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SITY.svg b/src/problem2/fancy-form/src/assets/token-icon/SITY.svg new file mode 100644 index 0000000000..7cfb8209bf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SITY.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SLERF.svg b/src/problem2/fancy-form/src/assets/token-icon/SLERF.svg new file mode 100644 index 0000000000..713f29af95 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SLERF.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SNT.svg b/src/problem2/fancy-form/src/assets/token-icon/SNT.svg new file mode 100644 index 0000000000..cc8ad2df4c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SNX.svg b/src/problem2/fancy-form/src/assets/token-icon/SNX.svg new file mode 100644 index 0000000000..14e0591389 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SNX.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SOL.svg b/src/problem2/fancy-form/src/assets/token-icon/SOL.svg new file mode 100644 index 0000000000..0568e80881 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SOL.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SOLETH.svg b/src/problem2/fancy-form/src/assets/token-icon/SOLETH.svg new file mode 100644 index 0000000000..c7f81893f8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SOLETH.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SOM.svg b/src/problem2/fancy-form/src/assets/token-icon/SOM.svg new file mode 100644 index 0000000000..778bf9b5c9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SOM.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SOMM.svg b/src/problem2/fancy-form/src/assets/token-icon/SOMM.svg new file mode 100644 index 0000000000..fa82d261ee --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SOMM.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SPEC.svg b/src/problem2/fancy-form/src/assets/token-icon/SPEC.svg new file mode 100644 index 0000000000..75c9b37b2b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SPEC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SRM.svg b/src/problem2/fancy-form/src/assets/token-icon/SRM.svg new file mode 100644 index 0000000000..e488de82db --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SRM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SRV.svg b/src/problem2/fancy-form/src/assets/token-icon/SRV.svg new file mode 100644 index 0000000000..b15a61c77f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SRV.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STARS.svg b/src/problem2/fancy-form/src/assets/token-icon/STARS.svg new file mode 100644 index 0000000000..de6d376db8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STARS.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STEEM.svg b/src/problem2/fancy-form/src/assets/token-icon/STEEM.svg new file mode 100644 index 0000000000..503009b90d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STEEM.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STMX.svg b/src/problem2/fancy-form/src/assets/token-icon/STMX.svg new file mode 100644 index 0000000000..976e86474b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STMX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STORJ.svg b/src/problem2/fancy-form/src/assets/token-icon/STORJ.svg new file mode 100644 index 0000000000..85a332a6ce --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STORJ.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STRAX.svg b/src/problem2/fancy-form/src/assets/token-icon/STRAX.svg new file mode 100644 index 0000000000..a34822931d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STRAX.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STRD.svg b/src/problem2/fancy-form/src/assets/token-icon/STRD.svg new file mode 100644 index 0000000000..f25a48536c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STRD.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STREAM.svg b/src/problem2/fancy-form/src/assets/token-icon/STREAM.svg new file mode 100644 index 0000000000..fba4ce0609 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STREAM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STRK.svg b/src/problem2/fancy-form/src/assets/token-icon/STRK.svg new file mode 100644 index 0000000000..22c139824d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STRK.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STT.svg b/src/problem2/fancy-form/src/assets/token-icon/STT.svg new file mode 100644 index 0000000000..d37590a8d3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/STX.svg b/src/problem2/fancy-form/src/assets/token-icon/STX.svg new file mode 100644 index 0000000000..ed89fc9276 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/STX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SUI.svg b/src/problem2/fancy-form/src/assets/token-icon/SUI.svg new file mode 100644 index 0000000000..7687a88042 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SUI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SUN.svg b/src/problem2/fancy-form/src/assets/token-icon/SUN.svg new file mode 100644 index 0000000000..1159b6cbfd --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SUN.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SUSHI.svg b/src/problem2/fancy-form/src/assets/token-icon/SUSHI.svg new file mode 100644 index 0000000000..e118f213b5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SUSHI.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SWTH-LEGACY.svg b/src/problem2/fancy-form/src/assets/token-icon/SWTH-LEGACY.svg new file mode 100644 index 0000000000..60ba0650e1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SWTH-LEGACY.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SWTH.svg b/src/problem2/fancy-form/src/assets/token-icon/SWTH.svg new file mode 100644 index 0000000000..353c1b5bcc --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SWTH.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/SXP.svg b/src/problem2/fancy-form/src/assets/token-icon/SXP.svg new file mode 100644 index 0000000000..89fd3b147e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/SXP.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TAO.svg b/src/problem2/fancy-form/src/assets/token-icon/TAO.svg new file mode 100644 index 0000000000..9f0dbfcf8e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TAO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TEL.svg b/src/problem2/fancy-form/src/assets/token-icon/TEL.svg new file mode 100644 index 0000000000..2992514bf1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TEL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TFUEL.svg b/src/problem2/fancy-form/src/assets/token-icon/TFUEL.svg new file mode 100644 index 0000000000..d57d7d9493 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TFUEL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/THETA.svg b/src/problem2/fancy-form/src/assets/token-icon/THETA.svg new file mode 100644 index 0000000000..8ff93f4019 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/THETA.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/THT.svg b/src/problem2/fancy-form/src/assets/token-icon/THT.svg new file mode 100644 index 0000000000..8ee5eb9ff3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/THT.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TIA.svg b/src/problem2/fancy-form/src/assets/token-icon/TIA.svg new file mode 100644 index 0000000000..41d8ab96c1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TIA.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TICK.svg b/src/problem2/fancy-form/src/assets/token-icon/TICK.svg new file mode 100644 index 0000000000..3be70db269 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TICK.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TITAN.svg b/src/problem2/fancy-form/src/assets/token-icon/TITAN.svg new file mode 100644 index 0000000000..d52faa138c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TITAN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TLAND.svg b/src/problem2/fancy-form/src/assets/token-icon/TLAND.svg new file mode 100644 index 0000000000..9f9e3e2330 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TLAND.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TLM.svg b/src/problem2/fancy-form/src/assets/token-icon/TLM.svg new file mode 100644 index 0000000000..1fe3283fee --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TLM.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TOMO.svg b/src/problem2/fancy-form/src/assets/token-icon/TOMO.svg new file mode 100644 index 0000000000..45bda83d4b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TOMO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TON.svg b/src/problem2/fancy-form/src/assets/token-icon/TON.svg new file mode 100644 index 0000000000..c1e0b91485 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TON.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TPC.svg b/src/problem2/fancy-form/src/assets/token-icon/TPC.svg new file mode 100644 index 0000000000..29f8a4af8d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TPC.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TRAXX.svg b/src/problem2/fancy-form/src/assets/token-icon/TRAXX.svg new file mode 100644 index 0000000000..05c2ec0999 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TRAXX.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TRB.svg b/src/problem2/fancy-form/src/assets/token-icon/TRB.svg new file mode 100644 index 0000000000..e319e65d7e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TRB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TRU.svg b/src/problem2/fancy-form/src/assets/token-icon/TRU.svg new file mode 100644 index 0000000000..29ddc8ac24 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TRU.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TRUMP.svg b/src/problem2/fancy-form/src/assets/token-icon/TRUMP.svg new file mode 100644 index 0000000000..2571b5e20f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TRUMP.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TRX.svg b/src/problem2/fancy-form/src/assets/token-icon/TRX.svg new file mode 100644 index 0000000000..c105ddc307 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TRX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TTT.svg b/src/problem2/fancy-form/src/assets/token-icon/TTT.svg new file mode 100644 index 0000000000..13e6080a8a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TTT.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/TUSD.svg new file mode 100644 index 0000000000..712ec923da --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TUSD.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TWD.svg b/src/problem2/fancy-form/src/assets/token-icon/TWD.svg new file mode 100644 index 0000000000..014f525557 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TWD.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/TWT.svg b/src/problem2/fancy-form/src/assets/token-icon/TWT.svg new file mode 100644 index 0000000000..b67bf37535 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/TWT.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/Token.svg b/src/problem2/fancy-form/src/assets/token-icon/Token.svg new file mode 100644 index 0000000000..bed64e2942 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/Token.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UBQ.svg b/src/problem2/fancy-form/src/assets/token-icon/UBQ.svg new file mode 100644 index 0000000000..139af049ce --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UBQ.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UMEE.svg b/src/problem2/fancy-form/src/assets/token-icon/UMEE.svg new file mode 100644 index 0000000000..f9243257df --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UMEE.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UNA.svg b/src/problem2/fancy-form/src/assets/token-icon/UNA.svg new file mode 100644 index 0000000000..077c1555e7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UNA.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UNI.svg b/src/problem2/fancy-form/src/assets/token-icon/UNI.svg new file mode 100644 index 0000000000..37996b6c05 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UNI.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UOS.svg b/src/problem2/fancy-form/src/assets/token-icon/UOS.svg new file mode 100644 index 0000000000..eb07c3cce8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UOS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USC-Minted.svg b/src/problem2/fancy-form/src/assets/token-icon/USC-Minted.svg new file mode 100644 index 0000000000..466cda74f0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USC-Minted.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USC.svg b/src/problem2/fancy-form/src/assets/token-icon/USC.svg new file mode 100644 index 0000000000..32bd9541f5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USC.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USD.svg b/src/problem2/fancy-form/src/assets/token-icon/USD.svg new file mode 100644 index 0000000000..abf67ab105 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USD.svg @@ -0,0 +1,8 @@ + + + Token Symbol/USD + + + + + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDC-dATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/USDC-dATOM.svg new file mode 100644 index 0000000000..7202b50ae7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDC-dATOM.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDC.e.svg b/src/problem2/fancy-form/src/assets/token-icon/USDC.e.svg new file mode 100644 index 0000000000..eee4251a7b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDC.e.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDC.grv.svg b/src/problem2/fancy-form/src/assets/token-icon/USDC.grv.svg new file mode 100644 index 0000000000..458ab4901a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDC.grv.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDC.svg b/src/problem2/fancy-form/src/assets/token-icon/USDC.svg new file mode 100644 index 0000000000..eee4251a7b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDP.svg b/src/problem2/fancy-form/src/assets/token-icon/USDP.svg new file mode 100644 index 0000000000..b7e76ff9d1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDT.svg b/src/problem2/fancy-form/src/assets/token-icon/USDT.svg new file mode 100644 index 0000000000..8b3986d057 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USDY.svg b/src/problem2/fancy-form/src/assets/token-icon/USDY.svg new file mode 100644 index 0000000000..118da5939c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USDY.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USK.svg b/src/problem2/fancy-form/src/assets/token-icon/USK.svg new file mode 100644 index 0000000000..15ba03fe9d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USK.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/UST.svg b/src/problem2/fancy-form/src/assets/token-icon/UST.svg new file mode 100644 index 0000000000..2a0a597074 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/UST.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/USUAL.svg b/src/problem2/fancy-form/src/assets/token-icon/USUAL.svg new file mode 100644 index 0000000000..1bdf52827d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/USUAL.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/VDL.svg b/src/problem2/fancy-form/src/assets/token-icon/VDL.svg new file mode 100644 index 0000000000..d839e0da4d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/VDL.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/VET.svg b/src/problem2/fancy-form/src/assets/token-icon/VET.svg new file mode 100644 index 0000000000..88ebf982a5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/VET.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/VIRTUAL.svg b/src/problem2/fancy-form/src/assets/token-icon/VIRTUAL.svg new file mode 100644 index 0000000000..7d623039a9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/VIRTUAL.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/VKR.svg b/src/problem2/fancy-form/src/assets/token-icon/VKR.svg new file mode 100644 index 0000000000..cb3c68d595 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/VKR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/VRTX.svg b/src/problem2/fancy-form/src/assets/token-icon/VRTX.svg new file mode 100644 index 0000000000..8cb3dc30ef --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/VRTX.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/W.svg b/src/problem2/fancy-form/src/assets/token-icon/W.svg new file mode 100644 index 0000000000..95823f2252 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/W.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WAL.svg b/src/problem2/fancy-form/src/assets/token-icon/WAL.svg new file mode 100644 index 0000000000..8d06c07e14 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WAL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WAVAX.svg b/src/problem2/fancy-form/src/assets/token-icon/WAVAX.svg new file mode 100644 index 0000000000..e244ad3aa6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WAVAX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WAVE.svg b/src/problem2/fancy-form/src/assets/token-icon/WAVE.svg new file mode 100644 index 0000000000..2ca6ac0708 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WAVE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WBNB.svg b/src/problem2/fancy-form/src/assets/token-icon/WBNB.svg new file mode 100644 index 0000000000..e45c696b5c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WBNB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WBTC.svg b/src/problem2/fancy-form/src/assets/token-icon/WBTC.svg new file mode 100644 index 0000000000..b597b84a4a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WBTC.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WETH.svg b/src/problem2/fancy-form/src/assets/token-icon/WETH.svg new file mode 100644 index 0000000000..cba6f1d783 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WETH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WHALE.svg b/src/problem2/fancy-form/src/assets/token-icon/WHALE.svg new file mode 100644 index 0000000000..a42a2449d8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WHALE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WIF.svg b/src/problem2/fancy-form/src/assets/token-icon/WIF.svg new file mode 100644 index 0000000000..6df4ea15a2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WIF.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WIN.svg b/src/problem2/fancy-form/src/assets/token-icon/WIN.svg new file mode 100644 index 0000000000..bc2435409b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WIN.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WLD.svg b/src/problem2/fancy-form/src/assets/token-icon/WLD.svg new file mode 100644 index 0000000000..62191032d6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WLD.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WMATIC.svg b/src/problem2/fancy-form/src/assets/token-icon/WMATIC.svg new file mode 100644 index 0000000000..ba0630b510 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WMATIC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WMNT.svg b/src/problem2/fancy-form/src/assets/token-icon/WMNT.svg new file mode 100644 index 0000000000..8b8784b36a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WMNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/WMON.png b/src/problem2/fancy-form/src/assets/token-icon/WMON.png new file mode 100644 index 0000000000000000000000000000000000000000..452cae24b2c588ca08de28a09ee5ed1a99d599e6 GIT binary patch literal 826 zcmV-A1I7G_P)JyI+|hhb^x;`Js-NNz}Q3Is?XrH4=vpullw zH#z+32AS& z@=uMO1wYoF3~KyGgY!XOd7Z4q6p-b}*elVCRGLA)BtfAlLB9uZ(6OQQ)tRUP(SBBK zTwEV1aAQtk0mwuzXR-_)R1~+x{O&hV)OOj?R62$HwC#SPsIkrP@wHdk^= z=qpL4!#oTbFAc<-LE*xpJc{{2+lC*XZP(f;sG7cUuYAxOsCDda?6)Ab3k(i_@% literal 0 HcmV?d00001 diff --git a/src/problem2/fancy-form/src/assets/token-icon/WRX.svg b/src/problem2/fancy-form/src/assets/token-icon/WRX.svg new file mode 100644 index 0000000000..543f570909 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/WRX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XCAD.svg b/src/problem2/fancy-form/src/assets/token-icon/XCAD.svg new file mode 100644 index 0000000000..545a88d1b9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XCAD.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XDC.svg b/src/problem2/fancy-form/src/assets/token-icon/XDC.svg new file mode 100644 index 0000000000..c90381022e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XEM.svg b/src/problem2/fancy-form/src/assets/token-icon/XEM.svg new file mode 100644 index 0000000000..da54e72a22 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XEM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XKI.svg b/src/problem2/fancy-form/src/assets/token-icon/XKI.svg new file mode 100644 index 0000000000..dd5fea7cf0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XKI.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XLM.svg b/src/problem2/fancy-form/src/assets/token-icon/XLM.svg new file mode 100644 index 0000000000..d836619c15 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XLM.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XMR.svg b/src/problem2/fancy-form/src/assets/token-icon/XMR.svg new file mode 100644 index 0000000000..475a95cb7d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XMR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XPRT.svg b/src/problem2/fancy-form/src/assets/token-icon/XPRT.svg new file mode 100644 index 0000000000..7ecd4ace95 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XPRT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XRP.svg b/src/problem2/fancy-form/src/assets/token-icon/XRP.svg new file mode 100644 index 0000000000..b3d441bf40 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XRP.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XSGD.svg b/src/problem2/fancy-form/src/assets/token-icon/XSGD.svg new file mode 100644 index 0000000000..f04caab93b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XSGD.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XTRA.svg b/src/problem2/fancy-form/src/assets/token-icon/XTRA.svg new file mode 100644 index 0000000000..1c6367d3be --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XTRA.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XTZ.svg b/src/problem2/fancy-form/src/assets/token-icon/XTZ.svg new file mode 100644 index 0000000000..28b924e5c7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XTZ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XVG.svg b/src/problem2/fancy-form/src/assets/token-icon/XVG.svg new file mode 100644 index 0000000000..537378cff6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XVG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/XVS.svg b/src/problem2/fancy-form/src/assets/token-icon/XVS.svg new file mode 100644 index 0000000000..3176f9fb66 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/XVS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/YAKI.svg b/src/problem2/fancy-form/src/assets/token-icon/YAKI.svg new file mode 100644 index 0000000000..5179eb95aa --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/YAKI.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/YAM.svg b/src/problem2/fancy-form/src/assets/token-icon/YAM.svg new file mode 100644 index 0000000000..2e8a654216 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/YAM.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/YFI.svg b/src/problem2/fancy-form/src/assets/token-icon/YFI.svg new file mode 100644 index 0000000000..b7674608b7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/YFI.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/YieldUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/YieldUSD.svg new file mode 100644 index 0000000000..e435a687c9 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/YieldUSD.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZCH.svg b/src/problem2/fancy-form/src/assets/token-icon/ZCH.svg new file mode 100644 index 0000000000..1e9d4250d4 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZCH.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZEC.svg b/src/problem2/fancy-form/src/assets/token-icon/ZEC.svg new file mode 100644 index 0000000000..b6b86dcc1d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZEC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZEN.svg b/src/problem2/fancy-form/src/assets/token-icon/ZEN.svg new file mode 100644 index 0000000000..b305169acb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZEN.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZIL.svg b/src/problem2/fancy-form/src/assets/token-icon/ZIL.svg new file mode 100644 index 0000000000..c89e8ce16f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZIL.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZRO.svg b/src/problem2/fancy-form/src/assets/token-icon/ZRO.svg new file mode 100644 index 0000000000..e485e3b2ab --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZRO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZRX.svg b/src/problem2/fancy-form/src/assets/token-icon/ZRX.svg new file mode 100644 index 0000000000..f42e914a6a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZRX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ZWAP.svg b/src/problem2/fancy-form/src/assets/token-icon/ZWAP.svg new file mode 100644 index 0000000000..130d14d73b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ZWAP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ampKUJI.svg b/src/problem2/fancy-form/src/assets/token-icon/ampKUJI.svg new file mode 100644 index 0000000000..2692787da5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ampKUJI.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ampLUNA.svg b/src/problem2/fancy-form/src/assets/token-icon/ampLUNA.svg new file mode 100644 index 0000000000..ebeab58687 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ampLUNA.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/axlUSDC.svg b/src/problem2/fancy-form/src/assets/token-icon/axlUSDC.svg new file mode 100644 index 0000000000..fc879f679a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/axlUSDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/bCFX.svg b/src/problem2/fancy-form/src/assets/token-icon/bCFX.svg new file mode 100644 index 0000000000..07e8c434db --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/bCFX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/bNEO.svg b/src/problem2/fancy-form/src/assets/token-icon/bNEO.svg new file mode 100644 index 0000000000..561b2282d8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/bNEO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/beraSTONE.svg b/src/problem2/fancy-form/src/assets/token-icon/beraSTONE.svg new file mode 100644 index 0000000000..3da255f504 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/beraSTONE.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/cUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/cUSD.svg new file mode 100644 index 0000000000..33407ebc96 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/cUSD.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/cbBTC.svg b/src/problem2/fancy-form/src/assets/token-icon/cbBTC.svg new file mode 100644 index 0000000000..77fee5c013 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/cbBTC.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/cbETH.svg b/src/problem2/fancy-form/src/assets/token-icon/cbETH.svg new file mode 100644 index 0000000000..5a18b92644 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/cbETH.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/cmETH.svg b/src/problem2/fancy-form/src/assets/token-icon/cmETH.svg new file mode 100644 index 0000000000..0a82791d04 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/cmETH.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/dATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/dATOM.svg new file mode 100644 index 0000000000..b73e04155e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/dATOM.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/dGLP.svg b/src/problem2/fancy-form/src/assets/token-icon/dGLP.svg new file mode 100644 index 0000000000..84cac9cdeb --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/dGLP.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/dINJ.svg b/src/problem2/fancy-form/src/assets/token-icon/dINJ.svg new file mode 100644 index 0000000000..05b1763cc2 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/dINJ.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/dXCAD.svg b/src/problem2/fancy-form/src/assets/token-icon/dXCAD.svg new file mode 100644 index 0000000000..881f50fd02 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/dXCAD.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/eGLD(1).svg b/src/problem2/fancy-form/src/assets/token-icon/eGLD(1).svg new file mode 100644 index 0000000000..e42ad2510e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/eGLD(1).svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/ePLAY.svg b/src/problem2/fancy-form/src/assets/token-icon/ePLAY.svg new file mode 100644 index 0000000000..bae2577420 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/ePLAY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/esFLUO.svg b/src/problem2/fancy-form/src/assets/token-icon/esFLUO.svg new file mode 100644 index 0000000000..0b69ed3189 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/esFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/gZIL.svg b/src/problem2/fancy-form/src/assets/token-icon/gZIL.svg new file mode 100644 index 0000000000..27334389ba --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/gZIL.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/iSEI.svg b/src/problem2/fancy-form/src/assets/token-icon/iSEI.svg new file mode 100644 index 0000000000..246b86f8a1 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/iSEI.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/iUSD.svg b/src/problem2/fancy-form/src/assets/token-icon/iUSD.svg new file mode 100644 index 0000000000..ca263a0474 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/iUSD.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/mETH.svg b/src/problem2/fancy-form/src/assets/token-icon/mETH.svg new file mode 100644 index 0000000000..6d6d5d0762 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/mETH.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/milkTIA.svg b/src/problem2/fancy-form/src/assets/token-icon/milkTIA.svg new file mode 100644 index 0000000000..d595abfa30 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/milkTIA.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/nLEND.svg b/src/problem2/fancy-form/src/assets/token-icon/nLEND.svg new file mode 100644 index 0000000000..d5c91b274f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/nLEND.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/nNEO.svg b/src/problem2/fancy-form/src/assets/token-icon/nNEO.svg new file mode 100644 index 0000000000..d4a90e1b27 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/nNEO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/rATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/rATOM.svg new file mode 100644 index 0000000000..8cd5f8056f --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/rATOM.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/rSWTH.svg b/src/problem2/fancy-form/src/assets/token-icon/rSWTH.svg new file mode 100644 index 0000000000..d5250ff90d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/rSWTH.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/sARCH.svg b/src/problem2/fancy-form/src/assets/token-icon/sARCH.svg new file mode 100644 index 0000000000..3ec2b656f0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/sARCH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/stATOM.svg new file mode 100644 index 0000000000..c3e505f8b3 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stATOM.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stDYDX.svg b/src/problem2/fancy-form/src/assets/token-icon/stDYDX.svg new file mode 100644 index 0000000000..6d851637a8 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stDYDX.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stDYM.svg b/src/problem2/fancy-form/src/assets/token-icon/stDYM.svg new file mode 100644 index 0000000000..d961755725 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stDYM.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stETH.svg b/src/problem2/fancy-form/src/assets/token-icon/stETH.svg new file mode 100644 index 0000000000..8c490e47f0 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stETH.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stEVMOS.svg b/src/problem2/fancy-form/src/assets/token-icon/stEVMOS.svg new file mode 100644 index 0000000000..a2a8888208 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stEVMOS.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/stFLUO.svg b/src/problem2/fancy-form/src/assets/token-icon/stFLUO.svg new file mode 100644 index 0000000000..bf182c96de --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stIBCX.svg b/src/problem2/fancy-form/src/assets/token-icon/stIBCX.svg new file mode 100644 index 0000000000..8a10d241d5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stIBCX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stINJ.svg b/src/problem2/fancy-form/src/assets/token-icon/stINJ.svg new file mode 100644 index 0000000000..6b97bec4f7 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stINJ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stJUNO.svg b/src/problem2/fancy-form/src/assets/token-icon/stJUNO.svg new file mode 100644 index 0000000000..8d92f375c6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stJUNO.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stLUNA.svg b/src/problem2/fancy-form/src/assets/token-icon/stLUNA.svg new file mode 100644 index 0000000000..606be7947d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stLUNA.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/problem2/fancy-form/src/assets/token-icon/stOKT.svg b/src/problem2/fancy-form/src/assets/token-icon/stOKT.svg new file mode 100644 index 0000000000..33b541d11d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stOKT.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stOSMO.svg b/src/problem2/fancy-form/src/assets/token-icon/stOSMO.svg new file mode 100644 index 0000000000..73d296046b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stOSMO.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stSAGA.svg b/src/problem2/fancy-form/src/assets/token-icon/stSAGA.svg new file mode 100644 index 0000000000..d6092fc7cf --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stSAGA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stSTARS.svg b/src/problem2/fancy-form/src/assets/token-icon/stSTARS.svg new file mode 100644 index 0000000000..ffc7def96a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stSTARS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stTIA.svg b/src/problem2/fancy-form/src/assets/token-icon/stTIA.svg new file mode 100644 index 0000000000..3d3e28470d --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stTIA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stZIL.svg b/src/problem2/fancy-form/src/assets/token-icon/stZIL.svg new file mode 100644 index 0000000000..81323f746a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stZIL.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stkATOM.svg b/src/problem2/fancy-form/src/assets/token-icon/stkATOM.svg new file mode 100644 index 0000000000..1e6c7a2b2c --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stkATOM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stkDYDX.svg b/src/problem2/fancy-form/src/assets/token-icon/stkDYDX.svg new file mode 100644 index 0000000000..2d2883a9e6 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stkDYDX.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/stkSTARS.svg b/src/problem2/fancy-form/src/assets/token-icon/stkSTARS.svg new file mode 100644 index 0000000000..97e87da6ea --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/stkSTARS.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/vZWAP.svg b/src/problem2/fancy-form/src/assets/token-icon/vZWAP.svg new file mode 100644 index 0000000000..0874b89e8b --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/vZWAP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/veFLUO.svg b/src/problem2/fancy-form/src/assets/token-icon/veFLUO.svg new file mode 100644 index 0000000000..3624b5647a --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/veFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/wKAS.svg b/src/problem2/fancy-form/src/assets/token-icon/wKAS.svg new file mode 100644 index 0000000000..14185747c5 --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/wKAS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/fancy-form/src/assets/token-icon/wstETH.svg b/src/problem2/fancy-form/src/assets/token-icon/wstETH.svg new file mode 100644 index 0000000000..15c8a9716e --- /dev/null +++ b/src/problem2/fancy-form/src/assets/token-icon/wstETH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/fancy-form/src/assets/vite.svg b/src/problem2/fancy-form/src/assets/vite.svg new file mode 100644 index 0000000000..5101b674df --- /dev/null +++ b/src/problem2/fancy-form/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/problem2/fancy-form/src/components/layout/Background.tsx b/src/problem2/fancy-form/src/components/layout/Background.tsx new file mode 100644 index 0000000000..9e93bf5d9a --- /dev/null +++ b/src/problem2/fancy-form/src/components/layout/Background.tsx @@ -0,0 +1,17 @@ +export function Background() { + return ( +
+ {/* Large blob - top right */} +
+ + {/* Medium blob - bottom left */} +
+ + {/* Small blob - center */} +
+ + {/* Subtle grid pattern */} +
+
+ ); +} diff --git a/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx b/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx new file mode 100644 index 0000000000..3b4a40c36c --- /dev/null +++ b/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx @@ -0,0 +1,20 @@ +import { useTheme } from '@/context/ThemeContext'; +import { Button } from '@/components/ui/button'; +import { Sun, Moon } from 'lucide-react'; + +export function ThemeToggle() { + const { isDark, toggleTheme } = useTheme(); + + return ( + + ); +} diff --git a/src/problem2/fancy-form/src/components/swap/SwapButton.tsx b/src/problem2/fancy-form/src/components/swap/SwapButton.tsx new file mode 100644 index 0000000000..48776ea197 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/SwapButton.tsx @@ -0,0 +1,37 @@ +import { SwapStatus } from '@/types/swap'; +import { Spinner } from '@/components/ui/Spinner'; +import { Button } from '@/components/ui/button'; +import { CheckCircle2 } from 'lucide-react'; + +interface SwapButtonProps { + label: string; + canSwap: boolean; + status: SwapStatus; + onSwap: () => void; +} + +export function SwapButton({ label, canSwap, status, onSwap }: SwapButtonProps) { + const isProcessing = status === SwapStatus.PROCESSING; + const isSuccess = status === SwapStatus.SUCCESS; + + return ( + + ); +} diff --git a/src/problem2/fancy-form/src/components/swap/SwapCard.tsx b/src/problem2/fancy-form/src/components/swap/SwapCard.tsx new file mode 100644 index 0000000000..91a0724f47 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/SwapCard.tsx @@ -0,0 +1,146 @@ +import { useState, lazy, Suspense } from 'react'; +import { SwapDirection } from '@/types/swap'; +import { useTokenPrices } from '@/hooks/useTokenPrices'; +import { useSwap } from '@/hooks/useSwap'; +import { TokenInput } from './TokenInput'; +import { SwapDirectionButton } from './SwapDirectionButton'; +import { SwapDetails } from './SwapDetails'; +import { SwapButton } from './SwapButton'; + +import toast from 'react-hot-toast'; +import { Skeleton } from '../ui/Skeleton'; + +const TokenSelectModal = lazy(() => + import('./TokenSelectModal').then((mod) => ({ default: mod.TokenSelectModal })), +); + +export function SwapCard() { + const { data: tokens, isLoading, isError, error } = useTokenPrices(); + const swap = useSwap(); + const [modalOpen, setModalOpen] = useState(false); + const [modalDirection, setModalDirection] = useState(SwapDirection.SELL); + + const openModal = (direction: SwapDirection) => { + setModalDirection(direction); + setModalOpen(true); + }; + + const handleSwap = async () => { + try { + await swap.executeSwap(); + toast.success( + `Swapped ${swap.sellAmount} ${swap.sellToken?.currency} for ${swap.buyAmount} ${swap.buyToken?.currency}`, + { + duration: 3000, + style: { + borderRadius: '12px', + background: '#1e293b', + color: '#fff', + }, + iconTheme: { + primary: '#22c55e', + secondary: '#fff', + }, + }, + ); + } catch { + toast.error('Swap failed. Please try again.', { + style: { + borderRadius: '12px', + background: '#1e293b', + color: '#fff', + }, + }); + } + }; + + if (isLoading) { + return ( +
+ + + + +
+ ); + } + + if (isError) { + return ( +
+
⚠️
+

+ Failed to load tokens +

+

+ {error instanceof Error ? error.message : 'An unexpected error occurred.'} +

+
+ ); + } + + return ( + <> +
+ +
+

Swap Tokens

+
+ + openModal(SwapDirection.SELL)} + /> + + + + openModal(SwapDirection.BUY)} + /> + + + + {/* Swap Button */} + +
+ + {/* Token Select Modal (lazy loaded) */} + + setModalOpen(false)} + onSelect={(token) => { + if (modalDirection === SwapDirection.SELL) { + swap.setSellToken(token); + } else { + swap.setBuyToken(token); + } + }} + tokens={tokens ?? []} + selectedToken={ + modalDirection === SwapDirection.SELL ? swap.sellToken : swap.buyToken + } + /> + + + ); +} diff --git a/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx b/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx new file mode 100644 index 0000000000..f1ab2bd472 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx @@ -0,0 +1,102 @@ +import { motion, AnimatePresence } from 'framer-motion'; +import type { Token } from '@/types'; +import { formatAmount } from '@/utils/format'; +import { useState } from 'react'; +import { Repeat, ChevronDown } from 'lucide-react'; + +interface SwapDetailsProps { + sellToken: Token | null; + buyToken: Token | null; + exchangeRate: number | null; + priceImpact: number; +} + +export function SwapDetails({ sellToken, buyToken, exchangeRate, priceImpact }: SwapDetailsProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [isReversed, setIsReversed] = useState(false); + + if (!sellToken || !buyToken || exchangeRate === null) return null; + + const displayRate = isReversed ? 1 / exchangeRate : exchangeRate; + const fromToken = isReversed ? buyToken : sellToken; + const toToken = isReversed ? sellToken : buyToken; + + return ( +
+ {/* Rate toggle row */} + + + + + + + + {/* Expandable details */} + + {isExpanded && ( + +
+ 5 + ? 'text-red-500' + : priceImpact > 3 + ? 'text-amber-500' + : 'text-emerald-500' + } + /> + + +
+
+ )} +
+
+ ); +} + +function DetailRow({ + label, + value, + valueColor = 'text-slate-600 dark:text-slate-300', +}: { + label: string; + value: string; + valueColor?: string; +}) { + return ( +
+ {label} + {value} +
+ ); +} diff --git a/src/problem2/fancy-form/src/components/swap/SwapDirectionButton.tsx b/src/problem2/fancy-form/src/components/swap/SwapDirectionButton.tsx new file mode 100644 index 0000000000..0b828af0c2 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/SwapDirectionButton.tsx @@ -0,0 +1,35 @@ +import { motion } from 'framer-motion'; +import { useState } from 'react'; +import { ArrowDown } from 'lucide-react'; + +interface SwapDirectionButtonProps { + onFlip: () => void; + disabled?: boolean; +} + +export function SwapDirectionButton({ onFlip, disabled = false }: SwapDirectionButtonProps) { + const [rotation, setRotation] = useState(0); + + const handleClick = () => { + if (disabled) return; + setRotation((prev) => prev + 180); + onFlip(); + }; + + return ( +
+ + + +
+ ); +} diff --git a/src/problem2/fancy-form/src/components/swap/TokenInput.tsx b/src/problem2/fancy-form/src/components/swap/TokenInput.tsx new file mode 100644 index 0000000000..eec54424b4 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/TokenInput.tsx @@ -0,0 +1,111 @@ +import { useCallback } from 'react'; +import type { Token } from '@/types'; +import type { SwapDirection } from '@/types/swap'; +import { sanitizeAmountInput, formatUsd } from '@/utils/format'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { ChevronDown } from 'lucide-react'; + +interface TokenInputProps { + direction: SwapDirection; + token: Token | null; + amount: string; + usdValue: number; + onAmountChange: (amount: string) => void; + onTokenSelect: () => void; + disabled?: boolean; +} + +export function TokenInput({ + direction, + token, + amount, + usdValue, + onAmountChange, + onTokenSelect, + disabled = false, +}: TokenInputProps) { + const label = direction === 'sell' ? 'You pay' : 'You receive'; + + const handleInputChange = useCallback( + (e: React.ChangeEvent) => { + const sanitized = sanitizeAmountInput(e.target.value); + if (sanitized !== null) { + onAmountChange(sanitized); + } + }, + [onAmountChange], + ); + + return ( +
+ {/* Label */} +
+ {label} +
+ + {/* Input + Token Selector Row */} +
+ {/* Amount Input using Shadcn Input but styling it essentially to look seamless */} + + + {/* Token Selector Pill */} + +
+ + {/* USD Value */} +
+ {amount && parseFloat(amount) > 0 && token ? formatUsd(usdValue) : ''} +
+
+ ); +} diff --git a/src/problem2/fancy-form/src/components/swap/TokenSelectModal.tsx b/src/problem2/fancy-form/src/components/swap/TokenSelectModal.tsx new file mode 100644 index 0000000000..e123532114 --- /dev/null +++ b/src/problem2/fancy-form/src/components/swap/TokenSelectModal.tsx @@ -0,0 +1,169 @@ +import { useState, useMemo, useCallback } from 'react'; +import type { Token } from '@/types'; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog'; +import { Input } from '@/components/ui/input'; +import { Search, Check } from 'lucide-react'; + +interface TokenSelectModalProps { + isOpen: boolean; + onClose: () => void; + onSelect: (token: Token) => void; + tokens: Token[]; + selectedToken?: Token | null; +} + +/** Popular tokens shown as quick-select pills at the top */ +const POPULAR_CURRENCIES = ['ETH', 'USDC', 'WBTC', 'BUSD', 'ATOM', 'SOL', 'BNB', 'DAI']; + +export function TokenSelectModal({ + isOpen, + onClose, + onSelect, + tokens, + selectedToken, +}: TokenSelectModalProps) { + const [search, setSearch] = useState(''); + + // Filter tokens by search query + const filteredTokens = useMemo(() => { + if (!search.trim()) return tokens; + const query = search.toLowerCase().trim(); + return tokens.filter((t) => t.currency.toLowerCase().includes(query)); + }, [tokens, search]); + + // Popular tokens that exist in our token list + const popularTokens = useMemo(() => { + return POPULAR_CURRENCIES.map((c) => tokens.find((t) => t.currency === c)).filter( + (t): t is Token => t !== undefined, + ); + }, [tokens]); + + const handleSelect = useCallback( + (token: Token) => { + onSelect(token); + onClose(); + }, + [onSelect, onClose], + ); + + return ( + !open && onClose()}> + + + + Select a token + + + + {/* Search */} +
+
+ + setSearch(e.target.value)} + className="pl-10 h-12 bg-slate-100 dark:bg-[#0a1628] border-transparent focus-visible:ring-1 focus-visible:ring-blue-500 rounded-2xl" + /> +
+
+ + {/* Popular tokens */} + {!search && popularTokens.length > 0 && ( +
+
+ {popularTokens.map((token) => ( + + ))} +
+
+ )} + + {/* Divider */} +
+ + {/* Token list */} +
+ {filteredTokens.length === 0 ? ( +
+ + No tokens found +
+ ) : ( + filteredTokens.map((token) => ( + + )) + )} +
+ +
+ ); +} diff --git a/src/problem2/fancy-form/src/components/ui/Spinner.tsx b/src/problem2/fancy-form/src/components/ui/Spinner.tsx new file mode 100644 index 0000000000..9f565dffc5 --- /dev/null +++ b/src/problem2/fancy-form/src/components/ui/Spinner.tsx @@ -0,0 +1,20 @@ +interface SpinnerProps { + size?: 'sm' | 'md' | 'lg'; + className?: string; +} + +const sizeMap = { + sm: 'h-4 w-4 border-2', + md: 'h-6 w-6 border-2', + lg: 'h-8 w-8 border-3', +}; + +export function Spinner({ size = 'md', className = '' }: SpinnerProps) { + return ( +
+ ); +} diff --git a/src/problem2/fancy-form/src/components/ui/button.tsx b/src/problem2/fancy-form/src/components/ui/button.tsx new file mode 100644 index 0000000000..09df753676 --- /dev/null +++ b/src/problem2/fancy-form/src/components/ui/button.tsx @@ -0,0 +1,58 @@ +import { Button as ButtonPrimitive } from "@base-ui/react/button" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", + outline: + "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", + ghost: + "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", + destructive: + "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: + "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", + lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + icon: "size-8", + "icon-xs": + "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", + "icon-sm": + "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg", + "icon-lg": "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant = "default", + size = "default", + ...props +}: ButtonPrimitive.Props & VariantProps) { + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/src/problem2/fancy-form/src/components/ui/dialog.tsx b/src/problem2/fancy-form/src/components/ui/dialog.tsx new file mode 100644 index 0000000000..b34d1d7f04 --- /dev/null +++ b/src/problem2/fancy-form/src/components/ui/dialog.tsx @@ -0,0 +1,158 @@ +import * as React from "react" +import { Dialog as DialogPrimitive } from "@base-ui/react/dialog" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { XIcon } from "lucide-react" + +function Dialog({ ...props }: DialogPrimitive.Root.Props) { + return +} + +function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) { + return +} + +function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) { + return +} + +function DialogClose({ ...props }: DialogPrimitive.Close.Props) { + return +} + +function DialogOverlay({ + className, + ...props +}: DialogPrimitive.Backdrop.Props) { + return ( + + ) +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: DialogPrimitive.Popup.Props & { + showCloseButton?: boolean +}) { + return ( + + + + {children} + {showCloseButton && ( + + } + > + + Close + + )} + + + ) +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function DialogFooter({ + className, + showCloseButton = false, + children, + ...props +}: React.ComponentProps<"div"> & { + showCloseButton?: boolean +}) { + return ( +
+ {children} + {showCloseButton && ( + }> + Close + + )} +
+ ) +} + +function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { + return ( + + ) +} + +function DialogDescription({ + className, + ...props +}: DialogPrimitive.Description.Props) { + return ( + + ) +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +} diff --git a/src/problem2/fancy-form/src/components/ui/input.tsx b/src/problem2/fancy-form/src/components/ui/input.tsx new file mode 100644 index 0000000000..7d21babba9 --- /dev/null +++ b/src/problem2/fancy-form/src/components/ui/input.tsx @@ -0,0 +1,20 @@ +import * as React from "react" +import { Input as InputPrimitive } from "@base-ui/react/input" + +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/src/problem2/fancy-form/src/components/ui/skeleton.tsx b/src/problem2/fancy-form/src/components/ui/skeleton.tsx new file mode 100644 index 0000000000..62f2fd82c6 --- /dev/null +++ b/src/problem2/fancy-form/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/src/problem2/fancy-form/src/context/ThemeContext.tsx b/src/problem2/fancy-form/src/context/ThemeContext.tsx new file mode 100644 index 0000000000..3741ac0694 --- /dev/null +++ b/src/problem2/fancy-form/src/context/ThemeContext.tsx @@ -0,0 +1,49 @@ +import { createContext, useContext, useEffect, useState, useCallback } from 'react'; +import type { ReactNode } from 'react'; + +type Theme = 'light' | 'dark'; + +interface ThemeContextValue { + theme: Theme; + toggleTheme: () => void; + isDark: boolean; +} + +const ThemeContext = createContext(null); + +const STORAGE_KEY = 'fancy-form-theme'; + +function getInitialTheme(): Theme { + const stored = localStorage.getItem(STORAGE_KEY); + if (stored === 'light' || stored === 'dark') return stored; + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; +} + +export function ThemeProvider({ children }: { children: ReactNode }) { + const [theme, setTheme] = useState(getInitialTheme); + + useEffect(() => { + const root = document.documentElement; + root.classList.toggle('dark', theme === 'dark'); + localStorage.setItem(STORAGE_KEY, theme); + }, [theme]); + + const toggleTheme = useCallback(() => { + setTheme((prev) => (prev === 'light' ? 'dark' : 'light')); + }, []); + + return ( + + {children} + + ); +} + +export function useTheme(): ThemeContextValue { + const context = useContext(ThemeContext); + if (!context) { + throw new Error('useTheme must be used within a ThemeProvider'); + } + return context; +} diff --git a/src/problem2/fancy-form/src/hooks/useSwap.ts b/src/problem2/fancy-form/src/hooks/useSwap.ts new file mode 100644 index 0000000000..c33dbe59d0 --- /dev/null +++ b/src/problem2/fancy-form/src/hooks/useSwap.ts @@ -0,0 +1,193 @@ +import { useState, useCallback, useMemo } from 'react'; +import type { Token } from '@/types'; +import { SwapStatus } from '@/types/swap'; +import { parseAmountInput } from '@/utils/format'; + +interface UseSwapReturn { + sellToken: Token | null; + buyToken: Token | null; + sellAmount: string; + buyAmount: string; + status: SwapStatus; + exchangeRate: number | null; + usdValueSell: number; + usdValueBuy: number; + priceImpact: number; + setSellToken: (token: Token) => void; + setBuyToken: (token: Token) => void; + setSellAmount: (amount: string) => void; + setBuyAmount: (amount: string) => void; + flipTokens: () => void; + executeSwap: () => Promise; + canSwap: boolean; + buttonLabel: string; +} + +export function useSwap(): UseSwapReturn { + const [sellToken, setSellTokenState] = useState(null); + const [buyToken, setBuyTokenState] = useState(null); + const [sellAmount, setSellAmountState] = useState(''); + const [buyAmount, setBuyAmountState] = useState(''); + const [status, setStatus] = useState(SwapStatus.IDLE); + const [lastEdited, setLastEdited] = useState<'sell' | 'buy'>('sell'); + + // Calculate exchange rate between sell and buy tokens + const exchangeRate = useMemo(() => { + if (!sellToken || !buyToken || sellToken.price <= 0 || buyToken.price <= 0) return null; + return sellToken.price / buyToken.price; + }, [sellToken, buyToken]); + + // USD values + const usdValueSell = useMemo(() => { + const amount = parseAmountInput(sellAmount); + return sellToken ? amount * sellToken.price : 0; + }, [sellAmount, sellToken]); + + const usdValueBuy = useMemo(() => { + const amount = parseAmountInput(buyAmount); + return buyToken ? amount * buyToken.price : 0; + }, [buyAmount, buyToken]); + + // Simulated price impact (small random variation for realism) + const priceImpact = useMemo(() => { + const sellNum = parseAmountInput(sellAmount); + if (!sellToken || !buyToken || sellNum <= 0) return 0; + // Simulate higher impact for larger trades + return Math.min(sellNum * 0.001, 5); + }, [sellAmount, sellToken, buyToken]); + + // Auto-calculate the other amount when one changes + const setSellAmount = useCallback( + (amount: string) => { + setSellAmountState(amount); + setLastEdited('sell'); + if (exchangeRate !== null) { + const parsed = parseAmountInput(amount); + if (parsed > 0) { + const computed = parsed * exchangeRate; + setBuyAmountState(computed.toFixed(6).replace(/\.?0+$/, '')); + } else { + setBuyAmountState(''); + } + } + }, + [exchangeRate], + ); + + const setBuyAmount = useCallback( + (amount: string) => { + setBuyAmountState(amount); + setLastEdited('buy'); + if (exchangeRate !== null && exchangeRate > 0) { + const parsed = parseAmountInput(amount); + if (parsed > 0) { + const computed = parsed / exchangeRate; + setSellAmountState(computed.toFixed(6).replace(/\.?0+$/, '')); + } else { + setSellAmountState(''); + } + } + }, + [exchangeRate], + ); + + const setSellToken = useCallback( + (token: Token) => { + // Prevent selecting the same token for both sides + if (buyToken && token.currency === buyToken.currency) { + // Swap them + setBuyTokenState(sellToken); + } + setSellTokenState(token); + // Recalculate amounts based on new rate + if (buyToken && lastEdited === 'sell' && sellAmount) { + const rate = token.price / buyToken.price; + const parsed = parseAmountInput(sellAmount); + if (parsed > 0) { + setBuyAmountState((parsed * rate).toFixed(6).replace(/\.?0+$/, '')); + } + } + }, + [buyToken, sellToken, sellAmount, lastEdited], + ); + + const setBuyToken = useCallback( + (token: Token) => { + if (sellToken && token.currency === sellToken.currency) { + setSellTokenState(buyToken); + } + setBuyTokenState(token); + if (sellToken && lastEdited === 'sell' && sellAmount) { + const rate = sellToken.price / token.price; + const parsed = parseAmountInput(sellAmount); + if (parsed > 0) { + setBuyAmountState((parsed * rate).toFixed(6).replace(/\.?0+$/, '')); + } + } + }, + [sellToken, buyToken, sellAmount, lastEdited], + ); + + const flipTokens = useCallback(() => { + setSellTokenState(buyToken); + setBuyTokenState(sellToken); + setSellAmountState(buyAmount); + setBuyAmountState(sellAmount); + setLastEdited((prev) => (prev === 'sell' ? 'buy' : 'sell')); + }, [sellToken, buyToken, sellAmount, buyAmount]); + + // Determine button state + const canSwap = useMemo(() => { + if (!sellToken || !buyToken) return false; + const sellNum = parseAmountInput(sellAmount); + return sellNum > 0 && status === SwapStatus.IDLE; + }, [sellToken, buyToken, sellAmount, status]); + + const buttonLabel = useMemo(() => { + if (status === SwapStatus.PROCESSING) return 'Swapping...'; + if (status === SwapStatus.SUCCESS) return 'Swap Successful!'; + if (!sellToken || !buyToken) return 'Select tokens'; + const sellNum = parseAmountInput(sellAmount); + if (sellNum <= 0) return 'Enter an amount'; + return 'Swap'; + }, [sellToken, buyToken, sellAmount, status]); + + // Simulated swap execution + const executeSwap = useCallback(async () => { + if (!canSwap) return; + + setStatus(SwapStatus.PROCESSING); + + // Simulate network delay + await new Promise((resolve) => setTimeout(resolve, 2000)); + + setStatus(SwapStatus.SUCCESS); + + // Reset after showing success + setTimeout(() => { + setStatus(SwapStatus.IDLE); + setSellAmountState(''); + setBuyAmountState(''); + }, 1500); + }, [canSwap]); + + return { + sellToken, + buyToken, + sellAmount, + buyAmount, + status, + exchangeRate, + usdValueSell, + usdValueBuy, + priceImpact, + setSellToken, + setBuyToken, + setSellAmount, + setBuyAmount, + flipTokens, + executeSwap, + canSwap, + buttonLabel, + }; +} diff --git a/src/problem2/fancy-form/src/hooks/useTokenPrices.ts b/src/problem2/fancy-form/src/hooks/useTokenPrices.ts new file mode 100644 index 0000000000..93c0d25e72 --- /dev/null +++ b/src/problem2/fancy-form/src/hooks/useTokenPrices.ts @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; +import { fetchTokenPrices } from '@/api/prices'; +import { processTokenPrices } from '@/utils/token'; +import type { Token } from '@/types'; + +const QUERY_KEY = ['token-prices'] as const; + +/** + * React Query hook for fetching and processing token prices. + * - Deduplicates tokens + * - Resolves icon URLs + * - Auto-refreshes every 60s + * - Stale after 30s + */ +export function useTokenPrices() { + return useQuery({ + queryKey: QUERY_KEY, + queryFn: async () => { + const rawPrices = await fetchTokenPrices(); + return processTokenPrices(rawPrices); + }, + staleTime: 30_000, + refetchInterval: 60_000, + retry: 3, + retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 10_000), + }); +} diff --git a/src/problem2/fancy-form/src/index.css b/src/problem2/fancy-form/src/index.css new file mode 100644 index 0000000000..cb4b1139ca --- /dev/null +++ b/src/problem2/fancy-form/src/index.css @@ -0,0 +1,91 @@ +@import 'tailwindcss'; +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); + +/* ===== Custom Theme ===== */ +@theme { + --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, sans-serif; + + --color-card: #ffffff; + --color-card-dark: #131c31; + --color-surface: #f0f5ff; + --color-surface-dark: #0b1120; + + /* Custom animation for background blobs */ + --animate-blob: blob 8s infinite; +} + +/* ===== Base Styles ===== */ +@layer base { + *, + *::before, + *::after { + box-sizing: border-box; + margin: 0; + padding: 0; + } + + html { + font-family: var(--font-sans); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + body { + min-width: 320px; + } + + /* Remove number input spinners */ + input[type='number']::-webkit-outer-spin-button, + input[type='number']::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + input[type='number'] { + -moz-appearance: textfield; + } + + /* Custom scrollbar */ + ::-webkit-scrollbar { + width: 6px; + } + ::-webkit-scrollbar-track { + background: transparent; + } + ::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 999px; + } + .dark ::-webkit-scrollbar-thumb { + background: #334155; + } +} + +/* ===== Blob Animation ===== */ +@keyframes blob { + 0%, + 100% { + transform: translate(0, 0) scale(1); + } + 25% { + transform: translate(30px, -50px) scale(1.05); + } + 50% { + transform: translate(-20px, 20px) scale(0.95); + } + 75% { + transform: translate(20px, 40px) scale(1.02); + } +} + +@utility animate-blob { + animation: blob 8s infinite ease-in-out; +} + +/* Animation delays for staggered blobs */ +@utility animation-delay-2000 { + animation-delay: 2s; +} + +@utility animation-delay-4000 { + animation-delay: 4s; +} diff --git a/src/problem2/fancy-form/src/lib/utils.ts b/src/problem2/fancy-form/src/lib/utils.ts new file mode 100644 index 0000000000..bd0c391ddd --- /dev/null +++ b/src/problem2/fancy-form/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/problem2/fancy-form/src/main.tsx b/src/problem2/fancy-form/src/main.tsx new file mode 100644 index 0000000000..dcf08c3d0e --- /dev/null +++ b/src/problem2/fancy-form/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/src/problem2/fancy-form/src/types/index.ts b/src/problem2/fancy-form/src/types/index.ts new file mode 100644 index 0000000000..34b012101d --- /dev/null +++ b/src/problem2/fancy-form/src/types/index.ts @@ -0,0 +1,3 @@ +export type { TokenPrice, Token } from './token'; +export type { SwapFormState } from './swap'; +export type { SwapDirection, SwapStatus } from './swap'; diff --git a/src/problem2/fancy-form/src/types/swap.ts b/src/problem2/fancy-form/src/types/swap.ts new file mode 100644 index 0000000000..977ec73508 --- /dev/null +++ b/src/problem2/fancy-form/src/types/swap.ts @@ -0,0 +1,24 @@ +export const SwapDirection = { + SELL: 'sell', + BUY: 'buy', +} as const; + +export type SwapDirection = (typeof SwapDirection)[keyof typeof SwapDirection]; + +export const SwapStatus = { + IDLE: 'idle', + CONFIRMING: 'confirming', + PROCESSING: 'processing', + SUCCESS: 'success', + ERROR: 'error', +} as const; + +export type SwapStatus = (typeof SwapStatus)[keyof typeof SwapStatus]; + +export interface SwapFormState { + sellToken: import('./token').Token | null; + buyToken: import('./token').Token | null; + sellAmount: string; + buyAmount: string; + status: SwapStatus; +} diff --git a/src/problem2/fancy-form/src/types/token.ts b/src/problem2/fancy-form/src/types/token.ts new file mode 100644 index 0000000000..2eafe24cc1 --- /dev/null +++ b/src/problem2/fancy-form/src/types/token.ts @@ -0,0 +1,14 @@ +/** Raw token price entry from the Switcheo API */ +export interface TokenPrice { + currency: string; + date: string; + price: number; +} + +/** Processed token ready for UI consumption */ +export interface Token { + currency: string; + price: number; + iconUrl: string; + hasIcon: boolean; +} diff --git a/src/problem2/fancy-form/src/utils/format.ts b/src/problem2/fancy-form/src/utils/format.ts new file mode 100644 index 0000000000..9e699b6e0b --- /dev/null +++ b/src/problem2/fancy-form/src/utils/format.ts @@ -0,0 +1,77 @@ +/** + * Format a number as a currency-like display string. + * Uses compact notation for very large numbers. + */ +export function formatAmount(value: number, maxDecimals = 6): string { + if (value === 0) return '0'; + + if (Math.abs(value) < 0.000001) { + return value.toExponential(2); + } + + if (Math.abs(value) >= 1_000_000) { + return new Intl.NumberFormat('en-US', { + notation: 'compact', + maximumFractionDigits: 2, + }).format(value); + } + + // Determine appropriate decimal places based on magnitude + const decimals = Math.abs(value) >= 1 ? Math.min(maxDecimals, 4) : maxDecimals; + + return new Intl.NumberFormat('en-US', { + minimumFractionDigits: 0, + maximumFractionDigits: decimals, + }).format(value); +} + +/** + * Format a number as USD display. + */ +export function formatUsd(value: number): string { + if (value === 0) return '$0.00'; + + if (value < 0.01) { + return '<$0.01'; + } + + return new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }).format(value); +} + +/** + * Parse a string input to a number, handling edge cases. + * Returns NaN for invalid inputs. + */ +export function parseAmountInput(input: string): number { + if (!input || input === '.' || input === '') return 0; + const parsed = parseFloat(input); + return isNaN(parsed) ? 0 : parsed; +} + +/** + * Validate and sanitize numeric input for the amount field. + * Returns the sanitized string or null if invalid. + */ +export function sanitizeAmountInput(value: string): string | null { + // Allow empty + if (value === '') return ''; + + // Allow just a dot for starting decimal input + if (value === '.') return '0.'; + + // Only allow numbers and a single dot + const regex = /^\d*\.?\d*$/; + if (!regex.test(value)) return null; + + // Prevent leading zeros except "0." or "0" + if (value.length > 1 && value.startsWith('0') && value[1] !== '.') { + return value.replace(/^0+/, '') || '0'; + } + + return value; +} diff --git a/src/problem2/fancy-form/src/utils/token.ts b/src/problem2/fancy-form/src/utils/token.ts new file mode 100644 index 0000000000..4f93cf78bf --- /dev/null +++ b/src/problem2/fancy-form/src/utils/token.ts @@ -0,0 +1,79 @@ +import type { Token, TokenPrice } from '@/types'; + +// Map of token icon modules — these are imported as URLs by Vite +const tokenIconModules = import.meta.glob('@/assets/token-icon/*.svg', { + eager: true, + query: '?url', + import: 'default', +}); + +/** + * Build a lookup map from currency name to its icon URL. + */ +function buildIconMap(): Map { + const map = new Map(); + + for (const [path, url] of Object.entries(tokenIconModules)) { + // Extract filename without extension, e.g., "/src/assets/token-icon/ETH.svg" -> "ETH" + const filename = path.split('/').pop()?.replace('.svg', ''); + if (filename) { + map.set(filename, url); + } + } + + return map; +} + +const iconMap = buildIconMap(); + +/** Fallback icon URL for tokens without a matching SVG */ +const FALLBACK_ICON = ''; + +/** + * Resolve the icon URL for a given token currency. + */ +export function getTokenIconUrl(currency: string): string { + return iconMap.get(currency) ?? FALLBACK_ICON; +} + +/** + * Check if a token has a local icon file. + */ +export function hasTokenIcon(currency: string): boolean { + return iconMap.has(currency); +} + +/** + * Deduplicate token prices: keep the most recent entry per currency. + * Filter out tokens with invalid prices. + */ +export function deduplicateTokenPrices(prices: TokenPrice[]): TokenPrice[] { + const latestByToken = new Map(); + + for (const entry of prices) { + if (!entry.price || entry.price <= 0) continue; + + const existing = latestByToken.get(entry.currency); + if (!existing || new Date(entry.date) > new Date(existing.date)) { + latestByToken.set(entry.currency, entry); + } + } + + return Array.from(latestByToken.values()); +} + +/** + * Convert raw token prices to processed Token objects sorted alphabetically. + */ +export function processTokenPrices(rawPrices: TokenPrice[]): Token[] { + const deduplicated = deduplicateTokenPrices(rawPrices); + + return deduplicated + .map((tp) => ({ + currency: tp.currency, + price: tp.price, + iconUrl: getTokenIconUrl(tp.currency), + hasIcon: hasTokenIcon(tp.currency), + })) + .sort((a, b) => a.currency.localeCompare(b.currency)); +} diff --git a/src/problem2/fancy-form/tsconfig.app.json b/src/problem2/fancy-form/tsconfig.app.json new file mode 100644 index 0000000000..ebde7f0109 --- /dev/null +++ b/src/problem2/fancy-form/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "paths": { + "@/*": ["./src/*"] + }, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/src/problem2/fancy-form/tsconfig.json b/src/problem2/fancy-form/tsconfig.json new file mode 100644 index 0000000000..aa3c04f1be --- /dev/null +++ b/src/problem2/fancy-form/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/src/problem2/fancy-form/tsconfig.node.json b/src/problem2/fancy-form/tsconfig.node.json new file mode 100644 index 0000000000..d3c52ea64c --- /dev/null +++ b/src/problem2/fancy-form/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/src/problem2/fancy-form/vite.config.ts b/src/problem2/fancy-form/vite.config.ts new file mode 100644 index 0000000000..e6da720dab --- /dev/null +++ b/src/problem2/fancy-form/vite.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import tailwindcss from '@tailwindcss/vite'; +import path from 'path'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +}); diff --git a/src/problem2/fancy-form/yarn.lock b/src/problem2/fancy-form/yarn.lock new file mode 100644 index 0000000000..b869ea8181 --- /dev/null +++ b/src/problem2/fancy-form/yarn.lock @@ -0,0 +1,1531 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + +"@babel/core@^7.0.0", "@babel/core@^7.24.4": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== + dependencies: + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== + dependencies: + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== + dependencies: + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.28.6": + version "7.29.2" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz" + integrity sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + +"@babel/parser@^7.24.4", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.2" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz" + integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/runtime@^7.29.2": + version "7.29.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== + +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + +"@babel/types@^7.28.6", "@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@base-ui/react@^1.4.1": + version "1.4.1" + resolved "https://registry.npmjs.org/@base-ui/react/-/react-1.4.1.tgz" + integrity sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw== + dependencies: + "@babel/runtime" "^7.29.2" + "@base-ui/utils" "0.2.8" + "@floating-ui/react-dom" "^2.1.8" + "@floating-ui/utils" "^0.2.11" + use-sync-external-store "^1.6.0" + +"@base-ui/utils@0.2.8": + version "0.2.8" + resolved "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.8.tgz" + integrity sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ== + dependencies: + "@babel/runtime" "^7.29.2" + "@floating-ui/utils" "^0.2.11" + reselect "^5.1.1" + use-sync-external-store "^1.6.0" + +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/config-array@^0.23.5": + version "0.23.5" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz" + integrity sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA== + dependencies: + "@eslint/object-schema" "^3.0.5" + debug "^4.3.1" + minimatch "^10.2.4" + +"@eslint/config-helpers@^0.5.5": + version "0.5.5" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz" + integrity sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w== + dependencies: + "@eslint/core" "^1.2.1" + +"@eslint/core@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz" + integrity sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/js@^10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz" + integrity sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA== + +"@eslint/object-schema@^3.0.5": + version "3.0.5" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz" + integrity sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw== + +"@eslint/plugin-kit@^0.7.1": + version "0.7.1" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz" + integrity sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ== + dependencies: + "@eslint/core" "^1.2.1" + levn "^0.4.1" + +"@floating-ui/core@^1.7.5": + version "1.7.5" + resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz" + integrity sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ== + dependencies: + "@floating-ui/utils" "^0.2.11" + +"@floating-ui/dom@^1.7.6": + version "1.7.6" + resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz" + integrity sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ== + dependencies: + "@floating-ui/core" "^1.7.5" + "@floating-ui/utils" "^0.2.11" + +"@floating-ui/react-dom@^2.1.8": + version "2.1.8" + resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz" + integrity sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A== + dependencies: + "@floating-ui/dom" "^1.7.6" + +"@floating-ui/utils@^0.2.11": + version "0.2.11" + resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz" + integrity sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg== + +"@humanfs/core@^0.19.2": + version "0.19.2" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz" + integrity sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA== + dependencies: + "@humanfs/types" "^0.15.0" + +"@humanfs/node@^0.16.6": + version "0.16.8" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz" + integrity sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ== + dependencies: + "@humanfs/core" "^0.19.2" + "@humanfs/types" "^0.15.0" + "@humanwhocodes/retry" "^0.4.0" + +"@humanfs/types@^0.15.0": + version "0.15.0" + resolved "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz" + integrity sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@oxc-project/types@=0.127.0": + version "0.127.0" + resolved "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz" + integrity sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ== + +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== + +"@radix-ui/primitive@1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz" + integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg== + +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== + +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + +"@radix-ui/react-dialog@^1.1.15": + version "1.1.15" + resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz" + integrity sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-dismissable-layer@1.1.11": + version "1.1.11" + resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz" + integrity sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" + +"@radix-ui/react-focus-guards@1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz" + integrity sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw== + +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@1.1.5": + version "1.1.5" + resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz" + integrity sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== + dependencies: + "@radix-ui/react-slot" "1.2.3" + +"@radix-ui/react-slot@^1.2.4": + version "1.2.4" + resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz" + integrity sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + +"@radix-ui/react-slot@1.2.3": + version "1.2.3" + resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.17": + version "1.0.0-rc.17" + resolved "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz" + integrity sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg== + +"@rolldown/pluginutils@1.0.0-rc.17": + version "1.0.0-rc.17" + resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz" + integrity sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg== + +"@rolldown/pluginutils@1.0.0-rc.7": + version "1.0.0-rc.7" + resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz" + integrity sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA== + +"@tailwindcss/node@4.2.4": + version "4.2.4" + resolved "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz" + integrity sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA== + dependencies: + "@jridgewell/remapping" "^2.3.5" + enhanced-resolve "^5.19.0" + jiti "^2.6.1" + lightningcss "1.32.0" + magic-string "^0.30.21" + source-map-js "^1.2.1" + tailwindcss "4.2.4" + +"@tailwindcss/oxide-win32-x64-msvc@4.2.4": + version "4.2.4" + resolved "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz" + integrity sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw== + +"@tailwindcss/oxide@4.2.4": + version "4.2.4" + resolved "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz" + integrity sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q== + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.2.4" + "@tailwindcss/oxide-darwin-arm64" "4.2.4" + "@tailwindcss/oxide-darwin-x64" "4.2.4" + "@tailwindcss/oxide-freebsd-x64" "4.2.4" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.2.4" + "@tailwindcss/oxide-linux-arm64-gnu" "4.2.4" + "@tailwindcss/oxide-linux-arm64-musl" "4.2.4" + "@tailwindcss/oxide-linux-x64-gnu" "4.2.4" + "@tailwindcss/oxide-linux-x64-musl" "4.2.4" + "@tailwindcss/oxide-wasm32-wasi" "4.2.4" + "@tailwindcss/oxide-win32-arm64-msvc" "4.2.4" + "@tailwindcss/oxide-win32-x64-msvc" "4.2.4" + +"@tailwindcss/vite@^4.2.4": + version "4.2.4" + resolved "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz" + integrity sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw== + dependencies: + "@tailwindcss/node" "4.2.4" + "@tailwindcss/oxide" "4.2.4" + tailwindcss "4.2.4" + +"@tanstack/query-core@5.100.5": + version "5.100.5" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.100.5.tgz" + integrity sha512-t20KrhKkf0HXzqQkPbJ5erhFesup68BAbwFgYmTrS7bxMF7O5MdmL8jUkik4thsG7Hg00fblz30h6yF1d5TxGg== + +"@tanstack/react-query@^5.100.5": + version "5.100.5" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.100.5.tgz" + integrity sha512-aNwj1mi2v2bQ9IxkyR1grLOUkv3BYWoykHy9KDyLNbjC3tsahbOHJibK+Wjtr1wRhG59/AvJhiJG5OlthaCgJA== + dependencies: + "@tanstack/query-core" "5.100.5" + +"@types/esrecurse@^4.3.1": + version "4.3.1" + resolved "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz" + integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== + +"@types/estree@^1.0.6", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@^20.19.0 || >=22.12.0", "@types/node@^24.12.2": + version "24.12.2" + resolved "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz" + integrity sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g== + dependencies: + undici-types "~7.16.0" + +"@types/react-dom@*", "@types/react-dom@^19.2.3": + version "19.2.3" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz" + integrity sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ== + +"@types/react@*", "@types/react@^17 || ^18 || ^19", "@types/react@^19.2.0", "@types/react@^19.2.14": + version "19.2.14" + resolved "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz" + integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w== + dependencies: + csstype "^3.2.2" + +"@typescript-eslint/eslint-plugin@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz" + integrity sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw== + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/type-utils" "8.59.0" + "@typescript-eslint/utils" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + ignore "^7.0.5" + natural-compare "^1.4.0" + ts-api-utils "^2.5.0" + +"@typescript-eslint/parser@^8.59.0", "@typescript-eslint/parser@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz" + integrity sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg== + dependencies: + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + debug "^4.4.3" + +"@typescript-eslint/project-service@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz" + integrity sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.59.0" + "@typescript-eslint/types" "^8.59.0" + debug "^4.4.3" + +"@typescript-eslint/scope-manager@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz" + integrity sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg== + dependencies: + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + +"@typescript-eslint/tsconfig-utils@^8.59.0", "@typescript-eslint/tsconfig-utils@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz" + integrity sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg== + +"@typescript-eslint/type-utils@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz" + integrity sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg== + dependencies: + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + "@typescript-eslint/utils" "8.59.0" + debug "^4.4.3" + ts-api-utils "^2.5.0" + +"@typescript-eslint/types@^8.59.0", "@typescript-eslint/types@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz" + integrity sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A== + +"@typescript-eslint/typescript-estree@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz" + integrity sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw== + dependencies: + "@typescript-eslint/project-service" "8.59.0" + "@typescript-eslint/tsconfig-utils" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + debug "^4.4.3" + minimatch "^10.2.2" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.5.0" + +"@typescript-eslint/utils@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz" + integrity sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + +"@typescript-eslint/visitor-keys@8.59.0": + version "8.59.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz" + integrity sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q== + dependencies: + "@typescript-eslint/types" "8.59.0" + eslint-visitor-keys "^5.0.0" + +"@vitejs/plugin-react@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz" + integrity sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ== + dependencies: + "@rolldown/pluginutils" "1.0.0-rc.7" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + +ajv@^6.14.0: + version "6.15.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +aria-hidden@^1.2.4: + version "1.2.6" + resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== + dependencies: + tslib "^2.0.0" + +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + +baseline-browser-mapping@^2.10.12: + version "2.10.23" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz" + integrity sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g== + +brace-expansion@^5.0.5: + version "5.0.5" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz" + integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== + dependencies: + balanced-match "^4.0.2" + +browserslist@^4.24.0, "browserslist@>= 4.21.0": + version "4.28.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz" + integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== + dependencies: + baseline-browser-mapping "^2.10.12" + caniuse-lite "^1.0.30001782" + electron-to-chromium "^1.5.328" + node-releases "^2.0.36" + update-browserslist-db "^1.2.3" + +caniuse-lite@^1.0.30001782: + version "1.0.30001791" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz" + integrity sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ== + +class-variance-authority@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz" + integrity sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== + dependencies: + clsx "^2.1.1" + +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.10, csstype@^3.1.3, csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + +electron-to-chromium@^1.5.328: + version "1.5.344" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz" + integrity sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg== + +enhanced-resolve@^5.19.0: + version "5.21.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz" + integrity sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.3.3" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^10.1.8, "eslint-config-prettier@>= 7.0.0 <10.0.0 || >=10.1.0": + version "10.1.8" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== + +eslint-plugin-prettier@^5.5.5: + version "5.5.5" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz" + integrity sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw== + dependencies: + prettier-linter-helpers "^1.0.1" + synckit "^0.11.12" + +eslint-plugin-react-hooks@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz" + integrity sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g== + dependencies: + "@babel/core" "^7.24.4" + "@babel/parser" "^7.24.4" + hermes-parser "^0.25.1" + zod "^3.25.0 || ^4.0.0" + zod-validation-error "^3.5.0 || ^4.0.0" + +eslint-plugin-react-refresh@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz" + integrity sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA== + +eslint-scope@^9.1.2: + version "9.1.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz" + integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== + dependencies: + "@types/esrecurse" "^4.3.1" + "@types/estree" "^1.0.8" + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^5.0.0, eslint-visitor-keys@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== + +eslint@^10.0.0, eslint@^10.2.1, "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0 || ^10.0.0", "eslint@^9 || ^10", eslint@>=7.0.0, eslint@>=8.0.0: + version "10.2.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz" + integrity sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.2" + "@eslint/config-array" "^0.23.5" + "@eslint/config-helpers" "^0.5.5" + "@eslint/core" "^1.2.1" + "@eslint/plugin-kit" "^0.7.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.14.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^9.1.2" + eslint-visitor-keys "^5.0.1" + espree "^11.2.0" + esquery "^1.7.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + minimatch "^10.2.4" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^11.2.0: + version "11.2.0" + resolved "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz" + integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== + dependencies: + acorn "^8.16.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^5.0.1" + +esquery@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.4.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== + +framer-motion@^12.38.0: + version "12.38.0" + resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz" + integrity sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g== + dependencies: + motion-dom "^12.38.0" + motion-utils "^12.36.0" + tslib "^2.4.0" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^17.5.0: + version "17.5.0" + resolved "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz" + integrity sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g== + +goober@^2.1.16: + version "2.1.18" + resolved "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz" + integrity sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw== + +graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +hermes-estree@0.25.1: + version "0.25.1" + resolved "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz" + integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw== + +hermes-parser@^0.25.1: + version "0.25.1" + resolved "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz" + integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA== + dependencies: + hermes-estree "0.25.1" + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jiti@*, jiti@^2.6.1, jiti@>=1.21.0: + version "2.6.1" + resolved "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + +lightningcss@^1.32.0, lightningcss@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lucide-react@^1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/lucide-react/-/lucide-react-1.11.0.tgz" + integrity sha512-UOhjdztXCgdBReRcIhsvz2siIBogfv/lhJEIViCpLt924dO+GDms9T7DNoucI23s6kEPpe988m5N0D2ajnzb2g== + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +minimatch@^10.2.2, minimatch@^10.2.4: + version "10.2.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz" + integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== + dependencies: + brace-expansion "^5.0.5" + +motion-dom@^12.38.0: + version "12.38.0" + resolved "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz" + integrity sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA== + dependencies: + motion-utils "^12.36.0" + +motion-utils@^12.36.0: + version "12.36.0" + resolved "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz" + integrity sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-releases@^2.0.36: + version "2.0.38" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz" + integrity sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw== + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +"picomatch@^3 || ^4", picomatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== + +postcss@^8.5.10: + version "8.5.12" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz" + integrity sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz" + integrity sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.8.3, prettier@>=3.0.0: + version "3.8.3" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz" + integrity sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +"react-dom@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom@^17 || ^18 || ^19", "react-dom@^18.0.0 || ^19.0.0", react-dom@^19.2.5, react-dom@>=16, react-dom@>=16.8.0: + version "19.2.5" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz" + integrity sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag== + dependencies: + scheduler "^0.27.0" + +react-hot-toast@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz" + integrity sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg== + dependencies: + csstype "^3.1.3" + goober "^2.1.16" + +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== + dependencies: + react-style-singleton "^2.2.2" + tslib "^2.0.0" + +react-remove-scroll@^2.6.3: + version "2.7.2" + resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz" + integrity sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q== + dependencies: + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" + +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== + dependencies: + get-nonce "^1.0.0" + tslib "^2.0.0" + +"react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^17 || ^18 || ^19", "react@^18 || ^19", "react@^18.0.0 || ^19.0.0", react@^19.2.5, react@>=16, react@>=16.8.0: + version "19.2.5" + resolved "https://registry.npmjs.org/react/-/react-19.2.5.tgz" + integrity sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA== + +reselect@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== + +rolldown@1.0.0-rc.17: + version "1.0.0-rc.17" + resolved "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz" + integrity sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA== + dependencies: + "@oxc-project/types" "=0.127.0" + "@rolldown/pluginutils" "1.0.0-rc.17" + optionalDependencies: + "@rolldown/binding-android-arm64" "1.0.0-rc.17" + "@rolldown/binding-darwin-arm64" "1.0.0-rc.17" + "@rolldown/binding-darwin-x64" "1.0.0-rc.17" + "@rolldown/binding-freebsd-x64" "1.0.0-rc.17" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.17" + "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.17" + "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.17" + "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.17" + "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.17" + "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.17" + "@rolldown/binding-linux-x64-musl" "1.0.0-rc.17" + "@rolldown/binding-openharmony-arm64" "1.0.0-rc.17" + "@rolldown/binding-wasm32-wasi" "1.0.0-rc.17" + "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.17" + "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.17" + +scheduler@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz" + integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.7.3: + version "7.7.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +synckit@^0.11.12: + version "0.11.12" + resolved "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz" + integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ== + dependencies: + "@pkgr/core" "^0.2.9" + +tailwind-merge@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz" + integrity sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A== + +tailwindcss@^4.2.4, tailwindcss@4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz" + integrity sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA== + +tapable@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== + +tinyglobby@^0.2.15, tinyglobby@^0.2.16: + version "0.2.16" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz" + integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + +ts-api-utils@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz" + integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typescript-eslint@^8.58.2: + version "8.59.0" + resolved "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz" + integrity sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw== + dependencies: + "@typescript-eslint/eslint-plugin" "8.59.0" + "@typescript-eslint/parser" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + "@typescript-eslint/utils" "8.59.0" + +typescript@>=4.8.4, "typescript@>=4.8.4 <6.1.0", typescript@~6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz" + integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +update-browserslist-db@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz" + integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +use-sync-external-store@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== + +"vite@^5.2.0 || ^6 || ^7 || ^8", vite@^8.0.0, vite@^8.0.10: + version "8.0.10" + resolved "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz" + integrity sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw== + dependencies: + lightningcss "^1.32.0" + picomatch "^4.0.4" + postcss "^8.5.10" + rolldown "1.0.0-rc.17" + tinyglobby "^0.2.16" + optionalDependencies: + fsevents "~2.3.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +"zod-validation-error@^3.5.0 || ^4.0.0": + version "4.0.2" + resolved "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz" + integrity sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ== + +"zod@^3.25.0 || ^4.0.0": + version "4.3.6" + resolved "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== diff --git a/src/problem2/index.html b/src/problem2/index.html deleted file mode 100644 index 4058a68bff..0000000000 --- a/src/problem2/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Fancy Form - - - - - - - - -
-
Swap
- - - - - - - -
- - - - diff --git a/src/problem2/script.js b/src/problem2/script.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/problem2/style.css b/src/problem2/style.css deleted file mode 100644 index 915af91c72..0000000000 --- a/src/problem2/style.css +++ /dev/null @@ -1,8 +0,0 @@ -body { - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - min-width: 360px; - font-family: Arial, Helvetica, sans-serif; -} From d3c73f0a4a5ecd36d9ed0d0ada860038ec4cb122 Mon Sep 17 00:00:00 2001 From: cole nguyen Date: Tue, 28 Apr 2026 18:07:49 +0700 Subject: [PATCH 2/3] refine UI --- src/problem2/fancy-form/src/App.tsx | 2 +- .../src/components/layout/Background.tsx | 6 +++--- .../src/components/layout/ThemeToggle.tsx | 2 +- .../src/components/swap/SwapButton.tsx | 6 +++--- .../src/components/swap/SwapCard.tsx | 5 ++--- .../src/components/swap/SwapDetails.tsx | 8 ++++---- .../components/swap/SwapDirectionButton.tsx | 4 +++- .../src/components/swap/TokenInput.tsx | 20 +++++++++---------- .../src/components/swap/TokenSelectModal.tsx | 16 +++++++-------- .../fancy-form/src/components/ui/dialog.tsx | 2 +- src/problem2/fancy-form/src/index.css | 1 + 11 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/problem2/fancy-form/src/App.tsx b/src/problem2/fancy-form/src/App.tsx index 6f5bc198b1..46e6cf8e20 100644 --- a/src/problem2/fancy-form/src/App.tsx +++ b/src/problem2/fancy-form/src/App.tsx @@ -17,7 +17,7 @@ function App() { return ( -
+
{/* Theme toggle - top right */} diff --git a/src/problem2/fancy-form/src/components/layout/Background.tsx b/src/problem2/fancy-form/src/components/layout/Background.tsx index 9e93bf5d9a..9f874eab85 100644 --- a/src/problem2/fancy-form/src/components/layout/Background.tsx +++ b/src/problem2/fancy-form/src/components/layout/Background.tsx @@ -2,13 +2,13 @@ export function Background() { return (
{/* Large blob - top right */} -
+
{/* Medium blob - bottom left */} -
+
{/* Small blob - center */} -
+
{/* Subtle grid pattern */}
diff --git a/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx b/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx index 3b4a40c36c..586724e61c 100644 --- a/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx +++ b/src/problem2/fancy-form/src/components/layout/ThemeToggle.tsx @@ -11,7 +11,7 @@ export function ThemeToggle() { variant="ghost" size="icon" onClick={toggleTheme} - className="h-10 w-10 rounded-xl text-slate-500 hover:bg-white/60 hover:text-slate-700 active:scale-95 dark:text-slate-400 dark:hover:bg-white/10 dark:hover:text-white" + className="h-11 w-11 rounded-2xl border border-white/60 bg-white/50 text-slate-600 shadow-sm backdrop-blur-md transition-all duration-300 hover:bg-white/90 hover:text-slate-900 hover:shadow-md active:scale-95 dark:border-white/10 dark:bg-black/20 dark:text-slate-400 dark:hover:bg-black/40 dark:hover:text-slate-100" aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'} > {isDark ? : } diff --git a/src/problem2/fancy-form/src/components/swap/SwapButton.tsx b/src/problem2/fancy-form/src/components/swap/SwapButton.tsx index 48776ea197..a6f91407b8 100644 --- a/src/problem2/fancy-form/src/components/swap/SwapButton.tsx +++ b/src/problem2/fancy-form/src/components/swap/SwapButton.tsx @@ -21,12 +21,12 @@ export function SwapButton({ label, canSwap, status, onSwap }: SwapButtonProps) onClick={onSwap} disabled={!canSwap || isProcessing} size="lg" - className={`relative mt-1 flex w-full items-center justify-center gap-2 rounded-2xl py-6 text-base font-bold transition-all duration-300 sm:text-lg ${ + className={`relative mt-1 flex w-full items-center justify-center gap-2 rounded-[1.25rem] py-6 text-base font-bold transition-all duration-300 sm:text-lg ${ isSuccess ? 'bg-emerald-500 text-white hover:bg-emerald-600 shadow-lg shadow-emerald-500/30' : canSwap && !isProcessing - ? 'bg-blue-600 text-white shadow-lg shadow-blue-600/30 hover:bg-blue-700 hover:shadow-blue-700/40' - : 'bg-slate-100 text-slate-400 dark:bg-[#0f1d32] dark:text-slate-600' + ? 'bg-slate-900 text-white shadow-xl shadow-slate-900/20 hover:bg-slate-800 hover:shadow-slate-900/30 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-100 dark:shadow-white/10 active:scale-[0.98]' + : 'bg-white/50 text-slate-400 dark:bg-[#0f1d32] dark:text-slate-600 border border-white/20' }`} > {isProcessing && } diff --git a/src/problem2/fancy-form/src/components/swap/SwapCard.tsx b/src/problem2/fancy-form/src/components/swap/SwapCard.tsx index 91a0724f47..d23567236a 100644 --- a/src/problem2/fancy-form/src/components/swap/SwapCard.tsx +++ b/src/problem2/fancy-form/src/components/swap/SwapCard.tsx @@ -8,7 +8,7 @@ import { SwapDetails } from './SwapDetails'; import { SwapButton } from './SwapButton'; import toast from 'react-hot-toast'; -import { Skeleton } from '../ui/Skeleton'; +import { Skeleton } from '../ui/skeleton'; const TokenSelectModal = lazy(() => import('./TokenSelectModal').then((mod) => ({ default: mod.TokenSelectModal })), @@ -81,8 +81,7 @@ export function SwapCard() { return ( <> -
- +

Swap Tokens

diff --git a/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx b/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx index f1ab2bd472..bd0c0160a8 100644 --- a/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx +++ b/src/problem2/fancy-form/src/components/swap/SwapDetails.tsx @@ -28,7 +28,7 @@ export function SwapDetails({ sellToken, buyToken, exchangeRate, priceImpact }: id="swap-details-toggle" type="button" onClick={() => setIsExpanded((prev) => !prev)} - className="flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm text-slate-500 transition-colors hover:bg-slate-50 dark:text-slate-400 dark:hover:bg-[#0f1d32]" + className="flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm text-slate-600 transition-colors hover:bg-slate-50 dark:text-slate-300 dark:hover:bg-white/5" >