@skip-go/widget 3.13.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,10 +3,10 @@ import o, { useContext, useState, useMemo, useEffect, useRef, useDebugValue, cre
3
3
  import { Scope } from "react-shadow-scope";
4
4
  import { atom as atom$1, useAtomValue, useAtom, useSetAtom, createStore, Provider } from "jotai";
5
5
  import NiceModal, { useModal } from "@ebay/nice-modal-react";
6
- import { assets, chains, bridges, venues, ChainType, getSigningStargateClient, route, executeRoute, balances, BridgeType, FeeType, GAS_STATION_CHAIN_IDS, subscribeToRouteStatus, setClientOptions } from "@skip-go/client";
6
+ import { assets, chains, bridges, venues, ChainType, getSigningStargateClient, route, balances, executeMultipleRoutes, executeRoute, BridgeType, FeeType, GAS_STATION_CHAIN_IDS, subscribeToRouteStatus, setClientOptions } from "@skip-go/client";
7
7
  import { atomWithQuery, atomWithMutation } from "jotai-tanstack-query";
8
8
  import pluralize from "pluralize";
9
- import { track, setUserId, init, add } from "@amplitude/analytics-browser";
9
+ import { track, init, add, setUserId } from "@amplitude/analytics-browser";
10
10
  import { atomEffect } from "jotai-effect";
11
11
  import { WalletType, isWalletConnect, useActiveWalletType, useDisconnect, getWallet, checkWallet, connect, useAccount as useAccount$1, getChainInfo as getChainInfo$1, GrazProvider } from "graz";
12
12
  import { createPenumbraClient } from "@penumbra-zone/client";
@@ -1765,8 +1765,8 @@ const flexProps = lt`
1765
1765
  ${({ flexDirection }) => flexDirection && `flex-direction: ${flexDirection}`};
1766
1766
  `;
1767
1767
  const Row = dt.div`
1768
- ${({ width }) => width && `width: ${width}px`};
1769
- ${({ height }) => height && `height: ${height}px`};
1768
+ ${({ width }) => width !== void 0 && `width: ${typeof width === "number" ? `${width}px` : width}`};
1769
+ ${({ height }) => height !== void 0 && `height: ${typeof height === "number" ? `${height}px` : height}`};
1770
1770
  flex-direction: row;
1771
1771
  ${flexProps};
1772
1772
  `;
@@ -1774,10 +1774,24 @@ const Column = dt(Row)`
1774
1774
  flex-direction: column;
1775
1775
  `;
1776
1776
  const Spacer = dt.div`
1777
- ${({ width }) => width && `width: ${width}px`};
1778
- ${({ height }) => height && `height: ${height}px`};
1777
+ position: relative;
1779
1778
  flex-shrink: 0;
1780
1779
  flex-grow: 0;
1780
+ ${({ width }) => width !== void 0 && `width: ${typeof width === "number" ? `${width}px` : width}`};
1781
+ ${({ height }) => height !== void 0 && `height: ${typeof height === "number" ? `${height}px` : height}`};
1782
+
1783
+ ${({ showLine, lineColor = "#ccc", lineThickness = 1 }) => showLine && `
1784
+ &::after {
1785
+ content: '';
1786
+ position: absolute;
1787
+ top: 50%;
1788
+ left: 0;
1789
+ width: 100%;
1790
+ height: ${lineThickness}px;
1791
+ background-color: ${lineColor};
1792
+ transform: translateY(-50%);
1793
+ }
1794
+ `}
1781
1795
  `;
1782
1796
  const withBoundProps = (WrappedComponent, boundProps) => {
1783
1797
  return (props) => {
@@ -2193,7 +2207,7 @@ const Text = dt(SmallText)`
2193
2207
  ${({ useWindowsTextHack }) => useWindowsTextHack && isWindows() ? "margin-bottom: -4px" : ""};
2194
2208
  ${textProps}
2195
2209
  `;
2196
- const TextButton = dt(Text).attrs({ as: "button" })`
2210
+ dt(Text).attrs({ as: "button" })`
2197
2211
  ${removeButtonStyles}
2198
2212
  cursor: pointer;
2199
2213
  `;
@@ -4143,11 +4157,7 @@ function shouldReduceFontSize(value) {
4143
4157
  return valueWithoutCommas.length >= 14;
4144
4158
  }
4145
4159
  const formatDisplayAmount = (input, options = {}) => {
4146
- const {
4147
- showLessThanSign = true,
4148
- decimals = DEFAULT_DECIMAL_PLACES,
4149
- abbreviate = true
4150
- } = options;
4160
+ const { showLessThanSign = true, decimals = DEFAULT_DECIMAL_PLACES, abbreviate = true } = options;
4151
4161
  if (input === void 0) {
4152
4162
  return "";
4153
4163
  }
@@ -5950,6 +5960,47 @@ const _mainnetChains = [
5950
5960
  coinType: 118
5951
5961
  }
5952
5962
  },
5963
+ {
5964
+ chainId: "axone-1",
5965
+ currencies: [
5966
+ {
5967
+ coinDenom: "axone",
5968
+ coinMinimalDenom: "uaxone",
5969
+ coinDecimals: 6
5970
+ }
5971
+ ],
5972
+ rest: "https://api.axone.cumulo.com.es",
5973
+ rpc: "https://rpc.axone.cumulo.com.es",
5974
+ bech32Config: {
5975
+ bech32PrefixAccAddr: "axone",
5976
+ bech32PrefixAccPub: "axonepub",
5977
+ bech32PrefixValAddr: "axonevaloper",
5978
+ bech32PrefixValPub: "axonevaloperpub",
5979
+ bech32PrefixConsAddr: "axonevalcons",
5980
+ bech32PrefixConsPub: "axonevalconspub"
5981
+ },
5982
+ chainName: "axone",
5983
+ feeCurrencies: [
5984
+ {
5985
+ coinDenom: "axone",
5986
+ coinMinimalDenom: "uaxone",
5987
+ coinDecimals: 6,
5988
+ gasPriceStep: {
5989
+ low: 1e-3,
5990
+ average: 5e-3,
5991
+ high: 0.01
5992
+ }
5993
+ }
5994
+ ],
5995
+ stakeCurrency: {
5996
+ coinDenom: "axone",
5997
+ coinMinimalDenom: "uaxone",
5998
+ coinDecimals: 6
5999
+ },
6000
+ bip44: {
6001
+ coinType: 118
6002
+ }
6003
+ },
5953
6004
  {
5954
6005
  chainId: "bbn-1",
5955
6006
  currencies: [
@@ -6300,11 +6351,6 @@ const _mainnetChains = [
6300
6351
  coinDenom: "badge",
6301
6352
  coinMinimalDenom: "ubadge",
6302
6353
  coinDecimals: 9
6303
- },
6304
- {
6305
- coinDenom: "stake",
6306
- coinMinimalDenom: "ustake",
6307
- coinDecimals: 9
6308
6354
  }
6309
6355
  ],
6310
6356
  rest: "http://134.122.12.165:1317",
@@ -8712,6 +8758,16 @@ const _mainnetChains = [
8712
8758
  average: 0.025,
8713
8759
  high: 0.03
8714
8760
  }
8761
+ },
8762
+ {
8763
+ coinDenom: "xrp",
8764
+ coinMinimalDenom: "ibc/8464A63954C0350A26C8588E20719F3A0AC8705E4CA0F7450B60C3F16B2D3421",
8765
+ coinDecimals: 18,
8766
+ gasPriceStep: {
8767
+ low: 11395e6,
8768
+ average: 21395e6,
8769
+ high: 31395e6
8770
+ }
8715
8771
  }
8716
8772
  ],
8717
8773
  stakeCurrency: {
@@ -10238,6 +10294,11 @@ const _mainnetChains = [
10238
10294
  coinDenom: "Hydro Wrapped hINJ",
10239
10295
  coinMinimalDenom: "factory/inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk/inj18luqttqyckgpddndh8hvaq25d5nfwjc78m56lc",
10240
10296
  coinDecimals: 18
10297
+ },
10298
+ {
10299
+ coinDenom: "wbtc",
10300
+ coinMinimalDenom: "ibc/0E293A7622DC9A6439DB60E6D234B5AF446962E27CA3AB44D0590603DFF6968E",
10301
+ coinDecimals: 8
10241
10302
  }
10242
10303
  ],
10243
10304
  rest: "https://6d0ff611-9009-4bd1-a7a7-acec7c70d454.injective-1.mesa-rest.newmetric.xyz",
@@ -11261,6 +11322,26 @@ const _mainnetChains = [
11261
11322
  average: 0.025,
11262
11323
  high: 0.03
11263
11324
  }
11325
+ },
11326
+ {
11327
+ coinDenom: "kUSD",
11328
+ coinMinimalDenom: "ukusd",
11329
+ coinDecimals: 6,
11330
+ gasPriceStep: {
11331
+ low: 0.01,
11332
+ average: 0.025,
11333
+ high: 0.03
11334
+ }
11335
+ },
11336
+ {
11337
+ coinDenom: "USDC",
11338
+ coinMinimalDenom: "ibc/295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F",
11339
+ coinDecimals: 6,
11340
+ gasPriceStep: {
11341
+ low: 0.01,
11342
+ average: 0.025,
11343
+ high: 0.03
11344
+ }
11264
11345
  }
11265
11346
  ],
11266
11347
  stakeCurrency: {
@@ -12920,12 +13001,12 @@ const _mainnetChains = [
12920
13001
  currencies: [
12921
13002
  {
12922
13003
  coinDenom: "mtgbp",
12923
- coinMinimalDenom: "mtgbp",
12924
- coinDecimals: 0
13004
+ coinMinimalDenom: "umtgbp",
13005
+ coinDecimals: 6
12925
13006
  }
12926
13007
  ],
12927
13008
  rest: "https://lcd.mtgbp.com",
12928
- rpc: "https://rcp.mtgbp.com",
13009
+ rpc: "https://rpc.mtgbp.com",
12929
13010
  bech32Config: {
12930
13011
  bech32PrefixAccAddr: "mtgbp",
12931
13012
  bech32PrefixAccPub: "mtgbppub",
@@ -12938,22 +13019,22 @@ const _mainnetChains = [
12938
13019
  feeCurrencies: [
12939
13020
  {
12940
13021
  coinDenom: "mtgbp",
12941
- coinMinimalDenom: "mtgbp",
12942
- coinDecimals: 0,
13022
+ coinMinimalDenom: "umtgbp",
13023
+ coinDecimals: 6,
12943
13024
  gasPriceStep: {
12944
- low: 1e-6,
12945
- average: 5e-6,
12946
- high: 1e-4
13025
+ low: 0.025,
13026
+ average: 0.03,
13027
+ high: 0.035
12947
13028
  }
12948
13029
  }
12949
13030
  ],
12950
13031
  stakeCurrency: {
12951
13032
  coinDenom: "mtgbp",
12952
- coinMinimalDenom: "mtgbp",
12953
- coinDecimals: 0
13033
+ coinMinimalDenom: "umtgbp",
13034
+ coinDecimals: 6
12954
13035
  },
12955
13036
  bip44: {
12956
- coinType: 1179993441
13037
+ coinType: 118
12957
13038
  }
12958
13039
  },
12959
13040
  {
@@ -13326,6 +13407,11 @@ const _mainnetChains = [
13326
13407
  coinDenom: "ltc",
13327
13408
  coinMinimalDenom: "ibc/C4C791209A16419A4BB3C3177E5E8AE4477C9D7457842E7F531F91C513FA79A0",
13328
13409
  coinDecimals: 8
13410
+ },
13411
+ {
13412
+ coinDenom: "TAB",
13413
+ coinMinimalDenom: "factory/neutron1r5qx58l3xx2y8gzjtkqjndjgx69mktmapl45vns0pa73z0zpn7fqgltnll/TAB",
13414
+ coinDecimals: 6
13329
13415
  }
13330
13416
  ],
13331
13417
  rest: "https://rest-lb.neutron.org",
@@ -17085,6 +17171,21 @@ const _mainnetChains = [
17085
17171
  coinDenom: "XRP",
17086
17172
  coinMinimalDenom: "ibc/46EB46DB30D3BBC6F404A9232C09785F36D40DA05C662A8E295712ECBAFF1609",
17087
17173
  coinDecimals: 18
17174
+ },
17175
+ {
17176
+ coinDenom: "titan",
17177
+ coinMinimalDenom: "ibc/87B7A56E83C08DBFD567F0DE6463EC54181B8B819B3CAD7A584C47D59A2A05CF",
17178
+ coinDecimals: 6
17179
+ },
17180
+ {
17181
+ coinDenom: "ebaby",
17182
+ coinMinimalDenom: "factory/osmo12r3yc76u9lxe33yemstatnw8602culdjzrtr8lmnpycmd3z7d4jsxx60kc/FwNhFaW3zLxoLUgXCdWjqBzcvGNPaB7B2XZqm2xgrB93",
17183
+ coinDecimals: 6
17184
+ },
17185
+ {
17186
+ coinDenom: "FOST",
17187
+ coinMinimalDenom: "factory/osmo1q77cw0mmlluxu0wr29fcdd0tdnh78gzhkvhe4n6ulal9qvrtu43qtd0nh8/fost",
17188
+ coinDecimals: 6
17088
17189
  }
17089
17190
  ],
17090
17191
  rest: "https://lcd.osmosis.zone/",
@@ -19364,6 +19465,16 @@ const _mainnetChains = [
19364
19465
  coinMinimalDenom: "lp:33:upryzm",
19365
19466
  coinDecimals: 6
19366
19467
  },
19468
+ {
19469
+ coinDenom: "lp:34:pryzmypt-pryzm",
19470
+ coinMinimalDenom: "lp:34:upryzmypt-upryzm",
19471
+ coinDecimals: 6
19472
+ },
19473
+ {
19474
+ coinDenom: "lp:35:pryzm-usdc",
19475
+ coinMinimalDenom: "lp:35:upryzm-uusdc",
19476
+ coinDecimals: 6
19477
+ },
19367
19478
  {
19368
19479
  coinDenom: "lp:36:susds",
19369
19480
  coinMinimalDenom: "lp:36:asusds",
@@ -19422,6 +19533,26 @@ const _mainnetChains = [
19422
19533
  },
19423
19534
  chainName: "pryzm",
19424
19535
  feeCurrencies: [
19536
+ {
19537
+ coinDenom: "auuu",
19538
+ coinMinimalDenom: "factory/pryzm1jnhcsa5ddjsjq2t97v6a82z542rduxvtw6wd9h/uauuu",
19539
+ coinDecimals: 6,
19540
+ gasPriceStep: {
19541
+ low: 0.1,
19542
+ average: 0.15,
19543
+ high: 0.2
19544
+ }
19545
+ },
19546
+ {
19547
+ coinDenom: "pryzm",
19548
+ coinMinimalDenom: "upryzm",
19549
+ coinDecimals: 6,
19550
+ gasPriceStep: {
19551
+ low: 0.02,
19552
+ average: 0.03,
19553
+ high: 0.04
19554
+ }
19555
+ },
19425
19556
  {
19426
19557
  coinDenom: "atom",
19427
19558
  coinMinimalDenom: "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2",
@@ -19482,16 +19613,6 @@ const _mainnetChains = [
19482
19613
  high: 0.04
19483
19614
  }
19484
19615
  },
19485
- {
19486
- coinDenom: "auuu",
19487
- coinMinimalDenom: "factory/pryzm1jnhcsa5ddjsjq2t97v6a82z542rduxvtw6wd9h/uauuu",
19488
- coinDecimals: 6,
19489
- gasPriceStep: {
19490
- low: 0.01,
19491
- average: 0.015,
19492
- high: 0.02
19493
- }
19494
- },
19495
19616
  {
19496
19617
  coinDenom: "dydx",
19497
19618
  coinMinimalDenom: "ibc/F8CA5236869F819BC006EEF088E67889A26E4140339757878F0F4E229CDDA858",
@@ -19629,12 +19750,12 @@ const _mainnetChains = [
19629
19750
  currencies: [
19630
19751
  {
19631
19752
  coinDenom: "qfs",
19632
- coinMinimalDenom: "qfs",
19633
- coinDecimals: 0
19753
+ coinMinimalDenom: "uqfs",
19754
+ coinDecimals: 6
19634
19755
  }
19635
19756
  ],
19636
19757
  rest: "https://lcd.qfsone.com",
19637
- rpc: "https://rcp.qfsone.com",
19758
+ rpc: "https://rpc.qfsone.com",
19638
19759
  bech32Config: {
19639
19760
  bech32PrefixAccAddr: "qfs",
19640
19761
  bech32PrefixAccPub: "qfspub",
@@ -19647,22 +19768,22 @@ const _mainnetChains = [
19647
19768
  feeCurrencies: [
19648
19769
  {
19649
19770
  coinDenom: "qfs",
19650
- coinMinimalDenom: "qfs",
19651
- coinDecimals: 0,
19771
+ coinMinimalDenom: "uqfs",
19772
+ coinDecimals: 6,
19652
19773
  gasPriceStep: {
19653
- low: 1e-6,
19654
- average: 5e-6,
19655
- high: 1e-4
19774
+ low: 0.025,
19775
+ average: 0.03,
19776
+ high: 0.035
19656
19777
  }
19657
19778
  }
19658
19779
  ],
19659
19780
  stakeCurrency: {
19660
19781
  coinDenom: "qfs",
19661
- coinMinimalDenom: "qfs",
19662
- coinDecimals: 0
19782
+ coinMinimalDenom: "uqfs",
19783
+ coinDecimals: 6
19663
19784
  },
19664
19785
  bip44: {
19665
- coinType: 1179993431
19786
+ coinType: 118
19666
19787
  }
19667
19788
  },
19668
19789
  {
@@ -21628,44 +21749,44 @@ const _mainnetChains = [
21628
21749
  }
21629
21750
  },
21630
21751
  {
21631
- chainId: "taketitan-12",
21752
+ chainId: "taketitan-1",
21632
21753
  currencies: [
21633
21754
  {
21634
- coinDenom: "ttnc",
21635
- coinMinimalDenom: "ttnc",
21636
- coinDecimals: 0
21755
+ coinDenom: "titan",
21756
+ coinMinimalDenom: "utitan",
21757
+ coinDecimals: 6
21637
21758
  }
21638
21759
  ],
21639
- rest: "https://lcdttnc.taketitan.com",
21640
- rpc: "https://rcpttnc.taketitan.com",
21760
+ rest: "https://lcd.taketitan.com",
21761
+ rpc: "https://rpc.taketitan.com",
21641
21762
  bech32Config: {
21642
- bech32PrefixAccAddr: "taketitan",
21643
- bech32PrefixAccPub: "taketitanpub",
21644
- bech32PrefixValAddr: "taketitanvaloper",
21645
- bech32PrefixValPub: "taketitanvaloperpub",
21646
- bech32PrefixConsAddr: "taketitanvalcons",
21647
- bech32PrefixConsPub: "taketitanvalconspub"
21763
+ bech32PrefixAccAddr: "titan",
21764
+ bech32PrefixAccPub: "titanpub",
21765
+ bech32PrefixValAddr: "titanvaloper",
21766
+ bech32PrefixValPub: "titanvaloperpub",
21767
+ bech32PrefixConsAddr: "titanvalcons",
21768
+ bech32PrefixConsPub: "titanvalconspub"
21648
21769
  },
21649
21770
  chainName: "taketitan",
21650
21771
  feeCurrencies: [
21651
21772
  {
21652
- coinDenom: "ttnc",
21653
- coinMinimalDenom: "ttnc",
21654
- coinDecimals: 0,
21773
+ coinDenom: "titan",
21774
+ coinMinimalDenom: "utitan",
21775
+ coinDecimals: 6,
21655
21776
  gasPriceStep: {
21656
- low: 1e-6,
21657
- average: 5e-6,
21658
- high: 1e-4
21777
+ low: 0.025,
21778
+ average: 0.03,
21779
+ high: 0.035
21659
21780
  }
21660
21781
  }
21661
21782
  ],
21662
21783
  stakeCurrency: {
21663
- coinDenom: "ttnc",
21664
- coinMinimalDenom: "ttnc",
21665
- coinDecimals: 0
21784
+ coinDenom: "titan",
21785
+ coinMinimalDenom: "utitan",
21786
+ coinDecimals: 6
21666
21787
  },
21667
21788
  bip44: {
21668
- coinType: 1179993421
21789
+ coinType: 118
21669
21790
  }
21670
21791
  },
21671
21792
  {
@@ -25796,7 +25917,7 @@ const _testnetChains = [
25796
25917
  coinDecimals: 6,
25797
25918
  gasPriceStep: {
25798
25919
  low: 0.01,
25799
- average: 0.025,
25920
+ average: 0.02,
25800
25921
  high: 0.03
25801
25922
  }
25802
25923
  }
@@ -31465,6 +31586,12 @@ const _explorers = [
31465
31586
  url: "https://explorer.whenmoonwhenlambo.money/arkeo",
31466
31587
  txPage: "https://explorer.whenmoonwhenlambo.money/arkeo/tx/${txHash}",
31467
31588
  accountPage: "https://explorer.whenmoonwhenlambo.money/arkeo/account/${accountAddress}"
31589
+ },
31590
+ {
31591
+ kind: "NodeStake",
31592
+ url: "https://explorer.nodestake.org/arkeo",
31593
+ txPage: "https://explorer.nodestake.org/arkeo/tx/${txHash}",
31594
+ accountPage: "https://explorer.nodestake.org/arkeo/account/${accountAddress}"
31468
31595
  }
31469
31596
  ]
31470
31597
  },
@@ -31732,6 +31859,23 @@ const _explorers = [
31732
31859
  }
31733
31860
  ]
31734
31861
  },
31862
+ {
31863
+ chainId: "axone-1",
31864
+ explorers: [
31865
+ {
31866
+ kind: "valopers",
31867
+ url: "https://axone.valopers.com/",
31868
+ txPage: "https://axone.valopers.com/transactions/${txHash}",
31869
+ accountPage: "https://axone.valopers.com/account/${accountAddress}"
31870
+ },
31871
+ {
31872
+ kind: "NodeStake",
31873
+ url: "https://explorer.nodestake.org/axone",
31874
+ txPage: "https://explorer.nodestake.org/axone/tx/${txHash}",
31875
+ accountPage: "https://explorer.nodestake.org/axone/account/${accountAddress}"
31876
+ }
31877
+ ]
31878
+ },
31735
31879
  {
31736
31880
  chainId: "bbn-1",
31737
31881
  explorers: [
@@ -32552,9 +32696,8 @@ const _explorers = [
32552
32696
  chainId: "cifer-2",
32553
32697
  explorers: [
32554
32698
  {
32555
- kind: "bigdipper",
32556
- url: "https://explorer.cifer.ai/",
32557
- txPage: "https://explorer.cifer.ai/transactions/${txHash}"
32699
+ url: "https://www.cifscan.com/",
32700
+ txPage: "https://www.cifscan.com/tx/${txHash}"
32558
32701
  }
32559
32702
  ]
32560
32703
  },
@@ -35349,7 +35492,7 @@ const _explorers = [
35349
35492
  explorers: [
35350
35493
  {
35351
35494
  kind: "ping.pub",
35352
- url: "https://blockexplorer.mtgbp.com/mtgbp",
35495
+ url: "https://blockexplorer.mtgbp.com",
35353
35496
  txPage: "https://blockexplorer.mtgbp.com/mtgbp/tx/${txHash}",
35354
35497
  accountPage: "https://blockexplorer.mtgbp.com/mtgbp/accounts/${accountAddress}"
35355
35498
  }
@@ -36248,6 +36391,12 @@ const _explorers = [
36248
36391
  url: "https://shannon.pokt.network",
36249
36392
  txPage: "https://shannon.pokt.network/tx/${txHash}",
36250
36393
  accountPage: "https://shannon.pokt.network/poktroll/account/${accountAddress}"
36394
+ },
36395
+ {
36396
+ kind: "🗺 Ping Pub fork Explorer by Blockval",
36397
+ url: "https://explorer.blockval.io/pocket",
36398
+ txPage: "https://explorer.blockval.io/pocket/tx/${txHash}",
36399
+ accountPage: "https://explorer.blockval.io/pocket/account/${accountAddress}"
36251
36400
  }
36252
36401
  ]
36253
36402
  },
@@ -36417,7 +36566,7 @@ const _explorers = [
36417
36566
  explorers: [
36418
36567
  {
36419
36568
  kind: "ping.pub",
36420
- url: "https://blockexplorer.qfsone.com/qfs",
36569
+ url: "https://blockexplorer.qfsone.com",
36421
36570
  txPage: "https://blockexplorer.qfsone.com/qfs/tx/${txHash}",
36422
36571
  accountPage: "https://blockexplorer.qfsone.com/qfs/accounts/${accountAddress}"
36423
36572
  }
@@ -37767,13 +37916,13 @@ const _explorers = [
37767
37916
  ]
37768
37917
  },
37769
37918
  {
37770
- chainId: "taketitan-12",
37919
+ chainId: "taketitan-1",
37771
37920
  explorers: [
37772
37921
  {
37773
37922
  kind: "ping.pub",
37774
- url: "https://scan.taketitan.com/taketitan",
37775
- txPage: "https://scan.taketitan.com/taketitan/tx/${txHash}",
37776
- accountPage: "https://scan.taketitan.com/taketitan/accounts/${accountAddress}"
37923
+ url: "https://blockexplorer.taketitan.com",
37924
+ txPage: "https://blockexplorer.taketitan.com/taketitan/tx/${txHash}",
37925
+ accountPage: "https://blockexplorer.taketitan.com/taketitan/accounts/${accountAddress}"
37777
37926
  }
37778
37927
  ]
37779
37928
  },
@@ -41327,6 +41476,7 @@ const setRouteToDefaultRouteAtom = atom$1(null, (get, set, assets2) => {
41327
41476
  var HISTORY_VERSION = /* @__PURE__ */ ((HISTORY_VERSION2) => {
41328
41477
  HISTORY_VERSION2[HISTORY_VERSION2["camelCase"] = 0] = "camelCase";
41329
41478
  HISTORY_VERSION2[HISTORY_VERSION2["routeDetails"] = 1] = "routeDetails";
41479
+ HISTORY_VERSION2[HISTORY_VERSION2["userAddresses"] = 2] = "userAddresses";
41330
41480
  return HISTORY_VERSION2;
41331
41481
  })(HISTORY_VERSION || {});
41332
41482
  const transactionHistoryVersionAtom = atomWithStorage(
@@ -41339,9 +41489,16 @@ const transactionHistoryAtom = atomWithStorage(
41339
41489
  );
41340
41490
  const sortedHistoryItemsAtom = atom$1((get) => {
41341
41491
  const history = get(transactionHistoryAtom);
41342
- return history.filter(
41343
- (historyItem) => historyItem.txsSigned > 0 && historyItem.transactionDetails.some((tx) => tx.txHash)
41344
- ).sort((a, b) => b.timestamp - a.timestamp);
41492
+ const sortedAndFiltered = history.filter(
41493
+ (historyItem) => historyItem.txsSigned > 0 && historyItem.mainRouteId === void 0 && historyItem.transactionDetails.some((tx) => tx.txHash)
41494
+ ).map((historyItem) => {
41495
+ const relatedRoutes = [...historyItem.relatedRoutes ?? []];
41496
+ return {
41497
+ ...historyItem,
41498
+ relatedRoutes
41499
+ };
41500
+ }).sort((a, b) => b.timestamp - a.timestamp);
41501
+ return sortedAndFiltered;
41345
41502
  });
41346
41503
  const setTransactionHistoryAtom = atom$1(
41347
41504
  null,
@@ -41354,7 +41511,9 @@ const setTransactionHistoryAtom = atom$1(
41354
41511
  newHistory[index] = { ...oldItem, ...historyItem };
41355
41512
  } else {
41356
41513
  if (historyItem.id) {
41357
- set(setCurrentTransactionIdAtom, historyItem.id);
41514
+ if (historyItem.mainRouteId === void 0) {
41515
+ set(setCurrentTransactionIdAtom, historyItem.id);
41516
+ }
41358
41517
  newHistory.push(historyItem);
41359
41518
  }
41360
41519
  }
@@ -41367,7 +41526,7 @@ const currentTransactionAtom = atom$1((get) => {
41367
41526
  return history.find((historyItem) => historyItem.id === currentTransactionId);
41368
41527
  });
41369
41528
  const lastTransactionInTimeAtom = atom$1((get) => {
41370
- const history = get(transactionHistoryAtom);
41529
+ const history = get(sortedHistoryItemsAtom);
41371
41530
  if (history.length === 0) return;
41372
41531
  const sorted = [...history].sort((a, b) => b.timestamp - a.timestamp);
41373
41532
  return sorted.at(0);
@@ -45415,7 +45574,7 @@ function walletConnect(parameters) {
45415
45574
  const optionalChains = config2.chains.map((x2) => x2.id);
45416
45575
  if (!optionalChains.length)
45417
45576
  return;
45418
- const { EthereumProvider } = await import("./index.es-DOVSLdtw.js");
45577
+ const { EthereumProvider } = await import("./index.es-DlJZjBcA.js");
45419
45578
  return await EthereumProvider.init({
45420
45579
  ...parameters,
45421
45580
  disableProviderPing: true,
@@ -45751,7 +45910,291 @@ const createSkipExplorerLink = (transactionDetails) => {
45751
45910
  const initialTxChainId = (_b = transactionDetails == null ? void 0 : transactionDetails[0]) == null ? void 0 : _b.chainId;
45752
45911
  return `https://explorer.skip.build/?tx_hash=${txHashCommaSeperatedList}&chain_id=${initialTxChainId}${isTestnet ? "&is_testnet=true" : ""}`;
45753
45912
  };
45913
+ const skipAllBalancesRequestAtom = atom$1(void 0);
45914
+ const skipAllBalancesAtom = atomWithQuery((get) => {
45915
+ const params = get(skipAllBalancesRequestAtom);
45916
+ const isInvertingSwap = get(isInvertingSwapAtom);
45917
+ const enabled = params && !isInvertingSwap;
45918
+ return {
45919
+ queryKey: ["skipBalances", params],
45920
+ queryFn: async () => {
45921
+ if (!params) {
45922
+ return { chains: {} };
45923
+ }
45924
+ if (Object.keys((params == null ? void 0 : params.chains) ?? {}).length === 0) {
45925
+ return { chains: {} };
45926
+ }
45927
+ const res = await balances({ ...params, abortDuplicateRequests: true });
45928
+ if (res === void 0) {
45929
+ return { chains: {} };
45930
+ }
45931
+ if (res.chains === void 0) {
45932
+ return { chains: {} };
45933
+ }
45934
+ return res;
45935
+ },
45936
+ enabled,
45937
+ refetchInterval: 1e3 * 60,
45938
+ retry: 1,
45939
+ gcTime: 0,
45940
+ placeholderData: (prevData) => prevData
45941
+ };
45942
+ });
45943
+ const GAS_ON_RECEIVE_AMOUNT_USD = {
45944
+ [ChainType.Cosmos]: 0.1,
45945
+ evm_l2: 2
45946
+ };
45947
+ const gasOnReceiveAtom = atom$1(void 0);
45948
+ const gasOnReceiveAmountAtom = atom$1(void 0);
45949
+ const gasOnReceiveRouteRequestAtom = atom$1((get) => {
45950
+ var _a, _b, _c, _d, _e2, _f;
45951
+ const balances2 = get(skipAllBalancesAtom);
45952
+ const chains2 = get(skipChainsAtom);
45953
+ const sourceAsset = get(sourceAssetAtom);
45954
+ const destinationAsset = get(destinationAssetAtom);
45955
+ const _amount = get(gasOnReceiveAmountAtom);
45956
+ if (!sourceAsset || !destinationAsset) return;
45957
+ const destinationChain = (_a = chains2.data) == null ? void 0 : _a.find((c) => c.chainId === (destinationAsset == null ? void 0 : destinationAsset.chainId));
45958
+ const amountUsd = (() => {
45959
+ if (_amount !== void 0) {
45960
+ const parsedAmount = Number(_amount);
45961
+ if (!isNaN(parsedAmount)) return parsedAmount;
45962
+ }
45963
+ if ((destinationChain == null ? void 0 : destinationChain.chainType) === ChainType.Evm) {
45964
+ return GAS_ON_RECEIVE_AMOUNT_USD.evm_l2;
45965
+ }
45966
+ return GAS_ON_RECEIVE_AMOUNT_USD[ChainType.Cosmos];
45967
+ })();
45968
+ const destinationFeeAssets = (() => {
45969
+ var _a2;
45970
+ if ((destinationChain == null ? void 0 : destinationChain.chainType) === ChainType.Evm) {
45971
+ const assets2 = get(skipAssetsAtom);
45972
+ const evmFeeAsset = (_a2 = assets2.data) == null ? void 0 : _a2.find(
45973
+ (asset) => asset.chain_key === (destinationChain == null ? void 0 : destinationChain.chainId) && asset.denom.includes("-native")
45974
+ );
45975
+ if (evmFeeAsset) {
45976
+ return [{ amountOut: void 0, denom: evmFeeAsset.denom }];
45977
+ }
45978
+ }
45979
+ return destinationChain == null ? void 0 : destinationChain.feeAssets.map((asset) => {
45980
+ var _a3, _b2, _c2;
45981
+ const gasPrice = ((_a3 = asset.gasPrice) == null ? void 0 : _a3.average) ?? ((_b2 = asset.gasPrice) == null ? void 0 : _b2.high) ?? ((_c2 = asset.gasPrice) == null ? void 0 : _c2.low);
45982
+ return {
45983
+ amountOut: gasPrice && convertHumanReadableAmountToCryptoAmount(
45984
+ BigNumber(gasPrice).multipliedBy(3).toNumber(),
45985
+ destinationAsset == null ? void 0 : destinationAsset.decimals
45986
+ ),
45987
+ denom: asset.denom
45988
+ };
45989
+ });
45990
+ })();
45991
+ if (!(sourceAsset == null ? void 0 : sourceAsset.chainId) || !sourceAsset.denom || !destinationFeeAssets) return;
45992
+ const sourceAssetUsdPrice = (_f = (_e2 = (_d = (_c = (_b = balances2 == null ? void 0 : balances2.data) == null ? void 0 : _b.chains) == null ? void 0 : _c[sourceAsset == null ? void 0 : sourceAsset.chainId]) == null ? void 0 : _d.denoms) == null ? void 0 : _e2[sourceAsset == null ? void 0 : sourceAsset.denom]) == null ? void 0 : _f.price;
45993
+ if (!sourceAssetUsdPrice) return;
45994
+ const amount = BigNumber(sourceAssetUsdPrice).multipliedBy(amountUsd).toString();
45995
+ return {
45996
+ amountIn: convertHumanReadableAmountToCryptoAmount(amount, destinationAsset == null ? void 0 : destinationAsset.decimals),
45997
+ sourceAssetChainId: sourceAsset.chainId,
45998
+ sourceAssetDenom: sourceAsset.denom,
45999
+ destAssetChainId: destinationAsset == null ? void 0 : destinationAsset.chainId,
46000
+ destAssetDenoms: destinationFeeAssets
46001
+ };
46002
+ });
46003
+ const isSomeDestinationFeeBalanceAvailableAtom = atomWithQuery((get) => {
46004
+ const chainAddresses = get(chainAddressesAtom);
46005
+ const chainAddressesArray = Object.values(chainAddresses);
46006
+ const destination = chainAddressesArray == null ? void 0 : chainAddressesArray[chainAddressesArray.length - 1];
46007
+ const destinationAddress = destination == null ? void 0 : destination.address;
46008
+ const gasOnReceiveRouteParams = get(gasOnReceiveRouteRequestAtom);
46009
+ const queryEnabled = !!destinationAddress && !!gasOnReceiveRouteParams;
46010
+ return {
46011
+ enabled: queryEnabled,
46012
+ retry: false,
46013
+ refetchOnReconnect: false,
46014
+ refetchOnWindowFocus: false,
46015
+ refetchInterval: false,
46016
+ queryKey: ["destinationBalances", { destination, gasOnReceiveRouteParams }],
46017
+ queryFn: async () => {
46018
+ if (!gasOnReceiveRouteParams) return false;
46019
+ const balanceResponse = await balances({
46020
+ chains: {
46021
+ [destination.chainId]: {
46022
+ address: destinationAddress
46023
+ }
46024
+ }
46025
+ });
46026
+ const isSomeBalanceAvailable = gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.destAssetDenoms.some(
46027
+ ({ denom, amountOut }) => {
46028
+ var _a, _b, _c, _d;
46029
+ const balanceAmount = (_d = (_c = (_b = (_a = balanceResponse == null ? void 0 : balanceResponse.chains) == null ? void 0 : _a[destination.chainId]) == null ? void 0 : _b.denoms) == null ? void 0 : _c[denom]) == null ? void 0 : _d.amount;
46030
+ const isMoreThanAmountOut = !!balanceAmount && !!amountOut && BigNumber(balanceAmount).isGreaterThanOrEqualTo(amountOut);
46031
+ return amountOut ? isMoreThanAmountOut : balanceAmount && balanceAmount !== "0";
46032
+ }
46033
+ );
46034
+ if (!isSomeBalanceAvailable) {
46035
+ track("gas on receive: no destination balance");
46036
+ }
46037
+ return isSomeBalanceAvailable;
46038
+ }
46039
+ };
46040
+ });
46041
+ const gasOnReceiveAtomEffect = atomEffect((get, set) => {
46042
+ var _a;
46043
+ const gorRoute = get(gasOnReceiveRouteAtom);
46044
+ const isSomeDestinationFeeBalanceAvailable = get(isSomeDestinationFeeBalanceAvailableAtom);
46045
+ const currentTransactionItem = get(currentTransactionAtom);
46046
+ if (gorRoute.isLoading || isSomeDestinationFeeBalanceAvailable.isLoading) return;
46047
+ if (currentTransactionItem) return;
46048
+ if (!((_a = gorRoute.data) == null ? void 0 : _a.gasOnReceiveAsset)) return;
46049
+ if (isSomeDestinationFeeBalanceAvailable.data) {
46050
+ set(gasOnReceiveAtom, (prev2) => prev2 ?? false);
46051
+ } else {
46052
+ set(gasOnReceiveAtom, (prev2) => prev2 ?? true);
46053
+ }
46054
+ });
46055
+ const gasOnReceiveRouteAtom = atomWithQuery((get) => {
46056
+ const { data: chains2 } = get(skipChainsAtom);
46057
+ const { data: originalRoute } = get(skipRouteAtom);
46058
+ const params = get(skipRouteRequestAtom);
46059
+ const currentPage = get(currentPageAtom);
46060
+ const destinationAsset = get(destinationAssetAtom);
46061
+ const routeConfig = get(routeConfigAtom);
46062
+ const swapSettings = get(swapSettingsAtom);
46063
+ const gasOnReceiveRouteParams = get(gasOnReceiveRouteRequestAtom);
46064
+ const currentTransactionItem = get(currentTransactionAtom);
46065
+ const destinationAssetIsAFeeAsset = gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.destAssetDenoms.map((i) => i.denom).includes((destinationAsset == null ? void 0 : destinationAsset.denom) ?? "");
46066
+ const chainAddresses = get(chainAddressesAtom);
46067
+ const chainAddressesArray = Object.values(chainAddresses);
46068
+ const destination = chainAddressesArray == null ? void 0 : chainAddressesArray[chainAddressesArray.length - 1];
46069
+ const destinationAddress = destination == null ? void 0 : destination.address;
46070
+ const enabledDestinationChainType = [ChainType.Cosmos, ChainType.Evm];
46071
+ const disabledChainIds = ["1", "solana"];
46072
+ const chain = chains2 == null ? void 0 : chains2.find((i) => i.chainId === (destination == null ? void 0 : destination.chainId));
46073
+ const isRouteEnabled = (() => {
46074
+ if (!chain) return false;
46075
+ if (!enabledDestinationChainType.includes(chain.chainType)) return false;
46076
+ if (disabledChainIds.includes(chain.chainId)) return false;
46077
+ return true;
46078
+ })();
46079
+ const queryEnabled = originalRoute && currentPage === Routes.SwapExecutionPage && !destinationAssetIsAFeeAsset && !!destinationAddress && isRouteEnabled && !currentTransactionItem;
46080
+ return {
46081
+ enabled: queryEnabled,
46082
+ queryKey: [
46083
+ "gasOnReceiveRoute",
46084
+ {
46085
+ originalRoute: {
46086
+ usdAmountOut: originalRoute == null ? void 0 : originalRoute.usdAmountOut
46087
+ },
46088
+ params,
46089
+ destinationAddress,
46090
+ sourceAssetChainId: gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.sourceAssetChainId,
46091
+ sourceAssetDenom: gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.sourceAssetDenom,
46092
+ destAssetChainId: gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.destAssetChainId,
46093
+ destAssetDenoms: gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.destAssetDenoms
46094
+ }
46095
+ ],
46096
+ retry: false,
46097
+ refetchInterval: false,
46098
+ queryFn: async () => {
46099
+ if (!params) throw new Error("No route request provided");
46100
+ let feeRoute;
46101
+ if (destinationAssetIsAFeeAsset || !(gasOnReceiveRouteParams == null ? void 0 : gasOnReceiveRouteParams.destAssetDenoms) || gasOnReceiveRouteParams.destAssetDenoms.length === 0) {
46102
+ return null;
46103
+ }
46104
+ const {
46105
+ destAssetDenoms,
46106
+ amountIn: amountInFallback,
46107
+ ...restParams
46108
+ } = gasOnReceiveRouteParams;
46109
+ const splitDenoms = chunkArray(destAssetDenoms);
46110
+ for (const chunk of splitDenoms) {
46111
+ const feeAssetRoutes = chunk.map(async ({ amountOut, denom }) => {
46112
+ try {
46113
+ const res = await route({
46114
+ destAssetDenom: denom,
46115
+ amountIn: amountOut ? void 0 : amountInFallback,
46116
+ amountOut: amountOut ?? void 0,
46117
+ ...restParams,
46118
+ smartRelay: true,
46119
+ ...routeConfig,
46120
+ goFast: swapSettings.routePreference === RoutePreference.FASTEST,
46121
+ allowMultiTx: false,
46122
+ abortDuplicateRequests: true
46123
+ });
46124
+ return res;
46125
+ } catch (_e2) {
46126
+ return null;
46127
+ }
46128
+ });
46129
+ const result = await Promise.all(feeAssetRoutes);
46130
+ const _feeRoute = result.find((result2) => result2 == null ? void 0 : result2.usdAmountOut);
46131
+ if (_feeRoute == null ? void 0 : _feeRoute.usdAmountOut) {
46132
+ feeRoute = _feeRoute;
46133
+ break;
46134
+ }
46135
+ }
46136
+ if (!(feeRoute == null ? void 0 : feeRoute.amountOut) || !originalRoute) return null;
46137
+ params.amountIn = BigNumber(originalRoute.amountIn ?? 0).minus(BigNumber((feeRoute == null ? void 0 : feeRoute.amountIn) ?? 0)).toString();
46138
+ params.amountOut = void 0;
46139
+ const mainRoute = await route({
46140
+ ...params,
46141
+ smartRelay: true,
46142
+ ...routeConfig,
46143
+ goFast: swapSettings.routePreference === RoutePreference.FASTEST,
46144
+ abortDuplicateRequests: true
46145
+ });
46146
+ if (!mainRoute) return null;
46147
+ return {
46148
+ mainRoute,
46149
+ feeRoute,
46150
+ gasOnReceiveAsset: {
46151
+ amountOut: feeRoute.amountOut,
46152
+ amountUsd: feeRoute.usdAmountOut,
46153
+ denom: feeRoute.destAssetDenom,
46154
+ chainId: feeRoute.destAssetChainId
46155
+ }
46156
+ };
46157
+ }
46158
+ };
46159
+ });
46160
+ const chunkArray = (arr, size2 = 3) => {
46161
+ const result = [];
46162
+ for (let i = 0; i < arr.length; i += size2) {
46163
+ result.push(arr.slice(i, i + size2));
46164
+ }
46165
+ return result;
46166
+ };
45754
46167
  const chainAddressesAtom = atom$1({});
46168
+ const feeRouteChainAddressesAtom = atom$1({});
46169
+ const feeRouteAddressesAtomEffect = atomEffect((get, set) => {
46170
+ var _a;
46171
+ const isEnabled = get(gasOnReceiveAtom);
46172
+ const gasRoute = get(gasOnReceiveRouteAtom);
46173
+ const _chainAddresses = get(chainAddressesAtom);
46174
+ const chainAddresses = Object.values(_chainAddresses);
46175
+ const { data: chains2 } = get(skipChainsAtom);
46176
+ if (isEnabled && ((_a = gasRoute.data) == null ? void 0 : _a.feeRoute)) {
46177
+ gasRoute.data.feeRoute.requiredChainAddresses.forEach((chainId, i) => {
46178
+ const chain = chains2 == null ? void 0 : chains2.find((c) => c.chainId === chainId);
46179
+ const findAddress = chainAddresses.find((address) => address.chainId === chainId);
46180
+ if (findAddress) {
46181
+ set(feeRouteChainAddressesAtom, (prev2) => ({
46182
+ ...prev2,
46183
+ [i]: findAddress
46184
+ }));
46185
+ } else {
46186
+ set(feeRouteChainAddressesAtom, (prev2) => ({
46187
+ ...prev2,
46188
+ [i]: {
46189
+ chainId,
46190
+ address: void 0,
46191
+ chainType: chain == null ? void 0 : chain.chainType
46192
+ }
46193
+ }));
46194
+ }
46195
+ });
46196
+ }
46197
+ });
45755
46198
  const swapExecutionStateAtom = atomWithStorageNoCrossTabSync(
45756
46199
  LOCAL_STORAGE_KEYS.swapExecutionState,
45757
46200
  {
@@ -45767,6 +46210,31 @@ const setCurrentTransactionIdAtom = atom$1(null, (_get, set, transactionId) => {
45767
46210
  currentTransactionId: transactionId
45768
46211
  }));
45769
46212
  });
46213
+ const gasRouteEffect = atomEffect((get, set) => {
46214
+ const { data: originalRoute } = get(skipRouteAtom);
46215
+ const { data: gorRoute } = get(gasOnReceiveRouteAtom);
46216
+ const isGorEnabled = get(gasOnReceiveAtom);
46217
+ const currentTransaction = get(currentTransactionAtom);
46218
+ if (currentTransaction) return;
46219
+ set(swapExecutionStateAtom, (prev2) => {
46220
+ var _a;
46221
+ return {
46222
+ ...prev2,
46223
+ mainRoute: gorRoute == null ? void 0 : gorRoute.mainRoute,
46224
+ feeRoute: gorRoute == null ? void 0 : gorRoute.feeRoute,
46225
+ isFeeRouteEnabled: isGorEnabled,
46226
+ ...isGorEnabled && (gorRoute == null ? void 0 : gorRoute.mainRoute) ? {
46227
+ route: gorRoute.mainRoute,
46228
+ clientOperations: getClientOperations(gorRoute.mainRoute.operations)
46229
+ } : {
46230
+ route: originalRoute ?? prev2.originalRoute,
46231
+ clientOperations: getClientOperations(
46232
+ (originalRoute == null ? void 0 : originalRoute.operations) ?? ((_a = prev2.originalRoute) == null ? void 0 : _a.operations)
46233
+ )
46234
+ }
46235
+ };
46236
+ });
46237
+ });
45770
46238
  const setSwapExecutionStateAtom = atom$1(null, (get, set) => {
45771
46239
  var _a;
45772
46240
  const { data: route2 } = get(skipRouteAtom);
@@ -45789,16 +46257,26 @@ const setSwapExecutionStateAtom = atom$1(null, (get, set) => {
45789
46257
  address: ""
45790
46258
  };
45791
46259
  });
46260
+ set(gasOnReceiveAtom, void 0);
45792
46261
  set(chainAddressesAtom, initialChainAddresses);
45793
46262
  set(swapExecutionStateAtom, {
45794
46263
  userAddresses: [],
45795
- transactionDetailsArray: [],
45796
46264
  route: route2,
46265
+ originalRoute: route2,
46266
+ feeRoute: void 0,
46267
+ mainRoute: void 0,
45797
46268
  clientOperations: getClientOperations(route2.operations),
45798
46269
  currentTransactionId: void 0
45799
46270
  });
45800
46271
  set(submitSwapExecutionCallbacksAtom, {
45801
46272
  onRouteStatusUpdated: async (routeStatus) => {
46273
+ var _a2;
46274
+ const failedFeeRoute = (_a2 = routeStatus == null ? void 0 : routeStatus.relatedRoutes) == null ? void 0 : _a2.find(
46275
+ (relatedRoute) => relatedRoute.status === "failed"
46276
+ );
46277
+ if (failedFeeRoute) {
46278
+ track("gas on receive: fee route failed", { feeRoute: failedFeeRoute });
46279
+ }
45802
46280
  set(setTransactionHistoryAtom, routeStatus);
45803
46281
  },
45804
46282
  onTransactionUpdated: (txInfo) => {
@@ -45911,7 +46389,7 @@ atom$1(
45911
46389
  }));
45912
46390
  }
45913
46391
  );
45914
- const chainAddressEffectAtom = atomEffect((get, set) => {
46392
+ const userAddressesEffectAtom = atomEffect((get, set) => {
45915
46393
  const chainAddresses = get(chainAddressesAtom);
45916
46394
  const addressesMatch = Object.values(chainAddresses).every(
45917
46395
  (chainAddress) => !!chainAddress.address
@@ -45928,18 +46406,36 @@ const chainAddressEffectAtom = atomEffect((get, set) => {
45928
46406
  userAddresses
45929
46407
  }));
45930
46408
  });
46409
+ const feeRouteUserAddressesEffectAtom = atomEffect((get, set) => {
46410
+ const chainAddresses = get(feeRouteChainAddressesAtom);
46411
+ const addressesMatch = Object.values(chainAddresses).every(
46412
+ (chainAddress) => !!chainAddress.address
46413
+ );
46414
+ if (!addressesMatch) return;
46415
+ const userAddresses = Object.values(chainAddresses).map((chainAddress) => {
46416
+ return {
46417
+ chainId: chainAddress.chainId,
46418
+ address: chainAddress.address
46419
+ };
46420
+ });
46421
+ set(swapExecutionStateAtom, (prev2) => ({
46422
+ ...prev2,
46423
+ feeRouteUserAddresses: userAddresses
46424
+ }));
46425
+ });
45931
46426
  const submitSwapExecutionCallbacksAtom = atom$1();
45932
46427
  const simulateTxAtom = atom$1();
45933
46428
  const batchSignTxsAtom = atom$1(true);
45934
46429
  const skipSubmitSwapExecutionAtom = atomWithMutation((get) => {
45935
46430
  var _a;
45936
- const { route: route2, userAddresses } = get(swapExecutionStateAtom);
46431
+ const { userAddresses, route: route2, mainRoute, feeRoute, isFeeRouteEnabled, feeRouteUserAddresses } = get(swapExecutionStateAtom);
45937
46432
  const submitSwapExecutionCallbacks = get(submitSwapExecutionCallbacksAtom);
45938
46433
  const simulateTx = get(simulateTxAtom);
45939
46434
  const batchSignTxs = get(batchSignTxsAtom);
45940
46435
  const swapSettings = get(swapSettingsAtom);
45941
46436
  const getSigners = get(getConnectedSignersAtom);
45942
46437
  const wallets = get(walletsAtom);
46438
+ const isDestinationFeeBalanceAvailable = get(isSomeDestinationFeeBalanceAvailableAtom);
45943
46439
  const { timeoutSeconds } = get(routeConfigAtom);
45944
46440
  const { data: chains2 } = get(skipChainsAtom);
45945
46441
  const sourceAsset = get(sourceAssetAtom);
@@ -45959,16 +46455,11 @@ const skipSubmitSwapExecutionAtom = atomWithMutation((get) => {
45959
46455
  gcTime: Infinity,
45960
46456
  mutationFn: async ({ getSvmSigner }) => {
45961
46457
  var _a2;
45962
- if (!route2) return;
45963
- if (!userAddresses.length) return;
45964
- try {
45965
- await executeRoute({
45966
- route: route2,
45967
- userAddresses,
46458
+ const createParams = (sourceChainId) => {
46459
+ return {
45968
46460
  timeoutSeconds,
45969
- slippageTolerancePercent: swapSettings.slippage.toString(),
45970
46461
  useUnlimitedApproval: swapSettings.useUnlimitedApproval,
45971
- simulate: simulateTx !== void 0 ? simulateTx : route2.sourceAssetChainId !== "984122",
46462
+ simulate: simulateTx !== void 0 ? simulateTx : sourceChainId !== "984122",
45972
46463
  batchSignTxs: batchSignTxs !== void 0 ? batchSignTxs : true,
45973
46464
  ...submitSwapExecutionCallbacks,
45974
46465
  getCosmosSigner: async (chainId) => {
@@ -46006,7 +46497,47 @@ const skipSubmitSwapExecutionAtom = atomWithMutation((get) => {
46006
46497
  }
46007
46498
  return adapter;
46008
46499
  }
46009
- });
46500
+ };
46501
+ };
46502
+ try {
46503
+ if (isFeeRouteEnabled && mainRoute && feeRoute) {
46504
+ if (!(feeRouteUserAddresses == null ? void 0 : feeRouteUserAddresses.length)) return;
46505
+ track("execute route", {
46506
+ gasOnReceive: true,
46507
+ isDestinationFeeBalanceAvailable: isDestinationFeeBalanceAvailable.data,
46508
+ mainRoute,
46509
+ feeRoute
46510
+ });
46511
+ await executeMultipleRoutes({
46512
+ route: {
46513
+ mainRoute,
46514
+ ...isFeeRouteEnabled ? { feeRoute } : {}
46515
+ },
46516
+ userAddresses: {
46517
+ mainRoute: userAddresses,
46518
+ ...isFeeRouteEnabled ? { feeRoute: feeRouteUserAddresses } : {}
46519
+ },
46520
+ slippageTolerancePercent: {
46521
+ mainRoute: swapSettings.slippage.toString(),
46522
+ ...isFeeRouteEnabled ? { feeRoute: "10" } : {}
46523
+ },
46524
+ ...createParams(mainRoute.sourceAssetChainId)
46525
+ });
46526
+ } else {
46527
+ if (!route2) return;
46528
+ if (!userAddresses.length) return;
46529
+ track("execute route", {
46530
+ gasOnReceive: false,
46531
+ isDestinationFeeBalanceAvailable: isDestinationFeeBalanceAvailable.data,
46532
+ mainRoute: route2
46533
+ });
46534
+ await executeRoute({
46535
+ route: route2,
46536
+ userAddresses,
46537
+ slippageTolerancePercent: swapSettings.slippage.toString(),
46538
+ ...createParams(route2.sourceAssetChainId)
46539
+ });
46540
+ }
46010
46541
  } catch (error) {
46011
46542
  console.error(error);
46012
46543
  const currentTransaction = get(currentTransactionAtom);
@@ -46537,13 +47068,12 @@ const ModalRowItem = ({
46537
47068
  rightContent,
46538
47069
  onClick,
46539
47070
  style,
46540
- eureka,
46541
- as = "button"
47071
+ eureka
46542
47072
  }) => {
46543
47073
  return /* @__PURE__ */ jsxs(
46544
47074
  StyledModalRowItemContainer,
46545
47075
  {
46546
- as,
47076
+ as: "button",
46547
47077
  align: "center",
46548
47078
  justify: "space-between",
46549
47079
  onClick,
@@ -46557,29 +47087,16 @@ const ModalRowItem = ({
46557
47087
  }
46558
47088
  );
46559
47089
  };
46560
- const StyledModalRowItemContainer = dt(Row).attrs(
46561
- ({ onClick, as }) => ({
46562
- ...as === "div" && !!onClick && {
46563
- role: "button",
46564
- tabIndex: 0,
46565
- onKeyDown: (e) => {
46566
- if (e.key === "Enter") {
46567
- e.preventDefault();
46568
- onClick();
46569
- }
46570
- }
46571
- }
46572
- })
46573
- )`
47090
+ const StyledModalRowItemContainer = dt(Row)`
46574
47091
  ${removeButtonStyles};
46575
47092
  position: relative;
46576
- width: ${({ as }) => as === "div" ? "-webkit-fill-available" : "100%"};
46577
47093
  height: 60px;
46578
47094
  border-radius: ${({ theme }) => {
46579
47095
  var _a;
46580
47096
  return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.rowItem);
46581
47097
  }};
46582
- padding: ${({ as }) => as === "div" ? "0 15px" : "12px 15px"};
47098
+ width: 100%;
47099
+ padding: 12px 15px;
46583
47100
  margin-top: 5px;
46584
47101
 
46585
47102
  z-index: 0;
@@ -46811,29 +47328,6 @@ const useCopyAddress = () => {
46811
47328
  isShowingCopyAddressFeedback
46812
47329
  };
46813
47330
  };
46814
- const skipAllBalancesRequestAtom = atom$1(void 0);
46815
- const skipAllBalancesAtom = atomWithQuery((get) => {
46816
- const params = get(skipAllBalancesRequestAtom);
46817
- const isInvertingSwap = get(isInvertingSwapAtom);
46818
- const enabled = params && !isInvertingSwap;
46819
- return {
46820
- queryKey: ["skipBalances", params],
46821
- queryFn: async () => {
46822
- if (!params) {
46823
- return { chains: {} };
46824
- }
46825
- if (Object.keys((params == null ? void 0 : params.chains) ?? {}).length === 0) {
46826
- return { chains: {} };
46827
- }
46828
- return balances({ ...params, abortDuplicateRequests: true });
46829
- },
46830
- enabled,
46831
- refetchInterval: 1e3 * 60,
46832
- retry: 1,
46833
- gcTime: 0,
46834
- placeholderData: (prevData) => prevData
46835
- };
46836
- });
46837
47331
  const useGetBalance = () => {
46838
47332
  const { data: skipBalances } = useAtomValue(skipAllBalancesAtom);
46839
47333
  const getBalance = useCallback(
@@ -47061,10 +47555,17 @@ const SwapExecutionPageRouteDetailedRow = ({
47061
47555
  const selectedChainAddress = context === "destination" ? lastChainAddress : firstChainAddressFoundForChainId;
47062
47556
  return {
47063
47557
  address: selectedChainAddress == null ? void 0 : selectedChainAddress.address,
47064
- image: (selectedChainAddress == null ? void 0 : selectedChainAddress.source) === "wallet" && ((_a2 = selectedChainAddress == null ? void 0 : selectedChainAddress.wallet) == null ? void 0 : _a2.walletInfo.logo) || void 0
47558
+ image: (selectedChainAddress == null ? void 0 : selectedChainAddress.source) === "wallet" && ((_a2 = selectedChainAddress == null ? void 0 : selectedChainAddress.wallet) == null ? void 0 : _a2.walletInfo.logo) || void 0,
47559
+ source: selectedChainAddress == null ? void 0 : selectedChainAddress.source
47065
47560
  };
47066
47561
  }, [chainAddresses, chainId, context]);
47067
47562
  const walletImage = useCroppedImage(chainAddressWallet.image);
47563
+ const renderWalletImage = useMemo(() => {
47564
+ if ((chainAddressWallet == null ? void 0 : chainAddressWallet.source) === "injected" || (chainAddressWallet == null ? void 0 : chainAddressWallet.source) === "input") return;
47565
+ if (!chainAddressWallet.address) return;
47566
+ if (walletImage) return /* @__PURE__ */ jsx("img", { height: "100%", src: walletImage });
47567
+ return /* @__PURE__ */ jsx(SkeletonElement, { height: 18, width: 18 });
47568
+ }, [chainAddressWallet.address, chainAddressWallet == null ? void 0 : chainAddressWallet.source, walletImage]);
47068
47569
  const renderAddress = useMemo(() => {
47069
47570
  const Container2 = shouldRenderEditDestinationWallet ? ({ children }) => /* @__PURE__ */ jsx(Row, { gap: 5, children }) : o.Fragment;
47070
47571
  if (!chainAddressWallet.address) return;
@@ -47080,15 +47581,7 @@ const SwapExecutionPageRouteDetailedRow = ({
47080
47581
  };
47081
47582
  return /* @__PURE__ */ jsxs(Container2, { children: [
47082
47583
  /* @__PURE__ */ jsxs(AddressPillButton, { onClick: () => copyAddress(chainAddressWallet == null ? void 0 : chainAddressWallet.address), children: [
47083
- walletImage ? /* @__PURE__ */ jsx(
47084
- "img",
47085
- {
47086
- src: walletImage,
47087
- style: {
47088
- height: "100%"
47089
- }
47090
- }
47091
- ) : /* @__PURE__ */ jsx(SkeletonElement, { height: 18, width: 18 }),
47584
+ renderWalletImage,
47092
47585
  renderContent()
47093
47586
  ] }),
47094
47587
  shouldRenderEditDestinationWallet && /* @__PURE__ */ jsx(
@@ -47104,7 +47597,7 @@ const SwapExecutionPageRouteDetailedRow = ({
47104
47597
  }, [
47105
47598
  shouldRenderEditDestinationWallet,
47106
47599
  chainAddressWallet.address,
47107
- walletImage,
47600
+ renderWalletImage,
47108
47601
  isMobileScreenSize,
47109
47602
  onClickEditDestinationWallet,
47110
47603
  theme.primary.text.lowContrast,
@@ -47148,7 +47641,7 @@ const SwapExecutionPageRouteDetailedRow = ({
47148
47641
  },
47149
47642
  justify: "space-between",
47150
47643
  children: /* @__PURE__ */ jsxs(Row, { align: "center", children: [
47151
- /* @__PURE__ */ jsxs(LeftContent, { children: [
47644
+ /* @__PURE__ */ jsxs(LeftContent, { gap: 5, children: [
47152
47645
  /* @__PURE__ */ jsxs(Row, { gap: 5, align: "center", children: [
47153
47646
  /* @__PURE__ */ jsx(StyledAssetAmount, { normalTextColor: true, title: assetDetails == null ? void 0 : assetDetails.amount, children: formatDisplayAmount(assetDetails == null ? void 0 : assetDetails.amount) }),
47154
47647
  /* @__PURE__ */ jsx(StyledSymbol, { normalTextColor: true, children: assetDetails == null ? void 0 : assetDetails.symbol }),
@@ -48249,7 +48742,6 @@ const ConnectEcoRow = ({
48249
48742
  return /* @__PURE__ */ jsx(
48250
48743
  ModalRowItem,
48251
48744
  {
48252
- as: "div",
48253
48745
  style: { marginTop: ITEM_GAP$1, minHeight: `${ITEM_HEIGHT$2}px` },
48254
48746
  onClick: handleConnectClick,
48255
48747
  leftContent: account ? /* @__PURE__ */ jsxs(Row, { align: "center", gap: 10, children: [
@@ -48286,7 +48778,7 @@ const ConnectEcoRow = ({
48286
48778
  ),
48287
48779
  /* @__PURE__ */ jsx(ChainIndicator, { chainId: accountchainId })
48288
48780
  ] })
48289
- ] }) : /* @__PURE__ */ jsxs(TextButton, { children: [
48781
+ ] }) : /* @__PURE__ */ jsxs(Text, { children: [
48290
48782
  "Connect to",
48291
48783
  " ",
48292
48784
  chainType === ChainType.Cosmos ? "Cosmos" : chainType === ChainType.Evm ? "Ethereum" : "Solana"
@@ -48528,6 +49020,16 @@ const QuestionMarkIcon = ({
48528
49020
  )
48529
49021
  }
48530
49022
  );
49023
+ const QuestionMarkTooltip = ({ content }) => {
49024
+ return /* @__PURE__ */ jsx(Tooltip, { content, children: /* @__PURE__ */ jsx(StyledQuestionMarkIcon, {}) });
49025
+ };
49026
+ const StyledQuestionMarkIcon = dt(QuestionMarkIcon)`
49027
+ color: ${({ theme }) => theme.primary.text.ultraLowContrast};
49028
+ &:hover {
49029
+ color: ${({ theme }) => theme.primary.text.normal};
49030
+ }
49031
+ transition: color 0.2s ease;
49032
+ `;
48531
49033
  const SlippageSelector = () => {
48532
49034
  const [isInputFocused, setIsInputFocused] = useState(false);
48533
49035
  const [customSlippageInput, setCustomSlippageInput] = useState("");
@@ -48543,10 +49045,9 @@ const SlippageSelector = () => {
48543
49045
  "Max Slippage",
48544
49046
  /* @__PURE__ */ jsx(Spacer, { width: 5 }),
48545
49047
  /* @__PURE__ */ jsx(
48546
- Tooltip,
49048
+ QuestionMarkTooltip,
48547
49049
  {
48548
- content: /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, style: { width: 250 }, children: "If price changes unfavorably during the transaction by more than this amount, the transaction will revert." }),
48549
- children: /* @__PURE__ */ jsx(QuestionMarkIcon, {})
49050
+ content: /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, style: { width: 250 }, children: "If price changes unfavorably during the transaction by more than this amount, the transaction will revert." })
48550
49051
  }
48551
49052
  )
48552
49053
  ] }),
@@ -48699,10 +49200,9 @@ const RoutePreferenceSelector = () => {
48699
49200
  "Route Preference",
48700
49201
  /* @__PURE__ */ jsx(Spacer, { width: 5 }),
48701
49202
  /* @__PURE__ */ jsx(
48702
- Tooltip,
49203
+ QuestionMarkTooltip,
48703
49204
  {
48704
- content: /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, style: { width: 250 }, children: "Choose if faster or cheaper routes should be prioritized. Fast routes require a $50 minimum from Ethereum and may not be available if there is insufficient liquidity for an asset." }),
48705
- children: /* @__PURE__ */ jsx(QuestionMarkIcon, {})
49205
+ content: /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, style: { width: 250 }, children: "Choose if faster or cheaper routes should be prioritized. Fast routes require a $50 minimum from Ethereum and may not be available if there is insufficient liquidity for an asset." })
48706
49206
  }
48707
49207
  )
48708
49208
  ] }),
@@ -49428,7 +49928,7 @@ const SwapPageAssetChainInput = ({
49428
49928
  "%"
49429
49929
  ] })
49430
49930
  ] }) : /* @__PURE__ */ jsx(SmallText, { children: usdValue && formatUSD(usdValue) }),
49431
- usdValue && feeLabel && /* @__PURE__ */ jsx(Row, { align: "center", gap: 4, children: /* @__PURE__ */ jsx(SmallText, { color: feeColor, children: feeLabel }) })
49931
+ usdValue && feeLabel && /* @__PURE__ */ jsx(Row, { style: { color: feeColor }, align: "center", gap: 4, children: typeof feeLabel === "string" ? /* @__PURE__ */ jsx(SmallText, { children: feeLabel }) : feeLabel })
49432
49932
  ] }),
49433
49933
  (assetDetails == null ? void 0 : assetDetails.chainName) ? /* @__PURE__ */ jsx(
49434
49934
  StyledOnChainGhostButton,
@@ -49872,9 +50372,9 @@ var WalletSource = /* @__PURE__ */ ((WalletSource2) => {
49872
50372
  const SetAddressModal = createModal((modalProps) => {
49873
50373
  var _a, _b, _c;
49874
50374
  const isMobileScreenSize = useIsMobileScreenSize();
49875
- const { chainId, chainAddressIndex } = modalProps;
49876
- const { route: route2 } = useAtomValue(swapExecutionStateAtom);
49877
- const requiredChainAddresses = route2 == null ? void 0 : route2.requiredChainAddresses;
50375
+ const { chainId, chainAddressIndex, isFeeRoute } = modalProps;
50376
+ const { route: route2, feeRoute } = useAtomValue(swapExecutionStateAtom);
50377
+ const requiredChainAddresses = isFeeRoute ? feeRoute == null ? void 0 : feeRoute.requiredChainAddresses : route2 == null ? void 0 : route2.requiredChainAddresses;
49878
50378
  if (modalProps.chainAddressIndex === void 0) {
49879
50379
  throw new Error("chain address index cannot be undefined");
49880
50380
  }
@@ -49886,7 +50386,10 @@ const SetAddressModal = createModal((modalProps) => {
49886
50386
  const [showManualAddressInput, setShowManualAddressInput] = useState(false);
49887
50387
  const [manualWalletAddress, setManualWalletAddress] = useState("");
49888
50388
  const _walletList = useWalletList({ chainId, destinationWalletList: true });
49889
- const [chainAddresses, setChainAddresses] = useAtom(chainAddressesAtom);
50389
+ const [_chainAddresses, _setChainAddresses] = useAtom(chainAddressesAtom);
50390
+ const [feeRouteChainAddresses, setFeeRouteChainAddresses] = useAtom(feeRouteChainAddressesAtom);
50391
+ const chainAddresses = isFeeRoute ? feeRouteChainAddresses : _chainAddresses;
50392
+ const setChainAddresses = isFeeRoute ? setFeeRouteChainAddresses : _setChainAddresses;
49890
50393
  const showWithdrawalWarning = new Set(Object.values(chainAddresses).map(({ chainId: chainId2 }) => chainId2)).size > 1;
49891
50394
  const mobile = isMobile();
49892
50395
  const manualWalletEntry = {
@@ -50556,6 +51059,20 @@ const SwapExecutionPageRouteSimpleRow = ({
50556
51059
  });
50557
51060
  const groupedAssets = useGroupedAssetByRecommendedSymbol();
50558
51061
  const groupedAsset = groupedAssets == null ? void 0 : groupedAssets.find((i) => i.id === (assetDetails == null ? void 0 : assetDetails.symbol));
51062
+ const { feeRoute } = useAtomValue(swapExecutionStateAtom);
51063
+ const isGorEnabled = useAtomValue(gasOnReceiveAtom);
51064
+ const { data: assets2 } = useAtomValue(skipAssetsAtom);
51065
+ const gasOnReceiveAsset = useMemo(() => {
51066
+ const gasAsset = {
51067
+ chainId: feeRoute == null ? void 0 : feeRoute.destAssetChainId,
51068
+ denom: feeRoute == null ? void 0 : feeRoute.destAssetDenom
51069
+ };
51070
+ if (!gasAsset) return;
51071
+ const asset = assets2 == null ? void 0 : assets2.find(
51072
+ (a) => a.chainId === (gasAsset == null ? void 0 : gasAsset.chainId) && a.denom === (gasAsset == null ? void 0 : gasAsset.denom)
51073
+ );
51074
+ return asset;
51075
+ }, [assets2, feeRoute == null ? void 0 : feeRoute.destAssetChainId, feeRoute == null ? void 0 : feeRoute.destAssetDenom]);
50559
51076
  const chainAddresses = useAtomValue(chainAddressesAtom);
50560
51077
  const source = useMemo(() => {
50561
51078
  var _a, _b;
@@ -50581,11 +51098,21 @@ const SwapExecutionPageRouteSimpleRow = ({
50581
51098
  }, [chainAddresses, context]);
50582
51099
  const walletImage = useCroppedImage(source.image);
50583
51100
  const renderWalletImage = useMemo(() => {
50584
- if (source.source === "injected") return;
51101
+ if (source.source === "injected" || source.source === "input") return;
50585
51102
  if (!source.address) return;
50586
51103
  if (walletImage) return /* @__PURE__ */ jsx("img", { height: 12, width: 12, src: walletImage });
50587
51104
  return /* @__PURE__ */ jsx(SkeletonElement, { height: 12, width: 12 });
50588
51105
  }, [source.address, source.source, walletImage]);
51106
+ const renderGasRouteAmount = useMemo(() => {
51107
+ var _a;
51108
+ if (!isGorEnabled) return;
51109
+ if (context === "source") return;
51110
+ if (!gasOnReceiveAsset) return;
51111
+ const amountUsd = feeRoute == null ? void 0 : feeRoute.usdAmountOut;
51112
+ if (!amountUsd) return;
51113
+ const assetSymbol = ((_a = gasOnReceiveAsset == null ? void 0 : gasOnReceiveAsset.recommendedSymbol) == null ? void 0 : _a.toUpperCase()) ?? "";
51114
+ return `+ ${formatUSD(amountUsd)} in ${assetSymbol}`;
51115
+ }, [context, feeRoute == null ? void 0 : feeRoute.usdAmountOut, gasOnReceiveAsset, isGorEnabled]);
50589
51116
  const renderExplorerLink = useMemo(() => {
50590
51117
  if (!explorerLink) return;
50591
51118
  if (isMobileScreenSize) {
@@ -50618,7 +51145,11 @@ const SwapExecutionPageRouteSimpleRow = ({
50618
51145
  " ",
50619
51146
  assetDetails == null ? void 0 : assetDetails.symbol
50620
51147
  ] }),
50621
- usdValue && /* @__PURE__ */ jsx(SmallText, { children: formatUSD(usdValue) }),
51148
+ usdValue && /* @__PURE__ */ jsxs(SmallText, { children: [
51149
+ formatUSD(usdValue),
51150
+ " ",
51151
+ renderGasRouteAmount
51152
+ ] }),
50622
51153
  /* @__PURE__ */ jsxs(Row, { align: "center", height: 18, gap: 5, children: [
50623
51154
  /* @__PURE__ */ jsxs(StyledChainName, { normalTextColor: true, textWrap: "nowrap", children: [
50624
51155
  "on ",
@@ -50698,11 +51229,12 @@ const SwapExecutionPageRouteSimple = ({
50698
51229
  statusData,
50699
51230
  onClickEditDestinationWallet,
50700
51231
  swapExecutionState,
50701
- firstOperationStatus
51232
+ firstOperationStatus,
51233
+ bottomContent
50702
51234
  }) => {
50703
51235
  var _a, _b;
50704
51236
  const theme = nt();
50705
- const { route: route2 } = useAtomValue(swapExecutionStateAtom);
51237
+ const { route: route2, originalRoute } = useAtomValue(swapExecutionStateAtom);
50706
51238
  const firstOperation = operations[0];
50707
51239
  const lastOperation = operations[operations.length - 1];
50708
51240
  const status = statusData == null ? void 0 : statusData.transferEvents;
@@ -50718,10 +51250,10 @@ const SwapExecutionPageRouteSimple = ({
50718
51250
  }
50719
51251
  }, [firstOperationStatus, lastOperation.transferIndex, status, swapExecutionState]);
50720
51252
  const source = {
50721
- denom: firstOperation.denomIn,
50722
- tokenAmount: firstOperation.amountIn,
50723
- chainId: firstOperation.fromChainId ?? firstOperation.chainId,
50724
- usdValue: route2 == null ? void 0 : route2.usdAmountIn
51253
+ denom: originalRoute == null ? void 0 : originalRoute.sourceAssetDenom,
51254
+ tokenAmount: (originalRoute == null ? void 0 : originalRoute.amountIn) ?? "",
51255
+ chainId: originalRoute == null ? void 0 : originalRoute.sourceAssetChainId,
51256
+ usdValue: originalRoute == null ? void 0 : originalRoute.usdAmountIn
50725
51257
  };
50726
51258
  const destination = {
50727
51259
  denom: lastOperation.denomOut,
@@ -50752,7 +51284,8 @@ const SwapExecutionPageRouteSimple = ({
50752
51284
  explorerLink: destinationExplorerLink,
50753
51285
  context: "destination"
50754
51286
  }
50755
- )
51287
+ ),
51288
+ bottomContent
50756
51289
  ] });
50757
51290
  };
50758
51291
  const StyledBridgeArrowIcon = dt(BridgeArrowIcon)`
@@ -50761,11 +51294,6 @@ const StyledBridgeArrowIcon = dt(BridgeArrowIcon)`
50761
51294
  `;
50762
51295
  const StyledSwapExecutionPageRoute$1 = dt(Column)`
50763
51296
  padding: 30px;
50764
- background: ${({ theme }) => theme.primary.background.normal};
50765
- border-radius: ${({ theme }) => {
50766
- var _a;
50767
- return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.main);
50768
- }};
50769
51297
  min-height: 225px;
50770
51298
  `;
50771
51299
  const SwapExecutionBridgeIcon = ({
@@ -50892,13 +51420,14 @@ const SwapExecutionPageRouteDetailed = ({
50892
51420
  onClickEditDestinationWallet,
50893
51421
  swapExecutionState,
50894
51422
  firstOperationStatus,
50895
- secondOperationStatus
51423
+ secondOperationStatus,
51424
+ bottomContent
50896
51425
  }) => {
50897
51426
  var _a;
50898
51427
  const { data: swapVenues } = useAtomValue(skipSwapVenuesAtom);
50899
51428
  const { data: bridges2 } = useAtomValue(skipBridgesAtom);
51429
+ const { originalRoute } = useAtomValue(swapExecutionStateAtom);
50900
51430
  const isGasStationTx = useIsGasStationTx();
50901
- const firstOperation = operations[0];
50902
51431
  const status = statusData == null ? void 0 : statusData.transferEvents;
50903
51432
  const getBridgeSwapVenue = useCallback(
50904
51433
  (operation) => {
@@ -51004,22 +51533,25 @@ const SwapExecutionPageRouteDetailed = ({
51004
51533
  status,
51005
51534
  statusData
51006
51535
  ]);
51007
- return /* @__PURE__ */ jsx(StyledSwapExecutionPageRoute, { children: /* @__PURE__ */ jsxs(Column, { children: [
51008
- /* @__PURE__ */ jsx(
51009
- SwapExecutionPageRouteDetailedRow,
51010
- {
51011
- tokenAmount: firstOperation.amountIn,
51012
- denom: firstOperation.denomIn,
51013
- chainId: firstOperation.fromChainId,
51014
- explorerLink: (_a = status == null ? void 0 : status[0]) == null ? void 0 : _a.fromExplorerLink,
51015
- status: firstOperationStatus,
51016
- context: "source",
51017
- index: 0
51018
- }
51019
- ),
51020
- renderOperations,
51021
- isGasStationTx && /* @__PURE__ */ jsx(StyledGasStationTxText, { children: "Transactions from EVM to Babylon have gas provided automatically if no gas tokens are found." })
51022
- ] }) });
51536
+ return /* @__PURE__ */ jsxs(StyledSwapExecutionPageRoute, { children: [
51537
+ /* @__PURE__ */ jsxs(Column, { children: [
51538
+ /* @__PURE__ */ jsx(
51539
+ SwapExecutionPageRouteDetailedRow,
51540
+ {
51541
+ tokenAmount: (originalRoute == null ? void 0 : originalRoute.amountIn) ?? "",
51542
+ denom: originalRoute == null ? void 0 : originalRoute.sourceAssetDenom,
51543
+ chainId: originalRoute == null ? void 0 : originalRoute.sourceAssetChainId,
51544
+ explorerLink: (_a = status == null ? void 0 : status[0]) == null ? void 0 : _a.fromExplorerLink,
51545
+ status: firstOperationStatus,
51546
+ context: "source",
51547
+ index: 0
51548
+ }
51549
+ ),
51550
+ renderOperations,
51551
+ isGasStationTx && /* @__PURE__ */ jsx(StyledGasStationTxText, { children: "Transactions from EVM to Babylon have gas provided automatically if no gas tokens are found." })
51552
+ ] }),
51553
+ bottomContent
51554
+ ] });
51023
51555
  };
51024
51556
  const OperationTypeIconContainer = dt(Column).attrs({
51025
51557
  as: Column
@@ -51031,12 +51563,7 @@ const OperationTypeIconContainer = dt(Column).attrs({
51031
51563
  `;
51032
51564
  const StyledSwapExecutionPageRoute = dt(Column)`
51033
51565
  padding: 25px;
51034
- gap: 20px;
51035
- background: ${({ theme }) => theme.primary.background.normal};
51036
- border-radius: ${({ theme }) => {
51037
- var _a;
51038
- return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.main);
51039
- }};
51566
+ gap: 5px;
51040
51567
  min-height: 225px;
51041
51568
  `;
51042
51569
  const StyledSwapVenueOrBridgeImage = dt.img`
@@ -51065,6 +51592,50 @@ const StyledGasStationTxText = dt(SmallText)`
51065
51592
  padding: 12px;
51066
51593
  border-radius: 6px;
51067
51594
  `;
51595
+ const SwapExecutionPageRouteContainer = ({
51596
+ showDetailed,
51597
+ ...routeProps
51598
+ }) => {
51599
+ const simpleRef = useRef(null);
51600
+ const detailedRef = useRef(null);
51601
+ const [containerHeight, setContainerHeight] = useState(0);
51602
+ useEffect(() => {
51603
+ const updateHeight = () => {
51604
+ const activeRef = showDetailed ? detailedRef : simpleRef;
51605
+ if (activeRef.current) {
51606
+ const height = activeRef.current.scrollHeight;
51607
+ setContainerHeight(height);
51608
+ }
51609
+ };
51610
+ updateHeight();
51611
+ const timeoutId = setTimeout(updateHeight, 10);
51612
+ return () => clearTimeout(timeoutId);
51613
+ }, [showDetailed, routeProps.operations, routeProps.statusData, routeProps.bottomContent]);
51614
+ return /* @__PURE__ */ jsxs(StyledContainer$1, { style: { height: containerHeight }, children: [
51615
+ /* @__PURE__ */ jsx(StyledRouteWrapper, { ref: simpleRef, isVisible: !showDetailed, isActive: !showDetailed, children: /* @__PURE__ */ jsx(SwapExecutionPageRouteSimple, { ...routeProps }) }),
51616
+ /* @__PURE__ */ jsx(StyledRouteWrapper, { ref: detailedRef, isVisible: showDetailed, isActive: showDetailed, children: /* @__PURE__ */ jsx(SwapExecutionPageRouteDetailed, { ...routeProps }) })
51617
+ ] });
51618
+ };
51619
+ const StyledContainer$1 = dt.div`
51620
+ position: relative;
51621
+ overflow: hidden;
51622
+ transition: height 0.25s cubic-bezier(0.4, 0, 0.2, 1);
51623
+ min-height: 225px;
51624
+ background: ${({ theme }) => theme.primary.background.normal};
51625
+ border-radius: ${({ theme }) => {
51626
+ var _a;
51627
+ return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.main);
51628
+ }};
51629
+ `;
51630
+ const StyledRouteWrapper = dt.div`
51631
+ position: ${({ isActive: $isActive }) => $isActive ? "relative" : "absolute"};
51632
+ top: 0;
51633
+ left: 0;
51634
+ right: 0;
51635
+ opacity: ${({ isVisible: $isVisible }) => $isVisible ? 1 : 0};
51636
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
51637
+ pointer-events: ${({ isVisible: $isVisible }) => $isVisible ? "auto" : "none"};
51638
+ `;
51068
51639
  const useAutoSetAddress = () => {
51069
51640
  var _a, _b, _c;
51070
51641
  const [chainAddresses, setChainAddresses] = useAtom(chainAddressesAtom);
@@ -51080,7 +51651,7 @@ const useAutoSetAddress = () => {
51080
51651
  const { createCosmosWallets } = useCreateCosmosWallets();
51081
51652
  const { createEvmWallets } = useCreateEvmWallets();
51082
51653
  const { createSolanaWallets } = useCreateSolanaWallets();
51083
- useAtom(chainAddressEffectAtom);
51654
+ useAtom(userAddressesEffectAtom);
51084
51655
  const connectedAddress = useAtomValue(connectedAddressesAtom);
51085
51656
  const signRequiredChains = useMemo(() => {
51086
51657
  if (!(route2 == null ? void 0 : route2.operations)) return;
@@ -51283,10 +51854,15 @@ const useHandleTransactionTimeout = (swapExecutionState) => {
51283
51854
  };
51284
51855
  function useSwapExecutionState({
51285
51856
  chainAddresses,
51286
- route: route2,
51287
- isLoading
51857
+ requiredChainAddresses,
51858
+ isGettingAddressesLoading,
51859
+ isFetchingDestinationBalance,
51860
+ feeRouteChainAddresses,
51861
+ feeRouteRequiredChainAddresses,
51862
+ isGettingFeeRouteAddressesLoading
51288
51863
  }) {
51289
51864
  const currentTransaction = useAtomValue(currentTransactionAtom);
51865
+ const isFeeRouteEnabled = useAtomValue(gasOnReceiveAtom);
51290
51866
  const showSignaturesRemaining = useMemo(() => {
51291
51867
  if (!currentTransaction) return false;
51292
51868
  if ((currentTransaction == null ? void 0 : currentTransaction.txsRequired) >= 2 && (currentTransaction == null ? void 0 : currentTransaction.txsSigned) !== (currentTransaction == null ? void 0 : currentTransaction.txsRequired)) {
@@ -51296,9 +51872,11 @@ function useSwapExecutionState({
51296
51872
  }, [currentTransaction]);
51297
51873
  return useMemo(() => {
51298
51874
  var _a;
51299
- if (isLoading) return SwapExecutionState.pendingGettingAddresses;
51875
+ if (isFetchingDestinationBalance) return SwapExecutionState.pendingGettingDestinationBalance;
51876
+ if (isGettingAddressesLoading) return SwapExecutionState.pendingGettingAddresses;
51877
+ if (isFeeRouteEnabled && isGettingFeeRouteAddressesLoading)
51878
+ return SwapExecutionState.pendingGettingFeeRouteAddresses;
51300
51879
  if (!chainAddresses) return SwapExecutionState.destinationAddressUnset;
51301
- const requiredChainAddresses = route2 == null ? void 0 : route2.requiredChainAddresses;
51302
51880
  if (!requiredChainAddresses) return SwapExecutionState.destinationAddressUnset;
51303
51881
  const allAddressesSet = requiredChainAddresses.every(
51304
51882
  (_chainId, index) => {
@@ -51306,7 +51884,16 @@ function useSwapExecutionState({
51306
51884
  return (_a2 = chainAddresses[index]) == null ? void 0 : _a2.address;
51307
51885
  }
51308
51886
  );
51887
+ const feeRouteAllAddressesSet = feeRouteRequiredChainAddresses == null ? void 0 : feeRouteRequiredChainAddresses.every(
51888
+ (_chainId, index) => {
51889
+ var _a2;
51890
+ return (_a2 = feeRouteChainAddresses == null ? void 0 : feeRouteChainAddresses[index]) == null ? void 0 : _a2.address;
51891
+ }
51892
+ );
51309
51893
  const lastChainAddress = (_a = chainAddresses[requiredChainAddresses.length - 1]) == null ? void 0 : _a.address;
51894
+ if ((currentTransaction == null ? void 0 : currentTransaction.status) === "failed") {
51895
+ return SwapExecutionState.pendingError;
51896
+ }
51310
51897
  if ((currentTransaction == null ? void 0 : currentTransaction.status) === "completed") {
51311
51898
  return SwapExecutionState.confirmed;
51312
51899
  }
@@ -51331,12 +51918,20 @@ function useSwapExecutionState({
51331
51918
  if (!allAddressesSet) {
51332
51919
  return SwapExecutionState.recoveryAddressUnset;
51333
51920
  }
51921
+ if (isFeeRouteEnabled && feeRouteRequiredChainAddresses && !feeRouteAllAddressesSet) {
51922
+ return SwapExecutionState.feeRouteRecoveryAddressUnset;
51923
+ }
51334
51924
  return SwapExecutionState.ready;
51335
51925
  }, [
51336
- isLoading,
51926
+ isFetchingDestinationBalance,
51927
+ isGettingAddressesLoading,
51928
+ isFeeRouteEnabled,
51929
+ isGettingFeeRouteAddressesLoading,
51337
51930
  chainAddresses,
51338
- route2 == null ? void 0 : route2.requiredChainAddresses,
51931
+ requiredChainAddresses,
51932
+ feeRouteRequiredChainAddresses,
51339
51933
  currentTransaction == null ? void 0 : currentTransaction.status,
51934
+ feeRouteChainAddresses,
51340
51935
  showSignaturesRemaining
51341
51936
  ]);
51342
51937
  }
@@ -51422,18 +52017,29 @@ const useCountdown = ({
51422
52017
  }, [estimatedRouteDurationSeconds, enabled, timer]);
51423
52018
  return countdown;
51424
52019
  };
52020
+ function useDebouncedValue(value, delay) {
52021
+ const [debouncedValue, setDebouncedValue] = useState(value);
52022
+ useEffect(() => {
52023
+ const timeout = setTimeout(() => setDebouncedValue(value), delay);
52024
+ return () => clearTimeout(timeout);
52025
+ }, [value, delay]);
52026
+ return debouncedValue;
52027
+ }
51425
52028
  const SwapExecutionButton = ({
51426
52029
  swapExecutionState,
51427
52030
  route: route2,
51428
52031
  signaturesRemaining,
51429
52032
  lastOperation,
51430
52033
  connectRequiredChains,
52034
+ connectFeeRouteRequiredChains,
51431
52035
  submitExecuteRouteMutation
51432
52036
  }) => {
52037
+ var _a, _b, _c;
51433
52038
  const countdown = useCountdown({
51434
52039
  estimatedRouteDurationSeconds: route2 == null ? void 0 : route2.estimatedRouteDurationSeconds,
51435
52040
  enabled: swapExecutionState === SwapExecutionState.pending
51436
52041
  });
52042
+ const chainAddresses = useAtomValue(chainAddressesAtom);
51437
52043
  const { wallets: solanaWallets2 } = useWallet();
51438
52044
  const svmWallet = useAtomValue(svmWalletAtom);
51439
52045
  const theme = nt();
@@ -51453,7 +52059,8 @@ const SwapExecutionButton = ({
51453
52059
  route2 == null ? void 0 : route2.destAssetChainId,
51454
52060
  route2 == null ? void 0 : route2.txsRequired
51455
52061
  ]);
51456
- switch (swapExecutionState) {
52062
+ const debouncedSwapExecutionState = useDebouncedValue(swapExecutionState, 150);
52063
+ switch (debouncedSwapExecutionState) {
51457
52064
  case SwapExecutionState.recoveryAddressUnset:
51458
52065
  return /* @__PURE__ */ jsx(
51459
52066
  MainButton,
@@ -51466,6 +52073,18 @@ const SwapExecutionButton = ({
51466
52073
  }
51467
52074
  }
51468
52075
  );
52076
+ case SwapExecutionState.feeRouteRecoveryAddressUnset:
52077
+ return /* @__PURE__ */ jsx(
52078
+ MainButton,
52079
+ {
52080
+ label: "Set intermediary address",
52081
+ icon: ICONS.rightArrow,
52082
+ onClick: () => {
52083
+ track("swap execution page: set recovery address button - clicked");
52084
+ connectFeeRouteRequiredChains == null ? void 0 : connectFeeRouteRequiredChains(true);
52085
+ }
52086
+ }
52087
+ );
51469
52088
  case SwapExecutionState.destinationAddressUnset:
51470
52089
  return /* @__PURE__ */ jsx(
51471
52090
  MainButton,
@@ -51485,7 +52104,8 @@ const SwapExecutionButton = ({
51485
52104
  }
51486
52105
  );
51487
52106
  case SwapExecutionState.ready: {
51488
- track("swap execution page: confirm button - clicked", { route: route2 });
52107
+ const destinationWalletSource = ((_a = route2 == null ? void 0 : route2.requiredChainAddresses) == null ? void 0 : _a.length) && ((_c = chainAddresses[((_b = route2 == null ? void 0 : route2.requiredChainAddresses) == null ? void 0 : _b.length) - 1]) == null ? void 0 : _c.source);
52108
+ track("swap execution page: confirm button - clicked", { route: route2, destinationWalletSource });
51489
52109
  const onClickConfirmSwap = () => {
51490
52110
  if ((route2 == null ? void 0 : route2.txsRequired) && route2.txsRequired > 1) {
51491
52111
  track("warning page: additional signing required", { route: route2 });
@@ -51563,6 +52183,10 @@ const SwapExecutionButton = ({
51563
52183
  );
51564
52184
  case SwapExecutionState.pendingGettingAddresses:
51565
52185
  return /* @__PURE__ */ jsx(MainButton, { label: "Getting addresses", loading: true });
52186
+ case SwapExecutionState.pendingGettingDestinationBalance:
52187
+ return /* @__PURE__ */ jsx(MainButton, { label: "Getting destination balance", loading: true });
52188
+ case SwapExecutionState.pendingError:
52189
+ return /* @__PURE__ */ jsx(MainButton, { label: "Awaiting result", loading: true });
51566
52190
  default:
51567
52191
  return null;
51568
52192
  }
@@ -51676,6 +52300,348 @@ function usePreventPageUnload(shouldWarn) {
51676
52300
  return () => window.removeEventListener("beforeunload", handleBeforeUnload);
51677
52301
  }, [shouldWarn]);
51678
52302
  }
52303
+ const GasIcon = ({ color = "currentColor" }) => /* @__PURE__ */ jsx("svg", { width: "16", height: "15", viewBox: "0 0 16 15", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx(
52304
+ "path",
52305
+ {
52306
+ d: "M1.22261 1.84952C1.24188 1.32934 1.4249 0.895862 1.77169 0.549076C2.11847 0.202289 2.55195 0.0192658 3.07213 0H7.69592C8.2161 0.0192658 8.64958 0.202289 8.99636 0.549076C9.34315 0.895862 9.52617 1.32934 9.54544 1.84952V7.39807H9.77663C10.4895 7.41734 11.0867 7.66779 11.5684 8.14944C12.05 8.63109 12.3005 9.22832 12.3197 9.94116V10.8659C12.3582 11.2898 12.5894 11.521 13.0133 11.5595C13.4371 11.521 13.6683 11.2898 13.7069 10.8659V6.38662C13.3023 6.29029 12.9748 6.07836 12.7243 5.75084C12.4546 5.44259 12.3197 5.06691 12.3197 4.62379V2.77428L11.395 1.84952C11.1445 1.54126 11.1445 1.23301 11.395 0.924759C11.7032 0.674302 12.0115 0.674302 12.3197 0.924759L14.5449 3.14996C14.911 3.51601 15.094 3.95912 15.094 4.4793V10.8659C15.0747 11.4632 14.8724 11.9544 14.4871 12.3398C14.1018 12.7251 13.6105 12.9274 13.0133 12.9466C12.416 12.9274 11.9248 12.7251 11.5395 12.3398C11.1541 11.9544 10.9518 11.4632 10.9326 10.8659V9.94116C10.9326 9.61364 10.817 9.33429 10.5858 9.1031C10.3739 8.89117 10.1042 8.77558 9.77663 8.75631H9.54544V12.9466C9.81516 12.9466 10.0367 13.0333 10.2101 13.2067C10.3835 13.3801 10.4702 13.6017 10.4702 13.8714C10.4702 14.1411 10.3835 14.3627 10.2101 14.5361C10.0367 14.7094 9.81516 14.7961 9.54544 14.7961H1.22261C0.952888 14.7961 0.731333 14.7094 0.55794 14.5361C0.384547 14.3627 0.297852 14.1411 0.297852 13.8714C0.297852 13.6017 0.384547 13.3801 0.55794 13.2067C0.731333 13.0333 0.952888 12.9466 1.22261 12.9466V1.84952ZM3.07213 5.08617C3.09139 5.37516 3.24552 5.52929 3.53451 5.54855H7.23354C7.52253 5.52929 7.67666 5.37516 7.69592 5.08617V2.3119C7.67666 2.02291 7.52253 1.86878 7.23354 1.84952H3.53451C3.24552 1.86878 3.09139 2.02291 3.07213 2.3119V5.08617Z",
52307
+ fill: color
52308
+ }
52309
+ ) });
52310
+ const SwitchWrapper = dt.div`
52311
+ width: 42px;
52312
+ height: 24px;
52313
+ border-radius: ${({ theme }) => {
52314
+ var _a;
52315
+ return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.selectionButton);
52316
+ }};
52317
+ background-color: ${({ checked, theme }) => checked ? theme.brandColor : theme.secondary.background.transparent};
52318
+ display: flex;
52319
+ align-items: center;
52320
+ padding: 6px;
52321
+ cursor: pointer;
52322
+ transition: background-color 0.2s ease;
52323
+ user-select: none;
52324
+ `;
52325
+ const SwitchThumb = dt.div`
52326
+ width: 16px;
52327
+ height: 16px;
52328
+ border-radius: ${({ theme }) => {
52329
+ var _a;
52330
+ return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.selectionButton);
52331
+ }};
52332
+ background-color: ${({ checked, theme }) => checked ? theme.secondary.background.normal : theme.primary.text.ultraLowContrast};
52333
+ transition: transform 0.2s ease;
52334
+ transform: translateX(${({ checked }) => checked ? "16px" : "0"});
52335
+ `;
52336
+ const Switch = ({ checked = false, onChange }) => {
52337
+ const [isChecked, setIsChecked] = useState(checked);
52338
+ const toggle = () => {
52339
+ const newVal = !isChecked;
52340
+ setIsChecked(newVal);
52341
+ onChange == null ? void 0 : onChange(newVal);
52342
+ };
52343
+ return /* @__PURE__ */ jsx(SwitchWrapper, { checked: isChecked, onClick: toggle, children: /* @__PURE__ */ jsx(SwitchThumb, { checked: isChecked }) });
52344
+ };
52345
+ const SpinnerIcon = (props) => {
52346
+ return /* @__PURE__ */ jsxs("svg", { fill: "none", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
52347
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", opacity: ".25", r: "10", stroke: "currentColor", strokeWidth: "4" }),
52348
+ /* @__PURE__ */ jsx(
52349
+ "path",
52350
+ {
52351
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",
52352
+ fill: "currentColor",
52353
+ opacity: ".75"
52354
+ }
52355
+ )
52356
+ ] });
52357
+ };
52358
+ const GasOnReceive = ({ routeDetails, hideContainer } = {}) => {
52359
+ var _a, _b, _c, _d, _e2;
52360
+ const theme = nt();
52361
+ const [gasOnReceive, setGasOnReceive] = useAtom(gasOnReceiveAtom);
52362
+ const { isLoading: fetchingGasRoute } = useAtomValue(gasOnReceiveRouteAtom);
52363
+ const { feeRoute } = useAtomValue(swapExecutionStateAtom);
52364
+ const { data: assets2 } = useAtomValue(skipAssetsAtom);
52365
+ const isSomeDestinationFeeBalanceAvailable = useAtomValue(
52366
+ isSomeDestinationFeeBalanceAvailableAtom
52367
+ );
52368
+ const currentTransaction = useAtomValue(currentTransactionAtom);
52369
+ const isFetchingBalance = isSomeDestinationFeeBalanceAvailable.isLoading;
52370
+ const gasOnReceiveAsset = useMemo(() => {
52371
+ var _a2, _b2;
52372
+ const gasAsset = {
52373
+ chainId: ((_a2 = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _a2.destAssetChainId) ?? (feeRoute == null ? void 0 : feeRoute.destAssetChainId),
52374
+ denom: ((_b2 = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _b2.destAssetDenom) ?? (feeRoute == null ? void 0 : feeRoute.destAssetDenom)
52375
+ };
52376
+ if (!gasAsset) return;
52377
+ const asset = assets2 == null ? void 0 : assets2.find(
52378
+ (a) => a.chainId === (gasAsset == null ? void 0 : gasAsset.chainId) && a.denom === (gasAsset == null ? void 0 : gasAsset.denom)
52379
+ );
52380
+ return asset;
52381
+ }, [
52382
+ assets2,
52383
+ feeRoute == null ? void 0 : feeRoute.destAssetChainId,
52384
+ feeRoute == null ? void 0 : feeRoute.destAssetDenom,
52385
+ (_a = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _a.destAssetChainId,
52386
+ (_b = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _b.destAssetDenom
52387
+ ]);
52388
+ const amountUsd = ((_c = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _c.usdAmountOut) ?? (feeRoute == null ? void 0 : feeRoute.usdAmountOut);
52389
+ const amountOut = ((_d = routeDetails == null ? void 0 : routeDetails.route) == null ? void 0 : _d.amountOut) ?? (feeRoute == null ? void 0 : feeRoute.amountOut) ?? "";
52390
+ const assetSymbol = ((_e2 = gasOnReceiveAsset == null ? void 0 : gasOnReceiveAsset.recommendedSymbol) == null ? void 0 : _e2.toUpperCase()) ?? "";
52391
+ const gasOnReceiveText = useMemo(() => {
52392
+ var _a2;
52393
+ const formattedAmountText = amountUsd && Number(amountUsd) > 0 ? `${formatUSD(amountUsd)} in ${assetSymbol}` : `${convertTokenAmountToHumanReadableAmount(amountOut, gasOnReceiveAsset == null ? void 0 : gasOnReceiveAsset.decimals)} ${assetSymbol}`;
52394
+ const transferAssetRelease = routeDetails == null ? void 0 : routeDetails.transferAssetRelease;
52395
+ const transferAssetReleaseDetails = assets2 == null ? void 0 : assets2.find(
52396
+ (a) => a.chainId === (transferAssetRelease == null ? void 0 : transferAssetRelease.chainId) && a.denom === (transferAssetRelease == null ? void 0 : transferAssetRelease.denom)
52397
+ );
52398
+ switch (routeDetails == null ? void 0 : routeDetails.status) {
52399
+ case "pending":
52400
+ return `Receiving ${formattedAmountText}`;
52401
+ case "completed":
52402
+ return `Received ${formattedAmountText} as gas top-up`;
52403
+ case "failed":
52404
+ if (transferAssetReleaseDetails) {
52405
+ return `Gas top-up failed. Assets released as ${(transferAssetRelease == null ? void 0 : transferAssetRelease.amount) ? convertTokenAmountToHumanReadableAmount(transferAssetRelease == null ? void 0 : transferAssetRelease.amount, transferAssetReleaseDetails == null ? void 0 : transferAssetReleaseDetails.decimals) : void 0} ${(_a2 = transferAssetReleaseDetails == null ? void 0 : transferAssetReleaseDetails.recommendedSymbol) == null ? void 0 : _a2.toUpperCase()}`;
52406
+ }
52407
+ return `Failed to receive ${formattedAmountText} as gas top-up`;
52408
+ default:
52409
+ return /* @__PURE__ */ jsxs(Row, { align: "center", gap: 8, children: [
52410
+ "Enable gas top up",
52411
+ /* @__PURE__ */ jsx(
52412
+ QuestionMarkTooltip,
52413
+ {
52414
+ content: /* @__PURE__ */ jsxs(SmallText, { normalTextColor: true, style: { whiteSpace: "nowrap" }, children: [
52415
+ "You'll get ",
52416
+ formattedAmountText
52417
+ ] })
52418
+ }
52419
+ )
52420
+ ] });
52421
+ }
52422
+ }, [amountOut, amountUsd, assetSymbol, assets2, gasOnReceiveAsset == null ? void 0 : gasOnReceiveAsset.decimals, routeDetails]);
52423
+ const renderIcon = useMemo(() => {
52424
+ if ((routeDetails == null ? void 0 : routeDetails.status) === "pending") {
52425
+ return /* @__PURE__ */ jsx(
52426
+ SmallText,
52427
+ {
52428
+ style: {
52429
+ marginLeft: "8px",
52430
+ marginRight: "8px",
52431
+ position: "relative"
52432
+ },
52433
+ children: /* @__PURE__ */ jsx(
52434
+ SpinnerIcon,
52435
+ {
52436
+ style: {
52437
+ animation: "spin 1s linear infinite",
52438
+ position: "absolute",
52439
+ height: 14,
52440
+ width: 14
52441
+ }
52442
+ }
52443
+ )
52444
+ }
52445
+ );
52446
+ }
52447
+ return /* @__PURE__ */ jsx(
52448
+ GasIcon,
52449
+ {
52450
+ color: (routeDetails == null ? void 0 : routeDetails.status) === "failed" ? theme.warning.text : theme.primary.text.lowContrast
52451
+ }
52452
+ );
52453
+ }, [routeDetails == null ? void 0 : routeDetails.status, theme.primary.text.lowContrast, theme.warning.text]);
52454
+ if (!routeDetails && (!feeRoute || !gasOnReceiveAsset)) {
52455
+ return null;
52456
+ }
52457
+ return /* @__PURE__ */ jsxs(GasOnReceiveContainer, { hideContainer, align: "center", justify: "space-between", children: [
52458
+ /* @__PURE__ */ jsxs(Row, { gap: 8, align: "center", children: [
52459
+ renderIcon,
52460
+ (isFetchingBalance || fetchingGasRoute) && !routeDetails ? /* @__PURE__ */ jsx(SkeletonElement, { height: 20, width: 300 }) : /* @__PURE__ */ jsx(
52461
+ SmallText,
52462
+ {
52463
+ color: (routeDetails == null ? void 0 : routeDetails.status) === "failed" ? theme.warning.text : theme.primary.text.lowContrast,
52464
+ children: gasOnReceiveText
52465
+ }
52466
+ )
52467
+ ] }),
52468
+ routeDetails ? null : !isFetchingBalance && !currentTransaction && /* @__PURE__ */ jsx(
52469
+ Switch,
52470
+ {
52471
+ checked: gasOnReceive,
52472
+ onChange: (value) => {
52473
+ track("gas on receive: toggle button - clicked", {
52474
+ gasOnReceive: value
52475
+ });
52476
+ setGasOnReceive(value);
52477
+ }
52478
+ }
52479
+ )
52480
+ ] });
52481
+ };
52482
+ const GasOnReceiveContainer = dt(Row)`
52483
+ ${({ hideContainer, theme }) => !hideContainer && lt`
52484
+ background-color: ${theme.secondary.background.transparent};
52485
+ padding: 15px 20px;
52486
+ height: 40px;
52487
+ `}
52488
+ border-radius: ${({ theme }) => {
52489
+ var _a;
52490
+ return convertToPxValue((_a = theme.borderRadius) == null ? void 0 : _a.selectionButton);
52491
+ }};
52492
+ `;
52493
+ const useFeeRouteAutoSetAddress = () => {
52494
+ var _a, _b, _c;
52495
+ const [feeRouteChainAddresses, setFeeRouteChainAddresses] = useAtom(feeRouteChainAddressesAtom);
52496
+ const { feeRoute, isFeeRouteEnabled } = useAtomValue(swapExecutionStateAtom);
52497
+ const [isLoading, setIsLoading] = useState(true);
52498
+ const connectedAddress = useAtomValue(connectedAddressesAtom);
52499
+ const sourceWallet = useAtomValue(walletsAtom);
52500
+ const currentTransaction = useAtomValue(currentTransactionAtom);
52501
+ const [walletHasChanged, setWalletHasChanged] = useState(false);
52502
+ const [currentSourceWallets, setCurrentSourceWallets] = useState();
52503
+ const [currentConnectedAddress, setCurrentConnectedAddress] = useState();
52504
+ const { createCosmosWallets } = useCreateCosmosWallets();
52505
+ const { createEvmWallets } = useCreateEvmWallets();
52506
+ const { createSolanaWallets } = useCreateSolanaWallets();
52507
+ useAtom(feeRouteUserAddressesEffectAtom);
52508
+ const connectRequiredChains = useCallback(
52509
+ async (openModal) => {
52510
+ setIsLoading(true);
52511
+ const createWallets = {
52512
+ [ChainType.Cosmos]: createCosmosWallets,
52513
+ [ChainType.Evm]: createEvmWallets,
52514
+ [ChainType.Svm]: createSolanaWallets
52515
+ };
52516
+ try {
52517
+ if (!feeRoute || !isFeeRouteEnabled) return;
52518
+ const requiredChainAddresses = feeRoute.requiredChainAddresses;
52519
+ if (!requiredChainAddresses) return;
52520
+ Object.entries(feeRouteChainAddresses).forEach(async ([_index, chainAddress], index) => {
52521
+ var _a2, _b2;
52522
+ if (!chainAddress.address || chainAddress.address === "") {
52523
+ const injectedAddress = connectedAddress == null ? void 0 : connectedAddress[chainAddress.chainId];
52524
+ if (injectedAddress) {
52525
+ setFeeRouteChainAddresses((prev2) => ({
52526
+ ...prev2,
52527
+ [index]: {
52528
+ ...chainAddress,
52529
+ address: injectedAddress,
52530
+ source: WalletSource.Injected
52531
+ }
52532
+ }));
52533
+ } else {
52534
+ if (!chainAddress.chainType) return;
52535
+ const wallets = createWallets[chainAddress.chainType](chainAddress.chainId);
52536
+ const walletName = (_a2 = sourceWallet[chainAddress.chainType]) == null ? void 0 : _a2.walletName;
52537
+ const wallet = wallets.find((w2) => w2.walletName === walletName);
52538
+ const response = await ((_b2 = wallet == null ? void 0 : wallet.getAddress) == null ? void 0 : _b2.call(wallet, {}));
52539
+ const getLogo = () => {
52540
+ var _a3;
52541
+ if ((wallet == null ? void 0 : wallet.walletChainType) === "evm" && (wallet == null ? void 0 : wallet.walletName) === "app.keplr") {
52542
+ return getCosmosWalletInfo(WalletType.KEPLR).imgSrc;
52543
+ }
52544
+ return (response == null ? void 0 : response.logo) ?? ((_a3 = wallet == null ? void 0 : wallet.walletInfo) == null ? void 0 : _a3.logo);
52545
+ };
52546
+ if (response == null ? void 0 : response.address) {
52547
+ setFeeRouteChainAddresses((prev2) => ({
52548
+ ...prev2,
52549
+ [index]: {
52550
+ ...chainAddress,
52551
+ address: response.address,
52552
+ logo: response.logo,
52553
+ source: WalletSource.Wallet,
52554
+ wallet: wallet ? {
52555
+ walletName: wallet == null ? void 0 : wallet.walletName,
52556
+ walletPrettyName: wallet == null ? void 0 : wallet.walletPrettyName,
52557
+ walletChainType: chainAddress.chainType,
52558
+ walletInfo: {
52559
+ logo: getLogo()
52560
+ }
52561
+ } : void 0
52562
+ }
52563
+ }));
52564
+ } else if (openModal) {
52565
+ NiceModal.show(Modals.SetAddressModal, {
52566
+ chainId: chainAddress.chainId,
52567
+ chainAddressIndex: index,
52568
+ isFeeRoute: true
52569
+ });
52570
+ }
52571
+ }
52572
+ }
52573
+ });
52574
+ } catch (error) {
52575
+ console.error("Error connecting required chains:", error);
52576
+ } finally {
52577
+ setIsLoading(false);
52578
+ }
52579
+ },
52580
+ [
52581
+ connectedAddress,
52582
+ createCosmosWallets,
52583
+ createEvmWallets,
52584
+ createSolanaWallets,
52585
+ feeRoute,
52586
+ feeRouteChainAddresses,
52587
+ isFeeRouteEnabled,
52588
+ setFeeRouteChainAddresses,
52589
+ sourceWallet
52590
+ ]
52591
+ );
52592
+ useEffect(() => {
52593
+ var _a2, _b2, _c2, _d, _e2, _f;
52594
+ if (currentTransaction && (currentTransaction == null ? void 0 : currentTransaction.status) !== "unconfirmed") {
52595
+ setIsLoading(false);
52596
+ return;
52597
+ }
52598
+ const hasWalletChanged = ((_a2 = sourceWallet.cosmos) == null ? void 0 : _a2.id) !== ((_b2 = currentSourceWallets == null ? void 0 : currentSourceWallets.cosmos) == null ? void 0 : _b2.id) || ((_c2 = sourceWallet.evm) == null ? void 0 : _c2.id) !== ((_d = currentSourceWallets == null ? void 0 : currentSourceWallets.evm) == null ? void 0 : _d.id) || ((_e2 = sourceWallet.svm) == null ? void 0 : _e2.id) !== ((_f = currentSourceWallets == null ? void 0 : currentSourceWallets.svm) == null ? void 0 : _f.id);
52599
+ const hasConnectedAddressChanged = JSON.stringify(connectedAddress) !== JSON.stringify(currentConnectedAddress);
52600
+ if (hasConnectedAddressChanged) {
52601
+ setCurrentConnectedAddress(connectedAddress);
52602
+ setWalletHasChanged(true);
52603
+ }
52604
+ if (hasWalletChanged) {
52605
+ setCurrentSourceWallets(sourceWallet);
52606
+ setWalletHasChanged(true);
52607
+ }
52608
+ }, [
52609
+ connectRequiredChains,
52610
+ connectedAddress,
52611
+ currentConnectedAddress,
52612
+ (_a = currentSourceWallets == null ? void 0 : currentSourceWallets.cosmos) == null ? void 0 : _a.id,
52613
+ (_b = currentSourceWallets == null ? void 0 : currentSourceWallets.evm) == null ? void 0 : _b.id,
52614
+ (_c = currentSourceWallets == null ? void 0 : currentSourceWallets.svm) == null ? void 0 : _c.id,
52615
+ currentTransaction,
52616
+ currentTransaction == null ? void 0 : currentTransaction.status,
52617
+ isLoading,
52618
+ feeRoute == null ? void 0 : feeRoute.requiredChainAddresses,
52619
+ sourceWallet
52620
+ ]);
52621
+ useEffect(() => {
52622
+ if (!isFeeRouteEnabled) {
52623
+ setIsLoading(false);
52624
+ return;
52625
+ } else {
52626
+ setWalletHasChanged(true);
52627
+ }
52628
+ }, [isFeeRouteEnabled]);
52629
+ useEffect(() => {
52630
+ if (walletHasChanged && isFeeRouteEnabled) {
52631
+ connectRequiredChains();
52632
+ setWalletHasChanged(false);
52633
+ }
52634
+ }, [
52635
+ connectRequiredChains,
52636
+ isFeeRouteEnabled,
52637
+ feeRoute == null ? void 0 : feeRoute.requiredChainAddresses,
52638
+ walletHasChanged
52639
+ ]);
52640
+ return {
52641
+ connectRequiredChains,
52642
+ isLoading
52643
+ };
52644
+ };
51679
52645
  var SwapExecutionState = /* @__PURE__ */ ((SwapExecutionState2) => {
51680
52646
  SwapExecutionState2[SwapExecutionState2["recoveryAddressUnset"] = 0] = "recoveryAddressUnset";
51681
52647
  SwapExecutionState2[SwapExecutionState2["destinationAddressUnset"] = 1] = "destinationAddressUnset";
@@ -51687,15 +52653,34 @@ var SwapExecutionState = /* @__PURE__ */ ((SwapExecutionState2) => {
51687
52653
  SwapExecutionState2[SwapExecutionState2["validatingGasBalance"] = 7] = "validatingGasBalance";
51688
52654
  SwapExecutionState2[SwapExecutionState2["approving"] = 8] = "approving";
51689
52655
  SwapExecutionState2[SwapExecutionState2["pendingGettingAddresses"] = 9] = "pendingGettingAddresses";
52656
+ SwapExecutionState2[SwapExecutionState2["pendingGettingDestinationBalance"] = 10] = "pendingGettingDestinationBalance";
52657
+ SwapExecutionState2[SwapExecutionState2["pendingGettingFeeRouteAddresses"] = 11] = "pendingGettingFeeRouteAddresses";
52658
+ SwapExecutionState2[SwapExecutionState2["feeRouteRecoveryAddressUnset"] = 12] = "feeRouteRecoveryAddressUnset";
52659
+ SwapExecutionState2[SwapExecutionState2["pendingError"] = 13] = "pendingError";
51690
52660
  return SwapExecutionState2;
51691
52661
  })(SwapExecutionState || {});
51692
52662
  const SwapExecutionPage = () => {
52663
+ const theme = nt();
51693
52664
  const setCurrentPage = useSetAtom(currentPageAtom);
51694
- const { route: route2, clientOperations } = useAtomValue(swapExecutionStateAtom);
52665
+ const { route: route2, clientOperations, feeRoute } = useAtomValue(swapExecutionStateAtom);
51695
52666
  const currentTransaction = useAtomValue(currentTransactionAtom);
51696
52667
  const chainAddresses = useAtomValue(chainAddressesAtom);
51697
- const { connectRequiredChains, isLoading } = useAutoSetAddress();
52668
+ const feeRouteChainAddresses = useAtomValue(feeRouteChainAddressesAtom);
52669
+ const { connectRequiredChains, isLoading: isGettingAddressesLoading } = useAutoSetAddress();
52670
+ const {
52671
+ connectRequiredChains: connectFeeRouteRequiredChains,
52672
+ isLoading: isGettingFeeRouteAddressesLoading
52673
+ } = useFeeRouteAutoSetAddress();
51698
52674
  const [simpleRoute, setSimpleRoute] = useState(true);
52675
+ const isSomeDestinationFeeBalanceAvailable = useAtomValue(
52676
+ isSomeDestinationFeeBalanceAvailableAtom
52677
+ );
52678
+ const { data: gasRoute, isLoading: isGasRouteLoading } = useAtomValue(gasOnReceiveRouteAtom);
52679
+ const gasRouteEnabled = useAtomValue(gasOnReceiveAtom);
52680
+ const isFetchingDestinationBalance = isSomeDestinationFeeBalanceAvailable.isLoading || isGasRouteLoading;
52681
+ useAtom(gasRouteEffect);
52682
+ useAtom(feeRouteAddressesAtomEffect);
52683
+ useAtom(gasOnReceiveAtomEffect);
51699
52684
  const { mutate: submitExecuteRouteMutation, error } = useAtomValue(skipSubmitSwapExecutionAtom);
51700
52685
  const signaturesRemaining = useMemo(() => {
51701
52686
  if (!currentTransaction) return 0;
@@ -51707,8 +52692,12 @@ const SwapExecutionPage = () => {
51707
52692
  const lastOperation = clientOperations[clientOperations.length - 1];
51708
52693
  const swapExecutionState = useSwapExecutionState({
51709
52694
  chainAddresses,
51710
- route: route2,
51711
- isLoading
52695
+ requiredChainAddresses: route2 == null ? void 0 : route2.requiredChainAddresses,
52696
+ feeRouteChainAddresses,
52697
+ feeRouteRequiredChainAddresses: feeRoute == null ? void 0 : feeRoute.requiredChainAddresses,
52698
+ isGettingAddressesLoading,
52699
+ isGettingFeeRouteAddressesLoading,
52700
+ isFetchingDestinationBalance
51712
52701
  });
51713
52702
  const isSafeToleave = (route2 == null ? void 0 : route2.txsRequired) === (currentTransaction == null ? void 0 : currentTransaction.transactionDetails.length);
51714
52703
  usePreventPageUnload(
@@ -51755,8 +52744,22 @@ const SwapExecutionPage = () => {
51755
52744
  });
51756
52745
  };
51757
52746
  }, [swapExecutionState, lastOperation.signRequired, lastOperation.fromChain, route2]);
51758
- const SwapExecutionPageRoute = simpleRoute ? SwapExecutionPageRouteSimple : SwapExecutionPageRouteDetailed;
51759
52747
  const shouldRenderTrackProgressButton = lastTxHash && lastTxChainId && (route2 == null ? void 0 : route2.txsRequired) === (currentTransaction == null ? void 0 : currentTransaction.transactionDetails.length);
52748
+ const gasOnReceiveComponent = useMemo(() => {
52749
+ var _a;
52750
+ return (gasRoute || feeRoute) && !isGasRouteLoading && !currentTransaction && !isFetchingDestinationBalance || currentTransaction && gasRouteEnabled ? /* @__PURE__ */ jsxs(Column, { children: [
52751
+ /* @__PURE__ */ jsx(Spacer, { height: 30, showLine: true, lineColor: theme.secondary.background.transparent }),
52752
+ /* @__PURE__ */ jsx(GasOnReceive, { routeDetails: (_a = currentTransaction == null ? void 0 : currentTransaction.relatedRoutes) == null ? void 0 : _a[0] })
52753
+ ] }) : null;
52754
+ }, [
52755
+ currentTransaction,
52756
+ feeRoute,
52757
+ gasRoute,
52758
+ gasRouteEnabled,
52759
+ isFetchingDestinationBalance,
52760
+ isGasRouteLoading,
52761
+ theme.secondary.background.transparent
52762
+ ]);
51760
52763
  return /* @__PURE__ */ jsxs(Column, { gap: 5, children: [
51761
52764
  /* @__PURE__ */ jsx(
51762
52765
  PageHeader,
@@ -51794,14 +52797,16 @@ const SwapExecutionPage = () => {
51794
52797
  }
51795
52798
  ),
51796
52799
  /* @__PURE__ */ jsx(
51797
- SwapExecutionPageRoute,
52800
+ SwapExecutionPageRouteContainer,
51798
52801
  {
52802
+ showDetailed: !simpleRoute,
51799
52803
  onClickEditDestinationWallet,
51800
52804
  operations: clientOperations,
51801
52805
  statusData: currentTransaction,
51802
52806
  swapExecutionState,
51803
52807
  firstOperationStatus,
51804
- secondOperationStatus
52808
+ secondOperationStatus,
52809
+ bottomContent: gasOnReceiveComponent
51805
52810
  }
51806
52811
  ),
51807
52812
  /* @__PURE__ */ jsx(
@@ -51812,6 +52817,7 @@ const SwapExecutionPage = () => {
51812
52817
  signaturesRemaining,
51813
52818
  lastOperation,
51814
52819
  connectRequiredChains,
52820
+ connectFeeRouteRequiredChains,
51815
52821
  submitExecuteRouteMutation
51816
52822
  }
51817
52823
  ),
@@ -52242,8 +53248,8 @@ const useCleanupDebouncedAtoms = () => {
52242
53248
  }, [cleanupDebouncedDestinationAssetAmount, cleanupDebouncedSourceAssetAmount]);
52243
53249
  };
52244
53250
  const useUpdateAmountWhenRouteChanges = () => {
52245
- const [route2] = useAtom(skipRouteAtom);
52246
- const [direction] = useAtom(swapDirectionAtom);
53251
+ const route2 = useAtomValue(skipRouteAtom);
53252
+ const direction = useAtomValue(swapDirectionAtom);
52247
53253
  const [sourceAsset, setSourceAsset] = useAtom(sourceAssetAtom);
52248
53254
  const [destinationAsset, setDestinationAsset] = useAtom(destinationAssetAtom);
52249
53255
  const prevRoute = useRef(route2.data);
@@ -52264,12 +53270,16 @@ const useUpdateAmountWhenRouteChanges = () => {
52264
53270
  if (direction === "swap-in") {
52265
53271
  setDestinationAsset((old) => ({
52266
53272
  ...old,
52267
- amount: removeTrailingZeros(swapInAmount)
53273
+ amount: removeTrailingZeros(
53274
+ formatDisplayAmount(swapInAmount, { decimals: 5, abbreviate: false })
53275
+ )
52268
53276
  }));
52269
53277
  } else if (direction === "swap-out") {
52270
53278
  setSourceAsset((old) => ({
52271
53279
  ...old,
52272
- amount: removeTrailingZeros(swapOutAmount)
53280
+ amount: removeTrailingZeros(
53281
+ formatDisplayAmount(swapOutAmount, { decimals: 5, abbreviate: false })
53282
+ )
52273
53283
  }));
52274
53284
  }
52275
53285
  }, [route2.data, direction, sourceAsset, destinationAsset, setSourceAsset, setDestinationAsset]);
@@ -52289,19 +53299,6 @@ const useShowCosmosLedgerWarning = () => {
52289
53299
  return !!(account == null ? void 0 : account.wallet.isLedger);
52290
53300
  }, [sourceAsset == null ? void 0 : sourceAsset.chainId, chainType, getAccount]);
52291
53301
  };
52292
- const SpinnerIcon = (props) => {
52293
- return /* @__PURE__ */ jsxs("svg", { fill: "none", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
52294
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", opacity: ".25", r: "10", stroke: "currentColor", strokeWidth: "4" }),
52295
- /* @__PURE__ */ jsx(
52296
- "path",
52297
- {
52298
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",
52299
- fill: "currentColor",
52300
- opacity: ".75"
52301
- }
52302
- )
52303
- ] });
52304
- };
52305
53302
  const ConnectedWalletContent = () => {
52306
53303
  const sourceAsset = useAtomValue(sourceAssetAtom);
52307
53304
  const getAccount = useGetAccount();
@@ -52384,18 +53381,44 @@ const ConnectedWalletContent = () => {
52384
53381
  };
52385
53382
  const useTxHistory = ({ txHistoryItem }) => {
52386
53383
  const setTransactionHistory = useSetAtom(setTransactionHistoryAtom);
52387
- const [subscribed, setSubscribed] = useState(false);
53384
+ const unsubscribersRef = useRef(null);
53385
+ const subscribedIdsRef = useRef(/* @__PURE__ */ new Set());
52388
53386
  useEffect(() => {
52389
- if (!txHistoryItem || subscribed) return;
52390
- const unsubscribe = subscribeToRouteStatus({
52391
- routeDetails: txHistoryItem,
52392
- onRouteStatusUpdated: (routeStatus) => setTransactionHistory(routeStatus)
53387
+ var _a;
53388
+ if (!txHistoryItem) return;
53389
+ const unsubscribers = [];
53390
+ const subscribedRouteIds = /* @__PURE__ */ new Set();
53391
+ const subscribe = (route2) => {
53392
+ if (!route2.id || subscribedRouteIds.has(route2.id)) return;
53393
+ subscribedRouteIds.add(route2.id);
53394
+ unsubscribers.push(
53395
+ subscribeToRouteStatus({
53396
+ routeDetails: route2,
53397
+ onRouteStatusUpdated: (routeStatus) => {
53398
+ var _a2;
53399
+ const failedFeeRoute = (_a2 = routeStatus == null ? void 0 : routeStatus.relatedRoutes) == null ? void 0 : _a2.find(
53400
+ (relatedRoute) => relatedRoute.status === "failed"
53401
+ );
53402
+ if (failedFeeRoute) {
53403
+ track("gas on receive: fee route failed", { feeRoute: failedFeeRoute });
53404
+ }
53405
+ setTransactionHistory(routeStatus);
53406
+ }
53407
+ })
53408
+ );
53409
+ };
53410
+ subscribe(txHistoryItem);
53411
+ (_a = txHistoryItem.relatedRoutes) == null ? void 0 : _a.forEach((relatedRoute) => {
53412
+ if (relatedRoute && relatedRoute.id) {
53413
+ subscribe(relatedRoute);
53414
+ }
52393
53415
  });
52394
- setSubscribed(true);
53416
+ unsubscribersRef.current = unsubscribers;
53417
+ subscribedIdsRef.current = subscribedRouteIds;
52395
53418
  return () => {
52396
- unsubscribe();
53419
+ unsubscribers.forEach((unsub) => unsub());
52397
53420
  };
52398
- }, [setTransactionHistory, subscribed, txHistoryItem]);
53421
+ }, [txHistoryItem, setTransactionHistory]);
52399
53422
  return txHistoryItem;
52400
53423
  };
52401
53424
  const SwapPageHeader = memo(() => {
@@ -52508,6 +53531,183 @@ const useConnectToMissingCosmosChain = () => {
52508
53531
  }, [sourceAsset, wallets, extraChainIdsToConnect, addExtraChainIdsToConnectForWalletType]);
52509
53532
  return { isAskingToApproveConnection };
52510
53533
  };
53534
+ const name = "@skip-go/widget";
53535
+ const description = "Swap widget";
53536
+ const version = "3.14.0";
53537
+ const repository = {
53538
+ url: "https://github.com/skip-mev/skip-go",
53539
+ directory: "packages/widget"
53540
+ };
53541
+ const type = "module";
53542
+ const scripts = {
53543
+ dev: "vite --force --host",
53544
+ "dev:visual-test": "VISUAL_TEST=true yarn dev",
53545
+ "dev:storybook": "storybook dev -p 6006",
53546
+ build: "npm run generate-chains && NODE_OPTIONS=--max-old-space-size=16384 vite build",
53547
+ "watch:build": "vite build --watch",
53548
+ lint: "NODE_OPTIONS=--max-old-space-size=32384 eslint . --fix",
53549
+ preview: "vite preview",
53550
+ "build:web-component": "NODE_OPTIONS=--max-old-space-size=32384 webpack --config webpack.config.js",
53551
+ "publish:web-component": "npm run build:web-component && cd web-component && npm publish && cd ..",
53552
+ prepack: "yarn run pre",
53553
+ postpack: "yarn run post",
53554
+ pre: "npm run build && node scripts/prepublish.cjs",
53555
+ post: "git checkout -- package.json",
53556
+ "generate-chains": "node scripts/generate-chains.cjs",
53557
+ "update-registries": "yarn up @initia/initia-registry chain-registry",
53558
+ test: "yarn playwright test",
53559
+ "update-screenshots": "UPDATE_SCREENSHOTS=true yarn playwright test Keplr.test.tsx",
53560
+ "combine-images": "node scripts/combine-images.mjs"
53561
+ };
53562
+ const exports = {
53563
+ ".": {
53564
+ types: "./build/index.d.ts",
53565
+ "import": "./build/index.js"
53566
+ }
53567
+ };
53568
+ const types = "./build/index.d.ts";
53569
+ const files = [
53570
+ "build",
53571
+ "README.md"
53572
+ ];
53573
+ const devDependencies = {
53574
+ "@chromatic-com/storybook": "^1.6.1",
53575
+ "@eslint/js": "^9.9.0",
53576
+ "@initia/initia-registry": "^1.0.6",
53577
+ "@keplr-wallet/types": "^0.12.125",
53578
+ "@playwright/test": "^1.51.1",
53579
+ "@storybook/addon-essentials": "^8.2.6",
53580
+ "@storybook/addon-interactions": "^8.2.6",
53581
+ "@storybook/addon-links": "^8.2.6",
53582
+ "@storybook/addon-onboarding": "^8.2.6",
53583
+ "@storybook/blocks": "^8.2.6",
53584
+ "@storybook/react": "^8.2.6",
53585
+ "@storybook/react-vite": "^8.2.6",
53586
+ "@storybook/test": "^8.2.6",
53587
+ "@testing-library/dom": "^10.4.0",
53588
+ "@testing-library/react": "^16.2.0",
53589
+ "@types/eslint__js": "^8.42.3",
53590
+ "@types/pluralize": "^0.0.33",
53591
+ "@types/pngjs": "^6.0.5",
53592
+ "@types/react": "^19.0.10",
53593
+ "@types/react-dom": "^19.0.4",
53594
+ "@typescript-eslint/eslint-plugin": "^7.15.0",
53595
+ "@typescript-eslint/parser": "^7.15.0",
53596
+ "@vitejs/plugin-react": "^4.3.1",
53597
+ buffer: "^6.0.3",
53598
+ "chain-registry": "^2.0.34",
53599
+ download: "^8.0.0",
53600
+ eslint: "^9.9.0",
53601
+ "eslint-config-prettier": "^9.1.0",
53602
+ "eslint-plugin-prettier": "^5.2.1",
53603
+ "eslint-plugin-react-hooks": "^4.6.2",
53604
+ "fs-extra": "^11.3.0",
53605
+ "node-polyfill-webpack-plugin": "^4.0.0",
53606
+ "pino-pretty": "^13.0.0",
53607
+ pixelmatch: "^7.1.0",
53608
+ pngjs: "^7.0.0",
53609
+ "postcss-loader": "^8.1.1",
53610
+ prettier: "^3.4.2",
53611
+ process: "^0.11.10",
53612
+ pureimage: "^0.4.18",
53613
+ "raw-loader": "^4.0.2",
53614
+ react: ">=17.0.0",
53615
+ "react-dom": ">=17.0.0",
53616
+ starknet: "6.11.0",
53617
+ storybook: "^8.2.6",
53618
+ "ts-loader": "^9.5.1",
53619
+ typescript: "^5.5.4",
53620
+ "typescript-eslint": "^8.2.0",
53621
+ "url-loader": "^4.1.1",
53622
+ vite: "^5.3.4",
53623
+ "vite-plugin-dts": "^4.0.0-beta.1",
53624
+ "vite-plugin-node-polyfills": "^0.22.0",
53625
+ webpack: "^5.94.0",
53626
+ "webpack-cli": "^5.1.4"
53627
+ };
53628
+ const peerDependencies = {
53629
+ "@tanstack/react-query": "^5.51.21",
53630
+ react: ">=17.0.0",
53631
+ "react-dom": ">=17.0.0",
53632
+ viem: "^2.21.55",
53633
+ wagmi: "^2.14.1"
53634
+ };
53635
+ const dependencies = {
53636
+ "@amplitude/analytics-browser": "^2.11.12",
53637
+ "@amplitude/plugin-session-replay-browser": "^1.16.5",
53638
+ "@cosmjs/amino": "0.33.1",
53639
+ "@cosmjs/cosmwasm-stargate": "0.33.1",
53640
+ "@cosmjs/encoding": "0.33.1",
53641
+ "@cosmjs/math": "0.33.1",
53642
+ "@cosmjs/proto-signing": "0.33.1",
53643
+ "@cosmjs/stargate": "0.33.1",
53644
+ "@ebay/nice-modal-react": "^1.2.13",
53645
+ "@eslint/compat": "^1.1.1",
53646
+ "@penumbra-zone/bech32m": "^13.0.0",
53647
+ "@penumbra-zone/client": "^24.0.0",
53648
+ "@penumbra-zone/protobuf": "^7.2.0",
53649
+ "@penumbra-zone/transport-dom": "^7.5.0",
53650
+ "@r2wc/react-to-web-component": "^2.0.3",
53651
+ "@skip-go/client": "workspace:^",
53652
+ "@solana/spl-token": "^0.4.8",
53653
+ "@solana/wallet-adapter-ledger": "^0.9.25",
53654
+ "@solana/wallet-adapter-react": "^0.15.39",
53655
+ "@solana/wallet-adapter-wallets": "^0.19.37",
53656
+ "@solana/web3.js": "^1.95.8",
53657
+ "@tanstack/query-core": "^5.51.21",
53658
+ "@walletconnect/modal": "^2.7.0",
53659
+ "@walletconnect/sign-client": "^2.20.3",
53660
+ "@walletconnect/solana-adapter": "^0.0.8",
53661
+ add: "^2.0.6",
53662
+ bech32: "^2.0.0",
53663
+ graz: "0.3.3",
53664
+ jotai: "^2.10.1",
53665
+ "jotai-effect": "^1.0.2",
53666
+ "jotai-tanstack-query": "^0.8.6",
53667
+ "lodash.debounce": "^4.0.8",
53668
+ pluralize: "^8.0.0",
53669
+ "rc-virtual-list": "^3.14.5",
53670
+ "react-error-boundary": "^4.0.13",
53671
+ "react-shadow-scope": "^1.0.5",
53672
+ "styled-components": "^6.1.13",
53673
+ uuid: "^11.1.0",
53674
+ yarn: "^1.22.22",
53675
+ zod: "^3.23.8"
53676
+ };
53677
+ const publishConfig = {
53678
+ access: "public"
53679
+ };
53680
+ const packageJson = {
53681
+ name,
53682
+ description,
53683
+ version,
53684
+ repository,
53685
+ type,
53686
+ scripts,
53687
+ exports,
53688
+ types,
53689
+ files,
53690
+ devDependencies,
53691
+ peerDependencies,
53692
+ dependencies,
53693
+ publishConfig
53694
+ };
53695
+ let isAmplitudeInitialized = false;
53696
+ const initAmplitude = () => {
53697
+ if (isAmplitudeInitialized) return;
53698
+ init("14616a575f32087cf0403ab8f3ea3ce0", {
53699
+ appVersion: version
53700
+ });
53701
+ isAmplitudeInitialized = true;
53702
+ };
53703
+ const startAmplitudeSessionReplay = () => {
53704
+ if (isAmplitudeInitialized) {
53705
+ const plugin = sessionReplayPlugin({
53706
+ sampleRate: 1
53707
+ });
53708
+ add(plugin);
53709
+ }
53710
+ };
52511
53711
  const SwapPage = () => {
52512
53712
  var _a;
52513
53713
  const { SettingsFooter, drawerOpen } = useSettingsDrawer();
@@ -52538,6 +53738,7 @@ const SwapPage = () => {
52538
53738
  const getBalance = useGetBalance();
52539
53739
  const callbacks = useAtomValue(callbacksAtom);
52540
53740
  const setChainAddresses = useSetAtom(chainAddressesAtom);
53741
+ const setFeeRouteChainAddresses = useSetAtom(feeRouteChainAddressesAtom);
52541
53742
  useFetchAllBalances();
52542
53743
  useCleanupDebouncedAtoms();
52543
53744
  useUpdateAmountWhenRouteChanges();
@@ -52660,9 +53861,12 @@ const SwapPage = () => {
52660
53861
  var _a2;
52661
53862
  const formattedUsdAmount = (_a2 = getTotalFees(fees2)) == null ? void 0 : _a2.formattedUsdAmount;
52662
53863
  if (formattedUsdAmount) {
52663
- return `${formattedUsdAmount} in fees`;
53864
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(SmallText, { color: "inherit", children: [
53865
+ formattedUsdAmount,
53866
+ " in fees"
53867
+ ] }) });
52664
53868
  }
52665
- return "no fees";
53869
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(SmallText, { color: "inherit", children: "no fees" }) });
52666
53870
  }, [fees2]);
52667
53871
  const feeWarning = useMemo(() => {
52668
53872
  if (!(route2 == null ? void 0 : route2.usdAmountIn) || !(route2 == null ? void 0 : route2.usdAmountOut)) return false;
@@ -52728,6 +53932,7 @@ const SwapPage = () => {
52728
53932
  }
52729
53933
  const onClick = () => {
52730
53934
  var _a3, _b;
53935
+ startAmplitudeSessionReplay();
52731
53936
  track("swap page: continue button - clicked", {
52732
53937
  route: route2,
52733
53938
  type: isSwapOperation ? "swap" : "send",
@@ -52738,6 +53943,7 @@ const SwapPage = () => {
52738
53943
  startTransition(() => {
52739
53944
  setError(void 0);
52740
53945
  setChainAddresses({});
53946
+ setFeeRouteChainAddresses({});
52741
53947
  setSwapExecutionState();
52742
53948
  setCurrentPage(Routes.SwapExecutionPage);
52743
53949
  });
@@ -52830,6 +54036,7 @@ const SwapPage = () => {
52830
54036
  showGoFastWarning,
52831
54037
  isGoFast,
52832
54038
  setChainAddresses,
54039
+ setFeeRouteChainAddresses,
52833
54040
  setCurrentPage,
52834
54041
  setSwapExecutionState,
52835
54042
  setError
@@ -52936,7 +54143,10 @@ const TransactionHistoryPageHistoryItemDetails = ({
52936
54143
  absoluteTimeString,
52937
54144
  onClickDelete,
52938
54145
  transferAssetRelease,
52939
- transactionDetails
54146
+ transactionDetails,
54147
+ feeAssetRouteDetails,
54148
+ senderAddress,
54149
+ receiverAddress
52940
54150
  }) => {
52941
54151
  var _a;
52942
54152
  const theme = nt();
@@ -53006,6 +54216,18 @@ const TransactionHistoryPageHistoryItemDetails = ({
53006
54216
  }
53007
54217
  )
53008
54218
  ] }),
54219
+ senderAddress && /* @__PURE__ */ jsxs(StyledHistoryItemDetailRow, { align: "center", children: [
54220
+ /* @__PURE__ */ jsx(StyledDetailsLabel, { children: "Sender" }),
54221
+ /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, children: senderAddress })
54222
+ ] }),
54223
+ receiverAddress && /* @__PURE__ */ jsxs(StyledHistoryItemDetailRow, { align: "center", children: [
54224
+ /* @__PURE__ */ jsx(StyledDetailsLabel, { children: "Receiver" }),
54225
+ /* @__PURE__ */ jsx(SmallText, { normalTextColor: true, children: receiverAddress })
54226
+ ] }),
54227
+ feeAssetRouteDetails && /* @__PURE__ */ jsx(StyledHistoryItemDetailRow, { align: "center", children: /* @__PURE__ */ jsxs(Column, { width: "100%", children: [
54228
+ /* @__PURE__ */ jsx(Spacer, { height: 20, showLine: true, lineColor: theme.secondary.background.transparent }),
54229
+ /* @__PURE__ */ jsx(GasOnReceive, { hideContainer: true, routeDetails: feeAssetRouteDetails })
54230
+ ] }) }),
53009
54231
  /* @__PURE__ */ jsx(Row, { align: "center", style: { marginTop: 10, padding: "0px 10px" }, children: /* @__PURE__ */ jsxs(Button, { onClick: onClickDelete, gap: 5, align: "center", children: [
53010
54232
  /* @__PURE__ */ jsx(SmallText, { color: theme.error.text, children: "Delete" }),
53011
54233
  /* @__PURE__ */ jsx(TrashIcon, { color: theme.error.text })
@@ -53671,6 +54893,7 @@ const TransactionHistoryPageHistoryItem = forwardRef(
53671
54893
  onClickRow,
53672
54894
  onClickDelete
53673
54895
  }, ref) => {
54896
+ var _a, _b;
53674
54897
  const theme = nt();
53675
54898
  const isMobileScreenSize = useIsMobileScreenSize();
53676
54899
  const historyItem = useTxHistory({
@@ -53689,10 +54912,21 @@ const TransactionHistoryPageHistoryItem = forwardRef(
53689
54912
  timestamp,
53690
54913
  transactionDetails
53691
54914
  } = txHistoryItem;
54915
+ const totalSourceTokenAmount = useMemo(() => {
54916
+ var _a2;
54917
+ const totalRelatedRouteSourceAmount = ((_a2 = txHistoryItem == null ? void 0 : txHistoryItem.relatedRoutes) == null ? void 0 : _a2.reduce(
54918
+ (acc, routeDetail) => {
54919
+ var _a3;
54920
+ return BigNumber(acc).plus(BigNumber(((_a3 = routeDetail.route) == null ? void 0 : _a3.amountIn) || 0)).toNumber();
54921
+ },
54922
+ 0
54923
+ )) ?? 0;
54924
+ return BigNumber(amountIn ?? 0).plus(BigNumber(totalRelatedRouteSourceAmount)).toString();
54925
+ }, [amountIn, txHistoryItem]);
53692
54926
  const sourceAssetDetails = useGetAssetDetails({
53693
54927
  assetDenom: sourceAssetDenom,
53694
54928
  chainId: sourceAssetChainId,
53695
- tokenAmount: amountIn
54929
+ tokenAmount: totalSourceTokenAmount
53696
54930
  });
53697
54931
  const destinationAssetDetails = useGetAssetDetails({
53698
54932
  assetDenom: destAssetDenom,
@@ -53711,6 +54945,10 @@ const TransactionHistoryPageHistoryItem = forwardRef(
53711
54945
  assetImage: destinationAssetDetails.assetImage ?? "",
53712
54946
  chainName: destinationAssetDetails.chainName
53713
54947
  };
54948
+ const feeAssetRouteDetails = useMemo(() => {
54949
+ var _a2, _b2;
54950
+ return ((_a2 = historyItem == null ? void 0 : historyItem.relatedRoutes) == null ? void 0 : _a2[0]) || ((_b2 = txHistoryItem == null ? void 0 : txHistoryItem.relatedRoutes) == null ? void 0 : _b2[0]);
54951
+ }, [historyItem, txHistoryItem]);
53714
54952
  const renderStatus = useMemo(() => {
53715
54953
  switch (historyItem == null ? void 0 : historyItem.status) {
53716
54954
  case "unconfirmed":
@@ -53755,6 +54993,36 @@ const TransactionHistoryPageHistoryItem = forwardRef(
53755
54993
  addSuffix: true
53756
54994
  }).replace("minutes", "mins").replace("minute", "min").replace("hours", "hrs").replace("hour", "hr").replace("seconds", "secs").replace("second", "sec").replace("months", "mos").replace("month", "mo").replace("years", "yrs").replace("year", "yr");
53757
54995
  }, [historyItem == null ? void 0 : historyItem.status, timestamp]);
54996
+ const senderAddress = useMemo(() => {
54997
+ var _a2, _b2;
54998
+ return (_b2 = (_a2 = historyItem == null ? void 0 : historyItem.userAddresses) == null ? void 0 : _a2.find(
54999
+ (address) => {
55000
+ var _a3;
55001
+ return address.chainId === ((_a3 = historyItem == null ? void 0 : historyItem.route) == null ? void 0 : _a3.sourceAssetChainId);
55002
+ }
55003
+ )) == null ? void 0 : _b2.address;
55004
+ }, [(_a = historyItem == null ? void 0 : historyItem.route) == null ? void 0 : _a.sourceAssetChainId, historyItem == null ? void 0 : historyItem.userAddresses]);
55005
+ const receiverAddress = useMemo(() => {
55006
+ var _a2, _b2, _c, _d;
55007
+ if ((historyItem == null ? void 0 : historyItem.transferAssetRelease) !== void 0) {
55008
+ return (_b2 = (_a2 = historyItem == null ? void 0 : historyItem.userAddresses) == null ? void 0 : _a2.find(
55009
+ (address) => {
55010
+ var _a3;
55011
+ return address.chainId === ((_a3 = historyItem == null ? void 0 : historyItem.transferAssetRelease) == null ? void 0 : _a3.chainId);
55012
+ }
55013
+ )) == null ? void 0 : _b2.address;
55014
+ }
55015
+ return (_d = (_c = historyItem == null ? void 0 : historyItem.userAddresses) == null ? void 0 : _c.find(
55016
+ (address) => {
55017
+ var _a3;
55018
+ return address.chainId === ((_a3 = historyItem == null ? void 0 : historyItem.route) == null ? void 0 : _a3.destAssetChainId);
55019
+ }
55020
+ )) == null ? void 0 : _d.address;
55021
+ }, [
55022
+ (_b = historyItem == null ? void 0 : historyItem.route) == null ? void 0 : _b.destAssetChainId,
55023
+ historyItem == null ? void 0 : historyItem.transferAssetRelease,
55024
+ historyItem == null ? void 0 : historyItem.userAddresses
55025
+ ]);
53758
55026
  if (!txHistoryItem.route) return null;
53759
55027
  return /* @__PURE__ */ jsxs(StyledHistoryContainer, { ref, showDetails, children: [
53760
55028
  /* @__PURE__ */ jsxs(StyledHistoryItemRow, { align: "center", justify: "space-between", onClick: onClickRow, children: [
@@ -53780,7 +55048,10 @@ const TransactionHistoryPageHistoryItem = forwardRef(
53780
55048
  removeTransactionHistoryItem(txHistoryItem.timestamp);
53781
55049
  onClickDelete == null ? void 0 : onClickDelete();
53782
55050
  },
53783
- transferAssetRelease: historyItem == null ? void 0 : historyItem.transferAssetRelease
55051
+ transferAssetRelease: historyItem == null ? void 0 : historyItem.transferAssetRelease,
55052
+ feeAssetRouteDetails,
55053
+ senderAddress,
55054
+ receiverAddress
53784
55055
  }
53785
55056
  )
53786
55057
  ] });
@@ -54048,176 +55319,6 @@ const useMobileRouteConfig = () => {
54048
55319
  }));
54049
55320
  }, [isMobile2, setRouteConfig]);
54050
55321
  };
54051
- const name = "@skip-go/widget";
54052
- const description = "Swap widget";
54053
- const version = "3.13.0";
54054
- const repository = {
54055
- url: "https://github.com/skip-mev/skip-go",
54056
- directory: "packages/widget"
54057
- };
54058
- const type = "module";
54059
- const scripts = {
54060
- dev: "vite --force --host",
54061
- "dev:visual-test": "VISUAL_TEST=true yarn dev",
54062
- "dev:storybook": "storybook dev -p 6006",
54063
- build: "npm run generate-chains && NODE_OPTIONS=--max-old-space-size=16384 vite build",
54064
- "watch:build": "vite build --watch",
54065
- lint: "NODE_OPTIONS=--max-old-space-size=32384 eslint . --fix",
54066
- preview: "vite preview",
54067
- "build:web-component": "NODE_OPTIONS=--max-old-space-size=32384 webpack --config webpack.config.js",
54068
- "publish:web-component": "npm run build:web-component && cd web-component && npm publish && cd ..",
54069
- prepack: "yarn run pre",
54070
- postpack: "yarn run post",
54071
- pre: "npm run build && node scripts/prepublish.cjs",
54072
- post: "git checkout -- package.json",
54073
- "generate-chains": "node scripts/generate-chains.cjs",
54074
- "update-registries": "yarn up @initia/initia-registry chain-registry",
54075
- test: "yarn playwright test",
54076
- "update-screenshots": "UPDATE_SCREENSHOTS=true yarn playwright test Keplr.test.tsx",
54077
- "combine-images": "node scripts/combine-images.mjs"
54078
- };
54079
- const exports = {
54080
- ".": {
54081
- types: "./build/index.d.ts",
54082
- "import": "./build/index.js"
54083
- }
54084
- };
54085
- const types = "./build/index.d.ts";
54086
- const files = [
54087
- "build",
54088
- "README.md"
54089
- ];
54090
- const devDependencies = {
54091
- "@chromatic-com/storybook": "^1.6.1",
54092
- "@eslint/js": "^9.9.0",
54093
- "@initia/initia-registry": "^1.0.6",
54094
- "@keplr-wallet/types": "^0.12.125",
54095
- "@playwright/test": "^1.51.1",
54096
- "@storybook/addon-essentials": "^8.2.6",
54097
- "@storybook/addon-interactions": "^8.2.6",
54098
- "@storybook/addon-links": "^8.2.6",
54099
- "@storybook/addon-onboarding": "^8.2.6",
54100
- "@storybook/blocks": "^8.2.6",
54101
- "@storybook/react": "^8.2.6",
54102
- "@storybook/react-vite": "^8.2.6",
54103
- "@storybook/test": "^8.2.6",
54104
- "@testing-library/dom": "^10.4.0",
54105
- "@testing-library/react": "^16.2.0",
54106
- "@types/eslint__js": "^8.42.3",
54107
- "@types/pluralize": "^0.0.33",
54108
- "@types/pngjs": "^6.0.5",
54109
- "@types/react": "^19.0.10",
54110
- "@types/react-dom": "^19.0.4",
54111
- "@typescript-eslint/eslint-plugin": "^7.15.0",
54112
- "@typescript-eslint/parser": "^7.15.0",
54113
- "@vitejs/plugin-react": "^4.3.1",
54114
- buffer: "^6.0.3",
54115
- "chain-registry": "^2.0.18",
54116
- download: "^8.0.0",
54117
- eslint: "^9.9.0",
54118
- "eslint-config-prettier": "^9.1.0",
54119
- "eslint-plugin-prettier": "^5.2.1",
54120
- "eslint-plugin-react-hooks": "^4.6.2",
54121
- "fs-extra": "^11.3.0",
54122
- "node-polyfill-webpack-plugin": "^4.0.0",
54123
- "pino-pretty": "^13.0.0",
54124
- pixelmatch: "^7.1.0",
54125
- pngjs: "^7.0.0",
54126
- "postcss-loader": "^8.1.1",
54127
- prettier: "^3.4.2",
54128
- process: "^0.11.10",
54129
- pureimage: "^0.4.18",
54130
- "raw-loader": "^4.0.2",
54131
- react: ">=17.0.0",
54132
- "react-dom": ">=17.0.0",
54133
- starknet: "6.11.0",
54134
- storybook: "^8.2.6",
54135
- "ts-loader": "^9.5.1",
54136
- typescript: "^5.5.4",
54137
- "typescript-eslint": "^8.2.0",
54138
- "url-loader": "^4.1.1",
54139
- vite: "^5.3.4",
54140
- "vite-plugin-dts": "^4.0.0-beta.1",
54141
- "vite-plugin-node-polyfills": "^0.22.0",
54142
- webpack: "^5.94.0",
54143
- "webpack-cli": "^5.1.4"
54144
- };
54145
- const peerDependencies = {
54146
- "@tanstack/react-query": "^5.51.21",
54147
- react: ">=17.0.0",
54148
- "react-dom": ">=17.0.0",
54149
- viem: "^2.21.55",
54150
- wagmi: "^2.14.1"
54151
- };
54152
- const dependencies = {
54153
- "@amplitude/analytics-browser": "^2.11.12",
54154
- "@amplitude/plugin-session-replay-browser": "^1.16.5",
54155
- "@cosmjs/amino": "0.33.1",
54156
- "@cosmjs/cosmwasm-stargate": "0.33.1",
54157
- "@cosmjs/encoding": "0.33.1",
54158
- "@cosmjs/math": "0.33.1",
54159
- "@cosmjs/proto-signing": "0.33.1",
54160
- "@cosmjs/stargate": "0.33.1",
54161
- "@ebay/nice-modal-react": "^1.2.13",
54162
- "@eslint/compat": "^1.1.1",
54163
- "@penumbra-zone/bech32m": "^13.0.0",
54164
- "@penumbra-zone/client": "^24.0.0",
54165
- "@penumbra-zone/protobuf": "^7.2.0",
54166
- "@penumbra-zone/transport-dom": "^7.5.0",
54167
- "@r2wc/react-to-web-component": "^2.0.3",
54168
- "@skip-go/client": "workspace:^",
54169
- "@solana/spl-token": "^0.4.8",
54170
- "@solana/wallet-adapter-ledger": "^0.9.25",
54171
- "@solana/wallet-adapter-react": "^0.15.39",
54172
- "@solana/wallet-adapter-wallets": "^0.19.37",
54173
- "@solana/web3.js": "^1.95.8",
54174
- "@tanstack/query-core": "^5.51.21",
54175
- "@walletconnect/modal": "^2.7.0",
54176
- "@walletconnect/sign-client": "^2.20.3",
54177
- "@walletconnect/solana-adapter": "^0.0.8",
54178
- add: "^2.0.6",
54179
- bech32: "^2.0.0",
54180
- graz: "0.3.3",
54181
- jotai: "^2.10.1",
54182
- "jotai-effect": "^1.0.2",
54183
- "jotai-tanstack-query": "^0.8.6",
54184
- "lodash.debounce": "^4.0.8",
54185
- pluralize: "^8.0.0",
54186
- "rc-virtual-list": "^3.14.5",
54187
- "react-error-boundary": "^4.0.13",
54188
- "react-shadow-scope": "^1.0.5",
54189
- "styled-components": "^6.1.13",
54190
- uuid: "^11.1.0",
54191
- yarn: "^1.22.22",
54192
- zod: "^3.23.8"
54193
- };
54194
- const publishConfig = {
54195
- access: "public"
54196
- };
54197
- const packageJson = {
54198
- name,
54199
- description,
54200
- version,
54201
- repository,
54202
- type,
54203
- scripts,
54204
- exports,
54205
- types,
54206
- files,
54207
- devDependencies,
54208
- peerDependencies,
54209
- dependencies,
54210
- publishConfig
54211
- };
54212
- const initAmplitude = () => {
54213
- init("14616a575f32087cf0403ab8f3ea3ce0", {
54214
- appVersion: version
54215
- });
54216
- const plugin = sessionReplayPlugin({
54217
- sampleRate: 1
54218
- });
54219
- add(plugin);
54220
- };
54221
55322
  const useInitWidget = (props) => {
54222
55323
  var _a, _b;
54223
55324
  if (props.enableAmplitudeAnalytics) {
@@ -54247,16 +55348,18 @@ const useInitWidget = (props) => {
54247
55348
  const getSigners = useAtomValue(getConnectedSignersAtom);
54248
55349
  const wallets = useAtomValue(walletsAtom);
54249
55350
  const mergedSkipClientConfig = useMemo(() => {
54250
- const { apiUrl, chainIdsToAffiliates, endpointOptions: endpointOptions2 } = props;
55351
+ const { apiUrl, chainIdsToAffiliates, endpointOptions: endpointOptions2, apiKey } = props;
54251
55352
  const fromWidgetProps = {
54252
55353
  apiUrl,
54253
55354
  chainIdsToAffiliates,
54254
- endpointOptions: endpointOptions2
55355
+ endpointOptions: endpointOptions2,
55356
+ apiKey
54255
55357
  };
54256
55358
  return {
54257
55359
  apiUrl: fromWidgetProps.apiUrl ?? defaultSkipClientConfig.apiUrl,
54258
55360
  endpointOptions: fromWidgetProps.endpointOptions ?? defaultSkipClientConfig.endpointOptions,
54259
- chainIdsToAffiliates: fromWidgetProps.chainIdsToAffiliates ?? {}
55361
+ chainIdsToAffiliates: fromWidgetProps.chainIdsToAffiliates ?? {},
55362
+ apiKey: fromWidgetProps.apiKey
54260
55363
  };
54261
55364
  }, [props]);
54262
55365
  const mergedTheme = useMemo(() => {
@@ -54488,6 +55591,50 @@ const getTransactionDetailsWithSimpleTransactionDetailsStatus = (transactionDeta
54488
55591
  };
54489
55592
  });
54490
55593
  };
55594
+ const updateHistoryFromRouteDetailsToUserAddresses = () => {
55595
+ const { set } = jotaiStore;
55596
+ try {
55597
+ const transactionHistoryVersion = JSON.parse(
55598
+ localStorage.getItem(LOCAL_STORAGE_KEYS.transactionHistoryVersion) ?? "0"
55599
+ );
55600
+ const transactionHistory = JSON.parse(
55601
+ localStorage.getItem(LOCAL_STORAGE_KEYS.transactionHistory) ?? "[]"
55602
+ );
55603
+ if (!transactionHistory) {
55604
+ throw new Error("transactionHistory not found in localStorage");
55605
+ }
55606
+ if (transactionHistoryVersion === HISTORY_VERSION.routeDetails) {
55607
+ const updatedTransactionHistory = transactionHistory.map((txHistoryItem) => {
55608
+ const { senderAddress, receiverAddress, ...rest } = txHistoryItem;
55609
+ return {
55610
+ ...rest,
55611
+ userAddresses: [
55612
+ {
55613
+ chainId: txHistoryItem.route.sourceAssetChainId,
55614
+ address: senderAddress
55615
+ },
55616
+ {
55617
+ chainId: txHistoryItem.route.destAssetChainId,
55618
+ address: receiverAddress
55619
+ }
55620
+ ]
55621
+ };
55622
+ });
55623
+ localStorage.setItem(
55624
+ LOCAL_STORAGE_KEYS.transactionHistory,
55625
+ JSON.stringify(updatedTransactionHistory)
55626
+ );
55627
+ console.info(
55628
+ `updated from transactionHistoryVersion ${HISTORY_VERSION.routeDetails} to ${HISTORY_VERSION.userAddresses}`
55629
+ );
55630
+ set(transactionHistoryVersionAtom, HISTORY_VERSION.userAddresses);
55631
+ }
55632
+ } catch {
55633
+ console.warn(
55634
+ `Failed to update transactionHistoryVersion from ${HISTORY_VERSION.routeDetails} to ${HISTORY_VERSION.userAddresses}`
55635
+ );
55636
+ }
55637
+ };
54491
55638
  const migrateOldLocalStorageValues = () => {
54492
55639
  if (typeof window === "undefined") return;
54493
55640
  const { set } = jotaiStore;
@@ -54528,6 +55675,7 @@ const migrateOldLocalStorageValues = () => {
54528
55675
  }
54529
55676
  });
54530
55677
  updateHistoryFromCamelCaseToRouteDetails();
55678
+ updateHistoryFromRouteDetailsToUserAddresses();
54531
55679
  };
54532
55680
  function toCamelCase(obj) {
54533
55681
  return convertKeys(obj, (key) => {