@nexus-cross/connect-kit-react 1.3.3-beta.1 → 1.3.3-beta.10

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.
@@ -0,0 +1,143 @@
1
+ var st="1.3.3";var mt="__nexusCrossAppLauncherRuntime";function Xn(){if(typeof window>"u")return null;let e=window;return e[mt]??(e[mt]={mode:"dapp-ui"}),e[mt]}function Yn(e){if(e.scheduled)return;e.scheduled=!0;let t=()=>{if(e.scheduled=!1,e.loggedMode!==e.mode){if(e.mode==="connect-kit-react"){let o=e.connectKitVersion??st;console.info(`[CROSSx App Launcher] connect-kit-react v${o} \uCD08\uAE30\uD654 \uC644\uB8CC (dapp-ui v${st}, \uC0AC\uC6A9 \uBAA8\uB4DC: connect-kit)`)}else console.info(`[CROSSx App Launcher] dapp-ui v${st} \uCD08\uAE30\uD654 \uC644\uB8CC (\uC0AC\uC6A9 \uBAA8\uB4DC: dapp-ui only)`);e.loggedMode=e.mode}};typeof queueMicrotask=="function"?queueMicrotask(t):Promise.resolve().then(t)}function qt(){let e=Xn();e&&(e.mode="connect-kit-react",e.connectKitVersion=st,Yn(e))}import{useCallback as Pe,useEffect as ae,useMemo as Ge,useRef as je,useState as Ue}from"react";import{WagmiProvider as ro,useAccount as so,useChainId as io,useConnect as ao,useDisconnect as co,useSwitchChain as lo}from"wagmi";import{QueryClient as uo,QueryClientProvider as mo}from"@tanstack/react-query";import{clearWalletSessionStorage as jt,onOpenOtherWallets as po,pickInitialState as fo,resolveCurrentWallet as go}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as bo}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as yo}from"@nexus-cross/crossx-design-system";import{OnRampProvider as wo}from"@nexus-cross/onramp/react";import{createContext as Zn,useContext as Jn}from"react";var kt=Zn(null);function Oe(){let e=Jn(kt);if(!e)throw new Error("useCrossConnectKit must be used within <CrossConnectKitProvider>");return e}import{createContext as eo,useContext as Ht}from"react";var pt=eo(null);function to(){let e=Ht(pt);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function it(){return Ht(pt)}import{useCallback as no,useMemo as Vt}from"react";import{WalletConnectModal as zt}from"@nexus-cross/dapp-ui";import{jsx as Qt}from"react/jsx-runtime";var oo=new Set(["cross_wallet","cross_extension","metamask","binance"]);function xt({open:e,onOpenChange:t}){let{connect:o,availableWallets:s,oauth:n,extraWallets:a,walletAllowlist:g,kitConfig:f}=Oe(),p=it()?.mode??"dark",w=Vt(()=>{let m=g?new Set(g):null,x={};for(let P of s){if(!oo.has(P.walletId)||m&&!m.has(P.walletId))continue;let h=P.walletId;x[h]=()=>{o(P.walletId)}}for(let[P,h]of Object.entries(a))h&&(m&&!m.has(P)||(x[P]=h));return x},[s,o,a,g]),T=Vt(()=>{if(n)return{apple:()=>{n.signIn("apple")},google:()=>{n.signIn("google")}}},[n]),S=no(m=>t(m),[t]);return Qt(zt,{wallets:w,socialProviders:T,termsUrl:f.legal?.termsUrl,privacyUrl:f.legal?.privacyUrl,theme:p,open:e,onOpenChange:S,children:Qt(zt.Content,{})})}import{jsx as et,jsxs as Zt}from"react/jsx-runtime";var ho=new uo,Tt="crossx-kit:last-wallet-intent",Co=15e3;function Xt(e,t){return Promise.race([e.then(()=>{},()=>{}),new Promise(o=>setTimeout(o,t))])}function ko(e){let t=[],o=e,s=0;for(;o&&s<5;){let n=o;typeof n.message=="string"&&t.push(n.message),o=n.cause,s+=1}return t.some(n=>/external wallet connection/i.test(n))}function xo(){if(typeof window>"u")return null;try{return window.localStorage.getItem(Tt)??null}catch{return null}}function Yt(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(Tt,e):window.localStorage.removeItem(Tt)}catch{}}function To(e,t){if(typeof window>"u")return t;try{let o=window.localStorage.getItem(e);return o==="cross"||o==="reown"?o:t}catch{return t}}function Io(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function So({children:e,config:t,activeProvider:o,onRequestProviderSwap:s,pendingConnectWalletId:n,clearPending:a,themeMode:g,themeTokens:f,extraWallets:b,walletAllowlist:p}){let[w,T]=Ue(!1),[S,m]=Ue(()=>xo()),[x,P]=Ue(null),{address:h,isConnected:C,isConnecting:_,isReconnecting:O,connector:K}=so(),{connectors:te,connectAsync:V}=ao(),{disconnectAsync:$}=co(),{kitConfig:D,connectorRegistry:G,crossProvider:he,reownProvider:E}=t,A=o==="cross"?he:E,W=Ge(()=>!C||!K?null:go(G,K.id,S),[C,K,G,S]),Ce=Ge(()=>G.entries.filter(u=>u.type!=="embedded"),[G]),Ve=je(h);Ve.current=h;let j=D.embeddedProjectId?.trim()||D.crossProjectId?.trim(),q=!!D.onRampEnabled&&!!j,ue=Ge(()=>!q||!j?null:{projectId:j,walletState:{getAddress:()=>Ve.current}},[q,j]);ae(()=>po(()=>T(!0)),[]),ae(()=>{if(!w||typeof document>"u")return;let u=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(d=>d.remove())},50);return()=>clearTimeout(u)},[w]);let be=je(C),De=je(C);be.current=C;let We=je(!1);ae(()=>{console.debug("[crossx-kit] state",{activeProvider:o,isConnected:C,isConnecting:_,isReconnecting:O,activeConnectorId:K?.id,currentWallet:W,lastIntent:S})},[o,C,_,O,K?.id,W,S]),ae(()=>{C&&!De.current&&A?.closeModal?.({kitConfig:D}),De.current=C},[C,A,D]),ae(()=>{C&&P(null)},[C]);let ze=io(),{switchChainAsync:Le}=lo(),me=je(null);ae(()=>{if(!D.enforceDefaultNetworkOnConnect)return;let u=D.defaultNetwork?.id;if(!u)return;if(!C||!h||!K){me.current=null;return}let d=`${K.id}:${h}`;me.current!==d&&(me.current=d,ze!==u&&Le({chainId:u}).catch(()=>{}))},[D.enforceDefaultNetworkOnConnect,D.defaultNetwork,C,h,K,ze,Le]);let ie=Pe(u=>te.find(d=>d.id===u),[te]);ae(()=>{let u=G.getEntry("cross_embedded");if(!u)return;let d=ie(u.connectorId);if(!d)return;let I=!1;return(async()=>{try{let y=await d.getProvider();if(I)return;y?.sdk?.applyTheme?.(g,f??void 0)}catch(y){console.debug("[crossx-kit] applyTheme skipped:",y)}})(),()=>{I=!0}},[G,ie,g,f]);let Me=Pe(u=>{m(u),Yt(u)},[]),X=Pe(()=>{m(null),Yt(null),P(null)},[]);ae(()=>{if(!A?.subscribeModalState)return;let u=!1;return A.subscribeModalState({kitConfig:D},d=>{if(We.current=d,d){u=!0;return}u&&(u=!1,setTimeout(()=>{be.current||(async()=>{try{await $()}catch{}X()})()},250))})},[A,D,$,X]),ae(()=>{if(!x||C||typeof window>"u"||x==="cross_embedded")return;let u=typeof document<"u"&&!document.hasFocus(),d=null,I=()=>{u=!0},y=()=>{u&&(d&&clearTimeout(d),d=setTimeout(()=>{be.current||We.current||(async()=>{try{await $()}catch{}X()})()},1e3))};return window.addEventListener("blur",I),window.addEventListener("focus",y),()=>{window.removeEventListener("blur",I),window.removeEventListener("focus",y),d&&clearTimeout(d)}},[x,C,$,X]);let Se=Pe(async u=>{console.debug("[crossx-kit] runConnect enter",{walletId:u,activeProvider:o,isConnected:C,activeConnectorId:K?.id});let d=G.getEntry(u);if(!d){if((u==="metamask"||u==="binance")&&!E){console.error(`[crossx-kit] "${u}" requires the Reown adapter, but it is not configured. Pass \`reownProjectId\` (and ensure \`reown\` is not set to \`false\`) when calling createConnectKitConfig() or createCrossxConfig() to enable WalletConnect-based wallets.`);return}console.error(`[crossx-kit] Unknown walletId: "${u}"`);return}if(P(u),d.providerKind!==o){console.debug("[crossx-kit] provider swap needed",{from:o,to:d.providerKind,walletId:u}),Me(u);try{await $()}catch{}await new Promise(y=>setTimeout(y,0)),s(d.providerKind,u);return}if(Me(u),A?.beforeConnect)try{let y=await A.beforeConnect({kitConfig:D,themeMode:g},u);if(console.debug("[crossx-kit] beforeConnect result",{walletId:u,result:y}),y==="handled")return}catch(y){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',u,y)}let I=ie(d.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:d.connectorId,found:I?.id,availableIds:te.map(y=>y.id)}),!I){console.error(`[crossx-kit] Connector "${d.connectorId}" not found on provider "${d.providerKind}". Available: ${te.map(y=>y.id).join(", ")}`),X();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:I.id});let y=await V({connector:I});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:y.accounts.length,chainId:y.chainId});return}catch(y){if(!ko(y)){console.error('[crossx-kit] connectAsync error for "%s":',u,y);try{await $()}catch{}}if(!d.fallbackConnectorId){X();return}}if(d.fallbackConnectorId){let y=ie(d.fallbackConnectorId);if(y)try{await V({connector:y})}catch(N){console.error('[crossx-kit] Fallback connect failed for "%s":',u,N);try{await $()}catch{}X()}else X()}},[G,te,ie,V,$,Me,X,A,o,D,s,g]);ae(()=>{if(!n)return;let u=n;a(),Se(u)},[n,o]);let r=Pe(async()=>{T(!0)},[]),i=Pe(async()=>{try{await $()}catch(u){console.error("[crossx-kit] wagmi disconnect error:",u)}if(A?.teardown)try{await A.teardown({kitConfig:D})}catch(u){console.error("[crossx-kit] adapter teardown error:",u)}jt(),X()},[$,A,D,X]),c=Pe(async()=>{await Xt($(),3e3);try{let u=G.getEntry("cross_embedded"),d=u&&ie(u.connectorId);if(d?.getProvider){let I=await Promise.race([d.getProvider(),new Promise(N=>setTimeout(N,3e3))]),y=I?.sdk?.signOut;typeof y=="function"&&await Xt(y.call(I.sdk),3e3)}}catch{}jt()},[G,ie,$]),l=Pe(async()=>{let u=G.getEntry("cross_embedded");if(!u)return null;let d=ie(u.connectorId);if(!d)return null;try{let I=await d.getProvider(),y=I?.sdk;if(!y?.selectWallet)return null;let N=await y.selectWallet(y.currentAddress??void 0);return N?.address&&I.notifyAccountsChanged&&I.notifyAccountsChanged([N.address]),N}catch{return null}},[G,ie]),k=Ge(()=>{let u=t.oauth;return u?{signIn:async d=>{P("cross_embedded");try{await u.signIn(d)}catch(I){throw P(null),I}}}:null},[t.oauth]),v=je(!1);ae(()=>{if(o!=="cross"||C||_||O||x!=null||v.current)return;let u=G.getEntry("cross_embedded");if(!u)return;let d=ie(u.connectorId);if(!d)return;v.current=!0;let I=!1;return(async()=>{try{let y=await d.isAuthorized?.();if(I||!y)return;await V({connector:d})}catch{}})(),()=>{I=!0}},[o,C,_,O,x,G,ie,V]),ae(()=>{if(x!=="cross_embedded"||C||typeof window>"u")return;let u=!document.hasFocus(),d=()=>{u=!0};window.addEventListener("blur",d);let I=setTimeout(()=>{be.current||u||(console.warn("[crossx-kit] embedded sign-in stalled before the OAuth popup opened \u2014 clearing the stale session so a retry starts clean"),X(),c())},Co);return()=>{window.removeEventListener("blur",d),clearTimeout(I)}},[x,C,X,c]);let R=x!=null&&!C,B=Ge(()=>({kitConfig:D,connectorRegistry:G,availableWallets:Ce,connect:Se,connectWallet:r,disconnect:i,selectWallet:l,currentWallet:W,lastIntent:S,isConnecting:R,connectingWalletId:x,openOtherWallets:()=>T(!0),closeOtherWallets:()=>T(!1),otherWalletsOpen:w,oauth:k,extraWallets:b,walletAllowlist:p,onRampEnabled:q}),[D,G,Ce,Se,r,i,l,W,S,R,x,w,k,b,p,q]),F=Zt(kt.Provider,{value:B,children:[e,et(xt,{open:w,onOpenChange:T})]});return ue?et(wo,{config:ue,children:F}):F}var vo=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function Po(e){let t=e?.message;return typeof t!="string"?!1:vo.some(o=>o.test(t))}var Ao={};function Ro(e){return e&&{...e,connections:new Map,current:null}}function Bo({children:e,config:t,initialState:o,extraWallets:s=Ao,walletAllowlist:n}){let[a,g]=Ue(()=>To(t.activeProviderStorageKey,t.defaultProvider)),[f,b]=Ue(null),p=je(!1),{kitConfig:w}=t,[T,S]=Ue(null),[m,x]=Ue(null),[P,h]=Ue(0),C=Ge(()=>bo(w.theme,w.autoDetectTheme),[w.theme,w.autoDetectTheme,P]),_=T??C,O=m??w.themeTokens;ae(()=>{if(!w.autoDetectTheme||T||typeof window>"u"||!window.matchMedia)return;let E=window.matchMedia("(prefers-color-scheme: dark)"),A=()=>h(W=>W+1);try{return E.addEventListener("change",A),()=>E.removeEventListener("change",A)}catch{return E.addListener(A),()=>E.removeListener(A)}},[w.autoDetectTheme,T]),ae(()=>{if(typeof document>"u")return;let E=document.documentElement,A=E.getAttribute("data-ds-theme"),W=E.getAttribute("data-theme");return E.setAttribute("data-ds-theme",_),W||E.setAttribute("data-theme",_),()=>{A==null?E.removeAttribute("data-ds-theme"):E.setAttribute("data-ds-theme",A),W==null&&E.removeAttribute("data-theme")}},[_]);let K=Ge(()=>yo(t.designSystem),[t.designSystem]),te=Ge(()=>({mode:_,tokens:O,setThemeMode:E=>S(E),setThemeTokens:E=>x(E)}),[_,O]);ae(()=>{if(typeof window>"u")return;let E=A=>{Po(A.reason)&&A.preventDefault()};return window.addEventListener("unhandledrejection",E),()=>window.removeEventListener("unhandledrejection",E)},[]);let V=Pe((E,A)=>{p.current||(p.current=!0,b(A),g(E),Io(t.activeProviderStorageKey,E),queueMicrotask(()=>{p.current=!1}))},[t.activeProviderStorageKey]),$=Pe(()=>b(null),[]),D=a==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,G=Ro(fo(o,a));if(!D){if(!(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let A=a==="cross"?"reown":"cross";queueMicrotask(()=>g(A))}let he=D??(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return Zt(pt.Provider,{value:te,children:[et("style",{"data-crossx-design-system":"",children:K}),et(ro,{config:he,initialState:G,children:et(mo,{client:ho,children:et(So,{config:t,activeProvider:a,onRequestProviderSwap:V,pendingConnectWalletId:f,clearPending:$,themeMode:_,themeTokens:O,extraWallets:s,walletAllowlist:n??t.kitConfig.wallets??null,children:e})})},a)]})}import{useCallback as qe,useEffect as Ar,useMemo as lt}from"react";import{useQueryClient as Rr}from"@tanstack/react-query";import{useAccount as Br,useChainId as _r,useConfig as Er,useSendTransaction as Or,useSwitchChain as Nr}from"wagmi";import{getPublicClient as _t,readContracts as Tn}from"wagmi/actions";import{WalletInfo as Et,ConnectorId as He,resolveEnvironment as Fr}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as Dr,useOptionalOnRampEligibility as Wr}from"@nexus-cross/onramp/react";import{APPLE_ICON as Dt,BINANCE_ICON as vn,CROSSX_ICON as Ft,EXTENSION_ICON as Lr,GOOGLE_ICON as Pn,METAMASK_ICON as An}from"@nexus-cross/connect-kit-wagmi";import{useCallback as re,useMemo as Ae,useRef as _o}from"react";import{useQueries as Jt,useQuery as tt}from"@tanstack/react-query";import{encodeFunctionData as at,formatUnits as yt,parseSignature as Eo,parseUnits as Oo}from"viem";import{getChainId as No,getPublicClient as pn,readContract as Ie,signTypedData as Fo,switchChain as Do,waitForTransactionReceipt as Wo,writeContract as en}from"wagmi/actions";import{useConfig as Lo}from"wagmi";function Mo(e){return e!=="bridge"}var fn="0x0000000000000000000000000000000000000000",we=100,ot=18,Go=180000n,Uo=250000n,gn=new Set([56,97]),Ko=130n,$o=100n,qo={dev:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},stage:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},production:{bridgeApi:"https://bridge-api.crosstoken.io/bridge",walletApi:"https://wallet-server.crosstoken.io/api",chainIds:{cross:612055,bsc:56},contracts:{BSC_CROSS:"0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",W_CROSS:"0x731a104a4461ae45bfef520468b43c262d35e682",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x1c37d4f44ed3ec86d96868001cfa89e97112a85c",CROSSD:"0xff42c13d927a6b9265236619161accb227b6d452",USDTB:"0x55d398326f99059ff775485246999027b3197955",SWAP_BRIDGE_ROUTER:"0xB298C340816fee45cfB39B1e6EE4DB4D5739e357"},hiddenPairs:[{fromKey:"56-0x55d398326f99059ff775485246999027b3197955",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"56-0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",toKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452"}]}},Xe=[{type:"function",name:"quoter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"swapRouter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"getAmountSwapBridgeOut",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"swapAmountOut",type:"uint256"},{name:"bridgeValue",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"getAmountSwapBridgeIn",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"bridgeValue",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"amountIn",type:"uint256"},{name:"swapAmountOut",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"swapBridgeExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"swapBridgeExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountOut",type:"uint256"},{name:"amountInMaximum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountIn",type:"uint256"}]}],It=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]}],tn=[{type:"function",name:"name",stateMutability:"view",inputs:[],outputs:[{name:"",type:"string"}]},{type:"function",name:"nonces",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"",type:"uint256"}]}],nn=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amountIn",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amount",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]}],Ho=[{type:"function",name:"slot0",stateMutability:"view",inputs:[],outputs:[{name:"sqrtPriceX96",type:"uint160"},{name:"tick",type:"int24"},{name:"observationIndex",type:"uint16"},{name:"observationCardinality",type:"uint16"},{name:"observationCardinalityNext",type:"uint16"},{name:"feeProtocol",type:"uint8"},{name:"unlocked",type:"bool"}]}],Ne=[{type:"function",name:"exactInputSingle",stateMutability:"payable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"recipient",type:"address"},{name:"deadline",type:"uint256"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"unwrapWETH9",stateMutability:"payable",inputs:[{name:"amountMinimum",type:"uint256"},{name:"recipient",type:"address"}],outputs:[]},{type:"function",name:"refundETH",stateMutability:"payable",inputs:[],outputs:[]}],Vo=[{type:"function",name:"bridgeToken",stateMutability:"payable",inputs:[{name:"toChainID",type:"uint256"},{name:"fromToken",type:"address"},{name:"to",type:"address"},{name:"value",type:"uint256"},{name:"gasFee",type:"uint256"},{name:"exFee",type:"uint256"},{name:"extraData",type:"bytes"}],outputs:[{name:"",type:"bool"}]}];async function bn(e){let t="";try{t=await e.text()}catch{}if(t){try{let o=JSON.parse(t),s=typeof o.data=="string"&&o.data||typeof o.message=="string"&&o.message||"";if(s)return`${s} (status ${e.status})`}catch{}return`${t.slice(0,300)} (status ${e.status})`}return`status ${e.status}`}async function Ke(e,t){let o=await fetch(e,{cache:"no-store",signal:t});if(!o.ok)throw new Error(`CrossD bridge adapter request failed: ${await bn(o)}`);let s=await o.json();if(s&&typeof s=="object"&&"code"in s&&typeof s.code=="number"&&s.code!==200)throw new Error(s.message||`CrossD bridge adapter API error: ${s.code}`);return s&&typeof s=="object"&&"data"in s?s.data:s}async function on(e,t,o){let s=await fetch(e,{method:"POST",cache:"no-store",signal:o,headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!s.ok)throw new Error(`CrossD bridge adapter request failed: ${await bn(s)}`);let n=await s.json();if(n&&typeof n=="object"&&"code"in n&&typeof n.code=="number"&&n.code!==200)throw new Error(n.message||`CrossD bridge adapter API error: ${n.code}`);return n&&typeof n=="object"&&"data"in n?n.data:n}function zo(e){return new Promise(t=>setTimeout(t,e))}async function Qo(e,t,{attempts:o=60,intervalMs:s=2e3}={}){for(let n=0;n<o;n+=1){try{let a=await Ke(`${e}/permit-hash/${t}`);if(At(a))return a}catch{}await zo(s)}return null}function ee(e,t){return`${e}-${t.toLowerCase()}`}function ce(e){return ee(e.chainId,e.address)}function Re(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function rn(e){return e===56||e===97?"BSC":e===612044||e===612055?"CROSS":`Chain ${e}`}function J(e,t){return t?t.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()?e.contracts.W_CROSS:t:fn}function Ye(e){let t=yt(e,ot);return t.includes(".")?t.replace(/\.?0+$/,""):t}function dt(e){return Oo(e||"0",ot)}function le(e){try{return dt(e||"0")}catch{return 0n}}function $e(e){if(typeof e=="bigint")return e;if(typeof e=="number")return BigInt(Math.trunc(e));if(!e)return 0n;try{return BigInt(e)}catch{return 0n}}function St(e){let t=yt(e,9);return(t.includes(".")?t.replace(/\.?0+$/,""):t)||"0"}function ft(e){return e==="bridge"?Go:Uo}function sn(e,t){if(!e||!t)return"0";let o=e*e;if(o===0n)return"0";let s=t*t,n=s>o?s-o:o-s;if(n===0n)return"0";let a=(n*100000000n+o/2n)/o;if(a>=100000000n)return"100";let g=a/1000000n,f=(a%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return f?`${g}.${f}`:`${g}`}function jo(e){if(!e||Number(e)===0)return"0%";let[t,o=""]=e.split("."),s=o.length>4?o.slice(0,4):o;return s?`${t}.${s}%`:`${t}%`}async function an(e,t,o,s,n,a=!1){let g=pn(e,{chainId:t}),f=o;try{let p=await g?.estimateContractGas?.({account:n.account,address:n.address,abi:n.abi,functionName:n.functionName,args:n.args,value:n.value});typeof p=="bigint"&&p>0n&&(f=s?p*Ko/$o:p)}catch{}let b={gas:f};if(gn.has(t))try{let p=await g?.getGasPrice?.();typeof p=="bigint"&&p>0n&&(b.gasPrice=p)}catch{}else if(a)try{let p=await g?.estimateFeesPerGas?.();typeof p?.maxFeePerGas=="bigint"&&(b.maxFeePerGas=p.maxFeePerGas),typeof p?.maxPriorityFeePerGas=="bigint"&&(b.maxPriorityFeePerGas=p.maxPriorityFeePerGas)}catch{}return b}function yn(e){let t=e==="auto"?1:Number(e||"1");return!Number.isFinite(t)||t<0?100n:BigInt(Math.min(1e4,Math.floor(t*100)))}function vt(e,t){let o=yn(t);return o>=10000n?0n:e*(10000n-o)/10000n}function Xo(e,t){let o=yn(t);return(e*(10000n+o)+9999n)/10000n}function ct(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var Yo={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function Zo(e){return Yo[e]??`${e/1e4}%`}function Jo(e,t){let o=Number(e||"0");return!Number.isFinite(o)||o<=0?"0":(o*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function cn(e){return Ye(e)}function dn(e,t){let o=Number(t??"0");return!Number.isFinite(o)||o<=0?0n:e*BigInt(Math.floor(o))/1000n}function gt(e,t){if(!e)return!1;let o=e.toLowerCase();return t.some(s=>s.toLowerCase()===o)}function er(e,t,o){return[{from:[e.contracts.USDTX],to:[e.contracts.CROSSD]},{from:[e.contracts.BSC_CROSS],to:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS]},{from:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS],to:[e.contracts.CROSSD]}].some(n=>gt(t,n.from)&&gt(o,n.to)||gt(t,n.to)&&gt(o,n.from))}function tr(e){if(Re(e.type))return null;if(e.type==="swap-bridge"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}if(e.type==="bridge-swap"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}return{from:e.from.chainId,to:e.to.chainId,token:e.from.address}}function nr({input:e,path:t,config:o}){if(!o||Re(t.type))return"";let s=$e(o.minimumValue),n=$e(o.gasFee??o.gas_fee),a=t.type==="swap-bridge"?s+n*12n/10n:s;return a<=0n?"":e.fromAmount&&le(e.fromAmount)<a&&t.type!=="swap"?`Minimum ${cn(a)}`:t.type==="swap-bridge"&&e.toAmount&&le(e.toAmount)<a?`Available ${cn(a)} or more.`:""}function or({input:e,path:t,config:o}){if(!o||t.type!=="bridge"&&t.type!=="bridge-swap")return"";let s=$e(o.gasFee??o.gas_fee);if(s<=0n||!e.fromAmount)return"";let n=le(e.fromToken.balance||"0"),a=le(e.fromAmount);return n-s<a?`Insufficient network fee(${e.fromToken.symbol})`:""}function rr(e,t){let o=new Set;return e?.list?.forEach(s=>{let n=s.localChain??s.local_chain;n&&Object.entries(s.pairs||{}).forEach(([a,g])=>{g.forEach(f=>{f.localToken&&o.add(ee(n,f.localToken)),f.remoteToken&&o.add(ee(Number(a),f.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([s,n])=>{n.forEach(a=>{a.token0&&o.add(ee(Number(s),a.token0)),a.token1&&o.add(ee(Number(s),a.token1))})}),o}function sr(e,t){return!e||!t?null:ee(e,t)}function ir({envConfig:e,bridgePairList:t,swapPools:o,tokenInfo:s,tokenStats:n}){let a=rr(t,o),g=new Map;n?.forEach(b=>{let p=sr(Number(b.chainId??b.chain_id),b.address);p&&g.set(p,b)});let f={};return a.forEach(b=>{let[p,w]=b.split("-"),T=Number(p),S=s?.find(x=>Number(x.chainId??x.chain_id)===T&&x.address?.toLowerCase()===w);if(!S?.symbol||!S.name)return;let m=g.get(b);f[b]={key:b,chainId:T,address:w,symbol:S.symbol,name:S.name,decimals:S.decimals||ot,image:S.image||S.icon_url,price:m?.price?Number(m.price):void 0,isNativeToken:w.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),f}function wn(e,t){return t?.list?.find(o=>(o.localChain??o.local_chain)===e)?.bridge||""}function hn(e,t,o){let[s,n]=e.split("-"),[a,g]=t.split("-"),f=Number(s),b=Number(a);for(let p of o?.list||[]){if((p.localChain??p.local_chain)!==f)continue;let w=p.pairs?.[a];if(w){for(let T of w)if(T.localToken?.toLowerCase()===n&&T.remoteToken?.toLowerCase()===g)return{type:"bridge",fromChain:f,fromToken:n,toChain:b,toToken:g,bridgeAddress:wn(f,o)}}}return null}function Cn(e,t,o,s){let[n,a]=e.split("-"),[g,f]=t.split("-");if(n!==g)return null;let b=Number(n),p=(o?.swapPools||o?.swap_pools)?.[n];if(!p)return null;let w=s.contracts.W_CROSS.toLowerCase(),T=s.contracts.NATIVE_CROSS.toLowerCase(),S=m=>m?.toLowerCase()===w?T:m?.toLowerCase();for(let m of p){let x=S(m.token0),P=S(m.token1);if(x===a&&P===f||P===a&&x===f){let h="swap";return b===s.chainIds.cross&&(a===T&&(h="deposit-swap"),f===T&&(h="swap-withdraw")),{pathType:h,step:{type:"swap",chain:b,fromToken:a,toToken:f,fee:m.fee||we,poolAddress:m.poolAddress||m.pool_address||""}}}}return null}function ar(e,t,o,s){let[n,a]=e.split("-"),[g]=t.split("-");if(n===g)return null;for(let f of(o?.swapPools||o?.swap_pools)?.[n]||[]){let b=f.token0?.toLowerCase(),p=f.token1?.toLowerCase(),w=b===a?p:p===a?b:null;if(!w)continue;let T=hn(ee(Number(n),w),t,s);if(T)return[{type:"swap",chain:Number(n),fromToken:a,toToken:w,fee:f.fee||we,poolAddress:f.poolAddress||f.pool_address||""},T]}return null}function cr(e,t,o,s,n){let[a,g]=e.split("-"),[f]=t.split("-");if(a===f)return null;for(let b of o?.list||[])if((b.localChain??b.local_chain)===Number(a))for(let p of b.pairs?.[f]||[]){if(p.localToken?.toLowerCase()!==g)continue;let w=p.remoteToken?.toLowerCase();if(!w)continue;let T=Cn(ee(Number(f),w),t,s,n);if(T)return[{type:"bridge",fromChain:Number(a),fromToken:g,toChain:Number(f),toToken:w,bridgeAddress:wn(Number(a),o)},T.step]}return null}function dr({envConfig:e,bridgePairList:t,swapPools:o,enrichedTokens:s}){return(n,a)=>{let g=s[n],f=s[a];if(!g||!f||n===a)return null;let b=hn(n,a,t);if(b)return{type:"bridge",steps:[b],from:g,to:f};let p=Cn(n,a,o,e);if(p)return{type:p.pathType,steps:[p.step],from:g,to:f};let w=ar(n,a,o,t);if(w)return{type:"swap-bridge",steps:w,from:g,to:f};let T=cr(n,a,t,o,e);return T?{type:"bridge-swap",steps:T,from:g,to:f}:null}}function ln(e,t){return{name:e.name,symbol:e.symbol,chainId:e.chainId,address:e.address,decimals:e.decimals,balance:t.get(e.key)||"0",iconUrl:e.image,priceUsd:e.price}}function lr(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function ur(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function mr(e,t){let o=e.startsWith("-"),s=o?e.slice(1):e,[n,a=""]=s.split("."),g=a.slice(0,t).replace(/0+$/,""),f=g?`${n}.${g}`:n;return o?`-${f}`:f}function pr(e){let t=e.startsWith("-"),o=t?e.slice(1):e,[s,n]=o.split("."),a=s.replace(/\B(?=(\d{3})+(?!\d))/g,","),g=n?`${a}.${n}`:a;return t?`-${g}`:g}function Pt(e){if(e==null||e==="")return"0";let t=String(e),o=Number(t);return!Number.isFinite(o)||o===0?"0":pr(mr(t,4))}function un(e,t){if(e==null||e==="")return"0";try{return ur(yt(BigInt(String(e)),t.decimals))}catch{return"0"}}function At(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function fr(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function gr(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function br(e,t){let o=lr(t);return{name:o,symbol:o,chainId:e,address:t,decimals:ot,balance:"0"}}function mn({envConfig:e,tokenByBridgeKey:t,chainId:o,address:s}){if(!s)return null;let n=gr(e,s);return t.get(ee(o,n))||t.get(ee(o,s))||br(o,n)}function bt(e){return e?.toLowerCase()||""}function yr(e){if(e.source==="swap")return"swap";let t=bt(e.fromToken??e.from_token),o=bt(e.toToken??e.to_token),s=bt(e.swapTokenIn??e.swap_token_in),n=bt(e.swapTokenOut??e.swap_token_out);return o&&s&&o===s?"bridge-swap":t&&n&&t===n?"swap-bridge":"bridge"}function wr(e,t){let o=e.status??0,s=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&o===1&&!s?"failed":o===1?"success":"pending"}function hr({envConfig:e,item:t,tokenByBridgeKey:o}){let s=Number(t.fromChainID??t.from_chain_id??0),n=Number(t.toChainID??t.to_chain_id??0);if(!s||!n)return null;let a=yr(t),g=t.swapTokenIn??t.swap_token_in,f=t.swapTokenOut??t.swap_token_out,b=t.swapAmountIn??t.swap_amount_in,p=t.swapAmountOut??t.swap_amount_out,w=t.fromToken??t.from_token,T=t.toToken??t.to_token,S=t.value,m=t.value;a==="swap"?(w=g,T=f,S=b,m=p):a==="swap-bridge"?(w=g,S=b,m=t.value):a==="bridge-swap"&&(T=f,S=b,m=p);let x=mn({envConfig:e,tokenByBridgeKey:o,chainId:s,address:w}),P=mn({envConfig:e,tokenByBridgeKey:o,chainId:n,address:T}),h=t.initiatedTxHash??t.initiated_tx_hash;return!x||!P||!At(h)?null:{id:`${h}-${t.index??""}`,timestamp:fr(t.initiatedTime??t.initiated_time),txHash:h,fromToken:x,toToken:P,fromAmount:un(S,x),toAmount:un(m,P),summary:{pathType:a},status:wr(t,a)}}function Cr(e){let t=new Map;return e.flat().forEach(o=>{let s=Number(o.chainId??o.chain_id),n=o.address?.toLowerCase();if(!s||!n)return;let a=o.quantity?.numeric??o.balance??"0",g=o.quantity?.decimals??o.decimals??ot;try{t.set(ee(s,n),yt(BigInt(a||"0"),g))}catch{t.set(ee(s,n),"0")}}),t}function Fe(e,t="first"){let o=e.steps.filter(s=>s.type==="swap");return t==="last"?o[o.length-1]:o[0]}function kr(e,t){let o=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!o?.length)return"";let s=t.contracts.CROSSD.toLowerCase(),n=t.contracts.USDTX.toLowerCase(),a=o.find(g=>{let f=g.token0?.toLowerCase(),b=g.token1?.toLowerCase();return f===s&&b===n||f===n&&b===s});return a?.poolAddress||a?.pool_address||""}function xr(e,t){return e.from.chainId===t.chainIds.cross&&e.from.address.toLowerCase()===t.contracts.CROSSD.toLowerCase()&&e.to.chainId===t.chainIds.bsc&&e.to.address.toLowerCase()===t.contracts.USDTB.toLowerCase()}function Tr(e){if(e===void 0)return;let t=10n**BigInt(ot),o=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",s=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:o,percentage:Math.min(s,100)}}function nt(e,t,o,s){let n=[e.from,e.to].find(a=>a.chainId===t&&a.address.toLowerCase()===o.toLowerCase())??s?.[ee(t,o)];return{symbol:n?.symbol||o.slice(0,6),iconUrl:n?.image}}function Ir(e,t){let o=[];for(let n of e.steps)n.type==="swap"?(o.push({chain:n.chain,address:n.fromToken}),o.push({chain:n.chain,address:n.toToken})):(o.push({chain:n.fromChain,address:n.fromToken}),o.push({chain:n.toChain,address:n.toToken}));let s=o.filter((n,a)=>a===0||!(n.chain===o[a-1].chain&&n.address.toLowerCase()===o[a-1].address.toLowerCase()));return s.length===0?[{symbol:e.from.symbol,iconUrl:e.from.image},{symbol:e.to.symbol,iconUrl:e.to.image}]:s.map(n=>nt(e,n.chain,n.address,t))}function Sr({input:e,path:t,amountData:o,gasInfo:s,liquidity:n,enrichedTokens:a,priceImpact:g}){let f=e.fromAmount||"0",b=e.toAmount||"0",p=Fe(t),w=t.steps.find(O=>O.type==="bridge"),T=t.type!=="bridge",S=!Re(t.type),m=p?Jo(f,p.fee):"0",x=Number(f)>0||Number(b)>0,P=p?nt(t,p.chain,p.fromToken,a):{symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},h=p?nt(t,p.chain,p.toToken,a):{symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},C=w?nt(t,w.fromChain,w.fromToken,a):void 0,_=(O,K,te)=>x?K&&K>0n?{label:O,value:Ye(K),tone:"default",valueToken:te}:{label:O,value:"Free",tone:"accent"}:{label:O,value:"0"};return{pathType:t.type,priceImpact:g,liquidity:n,bridgeInfo:S&&w?[{label:"Route",value:`${rn(w.fromChain)} \u2192 ${rn(w.toChain)}`},_("Validator Fee",o?.exFee,C),_("Network Fee",o?.networkFee,C)]:void 0,swapInfo:T&&p?[{label:"Route",value:"",routeTokens:[nt(t,p.chain,p.fromToken,a),nt(t,p.chain,p.toToken,a)]},{label:"Price Impact",value:jo(g)},{label:"In Amount",value:Pt(f),valueToken:P},{label:p&&Re(t.type)?`Swap Fee (${Zo(p.fee||we)})`:"Swap Fee",value:Pt(m),valueToken:P},{label:"Out Amount",value:Pt(b),valueToken:h}]:void 0,txFee:[...s?.gasPrice?[{label:"Gas Price",value:`${s.gasPrice} Gwei`}]:[{label:"Priority Fee Per Gas",value:`${s?.priorityFeePerGas||"0"} Gwei`},{label:"Max Fee Per Gas",value:`${s?.maxFeePerGas||"0"} Gwei`}],{label:"Gas Limit",value:s?.gasLimit||"0"}],txFeeInfo:s?{estTxFee:s.estTxFee,isDelegateFee:s.isDelegateFee,tokenIconUrl:s.gasCurrencyIconUrl,tokenSymbol:s.gasCurrencySymbol}:{estTxFee:"0",isDelegateFee:!1}}}function Rt({env:e,walletAddress:t,enabled:o=!0}){let s=Lo(),n=qo[e],a=o,g=_o(new Map),f=tt({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:r})=>Ke(`${n.bridgeApi}/pairs`,r),enabled:a,staleTime:3e4}),b=tt({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:r})=>Ke(`${n.bridgeApi}/swap-pools`,r),enabled:a,staleTime:3e4}),p=Ae(()=>kr(b.data,n),[n,b.data]),w=tt({queryKey:["crossd-bridge-adapter",e,"available-liquidity",p],queryFn:async()=>await Ie(s,{address:n.contracts.USDTX,abi:It,functionName:"balanceOf",args:[p],chainId:n.chainIds.cross}),enabled:a&&!!p,staleTime:3e4}),T=tt({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:r})=>Ke(`${n.walletApi}/v1/public/token/info`,r),enabled:a,staleTime:3e4}),S=tt({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:r})=>Ke(`${n.walletApi}/v1/public/token/stats`,r),enabled:a,staleTime:3e4}),m=Jt({queries:[n.chainIds.cross,n.chainIds.bsc].map(r=>({queryKey:["crossd-bridge-adapter",e,"balance",t,r],queryFn:({signal:i})=>{let c=new URLSearchParams({networkId:`eip155:${r}`,account:t||""});return Ke(`${n.walletApi}/v1/public/token/balance?${c}`,i)},enabled:a&&!!t,staleTime:0,refetchInterval:a&&t?5e3:!1}))}),x=Jt({queries:[n.chainIds.cross,n.chainIds.bsc].map(r=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",r],queryFn:async({signal:i})=>{try{let k=await pn(s,{chainId:r})?.estimateFeesPerGas?.();if(k?.maxFeePerGas||k?.gasPrice)return{fast:{maxFee:k.maxFeePerGas?.toString()||k.gasPrice?.toString(),maxPriorityFee:k.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let c=new URLSearchParams({chain_id:String(r),without_gas_limit:"false"});return Ke(`${n.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${c}`,i)},enabled:a,staleTime:1e4,retry:1}))}),P=n.hiddenPairs,h=Ae(()=>ir({envConfig:n,bridgePairList:f.data,swapPools:b.data,tokenInfo:T.data,tokenStats:S.data}),[f.data,n,b.data,T.data,S.data]),C=Ae(()=>dr({envConfig:n,bridgePairList:f.data,swapPools:b.data,enrichedTokens:h}),[f.data,h,n,b.data]),_=Ae(()=>Cr(m.map(r=>r.data).filter(r=>Array.isArray(r))),[m]),O=Ae(()=>{let r=new Map;return Object.values(h).forEach(i=>{let c=ln(i,_);r.set(i.key,c)}),r},[_,h]),K=Ae(()=>{let r=new Map,i=O.get(ee(n.chainIds.cross,n.contracts.NATIVE_CROSS));i&&r.set(n.chainIds.cross,{symbol:i.symbol,iconUrl:i.iconUrl});let c=T.data?.find(l=>Number(l.chainId??l.chain_id)===n.chainIds.bsc&&(l.symbol??"").toUpperCase()==="BNB");return c&&r.set(n.chainIds.bsc,{symbol:c.symbol??"BNB",iconUrl:c.image??c.icon_url}),r},[n,O,T.data]),te=tt({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:r})=>on(`${n.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},r),enabled:a&&!!t,staleTime:0,refetchInterval:a&&t?5e3:!1}),V=Ae(()=>(te.data?.histories||[]).map(r=>hr({envConfig:n,item:r,tokenByBridgeKey:O})).filter(r=>!!r),[te.data?.histories,n,O]),$=Ae(()=>Tr(w.data),[w.data]),D=x[0]?.data,G=x[1]?.data,he=Ae(()=>{let r=new Map;return D&&r.set(n.chainIds.cross,D),G&&r.set(n.chainIds.bsc,G),r},[G,D,n.chainIds.bsc,n.chainIds.cross]),E=re((r,i,c)=>{let l=he.get(r.from.chainId)?.fast,k=i?c?.gasLimit??ft(r.type):0n,v=c?.gasPrice&&c.gasPrice>0n?c.gasPrice:0n,R=c?.maxFeePerGas&&c.maxFeePerGas>0n?c.maxFeePerGas:0n,B=c?.maxPriorityFeePerGas&&c.maxPriorityFeePerGas>0n?c.maxPriorityFeePerGas:0n,F=$e(l?.maxFee??l?.max_fee),u=$e(l?.maxPriorityFee??l?.max_priority_fee),d=R>0n?R:F>0n?F:v,I=B>0n?B:u>0n?u:d,y=v>0n?v:d,N=gn.has(r.from.chainId)&&y>0n,ke=k*(N?y:d),M=O.get(ee(r.from.chainId,n.contracts.NATIVE_CROSS)),Y=r.type!=="swap-bridge",Z=K.get(r.from.chainId);return{estTxFee:i?Ye(ke):"0",priorityFeePerGas:i&&!N?St(I):"0",maxFeePerGas:i&&!N?St(d):"0",gasLimit:i?k.toString():"0",gasPrice:i&&N?St(y):void 0,isDelegateFee:r.type==="swap-bridge"?!1:er(n,r.from.address,r.to.address),tokenIconUrl:Y?M?.iconUrl:void 0,tokenSymbol:Y?M?.symbol:void 0,gasCurrencyIconUrl:Z?.iconUrl,gasCurrencySymbol:Z?.symbol}},[n,he,K,O]),A=re(async r=>{let i=tr(r);if(!i)return null;let c=`${e}:${i.from}:${i.to}:${i.token.toLowerCase()}`,l=g.current.get(c);if(l)return l;let k=(async()=>{let v=new URLSearchParams({from:String(i.from),to:String(i.to),token:i.token});try{return(await Ke(`${n.bridgeApi}/token-config?${v}`)).config??null}catch{return null}})();return g.current.set(c,k),k},[e,n.bridgeApi]),W=Ae(()=>{let r=Object.values(h).map(c=>ln(c,_)),i=ee(n.chainIds.cross,n.contracts.CROSSD);return r.sort((c,l)=>{let k=ce(c).toLowerCase()===i.toLowerCase(),v=ce(l).toLowerCase()===i.toLowerCase();return k!==v?k?-1:1:ce(c).localeCompare(ce(l))})},[_,h,n]),Ce=re(r=>{let i=ce(r),c=i.toLowerCase(),l=[];Object.keys(h).forEach(R=>{let B=R.toLowerCase();if(c===B||P.some(d=>d.fromKey===c&&d.toKey===B))return;let F=C(i,R);if(!F)return;let u=O.get(R);u&&l.push({token:u,path:F})});let k=ee(n.chainIds.cross,n.contracts.CROSSD),v=ee(n.chainIds.cross,n.contracts.NATIVE_CROSS);return l.sort((R,B)=>{if(c===k.toLowerCase()){let y=ce(R.token).toLowerCase()===v.toLowerCase(),N=ce(B.token).toLowerCase()===v.toLowerCase();if(y!==N)return y?-1:1}let F=Re(R.path.type),u=Re(B.path.type);if(F!==u)return F?-1:1;let d=R.token.chainId===r.chainId,I=B.token.chainId===r.chainId;return d!==I?d?-1:1:ce(R.token).localeCompare(ce(B.token))}),l.map(R=>R.token)},[h,n,C,P,O]),Ve=re(async r=>await Ie(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:Xe,functionName:"quoter",chainId:r}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),j=re(async r=>{No(s)!==r&&await Do(s,{chainId:r})},[s]),q=re(async r=>await Ie(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:Xe,functionName:"swapRouter",chainId:r}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),ue=re(async({path:r,step:i,amount:c,source:l})=>{let k=await Ve(i.chain),v=i.poolAddress?Ie(s,{address:i.poolAddress,abi:Ho,functionName:"slot0",chainId:i.chain}).then(F=>F?.[0]).catch(()=>{}):Promise.resolve(void 0);if(l==="from"){let F=await Ie(s,{address:k,abi:nn,functionName:"quoteExactInputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amountIn:dt(c),fee:i.fee||we,sqrtPriceLimitX96:0n}],chainId:i.chain}),u=sn(await v,F[1]);return{amount:Ye(F[0]),path:r,priceImpact:u}}let R=await Ie(s,{address:k,abi:nn,functionName:"quoteExactOutputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amount:dt(c),fee:i.fee||we,sqrtPriceLimitX96:0n}],chainId:i.chain}),B=sn(await v,R[1]);return{amount:Ye(R[0]),path:r,priceImpact:B}},[n,Ve,s]),be=re(async(r,i)=>{if(!t)throw new Error("Wallet is not connected.");let c=ft(i.type);if(Re(i.type)){let d=Fe(i,"first");if(!d)throw new Error("Swap route is not available.");let I=le(r.fromAmount),y=le(r.toAmount);if(I<=0n)throw new Error("Bridge amount is empty.");if(y<=0n)throw new Error("Bridge quote is not ready.");let N=await q(d.chain),z=vt(y,r.slippage),ke=i.type==="swap-withdraw"?fn:t,M={tokenIn:J(n,d.fromToken),tokenOut:J(n,d.toToken),fee:d.fee||we,recipient:ke,deadline:ct(),amountIn:I,amountOutMinimum:z,sqrtPriceLimitX96:0n};if(i.type==="swap-withdraw"){let Y=at({abi:Ne,functionName:"exactInputSingle",args:[M]}),Z=at({abi:Ne,functionName:"unwrapWETH9",args:[z,t]});return{address:N,abi:Ne,functionName:"multicall",args:[[Y,Z]],chainId:d.chain,fallbackGasLimit:c}}if(i.type==="deposit-swap"){let Y=at({abi:Ne,functionName:"exactInputSingle",args:[M]}),Z=at({abi:Ne,functionName:"refundETH",args:[]});return{address:N,abi:Ne,functionName:"multicall",args:[[Y,Z]],value:I,chainId:d.chain,fallbackGasLimit:c}}return{address:N,abi:Ne,functionName:"exactInputSingle",args:[M],chainId:d.chain,fallbackGasLimit:c}}if(i.type==="swap-bridge"){let d=Fe(i,"first");if(!d)throw new Error("Swap bridge route is not available.");let I=le(r.fromAmount),y=le(r.toAmount);if(I<=0n)throw new Error("Bridge amount is empty.");if(y<=0n)throw new Error("Bridge quote is not ready.");let N=n.contracts.SWAP_BRIDGE_ROUTER,z=ct(),ke={toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},M={tokenIn:J(n,i.from.address),tokenOut:J(n,d.toToken),fee:d.fee||we,sqrtPriceLimitX96:0n,bridgeParams:ke};if(r.lastChangedBy==="to"){let Z={...M,amountOut:y,amountInMaximum:Xo(I,r.slippage)};return{address:N,abi:Xe,functionName:"swapBridgeExactOutputSingle",args:[Z,z],value:i.from.isNativeToken?Z.amountInMaximum:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let Y={...M,amountIn:I,amountOutMinimum:vt(I,r.slippage)};return{address:N,abi:Xe,functionName:"swapBridgeExactInputSingle",args:[Y,z],value:i.from.isNativeToken?I:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let l=i.steps.find(d=>d.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let k=le(r.fromAmount);if(k<=0n)throw new Error("Bridge amount is empty.");let v=await A(i),R=$e(v?.gasFee??v?.gas_fee),B=dn(k,v?.exFeeRate??v?.ex_fee_rate),F="0x";if(i.type==="bridge-swap"){let d=Fe(i,"last");if(!d)throw new Error("Bridge swap route is not available.");let I=le(r.toAmount);if(I<=0n)throw new Error("Bridge quote is not ready.");let y=await q(i.to.chainId),N=vt(I,r.slippage),z=at({abi:Ne,functionName:"exactInputSingle",args:[{tokenIn:J(n,d.fromToken),tokenOut:J(n,d.toToken),fee:d.fee||we,recipient:t,deadline:ct(),amountIn:k,amountOutMinimum:N,sqrtPriceLimitX96:0n}]});F=`${y}${z.slice(2)}`}let u=[BigInt(i.to.chainId),i.from.address,t,k,R,B,F];return{address:l.bridgeAddress,abi:Vo,functionName:"bridgeToken",args:u,value:i.from.isNativeToken?k+B+R:void 0,chainId:i.from.chainId,fallbackGasLimit:c}},[n,A,q,t]),De=re(async(r,i)=>{if(i.type==="bridge"||i.type==="bridge-swap")return be(r,i);if(!t)throw new Error("Wallet is not connected.");let c=le(r.fromAmount);if(c<=0n)throw new Error("Bridge amount is empty.");if(i.type==="swap-bridge"){let R=Fe(i,"first");if(!R)throw new Error("Swap bridge route is not available.");let B=n.contracts.SWAP_BRIDGE_ROUTER,F={tokenIn:J(n,i.from.address),tokenOut:J(n,R.toToken),fee:R.fee||we,sqrtPriceLimitX96:0n,bridgeParams:{toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},amountIn:c,amountOutMinimum:0n};return{address:B,abi:Xe,functionName:"swapBridgeExactInputSingle",args:[F,ct()],value:i.from.isNativeToken?c:void 0,chainId:i.from.chainId,fallbackGasLimit:ft(i.type)}}let l=Fe(i,"first");if(!l)throw new Error("Swap route is not available.");let k=await q(l.chain),v={tokenIn:J(n,l.fromToken),tokenOut:J(n,l.toToken),fee:l.fee||we,recipient:t,deadline:ct(),amountIn:c,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:k,abi:Ne,functionName:"exactInputSingle",args:[v],value:i.from.isNativeToken?c:void 0,chainId:l.chain,fallbackGasLimit:ft(i.type)}},[be,n,q,t]),We=re(async(r,i)=>{if(!t)return null;try{let c=await De(r,i),l=Re(i.type)||i.type==="swap-bridge",k=await an(s,c.chainId,c.fallbackGasLimit,l,{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value},!0);return{gasLimit:k.gas,gasPrice:k.gasPrice,maxFeePerGas:k.maxFeePerGas,maxPriorityFeePerGas:k.maxPriorityFeePerGas}}catch{return null}},[De,s,t]),ze=re(async r=>{let i=ce(r.fromToken),c=ce(r.toToken),l=C(i,c);if(!l)return{error:"Route is not available."};let k=r.lastChangedBy==="to"?r.toAmount:r.fromAmount,v=!!k&&Number(k)>0,R=xr(l,n)?$:void 0,B=async(M,Y,Z)=>{let _e=v?await We(M,l):null,Ee=E(l,v,_e);return Sr({input:M,path:l,gasInfo:Ee,amountData:Y,liquidity:R,enrichedTokens:h,priceImpact:Z})};if(!k||Number(k)<=0)return{fromAmount:r.fromAmount,toAmount:r.toAmount,summary:await B(r)};let F=await A(l),u=$e(F?.gasFee??F?.gas_fee),d=l.type==="bridge"||l.type==="bridge-swap"?{networkFee:u}:void 0,I=nr({input:r,path:l,config:F});if(I)return{fromAmount:r.fromAmount,toAmount:r.toAmount,summary:await B(r,d),error:I};let y=or({input:r,path:l,config:F});if(y)return{fromAmount:r.fromAmount,toAmount:r.toAmount,summary:await B(r,d),error:y};if(l.type==="bridge"){let M=r.lastChangedBy==="to"?{...r,fromAmount:r.toAmount}:{...r,toAmount:r.fromAmount};return{fromAmount:M.fromAmount,toAmount:M.toAmount,summary:await B(M,d)}}if(l.type==="swap-bridge"){let M=Fe(l,"first"),Y=n.contracts.SWAP_BRIDGE_ROUTER;if(!M)return{error:"Swap bridge route is not ready."};let Z=ve=>ue({path:l,step:M,amount:ve,source:"from"}).then(ye=>ye.priceImpact).catch(()=>{});if(r.lastChangedBy==="from"){let ve=await Ie(s,{address:Y,abi:Xe,functionName:"getAmountSwapBridgeOut",args:[BigInt(l.to.chainId),J(n,l.from.address),J(n,M.toToken),M.fee||we,dt(r.fromAmount)],chainId:l.from.chainId}),ye=Ye(ve[1]),rt={...r,toAmount:ye};return{toAmount:ye,summary:await B(rt,{networkFee:ve[3],exFee:ve[4]},await Z(r.fromAmount))}}let _e=await Ie(s,{address:Y,abi:Xe,functionName:"getAmountSwapBridgeIn",args:[BigInt(l.to.chainId),J(n,l.from.address),J(n,M.toToken),M.fee||we,dt(r.toAmount)],chainId:l.from.chainId}),Ee=Ye(_e[1]),pe={...r,fromAmount:Ee};return{fromAmount:Ee,summary:await B(pe,{networkFee:_e[3],exFee:_e[4]},await Z(Ee))}}let N=l.type==="bridge-swap"?Fe(l,"last"):Fe(l,"first");if(!N)return{error:"Swap route is not available."};let z=await ue({path:l,step:N,amount:k,source:r.lastChangedBy});if(r.lastChangedBy==="from"){let M={...r,toAmount:z.amount};return{toAmount:z.amount,summary:await B(M,d,z.priceImpact)}}let ke={...r,fromAmount:z.amount};return{fromAmount:z.amount,summary:await B(ke,d,z.priceImpact)}},[$,E,h,n,We,C,A,ue,s]),Le=re(async r=>{if(r.from.isNativeToken)return null;if(r.type==="swap"||r.type==="deposit-swap"||r.type==="swap-withdraw")return q(r.from.chainId);if(r.type==="swap-bridge")return n.contracts.SWAP_BRIDGE_ROUTER;let i=r.steps.find(c=>c.type==="bridge");return i?.bridgeAddress?i.bridgeAddress:null},[n.contracts.SWAP_BRIDGE_ROUTER,q]),me=re(async r=>{if(!t)throw new Error("Wallet is not connected.");let i=ce(r.fromToken),c=ce(r.toToken),l=C(i,c);if(!l)throw new Error("Route is not available.");if(!Re(l.type)&&l.type!=="swap-bridge"||l.from.isNativeToken)return null;let k=le(r.fromAmount);if(k<=0n)return null;let v=await Le(l);return!v||await Ie(s,{address:l.from.address,abi:It,functionName:"allowance",args:[t,v],chainId:l.from.chainId})>=k?null:{token:r.fromToken,tokenAddress:l.from.address,spenderAddress:v,amount:r.fromAmount}},[C,Le,s,t]),ie=re(async(r,i)=>{let c=le(i.amount||r.fromAmount);if(c<=0n)throw new Error("Approval amount is empty.");await j(i.token.chainId);let l=await en(s,{address:i.tokenAddress,abi:It,functionName:"approve",args:[i.spenderAddress,c],chainId:i.token.chainId});await Wo(s,{hash:l,chainId:i.token.chainId})},[j,s]),Me=re(async(r,i)=>{let c=await be(r,i);await j(c.chainId);let l=await an(s,c.chainId,c.fallbackGasLimit,Mo(i.type),{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value});return{txHash:await en(s,{address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value,chainId:c.chainId,...l}),fromToken:r.fromToken,toToken:r.toToken,fromAmount:r.fromAmount,toAmount:r.toAmount}},[be,j,s,t]),X=re(async(r,i)=>{let c=t;if(!c)throw new Error("Wallet is not connected.");let l=i.steps.find(rt=>rt.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let k=i.from.address,v=i.from.chainId,R=le(r.fromAmount);if(R<=0n)throw new Error("Bridge amount is empty.");let B=await A(i),F=$e(B?.gasFee??B?.gas_fee),u=dn(R,B?.exFeeRate??B?.ex_fee_rate),d=R+u+F,[I,y]=await Promise.all([Ie(s,{address:k,abi:tn,functionName:"name",chainId:v}),Ie(s,{address:k,abi:tn,functionName:"nonces",args:[c],chainId:v})]),N=BigInt(Math.floor(Date.now()/1e3)+300),z=await Fo(s,{domain:{name:I,version:"1",chainId:v,verifyingContract:k},types:{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},primaryType:"Permit",message:{owner:c,spender:l.bridgeAddress,value:d,nonce:y,deadline:N}}),{r:ke,s:M,v:Y,yParity:Z}=Eo(z),_e=Y!==void 0?Number(Y):Z+27,Ee={exFee:u.toString(),from:v,fromToken:k,nonce:Number(y),gasFee:F.toString(),permitArgs:{account:c,deadline:N.toString(),r:ke,s:M,token:k,v:_e,value:d.toString()},to:c,toChainID:String(i.to.chainId),value:d.toString()},pe=await on(`${n.bridgeApi}/permit`,Ee),ve=pe?.requestId??pe?.request_id;if(!ve)throw new Error("Bridge permit request failed.");let ye=await Qo(n.bridgeApi,ve);if(!At(ye))throw new Error("Bridge submitted, but confirmation timed out. Check History shortly.");return{txHash:ye,fromToken:r.fromToken,toToken:r.toToken,fromAmount:r.fromAmount,toAmount:r.toAmount}},[n,A,s,t]),Se=re(async r=>{let i=ce(r.fromToken),c=ce(r.toToken),l=C(i,c);if(!l)throw new Error("Route is not available.");if(!(Re(l.type)||l.type==="swap-bridge"||l.type==="bridge-swap"||l.type==="bridge"))throw new Error("This bridge route is not supported yet.");return{...l.type==="bridge"&&l.from.chainId===n.chainIds.bsc&&l.from.address.toLowerCase()===n.contracts.BSC_CROSS.toLowerCase()?await X(r,l):await Me(r,l),pathType:l.type,routeTokens:Ir(l,h)}},[h,n,C,X,Me]);return{bridgeTokens:W,bridgeHistory:V,getBridgeApproval:me,approveBridge:ie,getBridgeQuote:ze,getBridgeToTokens:Ce,submitBridge:Se,isLoading:f.isLoading||b.isLoading||T.isLoading||S.isLoading||m.some(r=>r.isLoading)}}import{useEffect as kn,useRef as vr,useState as xn}from"react";import{useAccount as Pr}from"wagmi";function Bt(e){let{address:t,connector:o}=Pr(),{currentWallet:s}=Oe(),n=e?.walletId!==void 0?e.walletId:s,a=e?.connector!==void 0?e.connector:o,g=e?.address!==void 0?e.address:t,[f,b]=xn({loginType:null,accountName:null,accounts:[],isResolved:!1}),p=vr(new Map),[w,T]=xn(0);return kn(()=>{let S=!1;if(n!=="cross_embedded")return b({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{S=!0};if(!a)return b({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{S=!0};b(h=>({...h,isResolved:!1}));let m=20,x=300,P=async()=>{if(typeof a.getProvider!="function")return"retry";let h;try{h=await a.getProvider()}catch{return"retry"}let C=h?.sdk;if(!C)return"giveup";try{let W=C.getRNBridgeActiveWallet?.(),Ce=W?.walletName?.trim();W&&Ce&&p.current.set(W.address.toLowerCase(),Ce)}catch{}let[_,O]=await Promise.all([C.getUserInfo?.().catch(()=>null)??null,C.getAddresses?.().catch(()=>null)??null]);if(S)return"done";let K=_?.loginType,te=K==="google"||K==="apple"?K:null;if(!te)return"retry";let V=g?.toLowerCase(),$=V&&Array.isArray(O)?O.find(W=>W.address.toLowerCase()===V):null,D=Array.isArray(O)?O.filter(W=>/^0x[a-fA-F0-9]{40}$/.test(W.address)).map(W=>({address:W.address.toLowerCase(),...Number.isFinite(W.index)?{index:W.index}:{},...W.name?.trim()?{name:W.name.trim()}:{}})):[],G=V?p.current.get(V)?.trim():void 0,he=!$&&V&&/^0x[a-fA-F0-9]{40}$/.test(V)?[...D,{address:V,index:D.length,...G?{name:G}:{}}]:D,A=G||$?.name?.trim()||(typeof $?.index=="number"?`Account ${$.index+1}`:g?`${g.slice(0,6)}\u2026${g.slice(-4)}`:null);return b({loginType:te,accountName:A,accounts:he,isResolved:!0}),"done"};return(async()=>{for(let h=0;h<m;h++){if(S)return;let C=await P();if(C==="done")return;if(C==="giveup"){S||b({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(_=>setTimeout(_,x))}S||b({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{S=!0}},[n,a,g,w]),kn(()=>{if(n!=="cross_embedded"||!a||typeof a.getProvider!="function")return;let S=!1,m;return(async()=>{let x;try{x=await a.getProvider()}catch{return}if(S)return;let P=x?.sdk;P?.on&&(m=P.on("addressChanged",({address:h,walletName:C})=>{let _=C?.trim();_&&(p.current.set(h.toLowerCase(),_),T(O=>O+1))}))})(),()=>{S=!0,m?.()}},[n,a]),f}import{Fragment as Sn,jsx as de,jsxs as Ze}from"react/jsx-runtime";var Mr=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalSupply",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}],Gr=[{type:"function",name:"earned",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"posaActive",stateMutability:"view",inputs:[],outputs:[{name:"",type:"bool"}]},{type:"function",name:"lastRewardBlock",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalStaked",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]}],Ur={dev:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},stage:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},production:{poolAddress:"0x000000068122d9bB43B4BCF5497A10EdfA9F5E93",crossChainId:612055,networkStatsUrl:"https://posa-api.crosstoken.io/api/v1/network/stats"}},Ot=10n**18n,Kr={google:{name:"Google",iconUrl:Pn,connectorId:He.CROSSx},apple:{name:"Apple",iconUrl:Dt,connectorId:He.CROSSx},cross:{name:"CROSSx",iconUrl:Ft,connectorId:He.CROSSx},metamask:{name:"MetaMask",iconUrl:An,connectorId:He.MetaMask},binance:{name:"Binance Wallet",iconUrl:vn,connectorId:He.Binance}};function $r(e){switch(e){case"cross_embedded":return He.CROSSx;case"metamask":return He.MetaMask;case"binance":return He.Binance;default:return}}function qr(e,t){switch(e){case"cross_embedded":return t==="google"?{name:"Google",iconUrl:Pn}:t==="apple"?{name:"Apple",iconUrl:Dt}:{name:"CROSSx",iconUrl:Ft};case"cross_wallet":return{name:"CROSSx Wallet",iconUrl:Ft};case"cross_extension":return{name:"CROSSx Extension",iconUrl:Lr};case"metamask":return{name:"MetaMask",iconUrl:An};case"binance":return{name:"Binance Wallet",iconUrl:vn};default:return null}}var Hr="Bridge is available only with the CROSSx 2.0 wallet.",Vr="Send is available only with the CROSSx 2.0 wallet.";function zr({label:e="Connect Wallet",className:t,style:o,walletInfoStyle:s,user:n,enablePortfolio:a,portfolio:g,theme:f,accountName:b,connectorId:p,showPortfolio:w,sendAccounts:T,getTransactionReceipt:S,sendTransaction:m,estimateGas:x,onDisconnect:P,onSelectWallet:h,onBuy:C,onRampRedirectUrl:_,bridgeTokens:O,bridgeHistory:K,getBridgeQuote:te,getBridgeToTokens:V,getBridgeApproval:$,approveBridge:D,submitBridge:G,showBalance:he=!0,env:E,...A}){let{address:W,isConnected:Ce,connector:Ve,chain:j}=Br(),q=Er(),ue=_r(),{switchChainAsync:be}=Nr(),{sendTransactionAsync:De}=Or(),{connectWallet:We,disconnect:ze,selectWallet:Le,currentWallet:me,isConnecting:ie}=Oe(),Me=it(),X=f??Me?.mode??"dark",Se=lt(()=>Fr(E),[E]),r=n?.address??W,i=n?Kr[n.provider]:null,{loginType:c,accountName:l,accounts:k}=Bt({walletId:me,connector:Ve,address:r}),v=lt(()=>i?{name:i.name,iconUrl:i.iconUrl}:qr(me,c),[i,me,c]),R=b??n?.name??l??void 0,B=i?i.connectorId:$r(me),F=p??B,u=g??w??!!a,d=Rt({env:Se,walletAddress:r,enabled:Ce&&!!r&&he}),I=O??d.bridgeTokens,y=K??d.bridgeHistory,N=te??d.getBridgeQuote,z=V??d.getBridgeToTokens,ke=$??d.getBridgeApproval,M=D??d.approveBridge,Y=G??d.submitBridge,Z=qe(()=>{We().catch(L=>{console.error("[crossx-kit] connectWallet error:",L)})},[We]),_e=qe(()=>{ze()},[ze]),Ee=P??_e,pe=Dr(),{eligibility:ve}=Wr({network:j?String(j.id):void 0}),ye=ve?.allowed===!0,rt=lt(()=>{if(C)return C;if(!(!pe||!j||!ye))return()=>pe.open({crypto:j.nativeCurrency?.symbol??"USDT",network:String(j.id),..._?{redirectUrl:_}:{}}).then(()=>{}).catch(L=>{throw console.warn("[crossx-kit] onramp open failed:",L),L})},[C,pe,j,ye,_]),Wt=Rr();Ar(()=>{if(pe?.onStatus)return pe.onStatus(()=>{Wt.invalidateQueries()})},[pe,Wt]);let On=lt(()=>{if(!C&&!(!pe||!j)&&!ye)return"On-ramp is not available in your region."},[C,pe,j,ye]),Lt=lt(()=>n?n.provider==="google"||n.provider==="apple":me==="cross_embedded",[n,me]),Nn=A.onBridgeDisabledMessage??(Lt?void 0:Hr),Fn=A.onSendDisabledMessage??(Lt?void 0:Vr),Dn=n?n.provider==="google"||n.provider==="apple":me==="cross_embedded",Wn=qe(()=>{Le().catch(L=>{console.error("[crossx-kit] selectWallet error:",L)})},[Le]),Mt=h??(Dn?Wn:void 0),Ln=qe(async({hash:L,chainId:ne})=>{let oe=_t(q,ne?{chainId:ne}:void 0);if(!oe)return null;try{return await oe.getTransactionReceipt({hash:L})}catch{return null}},[q]),Mn=qe(async L=>{L.chainId!==void 0&&L.chainId!==ue&&await be({chainId:L.chainId});let oe=L.chainId===56||L.chainId===97?{...L,type:"legacy"}:L;return(m??De)(oe)},[m,De,ue,be]),Gn=u?Mn:m,Un=qe(async L=>{let ne=L.chainId??ue,oe=_t(q,ne?{chainId:ne}:void 0);if(!oe)throw new Error(`publicClient for chainId ${ne??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let fe=ne===56||ne===97,[ge,xe]=await Promise.all([oe.estimateGas({account:L.from,to:L.to,value:L.value,data:L.data}),(async()=>{if(fe)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await oe.getGasPrice()};try{let Q=await oe.estimateFeesPerGas();return{maxFeePerGas:Q.maxFeePerGas,maxPriorityFeePerGas:Q.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await oe.getGasPrice()}}})()]);return{gasLimit:ge,maxFeePerGas:xe.maxFeePerGas,maxPriorityFeePerGas:xe.maxPriorityFeePerGas,gasPrice:xe.gasPrice}},[q,ue]),Kn=x??Un,$n=qe(async L=>{let ne={};if(!W||L.length===0)return ne;let oe=L.flatMap(ge=>{let Q={address:ge,abi:Mr,chainId:ue};return[{...Q,functionName:"balanceOf",args:[W]},{...Q,functionName:"totalSupply"},{...Q,functionName:"decimals"}]}),fe;try{fe=await Tn(q,{contracts:oe,allowFailure:!0})}catch{return ne}return L.forEach((ge,xe)=>{let Q=xe*3,Te=fe[Q],ut=fe[Q+1],Je=fe[Q+2];!Te||Te.status!=="success"||(ne[ge.toLowerCase()]={balance:Te.result,totalSupply:ut&&ut.status==="success"?ut.result:void 0,decimals:Je&&Je.status==="success"?Number(Je.result):void 0})}),ne},[q,W,ue]),qn=qe(async L=>{let ne={earnedWei:0n,stakedWei:0n};if(!L)return ne;let oe=Ur[Se],fe={address:oe.poolAddress,abi:Gr,chainId:oe.crossChainId},ge;try{ge=await Tn(q,{allowFailure:!0,contracts:[{...fe,functionName:"earned",args:[L]},{...fe,functionName:"balanceOf",args:[L]},{...fe,functionName:"posaActive"},{...fe,functionName:"lastRewardBlock"},{...fe,functionName:"totalStaked"}]})}catch{return ne}let xe=Qe=>ge[Qe]&&ge[Qe].status==="success"?ge[Qe].result:0n,Q=xe(0),Te=xe(1);if(ge[2]&&ge[2].status==="success"?ge[2].result:!1)return{earnedWei:Q,stakedWei:Te};let Je=xe(3),Kt=xe(4);if(Kt===0n)return{earnedWei:Q,stakedWei:Te};let wt=0n;try{wt=await _t(q,{chainId:oe.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:Q,stakedWei:Te}}if(wt<=Je)return{earnedWei:Q,stakedWei:Te};let ht=0n;try{let Qe=await fetch(oe.networkStatsUrl).then(Ct=>Ct.json()),$t=Qe?.data?.block_reward??Qe?.block_reward;if($t){let[Ct,Qn=""]=String($t).split("."),jn=(Qn+"0".repeat(18)).slice(0,18);ht=BigInt(Ct||"0")*Ot+BigInt(jn||"0")}}catch{}if(ht===0n)return{earnedWei:Q,stakedWei:Te};let Vn=(wt-Je)*ht*Ot/Kt,zn=Te*Vn/Ot;return{earnedWei:Q+zn,stakedWei:Te}},[q,Se]),Gt=!Mt,Ut=t?`cb-button ${t}`:"cb-button",Hn=t?`cb-pill ${t}`:"cb-pill";return ie&&!Ce?Ze(Sn,{children:[de("style",{children:Nt}),Ze("button",{type:"button",disabled:!0,className:Ut,style:o,"aria-busy":"true",children:[de("span",{className:"cb-spinner","aria-hidden":"true"}),de("span",{className:"cb-button-label",children:"Connecting..."})]})]}):Ce&&r?Ze("span",{"data-crossx-wallet-info":Gt?"external":"embedded",children:[de("style",{children:Nt}),Gt&&de("style",{children:jr}),Ze(Et,{...A,env:Se,theme:X,showBalance:he,walletAddress:r,accountName:R,sendAccounts:T??k,connectorId:F,showPortfolio:u,onDisconnect:Ee,onSelectWallet:Mt,onBuy:rt,onBuyDisabledMessage:On,onBridgeDisabledMessage:Nn,onSendDisabledMessage:Fn,sendTransaction:Gn,getTransactionReceipt:S??Ln,estimateGas:Kn,lpBalanceReader:$n,stakingRewardsReader:qn,bridgeTokens:I,bridgeHistory:y,getBridgeQuote:N,getBridgeToTokens:z,getBridgeApproval:ke,approveBridge:M,submitBridge:Y,style:s,children:[de(Et.Trigger,{asChild:!0,children:Ze("button",{type:"button",className:Hn,style:o,"aria-label":`Connected with ${v?.name??"wallet"}: ${In(r)}`,children:[v?.iconUrl?de("img",{src:v.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":v.iconUrl===Dt?"apple":void 0}):de("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),de("span",{className:"cb-pill-address",children:In(r)})]})}),de(Et.Content,{align:"end",sideOffset:8})]})]}):Ze(Sn,{children:[de("style",{children:Nt}),Ze("button",{type:"button",onClick:Z,className:Ut,style:o,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[de(Qr,{}),de("span",{className:"cb-button-label",children:e})]})]})}function Qr(){return de("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:de("path",{d:"M11.4368 10.5007C11.4368 9.9538 11.6544 9.42855 12.041 9.04175C12.4278 8.65492 12.9529 8.4375 13.5 8.4375H15.1875V6.00073L15.1732 5.92822C15.1639 5.90585 15.15 5.88528 15.1326 5.8678C15.0973 5.83263 15.0494 5.81287 14.9996 5.81287H3.74963C3.4787 5.81287 3.21001 5.75949 2.95972 5.65576C2.90937 5.63488 2.86089 5.61017 2.8125 5.58545V14.2504C2.8125 14.4989 2.91141 14.7371 3.08716 14.9128C3.2629 15.0886 3.50109 15.1875 3.74963 15.1875H15.0007C15.0252 15.1875 15.0495 15.1826 15.0721 15.1732C15.0948 15.1638 15.1152 15.1499 15.1326 15.1326C15.1499 15.1152 15.1638 15.0948 15.1732 15.0721C15.1826 15.0495 15.1875 15.0252 15.1875 15.0007V12.5629H13.5C12.9529 12.5629 12.4278 12.3454 12.041 11.9586C11.6545 11.5719 11.4369 11.0475 11.4368 10.5007ZM12.5618 10.5007C12.5619 10.7491 12.6609 10.9875 12.8364 11.1632C13.0123 11.3391 13.2513 11.4379 13.5 11.4379H15.75C15.7998 11.4379 15.8477 11.4182 15.8829 11.3829C15.9182 11.3477 15.9379 11.2998 15.9379 11.25V9.75037C15.9379 9.70054 15.9182 9.65266 15.8829 9.61743C15.8477 9.5822 15.7998 9.5625 15.75 9.5625H13.5C13.2513 9.5625 13.0123 9.66131 12.8364 9.83716C12.6607 10.013 12.5618 10.2522 12.5618 10.5007ZM13.6879 3.00037C13.6879 2.95054 13.6682 2.90266 13.6329 2.86743C13.5977 2.8322 13.5498 2.8125 13.5 2.8125H3.74963C3.50109 2.8125 3.2629 2.91141 3.08716 3.08716C2.91141 3.2629 2.8125 3.50109 2.8125 3.74963L2.81689 3.84192C2.82585 3.93354 2.8486 4.02351 2.88391 4.10889C2.93096 4.22263 3.00015 4.32614 3.08716 4.41321C3.17403 4.50009 3.2769 4.56936 3.39038 4.61646C3.50412 4.66359 3.62651 4.68787 3.74963 4.68787H13.6879V3.00037ZM14.8129 4.68787H14.9996C15.3473 4.68787 15.6808 4.82576 15.9269 5.07129C16.173 5.31702 16.3119 5.65077 16.3125 5.99854V8.56494C16.4469 8.62873 16.5711 8.7148 16.6783 8.82202C16.9246 9.06823 17.0629 9.40217 17.0629 9.75037V11.25C17.0629 11.5982 16.9246 11.9321 16.6783 12.1783C16.5712 12.2855 16.4468 12.3706 16.3125 12.4343V14.9985L16.3059 15.1282C16.2934 15.2564 16.2619 15.3822 16.2125 15.5017C16.1466 15.6612 16.05 15.806 15.928 15.928C15.806 16.05 15.6612 16.1466 15.5017 16.2125C15.3425 16.2783 15.1719 16.3126 14.9996 16.3125H3.74963C3.20272 16.3125 2.67847 16.095 2.29175 15.7083C1.90502 15.3215 1.6875 14.7973 1.6875 14.2504V3.74963C1.6875 3.20272 1.90502 2.67847 2.29175 2.29175C2.67847 1.90502 3.20272 1.6875 3.74963 1.6875H13.5C13.8482 1.6875 14.1821 1.82581 14.4283 2.07202C14.6746 2.31823 14.8129 2.65217 14.8129 3.00037V4.68787Z",fill:"currentColor"})})}var jr=`
2
+ [data-crossx-wallet-info="external"] .wi-select-wallet-btn {
3
+ display: none !important;
4
+ }
5
+ `;function In(e){return`${e.slice(0,6)}...${e.slice(-4)}`}var Nt=`
6
+ .cb-button {
7
+ -webkit-font-smoothing: antialiased;
8
+ --cb-bg: var(--ds-accent-primary-default, #00D5AA);
9
+ --cb-bg-hover: var(--ds-accent-primary-high, #00a0a2);
10
+ --cb-color: var(--ds-accent-primary-on, #000);
11
+ --cb-border: none;
12
+ --cb-radius: 8px;
13
+ --cb-height: 36px;
14
+ --cb-padding: 0 16px;
15
+ --cb-font-family: Inter, system-ui, -apple-system, sans-serif;
16
+ --cb-font-size: 14px;
17
+ --cb-font-weight: 500;
18
+ --cb-gap: 8px;
19
+ --cb-transition: background-color 0.15s ease, transform 0.1s ease;
20
+ --cb-loading-opacity: 0.7;
21
+ --cb-press-scale: 0.95;
22
+ --cb-spinner-size: 14px;
23
+ --cb-spinner-thumb: currentColor;
24
+ --cb-spinner-track: color-mix(in srgb, currentColor 20%, transparent);
25
+ --cb-icon-size: 18px;
26
+
27
+ display: inline-flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ box-sizing: border-box;
31
+ height: var(--cb-height);
32
+ gap: var(--cb-gap);
33
+ padding: var(--cb-padding);
34
+ border-radius: var(--cb-radius);
35
+ border: var(--cb-border);
36
+ background: var(--cb-bg);
37
+ color: var(--cb-color);
38
+ font-family: var(--cb-font-family);
39
+ font-size: var(--cb-font-size);
40
+ font-weight: var(--cb-font-weight);
41
+ cursor: pointer;
42
+ transition: var(--cb-transition);
43
+ }
44
+ .cb-button:hover:not(:disabled) { background: var(--cb-bg-hover); }
45
+ .cb-button:active:not(:disabled) { transform: scale(var(--cb-press-scale)); }
46
+ .cb-button:disabled, .cb-button[aria-busy="true"] {
47
+ cursor: default;
48
+ opacity: var(--cb-loading-opacity);
49
+ }
50
+ .cb-spinner {
51
+ display: inline-block;
52
+ width: var(--cb-spinner-size);
53
+ height: var(--cb-spinner-size);
54
+ border: 2px solid var(--cb-spinner-track);
55
+ border-top-color: var(--cb-spinner-thumb);
56
+ border-radius: 50%;
57
+ animation: cck-cb-spin 0.6s linear infinite;
58
+ flex-shrink: 0;
59
+ }
60
+ .cb-button-icon {
61
+ width: var(--cb-icon-size);
62
+ height: var(--cb-icon-size);
63
+ flex-shrink: 0;
64
+ }
65
+ .cb-button-label { white-space: nowrap; }
66
+ .cb-pill {
67
+ --cb-pill-bg: var(--ds-surface-default, #1e232e);
68
+ --cb-pill-bg-hover: var(--ds-surface-medium, #252b39);
69
+ --cb-pill-color: var(--ds-content-high, #ffffffd9);
70
+ --cb-pill-border: 1px solid var(--ds-border-default, #ffffff12);
71
+ --cb-pill-border-hover: 1px solid var(--ds-border-medium, #ffffff2e);
72
+ --cb-pill-radius: 8px;
73
+ --cb-pill-height: 36px;
74
+ --cb-pill-padding: 0 12px;
75
+ --cb-pill-press-scale: 0.95;
76
+ --cb-pill-font-family: Inter, system-ui, -apple-system, sans-serif;
77
+ --cb-pill-font-size: 14px;
78
+ --cb-pill-font-weight: 500;
79
+ --cb-pill-gap: 8px;
80
+ --cb-pill-icon-size: 20px;
81
+ --cb-pill-icon-placeholder-bg: var(--ds-surface-high, #2a2d3a);
82
+ --cb-pill-address-font: Inter, system-ui, -apple-system, sans-serif;
83
+ --cb-pill-address-font-size: 14px;
84
+ --cb-pill-address-letter-spacing: -0.01em;
85
+
86
+ display: inline-flex;
87
+ align-items: center;
88
+ box-sizing: border-box;
89
+ height: var(--cb-pill-height);
90
+ gap: var(--cb-pill-gap);
91
+ padding: var(--cb-pill-padding);
92
+ border-radius: var(--cb-pill-radius);
93
+ border: var(--cb-pill-border);
94
+ background: var(--cb-pill-bg);
95
+ color: var(--cb-pill-color);
96
+ font-family: var(--cb-pill-font-family);
97
+ font-size: var(--cb-pill-font-size);
98
+ font-weight: var(--cb-pill-font-weight);
99
+ cursor: pointer;
100
+ }
101
+ .cb-pill:hover,
102
+ .cb-pill[data-state="open"] { background: var(--cb-pill-bg-hover); border: var(--cb-pill-border-hover, 1px solid var(--ds-border-medium, #ffffff2e)); }
103
+ .cb-pill:active:not(:disabled) { transform: scale(var(--cb-pill-press-scale)); }
104
+ .cb-pill-icon {
105
+ width: var(--cb-pill-icon-size);
106
+ height: var(--cb-pill-icon-size);
107
+ border-radius: 50%;
108
+ object-fit: contain;
109
+ flex-shrink: 0;
110
+ background: transparent;
111
+ }
112
+ /* Apple is a monochrome black logomark in an <img> data URI (can't follow
113
+ theme via currentColor). Flip it to white in dark mode so it stays
114
+ visible on the dark pill; multicolor marks (Google/MetaMask/Binance/
115
+ CROSSx) are untouched. */
116
+ [data-theme="dark"] .cb-pill-icon[data-provider="apple"] {
117
+ filter: invert(1);
118
+ }
119
+ .cb-pill-icon-placeholder {
120
+ display: inline-block;
121
+ width: var(--cb-pill-icon-size);
122
+ height: var(--cb-pill-icon-size);
123
+ border-radius: 50%;
124
+ background: var(--cb-pill-icon-placeholder-bg);
125
+ flex-shrink: 0;
126
+ }
127
+ .cb-pill-address {
128
+ font-family: var(--cb-pill-address-font);
129
+ font-size: var(--cb-pill-address-font-size);
130
+ letter-spacing: var(--cb-pill-address-letter-spacing);
131
+ }
132
+ @media (max-width: 767.98px) {
133
+ .cb-button, .cb-pill {
134
+ width: 36px;
135
+ min-width: 36px;
136
+ padding: 0;
137
+ }
138
+ .cb-button-label, .cb-pill-address { display: none; }
139
+ }
140
+ @keyframes cck-cb-spin {
141
+ to { transform: rotate(360deg); }
142
+ }
143
+ `;import{useCallback as Rn,useEffect as Xr,useMemo as Bn,useState as Yr}from"react";import{detectWallets as _n,DEFAULT_WALLET_REGISTRY as En}from"@nexus-cross/connect-kit-wagmi";import{jsx as se,jsxs as Be}from"react/jsx-runtime";var Zr=["Ensure your wallet extension is installed and unlocked","Try refreshing the page","Some wallets may require you to first open the extension","You can try clicking the wallet anyway"],Jr="Connect with one of our available wallet providers to continue.";function es({open:e,onClose:t,onSelect:o,title:s="Connect Wallet",description:n=Jr,troubleshootingTips:a=Zr}){let{availableWallets:g}=Oe(),[f,b]=Yr({});Xr(()=>{if(!e)return;let m=_n(En),x={};for(let h of m)h.installed!==void 0&&(x[h.id]=h.installed);b(x);let P=setTimeout(()=>{let h=_n(En),C={};for(let _ of h)_.installed!==void 0&&(C[_.id]=_.installed);b(C)},1e3);return()=>clearTimeout(P)},[e]);let p=Bn(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),w=Bn(()=>p?g.filter(m=>m.type!=="extension"):g,[g,p]),T=Rn(m=>{if(!f[m.walletId]&&m.installUrl&&m.type==="extension"){window.open(m.installUrl,"_blank");return}t(),o(m.walletId)},[t,o,f]),S=Rn((m,x)=>{m.stopPropagation(),t(),window.open(x,"_blank")},[t]);return e?se("div",{style:U.overlay,onClick:t,children:Be("div",{style:U.modal,onClick:m=>m.stopPropagation(),children:[Be("div",{style:U.header,children:[se("h2",{style:U.title,children:s}),se("button",{type:"button",onClick:t,style:U.closeBtn,"aria-label":"Close",children:Be("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[se("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),se("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),se("p",{style:U.desc,children:n}),se("div",{style:U.walletList,children:w.map(m=>{let x=f[m.walletId],P=x===!1&&m.type==="extension"&&!!m.installUrl;return Be("div",{style:U.walletGroup,children:[Be("button",{type:"button",onClick:()=>T(m),style:{...U.walletItem,...m.walletId==="cross_wallet"?U.walletItemAccent:{}},"aria-label":`Connect with ${m.name}`,children:[m.iconUrl?se("img",{src:m.iconUrl,alt:"",style:U.walletIcon}):se("div",{style:U.walletIconPlaceholder}),Be("div",{style:U.walletInfo,children:[Be("div",{style:U.walletNameRow,children:[se("span",{style:U.walletName,children:m.name}),x!==void 0&&se("span",{style:{...U.badge,...x?U.badgeInstalled:U.badgeNotInstalled},children:x?"Installed":"Not Installed"})]}),se("span",{style:U.walletDesc,children:P?"Extension not detected \u2014 click to install":m.type==="extension"?"Browser extension approval is required":m.walletId==="cross_wallet"?"App approval is required":m.walletId==="binance"?"Mobile app only \u2014 Add CROSS network first":x?"Connect with browser extension":"Scan QR code with app"})]})]}),m.guideUrl&&Be("button",{type:"button",onClick:h=>S(h,m.guideUrl),style:U.guideBtn,children:[se("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),m.guideLabel??"Required Settings"]})]},m.walletId)})}),Be("div",{style:U.troubleshoot,children:[se("h3",{style:U.troubleshootTitle,children:"Wallet not detected?"}),se("ul",{style:U.troubleshootList,children:a.map(m=>Be("li",{style:U.troubleshootItem,children:[se("span",{style:U.troubleshootDot,"aria-hidden":"true"}),se("span",{children:m})]},m))})]})]})}):null}var H={surfaceBg:"var(--wi-surface-bg, #121212)",surfaceDefault:"var(--wi-surface-default, rgba(255,255,255,0.05))",surfaceSubtle:"var(--wi-surface-subtle, rgba(255,255,255,0.1))",borderDefault:"var(--wi-border-default, rgba(255,255,255,0.05))",textPrimary:"var(--wi-texticon-primary, #ffffff)",textSecondary:"var(--wi-texticon-secondary, rgba(255,255,255,0.7))",textTertiary:"var(--wi-texticon-tertiary, rgba(255,255,255,0.5))",primary:"var(--wi-primary, #019d92)",primarySoft:"var(--crossx-kit-primary-soft, rgba(1,157,146,0.15))",accentGradient:"var(--crossx-kit-accent-gradient, linear-gradient(113deg, rgba(255,255,255,0.05) 0%, rgba(1,157,146,0.12) 70%, rgba(255,255,255,0.05) 70%, rgba(1,157,146,0.12) 80%, rgba(255,255,255,0.05) 80%))",warningBg:"var(--crossx-kit-warning-bg, rgba(245,158,11,0.1))",warningBorder:"var(--crossx-kit-warning-border, rgba(245,158,11,0.25))",warningText:"var(--crossx-kit-warning-text, #fbbf24)"},U={overlay:{position:"fixed",inset:0,zIndex:1e4,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",backdropFilter:"blur(4px)"},modal:{width:"100%",maxWidth:"420px",margin:"16px",background:H.surfaceBg,border:`1px solid ${H.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:H.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:H.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:H.textTertiary,margin:0,lineHeight:1.5},walletList:{display:"flex",flexDirection:"column",gap:"6px",padding:"0 12px 12px"},walletGroup:{display:"flex",flexDirection:"column",borderRadius:"12px",overflow:"hidden",background:H.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:H.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:H.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:H.surfaceSubtle,flexShrink:0},walletInfo:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"3px"},walletNameRow:{display:"flex",alignItems:"center",gap:"8px"},walletName:{fontSize:"15px",fontWeight:700,lineHeight:1.3,color:H.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:H.primarySoft,color:H.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:H.textTertiary},walletDesc:{fontSize:"11px",color:H.textSecondary,lineHeight:1.3},guideBtn:{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px",margin:"0 14px 14px",padding:"10px 12px",borderRadius:"10px",border:`1px solid ${H.warningBorder}`,background:H.warningBg,color:H.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:H.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:H.textPrimary,margin:"0 0 8px"},troubleshootList:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"8px"},troubleshootItem:{display:"flex",alignItems:"flex-start",gap:"8px",fontSize:"11px",color:H.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:H.textSecondary}};import{useOnRamp as mi,useOnRampEligibility as pi,OnRampProvider as fi}from"@nexus-cross/onramp/react";import{WalletInfo as bi,ConnectorId as yi}from"@nexus-cross/dapp-ui";import{AppLauncher as hi,AppLauncherTrigger as Ci,AppLauncherContent as ki,useGlobalMenu as xi}from"@nexus-cross/dapp-ui";import{SkillsButton as Ii}from"@nexus-cross/dapp-ui";import{OnRampError as vi}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as Ai,formatBalance as Ri,formatWei as Bi}from"@nexus-cross/connect-kit-core";qt();export{Oe as a,to as b,it as c,xt as d,Bo as e,Rt as f,Bt as g,zr as h,es as i,mi as j,pi as k,fi as l,bi as m,yi as n,hi as o,Ci as p,ki as q,xi as r,Ii as s,vi as t,Ai as u,Ri as v,Bi as w};
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- import{a as S,b as _,c as V,d as X,e as W,f as h,g as j,h as F,i as L,j as B,k as U,l as q,m as z,n as D,o as G,p as H,q as J,r as Q,s as Y,t as Z,u as $,v as ee,w as ne}from"./chunk-JM5ZL2KZ.js";import{bscMainnetNetwork as v,bscTestnetNetwork as x,createCrossxConfig as E,crossMainnetNetwork as O,crossTestnetNetwork as k}from"@nexus-cross/connect-kit-wagmi";import{toNexusAdapter as M}from"@nexus-cross/connect-kit-wagmi/to-nexus";import{reownAdapter as P}from"@nexus-cross/connect-kit-wagmi/reown";import{embeddedConnectorFactory as A}from"@nexus-cross/connect-kit-wagmi/embedded";function d(e){try{return import.meta.env?.[e]}catch{return}}function p(e){if(!(typeof process>"u"))return process.env?.[e]}function I(){return d("VITE_CROSSX_ENVIRONMENT")??d("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("CROSSX_ENVIRONMENT")}function K(e){switch(e?.toLowerCase()){case"dev":case"development":return"development";case"stage":case"staging":case"stg":return"staging";default:return"production"}}function R(e){return e==="production"?[O,v]:[k,x]}function T(){return{name:"CROSSx DApp",url:typeof window<"u"&&window.location?.origin?window.location.origin:"https://example.com"}}function b(e){let{app:c,appMetadata:l,networks:u,defaultNetwork:f,wallets:n,embedded:C=!0,environment:w,toNexus:t,reown:o,...r}=e,g=K(w??I()),i=u??R(g),a=Array.isArray(n)?null:n??"all",s=a!=="external-only"&&t!==!1,m=a!=="cross-only"&&o!==!1&&!!r.reownProjectId,y=t===!1?void 0:t,N=o===!1?void 0:o;if(a==="external-only"&&!r.reownProjectId)throw new Error('[crossx-kit] createConnectKitConfig({ wallets: "external-only" }) requires `reownProjectId`.');return E({...r,appMetadata:l??c??T(),networks:i,defaultNetwork:f??i[0],...Array.isArray(n)?{wallets:n}:{},...s?{crossProvider:M(y)}:{},...m?{reownProvider:P(N)}:{},...s&&C?{embeddedConnectorFactory:A}:{}})}export{G as AppLauncher,J as AppLauncherContent,H as AppLauncherTrigger,F as ConnectButton,$ as ConnectionStatus,D as ConnectorId,W as CrossConnectKitProvider,X as CrossConnectModal,Z as OnRampError,q as OnRampProvider,L as OtherWalletsModal,Y as SkillsButton,z as WalletInfo,b as createConnectKitConfig,ee as formatBalance,ne as formatWei,S as useCrossConnectKit,_ as useCrossConnectKitTheme,h as useCrossdBridgeAdapter,j as useCrossxEmbeddedInfo,Q as useGlobalMenu,B as useOnRamp,U as useOnRampEligibility,V as useOptionalCrossConnectKitTheme};
1
+ import{a as S,b as _,c as V,d as X,e as W,f as h,g as j,h as F,i as L,j as B,k as U,l as q,m as z,n as D,o as G,p as H,q as J,r as Q,s as Y,t as Z,u as $,v as ee,w as ne}from"./chunk-Y33YEHSK.js";import{bscMainnetNetwork as v,bscTestnetNetwork as x,createCrossxConfig as E,crossMainnetNetwork as O,crossTestnetNetwork as k}from"@nexus-cross/connect-kit-wagmi";import{toNexusAdapter as M}from"@nexus-cross/connect-kit-wagmi/to-nexus";import{reownAdapter as P}from"@nexus-cross/connect-kit-wagmi/reown";import{embeddedConnectorFactory as A}from"@nexus-cross/connect-kit-wagmi/embedded";function d(e){try{return import.meta.env?.[e]}catch{return}}function p(e){if(!(typeof process>"u"))return process.env?.[e]}function I(){return d("VITE_CROSSX_ENVIRONMENT")??d("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("CROSSX_ENVIRONMENT")}function K(e){switch(e?.toLowerCase()){case"dev":case"development":return"development";case"stage":case"staging":case"stg":return"staging";default:return"production"}}function R(e){return e==="production"?[O,v]:[k,x]}function T(){return{name:"CROSSx DApp",url:typeof window<"u"&&window.location?.origin?window.location.origin:"https://example.com"}}function b(e){let{app:c,appMetadata:l,networks:u,defaultNetwork:f,wallets:n,embedded:C=!0,environment:w,toNexus:t,reown:o,...r}=e,g=K(w??I()),i=u??R(g),a=Array.isArray(n)?null:n??"all",s=a!=="external-only"&&t!==!1,m=a!=="cross-only"&&o!==!1&&!!r.reownProjectId,y=t===!1?void 0:t,N=o===!1?void 0:o;if(a==="external-only"&&!r.reownProjectId)throw new Error('[crossx-kit] createConnectKitConfig({ wallets: "external-only" }) requires `reownProjectId`.');return E({...r,appMetadata:l??c??T(),networks:i,defaultNetwork:f??i[0],...Array.isArray(n)?{wallets:n}:{},...s?{crossProvider:M(y)}:{},...m?{reownProvider:P(N)}:{},...s&&C?{embeddedConnectorFactory:A}:{}})}export{G as AppLauncher,J as AppLauncherContent,H as AppLauncherTrigger,F as ConnectButton,$ as ConnectionStatus,D as ConnectorId,W as CrossConnectKitProvider,X as CrossConnectModal,Z as OnRampError,q as OnRampProvider,L as OtherWalletsModal,Y as SkillsButton,z as WalletInfo,b as createConnectKitConfig,ee as formatBalance,ne as formatWei,S as useCrossConnectKit,_ as useCrossConnectKitTheme,h as useCrossdBridgeAdapter,j as useCrossxEmbeddedInfo,Q as useGlobalMenu,B as useOnRamp,U as useOnRampEligibility,V as useOptionalCrossConnectKitTheme};
package/dist/index.d.ts CHANGED
@@ -127,25 +127,6 @@ interface ConnectButtonProps extends ForwardedWalletInfoProps {
127
127
  */
128
128
  onRampRedirectUrl?: string;
129
129
  }
130
- /**
131
- * `ConnectButton`은 내부에서 `WalletInfo`를 조립하지만, 호출측은 그 사실을
132
- * 몰라도 되도록 `WalletInfoProps`를 전부 pass-through 한다
133
- * (`walletAddress` / `children` 만 제외).
134
- *
135
- * 자동 계산 규칙 (명시적으로 주면 덮어쓰기):
136
- * - `walletAddress` ← `user.address` ?? wagmi `address`
137
- * - `connectorId` ← `user.provider` ?? `currentWallet` 매핑
138
- * - `accountName` ← `user.name` ?? crossy-sdk getAddresses name
139
- * - `onDisconnect` ← kit `disconnect()`
140
- * - `onSelectWallet` ← OAuth embedded 세션일 때만 kit `selectWallet()`
141
- * (외부 지갑은 기본 alert을 막기 위해 CSS로 숨김)
142
- * - `showPortfolio` ← `portfolio` ?? `showPortfolio` ?? legacy `enablePortfolio`
143
- * - `theme` ← kit provider의 `themeMode`
144
- * - `env` ← `NEXT_PUBLIC_CROSSX_ENVIRONMENT`, or `"production"`
145
- *
146
- * Trigger 버튼(주소 옆 pill)은 호출측이 건드릴 수 없다 — 플랫폼 아이콘 + 축약
147
- * 주소의 통일된 UX를 강제한다.
148
- */
149
130
  declare function ConnectButton({ label, className, style, walletInfoStyle, user, enablePortfolio, portfolio, theme: themeProp, accountName: accountNameProp, connectorId: connectorIdProp, showPortfolio: showPortfolioProp, sendAccounts: sendAccountsProp, getTransactionReceipt: getTransactionReceiptProp, sendTransaction: sendTransactionProp, estimateGas: estimateGasProp, onDisconnect: onDisconnectProp, onSelectWallet: onSelectWalletProp, onBuy: onBuyProp, onRampRedirectUrl, bridgeTokens: bridgeTokensProp, bridgeHistory: bridgeHistoryProp, getBridgeQuote: getBridgeQuoteProp, getBridgeToTokens: getBridgeToTokensProp, getBridgeApproval: getBridgeApprovalProp, approveBridge: approveBridgeProp, submitBridge: submitBridgeProp, showBalance, env, ...walletInfoRest }: ConnectButtonProps): react_jsx_runtime.JSX.Element;
150
131
 
151
132
  interface OtherWalletsModalProps {
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w}from"./chunk-JM5ZL2KZ.js";export{o as AppLauncher,q as AppLauncherContent,p as AppLauncherTrigger,h as ConnectButton,u as ConnectionStatus,n as ConnectorId,e as CrossConnectKitProvider,d as CrossConnectModal,t as OnRampError,l as OnRampProvider,i as OtherWalletsModal,s as SkillsButton,m as WalletInfo,v as formatBalance,w as formatWei,a as useCrossConnectKit,b as useCrossConnectKitTheme,f as useCrossdBridgeAdapter,g as useCrossxEmbeddedInfo,r as useGlobalMenu,j as useOnRamp,k as useOnRampEligibility,c as useOptionalCrossConnectKitTheme};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w}from"./chunk-Y33YEHSK.js";export{o as AppLauncher,q as AppLauncherContent,p as AppLauncherTrigger,h as ConnectButton,u as ConnectionStatus,n as ConnectorId,e as CrossConnectKitProvider,d as CrossConnectModal,t as OnRampError,l as OnRampProvider,i as OtherWalletsModal,s as SkillsButton,m as WalletInfo,v as formatBalance,w as formatWei,a as useCrossConnectKit,b as useCrossConnectKitTheme,f as useCrossdBridgeAdapter,g as useCrossxEmbeddedInfo,r as useGlobalMenu,j as useOnRamp,k as useOnRampEligibility,c as useOptionalCrossConnectKitTheme};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus-cross/connect-kit-react",
3
- "version": "1.3.3-beta.1",
3
+ "version": "1.3.3-beta.10",
4
4
  "description": "React components and hooks for @nexus-cross/connect-kit wallet connection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,11 +24,11 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@nexus-cross/connect-kit-core": "1.3.3-beta.1",
28
- "@nexus-cross/connect-kit-wagmi": "1.3.3-beta.1",
29
- "@nexus-cross/dapp-ui": "1.3.3-beta.1",
30
- "@nexus-cross/crossx-design-system": "1.3.3-beta.1",
31
- "@nexus-cross/onramp": "1.3.3-beta.1"
27
+ "@nexus-cross/connect-kit-core": "1.3.3-beta.10",
28
+ "@nexus-cross/connect-kit-wagmi": "1.3.3-beta.10",
29
+ "@nexus-cross/crossx-design-system": "1.3.3-beta.10",
30
+ "@nexus-cross/dapp-ui": "1.3.3-beta.10",
31
+ "@nexus-cross/onramp": "1.3.3-beta.10"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@tanstack/react-query": "^5.60.0",
@@ -1,143 +0,0 @@
1
- var Xe="1.3.3";var rt="__nexusCrossAppLauncherRuntime";function Gn(){if(typeof window>"u")return null;let e=window;return e[rt]??(e[rt]={mode:"dapp-ui"}),e[rt]}function Un(e){if(e.scheduled)return;e.scheduled=!0;let t=()=>{if(e.scheduled=!1,e.loggedMode!==e.mode){if(e.mode==="connect-kit-react"){let o=e.connectKitVersion??Xe;console.info(`[CROSSx App Launcher] connect-kit-react v${o} \uCD08\uAE30\uD654 \uC644\uB8CC (dapp-ui v${Xe}, \uC0AC\uC6A9 \uBAA8\uB4DC: connect-kit)`)}else console.info(`[CROSSx App Launcher] dapp-ui v${Xe} \uCD08\uAE30\uD654 \uC644\uB8CC (\uC0AC\uC6A9 \uBAA8\uB4DC: dapp-ui only)`);e.loggedMode=e.mode}};typeof queueMicrotask=="function"?queueMicrotask(t):Promise.resolve().then(t)}function Ft(){let e=Gn();e&&(e.mode="connect-kit-react",e.connectKitVersion=Xe,Un(e))}import{useCallback as Ie,useEffect as le,useMemo as Oe,useRef as Ve,useState as Ne}from"react";import{WagmiProvider as Qn,useAccount as jn,useConnect as Xn,useDisconnect as Yn}from"wagmi";import{QueryClient as Zn,QueryClientProvider as Jn}from"@tanstack/react-query";import{clearWalletSessionStorage as eo,onOpenOtherWallets as to,pickInitialState as no,resolveCurrentWallet as oo}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as ro}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as so}from"@nexus-cross/crossx-design-system";import{OnRampProvider as io}from"@nexus-cross/onramp/react";import{createContext as Kn,useContext as $n}from"react";var gt=Kn(null);function Te(){let e=$n(gt);if(!e)throw new Error("useCrossConnectKit must be used within <CrossConnectKitProvider>");return e}import{createContext as qn,useContext as Mt}from"react";var st=qn(null);function Vn(){let e=Mt(st);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function Ye(){return Mt(st)}import{useCallback as Hn,useMemo as Gt}from"react";import{WalletConnectModal as Ut}from"@nexus-cross/dapp-ui";import{jsx as Kt}from"react/jsx-runtime";var zn=new Set(["cross_wallet","cross_extension","metamask","binance"]);function bt({open:e,onOpenChange:t}){let{connect:o,availableWallets:r,oauth:n,extraWallets:i,walletAllowlist:f}=Te(),m=Ye()?.mode??"dark",y=Gt(()=>{let C=f?new Set(f):null,u={};for(let h of r){if(!zn.has(h.walletId)||C&&!C.has(h.walletId))continue;let S=h.walletId;u[S]=()=>{o(h.walletId)}}for(let[h,S]of Object.entries(i))S&&(C&&!C.has(h)||(u[h]=S));return u},[r,o,i,f]),w=Gt(()=>{if(n)return{apple:()=>{n.signIn("apple")},google:()=>{n.signIn("google")}}},[n]),T=Hn(C=>t(C),[t]);return Kt(Ut,{wallets:y,socialProviders:w,theme:m,open:e,onOpenChange:T,children:Kt(Ut.Content,{})})}import{jsx as He,jsxs as qt}from"react/jsx-runtime";var ao=new Zn,yt="crossx-kit:last-wallet-intent";function co(e){let t=[],o=e,r=0;for(;o&&r<5;){let n=o;typeof n.message=="string"&&t.push(n.message),o=n.cause,r+=1}return t.some(n=>/external wallet connection/i.test(n))}function lo(){if(typeof window>"u")return null;try{return window.localStorage.getItem(yt)??null}catch{return null}}function $t(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(yt,e):window.localStorage.removeItem(yt)}catch{}}function uo(e,t){if(typeof window>"u")return t;try{let o=window.localStorage.getItem(e);return o==="cross"||o==="reown"?o:t}catch{return t}}function po(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function mo({children:e,config:t,activeProvider:o,onRequestProviderSwap:r,pendingConnectWalletId:n,clearPending:i,themeMode:f,themeTokens:p,extraWallets:m,walletAllowlist:y}){let[w,T]=Ne(!1),[C,u]=Ne(()=>lo()),[h,S]=Ne(null),{address:x,isConnected:k,isConnecting:v,isReconnecting:W,connector:z}=jn(),{connectors:se,connectAsync:q}=Xn(),{disconnectAsync:G}=Yn(),{kitConfig:D,connectorRegistry:F,crossProvider:me,reownProvider:P}=t,B=o==="cross"?me:P,E=Oe(()=>!k||!z?null:oo(F,z.id,C),[k,z,F,C]),ue=Oe(()=>F.entries.filter(l=>l.type!=="embedded"),[F]),ke=Ve(x);ke.current=x;let K=D.embeddedProjectId?.trim()||D.crossProjectId?.trim(),Q=!!D.onRampEnabled&&!!K,ie=Oe(()=>!Q||!K?null:{projectId:K,walletState:{getAddress:()=>ke.current}},[Q,K]);le(()=>to(()=>T(!0)),[]),le(()=>{if(!w||typeof document>"u")return;let l=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(b=>b.remove())},50);return()=>clearTimeout(l)},[w]);let xe=Ve(k),Re=Ve(k);xe.current=k;let Fe=Ve(!1);le(()=>{console.debug("[crossx-kit] state",{activeProvider:o,isConnected:k,isConnecting:v,isReconnecting:W,activeConnectorId:z?.id,currentWallet:E,lastIntent:C})},[o,k,v,W,z?.id,E,C]),le(()=>{k&&!Re.current&&B?.closeModal?.({kitConfig:D}),Re.current=k},[k,B,D]),le(()=>{k&&S(null)},[k]);let ne=Ie(l=>se.find(b=>b.id===l),[se]);le(()=>{let l=F.getEntry("cross_embedded");if(!l)return;let b=ne(l.connectorId);if(!b)return;let A=!1;return(async()=>{try{let g=await b.getProvider();if(A)return;g?.sdk?.applyTheme?.(f,p??void 0)}catch(g){console.debug("[crossx-kit] applyTheme skipped:",g)}})(),()=>{A=!0}},[F,ne,f,p]);let Be=Ie(l=>{u(l),$t(l)},[]),V=Ie(()=>{u(null),$t(null),S(null)},[]);le(()=>{if(!B?.subscribeModalState)return;let l=!1;return B.subscribeModalState({kitConfig:D},b=>{if(Fe.current=b,b){l=!0;return}l&&(l=!1,setTimeout(()=>{xe.current||(async()=>{try{await G()}catch{}V()})()},250))})},[B,D,G,V]),le(()=>{if(!h||k||typeof window>"u"||h==="cross_embedded")return;let l=typeof document<"u"&&!document.hasFocus(),b=null,A=()=>{l=!0},g=()=>{l&&(b&&clearTimeout(b),b=setTimeout(()=>{xe.current||Fe.current||(async()=>{try{await G()}catch{}V()})()},1e3))};return window.addEventListener("blur",A),window.addEventListener("focus",g),()=>{window.removeEventListener("blur",A),window.removeEventListener("focus",g),b&&clearTimeout(b)}},[h,k,G,V]);let _e=Ie(async l=>{console.debug("[crossx-kit] runConnect enter",{walletId:l,activeProvider:o,isConnected:k,activeConnectorId:z?.id});let b=F.getEntry(l);if(!b){if((l==="metamask"||l==="binance")&&!P){console.error(`[crossx-kit] "${l}" requires the Reown adapter, but it is not configured. Pass \`reownProjectId\` (and ensure \`reown\` is not set to \`false\`) when calling createConnectKitConfig() or createCrossxConfig() to enable WalletConnect-based wallets.`);return}console.error(`[crossx-kit] Unknown walletId: "${l}"`);return}if(S(l),b.providerKind!==o){console.debug("[crossx-kit] provider swap needed",{from:o,to:b.providerKind,walletId:l}),Be(l);try{await G()}catch{}await new Promise(g=>setTimeout(g,0)),r(b.providerKind,l);return}if(Be(l),B?.beforeConnect)try{let g=await B.beforeConnect({kitConfig:D,themeMode:f},l);if(console.debug("[crossx-kit] beforeConnect result",{walletId:l,result:g}),g==="handled")return}catch(g){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',l,g)}let A=ne(b.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:b.connectorId,found:A?.id,availableIds:se.map(g=>g.id)}),!A){console.error(`[crossx-kit] Connector "${b.connectorId}" not found on provider "${b.providerKind}". Available: ${se.map(g=>g.id).join(", ")}`),V();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:A.id});let g=await q({connector:A});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:g.accounts.length,chainId:g.chainId});return}catch(g){if(!co(g)){console.error('[crossx-kit] connectAsync error for "%s":',l,g);try{await G()}catch{}}if(!b.fallbackConnectorId){V();return}}if(b.fallbackConnectorId){let g=ne(b.fallbackConnectorId);if(g)try{await q({connector:g})}catch(_){console.error('[crossx-kit] Fallback connect failed for "%s":',l,_);try{await G()}catch{}V()}else V()}},[F,se,ne,q,G,Be,V,B,o,D,r,f]);le(()=>{if(!n)return;let l=n;i(),_e(l)},[n,o]);let $e=Ie(async()=>{T(!0)},[]),s=Ie(async()=>{try{await G()}catch(l){console.error("[crossx-kit] wagmi disconnect error:",l)}if(B?.teardown)try{await B.teardown({kitConfig:D})}catch(l){console.error("[crossx-kit] adapter teardown error:",l)}eo(),V()},[G,B,D,V]),a=Ie(async()=>{let l=F.getEntry("cross_embedded");if(!l)return null;let b=ne(l.connectorId);if(!b)return null;try{let A=await b.getProvider(),g=A?.sdk;if(!g?.selectWallet)return null;let _=await g.selectWallet(g.currentAddress??void 0);return _?.address&&A.notifyAccountsChanged&&A.notifyAccountsChanged([_.address]),_}catch{return null}},[F,ne]),d=Oe(()=>{let l=t.oauth;return l?{signIn:async b=>{S("cross_embedded");try{await l.signIn(b)}catch(A){throw S(null),A}}}:null},[t.oauth]),c=Ve(!1);le(()=>{if(o!=="cross"||k||v||W||h!=null||c.current)return;let l=F.getEntry("cross_embedded");if(!l)return;let b=ne(l.connectorId);if(!b)return;let A=!1;return(async()=>{try{let g=await b.isAuthorized?.();if(A||!g||c.current)return;c.current=!0,await q({connector:b})}catch{}})(),()=>{A=!0}},[o,k,v,W,h,F,ne,q]);let I=h!=null&&!k,R=Oe(()=>({kitConfig:D,connectorRegistry:F,availableWallets:ue,connect:_e,connectWallet:$e,disconnect:s,selectWallet:a,currentWallet:E,lastIntent:C,isConnecting:I,connectingWalletId:h,openOtherWallets:()=>T(!0),closeOtherWallets:()=>T(!1),otherWalletsOpen:w,oauth:d,extraWallets:m,walletAllowlist:y,onRampEnabled:Q}),[D,F,ue,_e,$e,s,a,E,C,I,h,w,d,m,y,Q]),L=qt(gt.Provider,{value:R,children:[e,He(bt,{open:w,onOpenChange:T})]});return ie?He(io,{config:ie,children:L}):L}var fo=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function go(e){let t=e?.message;return typeof t!="string"?!1:fo.some(o=>o.test(t))}var bo={};function yo(e){return e&&{...e,connections:new Map,current:null}}function ho({children:e,config:t,initialState:o,extraWallets:r=bo,walletAllowlist:n}){let[i,f]=Ne(()=>uo(t.activeProviderStorageKey,t.defaultProvider)),[p,m]=Ne(null),y=Ve(!1),{kitConfig:w}=t,[T,C]=Ne(null),[u,h]=Ne(null),[S,x]=Ne(0),k=Oe(()=>ro(w.theme,w.autoDetectTheme),[w.theme,w.autoDetectTheme,S]),v=T??k,W=u??w.themeTokens;le(()=>{if(!w.autoDetectTheme||T||typeof window>"u"||!window.matchMedia)return;let P=window.matchMedia("(prefers-color-scheme: dark)"),B=()=>x(E=>E+1);try{return P.addEventListener("change",B),()=>P.removeEventListener("change",B)}catch{return P.addListener(B),()=>P.removeListener(B)}},[w.autoDetectTheme,T]),le(()=>{if(typeof document>"u")return;let P=document.documentElement,B=P.getAttribute("data-ds-theme"),E=P.getAttribute("data-theme");return P.setAttribute("data-ds-theme",v),E||P.setAttribute("data-theme",v),()=>{B==null?P.removeAttribute("data-ds-theme"):P.setAttribute("data-ds-theme",B),E==null&&P.removeAttribute("data-theme")}},[v]);let z=Oe(()=>so(t.designSystem),[t.designSystem]),se=Oe(()=>({mode:v,tokens:W,setThemeMode:P=>C(P),setThemeTokens:P=>h(P)}),[v,W]);le(()=>{if(typeof window>"u")return;let P=B=>{go(B.reason)&&B.preventDefault()};return window.addEventListener("unhandledrejection",P),()=>window.removeEventListener("unhandledrejection",P)},[]);let q=Ie((P,B)=>{y.current||(y.current=!0,m(B),f(P),po(t.activeProviderStorageKey,P),queueMicrotask(()=>{y.current=!1}))},[t.activeProviderStorageKey]),G=Ie(()=>m(null),[]),D=i==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,F=yo(no(o,i));if(!D){if(!(i==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let B=i==="cross"?"reown":"cross";queueMicrotask(()=>f(B))}let me=D??(i==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return qt(st.Provider,{value:se,children:[He("style",{"data-crossx-design-system":"",children:z}),He(Qn,{config:me,initialState:F,children:He(Jn,{client:ao,children:He(mo,{config:t,activeProvider:i,onRequestProviderSwap:q,pendingConnectWalletId:p,clearPending:G,themeMode:v,themeTokens:W,extraWallets:r,walletAllowlist:n??t.kitConfig.wallets??null,children:e})})},i)]})}import{useCallback as Le,useEffect as fr,useMemo as lt}from"react";import{useQueryClient as gr}from"@tanstack/react-query";import{useAccount as br,useChainId as yr,useConfig as hr,useSendTransaction as wr,useSwitchChain as Cr}from"wagmi";import{getPublicClient as vt,readContracts as un}from"wagmi/actions";import{WalletInfo as At,ConnectorId as De,resolveEnvironment as kr}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as xr,useOptionalOnRampEligibility as Tr}from"@nexus-cross/onramp/react";import{APPLE_ICON as _t,BINANCE_ICON as fn,CROSSX_ICON as Bt,EXTENSION_ICON as Ir,GOOGLE_ICON as gn,METAMASK_ICON as bn}from"@nexus-cross/connect-kit-wagmi";import{useCallback as ee,useMemo as Se,useRef as wo}from"react";import{useQueries as Vt,useQuery as ze}from"@tanstack/react-query";import{encodeFunctionData as Ze,formatUnits as dt,parseUnits as Co}from"viem";import{getChainId as ko,getPublicClient as nn,readContract as ve,switchChain as xo,waitForTransactionReceipt as To,writeContract as Ht}from"wagmi/actions";import{useConfig as Io}from"wagmi";function zt(e){return e!=="bridge"}var on="0x0000000000000000000000000000000000000000",we=100,je=18,So=180000n,vo=250000n,Ao=new Set([56,97]),Po=130n,Ro=100n,Bo={dev:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},stage:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},production:{bridgeApi:"https://bridge-api.crosstoken.io/bridge",walletApi:"https://wallet-server.crosstoken.io/api",chainIds:{cross:612055,bsc:56},contracts:{BSC_CROSS:"0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",W_CROSS:"0x731a104a4461ae45bfef520468b43c262d35e682",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x1c37d4f44ed3ec86d96868001cfa89e97112a85c",CROSSD:"0xff42c13d927a6b9265236619161accb227b6d452",USDTB:"0x55d398326f99059ff775485246999027b3197955",SWAP_BRIDGE_ROUTER:"0xB298C340816fee45cfB39B1e6EE4DB4D5739e357"},hiddenPairs:[{fromKey:"56-0x55d398326f99059ff775485246999027b3197955",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"56-0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",toKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452"}]}},Qe=[{type:"function",name:"quoter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"swapRouter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"getAmountSwapBridgeOut",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"swapAmountOut",type:"uint256"},{name:"bridgeValue",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"getAmountSwapBridgeIn",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"bridgeValue",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"amountIn",type:"uint256"},{name:"swapAmountOut",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"swapBridgeExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"swapBridgeExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountOut",type:"uint256"},{name:"amountInMaximum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountIn",type:"uint256"}]}],ht=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]}],Qt=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amountIn",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amount",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]}],_o=[{type:"function",name:"slot0",stateMutability:"view",inputs:[],outputs:[{name:"sqrtPriceX96",type:"uint160"},{name:"tick",type:"int24"},{name:"observationIndex",type:"uint16"},{name:"observationCardinality",type:"uint16"},{name:"observationCardinalityNext",type:"uint16"},{name:"feeProtocol",type:"uint8"},{name:"unlocked",type:"bool"}]}],Ae=[{type:"function",name:"exactInputSingle",stateMutability:"payable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"recipient",type:"address"},{name:"deadline",type:"uint256"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"unwrapWETH9",stateMutability:"payable",inputs:[{name:"amountMinimum",type:"uint256"},{name:"recipient",type:"address"}],outputs:[]},{type:"function",name:"refundETH",stateMutability:"payable",inputs:[],outputs:[]}],Eo=[{type:"function",name:"bridgeToken",stateMutability:"payable",inputs:[{name:"toChainID",type:"uint256"},{name:"fromToken",type:"address"},{name:"to",type:"address"},{name:"value",type:"uint256"},{name:"gasFee",type:"uint256"},{name:"exFee",type:"uint256"},{name:"extraData",type:"bytes"}],outputs:[{name:"",type:"bool"}]}];async function Ge(e,t){let o=await fetch(e,{cache:"no-store",signal:t});if(!o.ok)throw new Error(`CrossD bridge adapter request failed: ${o.status}`);let r=await o.json();if(r&&typeof r=="object"&&"code"in r&&typeof r.code=="number"&&r.code!==200)throw new Error(r.message||`CrossD bridge adapter API error: ${r.code}`);return r&&typeof r=="object"&&"data"in r?r.data:r}async function Oo(e,t,o){let r=await fetch(e,{method:"POST",cache:"no-store",signal:o,headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw new Error(`CrossD bridge adapter request failed: ${r.status}`);let n=await r.json();if(n&&typeof n=="object"&&"code"in n&&typeof n.code=="number"&&n.code!==200)throw new Error(n.message||`CrossD bridge adapter API error: ${n.code}`);return n&&typeof n=="object"&&"data"in n?n.data:n}function Z(e,t){return`${e}-${t.toLowerCase()}`}function oe(e){return Z(e.chainId,e.address)}function Pe(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function jt(e){return e===56||e===97?"BSC":e===612044||e===612055?"CROSS":`Chain ${e}`}function te(e,t){return t?t.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()?e.contracts.W_CROSS:t:on}function Ue(e){let t=dt(e,je);return t.includes(".")?t.replace(/\.?0+$/,""):t}function Je(e){return Co(e||"0",je)}function he(e){try{return Je(e||"0")}catch{return 0n}}function et(e){if(typeof e=="bigint")return e;if(typeof e=="number")return BigInt(Math.trunc(e));if(!e)return 0n;try{return BigInt(e)}catch{return 0n}}function wt(e){let t=dt(e,9);return(t.includes(".")?t.replace(/\.?0+$/,""):t)||"0"}function Ct(e){return e==="bridge"?So:vo}function Xt(e,t){if(!e||!t)return"0";let o=e*e;if(o===0n)return"0";let r=t*t,n=r>o?r-o:o-r;if(n===0n)return"0";let i=n*100000000n/o;if(i>=100000000n)return"100";let f=i/1000000n,p=(i%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return p?`${f}.${p}`:`${f}`}function No(e){if(!e||Number(e)===0)return"0%";let[t,o=""]=e.split("."),r=o.length>4?o.slice(0,4):o;return r?`${t}.${r}%`:`${t}%`}async function Yt(e,t,o,r,n){let i=nn(e,{chainId:t}),f=o;try{let m=await i?.estimateContractGas?.({account:n.account,address:n.address,abi:n.abi,functionName:n.functionName,args:n.args,value:n.value});typeof m=="bigint"&&m>0n&&(f=r?m*Po/Ro:m)}catch{}let p={gas:f};if(Ao.has(t))try{let m=await i?.getGasPrice?.();typeof m=="bigint"&&m>0n&&(p.gasPrice=m)}catch{}return p}function rn(e){let t=e==="auto"?1:Number(e||"1");return!Number.isFinite(t)||t<0?100n:BigInt(Math.min(1e4,Math.floor(t*100)))}function kt(e,t){let o=rn(t);return o>=10000n?0n:e*(10000n-o)/10000n}function Wo(e,t){let o=rn(t);return(e*(10000n+o)+9999n)/10000n}function it(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var Lo={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function Do(e){return Lo[e]??`${e/1e4}%`}function Fo(e,t){let o=Number(e||"0");return!Number.isFinite(o)||o<=0?"0":(o*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function Zt(e){return Ue(e)}function Mo(e,t){let o=Number(t??"0");return!Number.isFinite(o)||o<=0?0n:e*BigInt(Math.floor(o))/1000n}function at(e,t){if(!e)return!1;let o=e.toLowerCase();return t.some(r=>r.toLowerCase()===o)}function Go(e,t,o){return[{from:[e.contracts.USDTX],to:[e.contracts.CROSSD]},{from:[e.contracts.BSC_CROSS],to:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS]},{from:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS],to:[e.contracts.CROSSD]}].some(n=>at(t,n.from)&&at(o,n.to)||at(t,n.to)&&at(o,n.from))}function Uo(e){if(Pe(e.type))return null;if(e.type==="swap-bridge"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}if(e.type==="bridge-swap"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}return{from:e.from.chainId,to:e.to.chainId,token:e.from.address}}function Ko({input:e,path:t,config:o}){if(!o||Pe(t.type))return"";let r=et(o.minimumValue),n=et(o.gasFee??o.gas_fee),i=t.type==="swap-bridge"?r+n*12n/10n:r;return i<=0n?"":e.fromAmount&&he(e.fromAmount)<i&&t.type!=="swap"?`Minimum ${Zt(i)}`:t.type==="swap-bridge"&&e.toAmount&&he(e.toAmount)<i?`Available ${Zt(i)} or more.`:""}function $o(e,t){let o=new Set;return e?.list?.forEach(r=>{let n=r.localChain??r.local_chain;n&&Object.entries(r.pairs||{}).forEach(([i,f])=>{f.forEach(p=>{p.localToken&&o.add(Z(n,p.localToken)),p.remoteToken&&o.add(Z(Number(i),p.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([r,n])=>{n.forEach(i=>{i.token0&&o.add(Z(Number(r),i.token0)),i.token1&&o.add(Z(Number(r),i.token1))})}),o}function qo(e,t){return!e||!t?null:Z(e,t)}function Vo({envConfig:e,bridgePairList:t,swapPools:o,tokenInfo:r,tokenStats:n}){let i=$o(t,o),f=new Map;n?.forEach(m=>{let y=qo(Number(m.chainId??m.chain_id),m.address);y&&f.set(y,m)});let p={};return i.forEach(m=>{let[y,w]=m.split("-"),T=Number(y),C=r?.find(h=>Number(h.chainId??h.chain_id)===T&&h.address?.toLowerCase()===w);if(!C?.symbol||!C.name)return;let u=f.get(m);p[m]={key:m,chainId:T,address:w,symbol:C.symbol,name:C.name,decimals:C.decimals||je,image:C.image||C.icon_url,price:u?.price?Number(u.price):void 0,isNativeToken:w.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),p}function sn(e,t){return t?.list?.find(o=>(o.localChain??o.local_chain)===e)?.bridge||""}function an(e,t,o){let[r,n]=e.split("-"),[i,f]=t.split("-"),p=Number(r),m=Number(i);for(let y of o?.list||[]){if((y.localChain??y.local_chain)!==p)continue;let w=y.pairs?.[i];if(w){for(let T of w)if(T.localToken?.toLowerCase()===n&&T.remoteToken?.toLowerCase()===f)return{type:"bridge",fromChain:p,fromToken:n,toChain:m,toToken:f,bridgeAddress:sn(p,o)}}}return null}function cn(e,t,o,r){let[n,i]=e.split("-"),[f,p]=t.split("-");if(n!==f)return null;let m=Number(n),y=(o?.swapPools||o?.swap_pools)?.[n];if(!y)return null;let w=r.contracts.W_CROSS.toLowerCase(),T=r.contracts.NATIVE_CROSS.toLowerCase(),C=u=>u?.toLowerCase()===w?T:u?.toLowerCase();for(let u of y){let h=C(u.token0),S=C(u.token1);if(h===i&&S===p||S===i&&h===p){let x="swap";return m===r.chainIds.cross&&(i===T&&(x="deposit-swap"),p===T&&(x="swap-withdraw")),{pathType:x,step:{type:"swap",chain:m,fromToken:i,toToken:p,fee:u.fee||we,poolAddress:u.poolAddress||u.pool_address||""}}}}return null}function Ho(e,t,o,r){let[n,i]=e.split("-"),[f]=t.split("-");if(n===f)return null;for(let p of(o?.swapPools||o?.swap_pools)?.[n]||[]){let m=p.token0?.toLowerCase(),y=p.token1?.toLowerCase(),w=m===i?y:y===i?m:null;if(!w)continue;let T=an(Z(Number(n),w),t,r);if(T)return[{type:"swap",chain:Number(n),fromToken:i,toToken:w,fee:p.fee||we,poolAddress:p.poolAddress||p.pool_address||""},T]}return null}function zo(e,t,o,r,n){let[i,f]=e.split("-"),[p]=t.split("-");if(i===p)return null;for(let m of o?.list||[])if((m.localChain??m.local_chain)===Number(i))for(let y of m.pairs?.[p]||[]){if(y.localToken?.toLowerCase()!==f)continue;let w=y.remoteToken?.toLowerCase();if(!w)continue;let T=cn(Z(Number(p),w),t,r,n);if(T)return[{type:"bridge",fromChain:Number(i),fromToken:f,toChain:Number(p),toToken:w,bridgeAddress:sn(Number(i),o)},T.step]}return null}function Qo({envConfig:e,bridgePairList:t,swapPools:o,enrichedTokens:r}){return(n,i)=>{let f=r[n],p=r[i];if(!f||!p||n===i)return null;let m=an(n,i,t);if(m)return{type:"bridge",steps:[m],from:f,to:p};let y=cn(n,i,o,e);if(y)return{type:y.pathType,steps:[y.step],from:f,to:p};let w=Ho(n,i,o,t);if(w)return{type:"swap-bridge",steps:w,from:f,to:p};let T=zo(n,i,t,o,e);return T?{type:"bridge-swap",steps:T,from:f,to:p}:null}}function Jt(e,t){return{name:e.name,symbol:e.symbol,chainId:e.chainId,address:e.address,decimals:e.decimals,balance:t.get(e.key)||"0",iconUrl:e.image,priceUsd:e.price}}function jo(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function Xo(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function Yo(e,t){let o=e.startsWith("-"),r=o?e.slice(1):e,[n,i=""]=r.split("."),f=i.slice(0,t).replace(/0+$/,""),p=f?`${n}.${f}`:n;return o?`-${p}`:p}function Zo(e){let t=e.startsWith("-"),o=t?e.slice(1):e,[r,n]=o.split("."),i=r.replace(/\B(?=(\d{3})+(?!\d))/g,","),f=n?`${i}.${n}`:i;return t?`-${f}`:f}function xt(e){if(e==null||e==="")return"0";let t=String(e),o=Number(t);return!Number.isFinite(o)||o===0?"0":Zo(Yo(t,4))}function en(e,t){if(e==null||e==="")return"0";try{return Xo(dt(BigInt(String(e)),t.decimals))}catch{return"0"}}function Jo(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function er(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function tr(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function nr(e,t){let o=jo(t);return{name:o,symbol:o,chainId:e,address:t,decimals:je,balance:"0"}}function tn({envConfig:e,tokenByBridgeKey:t,chainId:o,address:r}){if(!r)return null;let n=tr(e,r);return t.get(Z(o,n))||t.get(Z(o,r))||nr(o,n)}function ct(e){return e?.toLowerCase()||""}function or(e){if(e.source==="swap")return"swap";let t=ct(e.fromToken??e.from_token),o=ct(e.toToken??e.to_token),r=ct(e.swapTokenIn??e.swap_token_in),n=ct(e.swapTokenOut??e.swap_token_out);return o&&r&&o===r?"bridge-swap":t&&n&&t===n?"swap-bridge":"bridge"}function rr(e,t){let o=e.status??0,r=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&o===1&&!r?"failed":o===1?"success":"pending"}function sr({envConfig:e,item:t,tokenByBridgeKey:o}){let r=Number(t.fromChainID??t.from_chain_id??0),n=Number(t.toChainID??t.to_chain_id??0);if(!r||!n)return null;let i=or(t),f=t.swapTokenIn??t.swap_token_in,p=t.swapTokenOut??t.swap_token_out,m=t.swapAmountIn??t.swap_amount_in,y=t.swapAmountOut??t.swap_amount_out,w=t.fromToken??t.from_token,T=t.toToken??t.to_token,C=t.value,u=t.value;i==="swap"?(w=f,T=p,C=m,u=y):i==="swap-bridge"?(w=f,C=m,u=t.value):i==="bridge-swap"&&(T=p,C=m,u=y);let h=tn({envConfig:e,tokenByBridgeKey:o,chainId:r,address:w}),S=tn({envConfig:e,tokenByBridgeKey:o,chainId:n,address:T}),x=t.initiatedTxHash??t.initiated_tx_hash;return!h||!S||!Jo(x)?null:{id:`${x}-${t.index??""}`,timestamp:er(t.initiatedTime??t.initiated_time),txHash:x,fromToken:h,toToken:S,fromAmount:en(C,h),toAmount:en(u,S),summary:{pathType:i},status:rr(t,i)}}function ir(e){let t=new Map;return e.flat().forEach(o=>{let r=Number(o.chainId??o.chain_id),n=o.address?.toLowerCase();if(!r||!n)return;let i=o.quantity?.numeric??o.balance??"0",f=o.quantity?.decimals??o.decimals??je;try{t.set(Z(r,n),dt(BigInt(i||"0"),f))}catch{t.set(Z(r,n),"0")}}),t}function We(e,t="first"){let o=e.steps.filter(r=>r.type==="swap");return t==="last"?o[o.length-1]:o[0]}function ar(e,t){let o=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!o?.length)return"";let r=t.contracts.CROSSD.toLowerCase(),n=t.contracts.USDTX.toLowerCase(),i=o.find(f=>{let p=f.token0?.toLowerCase(),m=f.token1?.toLowerCase();return p===r&&m===n||p===n&&m===r});return i?.poolAddress||i?.pool_address||""}function cr(e,t){return e.from.chainId===t.chainIds.cross&&e.from.address.toLowerCase()===t.contracts.CROSSD.toLowerCase()&&e.to.chainId===t.chainIds.bsc&&e.to.address.toLowerCase()===t.contracts.USDTB.toLowerCase()}function dr(e){if(e===void 0)return;let t=10n**BigInt(je),o=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",r=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:o,percentage:Math.min(r,100)}}function Tt(e,t,o,r){let n=[e.from,e.to].find(i=>i.chainId===t&&i.address.toLowerCase()===o.toLowerCase())??r?.[Z(t,o)];return{symbol:n?.symbol||o.slice(0,6),iconUrl:n?.image}}function lr(e,t){let o=[];for(let n of e.steps)n.type==="swap"?(o.push({chain:n.chain,address:n.fromToken}),o.push({chain:n.chain,address:n.toToken})):(o.push({chain:n.fromChain,address:n.fromToken}),o.push({chain:n.toChain,address:n.toToken}));let r=o.filter((n,i)=>i===0||!(n.chain===o[i-1].chain&&n.address.toLowerCase()===o[i-1].address.toLowerCase()));return r.length===0?[{symbol:e.from.symbol,iconUrl:e.from.image},{symbol:e.to.symbol,iconUrl:e.to.image}]:r.map(n=>Tt(e,n.chain,n.address,t))}function ur({input:e,path:t,amountData:o,gasInfo:r,liquidity:n,enrichedTokens:i,priceImpact:f}){let p=e.fromAmount||"0",m=e.toAmount||"0",y=We(t),w=t.steps.find(v=>v.type==="bridge"),T=t.type!=="bridge",C=!Pe(t.type),u=y?Fo(p,y.fee):"0",h=Number(p)>0||Number(m)>0,S={symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},x={symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},k=(v,W)=>h?W&&W>0n?{label:v,value:Ue(W),tone:"accent"}:{label:v,value:"Free",tone:"accent"}:{label:v,value:"0"};return{pathType:t.type,priceImpact:f,liquidity:n,bridgeInfo:C&&w?[{label:"Route",value:`${jt(w.fromChain)} \u2192 ${jt(w.toChain)}`},k("Validator Fee",o?.exFee),k("Network Fee",o?.networkFee)]:void 0,swapInfo:T&&y?[{label:"Route",value:"",routeTokens:[Tt(t,y.chain,y.fromToken,i),Tt(t,y.chain,y.toToken,i)]},{label:"Price Impact",value:No(f)},{label:"In Amount",value:xt(p),valueToken:S},{label:y&&Pe(t.type)?`Swap Fee (${Do(y.fee||we)})`:"Swap Fee",value:xt(u),valueToken:S},{label:"Out Amount",value:xt(m),valueToken:x}]:void 0,txFee:[...r?.gasPrice?[{label:"Gas Price",value:`${r.gasPrice} Gwei`}]:[{label:"Priority Fee Per Gas",value:`${r?.priorityFeePerGas||"0"} Gwei`},{label:"Max Fee Per Gas",value:`${r?.maxFeePerGas||"0"} Gwei`}],{label:"Gas Limit",value:r?.gasLimit||"0"}],txFeeInfo:r?{estTxFee:r.estTxFee,isDelegateFee:r.isDelegateFee,tokenIconUrl:r.tokenIconUrl,tokenSymbol:r.tokenSymbol}:{estTxFee:"0",isDelegateFee:!1}}}function It({env:e,walletAddress:t,enabled:o=!0}){let r=Io(),n=Bo[e],i=o,f=wo(new Map),p=ze({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:s})=>Ge(`${n.bridgeApi}/pairs`,s),enabled:i,staleTime:3e4}),m=ze({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:s})=>Ge(`${n.bridgeApi}/swap-pools`,s),enabled:i,staleTime:3e4}),y=Se(()=>ar(m.data,n),[n,m.data]),w=ze({queryKey:["crossd-bridge-adapter",e,"available-liquidity",y],queryFn:async()=>await ve(r,{address:n.contracts.USDTX,abi:ht,functionName:"balanceOf",args:[y],chainId:n.chainIds.cross}),enabled:i&&!!y,staleTime:3e4}),T=ze({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:s})=>Ge(`${n.walletApi}/v1/public/token/info`,s),enabled:i,staleTime:3e4}),C=ze({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:s})=>Ge(`${n.walletApi}/v1/public/token/stats`,s),enabled:i,staleTime:3e4}),u=Vt({queries:[n.chainIds.cross,n.chainIds.bsc].map(s=>({queryKey:["crossd-bridge-adapter",e,"balance",t,s],queryFn:({signal:a})=>{let d=new URLSearchParams({networkId:`eip155:${s}`,account:t||""});return Ge(`${n.walletApi}/v1/public/token/balance?${d}`,a)},enabled:i&&!!t,staleTime:0,refetchInterval:i&&t?5e3:!1}))}),h=Vt({queries:[n.chainIds.cross,n.chainIds.bsc].map(s=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",s],queryFn:async({signal:a})=>{try{let I=await nn(r,{chainId:s})?.estimateFeesPerGas?.();if(I?.maxFeePerGas||I?.gasPrice)return{fast:{maxFee:I.maxFeePerGas?.toString()||I.gasPrice?.toString(),maxPriorityFee:I.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let d=new URLSearchParams({chain_id:String(s),without_gas_limit:"false"});return Ge(`${n.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${d}`,a)},enabled:i,staleTime:1e4,retry:1}))}),S=n.hiddenPairs,x=Se(()=>Vo({envConfig:n,bridgePairList:p.data,swapPools:m.data,tokenInfo:T.data,tokenStats:C.data}),[p.data,n,m.data,T.data,C.data]),k=Se(()=>Qo({envConfig:n,bridgePairList:p.data,swapPools:m.data,enrichedTokens:x}),[p.data,x,n,m.data]),v=Se(()=>ir(u.map(s=>s.data).filter(s=>Array.isArray(s))),[u]),W=Se(()=>{let s=new Map;return Object.values(x).forEach(a=>{let d=Jt(a,v);s.set(a.key,d)}),s},[v,x]),z=ze({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:s})=>Oo(`${n.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},s),enabled:i&&!!t,staleTime:0,refetchInterval:i&&t?5e3:!1}),se=Se(()=>(z.data?.histories||[]).map(s=>sr({envConfig:n,item:s,tokenByBridgeKey:W})).filter(s=>!!s),[z.data?.histories,n,W]),q=Se(()=>dr(w.data),[w.data]),G=h[0]?.data,D=h[1]?.data,F=Se(()=>{let s=new Map;return G&&s.set(n.chainIds.cross,G),D&&s.set(n.chainIds.bsc,D),s},[D,G,n.chainIds.bsc,n.chainIds.cross]),me=ee((s,a,d)=>{let c=F.get(s.from.chainId)?.fast,I=a?d?.gasLimit??Ct(s.type):0n,R=d?.gasPrice&&d.gasPrice>0n?d.gasPrice:0n,L=et(c?.maxFee??c?.max_fee),l=et(c?.maxPriorityFee??c?.max_priority_fee),b=s.type==="bridge"&&R>0n,A=L>0n?L:R,g=l>0n?l:A,U=I*(b?R:A),O=W.get(Z(s.from.chainId,n.contracts.NATIVE_CROSS)),j=s.type!=="swap-bridge";return{estTxFee:a?Ue(U):"0",priorityFeePerGas:a&&!b?wt(g):"0",maxFeePerGas:a&&!b?wt(A):"0",gasLimit:a?I.toString():"0",gasPrice:a&&b?wt(R):void 0,isDelegateFee:s.type==="swap-bridge"?!1:Go(n,s.from.address,s.to.address),tokenIconUrl:j?O?.iconUrl:void 0,tokenSymbol:j?O?.symbol:void 0}},[n,F,W]),P=ee(async s=>{let a=Uo(s);if(!a)return null;let d=`${e}:${a.from}:${a.to}:${a.token.toLowerCase()}`,c=f.current.get(d);if(c)return c;let I=(async()=>{let R=new URLSearchParams({from:String(a.from),to:String(a.to),token:a.token});try{return(await Ge(`${n.bridgeApi}/token-config?${R}`)).config??null}catch{return null}})();return f.current.set(d,I),I},[e,n.bridgeApi]),B=Se(()=>{let s=Object.values(x).map(d=>Jt(d,v)),a=Z(n.chainIds.cross,n.contracts.CROSSD);return s.sort((d,c)=>{let I=oe(d).toLowerCase()===a.toLowerCase(),R=oe(c).toLowerCase()===a.toLowerCase();return I!==R?I?-1:1:oe(d).localeCompare(oe(c))})},[v,x,n]),E=ee(s=>{let a=oe(s),d=a.toLowerCase(),c=[];Object.keys(x).forEach(L=>{let l=L.toLowerCase();if(d===l||S.some(g=>g.fromKey===d&&g.toKey===l))return;let b=k(a,L);if(!b)return;let A=W.get(L);A&&c.push({token:A,path:b})});let I=Z(n.chainIds.cross,n.contracts.CROSSD),R=Z(n.chainIds.cross,n.contracts.NATIVE_CROSS);return c.sort((L,l)=>{if(d===I.toLowerCase()){let U=oe(L.token).toLowerCase()===R.toLowerCase(),O=oe(l.token).toLowerCase()===R.toLowerCase();if(U!==O)return U?-1:1}let b=Pe(L.path.type),A=Pe(l.path.type);if(b!==A)return b?-1:1;let g=L.token.chainId===s.chainId,_=l.token.chainId===s.chainId;return g!==_?g?-1:1:oe(L.token).localeCompare(oe(l.token))}),c.map(L=>L.token)},[x,n,k,S,W]),ue=ee(async s=>await ve(r,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:Qe,functionName:"quoter",chainId:s}),[n.contracts.SWAP_BRIDGE_ROUTER,r]),ke=ee(async s=>{ko(r)!==s&&await xo(r,{chainId:s})},[r]),K=ee(async s=>await ve(r,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:Qe,functionName:"swapRouter",chainId:s}),[n.contracts.SWAP_BRIDGE_ROUTER,r]),Q=ee(async({path:s,step:a,amount:d,source:c})=>{let I=await ue(a.chain),R=a.poolAddress?ve(r,{address:a.poolAddress,abi:_o,functionName:"slot0",chainId:a.chain}).then(b=>b?.[0]).catch(()=>{}):Promise.resolve(void 0);if(c==="from"){let b=await ve(r,{address:I,abi:Qt,functionName:"quoteExactInputSingle",args:[{tokenIn:te(n,a.fromToken),tokenOut:te(n,a.toToken),amountIn:Je(d),fee:a.fee||we,sqrtPriceLimitX96:0n}],chainId:a.chain}),A=Xt(await R,b[1]);return{amount:Ue(b[0]),path:s,priceImpact:A}}let L=await ve(r,{address:I,abi:Qt,functionName:"quoteExactOutputSingle",args:[{tokenIn:te(n,a.fromToken),tokenOut:te(n,a.toToken),amount:Je(d),fee:a.fee||we,sqrtPriceLimitX96:0n}],chainId:a.chain}),l=Xt(await R,L[1]);return{amount:Ue(L[0]),path:s,priceImpact:l}},[n,ue,r]),ie=ee(async(s,a)=>{if(!t)throw new Error("Wallet is not connected.");let d=Ct(a.type);if(Pe(a.type)){let g=We(a,"first");if(!g)throw new Error("Swap route is not available.");let _=he(s.fromAmount),U=he(s.toAmount);if(_<=0n)throw new Error("Bridge amount is empty.");if(U<=0n)throw new Error("Bridge quote is not ready.");let O=await K(g.chain),j=kt(U,s.slippage),fe=a.type==="swap-withdraw"?on:t,ae={tokenIn:te(n,g.fromToken),tokenOut:te(n,g.toToken),fee:g.fee||we,recipient:fe,deadline:it(),amountIn:_,amountOutMinimum:j,sqrtPriceLimitX96:0n};if(a.type==="swap-withdraw"){let ge=Ze({abi:Ae,functionName:"exactInputSingle",args:[ae]}),pe=Ze({abi:Ae,functionName:"unwrapWETH9",args:[j,t]});return{address:O,abi:Ae,functionName:"multicall",args:[[ge,pe]],chainId:g.chain,fallbackGasLimit:d}}if(a.type==="deposit-swap"){let ge=Ze({abi:Ae,functionName:"exactInputSingle",args:[ae]}),pe=Ze({abi:Ae,functionName:"refundETH",args:[]});return{address:O,abi:Ae,functionName:"multicall",args:[[ge,pe]],value:_,chainId:g.chain,fallbackGasLimit:d}}return{address:O,abi:Ae,functionName:"exactInputSingle",args:[ae],chainId:g.chain,fallbackGasLimit:d}}if(a.type==="swap-bridge"){let g=We(a,"first");if(!g)throw new Error("Swap bridge route is not available.");let _=he(s.fromAmount),U=he(s.toAmount);if(_<=0n)throw new Error("Bridge amount is empty.");if(U<=0n)throw new Error("Bridge quote is not ready.");let O=n.contracts.SWAP_BRIDGE_ROUTER,j=it(),fe={toChainID:BigInt(a.to.chainId),recipient:t,extraData:"0x"},ae={tokenIn:te(n,a.from.address),tokenOut:te(n,g.toToken),fee:g.fee||we,sqrtPriceLimitX96:0n,bridgeParams:fe};if(s.lastChangedBy==="to"){let pe={...ae,amountOut:U,amountInMaximum:Wo(_,s.slippage)};return{address:O,abi:Qe,functionName:"swapBridgeExactOutputSingle",args:[pe,j],value:a.from.isNativeToken?pe.amountInMaximum:void 0,chainId:a.from.chainId,fallbackGasLimit:d}}let ge={...ae,amountIn:_,amountOutMinimum:kt(_,s.slippage)};return{address:O,abi:Qe,functionName:"swapBridgeExactInputSingle",args:[ge,j],value:a.from.isNativeToken?_:void 0,chainId:a.from.chainId,fallbackGasLimit:d}}let c=a.steps.find(g=>g.type==="bridge");if(!c?.bridgeAddress)throw new Error("Bridge route is not available.");let I=he(s.fromAmount);if(I<=0n)throw new Error("Bridge amount is empty.");let R=await P(a),L=et(R?.gasFee??R?.gas_fee),l=Mo(I,R?.exFeeRate??R?.ex_fee_rate),b="0x";if(a.type==="bridge-swap"){let g=We(a,"last");if(!g)throw new Error("Bridge swap route is not available.");let _=he(s.toAmount);if(_<=0n)throw new Error("Bridge quote is not ready.");let U=await K(a.to.chainId),O=kt(_,s.slippage),j=Ze({abi:Ae,functionName:"exactInputSingle",args:[{tokenIn:te(n,g.fromToken),tokenOut:te(n,g.toToken),fee:g.fee||we,recipient:t,deadline:it(),amountIn:I,amountOutMinimum:O,sqrtPriceLimitX96:0n}]});b=`${U}${j.slice(2)}`}let A=[BigInt(a.to.chainId),a.from.address,t,I,L,l,b];return{address:c.bridgeAddress,abi:Eo,functionName:"bridgeToken",args:A,value:a.from.isNativeToken?I+l+L:void 0,chainId:a.from.chainId,fallbackGasLimit:d}},[n,P,K,t]),xe=ee(async(s,a)=>{if(a.type==="bridge"||a.type==="bridge-swap")return ie(s,a);if(!t)throw new Error("Wallet is not connected.");let d=he(s.fromAmount);if(d<=0n)throw new Error("Bridge amount is empty.");let c=We(a,"first");if(!c)throw new Error("Swap route is not available.");let I=await K(c.chain),R={tokenIn:te(n,c.fromToken),tokenOut:te(n,c.toToken),fee:c.fee||we,recipient:t,deadline:it(),amountIn:d,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:I,abi:Ae,functionName:"exactInputSingle",args:[R],value:a.from.isNativeToken?d:void 0,chainId:c.chain,fallbackGasLimit:Ct(a.type)}},[ie,n,K,t]),Re=ee(async(s,a)=>{if(!t||a.type==="swap-bridge")return null;try{let d=await xe(s,a),c=await Yt(r,d.chainId,d.fallbackGasLimit,zt(a.type),{account:t,address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value});return{gasLimit:c.gas,gasPrice:c.gasPrice}}catch{return null}},[xe,r,t]),Fe=ee(async s=>{let a=oe(s.fromToken),d=oe(s.toToken),c=k(a,d);if(!c)return{error:"Route is not available."};let I=s.lastChangedBy==="to"?s.toAmount:s.fromAmount,R=!!I&&Number(I)>0,L=cr(c,n)?q:void 0,l=async(O,j,fe)=>{let ae=R?await Re(O,c):null,ge=me(c,R,ae);return ur({input:O,path:c,gasInfo:ge,amountData:j,liquidity:L,enrichedTokens:x,priceImpact:fe})};if(!I||Number(I)<=0)return{fromAmount:s.fromAmount,toAmount:s.toAmount,summary:await l(s)};let b=await P(c),A=Ko({input:s,path:c,config:b});if(A)return{fromAmount:s.fromAmount,toAmount:s.toAmount,summary:await l(s),error:A};if(c.type==="bridge"){let O=s.lastChangedBy==="to"?{...s,fromAmount:s.toAmount}:{...s,toAmount:s.fromAmount};return{fromAmount:O.fromAmount,toAmount:O.toAmount,summary:await l(O)}}if(c.type==="swap-bridge"){let O=We(c,"first"),j=n.contracts.SWAP_BRIDGE_ROUTER;if(!O)return{error:"Swap bridge route is not ready."};if(s.lastChangedBy==="from"){let pe=await ve(r,{address:j,abi:Qe,functionName:"getAmountSwapBridgeOut",args:[BigInt(c.to.chainId),te(n,c.from.address),te(n,O.toToken),O.fee||we,Je(s.fromAmount)],chainId:c.from.chainId}),tt=Ue(pe[1]),ut={...s,toAmount:tt};return{toAmount:tt,summary:await l(ut,{networkFee:pe[3],exFee:pe[4]})}}let fe=await ve(r,{address:j,abi:Qe,functionName:"getAmountSwapBridgeIn",args:[BigInt(c.to.chainId),te(n,c.from.address),te(n,O.toToken),O.fee||we,Je(s.toAmount)],chainId:c.from.chainId}),ae=Ue(fe[1]),ge={...s,fromAmount:ae};return{fromAmount:ae,summary:await l(ge,{networkFee:fe[3],exFee:fe[4]})}}let g=c.type==="bridge-swap"?We(c,"last"):We(c,"first");if(!g)return{error:"Swap route is not available."};let _=await Q({path:c,step:g,amount:I,source:s.lastChangedBy});if(s.lastChangedBy==="from"){let O={...s,toAmount:_.amount};return{toAmount:_.amount,summary:await l(O,void 0,_.priceImpact)}}let U={...s,fromAmount:_.amount};return{fromAmount:_.amount,summary:await l(U,void 0,_.priceImpact)}},[q,me,x,n,Re,k,P,Q,r]),ne=ee(async s=>{if(s.from.isNativeToken)return null;if(s.type==="swap"||s.type==="deposit-swap"||s.type==="swap-withdraw")return K(s.from.chainId);if(s.type==="swap-bridge")return n.contracts.SWAP_BRIDGE_ROUTER;let a=s.steps.find(d=>d.type==="bridge");return a?.bridgeAddress?a.bridgeAddress:null},[n.contracts.SWAP_BRIDGE_ROUTER,K]),Be=ee(async s=>{if(!t)throw new Error("Wallet is not connected.");let a=oe(s.fromToken),d=oe(s.toToken),c=k(a,d);if(!c)throw new Error("Route is not available.");if(!Pe(c.type)&&c.type!=="swap-bridge"||c.from.isNativeToken)return null;let I=he(s.fromAmount);if(I<=0n)return null;let R=await ne(c);return!R||await ve(r,{address:c.from.address,abi:ht,functionName:"allowance",args:[t,R],chainId:c.from.chainId})>=I?null:{token:s.fromToken,tokenAddress:c.from.address,spenderAddress:R,amount:s.fromAmount}},[k,ne,r,t]),V=ee(async(s,a)=>{let d=he(a.amount||s.fromAmount);if(d<=0n)throw new Error("Approval amount is empty.");await ke(a.token.chainId);let c=await Ht(r,{address:a.tokenAddress,abi:ht,functionName:"approve",args:[a.spenderAddress,d],chainId:a.token.chainId});await To(r,{hash:c,chainId:a.token.chainId})},[ke,r]),_e=ee(async(s,a)=>{let d=await ie(s,a);await ke(d.chainId);let c=await Yt(r,d.chainId,d.fallbackGasLimit,zt(a.type),{account:t,address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value});return{txHash:await Ht(r,{address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value,chainId:d.chainId,...c}),fromToken:s.fromToken,toToken:s.toToken,fromAmount:s.fromAmount,toAmount:s.toAmount}},[ie,ke,r,t]),$e=ee(async s=>{let a=oe(s.fromToken),d=oe(s.toToken),c=k(a,d);if(!c)throw new Error("Route is not available.");if(!(Pe(c.type)||c.type==="swap-bridge"||c.type==="bridge-swap"||c.type==="bridge"))throw new Error("This bridge route is not supported yet.");return{...await _e(s,c),pathType:c.type,routeTokens:lr(c,x)}},[x,k,_e]);return{bridgeTokens:B,bridgeHistory:se,getBridgeApproval:Be,approveBridge:V,getBridgeQuote:Fe,getBridgeToTokens:E,submitBridge:$e,isLoading:p.isLoading||m.isLoading||T.isLoading||C.isLoading||u.some(s=>s.isLoading)}}import{useEffect as dn,useRef as pr,useState as ln}from"react";import{useAccount as mr}from"wagmi";function St(e){let{address:t,connector:o}=mr(),{currentWallet:r}=Te(),n=e?.walletId!==void 0?e.walletId:r,i=e?.connector!==void 0?e.connector:o,f=e?.address!==void 0?e.address:t,[p,m]=ln({loginType:null,accountName:null,accounts:[],isResolved:!1}),y=pr(new Map),[w,T]=ln(0);return dn(()=>{let C=!1;if(n!=="cross_embedded")return m({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{C=!0};if(!i)return m({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{C=!0};m(x=>({...x,isResolved:!1}));let u=20,h=300,S=async()=>{if(typeof i.getProvider!="function")return"retry";let x;try{x=await i.getProvider()}catch{return"retry"}let k=x?.sdk;if(!k)return"giveup";try{let E=k.getRNBridgeActiveWallet?.(),ue=E?.walletName?.trim();E&&ue&&y.current.set(E.address.toLowerCase(),ue)}catch{}let[v,W]=await Promise.all([k.getUserInfo?.().catch(()=>null)??null,k.getAddresses?.().catch(()=>null)??null]);if(C)return"done";let z=v?.loginType,se=z==="google"||z==="apple"?z:null;if(!se)return"retry";let q=f?.toLowerCase(),G=q&&Array.isArray(W)?W.find(E=>E.address.toLowerCase()===q):null,D=Array.isArray(W)?W.filter(E=>/^0x[a-fA-F0-9]{40}$/.test(E.address)).map(E=>({address:E.address.toLowerCase(),...Number.isFinite(E.index)?{index:E.index}:{},...E.name?.trim()?{name:E.name.trim()}:{}})):[],F=q?y.current.get(q)?.trim():void 0,me=!G&&q&&/^0x[a-fA-F0-9]{40}$/.test(q)?[...D,{address:q,index:D.length,...F?{name:F}:{}}]:D,B=F||G?.name?.trim()||(typeof G?.index=="number"?`Account ${G.index+1}`:f?`${f.slice(0,6)}\u2026${f.slice(-4)}`:null);return m({loginType:se,accountName:B,accounts:me,isResolved:!0}),"done"};return(async()=>{for(let x=0;x<u;x++){if(C)return;let k=await S();if(k==="done")return;if(k==="giveup"){C||m({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(v=>setTimeout(v,h))}C||m({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{C=!0}},[n,i,f,w]),dn(()=>{if(n!=="cross_embedded"||!i||typeof i.getProvider!="function")return;let C=!1,u;return(async()=>{let h;try{h=await i.getProvider()}catch{return}if(C)return;let S=h?.sdk;S?.on&&(u=S.on("addressChanged",({address:x,walletName:k})=>{let v=k?.trim();v&&(y.current.set(x.toLowerCase(),v),T(W=>W+1))}))})(),()=>{C=!0,u?.()}},[n,i]),p}import{Fragment as mn,jsx as re,jsxs as Ke}from"react/jsx-runtime";var Sr=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalSupply",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}],vr=[{type:"function",name:"earned",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"posaActive",stateMutability:"view",inputs:[],outputs:[{name:"",type:"bool"}]},{type:"function",name:"lastRewardBlock",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalStaked",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]}],Ar={dev:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},stage:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},production:{poolAddress:"0x000000068122d9bB43B4BCF5497A10EdfA9F5E93",crossChainId:612055,networkStatsUrl:"https://posa-api.crosstoken.io/api/v1/network/stats"}},Pt=10n**18n,Pr={google:{name:"Google",iconUrl:gn,connectorId:De.CROSSx},apple:{name:"Apple",iconUrl:_t,connectorId:De.CROSSx},cross:{name:"CROSSx",iconUrl:Bt,connectorId:De.CROSSx},metamask:{name:"MetaMask",iconUrl:bn,connectorId:De.MetaMask},binance:{name:"Binance Wallet",iconUrl:fn,connectorId:De.Binance}};function Rr(e){switch(e){case"cross_embedded":return De.CROSSx;case"metamask":return De.MetaMask;case"binance":return De.Binance;default:return}}function Br(e,t){switch(e){case"cross_embedded":return t==="google"?{name:"Google",iconUrl:gn}:t==="apple"?{name:"Apple",iconUrl:_t}:{name:"CROSSx",iconUrl:Bt};case"cross_wallet":return{name:"CROSSx Wallet",iconUrl:Bt};case"cross_extension":return{name:"CROSSx Extension",iconUrl:Ir};case"metamask":return{name:"MetaMask",iconUrl:bn};case"binance":return{name:"Binance Wallet",iconUrl:fn};default:return null}}function _r({label:e="Connect Wallet",className:t,style:o,walletInfoStyle:r,user:n,enablePortfolio:i,portfolio:f,theme:p,accountName:m,connectorId:y,showPortfolio:w,sendAccounts:T,getTransactionReceipt:C,sendTransaction:u,estimateGas:h,onDisconnect:S,onSelectWallet:x,onBuy:k,onRampRedirectUrl:v,bridgeTokens:W,bridgeHistory:z,getBridgeQuote:se,getBridgeToTokens:q,getBridgeApproval:G,approveBridge:D,submitBridge:F,showBalance:me=!0,env:P,...B}){let{address:E,isConnected:ue,connector:ke,chain:K}=br(),Q=hr(),ie=yr(),{switchChainAsync:xe}=Cr(),{sendTransactionAsync:Re}=wr(),{connectWallet:Fe,disconnect:ne,selectWallet:Be,currentWallet:V,isConnecting:_e}=Te(),$e=Ye(),s=p??$e?.mode??"dark",a=lt(()=>kr(P),[P]),d=n?.address??E,c=n?Pr[n.provider]:null,{loginType:I,accountName:R,accounts:L}=St({walletId:V,connector:ke,address:d}),l=lt(()=>c?{name:c.name,iconUrl:c.iconUrl}:Br(V,I),[c,V,I]),b=m??n?.name??R??void 0,A=c?c.connectorId:Rr(V),g=y??A,_=f??w??!!i,U=It({env:a,walletAddress:d,enabled:ue&&!!d&&me}),O=W??U.bridgeTokens,j=z??U.bridgeHistory,fe=se??U.getBridgeQuote,ae=q??U.getBridgeToTokens,ge=G??U.getBridgeApproval,pe=D??U.approveBridge,tt=F??U.submitBridge,ut=Le(()=>{Fe().catch(N=>{console.error("[crossx-kit] connectWallet error:",N)})},[Fe]),kn=Le(()=>{ne()},[ne]),xn=S??kn,Ee=xr(),{eligibility:Tn}=Tr({network:K?String(K.id):void 0}),nt=Tn?.allowed===!0,In=lt(()=>{if(k)return k;if(!(!Ee||!K||!nt))return()=>Ee.open({crypto:K.nativeCurrency?.symbol??"USDT",network:String(K.id),...v?{redirectUrl:v}:{}}).then(()=>{}).catch(N=>{throw console.warn("[crossx-kit] onramp open failed:",N),N})},[k,Ee,K,nt,v]),Et=gr();fr(()=>{if(Ee?.onStatus)return Ee.onStatus(()=>{Et.invalidateQueries()})},[Ee,Et]);let Sn=lt(()=>{if(!k&&!(!Ee||!K)&&!nt)return"On-ramp is not available in your region."},[k,Ee,K,nt]),vn=n?n.provider==="google"||n.provider==="apple":V==="cross_embedded",An=Le(()=>{Be().catch(N=>{console.error("[crossx-kit] selectWallet error:",N)})},[Be]),Ot=x??(vn?An:void 0),Pn=Le(async({hash:N,chainId:X})=>{let Y=vt(Q,X?{chainId:X}:void 0);if(!Y)return null;try{return await Y.getTransactionReceipt({hash:N})}catch{return null}},[Q]),Rn=Le(async N=>{N.chainId!==void 0&&N.chainId!==ie&&await xe({chainId:N.chainId});let Y=N.chainId===56||N.chainId===97?{...N,type:"legacy"}:N;return(u??Re)(Y)},[u,Re,ie,xe]),Bn=_?Rn:u,_n=Le(async N=>{let X=N.chainId??ie,Y=vt(Q,X?{chainId:X}:void 0);if(!Y)throw new Error(`publicClient for chainId ${X??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let ce=X===56||X===97,[de,be]=await Promise.all([Y.estimateGas({account:N.from,to:N.to,value:N.value,data:N.data}),(async()=>{if(ce)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await Y.getGasPrice()};try{let H=await Y.estimateFeesPerGas();return{maxFeePerGas:H.maxFeePerGas,maxPriorityFeePerGas:H.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await Y.getGasPrice()}}})()]);return{gasLimit:de,maxFeePerGas:be.maxFeePerGas,maxPriorityFeePerGas:be.maxPriorityFeePerGas,gasPrice:be.gasPrice}},[Q,ie]),En=h??_n,On=Le(async N=>{let X={};if(!E||N.length===0)return X;let Y=N.flatMap(de=>{let H={address:de,abi:Sr,chainId:ie};return[{...H,functionName:"balanceOf",args:[E]},{...H,functionName:"totalSupply"},{...H,functionName:"decimals"}]}),ce;try{ce=await un(Q,{contracts:Y,allowFailure:!0})}catch{return X}return N.forEach((de,be)=>{let H=be*3,ye=ce[H],ot=ce[H+1],qe=ce[H+2];!ye||ye.status!=="success"||(X[de.toLowerCase()]={balance:ye.result,totalSupply:ot&&ot.status==="success"?ot.result:void 0,decimals:qe&&qe.status==="success"?Number(qe.result):void 0})}),X},[Q,E,ie]),Nn=Le(async N=>{let X={earnedWei:0n,stakedWei:0n};if(!N)return X;let Y=Ar[a],ce={address:Y.poolAddress,abi:vr,chainId:Y.crossChainId},de;try{de=await un(Q,{allowFailure:!0,contracts:[{...ce,functionName:"earned",args:[N]},{...ce,functionName:"balanceOf",args:[N]},{...ce,functionName:"posaActive"},{...ce,functionName:"lastRewardBlock"},{...ce,functionName:"totalStaked"}]})}catch{return X}let be=Me=>de[Me]&&de[Me].status==="success"?de[Me].result:0n,H=be(0),ye=be(1);if(de[2]&&de[2].status==="success"?de[2].result:!1)return{earnedWei:H,stakedWei:ye};let qe=be(3),Lt=be(4);if(Lt===0n)return{earnedWei:H,stakedWei:ye};let pt=0n;try{pt=await vt(Q,{chainId:Y.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:H,stakedWei:ye}}if(pt<=qe)return{earnedWei:H,stakedWei:ye};let mt=0n;try{let Me=await fetch(Y.networkStatsUrl).then(ft=>ft.json()),Dt=Me?.data?.block_reward??Me?.block_reward;if(Dt){let[ft,Fn=""]=String(Dt).split("."),Mn=(Fn+"0".repeat(18)).slice(0,18);mt=BigInt(ft||"0")*Pt+BigInt(Mn||"0")}}catch{}if(mt===0n)return{earnedWei:H,stakedWei:ye};let Ln=(pt-qe)*mt*Pt/Lt,Dn=ye*Ln/Pt;return{earnedWei:H+Dn,stakedWei:ye}},[Q,a]),Nt=!Ot,Wt=t?`cb-button ${t}`:"cb-button",Wn=t?`cb-pill ${t}`:"cb-pill";return _e&&!ue?Ke(mn,{children:[re("style",{children:Rt}),Ke("button",{type:"button",disabled:!0,className:Wt,style:o,"aria-busy":"true",children:[re("span",{className:"cb-spinner","aria-hidden":"true"}),re("span",{className:"cb-button-label",children:"Connecting..."})]})]}):ue&&d?Ke("span",{"data-crossx-wallet-info":Nt?"external":"embedded",children:[re("style",{children:Rt}),Nt&&re("style",{children:Or}),Ke(At,{...B,env:a,theme:s,showBalance:me,walletAddress:d,accountName:b,sendAccounts:T??L,connectorId:g,showPortfolio:_,onDisconnect:xn,onSelectWallet:Ot,onBuy:In,onBuyDisabledMessage:Sn,sendTransaction:Bn,getTransactionReceipt:C??Pn,estimateGas:En,lpBalanceReader:On,stakingRewardsReader:Nn,bridgeTokens:O,bridgeHistory:j,getBridgeQuote:fe,getBridgeToTokens:ae,getBridgeApproval:ge,approveBridge:pe,submitBridge:tt,style:r,children:[re(At.Trigger,{asChild:!0,children:Ke("button",{type:"button",className:Wn,style:o,"aria-label":`Connected with ${l?.name??"wallet"}: ${pn(d)}`,children:[l?.iconUrl?re("img",{src:l.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":l.iconUrl===_t?"apple":void 0}):re("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),re("span",{className:"cb-pill-address",children:pn(d)})]})}),re(At.Content,{align:"end",sideOffset:8})]})]}):Ke(mn,{children:[re("style",{children:Rt}),Ke("button",{type:"button",onClick:ut,className:Wt,style:o,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[re(Er,{}),re("span",{className:"cb-button-label",children:e})]})]})}function Er(){return re("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:re("path",{d:"M11.4368 10.5007C11.4368 9.9538 11.6544 9.42855 12.041 9.04175C12.4278 8.65492 12.9529 8.4375 13.5 8.4375H15.1875V6.00073L15.1732 5.92822C15.1639 5.90585 15.15 5.88528 15.1326 5.8678C15.0973 5.83263 15.0494 5.81287 14.9996 5.81287H3.74963C3.4787 5.81287 3.21001 5.75949 2.95972 5.65576C2.90937 5.63488 2.86089 5.61017 2.8125 5.58545V14.2504C2.8125 14.4989 2.91141 14.7371 3.08716 14.9128C3.2629 15.0886 3.50109 15.1875 3.74963 15.1875H15.0007C15.0252 15.1875 15.0495 15.1826 15.0721 15.1732C15.0948 15.1638 15.1152 15.1499 15.1326 15.1326C15.1499 15.1152 15.1638 15.0948 15.1732 15.0721C15.1826 15.0495 15.1875 15.0252 15.1875 15.0007V12.5629H13.5C12.9529 12.5629 12.4278 12.3454 12.041 11.9586C11.6545 11.5719 11.4369 11.0475 11.4368 10.5007ZM12.5618 10.5007C12.5619 10.7491 12.6609 10.9875 12.8364 11.1632C13.0123 11.3391 13.2513 11.4379 13.5 11.4379H15.75C15.7998 11.4379 15.8477 11.4182 15.8829 11.3829C15.9182 11.3477 15.9379 11.2998 15.9379 11.25V9.75037C15.9379 9.70054 15.9182 9.65266 15.8829 9.61743C15.8477 9.5822 15.7998 9.5625 15.75 9.5625H13.5C13.2513 9.5625 13.0123 9.66131 12.8364 9.83716C12.6607 10.013 12.5618 10.2522 12.5618 10.5007ZM13.6879 3.00037C13.6879 2.95054 13.6682 2.90266 13.6329 2.86743C13.5977 2.8322 13.5498 2.8125 13.5 2.8125H3.74963C3.50109 2.8125 3.2629 2.91141 3.08716 3.08716C2.91141 3.2629 2.8125 3.50109 2.8125 3.74963L2.81689 3.84192C2.82585 3.93354 2.8486 4.02351 2.88391 4.10889C2.93096 4.22263 3.00015 4.32614 3.08716 4.41321C3.17403 4.50009 3.2769 4.56936 3.39038 4.61646C3.50412 4.66359 3.62651 4.68787 3.74963 4.68787H13.6879V3.00037ZM14.8129 4.68787H14.9996C15.3473 4.68787 15.6808 4.82576 15.9269 5.07129C16.173 5.31702 16.3119 5.65077 16.3125 5.99854V8.56494C16.4469 8.62873 16.5711 8.7148 16.6783 8.82202C16.9246 9.06823 17.0629 9.40217 17.0629 9.75037V11.25C17.0629 11.5982 16.9246 11.9321 16.6783 12.1783C16.5712 12.2855 16.4468 12.3706 16.3125 12.4343V14.9985L16.3059 15.1282C16.2934 15.2564 16.2619 15.3822 16.2125 15.5017C16.1466 15.6612 16.05 15.806 15.928 15.928C15.806 16.05 15.6612 16.1466 15.5017 16.2125C15.3425 16.2783 15.1719 16.3126 14.9996 16.3125H3.74963C3.20272 16.3125 2.67847 16.095 2.29175 15.7083C1.90502 15.3215 1.6875 14.7973 1.6875 14.2504V3.74963C1.6875 3.20272 1.90502 2.67847 2.29175 2.29175C2.67847 1.90502 3.20272 1.6875 3.74963 1.6875H13.5C13.8482 1.6875 14.1821 1.82581 14.4283 2.07202C14.6746 2.31823 14.8129 2.65217 14.8129 3.00037V4.68787Z",fill:"currentColor"})})}var Or=`
2
- [data-crossx-wallet-info="external"] .wi-select-wallet-btn {
3
- display: none !important;
4
- }
5
- `;function pn(e){return`${e.slice(0,6)}...${e.slice(-4)}`}var Rt=`
6
- .cb-button {
7
- -webkit-font-smoothing: antialiased;
8
- --cb-bg: var(--ds-accent-primary-default, #00D5AA);
9
- --cb-bg-hover: var(--ds-accent-primary-high, #00a0a2);
10
- --cb-color: var(--ds-accent-primary-on, #000);
11
- --cb-border: none;
12
- --cb-radius: 8px;
13
- --cb-height: 36px;
14
- --cb-padding: 0 16px;
15
- --cb-font-family: Inter, system-ui, -apple-system, sans-serif;
16
- --cb-font-size: 14px;
17
- --cb-font-weight: 500;
18
- --cb-gap: 8px;
19
- --cb-transition: background-color 0.15s ease, transform 0.1s ease;
20
- --cb-loading-opacity: 0.7;
21
- --cb-press-scale: 0.95;
22
- --cb-spinner-size: 14px;
23
- --cb-spinner-thumb: currentColor;
24
- --cb-spinner-track: color-mix(in srgb, currentColor 20%, transparent);
25
- --cb-icon-size: 18px;
26
-
27
- display: inline-flex;
28
- align-items: center;
29
- justify-content: center;
30
- box-sizing: border-box;
31
- height: var(--cb-height);
32
- gap: var(--cb-gap);
33
- padding: var(--cb-padding);
34
- border-radius: var(--cb-radius);
35
- border: var(--cb-border);
36
- background: var(--cb-bg);
37
- color: var(--cb-color);
38
- font-family: var(--cb-font-family);
39
- font-size: var(--cb-font-size);
40
- font-weight: var(--cb-font-weight);
41
- cursor: pointer;
42
- transition: var(--cb-transition);
43
- }
44
- .cb-button:hover:not(:disabled) { background: var(--cb-bg-hover); }
45
- .cb-button:active:not(:disabled) { transform: scale(var(--cb-press-scale)); }
46
- .cb-button:disabled, .cb-button[aria-busy="true"] {
47
- cursor: default;
48
- opacity: var(--cb-loading-opacity);
49
- }
50
- .cb-spinner {
51
- display: inline-block;
52
- width: var(--cb-spinner-size);
53
- height: var(--cb-spinner-size);
54
- border: 2px solid var(--cb-spinner-track);
55
- border-top-color: var(--cb-spinner-thumb);
56
- border-radius: 50%;
57
- animation: cck-cb-spin 0.6s linear infinite;
58
- flex-shrink: 0;
59
- }
60
- .cb-button-icon {
61
- width: var(--cb-icon-size);
62
- height: var(--cb-icon-size);
63
- flex-shrink: 0;
64
- }
65
- .cb-button-label { white-space: nowrap; }
66
- .cb-pill {
67
- --cb-pill-bg: var(--ds-surface-default, #1e232e);
68
- --cb-pill-bg-hover: var(--ds-surface-medium, #252b39);
69
- --cb-pill-color: var(--ds-content-high, #ffffffd9);
70
- --cb-pill-border: 1px solid var(--ds-border-default, #ffffff12);
71
- --cb-pill-border-hover: 1px solid var(--ds-border-medium, #ffffff2e);
72
- --cb-pill-radius: 8px;
73
- --cb-pill-height: 36px;
74
- --cb-pill-padding: 0 12px;
75
- --cb-pill-press-scale: 0.95;
76
- --cb-pill-font-family: Inter, system-ui, -apple-system, sans-serif;
77
- --cb-pill-font-size: 14px;
78
- --cb-pill-font-weight: 500;
79
- --cb-pill-gap: 8px;
80
- --cb-pill-icon-size: 20px;
81
- --cb-pill-icon-placeholder-bg: var(--ds-surface-high, #2a2d3a);
82
- --cb-pill-address-font: Inter, system-ui, -apple-system, sans-serif;
83
- --cb-pill-address-font-size: 14px;
84
- --cb-pill-address-letter-spacing: -0.01em;
85
-
86
- display: inline-flex;
87
- align-items: center;
88
- box-sizing: border-box;
89
- height: var(--cb-pill-height);
90
- gap: var(--cb-pill-gap);
91
- padding: var(--cb-pill-padding);
92
- border-radius: var(--cb-pill-radius);
93
- border: var(--cb-pill-border);
94
- background: var(--cb-pill-bg);
95
- color: var(--cb-pill-color);
96
- font-family: var(--cb-pill-font-family);
97
- font-size: var(--cb-pill-font-size);
98
- font-weight: var(--cb-pill-font-weight);
99
- cursor: pointer;
100
- }
101
- .cb-pill:hover,
102
- .cb-pill[data-state="open"] { background: var(--cb-pill-bg-hover); border: var(--cb-pill-border-hover, 1px solid var(--ds-border-medium, #ffffff2e)); }
103
- .cb-pill:active:not(:disabled) { transform: scale(var(--cb-pill-press-scale)); }
104
- .cb-pill-icon {
105
- width: var(--cb-pill-icon-size);
106
- height: var(--cb-pill-icon-size);
107
- border-radius: 50%;
108
- object-fit: contain;
109
- flex-shrink: 0;
110
- background: transparent;
111
- }
112
- /* Apple is a monochrome black logomark in an <img> data URI (can't follow
113
- theme via currentColor). Flip it to white in dark mode so it stays
114
- visible on the dark pill; multicolor marks (Google/MetaMask/Binance/
115
- CROSSx) are untouched. */
116
- [data-theme="dark"] .cb-pill-icon[data-provider="apple"] {
117
- filter: invert(1);
118
- }
119
- .cb-pill-icon-placeholder {
120
- display: inline-block;
121
- width: var(--cb-pill-icon-size);
122
- height: var(--cb-pill-icon-size);
123
- border-radius: 50%;
124
- background: var(--cb-pill-icon-placeholder-bg);
125
- flex-shrink: 0;
126
- }
127
- .cb-pill-address {
128
- font-family: var(--cb-pill-address-font);
129
- font-size: var(--cb-pill-address-font-size);
130
- letter-spacing: var(--cb-pill-address-letter-spacing);
131
- }
132
- @media (max-width: 767.98px) {
133
- .cb-button, .cb-pill {
134
- width: 36px;
135
- min-width: 36px;
136
- padding: 0;
137
- }
138
- .cb-button-label, .cb-pill-address { display: none; }
139
- }
140
- @keyframes cck-cb-spin {
141
- to { transform: rotate(360deg); }
142
- }
143
- `;import{useCallback as yn,useEffect as Nr,useMemo as hn,useState as Wr}from"react";import{detectWallets as wn,DEFAULT_WALLET_REGISTRY as Cn}from"@nexus-cross/connect-kit-wagmi";import{jsx as J,jsxs as Ce}from"react/jsx-runtime";var Lr=["Ensure your wallet extension is installed and unlocked","Try refreshing the page","Some wallets may require you to first open the extension","You can try clicking the wallet anyway"],Dr="Connect with one of our available wallet providers to continue.";function Fr({open:e,onClose:t,onSelect:o,title:r="Connect Wallet",description:n=Dr,troubleshootingTips:i=Lr}){let{availableWallets:f}=Te(),[p,m]=Wr({});Nr(()=>{if(!e)return;let u=wn(Cn),h={};for(let x of u)x.installed!==void 0&&(h[x.id]=x.installed);m(h);let S=setTimeout(()=>{let x=wn(Cn),k={};for(let v of x)v.installed!==void 0&&(k[v.id]=v.installed);m(k)},1e3);return()=>clearTimeout(S)},[e]);let y=hn(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),w=hn(()=>y?f.filter(u=>u.type!=="extension"):f,[f,y]),T=yn(u=>{if(!p[u.walletId]&&u.installUrl&&u.type==="extension"){window.open(u.installUrl,"_blank");return}t(),o(u.walletId)},[t,o,p]),C=yn((u,h)=>{u.stopPropagation(),t(),window.open(h,"_blank")},[t]);return e?J("div",{style:M.overlay,onClick:t,children:Ce("div",{style:M.modal,onClick:u=>u.stopPropagation(),children:[Ce("div",{style:M.header,children:[J("h2",{style:M.title,children:r}),J("button",{type:"button",onClick:t,style:M.closeBtn,"aria-label":"Close",children:Ce("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[J("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),J("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),J("p",{style:M.desc,children:n}),J("div",{style:M.walletList,children:w.map(u=>{let h=p[u.walletId],S=h===!1&&u.type==="extension"&&!!u.installUrl;return Ce("div",{style:M.walletGroup,children:[Ce("button",{type:"button",onClick:()=>T(u),style:{...M.walletItem,...u.walletId==="cross_wallet"?M.walletItemAccent:{}},"aria-label":`Connect with ${u.name}`,children:[u.iconUrl?J("img",{src:u.iconUrl,alt:"",style:M.walletIcon}):J("div",{style:M.walletIconPlaceholder}),Ce("div",{style:M.walletInfo,children:[Ce("div",{style:M.walletNameRow,children:[J("span",{style:M.walletName,children:u.name}),h!==void 0&&J("span",{style:{...M.badge,...h?M.badgeInstalled:M.badgeNotInstalled},children:h?"Installed":"Not Installed"})]}),J("span",{style:M.walletDesc,children:S?"Extension not detected \u2014 click to install":u.type==="extension"?"Browser extension approval is required":u.walletId==="cross_wallet"?"App approval is required":u.walletId==="binance"?"Mobile app only \u2014 Add CROSS network first":h?"Connect with browser extension":"Scan QR code with app"})]})]}),u.guideUrl&&Ce("button",{type:"button",onClick:x=>C(x,u.guideUrl),style:M.guideBtn,children:[J("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),u.guideLabel??"Required Settings"]})]},u.walletId)})}),Ce("div",{style:M.troubleshoot,children:[J("h3",{style:M.troubleshootTitle,children:"Wallet not detected?"}),J("ul",{style:M.troubleshootList,children:i.map(u=>Ce("li",{style:M.troubleshootItem,children:[J("span",{style:M.troubleshootDot,"aria-hidden":"true"}),J("span",{children:u})]},u))})]})]})}):null}var $={surfaceBg:"var(--wi-surface-bg, #121212)",surfaceDefault:"var(--wi-surface-default, rgba(255,255,255,0.05))",surfaceSubtle:"var(--wi-surface-subtle, rgba(255,255,255,0.1))",borderDefault:"var(--wi-border-default, rgba(255,255,255,0.05))",textPrimary:"var(--wi-texticon-primary, #ffffff)",textSecondary:"var(--wi-texticon-secondary, rgba(255,255,255,0.7))",textTertiary:"var(--wi-texticon-tertiary, rgba(255,255,255,0.5))",primary:"var(--wi-primary, #019d92)",primarySoft:"var(--crossx-kit-primary-soft, rgba(1,157,146,0.15))",accentGradient:"var(--crossx-kit-accent-gradient, linear-gradient(113deg, rgba(255,255,255,0.05) 0%, rgba(1,157,146,0.12) 70%, rgba(255,255,255,0.05) 70%, rgba(1,157,146,0.12) 80%, rgba(255,255,255,0.05) 80%))",warningBg:"var(--crossx-kit-warning-bg, rgba(245,158,11,0.1))",warningBorder:"var(--crossx-kit-warning-border, rgba(245,158,11,0.25))",warningText:"var(--crossx-kit-warning-text, #fbbf24)"},M={overlay:{position:"fixed",inset:0,zIndex:1e4,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",backdropFilter:"blur(4px)"},modal:{width:"100%",maxWidth:"420px",margin:"16px",background:$.surfaceBg,border:`1px solid ${$.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:$.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:$.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:$.textTertiary,margin:0,lineHeight:1.5},walletList:{display:"flex",flexDirection:"column",gap:"6px",padding:"0 12px 12px"},walletGroup:{display:"flex",flexDirection:"column",borderRadius:"12px",overflow:"hidden",background:$.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:$.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:$.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:$.surfaceSubtle,flexShrink:0},walletInfo:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"3px"},walletNameRow:{display:"flex",alignItems:"center",gap:"8px"},walletName:{fontSize:"15px",fontWeight:700,lineHeight:1.3,color:$.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:$.primarySoft,color:$.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:$.textTertiary},walletDesc:{fontSize:"11px",color:$.textSecondary,lineHeight:1.3},guideBtn:{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px",margin:"0 14px 14px",padding:"10px 12px",borderRadius:"10px",border:`1px solid ${$.warningBorder}`,background:$.warningBg,color:$.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:$.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:$.textPrimary,margin:"0 0 8px"},troubleshootList:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"8px"},troubleshootItem:{display:"flex",alignItems:"flex-start",gap:"8px",fontSize:"11px",color:$.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:$.textSecondary}};import{useOnRamp as Xs,useOnRampEligibility as Ys,OnRampProvider as Zs}from"@nexus-cross/onramp/react";import{WalletInfo as ei,ConnectorId as ti}from"@nexus-cross/dapp-ui";import{AppLauncher as oi,AppLauncherTrigger as ri,AppLauncherContent as si,useGlobalMenu as ii}from"@nexus-cross/dapp-ui";import{SkillsButton as ci}from"@nexus-cross/dapp-ui";import{OnRampError as li}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as pi,formatBalance as mi,formatWei as fi}from"@nexus-cross/connect-kit-core";Ft();export{Te as a,Vn as b,Ye as c,bt as d,ho as e,It as f,St as g,_r as h,Fr as i,Xs as j,Ys as k,Zs as l,ei as m,ti as n,oi as o,ri as p,si as q,ii as r,ci as s,li as t,pi as u,mi as v,fi as w};