improve evm ui (#3129)

* improve evm ui

* fix model generation

* add db schema

* bugfixes

* scrollable fav token modal

* make combined balance the default

* add crypto_full_icons to pubspec

* optimize transaction duplication check

* fix format issue

* add chain icons to swap tiles

* decrease asset tile font weight

* show chain icon in swap currency selector

* move chain icon for tokens

* new trade history row

* ui fix

* fix padding on modal

* remove vec
This commit is contained in:
malik1004x
2026-04-01 11:04:58 +02:00
committed by GitHub
parent ed34c4b3df
commit 915e76d4f9
51 changed files with 710 additions and 195 deletions
+43 -41
View File
@@ -12,6 +12,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
required this.decimals,
this.fullName,
this.iconPath,
this.iconSvgPath,
this.flatIconPath,
this.tag,
this.chainIconPath,
@@ -23,6 +24,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
final String? tag;
final String? fullName;
final String? iconPath;
final String? iconSvgPath;
final String? flatIconPath;
final String? chainIconPath;
@override
@@ -149,20 +151,20 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
static const zcashCurrencies = [ zec, zaddr, tzec ];
// title, tag (if applicable), fullName (if unique), raw, name, iconPath
static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/images/crypto/monero.webp', decimals: 12,flatIconPath: "assets/new-ui/balance_card_icons/monero.svg");
static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/images/crypto/monero.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/monero.svg", decimals: 12,flatIconPath: "assets/new-ui/balance_card_icons/monero.svg");
static const ada = CryptoCurrency(title: 'ADA', fullName: 'Cardano', raw: 1, name: 'ada', iconPath: 'assets/images/ada_icon.png', decimals: 6);
static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/images/crypto/bitcoin-cash.webp', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
static const bnb = CryptoCurrency(title: 'BNB', tag: 'BSC', fullName: 'BNB', raw: 3, name: 'bnb', iconPath: 'assets/images/crypto/BNB.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/bnb.svg", chainIconPath: "assets/new-ui/chain_badges/bnb smart chain.svg");
static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/images/crypto/bitcoin.webp', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/bitcoin.svg");
static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/images/crypto/dai.webp', decimals: 18);
static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/images/crypto/bitcoin-cash.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/bitcoin-cash.svg",decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
static const bnb = CryptoCurrency(title: 'BNB', tag: 'BSC', fullName: 'BNB', raw: 3, name: 'bnb', iconPath: 'assets/images/crypto/BNB.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/bnb.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/bnb.svg", chainIconPath: "assets/new-ui/chain_badges/bnb smart chain.svg");
static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/images/crypto/bitcoin.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/bitcoin.svg",decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/bitcoin.svg");
static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/images/crypto/dai.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/dai.svg", decimals: 18);
static const dash = CryptoCurrency(title: 'DASH', fullName: 'Dash', raw: 6, name: 'dash', iconPath: 'assets/images/dash_icon.png', decimals: 8);
static const eos = CryptoCurrency(title: 'EOS', fullName: 'EOS', raw: 7, name: 'eos', iconPath: 'assets/images/eos_icon.png', decimals: 4);
static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/images/crypto/ethereum.webp', decimals: 18,flatIconPath: "assets/new-ui/balance_card_icons/ethereum.svg", chainIconPath: "assets/new-ui/chain_badges/ethereum.svg");
static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/crypto/litecoin.webp', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/litecoin.svg", chainIconPath: "assets/new-ui/chain_badges/mweb.svg");
static const nano = CryptoCurrency(title: 'XNO', fullName: 'Nano', raw: 10, name: 'xno', iconPath: 'assets/images/crypto/nano.webp', decimals: 30,flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/crypto/tron.webp', decimals: 6,flatIconPath: "assets/new-ui/balance_card_icons/tron.svg", chainIconPath: "assets/new-ui/chain_badges/tron.svg");
static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/crypto/litecoin.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/litecoin.svg",decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/litecoin.svg", chainIconPath: "assets/new-ui/chain_badges/mweb.svg");
static const nano = CryptoCurrency(title: 'XNO', fullName: 'Nano', raw: 10, name: 'xno', iconPath: 'assets/images/crypto/nano.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/nano.svg",decimals: 30,flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/crypto/tron.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/tron.svg", decimals: 6,flatIconPath: "assets/new-ui/balance_card_icons/tron.svg", chainIconPath: "assets/new-ui/chain_badges/tron.svg");
static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const xlm = CryptoCurrency(title: 'XLM', fullName: 'Stellar', raw: 14, name: 'xlm', iconPath: 'assets/images/xlm_icon.png', decimals: 7);
static const xrp = CryptoCurrency(title: 'XRP', fullName: 'Ripple', raw: 15, name: 'xrp', iconPath: 'assets/images/xrp_icon.png', decimals: 6);
static const xhv = CryptoCurrency(title: 'XHV', fullName: 'Haven Protocol', raw: 16, name: 'xhv', iconPath: 'assets/images/xhv_logo.png', decimals: 12);
@@ -182,42 +184,42 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd', decimals: 12);
static const ape = CryptoCurrency(title: 'APE', tag: 'ETH', fullName: 'ApeCoin', raw: 30, name: 'ape', iconPath: 'assets/images/ape_icon.png', decimals: 18);
static const avaxc = CryptoCurrency(title: 'AVAX', tag: 'AVAXC', fullName: 'Avalanche', raw: 31, name: 'avaxc', iconPath: 'assets/images/avaxc_icon.png', decimals: 9);
static const avaxc = CryptoCurrency(title: 'AVAX', tag: 'AVAXC', fullName: 'Avalanche', raw: 31, name: 'avaxc', iconPath: 'assets/images/avaxc_icon.png',iconSvgPath: "assets/new-ui/crypto_full_icons/avax.svg", decimals: 9);
static const btt = CryptoCurrency(title: 'BTT', tag: 'ETH', fullName: 'BitTorrent', raw: 32, name: 'btt', iconPath: 'assets/images/btt_icon.png', decimals: 18);
static const bttc = CryptoCurrency(title: 'BTTC', tag: 'TRX', fullName: 'BitTorrent-NEW', raw: 33, name: 'bttc', iconPath: 'assets/images/btt_icon.png', decimals: 18);
static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/images/crypto/dogecoin.webp', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/dogecoin.svg");
static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/images/crypto/dogecoin.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/dogecoin.svg", decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/dogecoin.svg");
static const firo = CryptoCurrency(title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png', decimals: 8);
static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const hbar = CryptoCurrency(title: 'HBAR', fullName: 'Hedera', raw: 37, name: 'hbar', iconPath: 'assets/images/hbar_icon.png', decimals: 8);
static const sc = CryptoCurrency(title: 'SC', fullName: 'Siacoin', raw: 38, name: 'sc', iconPath: 'assets/images/sc_icon.png', decimals: 16);
static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/images/crypto/solana.webp', decimals: 9,flatIconPath: "assets/new-ui/balance_card_icons/solana.svg", chainIconPath: "assets/new-ui/chain_badges/solana.svg");
static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USDC', raw: 40, name: 'usdc', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/images/crypto/solana.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/solana.svg", decimals: 9,flatIconPath: "assets/new-ui/balance_card_icons/solana.svg", chainIconPath: "assets/new-ui/chain_badges/solana.svg");
static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USDC', raw: 40, name: 'usdc', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', fullName: 'Shielded Zcash', raw: 42, name: 'zaddr', iconPath: 'assets/images/zec_icon.png', decimals: 8);
static const tzec = CryptoCurrency(title: 'tZEC', tag: 'ZEC', fullName: 'Transparent Zcash', raw: 43, name: 'zec', iconPath: 'assets/images/zec_icon.png', decimals: 8);
static const zen = CryptoCurrency(title: 'ZEN', fullName: 'Horizen', raw: 44, name: 'zen', iconPath: 'assets/images/zen_icon.png', decimals: 8);
static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', raw: 45, name: 'xvg', iconPath: 'assets/images/xvg_icon.png', decimals: 8);
static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POL', fullName: 'USDC', raw: 46, name: 'usdcpoly', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/images/crypto/decred.webp', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/decred.svg");
static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POL', fullName: 'USDC', raw: 46, name: 'usdcpoly', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/images/crypto/decred.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/decred.svg", decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/decred.svg");
static const kmd = CryptoCurrency(title: 'KMD', fullName: 'Komodo', raw: 48, name: 'kmd', iconPath: 'assets/images/kmd_icon.png', decimals: 8);
static const mana = CryptoCurrency(title: 'MANA', tag: 'ETH', fullName: 'Decentraland', raw: 49, name: 'mana', iconPath: 'assets/images/mana_icon.png', decimals: 18);
static const maticpoly = CryptoCurrency(title: 'POL', tag: 'POL', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/images/crypto/polygon.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg", chainIconPath: "assets/new-ui/chain_badges/polygon.svg");
static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/images/crypto/polygon.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg");
static const maticpoly = CryptoCurrency(title: 'POL', tag: 'POL', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/images/crypto/polygon.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/polygon.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg", chainIconPath: "assets/new-ui/chain_badges/polygon.svg");
static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/images/crypto/polygon.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/polygon.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg");
static const mkr = CryptoCurrency(title: 'MKR', tag: 'ETH', fullName: 'Maker', raw: 52, name: 'mkr', iconPath: 'assets/images/mkr_icon.png', decimals: 18);
static const near = CryptoCurrency(title: 'NEAR', fullName: 'NEAR Protocol', raw: 53, name: 'near', iconPath: 'assets/images/near_icon.png', decimals: 24);
static const oxt = CryptoCurrency(title: 'OXT', tag: 'ETH', fullName: 'Orchid', raw: 54, name: 'oxt', iconPath: 'assets/images/oxt_icon.png', decimals: 18);
static const paxg = CryptoCurrency(title: 'PAXG', tag: 'ETH', fullName: 'Pax Gold', raw: 55, name: 'paxg', iconPath: 'assets/images/paxg.webp', decimals: 18);
static const paxg = CryptoCurrency(title: 'PAXG', tag: 'ETH', fullName: 'Pax Gold', raw: 55, name: 'paxg', iconPath: 'assets/images/paxg.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/paxg.svg",decimals: 18);
static const pivx = CryptoCurrency(title: 'PIVX', raw: 56, name: 'pivx', iconPath: 'assets/images/pivx_icon.png', decimals: 8);
static const rune = CryptoCurrency(title: 'RUNE', fullName: 'Thorchain', raw: 57, name: 'rune', iconPath: 'assets/images/rune_icon.png', decimals: 18);
static const rvn = CryptoCurrency(title: 'RVN', fullName: 'Ravencoin', raw: 58, name: 'rvn', iconPath: 'assets/images/rvn_icon.png', decimals: 8);
static const scrt = CryptoCurrency(title: 'SCRT', fullName: 'Secret Network', raw: 59, name: 'scrt', iconPath: 'assets/images/scrt_icon.png', decimals: 6);
static const uni = CryptoCurrency(title: 'UNI', tag: 'ETH', fullName: 'Uniswap', raw: 60, name: 'uni', iconPath: 'assets/images/uni_icon.png', decimals: 18);
static const stx = CryptoCurrency(title: 'STX', fullName: 'Stacks', raw: 61, name: 'stx', iconPath: 'assets/images/stx_icon.png', decimals: 8);
static const btcln = CryptoCurrency(title: 'BTC', tag: 'LN', fullName: 'Bitcoin Lightning Network', raw: 62, name: 'btcln', iconPath: 'assets/images/crypto/lightning.webp', decimals: 8);
static const btcln = CryptoCurrency(title: 'BTC', tag: 'LN', fullName: 'Bitcoin Lightning Network', raw: 62, name: 'btcln', iconPath: 'assets/images/crypto/lightning.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/lightning.svg", chainIconPath: "assets/new-ui/chain_badges/lightning.svg", decimals: 8);
static const shib = CryptoCurrency(title: 'SHIB', tag: 'ETH', fullName: 'Shiba Inu', raw: 63, name: 'shib', iconPath: 'assets/images/shib_icon.png', decimals: 18);
static const aave = CryptoCurrency(title: 'AAVE', tag: 'ETH', fullName: 'Aave', raw: 64, name: 'aave', iconPath: 'assets/images/aave_icon.png', decimals: 18);
static const arb = CryptoCurrency(title: 'ARB', fullName: 'Arbitrum', raw: 65, name: 'arb', iconPath: 'assets/images/crypto/arbitrum.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg", chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
static const arb = CryptoCurrency(title: 'ARB', fullName: 'Arbitrum', raw: 65, name: 'arb', iconPath: 'assets/images/crypto/arbitrum.webp', iconSvgPath: "assets/new-ui/crypto_full_icons/arbitrum.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg", chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
static const bat = CryptoCurrency(title: 'BAT', tag: 'ETH', fullName: 'Basic Attention Token', raw: 66, name: 'bat', iconPath: 'assets/images/bat_icon.png', decimals: 18);
static const comp = CryptoCurrency(title: 'COMP', tag: 'ETH', fullName: 'Compound', raw: 67, name: 'comp', iconPath: 'assets/images/comp_icon.png', decimals: 18);
static const cro = CryptoCurrency(title: 'CRO', tag: 'ETH', fullName: 'Crypto.com Cronos', raw: 68, name: 'cro', iconPath: 'assets/images/cro_icon.png', decimals: 8);
@@ -233,36 +235,36 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
static const pepe = CryptoCurrency(title: 'PEPE', tag: 'ETH', fullName: 'Pepe', raw: 78, name: 'pepe', iconPath: 'assets/images/pepe_icon.png', decimals: 18);
static const storj = CryptoCurrency(title: 'STORJ', tag: 'ETH', fullName: 'Storj', raw: 79, name: 'storj', iconPath: 'assets/images/storj_icon.png', decimals: 8);
static const tusd = CryptoCurrency(title: 'TUSD', tag: 'ETH', fullName: 'TrueUSD', raw: 80, name: 'tusd', iconPath: 'assets/images/tusd_icon.png', decimals: 18);
static const wbtc = CryptoCurrency(title: 'WBTC', tag: 'ETH', fullName: 'Wrapped Bitcoin', raw: 81, name: 'wbtc', iconPath: 'assets/images/crypto/wbtc.webp', decimals: 8);
static const weth = CryptoCurrency(title: 'WETH', tag: 'ETH', fullName: 'Wrapped Ethereum', raw: 82, name: 'weth', iconPath: 'assets/images/crypto/ethereum.webp', decimals: 18);
static const wbtc = CryptoCurrency(title: 'WBTC', tag: 'ETH', fullName: 'Wrapped Bitcoin', raw: 81, name: 'wbtc', iconPath: 'assets/images/crypto/wbtc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/wbtc.svg", decimals: 8);
static const weth = CryptoCurrency(title: 'WETH', tag: 'ETH', fullName: 'Wrapped Ethereum', raw: 82, name: 'weth', iconPath: 'assets/images/crypto/ethereum.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/ethereum.svg", decimals: 18);
static const zrx = CryptoCurrency(title: 'ZRX', tag: 'ETH', fullName: '0x Protocol', raw: 83, name: 'zrx', iconPath: 'assets/images/zrx_icon.png', decimals: 18);
static const dydx = CryptoCurrency(title: 'DYDX', tag: 'ETH', fullName: 'dYdX', raw: 84, name: 'dydx', iconPath: 'assets/images/dydx_icon.png', decimals: 18);
static const steth = CryptoCurrency(title: 'STETH', tag: 'ETH', fullName: 'Lido Staked Ethereum', raw: 85, name: 'steth', iconPath: 'assets/images/crypto/ethereum.webp', decimals: 18);
static const steth = CryptoCurrency(title: 'STETH', tag: 'ETH', fullName: 'Lido Staked Ethereum', raw: 85, name: 'steth', iconPath: 'assets/images/crypto/ethereum.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/ethereum.svg", decimals: 18);
static const banano = CryptoCurrency(title: 'BAN', fullName: 'Banano', raw: 86, name: 'banano', iconPath: 'assets/images/nano_icon.png', decimals: 29,flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
static const usdtPoly = CryptoCurrency(title: 'USDT', tag: 'POL', fullName: 'Tether (PoS)', raw: 87, name: 'usdtpoly', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const usdcEPoly = CryptoCurrency(title: 'USDC.E', tag: 'POL', fullName: 'USDC (PoS)', raw: 88, name: 'usdcepoly', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const usdtPoly = CryptoCurrency(title: 'USDT', tag: 'POL', fullName: 'Tether (PoS)', raw: 87, name: 'usdtpoly', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const usdcEPoly = CryptoCurrency(title: 'USDC.E', tag: 'POL', fullName: 'USDC (PoS)', raw: 88, name: 'usdcepoly', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const kaspa = CryptoCurrency(title: 'KAS', fullName: 'Kaspa', raw: 89, name: 'kas', iconPath: 'assets/images/kaspa_icon.png', decimals: 8);
static const digibyte = CryptoCurrency(title: 'DGB', fullName: 'DigiByte', raw: 90, name: 'dgb', iconPath: 'assets/images/digibyte.png', decimals: 8);
static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8);
static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/crypto/wownero.webp', decimals: 11);
static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/images/ton_icon.png', decimals: 8);
static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/images/crypto/zano.webp', decimals: 12,flatIconPath: "assets/new-ui/balance_card_icons/zano.svg", chainIconPath: "assets/new-ui/chain_badges/zano.svg");
static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/images/ton_icon.png', iconSvgPath: "assets/new-ui/crypto_full_icons/ton.svg",decimals: 8);
static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/images/crypto/zano.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/zano.svg", decimals: 12,flatIconPath: "assets/new-ui/balance_card_icons/zano.svg", chainIconPath: "assets/new-ui/chain_badges/zano.svg");
static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18);
static const deuro = CryptoCurrency(title: 'DEURO', tag: 'ETH', fullName: 'Decentralized Euro', raw: 98, name: 'deuro', iconPath: 'assets/images/deuro_icon.png', decimals: 18);
static const usdtbsc = CryptoCurrency(title: 'USDT', tag: 'BSC', fullName: 'USDT Binance coin', raw: 99, name: 'usdtbsc', iconPath: 'assets/images/crypto/tether.webp', decimals: 18);
static const deuro = CryptoCurrency(title: 'DEURO', tag: 'ETH', fullName: 'Decentralized Euro', raw: 98, name: 'deuro', iconPath: 'assets/images/deuro_icon.png', iconSvgPath: "assets/new-ui/crypto_full_icons/deuro.svg",decimals: 18);
static const usdtbsc = CryptoCurrency(title: 'USDT', tag: 'BSC', fullName: 'USDT Binance coin', raw: 99, name: 'usdtbsc', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 18);
static const ndeps = CryptoCurrency(title: 'NDEPS', tag: 'ETH', fullName: 'Native Decentralized Euro Protocol Share', raw: 100, name: 'ndeps', iconPath: 'assets/images/ndeps_icon.png', decimals: 18);
static const deps = CryptoCurrency(title: 'DEPS', tag: 'ETH', fullName: 'Decentralized Euro Protocol Share', raw: 101, name: 'deps', iconPath: 'assets/images/deps_icon.png', decimals: 18);
static const kbtc = CryptoCurrency(title: 'KBTC', tag: 'ETH', fullName: 'Kraken Wrapped Bitcoin', raw: 102, name: 'kbtc', iconPath: 'assets/images/kbtc_icon.png', decimals: 8);
static const cbbtc = CryptoCurrency(title: 'CBBTC', tag: 'ETH', fullName: 'Coinbase Wrapped BTC', raw: 103, name: 'cbbtc', iconPath: 'assets/images/cbbtc_icon.png', decimals: 8);
static const baseEth = CryptoCurrency(title: 'ETH', tag: 'BASE', fullName: 'Ethereum', raw: 104, name: 'baseth', iconPath: 'assets/images/crypto/ethereum.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/base.svg", chainIconPath: "assets/new-ui/chain_badges/base.svg");
static const usde = CryptoCurrency(title: 'USDE', tag: 'BASE', fullName: 'Ethena USDE', raw: 105, name: 'usde', iconPath: 'assets/images/crypto/ethena-usde-logo.png', decimals: 18);
static const arbEth = CryptoCurrency(title: 'ETH', tag: 'ARB', fullName: 'Ethereum', raw: 106, name: 'arbeth', iconPath: 'assets/images/crypto/ethereum.webp', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg");
static const zec = CryptoCurrency(title: 'ZEC', fullName: 'Zcash', raw: 107, name: 'zec', iconPath: 'assets/images/zec_icon.png', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/zcash.svg");
static const usdcArb = CryptoCurrency(title: 'USDC', tag: 'ARB', fullName: 'USDC Coin', raw: 108, name: 'usdcarb', iconPath: 'assets/images/crypto/usdc.webp', decimals: 6);
static const usdtArb = CryptoCurrency(title: 'USDT', tag: 'ARB', fullName: 'USDT Tether', raw: 109, name: 'usdtarb', iconPath: 'assets/images/crypto/tether.webp', decimals: 6);
static const ltcmweb = CryptoCurrency(title: 'LTC', fullName: 'Litecoin MWeb', raw: 110, name: 'ltcmweb', iconPath: 'assets/images/crypto/litecoin.webp', decimals: 8);
static const baseEth = CryptoCurrency(title: 'ETH', tag: 'BASE', fullName: 'Ethereum', raw: 104, name: 'baseth', iconPath: 'assets/images/crypto/ethereum.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/ethereum.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/base.svg", chainIconPath: "assets/new-ui/chain_badges/base.svg");
static const usde = CryptoCurrency(title: 'USDE', tag: 'BASE', fullName: 'Ethena USDE', raw: 105, name: 'usde', iconPath: 'assets/images/crypto/ethena-usde-logo.png',iconSvgPath: "assets/new-ui/crypto_full_icons/usde.svg", decimals: 18);
static const arbEth = CryptoCurrency(title: 'ETH', tag: 'ARB', fullName: 'Ethereum', raw: 106, name: 'arbeth', iconPath: 'assets/images/crypto/ethereum.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/ethereum.svg", decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg");
static const zec = CryptoCurrency(title: 'ZEC', fullName: 'Zcash', raw: 107, name: 'zec', iconPath: 'assets/images/zec_icon.png',iconSvgPath: "assets/new-ui/crypto_full_icons/zcash.svg", decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/zcash.svg");
static const usdcArb = CryptoCurrency(title: 'USDC', tag: 'ARB', fullName: 'USDC Coin', raw: 108, name: 'usdcarb', iconPath: 'assets/images/crypto/usdc.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdc.svg", decimals: 6);
static const usdtArb = CryptoCurrency(title: 'USDT', tag: 'ARB', fullName: 'USDT Tether', raw: 109, name: 'usdtarb', iconPath: 'assets/images/crypto/tether.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/usdt.svg", decimals: 6);
static const ltcmweb = CryptoCurrency(title: 'LTC', fullName: 'Litecoin MWeb', raw: 110, name: 'ltcmweb', iconPath: 'assets/images/crypto/litecoin.webp',iconSvgPath: "assets/new-ui/crypto_full_icons/litecoin.svg", decimals: 8);
static final Map<int, CryptoCurrency> _rawCurrencyMap =
[...all, ...havenCurrencies, ...zcashCurrencies].fold<Map<int, CryptoCurrency>>(<int, CryptoCurrency>{}, (acc, item) {
+11 -2
View File
@@ -39,7 +39,7 @@ Future<void> initDb({String? pathOverride}) async {
}
}
await db?.close();
db = await openDatabase(dbFile.path, version: 3,
db = await openDatabase(dbFile.path, version: 4,
onUpgrade: (Database db, int oldVersion, int newVersion) async {
printV("migrating: $oldVersion, $newVersion");
if (oldVersion <= 1) {
@@ -81,6 +81,13 @@ CREATE TABLE IF NOT EXISTS BalanceCardStyleSettings (
definition: 'INTEGER DEFAULT 0',
);
}
if (oldVersion <= 3) {
await _addColumnIfNotExists(db, table: "WalletInfo", column: "showCombinedBalance", definition: "BOOLEAN DEFAULT TRUE");
// null - primary token (eth, sol etc)
// not null - address of fav token
// if address doesn't correspond to a valid token, fallback to primary token
await _addColumnIfNotExists(db, table: "WalletInfo", column: "favoriteTokenAddress", definition: "TEXT DEFAULT NULL");
}
},
onCreate: (Database db, int version) async {
await db.execute(
@@ -107,7 +114,9 @@ CREATE TABLE WalletInfo (
hashedWalletIdentifier TEXT,
isNonSeedWallet INTEGER DEFAULT (0) NOT NULL,
sortOrder INTEGER DEFAULT (0) NOT NULL,
receiveInfoboxDismissed BOOLEAN DEFAULT FALSE
receiveInfoboxDismissed BOOLEAN DEFAULT FALSE,
showCombinedBalance BOOLEAN DEFAULT TRUE,
favoriteTokenAddress TEXT DEFAULT NULL
);
''');
+14 -4
View File
@@ -347,8 +347,9 @@ class WalletInfo {
this.isNonSeedWallet,
this.sortOrder,
this.addressPageType,
this.receiveInfoboxDismissed
this.receiveInfoboxDismissed,
this.showCombinedBalance,
this.favoriteTokenAddress
) : _yatLastUsedAddressController = StreamController<String>.broadcast();
factory WalletInfo.external({
@@ -371,6 +372,8 @@ class WalletInfo {
bool? isNonSeedWallet,
int? sortOrder,
bool? receiveInfoboxDismissed,
bool? showCombinedBalance,
String? favoriteTokenAddress
}) {
return WalletInfo(
0,
@@ -393,7 +396,9 @@ class WalletInfo {
isNonSeedWallet ?? false,
sortOrder ?? 0,
null,
receiveInfoboxDismissed ?? false
receiveInfoboxDismissed ?? false,
showCombinedBalance ?? true,
favoriteTokenAddress
);
}
@@ -413,6 +418,8 @@ class WalletInfo {
String path;
String address;
bool receiveInfoboxDismissed;
bool showCombinedBalance;
String? favoriteTokenAddress;
Future<Map<String, String>> getAddresses() async {
final list = await WalletInfoAddressMap.selectList(internalId);
@@ -578,7 +585,8 @@ class WalletInfo {
"sortOrder": sortOrder,
"addressPageType": addressPageType,
"receiveInfoboxDismissed": receiveInfoboxDismissed ? 1 : 0,
"showCombinedBalance": showCombinedBalance ? 1 : 0,
"favoriteTokenAddress": favoriteTokenAddress
};
factory WalletInfo.fromJson(Map<String, dynamic> json) {
@@ -606,6 +614,8 @@ class WalletInfo {
json['sortOrder'] as int? ?? 0,
json['addressPageType'] as String? ?? null,
json['receiveInfoboxDismissed'] != 0,
json["showCombinedBalance"] != 0,
json["favoriteTokenAddress"] as String? ?? null
);
}
+3 -1
View File
@@ -271,7 +271,9 @@ class WalletInfo extends HiveObject {
isNonSeedWallet,
0,
addressPageType,
false
false,
true,
null
);
final wiId = await walletInfo.save();
for (final address in usedAddresses ?? <String>[]) {
+51 -10
View File
@@ -854,6 +854,9 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
.getCryptoSymbol(_selectedCurrency as CryptoCurrency)
: _selectedCurrency.name.toUpperCase();
final chainIconPath = (_selectedCurrency is CryptoCurrency) ? _getCurrencyChainIconPath(_selectedCurrency as CryptoCurrency) : null;
return Column(
spacing: 12,
crossAxisAlignment: CrossAxisAlignment.start,
@@ -939,16 +942,38 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
currencyToShow,
textAlign: TextAlign.center,
),
SizedBox(width:10),
RotatedBox(
quarterTurns: 2,
child: CakeImageWidget(imageUrl:
"assets/new-ui/dropdown_arrow.svg",
width: 4,
height: 4,
colorFilter: ColorFilter.mode(
Theme.of(context).colorScheme.primary, BlendMode.srcIn),
)),
if (chainIconPath != null && chainIconPath.isNotEmpty) ...[
SizedBox(width: 4),
CakeImageWidget(
imageUrl: chainIconPath,
width: 12,
height: 12,
colorFilter: ColorFilter.mode(
Theme.of(context).colorScheme.onSurfaceVariant,
BlendMode.srcIn),
),
SizedBox(width: 6)
] else
SizedBox(width: 10),
Container(
width:16,height:16,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(9999999999),
color: Theme.of(context).colorScheme.surfaceContainerHigh
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RotatedBox(
quarterTurns: 2,
child: CakeImageWidget(imageUrl:
"assets/new-ui/dropdown_arrow.svg",
width: 4,
height: 4,
colorFilter: ColorFilter.mode(
Theme.of(context).colorScheme.primary, BlendMode.srcIn),
)),
),
),
SizedBox(width:4),
],
),
@@ -1255,4 +1280,20 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
if (s.length <= head + tail + 3) return s;
return s.substring(0, head) + '...' + s.substring(s.length - tail);
}
String? _getCurrencyChainIconPath(CryptoCurrency curr) {
try{
if(curr.chainIconPath != null) return curr.chainIconPath!;
if(curr.tag != null) {
final currencyFromTag = CryptoCurrency.fromString(curr.tag!);
if(currencyFromTag.chainIconPath != null) {
return currencyFromTag.chainIconPath!;
}
}
}catch(_){}
return null;
}
}
@@ -13,7 +13,6 @@ import 'package:cw_core/crypto_currency.dart';
import 'package:cw_core/unspent_coin_type.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
enum AssetDetailsModalModes { normal, ltcTransparent, ltcPrivate }
@@ -60,6 +59,7 @@ class AssetDetailsModal extends StatelessWidget {
title: "",
trailingIcon: Icon(Icons.close),
onTrailingPressed: Navigator.of(context).pop,
padding: EdgeInsets.only(top:12,right:18),
),
SafeArea(
child: Column(
@@ -89,25 +89,25 @@ class AssetDetailsModal extends StatelessWidget {
fontSize: 28, color: Theme.of(context).colorScheme.onPrimary),
)),
),
if (chainIconPath.isNotEmpty)
Align(
alignment: Alignment.bottomRight,
child: Container(
decoration: ShapeDecoration(
shape: RoundedSuperellipseBorder(
borderRadius: BorderRadius.circular(8),
side: BorderSide(color: Colors.black)),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: CakeImageWidget(imageUrl:
chainIconPath,
width: 18,
height: 18,
colorFilter:
ColorFilter.mode(Colors.black, BlendMode.srcIn),
),
)))
// if (chainIconPath.isNotEmpty)
// Align(
// alignment: Alignment.bottomRight,
// child: Container(
// decoration: ShapeDecoration(
// shape: RoundedSuperellipseBorder(
// borderRadius: BorderRadius.circular(8),
// side: BorderSide(color: Colors.black)),
// color: Colors.white),
// child: Padding(
// padding: const EdgeInsets.all(4.0),
// child: CakeImageWidget(imageUrl:
// chainIconPath,
// width: 18,
// height: 18,
// colorFilter:
// ColorFilter.mode(Colors.black, BlendMode.srcIn),
// ),
// )))
],
),
),
@@ -125,14 +125,16 @@ class AssetDetailsModal extends StatelessWidget {
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface),
),
if(asset != null)
Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surfaceContainerHigh,
color: Theme.of(context).colorScheme.surfaceContainer,
borderRadius: BorderRadius.circular(999999999)),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4),
child: Text(
chainTitle,
asset?.title??"",
style: TextStyle(
color: Theme.of(context).colorScheme.onSurfaceVariant),
),
@@ -141,11 +143,22 @@ class AssetDetailsModal extends StatelessWidget {
],
),
if (subtitle.isNotEmpty)
Text(
subtitle,
style: TextStyle(
fontSize: 16,
color: Theme.of(context).colorScheme.onSurfaceVariant),
Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 4,
children: [
if(chainIconPath.isNotEmpty)
CakeImageWidget(
imageUrl: chainIconPath,
width:16,height:16,colorFilter: ColorFilter.mode(Theme.of(context).colorScheme.onSurfaceVariant,BlendMode.srcIn),
),
Text(
subtitle,
style: TextStyle(
fontSize: 16,
color: Theme.of(context).colorScheme.onSurfaceVariant),
),
],
),
],
)
@@ -17,7 +17,7 @@ class AssetTile extends StatelessWidget {
this.title,
this.trailingText,
this.modalMode = AssetDetailsModalModes.normal,
required this.wallet, required this.showSwap});
required this.wallet, required this.showSwap, required this.isFirst, required this.isLast});
final BalanceRecord balance;
final bool showSecondary;
@@ -27,6 +27,8 @@ class AssetTile extends StatelessWidget {
final String? trailingText;
final AssetDetailsModalModes modalMode;
final WalletBase wallet;
final bool isFirst;
final bool isLast;
@override
Widget build(BuildContext context) {
@@ -42,8 +44,8 @@ class AssetTile extends StatelessWidget {
showSwap: showSwap,
asset: balance.asset,
title: title ?? balance.asset.fullName ?? balance.asset.name,
chainTitle: _getChainTitle(),
subtitle: trailingText ?? "",
chainTitle: "",
subtitle: trailingText ?? _getChainTitle(),
amount: showSecondary ? balance.secondAvailableBalance : balance.availableBalance,
currencyTitle: balance.asset.title,
fiatAmount: showSecondary
@@ -57,23 +59,15 @@ class AssetTile extends StatelessWidget {
});
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 18.0, vertical: 6.0),
padding: const EdgeInsets.symmetric(horizontal: 18.0),
child: Container(
width: double.infinity,
height: 80,
height: 72,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
Theme.of(context).colorScheme.surfaceContainerHigh,
Theme.of(context).colorScheme.surfaceContainer,
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
borderRadius: BorderRadius.all(Radius.circular(20)),
border: Border.all(
color: Theme.of(context).colorScheme.surfaceContainerHighest,
width: 1,
color: Theme.of(context).colorScheme.surfaceContainer,
borderRadius: BorderRadius.vertical(
top: isFirst ? Radius.circular(18) : Radius.zero,
bottom: isLast ? Radius.circular(18) : Radius.zero,
),
),
child: Padding(
@@ -87,16 +81,16 @@ class AssetTile extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 45,
height: 45,
width: 36,
height: 36,
child: Stack(
children: [
if((iconPath).isNotEmpty)
CakeImageWidget(imageUrl: iconPath)
else
Container(
width: 45,
height: 45,
width: 36,
height: 36,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primary,
borderRadius: BorderRadius.circular(99999)),
@@ -107,27 +101,27 @@ class AssetTile extends StatelessWidget {
fontSize: 20, color: Theme.of(context).colorScheme.onPrimary),
)),
),
if (chainIconPath.isNotEmpty)
Align(
alignment: Alignment.bottomRight,
child: Container(
decoration: ShapeDecoration(
shape: RoundedSuperellipseBorder(
borderRadius: BorderRadius.circular(5),side: BorderSide(color: Colors.black)),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(2.0),
child: CakeImageWidget(
imageUrl: chainIconPath,
width: 12,
height: 12,
colorFilter:
ColorFilter.mode(Colors.black, BlendMode.srcIn),
),
)))
// if (chainIconPath.isNotEmpty)
// Align(
// alignment: Alignment.bottomRight,
// child: Container(
// decoration: ShapeDecoration(
// shape: RoundedSuperellipseBorder(
// borderRadius: BorderRadius.circular(5),side: BorderSide(color: Colors.black)),
// color: Colors.white),
// child: Padding(
// padding: const EdgeInsets.all(2.0),
// child: CakeImageWidget(
// imageUrl: chainIconPath,
// width: 12,
// height: 12,
// colorFilter:
// ColorFilter.mode(Colors.black, BlendMode.srcIn),
// ),
// )))
],
)),
SizedBox(width: 8.0),
SizedBox(width: 12.0),
Expanded(
child: Column(
spacing: 4.0,
@@ -139,7 +133,7 @@ class AssetTile extends StatelessWidget {
children: [
Text(
title ?? balance.asset.fullName ?? balance.asset.name,
style: TextStyle(fontWeight: FontWeight.bold),
style: TextStyle(fontWeight: FontWeight.w500),
),
if(trailingText != null)
Text(
@@ -184,9 +178,9 @@ class AssetTile extends StatelessWidget {
String _getChainTitle() {
try {
return CryptoCurrency.fromString(wallet.currency.tag ??wallet.currency.title).title;
return CryptoCurrency.fromString(wallet.currency.tag ??wallet.currency.title).fullName ?? "";
} catch(e) {
return wallet.currency.title;
return wallet.currency.fullName ?? "";
}
}
@@ -21,11 +21,22 @@ class AssetsSection extends StatelessWidget {
child: Observer(
builder: (context) {
final hasMweb = dashboardViewModel.hasMweb && dashboardViewModel.mwebEnabled;
return ListView.builder(
return ListView.separated(
shrinkWrap: true,
padding: EdgeInsets.zero,
padding: EdgeInsets.symmetric(vertical: 18),
physics: NeverScrollableScrollPhysics(),
itemCount: dashboardViewModel.balanceViewModel.formattedBalances.length + (hasMweb ? 1 : 0),
separatorBuilder: (context, index) => Padding(
padding: const EdgeInsets.symmetric(horizontal: 18.0),
child: Container(
color: Theme.of(context).colorScheme.surfaceContainer,
height:1,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Container(color: Theme.of(context).colorScheme.surfaceContainerHigh,),
),
),
),
itemBuilder: (context, index) {
return Observer(builder: (context) {
if (hasMweb) {
@@ -39,6 +50,8 @@ class AssetsSection extends StatelessWidget {
modalMode: index > 0
? AssetDetailsModalModes.ltcPrivate
: AssetDetailsModalModes.ltcTransparent,
isFirst: index == 0,
isLast: index != 0,
title: index > 0 ? "Litecoin Private" : null,
);
}
@@ -48,6 +61,8 @@ class AssetsSection extends StatelessWidget {
showSwap: dashboardViewModel.isEnabledSwapAction,
balance: balance,
wallet: dashboardViewModel.wallet,
isFirst: index == 0,
isLast: index == dashboardViewModel.balanceViewModel.formattedBalances.length-1,
chainIconPath: _getChainIconPath(),
);
});
@@ -69,6 +69,8 @@ class HistorySection extends StatelessWidget {
CryptoCurrency? asset;
if (transaction.additionalInfo["isLightning"] == true)
asset = CryptoCurrency.btcln;
else
asset = item.assetOfTransaction;
return GestureDetector(
onTap: () {
@@ -80,6 +82,8 @@ class HistorySection extends StatelessWidget {
date: DateFormat('HH:mm').format(transaction.date),
amount: item.formattedCryptoAmount,
amountFiat: item.formattedFiatAmount,
hasTokens: item.hasTokens,
chainIconPath: _getChainIconPath(),
roundedBottom: roundedBottom,
roundedTop: roundedTop,
bottomSeparator: !roundedBottom,
@@ -101,6 +105,7 @@ class HistorySection extends StatelessWidget {
child: HistoryTradeTile(
from: tradeFrom!,
to: tradeTo!,
provider: trade.provider,
date: DateFormat('HH:mm').format(item.trade.createdAt!),
amount: trade.amountFormatted(),
receiveAmount: trade.receiveAmountFormatted(),
@@ -171,4 +176,12 @@ class HistorySection extends StatelessWidget {
),
));
}
String _getChainIconPath() {
try {
return CryptoCurrency.fromString(dashboardViewModel.wallet.currency.tag ??dashboardViewModel.wallet.currency.title).chainIconPath!;
} catch(e) {
return dashboardViewModel.wallet.currency.chainIconPath ?? "";
}
}
}
@@ -17,6 +17,8 @@ class HistoryTile extends StatelessWidget {
required this.direction,
required this.pending,
required this.bottomSeparator,
required this.hasTokens,
this.chainIconPath,
this.asset,
});
@@ -27,6 +29,8 @@ class HistoryTile extends StatelessWidget {
final bool roundedTop;
final bool roundedBottom;
final bool bottomSeparator;
final bool hasTokens;
final String? chainIconPath;
final TransactionDirection direction;
final bool pending;
final CryptoCurrency? asset;
@@ -93,6 +97,33 @@ class HistoryTile extends StatelessWidget {
);
}
if(hasTokens) {
return Stack(children: [
Opacity(
opacity: pending ? 0.5 : 1,
child: CakeImageWidget(imageUrl: asset?.iconSvgPath ?? asset?.iconPath ??"", width: 34,
height: 34,),
),
Align(
alignment: Alignment.bottomRight,
child: Container(
decoration: ShapeDecoration(
shape: RoundedSuperellipseBorder(
borderRadius: BorderRadius.circular(5),side: BorderSide(color: Colors.black)),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(2.0),
child: CakeImageWidget(
imageUrl: chainIconPath,
width: 12,
height: 12,
colorFilter:
ColorFilter.mode(Colors.black, BlendMode.srcIn),
),
)))
],);
}
return CakeImageWidget(imageUrl:_getDirectionIcon(),
colorFilter: ColorFilter.mode(
direction == TransactionDirection.outgoing
@@ -4,22 +4,32 @@ import 'package:flutter/material.dart';
class HistoryTileBase extends StatelessWidget {
const HistoryTileBase({
super.key,
required this.title,
this.title,
this.titleWidget,
required this.date,
required this.amount,
this.amount,
required this.leadingIcon,
required this.amountFiat,
this.amountFiat,
required this.roundedTop,
required this.roundedBottom,
required this.bottomSeparator,
this.primaryTextColor,
this.asset,
});
this.amountWidget,
this.amountFiatWidget,
}) : assert((title != null || titleWidget != null) && (title == null || titleWidget == null)),
assert(
(amountWidget != null || amount != null) && (amountWidget == null || amount == null)),
assert((amountFiatWidget != null || amountFiat != null) &&
(amountFiatWidget == null || amountFiat == null));
final String title;
final String? title;
final Widget? titleWidget;
final String date;
final String amount;
final String amountFiat;
final String? amount;
final Widget? amountWidget;
final String? amountFiat;
final Widget? amountFiatWidget;
final Widget leadingIcon;
final bool roundedTop;
final bool roundedBottom;
@@ -105,8 +115,10 @@ class HistoryTileBase extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title,
style: TextStyle(color: Theme.of(context).colorScheme.onSurface)),
if(title != null)
Text(title!,
style: TextStyle(color: Theme.of(context).colorScheme.onSurface))
else if(titleWidget != null) titleWidget!,
Text(date,
style: TextStyle(
color: Theme.of(context).colorScheme.onSurfaceVariant)),
@@ -115,12 +127,20 @@ class HistoryTileBase extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(amount,
style: TextStyle(
color: primaryTextColor ??
Theme.of(context).colorScheme.onSurface)),
Text(amountFiat, style: TextStyle(color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
if (amount != null)
Text(amount!,
style: TextStyle(
color: primaryTextColor ??
Theme.of(context).colorScheme.onSurface))
else if (amountWidget != null)
amountWidget!,
if (amountFiat != null)
Text(amountFiat!,
style: TextStyle(
color: Theme.of(context).colorScheme.onSurfaceVariant))
else if (amountFiatWidget != null)
amountFiatWidget!
],
),
],
),
@@ -1,5 +1,8 @@
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
import 'package:cake_wallet/exchange/trade_state.dart';
import 'package:cake_wallet/new-ui/widgets/coins_page/assets_history/history_tile_base.dart';
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
import 'package:cw_core/crypto_amount_format.dart';
import 'package:cw_core/crypto_currency.dart';
import 'package:flutter/material.dart';
@@ -14,10 +17,12 @@ class HistoryTradeTile extends StatelessWidget {
required this.bottomSeparator,
required this.from,
required this.to,
required this.swapState});
required this.swapState,
required this.provider});
final CryptoCurrency from;
final CryptoCurrency to;
final ExchangeProviderDescription provider;
final String date;
final String amount;
final String receiveAmount;
@@ -34,7 +39,7 @@ class HistoryTradeTile extends StatelessWidget {
width: 50,
child: Stack(
children: [
Image.asset(_getIconPath(from),
CakeImageWidget(imageUrl: _getIconPath(from),
width: currencyIconSize, height: currencyIconSize),
Positioned(
top: currencyIconSize / 2,
@@ -45,7 +50,7 @@ class HistoryTradeTile extends StatelessWidget {
width: 2,
color: Theme.of(context).colorScheme.surfaceContainer),
shape: BoxShape.circle),
child: Image.asset(_getIconPath(to),
child: CakeImageWidget(imageUrl: _getIconPath(to),
width: currencyIconSize, height: currencyIconSize))),
],
),
@@ -56,12 +61,55 @@ class HistoryTradeTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
final fromChainIcon = _getChainIcon(from);
final toChainIcon = _getChainIcon(to);
return HistoryTileBase(
title:
"${from.toString()}${from == CryptoCurrency.btcln ? "-LN" : ""} → ${to.toString()}${to == CryptoCurrency.btcln ? "-LN" : ""}",
// title:
// "${from.toString()}${from == CryptoCurrency.btcln ? "-LN" : ""} → ${to.toString()}${to == CryptoCurrency.btcln ? "-LN" : ""}",
titleWidget: Row(
spacing: 4,
children: [
Text(swapState.title),
CakeImageWidget(imageUrl: provider.image, width: 14, height: 14)
],
),
date: date,
amount: amount,
amountFiat: receiveAmount,
amountFiatWidget: Row(
spacing: 4,
children: [
Text("-", style: TextStyle(color: Theme.of(context).colorScheme.onSurfaceVariant)),
Text(amount.withMaxDecimals(8),
style: TextStyle(
color: Theme.of(context).colorScheme.onSurfaceVariant,
fontWeight: FontWeight.w500)),
Text(from.title, style: TextStyle(color: Theme.of(context).colorScheme.onSurfaceVariant)),
if (fromChainIcon.isNotEmpty)
CakeImageWidget(
imageUrl: fromChainIcon,
width: 12,
height: 12,
colorFilter:
ColorFilter.mode(Theme.of(context).colorScheme.onSurfaceVariant, BlendMode.srcIn),
)
],
),
amountWidget: Row(
spacing: 4,
children: [
Text(
"+",
),
Text(
receiveAmount.withMaxDecimals(8),
style: TextStyle(fontWeight: FontWeight.w500),
),
Text(
to.title,
),
if (toChainIcon.isNotEmpty) CakeImageWidget(imageUrl: toChainIcon, width: 12, height: 12)
],
),
leadingIcon: _getLeadingStack(context),
roundedTop: roundedTop,
roundedBottom: roundedBottom,
@@ -93,4 +141,21 @@ class HistoryTradeTile extends StatelessWidget {
//TODO approporiate fallback
return "";
}
String _getChainIcon(CryptoCurrency currency) {
try {
if (currency.chainIconPath != null) {
return currency.chainIconPath!;
}
if ((currency.tag ?? "").isNotEmpty) {
final currencyFromTag = CryptoCurrency.fromString(currency.tag!);
if (currencyFromTag.chainIconPath != null) {
return currencyFromTag.chainIconPath!;
}
}
} catch (_) {}
return "";
}
}
@@ -1,3 +1,4 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
import 'package:cw_core/card_design.dart';
import 'package:flutter/material.dart';
@@ -25,11 +26,13 @@ class BalanceCard extends StatelessWidget {
this.balance = "",
this.fiatBalance = "",
this.assetName = "",
this.fiatCurrencyTitle = "",
this.designSwitchDuration = const Duration(),
this.actions = const [],
this.capitalizeAssetName = true,
this.onCustomizeTapped,
this.accountIndex
this.accountIndex,
this.fiatFirst = false
});
final double width;
@@ -39,6 +42,8 @@ class BalanceCard extends StatelessWidget {
final String accountName;
final String balance;
final String fiatBalance;
final String fiatCurrencyTitle;
final bool fiatFirst;
final int? accountIndex;
final bool capitalizeAssetName;
final String assetName;
@@ -53,14 +58,21 @@ class BalanceCard extends StatelessWidget {
final Duration textFadeDuration = Duration(milliseconds: 80);
final double iconWidth = width * 0.15;
final name = fiatFirst ? fiatCurrencyTitle : assetName;
final resolvedAssetName = capitalizeAssetName ? name.toUpperCase() : name.toLowerCase();
final leadText = fiatFirst ? S.of(context).wallet_balance : accountName;
final bool showText = accountBalance.isNotEmpty ||
accountName.isNotEmpty ||
leadText.isNotEmpty ||
balance.isNotEmpty ||
fiatBalance.isNotEmpty ||
assetName.isNotEmpty;
resolvedAssetName.isNotEmpty;
final height = width * 0.62;
return AnimatedContainer(
duration: designSwitchDuration,
width: width,
@@ -105,7 +117,7 @@ class BalanceCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
if(accountName.isNotEmpty || accountBalance.isNotEmpty)
if(leadText.isNotEmpty || accountBalance.isNotEmpty)
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -127,8 +139,8 @@ class BalanceCard extends StatelessWidget {
AnimatedDefaultTextStyle(
duration: designSwitchDuration,
style: Theme.of(context).textTheme.titleMedium!.copyWith(
fontWeight: FontWeight.w500, color: design.colors.textColor),
child: Text(accountName),
fontWeight: FontWeight.w500, color: design.colors.textColor.withAlpha(leadText == accountName ? 255 : 128)),
child: Text(leadText),
),
],
),
@@ -157,7 +169,7 @@ class BalanceCard extends StatelessWidget {
);
},
child: Row(
key: ValueKey("$balance ${assetName.toUpperCase()}"),
key: ValueKey("$balance ${resolvedAssetName.toUpperCase()}"),
spacing: 8.0,
children: [
AnimatedDefaultTextStyle(
@@ -165,14 +177,14 @@ class BalanceCard extends StatelessWidget {
style: DefaultTextStyle.of(context)
.style
.copyWith(color: design.colors.textColor, fontSize: 28, fontWeight: FontWeight.w500, letterSpacing: -0.4),
child: Text(balance),
child: Text(fiatFirst ? fiatBalance : balance),
),
AnimatedDefaultTextStyle(
duration: designSwitchDuration,
style: DefaultTextStyle.of(context)
.style
.copyWith(color: design.colors.textColorSecondary, fontSize: 28, fontWeight: FontWeight.w400, letterSpacing: -0.4),
child: Text(capitalizeAssetName ? assetName.toUpperCase() : assetName.toLowerCase()),
child: Text(resolvedAssetName),
),
],
),
@@ -196,8 +208,8 @@ class BalanceCard extends StatelessWidget {
);
},
child: Text(
key: ValueKey(fiatBalance),
fiatBalance,
key: ValueKey(fiatFirst ? balance : fiatBalance),
fiatFirst ? "$assetName $balance" : "$fiatCurrencyTitle $fiatBalance",
),
),
),
@@ -115,8 +115,7 @@ class _CardsViewState extends State<CardsView> {
// The second balance should always be the lightning balance
// printV(widget.dashboardViewModel.balanceViewModel.formattedBalances.first.availableBalance);
final walletBalanceRecord = widget.dashboardViewModel.balanceViewModel.formattedBalances
.elementAtOrNull(widget.lightningMode ? 1 : 0);
final walletBalanceRecord = widget.dashboardViewModel.balanceViewModel.getMainBalanceRecord(widget.lightningMode);
late final String walletBalance;
late final String walletFiatBalance;
@@ -128,11 +127,16 @@ class _CardsViewState extends State<CardsView> {
walletBalance = walletBalanceRecord?.combinedAvailableBalance ?? "0";
walletFiatBalance = walletBalanceRecord?.combinedFiatAvailableBalance ?? "0.00";
}
} else {
} else if(widget.dashboardViewModel.balanceViewModel.showCombinedBalance){
walletBalance = "";
walletFiatBalance = widget.dashboardViewModel.balanceViewModel.combinedFiatBalance;
}else {
walletBalance = walletBalanceRecord?.availableBalance ?? "0";
walletFiatBalance = walletBalanceRecord?.fiatAvailableBalance ?? "${widget.dashboardViewModel.appStore.settingsStore.fiatCurrency.title} 0.00";
walletFiatBalance = walletBalanceRecord?.fiatAvailableBalanceRaw ?? "0.00";
}
// the card designs is empty if widget gets built before it loads.
// should get populated before user sees anything
final CardDesign cardDesign;
@@ -154,6 +158,8 @@ class _CardsViewState extends State<CardsView> {
accountBalance = account.balance ?? "0.00";
}
final assetName = widget.dashboardViewModel.balanceViewModel.showCombinedBalance ? "" : walletBalanceRecord?.formattedAssetTitle ?? assetTitleFallback;
final List<BalanceCardAction> actions = widget.lightningMode
? [
BalanceCardAction(
@@ -183,9 +189,11 @@ class _CardsViewState extends State<CardsView> {
accountName: accountName,
accountBalance: accountBalance,
designSwitchDuration: Duration(milliseconds: 150),
assetName: walletBalanceRecord?.formattedAssetTitle ?? assetTitleFallback,
assetName: assetName,
capitalizeAssetName: _shouldCapitalizeAssetName(),
balance: walletBalance,
fiatCurrencyTitle: walletBalanceRecord?.fiatCurrencyTicker ?? widget.dashboardViewModel.settingsStore.fiatCurrency.title,
fiatFirst: widget.dashboardViewModel.balanceViewModel.showCombinedBalance,
fiatBalance: walletFiatBalance,
selected: _selectedIndex == visualIndex,
onCustomizeTapped: _selectedIndex == visualIndex ? widget.onCustomizeTapped : null,
@@ -12,6 +12,7 @@ class ModalTopBar extends StatelessWidget {
this.onTrailingPressed=nothing,
this.leadingIcon,
this.trailingIcon,
this.padding,
this.leadingWidget,
this.trailingWidget}) {
if(leadingIcon != null && leadingWidget != null) {
@@ -27,6 +28,7 @@ class ModalTopBar extends StatelessWidget {
final VoidCallback onLeadingPressed;
final VoidCallback onTrailingPressed;
final Widget? leadingIcon;
final EdgeInsets? padding;
final Widget? trailingIcon;
final Widget? leadingWidget;
final Widget? trailingWidget;
@@ -36,7 +38,7 @@ class ModalTopBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(18),
padding: padding??EdgeInsets.all(18),
child: Stack(
alignment: Alignment.topCenter,
children: [
@@ -0,0 +1,61 @@
import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item_regular_row.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
import 'package:cake_wallet/src/widgets/new_list_row/new_list_section.dart';
import 'package:cw_core/crypto_currency.dart';
import 'package:flutter/material.dart';
class FavoriteTokenModal extends StatelessWidget {
const FavoriteTokenModal({super.key, required this.tokens});
final List<CryptoCurrency> tokens;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface,
borderRadius: BorderRadius.vertical(top: Radius.circular(18))
),
child: SafeArea(
child: Column(
children: [
ModalTopBar(
title: S.of(context).favorite_token,
leadingIcon: Icon(Icons.close),
onLeadingPressed: Navigator.of(context).pop,
),
Expanded(
child: Column(
children: [
Text(
S.of(context).favorite_token_desc,
style: TextStyle(color: Theme.of(context).colorScheme.onSurfaceVariant),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(12.0),
child: SingleChildScrollView(
child: NewListSections(
sections: {
"": tokens
.map((item) => ListItemRegularRow(
keyValue: item.title,
label: "${item.fullName} (${item.title})",
iconPath: item.iconPath,
onTap: () => Navigator.of(context).pop(item)))
.toList()
},
),
),
),
)
],
),
)
],
),
),
);
}
}
@@ -1,14 +1,23 @@
import 'dart:math';
import 'package:cake_wallet/core/address_validator.dart';
import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item_regular_row.dart';
import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item_toggle.dart';
import 'package:cake_wallet/entities/sort_balance_types.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/new-ui/pages/settings_page.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/dashboard/favorite_token_modal.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart';
import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
import 'package:cake_wallet/src/widgets/new_list_row/new_list_section.dart';
import 'package:cake_wallet/src/widgets/picker.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cw_core/crypto_currency.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart';
@@ -28,24 +37,79 @@ class HomeSettingsPage extends BasePage {
return SingleChildScrollView(
child: Column(
children: [
Observer(
builder: (_) => SettingsPickerCell<SortBalanceBy>(
title: S.current.sort_by,
items: SortBalanceBy.values,
selectedItem: _homeSettingsViewModel.sortBalanceBy,
onItemSelected: _homeSettingsViewModel.setSortBalanceBy,
),
),
// Observer(
// builder: (_) => SettingsPickerCell<SortBalanceBy>(
// title: S.current.sort_by,
// items: SortBalanceBy.values,
// selectedItem: _homeSettingsViewModel.sortBalanceBy,
// onItemSelected: _homeSettingsViewModel.setSortBalanceBy,
// ),
// ),
// Divider(color: Theme.of(context).colorScheme.outlineVariant),
// Observer(
// builder: (_) => SettingsSwitcherCell(
// title: S.of(context).pin_at_top(_homeSettingsViewModel.nativeToken.title),
// value: _homeSettingsViewModel.pinNativeToken,
// title: S.of(context).show_combined_balance,
// value: _homeSettingsViewModel.showCombinedBalance,
// onValueChange: (_, bool value) {
// _homeSettingsViewModel.setPinNativeToken(value);
// _homeSettingsViewModel.setShowCombinedBalance(value);
// },
// ),
// ),
// Observer(
// builder: (_) => _homeSettingsViewModel.showCombinedBalance
// ? SizedBox.shrink()
// : SettingsCellWithArrow(
// title: S.of(context).favorite_token,
// handler: (context) async {
//
// },
// )),
Padding(
padding: const EdgeInsets.all(12.0),
child: Observer(
builder: (_) => NewListSections(sections: {
"": [
ListItemRegularRow(
keyValue: "sort balance by",
label: S.of(context).sort_by,
trailingText: _homeSettingsViewModel.sortBalanceBy.toString(),
onTap: () {
showPopUp<void>(
context: context,
builder: (context) => Picker(
items: SortBalanceBy.values,
selectedAtIndex:
SortBalanceBy.values.indexOf(_homeSettingsViewModel.sortBalanceBy),
mainAxisAlignment: MainAxisAlignment.start,
onItemSelected: _homeSettingsViewModel.setSortBalanceBy,
isSeparated: false,
),
);
}),
ListItemToggle(
keyValue: "show combined",
label: S.of(context).show_combined_balance,
value: _homeSettingsViewModel.showCombinedBalance,
onChanged: (val) => _homeSettingsViewModel.setShowCombinedBalance(val)),
if (!_homeSettingsViewModel.showCombinedBalance)
ListItemRegularRow(
keyValue: "fav token",
label: S.of(context).favorite_token,
trailingText: _homeSettingsViewModel.favoriteToken.title,
showArrow: true,
onTap: () async {
final res = await showModalBottomSheet(
context: context,
builder: (context) =>
FavoriteTokenModal(tokens: _homeSettingsViewModel.enabledTokens));
if (res != null && res is CryptoCurrency) {
_homeSettingsViewModel.setFavoriteToken(res);
}
})
]
}),
),
),
Divider(color: Theme.of(context).colorScheme.outlineVariant),
const SizedBox(height: 20),
Row(
+1
View File
@@ -152,6 +152,7 @@ class TokenUtilities {
required WalletType walletType,
required String address,
}) async {
if(address.isEmpty) return null;
final lower = address.toLowerCase();
switch (walletType) {
case WalletType.ethereum:
@@ -1,4 +1,5 @@
import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/utilities.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart';
import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
import 'package:cake_wallet/entities/fiat_api_mode.dart';
@@ -6,8 +7,12 @@ import 'package:cake_wallet/entities/sort_balance_types.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/reactions/wallet_connect.dart';
import 'package:cake_wallet/evm/evm.dart';
import 'package:cake_wallet/solana/solana.dart';
import 'package:cake_wallet/tron/tron.dart';
import 'package:cake_wallet/zano/zano.dart';
import 'package:cw_core/crypto_amount_format.dart';
import 'package:cw_core/transaction_history.dart';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
@@ -57,11 +62,16 @@ class BalanceRecord {
.toString().withMaxDecimals(8);
String get combinedFiatAvailableBalance =>
fiatAvailableBalance.split(" ").first +
fiatCurrencyTicker +
" " +
((double.tryParse(fiatAvailableBalance.split(" ").last) ?? 0) +
(double.tryParse(fiatSecondAvailableBalance.split(" ").last) ?? 0))
.toString().withMaxDecimals(8);
((double.tryParse(fiatAvailableBalanceRaw) ?? 0) +
(double.tryParse(fiatSecondAvailableBalanceRaw) ?? 0))
.toString()
.withMaxDecimals(8);
String get fiatAvailableBalanceRaw => fiatAvailableBalance.split(" ").last;
String get fiatSecondAvailableBalanceRaw => fiatSecondAvailableBalance.split(" ").last;
String get fiatCurrencyTicker => fiatAvailableBalance.split(" ").first;
}
class BalanceViewModel = BalanceViewModelBase with _$BalanceViewModel;
@@ -410,6 +420,58 @@ abstract class BalanceViewModelBase with Store {
return balance;
}
BalanceRecord? getMainBalanceRecord(bool lightningMode) {
if (lightningMode) {
return formattedBalances.elementAtOrNull(1);
}
if (wallet.walletInfo.favoriteTokenAddress != null) {
return formattedBalances.firstWhereOrNull((item) => (getTokenAddressBasedOnWallet(item.asset) ==
wallet.walletInfo.favoriteTokenAddress)) ??
formattedBalances.elementAt(0);
}
return formattedBalances.elementAt(0);
}
String? getTokenAddressBasedOnWallet(CryptoCurrency asset) {
if (wallet.type == WalletType.tron) {
return tron!.getTokenAddress(asset);
}
if (wallet.type == WalletType.solana) {
return solana!.getTokenAddress(asset);
}
if (isEVMCompatibleChain(wallet.type) && asset is Erc20Token) {
return evm!.getTokenAddress(asset);
}
if (wallet.type == WalletType.zano) {
return zano!.getZanoAssetAddress(asset);
}
return null;
}
@computed
bool get showCombinedBalance {
if(wallet.type == WalletType.bitcoin) return false;
if(balances.values.length == 1) return false;
return wallet.walletInfo.showCombinedBalance;
}
@computed
String get combinedFiatBalance {
double ret = 0.0;
for(final record in balances.values) {
ret += double.tryParse(record.fiatAvailableBalanceRaw) ?? 0;
}
return ret.toStringAsFixed(2);
}
Balance _currencyBalance(CryptoCurrency cryptoCurrency) {
final balance = wallet.balance[cryptoCurrency];
@@ -23,6 +23,7 @@ import 'package:cake_wallet/store/dashboard/order_filter_store.dart';
import 'package:cake_wallet/utils/device_info.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/zcash/zcash.dart';
import 'package:cw_core/transaction_direction.dart';
import 'package:cw_core/utils/proxy_wrapper.dart';
import 'package:cake_wallet/utils/tor.dart';
import 'package:cake_wallet/wownero/wownero.dart' as wow;
@@ -481,18 +482,29 @@ abstract class DashboardViewModelBase with Store {
}
// printV("Transaction disposer callback (relevantTxs: ${relevantTxs.length} current: ${transactions.length})");
String _txIdentityString(String txHash, TransactionDirection direction) => '${txHash}_$direction';
final existingKeys = transactions
.map((item) => _txIdentityString(item.transaction.txHash, item.transaction.direction))
.toSet();
final newTransactions = relevantTxs
.where((tx) => !existingKeys.contains(_txIdentityString(tx.txHash, tx.direction)))
.map((tx) => TransactionListItem(
transaction: tx,
balanceViewModel: balanceViewModel,
appStore: appStore,
key: ValueKey('${wallet.type.name}_transaction_history_item_${tx.id}_key'),
))
.where((item) => !transactions.contains(item));
.toList();
transactions.removeWhere((item) => newTransactions.any((tx) =>
tx.transaction.txHash == item.transaction.txHash &&
tx.transaction.direction == item.transaction.direction));
final newKeys = newTransactions
.map((item) => _txIdentityString(item.transaction.txHash, item.transaction.direction))
.toSet();
transactions.removeWhere(
(item) => newKeys.contains(_txIdentityString(item.transaction.txHash, item.transaction.direction)),
);
transactions.addAll(newTransactions);
// transactions.clear();
@@ -9,6 +9,7 @@ import 'package:cake_wallet/reactions/wallet_connect.dart';
import 'package:cake_wallet/solana/solana.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/tron/tron.dart';
import 'package:cake_wallet/utils/token_utilities.dart';
import 'package:cw_core/utils/proxy_wrapper.dart';
import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
import 'package:cake_wallet/zano/zano.dart';
@@ -29,10 +30,14 @@ abstract class HomeSettingsViewModelBase with Store {
: tokens = ObservableSet<CryptoCurrency>(),
isAddingToken = false,
isDeletingToken = false,
isValidatingContractAddress = false {
isValidatingContractAddress = false,
showCombinedBalance = _balanceViewModel.wallet.walletInfo.showCombinedBalance,
favoriteToken = _balanceViewModel.wallet.currency {
_updateTokensList();
_updateLocalFavoriteToken();
// React to wallet changes
// React to wallet changes
reaction((_) => _balanceViewModel.wallet, (_) {
_updateTokensList();
});
@@ -55,6 +60,9 @@ abstract class HomeSettingsViewModelBase with Store {
final ObservableSet<CryptoCurrency> tokens;
@computed
List<CryptoCurrency> get enabledTokens => [_balanceViewModel.wallet.currency, ...tokens.where((item)=>item.enabled).toList()];
WalletType get walletType => _balanceViewModel.wallet.type;
@observable
@@ -491,6 +499,45 @@ abstract class HomeSettingsViewModelBase with Store {
}
}
// FIXME these two observables cause duplicated state and are needed because mobx. remove them as part of the refactor and replace with proper getters
@observable
bool showCombinedBalance;
@observable
CryptoCurrency favoriteToken;
@action
void setShowCombinedBalance(bool value) {
_balanceViewModel.wallet.walletInfo.showCombinedBalance = value;
showCombinedBalance = value;
_balanceViewModel.wallet.updateBalance();
_balanceViewModel.wallet.walletInfo.save();
}
@action
Future<void> setFavoriteToken(CryptoCurrency token) async {
final String? address;
if(token == _balanceViewModel.wallet.currency) {
address = null;
} else {
address = getTokenAddressBasedOnWallet(token);
}
_balanceViewModel.wallet.walletInfo.favoriteTokenAddress = address;
_balanceViewModel.wallet.walletInfo.save();
_updateLocalFavoriteToken();
}
@action
Future<void> _updateLocalFavoriteToken() async {
favoriteToken = await TokenUtilities.findTokenByAddress(
walletType: _balanceViewModel.wallet.type, address: _balanceViewModel.wallet.walletInfo.favoriteTokenAddress ?? "") ??
_balanceViewModel.wallet.currency;
}
@action
void _refreshTokensList() {
final _tokens = Set.of(tokens);
+1
View File
@@ -282,6 +282,7 @@ flutter:
- assets/new-ui/navbar/
- assets/new-ui/changelog/icons/
- assets/new-ui/changelog/text/
- assets/new-ui/crypto_full_icons/
fonts:
- family: Lato
+4 -5
View File
@@ -1,6 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 8C0 6.14006 0 5.21008 0.204445 4.44709C0.759248 2.37653 2.37653 0.759248 4.44709 0.204445C5.21008 0 6.14006 0 8 0C9.85994 0 10.7899 0 11.5529 0.204445C13.6235 0.759248 15.2408 2.37653 15.7956 4.44709C16 5.21008 16 6.14006 16 8C16 9.85994 16 10.7899 15.7956 11.5529C15.2408 13.6235 13.6235 15.2408 11.5529 15.7956C10.7899 16 9.85994 16 8 16C6.14006 16 5.21008 16 4.44709 15.7956C2.37653 15.2408 0.759248 13.6235 0.204445 11.5529C0 10.7899 0 9.85994 0 8Z" fill="#D9D9D9"/>
<path d="M0 8C0 6.14006 0 5.21008 0.204445 4.44709C0.759248 2.37653 2.37653 0.759248 4.44709 0.204445C5.21008 0 6.14006 0 8 0C9.85994 0 10.7899 0 11.5529 0.204445C13.6235 0.759248 15.2408 2.37653 15.7956 4.44709C16 5.21008 16 6.14006 16 8C16 9.85994 16 10.7899 15.7956 11.5529C15.2408 13.6235 13.6235 15.2408 11.5529 15.7956C10.7899 16 9.85994 16 8 16C6.14006 16 5.21008 16 4.44709 15.7956C2.37653 15.2408 0.759248 13.6235 0.204445 11.5529C0 10.7899 0 9.85994 0 8Z" fill="white"/>
<path d="M15 8C15 6.07594 14.9918 5.30979 14.8301 4.70605C14.3677 2.98059 13.0194 1.63226 11.2939 1.16992C10.6902 1.00821 9.92406 1 8 1C6.07594 1 5.30979 1.00821 4.70605 1.16992C2.98059 1.63226 1.63226 2.98059 1.16992 4.70605C1.00821 5.30979 1 6.07594 1 8C1 9.92406 1.00821 10.6902 1.16992 11.2939C1.63226 13.0194 2.98059 14.3677 4.70605 14.8301C5.30979 14.9918 6.07594 15 8 15V16C6.37233 16 5.45681 16.0003 4.74219 15.8633L4.44727 15.7959C2.37671 15.2411 0.758904 13.6233 0.204102 11.5527C-0.000275508 10.7898 5.57269e-09 9.85974 5.57269e-09 8C5.57269e-09 6.37233 -0.000297695 5.45681 0.136719 4.74219L0.204102 4.44727C0.724253 2.50603 2.17853 0.962665 4.06445 0.320312L4.44727 0.204102C5.21022 -0.000275508 6.14026 1.99185e-09 8 1.99185e-09C9.85974 1.99185e-09 10.7898 -0.000275508 11.5527 0.204102C13.6233 0.758904 15.2411 2.37671 15.7959 4.44727C16.0003 5.21022 16 6.14026 16 8C16 9.85974 16.0003 10.7898 15.7959 11.5527L15.6797 11.9355C15.0373 13.8215 13.494 15.2757 11.5527 15.7959L11.2578 15.8633C10.5432 16.0003 9.62767 16 8 16V15C9.92406 15 10.6902 14.9918 11.2939 14.8301C13.0194 14.3677 14.3677 13.0194 14.8301 11.2939C14.9918 10.6902 15 9.92406 15 8Z" fill="#233461"/>
<path d="M4.06861 8.26516L10.101 3.06699C10.3639 2.89866 10.6144 3.06699 10.454 3.35578L8.52875 7.14211H11.9621C11.9621 7.14211 12.5076 7.14211 11.9621 7.59133L6.02594 12.8216C5.60881 13.1745 5.32002 12.982 5.60881 12.4365L7.46987 8.74647H4.06861C4.06861 8.74647 3.52313 8.74647 4.06861 8.26516Z" fill="black"/>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" version="1.1" id="svg1">
<path
d="M 1.3839781,8.4197603 11.467869,0.19079399 c 0.43947,-0.26647492 0.858212,0 0.590083,0.45716921 L 8.8396574,6.6419154 h 5.7392716 c 0,0 0.911871,0 0,0.711138 L 4.6558988,15.632836 C 3.9586141,16.191494 3.4758656,15.886757 3.9586141,15.023203 L 7.0696077,9.1816986 H 1.3839781 c 0,0 -0.91183777,0 0,-0.7619383 z"
fill="white" id="path1" style="stroke-width:1.62673" />
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 489 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><path fill="url(#a)" d="M246.258 155.241C229.561 222.205 161.73 262.959 94.75 246.26 27.798 229.565-12.96 161.737 3.744 94.776 20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.731 84.53 91.033 151.5"/><path fill="url(#b)" d="M246.258 155.241C229.561 222.205 161.73 262.959 94.75 246.26 27.798 229.565-12.96 161.737 3.744 94.776 20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.731 84.53 91.033 151.5"/><path fill="url(#c)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#d)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#e)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#f)" d="M166.971 130.302c2.239-3.877 7.835-3.877 10.074 0l23.899 41.395c2.238 3.877-.56 8.724-5.037 8.724h-47.798c-4.477 0-7.275-4.847-5.037-8.724z"/><path fill="url(#g)" d="M124.012 55.89c2.239-3.877 7.834-3.877 10.073 0l19.966 34.584a12.46 12.46 0 0 1 0 12.462l-41.138 71.253a12.46 12.46 0 0 1-10.792 6.231H62.187c-4.476 0-7.274-4.847-5.036-8.724z"/><path fill="url(#h)" d="M162.971 124.302c2.239-3.877 7.835-3.877 10.074 0l23.899 41.395c2.238 3.877-.56 8.724-5.037 8.724h-47.798c-4.477 0-7.275-4.847-5.037-8.724z"/><path fill="url(#i)" d="M120.012 49.89c2.239-3.877 7.834-3.877 10.073 0l19.966 34.584a12.46 12.46 0 0 1 0 12.462l-41.138 71.253a12.46 12.46 0 0 1-10.792 6.231H58.187c-4.476 0-7.274-4.847-5.036-8.724z"/><path stroke="#fff" stroke-width="2" d="M163.838 124.802c1.853-3.21 6.487-3.21 8.341 0l23.899 41.395c1.854 3.21-.463 7.224-4.171 7.224h-47.798c-3.707 0-6.024-4.013-4.171-7.224zM120.879 50.39c1.854-3.21 6.486-3.21 8.34 0l19.967 34.584a11.46 11.46 0 0 1 0 11.462l-41.139 71.252a11.46 11.46 0 0 1-9.926 5.732H58.188c-3.707 0-6.024-4.013-4.17-7.224z"/><defs><linearGradient id="a" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#ff394a"/><stop offset="1" stop-color="#da2131"/></linearGradient><linearGradient id="b" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#ff394a"/><stop offset="1" stop-color="#c91121"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#ff6e7a"/><stop offset="1" stop-color="#f92c3d"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#ff8284" stop-opacity="0"/><stop offset="1" stop-color="#ff8284"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#ffd9dc"/><stop offset=".15" stop-color="#ffb5bb" stop-opacity="0"/></linearGradient><linearGradient id="f" x1="129.048" x2="129.048" y1="52.982" y2="180.421" gradientUnits="userSpaceOnUse"><stop stop-color="#d81626"/><stop offset="1" stop-color="#da1122"/></linearGradient><linearGradient id="g" x1="129.048" x2="129.048" y1="52.982" y2="180.421" gradientUnits="userSpaceOnUse"><stop stop-color="#d81626"/><stop offset="1" stop-color="#da1122"/></linearGradient><linearGradient id="h" x1="125.048" x2="125.048" y1="46.982" y2="174.421" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#ffc5ca"/></linearGradient><linearGradient id="i" x1="125.048" x2="125.048" y1="46.982" y2="174.421" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#ffc5ca"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><path fill="url(#a)" d="M250 125c0 69.036-55.964 125-125 125S0 194.036 0 125 55.964 0 125 0s125 55.964 125 125"/><path fill="url(#b)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#c)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#d)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="#0037ad" d="M124.857 211.875c45.353 0 82.12-36.703 82.12-81.977s-36.767-81.976-82.12-81.976c-43.029 0-78.328 33.036-81.834 75.085h108.543v13.782H43.023c3.506 42.05 38.805 75.086 81.834 75.086"/><path fill="url(#e)" d="M124.857 207.078c45.353 0 82.12-36.703 82.12-81.976 0-45.275-36.767-81.977-82.12-81.977-43.029 0-78.328 33.036-81.834 75.085h108.543v13.782H43.023c3.506 42.05 38.805 75.086 81.834 75.086"/><path fill="url(#f)" d="M151.566 131.992v-13.781H43.023c3.506-42.05 38.805-75.086 81.833-75.086 45.354 0 82.121 36.702 82.121 81.977 0 45.273-36.767 81.976-82.121 81.976v-2c44.253 0 80.121-35.81 80.121-79.976 0-44.167-35.868-79.977-80.121-79.977-41.24 0-75.2 31.104-79.628 71.086h108.338v17.781H45.227c4.43 39.983 38.39 71.086 79.629 71.086v2c-43.028 0-78.327-33.036-81.833-75.086z"/><defs><linearGradient id="a" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#0052ff"/><stop offset="1" stop-color="#003cb9"/></linearGradient><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#2c70ff"/><stop offset="1" stop-color="#005fdb"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#4a84ff" stop-opacity="0"/><stop offset="1" stop-color="#4a84ff"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#578eff"/><stop offset=".15" stop-color="#578eff" stop-opacity="0"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="43.125" y2="207.078" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#a7c3ff"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="43.125" y2="207.078" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#fff"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><g clip-path="url(#a)"><path fill="url(#b)" d="M125 0c69.042 0 125 55.97 125 125 0 69.042-55.958 125-125 125C55.97 250 0 194.036 0 125 0 55.97 55.97 0 125 0"/><path fill="url(#c)" d="M125 0c69.042 0 125 55.97 125 125 0 69.042-55.958 125-125 125C55.97 250 0 194.036 0 125 0 55.97 55.97 0 125 0"/><path fill="url(#d)" d="M245 125C245 58.73 191.28 5 125 5 58.73 5 5 58.73 5 125c0 66.275 53.73 120 120 120v5C55.97 250 0 194.036 0 125 0 55.97 55.97 0 125 0c69.042 0 125 55.97 125 125 0 69.042-55.958 125-125 125v-5c66.281 0 120-53.719 120-120"/><path fill="url(#e)" d="M245 125C245 58.73 191.28 5 125 5 58.73 5 5 58.73 5 125c0 66.275 53.73 120 120 120v5C55.97 250 0 194.036 0 125 0 55.97 55.97 0 125 0c69.042 0 125 55.97 125 125 0 69.042-55.958 125-125 125v-5c66.281 0 120-53.719 120-120"/><path fill="url(#f)" d="M245 125C245 58.73 191.28 5 125 5 58.73 5 5 58.73 5 125c0 66.275 53.73 120 120 120v5C55.97 250 0 194.036 0 125 0 55.97 55.97 0 125 0c69.042 0 125 55.97 125 125 0 69.042-55.958 125-125 125v-5c66.281 0 120-53.719 120-120"/><path fill="url(#g)" fill-rule="evenodd" d="M70.474 65.05h51.727c31.463 0 55.313 16.912 64.186 41.521H202.5v14.874h-12.72q.375 3.526.376 7.177v.365a68 68 0 0 1-.475 8.069H202.5v14.873h-16.42c-9.106 24.266-32.771 41.017-63.879 41.017H70.474v-41.017H52.5v-14.873h17.974v-15.611H52.5v-14.874h17.974zm14.461 86.879v27.674h37.266c22.996 0 40.082-11.083 48.035-27.674zm89.731-14.873H84.935v-15.611h89.754c.333 2.456.502 4.974.502 7.542v.366c0 2.627-.177 5.198-.525 7.703m-52.465-58.684c23.102 0 40.239 11.376 48.144 28.199h-85.41v-28.2z" clip-rule="evenodd"/><path fill="url(#h)" fill-rule="evenodd" d="M70.474 61.3h51.727c31.463 0 55.313 16.912 64.186 41.521H202.5v14.874h-12.72q.375 3.526.376 7.177v.365a68 68 0 0 1-.475 8.069H202.5v14.873h-16.42c-9.106 24.266-32.771 41.017-63.879 41.017H70.474v-41.017H52.5v-14.873h17.974v-15.611H52.5v-14.874h17.974zm14.461 86.879v27.674h37.266c22.996 0 40.082-11.083 48.035-27.674zm89.731-14.873H84.935v-15.611h89.754c.333 2.456.502 4.974.502 7.542v.366c0 2.627-.177 5.198-.525 7.703m-52.465-58.684c23.102 0 40.239 11.376 48.144 28.199h-85.41v-28.2z" clip-rule="evenodd"/><path fill="#fff" d="M122.201 61.3c31.463 0 55.313 16.912 64.186 41.52H202.5v14.874h-12.72q.376 3.527.376 7.178v.365a68 68 0 0 1-.475 8.069H202.5v14.874h-16.42c-9.106 24.265-32.771 41.015-63.879 41.015H70.475V148.18H52.5v-14.874h17.975v-15.612H52.5V102.82h17.975V61.3zm-50.476 42.77H53.75v12.374h17.975v18.112H53.75v12.374h17.975v41.015H122.2c30.633 0 53.802-16.469 62.709-40.205l.304-.81h16.036v-12.374h-12.978l.167-1.399c.309-2.587.467-5.23.467-7.92v-.365q0-3.585-.369-7.046l-.146-1.382h12.859V104.07h-15.741l-.298-.825c-8.676-24.063-32.019-40.694-63.01-40.694H71.725zm99.638 44.65c-8.182 17.067-25.735 28.383-49.162 28.384H83.685V146.93h88.537zm-86.428 27.134H122.2c22.996-.001 40.081-11.084 48.034-27.674h-85.3zm90.993-58.328c.34 2.514.513 5.088.513 7.711v.366c0 2.683-.181 5.312-.538 7.875l-.149 1.078h-92.07v-18.112h92.097zm-90.993.168v15.612h89.731c.348-2.505.525-5.076.525-7.703v-.366c0-2.568-.17-5.086-.503-7.543zM122.2 73.372c23.545 0 41.147 11.62 49.276 28.917l.836 1.781H83.685V73.372zm-37.266 1.25v28.198h85.41c-7.906-16.822-25.042-28.198-48.144-28.198z"/></g><defs><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#f5ac37"/><stop offset="1" stop-color="#f08000"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#a24001" stop-opacity="0"/><stop offset="1" stop-color="#a24001" stop-opacity=".3"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#ffd16e"/><stop offset="1" stop-color="#ffa455"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#ffb777" stop-opacity="0"/><stop offset="1" stop-color="#ffb777"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#ffe5bc"/><stop offset=".15" stop-color="#ffe5bc" stop-opacity="0"/></linearGradient><linearGradient id="g" x1="127.5" x2="127.5" y1="65.051" y2="192.946" gradientUnits="userSpaceOnUse"><stop stop-color="#f1890b"/><stop offset="1" stop-color="#d87600"/></linearGradient><linearGradient id="h" x1="127.5" x2="127.5" y1="61.301" y2="189.196" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#ffe2b4"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h250v250H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.0 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><g clip-path="url(#a)"><circle cx="125" cy="125" r="125" fill="url(#b)"/><circle cx="125" cy="125" r="125" fill="url(#c)"/><circle cx="125" cy="125" r="125" fill="url(#d)"/><path fill="url(#e)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#f)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#g)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#h)" fill-rule="evenodd" d="M121.493 61.4c9.193 0 70.069-1.907 70.069 68.685 0 71.761-63.651 66.427-63.651 66.427h-45.27v-60.183H66.685v-14.742H82.64V61.401zM108.14 86.375v35.211h28.098v14.743H108.14v35.208h18.735c4.815 0 39.52.543 39.466-40.965-.054-41.507-33.66-44.197-40.341-44.197z" clip-rule="evenodd"/><path fill="url(#i)" fill-rule="evenodd" d="M121.493 57.4c9.193 0 70.069-1.907 70.069 68.685 0 71.761-63.651 66.427-63.651 66.427h-45.27v-60.183H66.685v-14.742H82.64V57.401zM108.14 82.375v35.211h28.098v14.743H108.14v35.208h18.735c4.815 0 39.52.543 39.466-40.965-.054-41.507-33.66-44.197-40.341-44.197z" clip-rule="evenodd"/><path fill="#fff" d="M121.493 57.4c9.193 0 70.069-1.907 70.069 68.685 0 71.761-63.651 66.427-63.651 66.427h-45.27v-60.183H66.685v-14.742H82.64V57.401zm0 2H84.641v60.187H68.684v10.742h15.958v60.183h43.353l.083.007h-.001l.004.001.025.002.119.007q.163.012.494.028c.439.02 1.094.041 1.933.044 1.68.005 4.095-.064 6.997-.366 5.816-.606 13.533-2.139 21.222-5.829 7.674-3.682 15.314-9.508 21.048-18.724 5.735-9.218 9.643-21.958 9.643-39.597 0-17.355-3.739-30.101-9.37-39.483-5.628-9.379-13.221-15.518-21.126-19.55-15.887-8.101-32.944-7.652-37.573-7.652M126 80.375c3.516 0 14.026.694 23.727 6.845 9.85 6.246 18.586 17.948 18.614 39.349.014 10.66-2.206 18.767-5.733 24.911-3.529 6.149-8.303 10.218-13.217 12.896-8.537 4.653-17.521 5.115-21.254 5.157l-1.262.004H106.14v-39.208h28.098v-10.743H106.14v-39.21zm-17.86 37.211h28.098v14.743H108.14v35.208h18.735c4.815 0 39.52.543 39.466-40.965-.054-41.507-33.66-44.197-40.341-44.197h-17.86z"/></g><defs><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#ffe991"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#c2a633"/><stop offset="1" stop-color="#9a6a00"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#825101" stop-opacity="0"/><stop offset="1" stop-color="#825101" stop-opacity=".5"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#e9cb57"/><stop offset="1" stop-color="#bd8202"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#d08e00" stop-opacity=".125"/><stop offset="1" stop-color="#d08e00"/></linearGradient><linearGradient id="g" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#ffe379"/><stop offset=".15" stop-color="#ffe379" stop-opacity="0"/></linearGradient><linearGradient id="h" x1="129.123" x2="129.123" y1="61.395" y2="196.601" gradientUnits="userSpaceOnUse"><stop stop-color="#bd8400"/><stop offset="1" stop-color="#8e6500"/></linearGradient><linearGradient id="i" x1="129.123" x2="129.123" y1="57.395" y2="192.601" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#ffeca3"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h250v250H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><path fill="url(#a)" d="M250 125c0 69.036-55.964 125-125 125S0 194.036 0 125 55.964 0 125 0s125 55.964 125 125"/><path fill="url(#b)" d="M250 125c0 69.036-55.964 125-125 125S0 194.036 0 125 55.964 0 125 0s125 55.964 125 125"/><path fill="url(#c)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#d)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#e)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#f)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#g)" d="m124.961 220.624-55-77.449 55 32.449 55-32.551z"/><path fill="url(#h)" d="m179.961 132.563-55 32.449-55-32.449 55-91.327z"/><path fill="url(#i)" d="M124.961 169.624v45l55-77.551z"/><path fill="url(#j)" d="m69.96 137.175 55.001 77.449v-45z"/><path fill="url(#k)" d="m179.961 126.563-55-91.327v123.776z"/><path fill="url(#l)" d="m124.961 35.236-55 91.327 55 32.449z"/><path fill="url(#m)" d="M124.961 214.625v-.001l-55-77.449 55 32.449 55-32.551zm1.018-43.28a2 2 0 0 1-2.035.002l-46.922-27.684 47.938 67.505 47.935-67.59zm53.982-44.782-55 32.449v.001l-55-32.45 55-91.327zm-107.246-.698 52.245 30.824 52.246-30.824-52.245-86.753z"/><path fill="url(#n)" d="M124.961 214.625v-.001l-55-77.449 55 32.449 55-32.551zm1.018-43.28a2 2 0 0 1-2.035.002l-46.922-27.684 47.938 67.505 47.935-67.59zm53.982-44.782-55 32.449v.001l-55-32.45 55-91.327zm-107.246-.698 52.245 30.824 52.246-30.824-52.245-86.753z"/><defs><linearGradient id="a" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#5970ff"/><stop offset="1" stop-color="#3d1bff"/></linearGradient><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#301cb7" stop-opacity="0"/><stop offset="1" stop-color="#301cb7" stop-opacity=".5"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#798bff"/><stop offset="1" stop-color="#001ee2"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#798bff"/><stop offset="1" stop-color="#5a41ff"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#8774ff" stop-opacity="0"/><stop offset="1" stop-color="#8774ff"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#a9b5ff"/><stop offset=".15" stop-color="#a9b5ff" stop-opacity="0"/></linearGradient><linearGradient id="g" x1="124.961" x2="124.961" y1="41.236" y2="220.624" gradientUnits="userSpaceOnUse"><stop offset=".246" stop-color="#3f39f9"/><stop offset="1" stop-color="#3122d3"/></linearGradient><linearGradient id="h" x1="124.961" x2="124.961" y1="41.236" y2="220.624" gradientUnits="userSpaceOnUse"><stop offset=".246" stop-color="#3f39f9"/><stop offset="1" stop-color="#3122d3"/></linearGradient><linearGradient id="i" x1="152.461" x2="152.461" y1="137.073" y2="214.624" gradientUnits="userSpaceOnUse"><stop stop-color="#98a6ff"/><stop offset="1" stop-color="#526aff"/></linearGradient><linearGradient id="j" x1="97.461" x2="97.461" y1="137.175" y2="214.624" gradientUnits="userSpaceOnUse"><stop stop-color="#b8c2ff"/><stop offset="1" stop-color="#8b9bff"/></linearGradient><linearGradient id="k" x1="152.461" x2="152.461" y1="35.236" y2="159.012" gradientUnits="userSpaceOnUse"><stop stop-color="#b4bfff"/><stop offset="1" stop-color="#6278fe"/></linearGradient><linearGradient id="l" x1="97.461" x2="97.461" y1="35.236" y2="159.012" gradientUnits="userSpaceOnUse"><stop stop-color="#f4f5ff"/><stop offset="1" stop-color="#aeb9ff"/></linearGradient><linearGradient id="m" x1="124.961" x2="124.961" y1="35.236" y2="214.625" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset=".547" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="n" x1="124.961" x2="124.961" y1="35.236" y2="214.625" gradientUnits="userSpaceOnUse"><stop offset=".752" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity=".5"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.1 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><path fill="url(#a)" d="M249.998 124.999C249.998 194.035 194.035 250 125 250 55.964 250 0 194.035 0 124.999 0 55.964 55.964 0 125 0c69.034 0 124.998 55.964 124.998 124.999"/><path fill="url(#b)" d="M249.998 124.999C249.998 194.035 194.035 250 125 250 55.964 250 0 194.035 0 124.999 0 55.964 55.964 0 125 0c69.034 0 124.998 55.964 124.998 124.999"/><path fill="url(#c)" d="M244.998 124.999C244.998 58.725 191.273 5 125 5 58.726 5 5 58.725 5 124.999 5 191.274 58.726 245 125 245v5l-1.615-.011C55.093 249.124 0 193.496 0 124.999 0 55.964 55.964 0 125 0c69.034 0 124.998 55.964 124.998 124.999C249.998 194.035 194.035 250 125 250v-5c66.274 0 119.998-53.726 119.998-120.001"/><path fill="url(#d)" d="M244.998 124.999C244.998 58.725 191.273 5 125 5 58.726 5 5 58.725 5 124.999 5 191.274 58.726 245 125 245v5l-1.615-.011C55.093 249.124 0 193.496 0 124.999 0 55.964 55.964 0 125 0c69.034 0 124.998 55.964 124.998 124.999C249.998 194.035 194.035 250 125 250v-5c66.274 0 119.998-53.726 119.998-120.001"/><path fill="url(#e)" d="M244.998 124.999C244.998 58.725 191.273 5 125 5 58.726 5 5 58.725 5 124.999 5 191.274 58.726 245 125 245v5l-1.615-.011C55.093 249.124 0 193.496 0 124.999 0 55.964 55.964 0 125 0c69.034 0 124.998 55.964 124.998 124.999C249.998 194.035 194.035 250 125 250v-5c66.274 0 119.998-53.726 119.998-120.001"/><path fill="url(#f)" d="m119.689 164.393 8.119-30.572 19.222-7.023 4.781-17.967-.163-.446-18.922 6.913 13.634-51.334h-38.664l-17.829 66.992-14.886 5.438-4.918 18.523 14.874-5.434-10.508 39.482h102.9l6.596-24.572z"/><path fill="url(#g)" d="m117.689 158.393 8.119-30.572 19.222-7.023 4.781-17.967-.163-.446-18.922 6.913 13.634-51.334h-38.664l-17.829 66.992-14.886 5.438-4.918 18.523 14.874-5.434-10.508 39.482h102.9l6.596-24.572z"/><path fill="#fff" d="m144.359 57.964-13.632 51.334 18.921-6.913.164.446-4.782 17.967-19.222 7.022-8.12 30.573h64.237l-6.597 24.572h-102.9l10.508-39.482-14.874 5.434 4.92-18.523 14.885-5.438 17.829-66.992zm-54.827 68.513-14.885 5.437-3.668 13.807 14.878-5.434-10.826 40.678h98.763l5.523-20.572h-64.229l9.055-34.093 19.222-7.025 3.675-13.808-19.231 7.026 13.95-52.53h-34.526z"/><defs><linearGradient id="a" x1="124.999" x2="124.999" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#1c60ca"/><stop offset="1" stop-color="#002394"/></linearGradient><linearGradient id="b" x1="124.999" x2="124.999" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#000e6c" stop-opacity="0"/><stop offset="1" stop-color="#000e6c" stop-opacity=".3"/></linearGradient><linearGradient id="c" x1="124.999" x2="124.999" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#2974ed"/><stop offset="1" stop-color="#0031c9"/></linearGradient><linearGradient id="d" x1="124.999" x2="124.999" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#0059ad" stop-opacity="0"/><stop offset="1" stop-color="#0059ad"/></linearGradient><linearGradient id="e" x1="124.999" x2="124.999" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#5294ff"/><stop offset=".15" stop-color="#5294ff" stop-opacity="0"/></linearGradient><linearGradient id="f" x1="126.994" x2="126.994" y1="63.964" y2="188.965" gradientUnits="userSpaceOnUse"><stop stop-color="#063aba"/><stop offset="1" stop-color="#002a9c"/></linearGradient><linearGradient id="g" x1="124.994" x2="124.994" y1="57.964" y2="182.965" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#c7dcff"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><g clip-path="url(#a)"><path fill="url(#b)" d="M125 250c69.036 0 125-55.964 125-125S194.036 0 125 0 0 55.964 0 125s55.964 125 125 125"/><path fill="#ce2901" d="M206.251 170.49h35.212a124.7 124.7 0 0 1-13.543 25.47h-48.779v-66.18l-54.14 54.14-54.14-54.14v66.18H22.082a124.7 124.7 0 0 1-13.547-25.48h35.216V65.31l81.25 81.251 81.25-81.251z"/><path stroke="url(#c)" stroke-width="5" d="M125 2.5c67.655 0 122.5 54.845 122.5 122.5S192.655 247.5 125 247.5 2.5 192.655 2.5 125 57.345 2.5 125 2.5Z"/><path stroke="url(#d)" stroke-width="5" d="M125 2.5c67.655 0 122.5 54.845 122.5 122.5S192.655 247.5 125 247.5 2.5 192.655 2.5 125 57.345 2.5 125 2.5Z"/><path stroke="url(#e)" stroke-width="5" d="M125 2.5c67.655 0 122.5 54.845 122.5 122.5S192.655 247.5 125 247.5 2.5 192.655 2.5 125 57.345 2.5 125 2.5Z"/><path fill="url(#f)" d="M205.251 165.489h36.982a123.8 123.8 0 0 1-10.979 23.471h-51.113v-67.595l-55.14 55.14-55.14-55.14v67.595H18.758a123 123 0 0 1-10.99-23.481H44.75V61.724l80.25 80.25 80.25-80.25z"/><path stroke="url(#g)" stroke-width="2" d="M205.251 165.489h36.982a123.8 123.8 0 0 1-10.979 23.471h-51.113v-67.595l-55.14 55.14-55.14-55.14v67.595H18.758a123 123 0 0 1-10.99-23.481H44.75V61.724l80.25 80.25 80.25-80.25z"/><path stroke="url(#h)" stroke-width="2" d="M205.251 165.489h36.982a123.8 123.8 0 0 1-10.979 23.471h-51.113v-67.595l-55.14 55.14-55.14-55.14v67.595H18.758a123 123 0 0 1-10.99-23.481H44.75V61.724l80.25 80.25 80.25-80.25z"/><path fill="url(#i)" fill-opacity=".3" d="M206.251 164.481V59.311l-81.25 81.25-81.25-81.25v105.17H6.371c2.99 8.99 6.97 17.53 11.82 25.48h52.67v-66.18l54.14 54.14 54.14-54.14v66.18h52.68c4.84-7.95 8.82-16.49 11.81-25.47h-37.38z"/><path fill="url(#j)" fill-opacity=".3" d="M206.251 164.481V59.311l-81.25 81.25-81.25-81.25v105.17H6.371c2.99 8.99 6.97 17.53 11.82 25.48h52.67v-66.18l54.14 54.14 54.14-54.14v66.18h52.68c4.84-7.95 8.82-16.49 11.81-25.47h-37.38z"/></g><defs><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#f60"/><stop offset=".663" stop-color="#ea3e00"/><stop offset="1" stop-color="#b51500"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#ff9a59"/><stop offset="1" stop-color="#f23400"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#ff7752" stop-opacity="0"/><stop offset="1" stop-color="#ff7752"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#ffbe94"/><stop offset=".15" stop-color="#ffbe94" stop-opacity="0"/></linearGradient><linearGradient id="f" x1="125.001" x2="125.001" y1="59.31" y2="189.96" gradientUnits="userSpaceOnUse"><stop offset=".313" stop-color="#fff"/><stop offset=".75" stop-color="#ffc7b2"/></linearGradient><linearGradient id="g" x1="125.154" x2="125.154" y1="59.291" y2="189.96" gradientUnits="userSpaceOnUse"><stop offset=".629" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="h" x1="125.154" x2="125.154" y1="59.291" y2="189.96" gradientUnits="userSpaceOnUse"><stop offset=".93" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="i" x1="243.631" x2="80.419" y1="125.158" y2="272.169" gradientUnits="userSpaceOnUse"><stop offset=".734" stop-color="#cd2700" stop-opacity="0"/><stop offset=".954" stop-color="#cd2700"/></linearGradient><linearGradient id="j" x1="243.631" x2="80.419" y1="189.96" y2="42.95" gradientUnits="userSpaceOnUse"><stop offset=".048" stop-color="#cd2700"/><stop offset=".265" stop-color="#cd2700" stop-opacity="0"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h250v250H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><g clip-path="url(#a)"><path fill="url(#b)" d="M125 250c69.036 0 125-55.964 125-125S194.036 0 125 0 0 55.964 0 125s55.964 125 125 125"/><path fill="url(#c)" d="M125 250c69.036 0 125-55.964 125-125S194.036 0 125 0 0 55.964 0 125s55.964 125 125 125"/><path fill="url(#d)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#e)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#f)" d="M245 125C245 58.726 191.274 5 125 5S5 58.726 5 125s53.726 120 120 120v5C55.964 250 0 194.036 0 125S55.964 0 125 0s125 55.964 125 125-55.964 125-125 125v-5c66.274 0 120-53.726 120-120"/><path fill="url(#g)" fill-rule="evenodd" d="m125.449 117.517 42.91-65.78h11.629l-45.384 70.026h37.809v8.883h-38l11.294 17.768h26.71v8.884h-21.063l32.188 50.637h-12.156l-32.508-50.637H111.42l-33.005 50.637H66.359l32.65-50.637H77.89l.003-8.884h26.843l11.456-17.768H77.894v-8.883h37.916L71.036 51.736H83.43zm-8.239 30.897h15.965l-7.922-12.34z" clip-rule="evenodd"/><path fill="url(#h)" fill-rule="evenodd" d="m125.449 113.517 42.91-65.78h11.629l-45.384 70.026h37.809v8.883h-38l11.294 17.768h26.71v8.884h-21.063l32.188 50.637h-12.156l-32.508-50.637H111.42l-33.005 50.637H66.359l32.65-50.637H77.89l.003-8.884h26.843l11.456-17.768H77.894v-8.883h37.916L71.036 47.736H83.43zm-8.239 30.897h15.965l-7.922-12.34z" clip-rule="evenodd"/><path fill="#fff" d="m125.449 113.517 42.91-65.78h11.629l-45.384 70.026h37.809v8.883h-38l11.294 17.768h26.71v8.884h-21.063l32.188 50.637h-12.156l-32.508-50.637H111.42l-33.005 50.637H66.359l32.65-50.637H77.89l.003-8.884h26.843l11.456-17.768H77.894v-8.883h37.916L71.036 47.736H83.43zm-5.987 6.246H79.894v4.883h39.968l-14.035 21.768H79.894l-.002 4.884h22.786l-32.65 50.637h7.303l33.005-50.637h29.635l32.507 50.637h7.423l-32.188-50.637h22.704v-4.884h-25.809l-13.837-21.768h39.642v-4.883h-39.489l45.385-70.027h-6.867l-44.01 67.468-43.099-67.468h-7.644zm17.373 26.651H113.52l11.746-18.022zm-19.625-2h15.965l-7.922-12.34z"/></g><defs><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#209ce9"/><stop offset="1" stop-color="#007ac5"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#003f88" stop-opacity="0"/><stop offset="1" stop-color="#003f88" stop-opacity=".5"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#5ec1ff"/><stop offset="1" stop-color="#009eff"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#3ab4ff" stop-opacity="0"/><stop offset="1" stop-color="#3ab4ff"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#98d8ff"/><stop offset=".15" stop-color="#98d8ff" stop-opacity="0"/></linearGradient><linearGradient id="g" x1="124.951" x2="124.951" y1="51.736" y2="207.935" gradientUnits="userSpaceOnUse"><stop stop-color="#0e86d2"/><stop offset="1" stop-color="#0069ae"/></linearGradient><linearGradient id="h" x1="124.951" x2="124.951" y1="47.736" y2="203.935" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#a4dcff"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h250v250H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><g clip-path="url(#a)"><path fill="url(#b)" d="M125 250c69.271 0 125-55.729 125-125S194.271 0 125 0 0 55.729 0 125s55.729 125 125 125"/><path fill="url(#c)" d="M125 250c69.271 0 125-55.729 125-125S194.271 0 125 0 0 55.729 0 125s55.729 125 125 125"/><path fill="url(#d)" d="M245 125C245 58.49 191.51 5 125 5S5 58.49 5 125s53.49 120 120 120v5C55.729 250 0 194.271 0 125S55.729 0 125 0s125 55.729 125 125-55.729 125-125 125v-5c66.51 0 120-53.49 120-120"/><path fill="url(#e)" d="M245 125C245 58.49 191.51 5 125 5S5 58.49 5 125s53.49 120 120 120v5C55.729 250 0 194.271 0 125S55.729 0 125 0s125 55.729 125 125-55.729 125-125 125v-5c66.51 0 120-53.49 120-120"/><path fill="url(#f)" d="M245 125C245 58.49 191.51 5 125 5S5 58.49 5 125s53.49 120 120 120v5C55.729 250 0 194.271 0 125S55.729 0 125 0s125 55.729 125 125-55.729 125-125 125v-5c66.51 0 120-53.49 120-120"/><path fill="url(#g)" d="m161.448 63.5-42.085 24.17v75.437l-23.22 13.461-23.363-13.472v-26.932l23.363-13.341 15.022 8.712v-21.791l-15.153-8.602-42.074 24.443v48.352l42.216 24.312 42.074-24.312V98.511l23.362-13.472 23.352 13.472v26.812l-23.352 13.592-15.153-8.789v21.682l15.011 8.657 42.49-24.17V87.67z"/><path fill="url(#h)" d="m157.448 57.5-42.085 24.17v75.437l-23.22 13.461-23.363-13.472v-26.932l23.363-13.341 15.022 8.712v-21.791l-15.153-8.602-42.074 24.443v48.352l42.216 24.312 42.074-24.312V92.511l23.362-13.472 23.352 13.472v26.812l-23.352 13.592-15.153-8.789v21.682l15.011 8.657 42.49-24.17V81.67z"/><path fill="#fff" d="M199.938 81.67v48.625l-42.49 24.17-15.01-8.657v-21.681l15.152 8.788 23.351-13.592V92.511L157.59 79.039l-23.362 13.472v75.426l-42.075 24.312-42.216-24.312v-48.352l42.075-24.443 15.153 8.602v21.79l-15.022-8.711-23.363 13.341v26.932l23.363 13.471 23.22-13.461V81.67l42.085-24.17zm-16.997 38.804-25.349 14.754-13.154-7.63v17.054l13.017 7.508 40.483-23.029V82.833l-40.485-23.03-40.09 23.024v75.432l-25.217 14.619-25.366-14.626v-29.249l25.37-14.487 13.015 7.546v-17.154l-13.142-7.46-40.085 23.288v46.043l40.213 23.16 40.077-23.157V91.356L157.59 76.73l25.351 14.625z"/></g><defs><linearGradient id="b" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#7158ff"/><stop offset="1" stop-color="#4a2aff"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".725" stop-color="#3115cd" stop-opacity="0"/><stop offset="1" stop-color="#3115cd" stop-opacity=".5"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#8570ff"/><stop offset="1" stop-color="#4a4dff"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#7072ff" stop-opacity="0"/><stop offset="1" stop-color="#7072ff"/></linearGradient><linearGradient id="f" x1="125" x2="125" y1="0" y2="250" gradientUnits="userSpaceOnUse"><stop stop-color="#a392ff"/><stop offset=".15" stop-color="#a392ff" stop-opacity="0"/></linearGradient><linearGradient id="g" x1="128.938" x2="128.938" y1="63.5" y2="198.249" gradientUnits="userSpaceOnUse"><stop stop-color="#5132ff"/><stop offset="1" stop-color="#4c2cff"/></linearGradient><linearGradient id="h" x1="124.938" x2="124.938" y1="57.5" y2="192.249" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#b9adff"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h250v250H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><path fill="url(#a)" d="M246.258 155.241C229.561 222.205 161.73 262.959 94.75 246.26 27.798 229.565-12.96 161.737 3.744 94.776 20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.731 84.53 91.033 151.5"/><path fill="url(#b)" d="M246.258 155.241C229.561 222.205 161.73 262.959 94.75 246.26 27.798 229.565-12.96 161.737 3.744 94.776 20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.731 84.53 91.033 151.5"/><path fill="url(#c)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#d)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#e)" d="M3.744 94.776C20.434 27.803 88.265-12.954 155.225 3.74c66.976 16.695 107.73 84.531 91.034 151.5l-.401 1.565c-17.22 65.513-83.595 105.392-149.538 89.835l-1.57-.381C27.798 229.565-12.96 161.737 3.744 94.776M154.015 8.592C89.735-7.435 24.618 31.692 8.596 95.985v.002C-7.44 160.268 31.687 225.38 95.96 241.408c64.301 16.032 129.418-23.091 145.448-87.376 16.029-64.29-23.096-129.413-87.392-145.44"/><path fill="url(#f)" d="M170.534 75.672H83.47c-16.029 0-26.138 17.258-18.124 31.237l53.733 93.121c3.506 6.102 12.294 6.102 15.8 0l53.733-93.121c8.059-13.934-2.095-31.237-18.124-31.237zm-51.501 96.445-11.703-22.632-28.232-50.499c-1.867-3.233.456-7.377 4.326-7.377h35.609v80.553zm55.827-73.176-28.232 50.544-11.703 22.632V91.564h35.609c3.916 0 6.193 4.144 4.326 7.377"/><path fill="url(#g)" d="M170.534 75.672H83.47c-16.029 0-26.138 17.258-18.124 31.237l53.733 93.121c3.506 6.102 12.294 6.102 15.8 0l53.733-93.121c8.059-13.934-2.095-31.237-18.124-31.237zm-51.501 96.445-11.703-22.632-28.232-50.499c-1.867-3.233.456-7.377 4.326-7.377h35.609v80.553zm55.827-73.176-28.232 50.544-11.703 22.632V91.564h35.609c3.916 0 6.193 4.144 4.326 7.377"/><path fill="url(#h)" d="M170.534 70.672H83.47c-16.029 0-26.138 17.258-18.124 31.237l53.733 93.121c3.506 6.102 12.294 6.102 15.8 0l53.733-93.121c8.059-13.934-2.095-31.237-18.124-31.237zm-51.501 96.445-11.703-22.632-28.232-50.499c-1.867-3.233.456-7.377 4.326-7.377h35.609v80.553zm55.827-73.176-28.232 50.544-11.703 22.632V86.564h35.609c3.916 0 6.193 4.144 4.326 7.377"/><path stroke="#fff" stroke-width="2" d="M83.47 71.672h87.018c15.27 0 24.926 16.479 17.258 29.736l-.001.001-53.731 93.121-.001.001c-3.122 5.433-10.946 5.433-14.068 0l-.001-.001-53.731-93.121h-.001c-7.626-13.307 1.993-29.737 17.258-29.737Zm-.046 13.937c-4.636 0-7.437 4.967-5.198 8.865l28.231 50.499 11.688 22.603.799-.414h1.089V85.609zm50.501 81.507 1.888.46 11.688-22.603 28.231-50.544-.001-.001c2.235-3.89-.508-8.864-5.197-8.864h-36.609z"/><defs><linearGradient id="a" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#0199ea"/><stop offset="1" stop-color="#07c"/></linearGradient><linearGradient id="b" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#00a6ff"/><stop offset="1" stop-color="#0073d7"/></linearGradient><linearGradient id="c" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#2db6ff"/><stop offset="1" stop-color="#0195e6"/></linearGradient><linearGradient id="d" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop offset=".85" stop-color="#2db3ff" stop-opacity="0"/><stop offset="1" stop-color="#2db3ff"/></linearGradient><linearGradient id="e" x1="125" x2="125" y1="0" y2="250.003" gradientUnits="userSpaceOnUse"><stop stop-color="#c0e9ff"/><stop offset=".15" stop-color="#c0e9ff" stop-opacity="0"/></linearGradient><linearGradient id="f" x1="126.988" x2="126.988" y1="75.672" y2="204.606" gradientUnits="userSpaceOnUse"><stop stop-color="#017cd0"/><stop offset="1" stop-color="#0065aa"/></linearGradient><linearGradient id="g" x1="126.988" x2="126.988" y1="75.672" y2="204.606" gradientUnits="userSpaceOnUse"><stop stop-color="#0081d7"/><stop offset="1" stop-color="#0069bf"/></linearGradient><linearGradient id="h" x1="126.988" x2="126.988" y1="70.672" y2="199.606" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#b4e5ff"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

+4
View File
@@ -465,6 +465,8 @@
"extracted_address_content": "You will be sending funds to\n${recipient_name}",
"failed_authentication": "Failed authentication. ${state_error}",
"faq": "FAQ",
"favorite_token": "Favorite token",
"favorite_token_desc": "The favorite token's balance will show on the balance card.",
"features": "Features",
"fee": "Fee",
"fee_less_than_min": "Selected Fee is less than the minimum, please increase the fees to be able to send the transaction",
@@ -1023,6 +1025,7 @@
"show_balance": "Long Press to Show Balance",
"show_balance_send_page": "Tap to reveal",
"show_balance_toast": "Long press to hide or show balance",
"show_combined_balance": "Show combined balance",
"show_details": "Show Details",
"show_hidden_addresses": "Show hidden addresses",
"show_keys": "Show seed/keys",
@@ -1292,6 +1295,7 @@
"waitFewSecondForTxUpdate": "Kindly wait for a few seconds for transaction to reflect in transactions history",
"wallet": "Wallet",
"wallet_accounts": "Wallet Accounts",
"wallet_balance": "Wallet Balance",
"wallet_group": "Wallet Group",
"wallet_group_description_existing_seed": "You’ve chosen to use an existing seed for this wallet. You may verify the seed again if you need to confirm or write it down.",
"wallet_group_description_four": "to create a wallet with an entirely new seed.",