@turtleclub/earn-widget 0.3.2-beta.0 → 0.3.2
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.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/styles.css +89 -17
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var react=require('react'),jotai=require('jotai'),clsx=require('clsx'),jsxRuntime=require('react/jsx-runtime'),lucideReact=require('lucide-react'),hooks=require('@turtleclub/hooks'),reactQuery=require('@tanstack/react-query'),api=require('@turtleclub/api'),chains=require('@turtleclub/chains'),ui=require('@turtleclub/ui'),utils=require('@turtleclub/utils'),classVarianceAuthority=require('class-variance-authority');function re(...e){return clsx.clsx(e)}var we={theme:"dark",widgetWidth:"default",customWidth:"100%",padding:"default",rounding:"default",fontFamily:"Montserrat",fontSecondary:"DM Sans",deals:[],campaigns:[],styles:{background:"#141514",background_dark:"#F9F9F9",foreground:"#F9F9F9",foreground_dark:"#141514",card:"#141514",card_dark:"#F9F9F9",muted_foreground:"#FFFFFF80",muted_foreground_dark:"#14151480",primary:"#73F36C",primary_dark:"#73F36C"}};var j=jotai.atom(we);jotai.atom(false);jotai.atom(false);jotai.atom(null);jotai.atom({amount:"",tokenAddress:"",tokenDecimals:0,chain:""});var te=jotai.atom({status:"idle",hash:void 0,error:void 0});jotai.atom(e=>e(te).status,(e,t,n)=>{let r=e(te);t(te,{...r,status:n});});jotai.atom(e=>e(te).hash,(e,t,n)=>{let r=e(te);t(te,{...r,hash:n});});function Ue(e,t){let n=t==="dark",r={"--color-brand-black":n?e.background_dark:e.background,"--color-brand-white":n?e.foreground_dark:e.foreground,"--color-brand-green":n?e.primary_dark:e.primary};return (e.card!==void 0||e.card_dark!==void 0)&&(r["--color-surface-primary"]=n?e.card_dark??e.card??e.background_dark:e.card??e.card_dark??e.background),(e.muted_foreground!==void 0||e.muted_foreground_dark!==void 0)&&(r["--muted-foreground"]=n?e.muted_foreground_dark??e.muted_foreground??e.foreground_dark:e.muted_foreground??e.muted_foreground_dark??e.foreground),r}var _e={background:"#F9F9F9",background_dark:"#141514",foreground:"#141514",foreground_dark:"#F9F9F9",primary:"#73F36C",primary_dark:"#73F36C",card:"#F9F9F9",card_dark:"#141514",muted_foreground:"#14151480",muted_foreground_dark:"#FFFFFF80"},$e="dark",He="Montserrat, sans-serif",je="DM Sans, sans-serif";function J(){let e=jotai.useAtomValue(j),t=e?.theme??$e,n=e?.fontFamily??He,r=e?.fontSecondary??je,i=e?.widgetWidth??"default",o=e?.customWidth??"100%",a=e?.showNavigation??true,u=e?.padding??"default",s=e?.rounding??"default",c=e?.styles??_e,l=Ue(c,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:l,fontPrimary:n,fontSecondary:r,widgetWidth:i,customWidth:o,showNavigation:a,padding:u,rounding:s,config:e,widgetStyles:c}}function Xe({config:e,children:t}){let n=jotai.useSetAtom(j),{theme:r,coreTokenCSS:i,fontPrimary:o,fontSecondary:a,widgetWidth:u}=J();return react.useEffect(()=>{n(e);},[e,n]),jsxRuntime.jsx("div",{className:re("turtle-widget-root text-foreground","antialiased transition-all duration-700 ease-linear w-full overflow-hidden","h-full flex items-center justify-center",r==="dark"?"dark":""),style:{...i,"--font-primary":o,"--font-secondary":a,fontFamily:o,backgroundColor:"transparent",maxHeight:"90vh"},children:jsxRuntime.jsx("div",{className:re("flex flex-col gap-2 h-full overflow-hidden",u==="full"?"w-full items-center":u==="custom"?"items-stretch":"items-center"),style:{...u==="custom"&&e.customWidth?{width:e.customWidth}:u==="default"?{width:"620px"}:{}},children:t})})}var X=jotai.atom("none"),ce=jotai.atom(e=>e(X)==="deals",(e,t)=>t(X,"deals")),ze=jotai.atom(e=>e(X)==="assets",(e,t)=>t(X,"assets")),ue=jotai.atom(null,(e,t)=>t(X,"none"));function Ge(e,t){let[n,r=""]=e.split("."),i=r.padEnd(t,"0").slice(0,t),o=n+i;return BigInt(o)}function Ke(e,t){let n=e.toString();if(t===0)return n;let r=n.padStart(t+1,"0"),i=r.slice(0,-t)||"0",a=r.slice(-t).replace(/0+$/,"");return a===""?i:`${i}.${a}`}function de(e,t=2){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:t,maximumFractionDigits:t}).format(e)}var Ye={user:"",chain:1,slippage:.001,tokenIn:"",tokenOut:"",amount:"",id:void 0,selectedOpportunity:null,selectedToken:null,resetTrigger:0},E=jotai.atom(Ye),Qe=jotai.atom(e=>{let t=e(E);if(!t.user||!t.tokenIn||!t.tokenOut||!t.amount||!t.selectedToken)return;let n=Ge(t.amount,t.selectedToken.decimals).toString();return {user:t.user,chain:t.chain,slippage:t.slippage,tokenIn:t.tokenIn,tokenOut:t.tokenOut,amount:n,id:t.id,referral:"",distributor_id:t.distributor_id,referral_code:t.referral_code}}),ne=jotai.atom(e=>e(E).amount,(e,t,n)=>{let r=e(E);t(E,{...r,amount:n});}),O=jotai.atom(e=>e(E).selectedOpportunity,(e,t,n)=>{let r=e(E);t(E,{...r,selectedOpportunity:n,tokenOut:n?.tokenDetails.tokenAddress??""});}),me=jotai.atom(e=>e(E).selectedToken,(e,t,n)=>{let r=e(E);t(E,{...r,selectedToken:n,tokenIn:n?.address||""});}),qe=jotai.atom(e=>e(E).slippage,(e,t,n)=>{let r=e(E);t(E,{...r,slippage:n});}),oe=jotai.atom(e=>e(E).resetTrigger,(e,t,n)=>{let r=e(E);t(E,{...r,resetTrigger:n});});jotai.atom(e=>{let t=e(E);return !!(t.user&&t.tokenIn&&t.tokenOut&&t.amount&&t.selectedToken&&parseFloat(t.amount)>0)});jotai.atom(null,(e,t)=>{let n=e(E);t(E,{...Ye,user:n.user,chain:n.chain,resetTrigger:n.resetTrigger+1});});function Ze({chainIds:e,address:t}){let n=hooks.useConfig(),r=reactQuery.useQueries({queries:e.map(s=>({queryKey:["earnWalletBalances",s,t],queryFn:async()=>t?await api.earnWalletBalances({chain:s,user:t},n):null,enabled:!!t,staleTime:60*1e3*5,refetchInterval:60*1e3,refetchOnWindowFocus:false}))}),i=react.useMemo(()=>{let s={};return r.forEach((c,m)=>{let l=e[m];c.data&&l!==void 0&&(s[l]=c.data.balances);}),s},[r,e]),o=r.some(s=>s.isLoading),a=r.find(s=>s.error)?.error||null;return {balances:i,isLoading:o,error:a,refetchAll:()=>{r.forEach(s=>{s.refetch();});}}}var ot=react.createContext(null),rt=react.createContext(""),Ae=({adapter:e,distributorId:t,children:n})=>jsxRuntime.jsx(ot.Provider,{value:e,children:jsxRuntime.jsx(rt.Provider,{value:t,children:n})}),w=()=>{let e=react.useContext(ot);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},pe=()=>react.useContext(rt),Q=()=>{let e=w();return {user:e.user,network:e.network,isConnected:!!e.user,openConnectionModal:e.openConnectionModal}},cn=()=>{let e=w();return {sendTransaction:e.sendTransaction,signMessage:e.signMessage,changeNetwork:e.changeNetwork}},un=()=>{let e=w();return {network:e.network,changeNetwork:e.changeNetwork}};function ae(e,t,n=2){if(e===0||e==null||isNaN(e))return "0";let r;switch(t){case "currency":e>=1e6?r=`$${(e/1e6).toFixed(2)}M`:e>=1e3?r=`$${(e/1e3).toFixed(2)}K`:r=`$${e.toFixed(2)}`;break;case "percentage":r=`${e.toFixed(n)}%`;break;case "number":e>=1e3?r=`${(e/1e3).toFixed(1)}K`:r=e.toString();break;default:r=e.toString();}return r}function at(e){let t=[];if(e.vaults.forEach(o=>{o.katanaCampaignConfig?.incentives&&o.katanaCampaignConfig?.incentives.forEach(a=>{a.apr&&a.apr>0&&t.push(a.apr);});}),e.campaign.katanaConfig?.additionalIncentives&&e.campaign.katanaConfig.additionalIncentives.forEach(o=>{o.apr&&o.apr>0&&t.push(o.apr);}),e.campaign.tacConfig?.additionalIncentives&&e.campaign.tacConfig.additionalIncentives.forEach(o=>{o.apr&&o.apr>0&&t.push(o.apr);}),t.length===0)return null;let n=t.filter(o=>o>1);if(n.length===0)return null;let r=Math.min(...n),i=Math.max(...n);return [ae(r,"percentage",2),ae(i,"percentage",2)]}var st=(e,t)=>{let n=t.katanaCampaignConfig!==null,r=t.tacCampaignConfig!==null;return n?dn(e,t):r?[]:[]},dn=(e,t)=>{let n=e.campaign.katanaConfig?.incentives,r=e.campaign.katanaConfig?.additionalIncentives,i=t.katanaCampaignConfig?.incentives,o=i?.map(s=>{let c=n?.find(l=>l.id===s.id);return c?{name:`Est. ${c.name}`,description:c.tooltip,apr:s.apr,boost:s.apr===void 0,iconUrl:c.iconUrl}:null}).filter(s=>s!==null)||[],a=i?.map(s=>{let c=r?.find(d=>d.id===s.id);if(!c)return null;let m=s.apr??c.apr;return {name:`${c.estApr?"Est. ":""}${c.name}`,description:c.tooltip,apr:m,boost:m===void 0,iconUrl:c.iconUrl}}).filter(s=>s!==null)||[];return [...o,...a].sort((s,c)=>c.apr-s.apr)};var lt="2c86d3a1-cfe8-486d-915d-1b9ff5e924e9",ct=react.createContext(void 0);function F(){let e=react.useContext(ct);if(!e)throw new Error("useEarnData must be used within EarnDataProvider");return e}var kn={1:"https://storage.googleapis.com/turtle-assets/tokens/eth.png",747474:"https://storage.googleapis.com/turtle-assets/partners/polygon/katana.svg"};function ut({children:e}){let t=jotai.useAtomValue(j),[n,r]=jotai.useAtom(O),i=w(),o=t.deals||[],a=t.campaigns||[],u=o.length===0&&a.length===0,{data:s,isLoading:c,error:m}=hooks.useEarnCampaigns(),l=p=>{let g=p.campaign.katanaConfig?.incentives.map(V=>({icon:V.iconUrl,name:V.name}))??[],A=p.campaign.katanaConfig?.additionalIncentives.map(V=>({icon:V.iconUrl,name:V.name}))??[],D=[...g,...A].filter(Boolean),P=p.vaults.map(V=>({icon:kn[V.earnConfig?.tokens?.[0]?.chainId??1],name:V.earnConfig?.tokens?.[0]?.chain??"Ethereum"})),Z=at(p)??"0% - 0%";return {icon:p.campaign.iconUrl,name:p.campaign.description,aprRange:`${Z[0]} - ${Z[1]}`,tvl:ae(p.campaign.katanaConfig?.totalTvlUSD??0,"currency"),participants:p.campaign.totalUsers.toString(),rewards:D,chains:P}},d=(p,g)=>{let A=st(g,p)??[],D=A.reduce((P,Z)=>P+(Z.apr||0),0);return {icon:p.iconUrl,name:p.name,tvl:ae(p.tvlUSD,"currency"),apr:D.toFixed(2)+"%",chain:f(p.earnConfig?.tokens?.[0]?.chainId??1),incentives:A.map(P=>({icon:P.iconUrl,name:P.label})),aprBreakdown:A,turtleBoost:null,partner:{icon:g.campaign.iconUrl,name:g.campaign.description}}},b=p=>({type:"Turtle Campaign",disclaimer:[],tvl:p.campaign.katanaConfig?.totalTvlUSD?.toString()??"0"}),k=p=>{let g=p.earnConfig?.tokens[0];return g?{tokenAddress:g.address,tokenName:g.symbol,tokenSymbol:g.symbol,tokenDecimals:g.decimals,iconToken:p.iconUrl}:{tokenAddress:"",tokenName:"",tokenSymbol:"",tokenDecimals:0,iconToken:""}},f=p=>{let g=chains.getChainById(p),A=chains.chainLogo(p);return g?{value:g.name.toLowerCase().replace(/\s+/g,"-"),symbol:g.nativeCurrency.symbol,name:g.name,icon:A,chainId:p}:{value:`chain-${p}`,symbol:"ETH",name:`Chain ${p}`,icon:chains.chainLogo(p),chainId:p}},h=react.useMemo(()=>{if(!s)return [];let p=s;return a.length>0?p=s.filter(g=>a.includes(g.campaign.id)):u&&(p=s.filter(g=>g.campaign.id===lt)),p.map(g=>l(g))},[s,a,u]),x=react.useMemo(()=>{if(!s)return {};let p={},g=s;return a.length>0?g=s.filter(A=>a.includes(A.campaign.id)):u&&(g=s.filter(A=>A.campaign.id===lt)),g.forEach(A=>{A.vaults.forEach(D=>{D.earnConfig?.tokens&&D.earnConfig?.tokens.length===0||(p[D.id]={id:D.id,tokenDetails:k(D),opportunityDetails:b(A),opportunityItem:d(D,A)});});}),p},[s,a,o,u]);react.useEffect(()=>{if(Object.keys(x).length>0&&!n){let p=Object.keys(x)[0];r(x[p]);}},[x,n,r]);let{uniqueChainIds:v,supportedChains:N}=react.useMemo(()=>{let p=new Map;Object.values(x).forEach(({opportunityItem:D})=>{let P=D.chain;P&&P.chainId&&p.set(P.chainId,P);});let g=Array.from(p.keys()),A=Array.from(p.values()).sort((D,P)=>D.name.localeCompare(P.name));return {uniqueChainIds:g,supportedChains:A}},[x]),{balances:S,isLoading:y,error:L,refetchAll:T}=Ze({chainIds:v,address:i.user||void 0}),R={isLoading:c,error:m,campaigns:h,opportunities:x,balances:S,supportedChains:N,balancesLoading:y,balancesError:L,refetchBalances:T};return jsxRuntime.jsx(ct.Provider,{value:R,children:e})}function dt(){let e=jotai.useAtomValue(O),{opportunities:t,isLoading:n,error:r}=F();return {deals:t,dealsFormatted:t,isLoading:n,error:r,selectedDeal:e}}function ft({onSwitchToEarn:e}){let t=jotai.useSetAtom(ue),n=jotai.useSetAtom(O),{dealsFormatted:r,isLoading:i,error:o}=dt(),a=u=>{n(u),e(),t();};return o?jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col items-center justify-center bg-background",children:[jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Error loading deals"}),jsxRuntime.jsxs(ui.Button,{onClick:()=>t(),variant:"default",className:"mt-2",children:[jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-4 h-4 mr-2"}),"Back"]})]}):i?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading deals..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col bg-transparent",children:[jsxRuntime.jsx("div",{className:"flex items-center justify-start p-3 flex-shrink-0",children:jsxRuntime.jsx("button",{onClick:()=>t(),className:"text-primary hover:text-primary/80 transition-colors",children:jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-5 h-5"})})}),jsxRuntime.jsx(ui.OpportunityList,{opportunities:Object.values(r).map(u=>u.opportunityItem),onOpportunityClick:u=>{let s=Object.values(r).find(c=>c.opportunityItem===u);s&&a(s);},groupBy:"partner",filterVariant:"navigation",className:"h-full"})]})}var ht={1:{address:"0x0000000000000000000000000000000000000000",name:"Ethereum",symbol:"ETH",decimals:18,logo:void 0,balance:"0",price:0,chainId:1}};function ge(){let e=w(),t=e.network,n=!!e.user,{balances:r,balancesLoading:i}=F(),[o,a]=jotai.useAtom(me),u=jotai.useAtomValue(oe),s=t?r[t]:void 0;return react.useEffect(()=>{o&&t&&o.chainId!==t&&a(null);},[t,o,a]),react.useEffect(()=>{if(!(o&&t&&o.chainId===t)&&!(n&&i)){if(s&&s.length>0){let m=[...s].sort((l,d)=>{let b={...l.token,balance:l.amount,decimals:l.token.decimals},k={...d.token,balance:d.amount,decimals:d.token.decimals},f=parseFloat(utils.formatToken(l.amount,b))*(l.token.price||0);return parseFloat(utils.formatToken(d.amount,k))*(d.token.price||0)-f})[0];a({address:m.token.address,name:m.token.name,symbol:m.token.symbol,decimals:m.token.decimals,logo:m.token.logos?.[0],balance:m.amount,price:m.token.price??void 0,chainId:m.token.chain});}else if(!n&&t){let c=ht[t]||ht[1];a({...c,chainId:t});}}},[s,t,o,a,n,i]),react.useEffect(()=>{},[o]),react.useEffect(()=>{u>0&&a(null);},[u,a]),{selectedToken:o,setSelectedToken:a,currentChainBalances:s,isLoadingBalances:i}}function he(e){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}function kt({onAssetSelect:e}){let t=jotai.useSetAtom(ue),n=w(),{isLoadingBalances:r,setSelectedToken:i}=ge(),{balances:o}=F(),a=[];Object.entries(o).forEach(([s,c])=>{c.forEach(m=>{let l={address:m.token.address,name:m.token.name,symbol:m.token.symbol,decimals:m.token.decimals,balance:m.amount,price:m.token.price??void 0,chainId:m.token.chain,logo:m.token.logos?.[0]},d=chains.getChainById(Number(s));a.push({id:`${s}-${l.address}`,symbol:l.symbol,name:l.name,icon:l.logo?jsxRuntime.jsx("img",{src:l.logo,alt:l.symbol,className:"w-8 h-8 rounded-full"}):jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted flex items-center justify-center text-xs",children:l.symbol?.charAt(0)||"?"}),balance:utils.formatNumber(utils.formatToken(l.balance,l),5,false,false),balanceUSD:he(parseFloat(utils.formatToken(l.balance,l))*(l.price||0)),chainId:String(s),chainName:d?.name||"Unknown",address:l.address,decimals:l.decimals});});});let u=async s=>{let c=Number(s.chainId);if(n.network!==c)try{await n.changeNetwork(c);}catch(b){console.error("Failed to switch network:",b);return}let d=o[c]?.find(b=>b.token.address===s.address);d&&(i({address:d.token.address,name:d.token.name,symbol:d.token.symbol,decimals:d.token.decimals,logo:d.token.logos?.[0],balance:d.amount,price:d.token.price??void 0,chainId:d.token.chain}),e?.(s.address||""),t());};return r?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading balances..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col bg-transparent",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between p-3 flex-shrink-0",children:[jsxRuntime.jsx("button",{onClick:()=>t(),className:"text-primary hover:text-primary/80 transition-colors",children:jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-5 h-5"})}),jsxRuntime.jsx("h3",{className:"text-lg font-medium",children:"Select Token"}),jsxRuntime.jsx("div",{className:"w-5 h-5"})," "]}),jsxRuntime.jsx(ui.AssetList,{assets:a,onAssetClick:u,groupByChain:true,showChainIcon:true,filterVariant:"navigation",className:"h-full"})]})}var Ln=classVarianceAuthority.cva("p-0",{variants:{padding:{none:"p-0",sm:"p-3",default:"p-4",md:"p-6",lg:"p-7"}},defaultVariants:{padding:"default"}});function se({children:e,className:t,variant:n,padding:r,rounding:i,...o}){let{padding:a,rounding:u}=J(),s=Ln({padding:r??a}),c=i??u;return jsxRuntime.jsx(ui.Card,{className:re(t,s),...o,variant:n,gradientBorder:"white",rounded:c,children:e})}var xt={xxs:"h-4 text-xs",xs:"h-6 text-sm",sm:"h-8 text-2xl",md:"h-12 text-4xl",lg:"h-16 text-6xl"};function Ie({light:e,dark:t,fallback:n="Turtle Club",className:r,size:i="lg"}){let[o,a]=react.useState(false),{theme:u}=J(),c=u==="dark"?t||e:e||t;return c&&!o?jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("img",{src:c,alt:n,className:ui.cn("object-contain",xt[i]),onError:()=>a(true),onLoad:()=>a(false)})}):jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("span",{className:ui.cn("font-bold text-primary",xt[i]),children:n})})}function vt(){let e=w(),t=pe(),n=jotai.useAtomValue(O),r=jotai.useSetAtom(E);react.useEffect(()=>{r(i=>({...i,user:e.user||"",chain:e.network||1,distributorId:t,distributor_id:t,id:n?.id||""}));},[e.user,e.network,t,n?.id,r]);}function Ct(){let e=jotai.useAtomValue(j);return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var St="https://api.turtle.xyz",Re="turtle_earn_widget_auth",Tt=()=>{let e=w(),[t,n]=react.useState({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null}),r=react.useRef(void 0),i=react.useRef(false),o=react.useRef(false),a=()=>{try{let l=localStorage.getItem(Re);if(l)return JSON.parse(l)}catch(l){console.error("Error reading stored auth:",l);}return null},u=l=>{try{localStorage.setItem(Re,JSON.stringify(l));}catch(d){console.error("Error storing auth:",d);}},s=()=>{try{localStorage.removeItem(Re);}catch(l){console.error("Error clearing stored auth:",l);}};react.useEffect(()=>{let l=e?.user;if(l&&!o.current&&!i.current){o.current=true;let d=a();if(d&&d.address.toLowerCase()===l.toLowerCase()){n({isAuthenticated:true,isLoading:false,error:null,user:d.user,tokens:d.tokens}),r.current=l;return}}if(l!==r.current&&l!==void 0&&!i.current){r.current=l,o.current=true;let d=a();d&&d.address.toLowerCase()===l.toLowerCase()?n({isAuthenticated:true,isLoading:false,error:null,user:d.user,tokens:d.tokens}):c(l);}else l===void 0&&r.current!==void 0&&(r.current=void 0,o.current=false,s(),n({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null}));},[e?.user]);let c=async l=>{if(!i.current){i.current=true,n(d=>({...d,isLoading:true,error:null}));try{let d={address:l,walletEcosystem:"evm",url:window.location.href},b=await fetch(`${St}/auth/get-wallet-signature-message`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!b.ok)throw new Error("Failed to get signature message");let{message:k,nonce:f}=await b.json();if(!e?.signMessage)throw new Error("Wallet adapter does not support message signing");let h=await e.signMessage(k),x={method:"wallet",walletInput:{address:l,ecosystem:"evm",signature:h,nonce:f}},v=await fetch(`${St}/auth/authenticate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!v.ok)throw new Error("Failed to authenticate");let N=await v.json();u({address:l,tokens:N.authTokens,user:N.user}),n({isAuthenticated:!0,isLoading:!1,error:null,user:N.user,tokens:N.authTokens});}catch(d){console.error("Authentication error:",d),n(b=>({...b,isLoading:false,error:d instanceof Error?d.message:"Authentication failed"}));}finally{i.current=false;}}};return {...t,logout:()=>{s(),n({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null});}}};function wt(){let[e,t]=react.useState(""),n=jotai.useSetAtom(ce),{campaigns:r,isLoading:i,error:o}=F();return o?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Error loading discover content"})}):i?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading discover content..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col min-h-0",children:[jsxRuntime.jsx("div",{className:"p-3 space-y-3 flex-shrink-0",children:jsxRuntime.jsx("h2",{className:"text-sm text-foreground font-medium",children:"Deposit directly into Turtle's boosted deals and liquidity campaign opportunities."})}),jsxRuntime.jsx("div",{children:r.map(a=>jsxRuntime.jsx(ui.CampaignItem,{value:a,onSelect:()=>n()},a.name))})]})}var{useUserCampaignPositions:At}=hooks.campaignsV2,Le=["tac","katana"];function Nt(){let{user:e}=Q(),{data:t,isLoading:n,error:r}=hooks.usePartnerCampaigns({idFilter:Le.join(",")}),i=react.useMemo(()=>t?Le.reduce((v,N)=>{let S=t.find(y=>y.campaign.name.toLowerCase()===N);return S&&(v[N]=S,S.vaults.length===0&&console.warn(`\u26A0\uFE0F Campaign ${N} has no vaults from API`)),v},{}):{},[t]),{userPositions:o,userTotalTVL:a,isLoading:u,error:s}=At({campaignName:"tac",userAddress:e}),{userPositions:c,userTotalTVL:m,isLoading:l,error:d}=At({campaignName:"katana",userAddress:e}),b=react.useMemo(()=>({tac:{userPositions:o||[],userTotalTVL:a||0},katana:{userPositions:c||[],userTotalTVL:m||0}}),[o,a,c,m]),k=(a||0)+(m||0),f=react.useMemo(()=>Le.reduce((v,N)=>(v[N]=[],v),{}),[]);return {campaigns:i,positions:b,totalTVL:k,incentives:f,isLoading:n||u||l,error:r||s||d}}var Et=[{id:"vault.id",header:"Position",accessorKey:"vault.id",cell:({row:e})=>jsxRuntime.jsx("div",{className:"flex justify-start gap-0.5",children:jsxRuntime.jsxs("a",{href:`https://app.turtle.club/campaigns/${e.original.vault.campaign}`,className:"flex max-w-[120px] items-center gap-[5px] text-foreground hover:text-primary transition-colors",target:"_blank",rel:"noopener noreferrer",children:[jsxRuntime.jsx("img",{src:e.original.vault.iconUrl,alt:e.original.vault.name,className:"size-5 shrink-0 rounded-full"}),jsxRuntime.jsx("span",{className:"truncate",children:e.original.vault.name})]})})},{id:"tvl",header:"TVL",accessorKey:"tvl",cell:({row:e})=>de(e.original.userTVL??0,2)}];var to=["katana"];function It(){let{user:e,openConnectionModal:t}=Q(),{positions:n,totalTVL:r,isLoading:i}=Nt(),o=react.useMemo(()=>to.flatMap(s=>n[s].userPositions).sort((s,c)=>c.userTVL-s.userTVL),[n]),a=()=>{t&&t();};return i||o.length===0?jsxRuntime.jsxs("div",{className:"sm:min-h-[690px] -mt-8 flex flex-col justify-center items-center gap-4",children:[jsxRuntime.jsx(ui.IconAnimation,{spinning:true,children:jsxRuntime.jsx(lucideReact.TurtleIcon,{className:"w-6 h-6 text-primary"})}),"Loading..."]}):jsxRuntime.jsx("div",{className:"sm:min-h-[690px] p-4",children:!i&&e===void 0?jsxRuntime.jsx(ui.Button,{variant:"default",border:"plain",onClick:a,children:"Connect wallet"}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"text-right text-sm mr-2",children:[jsxRuntime.jsx("span",{className:"text-muted-foreground",children:"Your TVL: "}),jsxRuntime.jsx("span",{className:"text-foreground font-semibold",children:de(r,2)})]}),jsxRuntime.jsx(ui.Separator,{className:"my-2"}),jsxRuntime.jsx(ui.DataTable,{columns:Et,data:o})]})})}function Dt(){let[e,t]=jotai.useAtom(O),n=w(),r=n.network,i=e?.opportunityItem?.chain?.chainId,o=!!(e&&r!==void 0&&i!==void 0&&i!==r&&chains.isChainSupported(i));return {selectedOpportunity:e,setSelectedOpportunity:t,chainId:i,needsChainSwitch:o,isCorrectChain:!!(e&&r!==void 0&&i!==void 0&&i===r),switchToOpportunityChain:async()=>{if(i&&o)try{await n.changeNetwork(i);}catch(l){throw console.error("Failed to switch network:",l),l}},getTokenAddress:()=>e?.tokenDetails?.tokenAddress,getTokenSymbol:()=>e?.tokenDetails?.tokenSymbol,getVaultId:()=>e?.id}}function Rt(){let e=jotai.useSetAtom(ze);return {openTokenSelector:()=>{e();}}}function Wt(){let t=!!w().user,{chainId:n,needsChainSwitch:r,switchToOpportunityChain:i}=Dt(),[o,a]=jotai.useAtom(ne),u=jotai.useAtomValue(oe),{selectedToken:s,currentChainBalances:c,isLoadingBalances:m}=ge(),{openTokenSelector:l}=Rt(),d=c?.map(y=>({icon:y.token.logos?.[0]?ui.iconUrlToImg(y.token.logos[0],y.token.symbol):null,symbol:y.token.symbol,address:y.token.address,balance:y.amount}))||[],b=s?{icon:s.logo?ui.iconUrlToImg(s.logo,s.symbol):null,symbol:s.symbol,address:s.address,balance:s.balance}:null;react.useEffect(()=>{a("");},[s,a]),react.useEffect(()=>{u>0&&a("");},[u,a]);let k=()=>{if(s){let y=s.balance==="0"?"0":s.balance,L=utils.formatToken(y,s),T=utils.formatNumber(L,5,false,false);a(T);}},f=s?utils.formatNumber(utils.formatToken(s.balance,s),5,false,false):"0",h=parseFloat(o)||0,x=s?parseFloat(utils.formatToken(s.balance,s)):0,v=h>x&&t,N=s&&o?v?"Insufficient balance":he(parseFloat(o)*(s.price||0)):void 0,S=r&&n?chains.getChainById(n):null;return r&&S&&t?jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full p-4 border border-muted rounded-lg bg-muted/10",children:jsxRuntime.jsxs("p",{className:"text-sm text-muted-foreground text-center",children:["Please"," ",jsxRuntime.jsx("button",{onClick:i,className:"text-primary hover:text-primary/80 underline font-medium cursor-pointer transition-colors",children:"switch"})," ","to ",jsxRuntime.jsx("strong",{children:S.name})," to continue with this opportunity"]})})]}):m&&t?jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full p-4 border border-muted rounded-lg bg-muted/10",children:jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"Loading tokens..."})})]}):jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full relative",children:jsxRuntime.jsx(ui.SwapInput,{value:o,onChange:a,tokens:d,usdValue:v?void 0:N,balance:f,onMaxClick:k,isWalletConnected:t,className:`w-full [&_button]:w-32 [&_button]:min-w-32 p-6 ${v?"border-destructive/50":""}`,useCustomTokenSelector:true,selectedTokenData:b,onCustomTokenSelectorClick:l})})]})}function Mt({earnRoute:e,userAddress:t,sendTransaction:n,onError:r=()=>{},onSuccess:i=()=>{}}){let[o,a]=react.useState({steps:[],currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false}),{network:u}=Q(),s=react.useMemo(()=>{if(!e)return null;let f=e.steps?.map(h=>`${h.id}-${h.to}-${h.data}`).join("|")||"";return {...e,_stepsKey:f}},[e?.success,e?.estimatedGas,e?.estimatedTime,e?.outputAmount,e?.steps?.map(f=>`${f.id}-${f.to}-${f.data}`).join("|")]);react.useEffect(()=>{if(s&&s.success&&s.steps.length>0){let f=s.steps.map((h,x)=>({id:h.id,label:h.title,description:h.description,txData:{to:h.to,data:h.data,value:h.value,gasLimit:h.gasLimit},completed:false,current:x===0}));a({steps:f,currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});}else a({steps:[],currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});},[s]);let c=react.useRef(o),m=react.useRef({userAddress:t,sendTransaction:n,onError:r,onSuccess:i});react.useEffect(()=>{c.current=o;},[o]),react.useEffect(()=>{m.current={userAddress:t,sendTransaction:n,onError:r,onSuccess:i};},[t,n,r,i]);let l=react.useCallback(async()=>{let f=c.current,{userAddress:h,sendTransaction:x,onError:v,onSuccess:N}=m.current;if(!h||!x||f.isExecuting)return;let S=f.steps[f.currentIndex];if(!(!S||S.completed)){a(y=>({...y,isExecuting:true,hasError:false,cancelled:false,error:void 0}));try{let y=await x({to:S.txData.to,data:S.txData.data,value:S.txData.value?BigInt(S.txData.value):void 0,chainId:u}),L=typeof y=="object"&&"hash"in y?y.hash:String(y);a(T=>{let R=[...T.steps];return R[T.currentIndex]={...R[T.currentIndex],txHash:L},{...T,steps:R}});try{typeof y=="object"&&"wait"in y&&await y.wait();}catch(T){console.warn("Could not wait for transaction confirmation, proceeding anyway:",T);}a(T=>{let R=[...T.steps];R[T.currentIndex]={...R[T.currentIndex],completed:!0,current:!1};let p=T.currentIndex+1,g=p>=R.length;g||(R[p]={...R[p],current:!0});let A=g;return A&&N&&N(),{...T,steps:R,currentIndex:g?T.currentIndex:p,isExecuting:!1,allCompleted:A}});}catch(y){let L=y instanceof Error?y.message:String(y),T=L.toLowerCase().includes("user rejected")||L.toLowerCase().includes("user denied")||L.toLowerCase().includes("user cancelled")||L.toLowerCase().includes("cancelled by user")||L.toLowerCase().includes("transaction rejected")||L.includes("4001");a(R=>({...R,isExecuting:false,hasError:!T,cancelled:T,error:T?"Transaction cancelled by user":y instanceof Error?y.message:"Transaction failed"})),v&&!T&&v(y instanceof Error?y:new Error("Transaction failed"));}}},[]),d=react.useCallback(()=>{if(s&&s.success&&s.steps.length>0){let f=s.steps.map((h,x)=>({id:h.id,label:h.title,description:h.description,txData:{to:h.to,data:h.data,value:h.value,gasLimit:h.gasLimit},completed:false,current:x===0}));a({steps:f,currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});}},[s]),b=o.steps[o.currentIndex]||null,k=!!(t&&o.steps.length>0&&!o.isExecuting&&!o.allCompleted&&!o.cancelled);return react.useEffect(()=>{if(o.steps.length<=1)return;let f=o.currentIndex-1,h=f>=0&&o.steps[f]?.completed,x=o.currentIndex<o.steps.length&&!o.steps[o.currentIndex]?.completed,v=o.currentIndex<o.steps.length;if(h&&x&&v&&!o.isExecuting&&!o.allCompleted&&!o.cancelled){let S=setTimeout(()=>{l();},1e3);return ()=>clearTimeout(S)}},[o.steps,o.currentIndex,o.isExecuting,o.allCompleted,o.cancelled,l]),{...o,currentStep:b,canExecute:k,executeCurrentTransaction:l,resetQueue:d,totalSteps:o.steps.length,completedSteps:o.steps.filter(f=>f.completed).length,progress:o.steps.length>0?o.steps.filter(f=>f.completed).length/o.steps.length*100:0}}function Bt(e){let t=e!==void 0&&!!e.user&&!!e.amount&&parseFloat(e.amount)>0,{data:n,isLoading:r,error:i}=hooks.useEarnRoute(t?{user:e.user,chain:e.chain||1,tokenIn:e.tokenIn,tokenOut:e.tokenOut,amount:e.amount,slippage:e.slippage||.1,id:e.id||"",distributor_id:e.distributor_id||"",referral_code:e.referral_code||""}:void 0);return {data:n?{success:true,steps:n.steps?.map((a,u)=>({id:`step-${u}`,type:a.kind==="approve"?"approval":"deposit",title:a.kind==="approve"?"Approve Token":"Execute Transaction",description:a.kind==="approve"&&"token"in a?`Approve ${a.token.symbol}`:"Execute routing transaction",to:a.tx.to,data:a.tx.data,value:a.tx.value,gasLimit:a.tx.gas.toString()}))||[],estimatedGas:"0",estimatedTime:void 0,outputAmount:n.amount_out,metadata:void 0}:null,isLoading:r,error:i}}function ve(){let e=jotai.useAtomValue(Qe),t=jotai.useAtomValue(O),n=pe(),r=Bt(e&&{...e,distributor_id:n,id:e.id||""}),i=e!==void 0&&!!e.user&&!!e.amount&&parseFloat(e.amount)>0,{data:o}=hooks.useEarnRoute(i?{user:e.user,chain:e.chain||1,tokenIn:e.tokenIn,tokenOut:e.tokenOut,amount:e.amount,slippage:e.slippage||.1,distributor_id:n||"",referral_code:e.referral_code||"",id:e.id||""}:void 0),a=go(o,t);return {...r,isReady:!!e,hasRequiredParams:!!(e?.user&&e?.tokenIn&&e?.tokenOut&&e?.amount),routeDetails:a}}function go(e,t){if(!e?.steps)return [];let n=(o,a)=>({in:{icon:o.logos[0],symbol:o.symbol},out:null,amount:Ke(BigInt(a),o.decimals),type:"approve"}),r=(o,a,u)=>({in:{icon:a.logos[0],symbol:a.symbol},out:{icon:u.logos[0]||t?.iconToken||t?.iconDeal||void 0,symbol:u.symbol},amount:void 0,type:o}),i=[];return e.steps.forEach(o=>{if(o.kind==="approve"&&o.token){let a=n(o.token,o.amount);i.push(a);}o.kind==="enso"&&o.substeps&&o.substeps.forEach(a=>{let u=a.from[0],s=a.to[0],c=r(a.kind,u,s);i.push(c);});}),i}function _t(){let{data:e,error:t,isLoading:n}=ve();return {fetchedRoute:e??null,routeError:t,isLoadingRoute:n}}function Ht({userAddress:e,openConnectionModal:t,fetchedRoute:n,routeError:r,isLoadingRoute:i,canExecute:o,isExecuting:a,hasError:u,cancelled:s,error:c,executeCurrentTransaction:m,totalSteps:l,completedSteps:d,showingTransactionStatus:b,hasInsufficientBalance:k,className:f}){let x=!!w().user,{data:v,isLoading:N}=hooks.useGeocheck(),S=async()=>{o&&await m();};return b?null:N?jsxRuntime.jsx(ui.Button,{disabled:true,className:f,size:"lg",fullWidth:true,children:"Checking availability..."}):v&&!v.canInteract?jsxRuntime.jsxs(ui.Tooltip,{children:[jsxRuntime.jsx(ui.TooltipTrigger,{className:"w-full cursor-default space-y-2",children:jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:f,size:"lg",fullWidth:true,children:"Geo Restricted"})}),jsxRuntime.jsx(ui.TooltipContent,{side:"top",sideOffset:6,className:"text-xs",children:"Due to geographical restrictions you can't use this vault."})]}):!e||!x?jsxRuntime.jsx(ui.Button,{onClick:()=>t(),className:"cursor-pointer w-full",variant:"green",border:"interactive",size:"lg",fullWidth:true,children:"Connect Wallet"}):i?jsxRuntime.jsx(ui.Button,{disabled:true,className:f,size:"lg",fullWidth:true,children:"Loading route..."}):r?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:f,size:"lg",fullWidth:true,children:"Route Error"}):!n||!n.steps||n.steps.length===0?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:f,size:"lg",fullWidth:true,children:"Enter amount to continue"}):k?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:f,size:"lg",fullWidth:true,children:"Insufficient Balance"}):jsxRuntime.jsxs(ui.Button,{variant:"green",border:"interactive",onClick:S,disabled:!o||a,size:"lg",className:"cursor-pointer w-full",fullWidth:true,children:[a&&"Executing...",u&&"Retry Transaction",s&&"Try Again",!a&&!u&&!s&&(l>1?`Confirm Transaction (${d}/${l})`:"Confirm Transaction")]})}function Jt({steps:e,currentStep:t,allCompleted:n,cancelled:r,estimatedTime:i,tokenSymbol:o,amount:a,resetQueue:u}){let[,s]=jotai.useAtom(oe),c=jotai.useSetAtom(ne),m=e.filter(k=>k.completed&&k.txHash).pop(),l=t?.txHash?t:null,d=n?m?.txHash:l?.txHash||m?.txHash,b=react.useMemo(()=>({title:r?"Transaction Cancelled":n?"Transaction Completed!":"Processing Transaction",description:r?"Transaction was cancelled by user":n?"Your deposit has been successfully processed.":"Please wait while your transaction is being confirmed...",txHash:d,explorerUrl:"https://etherscan.io",estimatedTime:void 0,amount:`${a?utils.formatNumber(a,5,false,false):"0"}`,token:o,protocol:"Turtle Protocol",completed:n,cancelled:r,onViewDetails:void 0,onClose:()=>{u(),c(""),s(0);},steps:e.map(k=>({label:k.label,completed:k.completed,current:k.current,txHash:k.txHash}))}),[e,t,n,r,i,o,a,u]);return jsxRuntime.jsx("div",{className:"h-full overflow-hidden",children:jsxRuntime.jsx(ui.TxStatus,{...b,className:"h-full bg-background border-border text-foreground"})})}function Xt({amountToDeposit:e,depositSymbol:t,amountToReceive:n,receiveSymbol:r,receiveDecimals:i,tokenPrice:o,defaultOpen:a=false}){let[u,s]=jotai.useAtom(qe),c=react.useMemo(()=>{let m=e?utils.formatNumber(e,6,false,false):"0",l=n?utils.formatToken(n,{decimals:i},true,false):"0";return {deposit:e?`${m} ${t||"ETH"}`:"0 ETH",receive:n?`${l} ${r||"ETH"}`:"0 ETH",equivalentInUsd:e&&o?(parseFloat(e)*o).toFixed(2):"0.00",defaultOpen:a,slippage:u,setSlippage:s}},[e,t,n,r,o,a]);return jsxRuntime.jsx(ui.SwapDetails,{details:c})}function Lo(e){return e?`${e.slice(0,10)}...${e.slice(-4)}`:"Connect Wallet"}function Gt({userAddress:e,disconnect:t}){let[n,r]=react.useState(false);return jsxRuntime.jsxs("button",{type:"button",onClick:()=>t(),onMouseEnter:()=>{r(true);},onMouseLeave:()=>{r(false);},className:"relative rounded-full bg-secondary px-3 py-1.5 border border-border cursor-pointer transition-colors hover:border-primary min-w-[140px] h-9 overflow-hidden",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 transition-opacity duration-150",style:{opacity:n?0:1},children:[jsxRuntime.jsx(lucideReact.Wallet2Icon,{className:"w-4 h-4"}),jsxRuntime.jsx("span",{className:"text-foreground font-medium text-xs",children:Lo(e)})]}),jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center gap-2 transition-opacity duration-150",style:{opacity:n?1:0},children:jsxRuntime.jsx("span",{className:"text-primary font-medium text-xs",children:"Log out"})})]})}function Kt({selectedChainId:e=1,onChainChange:t}){let{supportedChains:n,isLoading:r}=F(),i=react.useMemo(()=>{let o=n.find(a=>a.chainId===e);if(o)return o;if(e){let a=chains.getChainById(e),u=chains.chainLogo(e);if(a)return {value:a.name.toLowerCase().replace(/\s+/g,"-"),symbol:a.nativeCurrency.symbol,name:a.name,icon:u,chainId:e}}return n[0]},[e,n]);return r?jsxRuntime.jsxs("div",{className:"flex items-center justify-between rounded-full rounded-l-none bg-card py-2 pr-4 h-9 animate-pulse",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 -translate-x-2.5",children:jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"})}),jsxRuntime.jsx("div",{className:"flex items-center gap-3",children:jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})})]}):!i||n.length===0?null:jsxRuntime.jsxs(ui.DropdownMenu,{children:[jsxRuntime.jsx(ui.DropdownMenuTrigger,{src:i.icon,children:i.name}),jsxRuntime.jsx(ui.DropdownMenuContent,{children:n.map(o=>jsxRuntime.jsxs(ui.DropdownMenuItem,{onClick:()=>t?.(o.chainId),children:[jsxRuntime.jsx("img",{src:o.icon,alt:o.name,className:"size-6 rounded-full -ml-1"}),o.name]},o.value))})]})}function Me(){let e=w(),t=e.user,n=!!e.user,r=e.network,i=async o=>{try{await e.changeNetwork(o);}catch(a){console.error("Failed to change network:",a);}};return jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-2",children:[n&&t&&jsxRuntime.jsx(Gt,{userAddress:t,disconnect:e.disconnect}),n&&jsxRuntime.jsx(Kt,{selectedChainId:r,onChainChange:i})]})}function Qt(){return jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4 flex-1 min-h-0 h-full overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0",children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-2",children:[jsxRuntime.jsx("div",{className:"rounded-full bg-secondary px-3 py-1.5 border border-border min-w-[140px] h-9",children:jsxRuntime.jsx("div",{className:"animate-pulse",children:jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})})}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between rounded-full rounded-l-none bg-card py-2 pr-4 h-9 animate-pulse",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 -translate-x-2.5",children:jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"})}),jsxRuntime.jsx("div",{className:"flex items-center gap-3",children:jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})})]})]})}),jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsxs("div",{className:"rounded-lg bg-secondary p-4 space-y-3 animate-pulse",children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("div",{className:"h-8 w-32 bg-muted rounded"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"}),jsxRuntime.jsx("div",{className:"h-6 w-16 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between text-sm",children:[jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"p-6 border border-border rounded-lg space-y-4 animate-pulse",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsx("div",{className:"w-10 h-10 rounded-full bg-muted"}),jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsx("div",{className:"h-5 w-32 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("div",{className:"h-4 w-16 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("div",{className:"h-4 w-16 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})]})]}),jsxRuntime.jsx("div",{className:"pt-2",children:jsxRuntime.jsx("div",{className:"h-10 w-full bg-muted rounded-lg"})})]})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0"}),jsxRuntime.jsx("div",{className:"sticky bottom-0 pb-2 w-full",children:jsxRuntime.jsx("div",{className:"h-12 w-full bg-muted rounded-lg animate-pulse"})})]})}function qt(){let e=jotai.useAtomValue(me),t=jotai.useAtomValue(ne),n=jotai.useAtomValue(O),r=jotai.useSetAtom(ce),i=w(),{sendTransaction:o,openConnectionModal:a,user:u}=i,{isLoading:s,balancesLoading:c}=F(),{fetchedRoute:m,routeError:l,isLoadingRoute:d}=_t(),{routeDetails:b}=ve(),{steps:k,currentStep:f,canExecute:h,isExecuting:x,allCompleted:v,hasError:N,cancelled:S,error:y,executeCurrentTransaction:L,resetQueue:T,totalSteps:R,completedSteps:p}=Mt({earnRoute:m,userAddress:u,sendTransaction:o}),g=react.useMemo(()=>x||v||S||k.length>0&&p>0,[x,v,S,k.length,p]),A=!!i.user,D=e?parseFloat(utils.formatToken(e.balance,e)):0,P=react.useMemo(()=>(parseFloat(t)||0)>D&&A,[t,e,A]),Z=react.useMemo(()=>t&&parseFloat(t)>0,[t]),V=react.useMemo(()=>({name:n?.opportunityItem.name??"N/A",vaultSymbol:n?.tokenDetails?.tokenSymbol??"N/A",icon:n?.opportunityItem.icon??"N/A",totalApr:n?.opportunityItem.apr??"N/A",aprBreakdown:n?.opportunityItem.aprBreakdown.map(ee=>({name:ee.name,iconUrl:ee.iconUrl,apr:ee.apr?.toString()??"0",description:ee.description,boost:ee.boost}))??[],tvlUsd:n?.opportunityItem.tvl??"N/A",depositDetails:{symbol:e?.symbol??"N/A",price:e?.price??0,depositAmount:parseFloat(t||"0")??0,apr:parseFloat(n?.opportunityItem.apr??"0")/100},type:"Turtle Campaign"}),[n,t,e]);return s||c?jsxRuntime.jsx(Qt,{}):jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4 flex-1 min-h-0 h-full overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0",children:jsxRuntime.jsx(Me,{})}),jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsx(Wt,{}),jsxRuntime.jsx(ui.OpportunitySection,{className:"p-6",value:V,opportunitySelector:"old",onOpportunityClick:()=>r(),hideDisclaimer:true})]}),jsxRuntime.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[Z&&m&&!d&&jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsx(Xt,{amountToDeposit:t,depositSymbol:e?.symbol||"",amountToReceive:m?.outputAmount||"0",receiveSymbol:n?.tokenDetails?.tokenSymbol||"",receiveDecimals:n?.tokenDetails?.tokenDecimals||0,tokenPrice:e?.price||0,defaultOpen:true}),b&&b.length>0&&jsxRuntime.jsx(ui.RouteDetails,{value:{steps:b}})]}),g&&jsxRuntime.jsx(Jt,{steps:k,currentStep:f,allCompleted:v,cancelled:S,estimatedTime:m?.estimatedTime||0,tokenSymbol:e?.symbol||"",amount:t,resetQueue:T})]}),jsxRuntime.jsx("div",{className:"sticky bottom-0 pb-2 w-full",children:jsxRuntime.jsx(Ht,{userAddress:u||"",openConnectionModal:a,fetchedRoute:m,routeError:l,isLoadingRoute:d,canExecute:h&&!P,isExecuting:x,hasError:N,cancelled:S,error:y,executeCurrentTransaction:L,totalSteps:R,completedSteps:p,showingTransactionStatus:g,hasInsufficientBalance:P,className:"w-full"})})]})}function Qo({config:e}){vt();let{isAuthenticated:t}=Tt(),[n,r]=react.useState("earn"),i=react.useMemo(()=>[...t?[{value:"positions",label:"Your Positions"}]:[],{value:"earn",label:"Earn"},{value:"discover",label:"Discover"}],[t]),o=jotai.useAtomValue(X),a=jotai.useSetAtom(X),{light:u,dark:s,fallback:c}=Ct(),{showNavigation:m}=J(),l=e?.campaigns&&e.campaigns.length>0,d=e?.deals&&e.deals.length>0;return jsxRuntime.jsx(Xe,{config:e,children:jsxRuntime.jsx(ut,{children:jsxRuntime.jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:!l&&!d?jsxRuntime.jsx(se,{variant:"border",className:"w-full h-full flex items-center justify-center",children:jsxRuntime.jsxs("div",{className:"text-center p-6",children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold text-foreground mb-2",children:"Widget Configuration Error"}),jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground",children:"No campaigns or deals are configured for this widget."}),jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Please check your widget configuration."})]})}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[m&&jsxRuntime.jsx(ui.SegmentControl,{cursorPointer:true,variant:"segment",value:n,onChange:k=>{r(k),a("none");},items:i,className:"!bg-background"}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:o!=="none"?jsxRuntime.jsxs(se,{variant:"border",className:"w-full h-full min-h-0 flex flex-col overflow-hidden",children:[o==="deals"&&jsxRuntime.jsx(ft,{onSwitchToEarn:()=>r("earn")}),o==="assets"&&jsxRuntime.jsx(kt,{})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs(se,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0 py-2",children:jsxRuntime.jsx(Ie,{light:u,dark:s,fallback:c,size:"xs"})}),jsxRuntime.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden",children:[n==="positions"&&jsxRuntime.jsx(It,{}),n==="earn"&&jsxRuntime.jsx(qt,{}),n==="discover"&&jsxRuntime.jsx(wt,{})]})]})})})]})})})})}function qo({adapter:e,config:t,distributorId:n}){return jsxRuntime.jsx(Ae,{adapter:e,distributorId:n,children:jsxRuntime.jsx(Qo,{config:t})})}
|
|
2
|
-
exports.AdapterProvider=
|
|
1
|
+
'use strict';var react=require('react'),jotai=require('jotai'),clsx=require('clsx'),jsxRuntime=require('react/jsx-runtime'),lucideReact=require('lucide-react'),hooks=require('@turtleclub/hooks'),reactQuery=require('@tanstack/react-query'),api=require('@turtleclub/api'),chains=require('@turtleclub/chains'),ui=require('@turtleclub/ui'),utils=require('@turtleclub/utils'),classVarianceAuthority=require('class-variance-authority');function oe(...e){return clsx.clsx(e)}var Ae={theme:"dark",widgetWidth:"default",customWidth:"100%",padding:"default",rounding:"default",fontFamily:"Montserrat",fontSecondary:"DM Sans",deals:[],campaigns:[],styles:{background:"#141514",background_dark:"#F9F9F9",foreground:"#F9F9F9",foreground_dark:"#141514",card:"#141514",card_dark:"#F9F9F9",muted_foreground:"#FFFFFF80",muted_foreground_dark:"#14151480",primary:"#73F36C",primary_dark:"#73F36C"}};var ee=jotai.atom(Ae);jotai.atom(false);jotai.atom(false);jotai.atom(null);jotai.atom({amount:"",tokenAddress:"",tokenDecimals:0,chain:""});var Z=jotai.atom({status:"idle",hash:void 0,error:void 0});jotai.atom(e=>e(Z).status,(e,t,n)=>{let r=e(Z);t(Z,{...r,status:n});});jotai.atom(e=>e(Z).hash,(e,t,n)=>{let r=e(Z);t(Z,{...r,hash:n});});function ae(e){return `rgb(from ${e} calc(255 - r) calc(255 - g) calc(255 - b))`}function nn(e,t=10){return `color-mix(in srgb, ${e} ${100-t}%, black)`}function Ue(e,t){let n=t==="dark",r={"--color-brand-black":n?e.background_dark:ae(e.background_dark),"--color-brand-white":n?e.foreground_dark:ae(e.foreground_dark),"--color-brand-green":n?e.primary_dark:nn(e.primary_dark)};return (e.card!==void 0||e.card_dark!==void 0)&&(r["--color-surface-primary"]=n?e.card_dark??e.card??e.background_dark:ae(e.card_dark??e.background_dark)),(e.muted_foreground!==void 0||e.muted_foreground_dark!==void 0)&&(r["--muted-foreground"]=n?e.muted_foreground_dark??e.muted_foreground??e.foreground_dark:ae(e.muted_foreground_dark??e.muted_foreground_dark??e.foreground_dark)),r}var $e={background_dark:"#141514",foreground_dark:"#F9F9F9",primary_dark:"#73F36C",background:"#F9F9F9",foreground:"#2A2B2A",primary:"#3CBF38",card:"#F7F7F7",muted_foreground:"#9CA3AF",card_dark:"#141514",muted_foreground_dark:"#FFFFFF80"},He="dark",je="Montserrat, sans-serif",Je="DM Sans, sans-serif";function H(){let e=jotai.useAtomValue(ee),t=e?.theme??He,n=e?.fontFamily??je,r=e?.fontSecondary??Je,i=e?.widgetWidth??"default",o=e?.customWidth??"100%",a=e?.showNavigation??true,c=e?.padding??"default",s=e?.rounding??"default",u=e?.styles??$e,l=Ue(u,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:l,fontPrimary:n,fontSecondary:r,widgetWidth:i,customWidth:o,showNavigation:a,padding:c,rounding:s,config:e,widgetStyles:u}}function ze({config:e,children:t}){let n=jotai.useSetAtom(ee),{theme:r,coreTokenCSS:i,fontPrimary:o,fontSecondary:a,widgetWidth:c}=H();return react.useEffect(()=>{n(e);},[e,n]),jsxRuntime.jsx("div",{className:oe("turtle-widget-root text-foreground","antialiased transition-all duration-700 ease-linear w-full overflow-hidden","h-full flex items-center justify-center",r==="dark"?"dark":""),style:{...i,"--font-primary":o,"--font-secondary":a,fontFamily:o,backgroundColor:"transparent",maxHeight:"90vh"},children:jsxRuntime.jsx("div",{className:oe("flex flex-col gap-2 h-full overflow-hidden",c==="full"?"w-full items-center":c==="custom"?"items-stretch":"items-center"),style:{...c==="custom"&&e.customWidth?{width:e.customWidth}:c==="default"?{width:"620px"}:{}},children:t})})}var j=jotai.atom("none"),ie=jotai.atom(e=>e(j)==="deals",(e,t)=>t(j,"deals")),Ge=jotai.atom(e=>e(j)==="assets",(e,t)=>t(j,"assets")),le=jotai.atom(null,(e,t)=>t(j,"none"));function Ke(e,t){let[n,r=""]=e.split("."),i=r.padEnd(t,"0").slice(0,t),o=n+i;return BigInt(o)}function Ye(e,t){let n=e.toString();if(t===0)return n;let r=n.padStart(t+1,"0"),i=r.slice(0,-t)||"0",a=r.slice(-t).replace(/0+$/,"");return a===""?i:`${i}.${a}`}function ce(e,t=2){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:t,maximumFractionDigits:t}).format(e)}var Qe={user:"",chain:1,slippage:.001,tokenIn:"",tokenOut:"",amount:"",id:void 0,selectedOpportunity:null,selectedToken:null,resetTrigger:0},E=jotai.atom(Qe),qe=jotai.atom(e=>{let t=e(E);if(!t.user||!t.tokenIn||!t.tokenOut||!t.amount||!t.selectedToken)return;let n=Ke(t.amount,t.selectedToken.decimals).toString();return {user:t.user,chain:t.chain,slippage:t.slippage,tokenIn:t.tokenIn,tokenOut:t.tokenOut,amount:n,id:t.id,referral:"",distributor_id:t.distributor_id,referral_code:t.referral_code}}),te=jotai.atom(e=>e(E).amount,(e,t,n)=>{let r=e(E);t(E,{...r,amount:n});}),L=jotai.atom(e=>e(E).selectedOpportunity,(e,t,n)=>{let r=e(E);t(E,{...r,selectedOpportunity:n,tokenOut:n?.tokenDetails.tokenAddress??""});}),ue=jotai.atom(e=>e(E).selectedToken,(e,t,n)=>{let r=e(E);t(E,{...r,selectedToken:n,tokenIn:n?.address||""});}),Ze=jotai.atom(e=>e(E).slippage,(e,t,n)=>{let r=e(E);t(E,{...r,slippage:n});}),ne=jotai.atom(e=>e(E).resetTrigger,(e,t,n)=>{let r=e(E);t(E,{...r,resetTrigger:n});});jotai.atom(e=>{let t=e(E);return !!(t.user&&t.tokenIn&&t.tokenOut&&t.amount&&t.selectedToken&&parseFloat(t.amount)>0)});jotai.atom(null,(e,t)=>{let n=e(E);t(E,{...Qe,user:n.user,chain:n.chain,resetTrigger:n.resetTrigger+1});});function et({chainIds:e,address:t}){let n=hooks.useConfig(),r=reactQuery.useQueries({queries:e.map(s=>({queryKey:["earnWalletBalances",s,t],queryFn:async()=>t?await api.earnWalletBalances({chain:s,user:t},n):null,enabled:!!t,staleTime:60*1e3*5,refetchInterval:60*1e3,refetchOnWindowFocus:false}))}),i=react.useMemo(()=>{let s={};return r.forEach((u,p)=>{let l=e[p];u.data&&l!==void 0&&(s[l]=u.data.balances);}),s},[r,e]),o=r.some(s=>s.isLoading),a=r.find(s=>s.error)?.error||null;return {balances:i,isLoading:o,error:a,refetchAll:()=>{r.forEach(s=>{s.refetch();});}}}var rt=react.createContext(null),at=react.createContext(""),Ne=({adapter:e,distributorId:t,children:n})=>jsxRuntime.jsx(rt.Provider,{value:e,children:jsxRuntime.jsx(at.Provider,{value:t,children:n})}),w=()=>{let e=react.useContext(rt);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},de=()=>react.useContext(at),Y=()=>{let e=w();return {user:e.user,network:e.network,isConnected:!!e.user,openConnectionModal:e.openConnectionModal}},dn=()=>{let e=w();return {sendTransaction:e.sendTransaction,signMessage:e.signMessage,changeNetwork:e.changeNetwork}},mn=()=>{let e=w();return {network:e.network,changeNetwork:e.changeNetwork}};function re(e,t,n=2){if(e===0||e==null||isNaN(e))return "0";let r;switch(t){case "currency":e>=1e6?r=`$${(e/1e6).toFixed(2)}M`:e>=1e3?r=`$${(e/1e3).toFixed(2)}K`:r=`$${e.toFixed(2)}`;break;case "percentage":r=`${e.toFixed(n)}%`;break;case "number":e>=1e3?r=`${(e/1e3).toFixed(1)}K`:r=e.toString();break;default:r=e.toString();}return r}function st(e){let t=[];if(e.vaults.forEach(o=>{o.katanaCampaignConfig?.incentives&&o.katanaCampaignConfig?.incentives.forEach(a=>{a.apr&&a.apr>0&&t.push(a.apr);});}),e.campaign.katanaConfig?.additionalIncentives&&e.campaign.katanaConfig.additionalIncentives.forEach(o=>{o.apr&&o.apr>0&&t.push(o.apr);}),e.campaign.tacConfig?.additionalIncentives&&e.campaign.tacConfig.additionalIncentives.forEach(o=>{o.apr&&o.apr>0&&t.push(o.apr);}),t.length===0)return null;let n=t.filter(o=>o>1);if(n.length===0)return null;let r=Math.min(...n),i=Math.max(...n);return [re(r,"percentage",2),re(i,"percentage",2)]}var it=(e,t)=>{let n=t.katanaCampaignConfig!==null,r=t.tacCampaignConfig!==null;return n?pn(e,t):r?[]:[]},pn=(e,t)=>{let n=e.campaign.katanaConfig?.incentives,r=e.campaign.katanaConfig?.additionalIncentives,i=t.katanaCampaignConfig?.incentives,o=i?.map(s=>{let u=n?.find(l=>l.id===s.id);return u?{name:`Est. ${u.name}`,description:u.tooltip,apr:s.apr,boost:s.apr===void 0,iconUrl:u.iconUrl}:null}).filter(s=>s!==null)||[],a=i?.map(s=>{let u=r?.find(m=>m.id===s.id);if(!u)return null;let p=s.apr??u.apr;return {name:`${u.estApr?"Est. ":""}${u.name}`,description:u.tooltip,apr:p,boost:p===void 0,iconUrl:u.iconUrl}}).filter(s=>s!==null)||[];return [...o,...a].sort((s,u)=>u.apr-s.apr)};var Ie="2c86d3a1-cfe8-486d-915d-1b9ff5e924e9",ct=react.createContext(void 0);function F(){let e=react.useContext(ct);if(!e)throw new Error("useEarnData must be used within EarnDataProvider");return e}var xn={1:"https://storage.googleapis.com/turtle-assets/tokens/eth.png",747474:"https://storage.googleapis.com/turtle-assets/partners/polygon/katana.svg"};function ut({children:e}){let[t,n]=jotai.useAtom(L),r=w(),i=[],o=[Ie],a=false,{data:c,isLoading:s,error:u}=hooks.useEarnCampaigns(),p=d=>{let h=d.campaign.katanaConfig?.incentives.map(W=>({icon:W.iconUrl,name:W.name}))??[],T=d.campaign.katanaConfig?.additionalIncentives.map(W=>({icon:W.iconUrl,name:W.name}))??[],I=[...h,...T].filter(Boolean),D=d.vaults.map(W=>({icon:xn[W.earnConfig?.tokens?.[0]?.chainId??1],name:W.earnConfig?.tokens?.[0]?.chain??"Ethereum"})),K=st(d)??"0% - 0%";return {icon:d.campaign.iconUrl,name:d.campaign.description,aprRange:`${K[0]} - ${K[1]}`,tvl:re(d.campaign.katanaConfig?.totalTvlUSD??0,"currency"),participants:d.campaign.totalUsers.toString(),rewards:I,chains:D}},l=(d,h)=>{let T=it(h,d)??[],I=T.reduce((D,K)=>D+(K.apr||0),0);return {icon:d.iconUrl,name:d.name,tvl:re(d.tvlUSD,"currency"),apr:I.toFixed(2)+"%",chain:x(d.earnConfig?.tokens?.[0]?.chainId??1),incentives:T.map(D=>({icon:D.iconUrl,name:D.label})),aprBreakdown:T,turtleBoost:null,partner:{icon:h.campaign.iconUrl,name:h.campaign.description}}},m=d=>({type:"Turtle Campaign",disclaimer:[],tvl:d.campaign.katanaConfig?.totalTvlUSD?.toString()??"0"}),b=d=>{let h=d.earnConfig?.tokens[0];return h?{tokenAddress:h.address,tokenName:h.symbol,tokenSymbol:h.symbol,tokenDecimals:h.decimals,iconToken:d.iconUrl}:{tokenAddress:"",tokenName:"",tokenSymbol:"",tokenDecimals:0,iconToken:""}},x=d=>{let h=chains.getChainById(d),T=chains.chainLogo(d);return h?{value:h.name.toLowerCase().replace(/\s+/g,"-"),symbol:h.nativeCurrency.symbol,name:h.name,icon:T,chainId:d}:{value:`chain-${d}`,symbol:"ETH",name:`Chain ${d}`,icon:chains.chainLogo(d),chainId:d}},g=react.useMemo(()=>{if(!c)return [];let d=c;return o.length>0?d=c.filter(h=>o.includes(h.campaign.id)):a,d.map(h=>p(h))},[c,o,a]),f=react.useMemo(()=>{if(!c)return {};let d={},h=c;return o.length>0?h=c.filter(T=>o.includes(T.campaign.id)):a,h.forEach(T=>{T.vaults.forEach(I=>{I.earnConfig?.tokens&&I.earnConfig?.tokens.length===0||(d[I.id]={id:I.id,tokenDetails:b(I),opportunityDetails:m(T),opportunityItem:l(I,T)});});}),d},[c,o,i,a]);react.useEffect(()=>{if(Object.keys(f).length>0&&!t){let d=Object.keys(f)[0];n(f[d]);}},[f,t,n]);let{uniqueChainIds:N,supportedChains:k}=react.useMemo(()=>{let d=new Map;Object.values(f).forEach(({opportunityItem:I})=>{let D=I.chain;D&&D.chainId&&d.set(D.chainId,D);});let h=Array.from(d.keys()),T=Array.from(d.values()).sort((I,D)=>I.name.localeCompare(D.name));return {uniqueChainIds:h,supportedChains:T}},[f]),{balances:A,isLoading:C,error:y,refetchAll:P}=et({chainIds:N,address:r.user||void 0}),S={isLoading:s,error:u,campaigns:g,opportunities:f,balances:A,supportedChains:k,balancesLoading:C,balancesError:y,refetchBalances:P};return jsxRuntime.jsx(ct.Provider,{value:S,children:e})}function dt(){let e=jotai.useAtomValue(L),{opportunities:t,isLoading:n,error:r}=F();return {deals:t,dealsFormatted:t,isLoading:n,error:r,selectedDeal:e}}function ft({onSwitchToEarn:e}){let t=jotai.useSetAtom(le),n=jotai.useSetAtom(L),{dealsFormatted:r,isLoading:i,error:o}=dt(),a=c=>{n(c),e(),t();};return o?jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col items-center justify-center bg-background",children:[jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Error loading deals"}),jsxRuntime.jsxs(ui.Button,{onClick:()=>t(),variant:"default",className:"mt-2",children:[jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-4 h-4 mr-2"}),"Back"]})]}):i?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading deals..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col bg-transparent",children:[jsxRuntime.jsx("div",{className:"flex items-center justify-start p-3 flex-shrink-0",children:jsxRuntime.jsx("button",{onClick:()=>t(),className:"text-primary hover:text-primary/80 transition-colors",children:jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-5 h-5"})})}),jsxRuntime.jsx(ui.OpportunityList,{opportunities:Object.values(r).map(c=>c.opportunityItem),onOpportunityClick:c=>{let s=Object.values(r).find(u=>u.opportunityItem===c);s&&a(s);},groupBy:"partner",filterVariant:"navigation",className:"h-full"})]})}var ht={1:{address:"0x0000000000000000000000000000000000000000",name:"Ethereum",symbol:"ETH",decimals:18,logo:void 0,balance:"0",price:0,chainId:1}};function pe(){let e=w(),t=e.network,n=!!e.user,{balances:r,balancesLoading:i}=F(),[o,a]=jotai.useAtom(ue),c=jotai.useAtomValue(ne),s=t?r[t]:void 0;return react.useEffect(()=>{o&&t&&o.chainId!==t&&a(null);},[t,o,a]),react.useEffect(()=>{if(!(o&&t&&o.chainId===t)&&!(n&&i)){if(s&&s.length>0){let p=[...s].sort((l,m)=>{let b={...l.token,balance:l.amount,decimals:l.token.decimals},x={...m.token,balance:m.amount,decimals:m.token.decimals},g=parseFloat(utils.formatToken(l.amount,b))*(l.token.price||0);return parseFloat(utils.formatToken(m.amount,x))*(m.token.price||0)-g})[0];a({address:p.token.address,name:p.token.name,symbol:p.token.symbol,decimals:p.token.decimals,logo:p.token.logos?.[0],balance:p.amount,price:p.token.price??void 0,chainId:p.token.chain});}else if(!n&&t){let u=ht[t]||ht[1];a({...u,chainId:t});}}},[s,t,o,a,n,i]),react.useEffect(()=>{},[o]),react.useEffect(()=>{c>0&&a(null);},[c,a]),{selectedToken:o,setSelectedToken:a,currentChainBalances:s,isLoadingBalances:i}}function fe(e){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}function kt({onAssetSelect:e}){let t=jotai.useSetAtom(le),n=w(),{isLoadingBalances:r,setSelectedToken:i}=pe(),{balances:o}=F(),a=[];Object.entries(o).forEach(([s,u])=>{u.forEach(p=>{let l={address:p.token.address,name:p.token.name,symbol:p.token.symbol,decimals:p.token.decimals,balance:p.amount,price:p.token.price??void 0,chainId:p.token.chain,logo:p.token.logos?.[0]},m=chains.getChainById(Number(s));a.push({id:`${s}-${l.address}`,symbol:l.symbol,name:l.name,icon:l.logo?jsxRuntime.jsx("img",{src:l.logo,alt:l.symbol,className:"w-8 h-8 rounded-full"}):jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted flex items-center justify-center text-xs",children:l.symbol?.charAt(0)||"?"}),balance:utils.formatNumber(utils.formatToken(l.balance,l),5,false,false),balanceUSD:fe(parseFloat(utils.formatToken(l.balance,l))*(l.price||0)),chainId:String(s),chainName:m?.name||"Unknown",address:l.address,decimals:l.decimals});});});let c=async s=>{let u=Number(s.chainId);if(n.network!==u)try{await n.changeNetwork(u);}catch(b){console.error("Failed to switch network:",b);return}let m=o[u]?.find(b=>b.token.address===s.address);m&&(i({address:m.token.address,name:m.token.name,symbol:m.token.symbol,decimals:m.token.decimals,logo:m.token.logos?.[0],balance:m.amount,price:m.token.price??void 0,chainId:m.token.chain}),e?.(s.address||""),t());};return r?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading balances..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col bg-transparent text-foreground",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between p-3 flex-shrink-0",children:[jsxRuntime.jsx("button",{onClick:()=>t(),className:"text-primary hover:text-primary/80 transition-colors",children:jsxRuntime.jsx(lucideReact.ArrowLeft,{className:"w-5 h-5"})}),jsxRuntime.jsx("h3",{className:"text-lg font-medium",children:"Select Token"}),jsxRuntime.jsx("div",{className:"w-5 h-5"})," "]}),jsxRuntime.jsx(ui.AssetList,{assets:a,onAssetClick:c,groupByChain:true,showChainIcon:true,filterVariant:"navigation",className:"h-full"})]})}var On=classVarianceAuthority.cva("p-0",{variants:{padding:{none:"p-0",sm:"p-3",default:"p-4",md:"p-6",lg:"p-7"}},defaultVariants:{padding:"default"}});function ge({children:e,className:t,variant:n,padding:r,rounding:i,...o}){let{padding:a,rounding:c}=H(),s=On({padding:r??a}),u=i??c;return jsxRuntime.jsx(ui.Card,{className:oe(t,s),...o,variant:n,gradient:"white",rounded:u,children:e})}var xt={xxs:"h-4 text-xs",xs:"h-6 text-sm",sm:"h-8 text-2xl",md:"h-12 text-4xl",lg:"h-16 text-6xl"};function Re({light:e,dark:t,fallback:n="Turtle Club",className:r,size:i="lg"}){let[o,a]=react.useState(false),{theme:c}=H(),u=c==="dark"?t||e:e||t;return u&&!o?jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("img",{src:u,alt:n,className:ui.cn("object-contain",xt[i]),onError:()=>a(true),onLoad:()=>a(false)})}):jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("span",{className:ui.cn("font-bold text-primary",xt[i]),children:n})})}function vt(){let e=w(),t=de(),n=jotai.useAtomValue(L),r=jotai.useSetAtom(E);react.useEffect(()=>{r(i=>({...i,user:e.user||"",chain:e.network||1,distributorId:t,distributor_id:t,id:n?.id||""}));},[e.user,e.network,t,n?.id,r]);}function Ct(){let e=jotai.useAtomValue(ee);return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var St="https://api.turtle.xyz",Le="turtle_earn_widget_auth",Tt=()=>{let e=w(),[t,n]=react.useState({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null}),r=react.useRef(void 0),i=react.useRef(false),o=react.useRef(false),a=()=>{try{let l=localStorage.getItem(Le);if(l)return JSON.parse(l)}catch(l){console.error("Error reading stored auth:",l);}return null},c=l=>{try{localStorage.setItem(Le,JSON.stringify(l));}catch(m){console.error("Error storing auth:",m);}},s=()=>{try{localStorage.removeItem(Le);}catch(l){console.error("Error clearing stored auth:",l);}};react.useEffect(()=>{let l=e?.user;if(l&&!o.current&&!i.current){o.current=true;let m=a();if(m&&m.address.toLowerCase()===l.toLowerCase()){n({isAuthenticated:true,isLoading:false,error:null,user:m.user,tokens:m.tokens}),r.current=l;return}}if(l!==r.current&&l!==void 0&&!i.current){r.current=l,o.current=true;let m=a();m&&m.address.toLowerCase()===l.toLowerCase()?n({isAuthenticated:true,isLoading:false,error:null,user:m.user,tokens:m.tokens}):u(l);}else l===void 0&&r.current!==void 0&&(r.current=void 0,o.current=false,s(),n({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null}));},[e?.user]);let u=async l=>{if(!i.current){i.current=true,n(m=>({...m,isLoading:true,error:null}));try{let m={address:l,walletEcosystem:"evm",url:window.location.href},b=await fetch(`${St}/auth/get-wallet-signature-message`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)});if(!b.ok)throw new Error("Failed to get signature message");let{message:x,nonce:g}=await b.json();if(!e?.signMessage)throw new Error("Wallet adapter does not support message signing");let f=await e.signMessage(x),N={method:"wallet",walletInput:{address:l,ecosystem:"evm",signature:f,nonce:g}},k=await fetch(`${St}/auth/authenticate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(N)});if(!k.ok)throw new Error("Failed to authenticate");let A=await k.json();c({address:l,tokens:A.authTokens,user:A.user}),n({isAuthenticated:!0,isLoading:!1,error:null,user:A.user,tokens:A.authTokens});}catch(m){console.error("Authentication error:",m),n(b=>({...b,isLoading:false,error:m instanceof Error?m.message:"Authentication failed"}));}finally{i.current=false;}}};return {...t,logout:()=>{s(),n({isAuthenticated:false,isLoading:false,error:null,user:null,tokens:null});}}};function wt(){let[e,t]=react.useState(""),n=jotai.useSetAtom(ie),{campaigns:r,isLoading:i,error:o}=F();return o?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Error loading discover content"})}):i?jsxRuntime.jsx("div",{className:"w-full h-full flex items-center justify-center bg-background",children:jsxRuntime.jsx("p",{className:"text-muted-foreground",children:"Loading discover content..."})}):jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col min-h-0",children:[jsxRuntime.jsx("div",{className:"p-3 space-y-3 flex-shrink-0",children:jsxRuntime.jsx("h2",{className:"text-sm text-foreground font-medium",children:"Deposit directly into Turtle's boosted deals and liquidity campaign opportunities."})}),jsxRuntime.jsx("div",{children:r.map(a=>jsxRuntime.jsx(ui.CampaignItem,{value:a,onSelect:()=>n()},a.name))})]})}var{useUserCampaignPositions:At}=hooks.campaignsV2,Fe=["tac","katana"];function Nt(){let{user:e}=Y(),{data:t,isLoading:n,error:r}=hooks.usePartnerCampaigns({idFilter:Fe.join(",")}),i=react.useMemo(()=>t?Fe.reduce((k,A)=>{let C=t.find(y=>y.campaign.name.toLowerCase()===A);return C&&(k[A]=C,C.vaults.length===0&&console.warn(`\u26A0\uFE0F Campaign ${A} has no vaults from API`)),k},{}):{},[t]),{userPositions:o,userTotalTVL:a,isLoading:c,error:s}=At({campaignName:"tac",userAddress:e}),{userPositions:u,userTotalTVL:p,isLoading:l,error:m}=At({campaignName:"katana",userAddress:e}),b=react.useMemo(()=>({tac:{userPositions:o||[],userTotalTVL:a||0},katana:{userPositions:u||[],userTotalTVL:p||0}}),[o,a,u,p]),x=(a||0)+(p||0),g=react.useMemo(()=>Fe.reduce((k,A)=>(k[A]=[],k),{}),[]);return {campaigns:i,positions:b,totalTVL:x,incentives:g,isLoading:n||c||l,error:r||s||m}}var Et=[{id:"vault.id",header:"Position",accessorKey:"vault.id",cell:({row:e})=>jsxRuntime.jsx("div",{className:"flex justify-start gap-0.5",children:jsxRuntime.jsxs("a",{href:`https://app.turtle.club/campaigns/${e.original.vault.campaign}`,className:"flex max-w-[120px] items-center gap-[5px] text-foreground hover:text-primary transition-colors",target:"_blank",rel:"noopener noreferrer",children:[jsxRuntime.jsx("img",{src:e.original.vault.iconUrl,alt:e.original.vault.name,className:"size-5 shrink-0 rounded-full"}),jsxRuntime.jsx("span",{className:"truncate",children:e.original.vault.name})]})})},{id:"tvl",header:"TVL",accessorKey:"tvl",cell:({row:e})=>jsxRuntime.jsx("span",{className:"text-foreground",children:ce(e.original.userTVL??0,2)})}];var no=["katana"];function It(){let{user:e,openConnectionModal:t}=Y(),{positions:n,totalTVL:r,isLoading:i}=Nt(),o=react.useMemo(()=>no.flatMap(s=>n[s].userPositions).sort((s,u)=>u.userTVL-s.userTVL),[n]),a=()=>{t&&t();};return i||o.length===0?jsxRuntime.jsxs("div",{className:"sm:min-h-[690px] -mt-8 flex flex-col justify-center items-center gap-4 text-foreground",children:[jsxRuntime.jsx(ui.IconAnimation,{spinning:true,children:jsxRuntime.jsx(lucideReact.TurtleIcon,{className:"w-6 h-6 text-primary"})}),"Loading..."]}):jsxRuntime.jsx("div",{className:"sm:min-h-[690px] p-4",children:!i&&e===void 0?jsxRuntime.jsx(ui.Button,{variant:"default",border:"plain",onClick:a,children:"Connect wallet"}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"text-right text-sm mr-2",children:[jsxRuntime.jsx("span",{className:"text-foreground/60",children:"Your TVL: "}),jsxRuntime.jsx("span",{className:"text-foreground font-semibold",children:ce(r,2)})]}),jsxRuntime.jsx(ui.Separator,{className:"my-2"}),jsxRuntime.jsx(ui.DataTable,{columns:Et,data:o})]})})}function Dt(){let[e,t]=jotai.useAtom(L),n=w(),r=n.network,i=e?.opportunityItem?.chain?.chainId,o=!!(e&&r!==void 0&&i!==void 0&&i!==r&&chains.isChainSupported(i));return {selectedOpportunity:e,setSelectedOpportunity:t,chainId:i,needsChainSwitch:o,isCorrectChain:!!(e&&r!==void 0&&i!==void 0&&i===r),switchToOpportunityChain:async()=>{if(i&&o)try{await n.changeNetwork(i);}catch(l){throw console.error("Failed to switch network:",l),l}},getTokenAddress:()=>e?.tokenDetails?.tokenAddress,getTokenSymbol:()=>e?.tokenDetails?.tokenSymbol,getVaultId:()=>e?.id}}function Rt(){let e=jotai.useSetAtom(Ge);return {openTokenSelector:()=>{e();}}}function Ft(){let t=!!w().user,{chainId:n,needsChainSwitch:r,switchToOpportunityChain:i}=Dt(),[o,a]=jotai.useAtom(te),c=jotai.useAtomValue(ne),{selectedToken:s,currentChainBalances:u,isLoadingBalances:p}=pe(),{openTokenSelector:l}=Rt(),m=u?.map(y=>({icon:y.token.logos?.[0]?ui.iconUrlToImg(y.token.logos[0],y.token.symbol):null,symbol:y.token.symbol,address:y.token.address,balance:y.amount}))||[],b=s?{icon:s.logo?ui.iconUrlToImg(s.logo,s.symbol):null,symbol:s.symbol,address:s.address,balance:s.balance}:null;react.useEffect(()=>{a("");},[s,a]),react.useEffect(()=>{c>0&&a("");},[c,a]);let x=()=>{if(s){let y=s.balance==="0"?"0":s.balance,P=utils.formatToken(y,s),S=utils.formatNumber(P,5,false,false);a(S);}},g=s?utils.formatNumber(utils.formatToken(s.balance,s),5,false,false):"0",f=parseFloat(o)||0,N=s?parseFloat(utils.formatToken(s.balance,s)):0,k=f>N&&t,A=s&&o?k?"Insufficient balance":fe(parseFloat(o)*(s.price||0)):void 0,C=r&&n?chains.getChainById(n):null;return r&&C&&t?jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md text-foreground font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full p-4 border border-muted rounded-lg bg-muted/10",children:jsxRuntime.jsxs("p",{className:"text-sm text-muted-foreground text-center",children:["Please"," ",jsxRuntime.jsx("button",{onClick:i,className:"text-primary hover:text-primary/80 underline font-medium cursor-pointer transition-colors",children:"switch"})," ","to ",jsxRuntime.jsx("strong",{children:C.name})," to continue with this opportunity"]})})]}):p&&t?jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md text-foreground font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full p-4 border border-muted rounded-lg bg-muted/10",children:jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"Loading tokens..."})})]}):jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 items-start justify-start",children:[jsxRuntime.jsx("h3",{className:"text-md text-foreground font-medium",children:"Deposit"}),jsxRuntime.jsx("div",{className:"w-full relative",children:jsxRuntime.jsx(ui.SwapInput,{value:o,onChange:a,tokens:m,usdValue:k?void 0:A,balance:g,onMaxClick:x,isWalletConnected:t,className:`w-full [&_button]:w-32 [&_button]:min-w-32 p-6 ${k?"border-destructive/50":""}`,useCustomTokenSelector:true,selectedTokenData:b,onCustomTokenSelectorClick:l})})]})}function _t({earnRoute:e,userAddress:t,sendTransaction:n,onError:r=()=>{},onSuccess:i=()=>{}}){let[o,a]=react.useState({steps:[],currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false}),{network:c}=Y(),s=react.useMemo(()=>{if(!e)return null;let g=e.steps?.map(f=>`${f.id}-${f.to}-${f.data}`).join("|")||"";return {...e,_stepsKey:g}},[e?.success,e?.estimatedGas,e?.estimatedTime,e?.outputAmount,e?.steps?.map(g=>`${g.id}-${g.to}-${g.data}`).join("|")]);react.useEffect(()=>{if(s&&s.success&&s.steps.length>0){let g=s.steps.map((f,N)=>({id:f.id,label:f.title,description:f.description,txData:{to:f.to,data:f.data,value:f.value,gasLimit:f.gasLimit},completed:false,current:N===0}));a({steps:g,currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});}else a({steps:[],currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});},[s]);let u=react.useRef(o),p=react.useRef({userAddress:t,sendTransaction:n,onError:r,onSuccess:i});react.useEffect(()=>{u.current=o;},[o]),react.useEffect(()=>{p.current={userAddress:t,sendTransaction:n,onError:r,onSuccess:i};},[t,n,r,i]);let l=react.useCallback(async()=>{let g=u.current,{userAddress:f,sendTransaction:N,onError:k,onSuccess:A}=p.current;if(!f||!N||g.isExecuting)return;let C=g.steps[g.currentIndex];if(!(!C||C.completed)){a(y=>({...y,isExecuting:true,hasError:false,cancelled:false,error:void 0}));try{let y=await N({to:C.txData.to,data:C.txData.data,value:C.txData.value?BigInt(C.txData.value):void 0,chainId:c}),P=typeof y=="object"&&"hash"in y?y.hash:String(y);a(S=>{let d=[...S.steps];return d[S.currentIndex]={...d[S.currentIndex],txHash:P},{...S,steps:d}});try{typeof y=="object"&&"wait"in y&&await y.wait();}catch(S){console.warn("Could not wait for transaction confirmation, proceeding anyway:",S);}a(S=>{let d=[...S.steps];d[S.currentIndex]={...d[S.currentIndex],completed:!0,current:!1};let h=S.currentIndex+1,T=h>=d.length;T||(d[h]={...d[h],current:!0});let I=T;return I&&A&&A(),{...S,steps:d,currentIndex:T?S.currentIndex:h,isExecuting:!1,allCompleted:I}});}catch(y){let P=y instanceof Error?y.message:String(y),S=P.toLowerCase().includes("user rejected")||P.toLowerCase().includes("user denied")||P.toLowerCase().includes("user cancelled")||P.toLowerCase().includes("cancelled by user")||P.toLowerCase().includes("transaction rejected")||P.includes("4001");a(d=>({...d,isExecuting:false,hasError:!S,cancelled:S,error:S?"Transaction cancelled by user":y instanceof Error?y.message:"Transaction failed"})),k&&!S&&k(y instanceof Error?y:new Error("Transaction failed"));}}},[]),m=react.useCallback(()=>{if(s&&s.success&&s.steps.length>0){let g=s.steps.map((f,N)=>({id:f.id,label:f.title,description:f.description,txData:{to:f.to,data:f.data,value:f.value,gasLimit:f.gasLimit},completed:false,current:N===0}));a({steps:g,currentIndex:0,isExecuting:false,allCompleted:false,hasError:false,cancelled:false});}},[s]),b=o.steps[o.currentIndex]||null,x=!!(t&&o.steps.length>0&&!o.isExecuting&&!o.allCompleted&&!o.cancelled);return react.useEffect(()=>{if(o.steps.length<=1)return;let g=o.currentIndex-1,f=g>=0&&o.steps[g]?.completed,N=o.currentIndex<o.steps.length&&!o.steps[o.currentIndex]?.completed,k=o.currentIndex<o.steps.length;if(f&&N&&k&&!o.isExecuting&&!o.allCompleted&&!o.cancelled){let C=setTimeout(()=>{l();},1e3);return ()=>clearTimeout(C)}},[o.steps,o.currentIndex,o.isExecuting,o.allCompleted,o.cancelled,l]),{...o,currentStep:b,canExecute:x,executeCurrentTransaction:l,resetQueue:m,totalSteps:o.steps.length,completedSteps:o.steps.filter(g=>g.completed).length,progress:o.steps.length>0?o.steps.filter(g=>g.completed).length/o.steps.length*100:0}}function Bt(e){let t=e!==void 0&&!!e.user&&!!e.amount&&parseFloat(e.amount)>0,{data:n,isLoading:r,error:i}=hooks.useEarnRoute(t?{user:e.user,chain:e.chain||1,tokenIn:e.tokenIn,tokenOut:e.tokenOut,amount:e.amount,slippage:e.slippage||.1,id:e.id||"",distributor_id:e.distributor_id||"",referral_code:e.referral_code||""}:void 0);return {data:n?{success:true,steps:n.steps?.map((a,c)=>({id:`step-${c}`,type:a.kind==="approve"?"approval":"deposit",title:a.kind==="approve"?"Approve Token":"Execute Transaction",description:a.kind==="approve"&&"token"in a?`Approve ${a.token.symbol}`:"Execute routing transaction",to:a.tx.to,data:a.tx.data,value:a.tx.value,gasLimit:a.tx.gas.toString()}))||[],estimatedGas:"0",estimatedTime:void 0,outputAmount:n.amount_out,metadata:void 0}:null,isLoading:r,error:i}}function ve(){let e=jotai.useAtomValue(qe),t=jotai.useAtomValue(L),n=de(),r=Bt(e&&{...e,distributor_id:n,id:e.id||""}),i=e!==void 0&&!!e.user&&!!e.amount&&parseFloat(e.amount)>0,{data:o}=hooks.useEarnRoute(i?{user:e.user,chain:e.chain||1,tokenIn:e.tokenIn,tokenOut:e.tokenOut,amount:e.amount,slippage:e.slippage||.1,distributor_id:n||"",referral_code:e.referral_code||"",id:e.id||""}:void 0),a=ho(o,t);return {...r,isReady:!!e,hasRequiredParams:!!(e?.user&&e?.tokenIn&&e?.tokenOut&&e?.amount),routeDetails:a}}function ho(e,t){if(!e?.steps)return [];let n=(o,a)=>({in:{icon:o.logos[0],symbol:o.symbol},out:null,amount:Ye(BigInt(a),o.decimals),type:"approve"}),r=(o,a,c)=>({in:{icon:a.logos[0],symbol:a.symbol},out:{icon:c.logos[0]||t?.iconToken||t?.iconDeal||void 0,symbol:c.symbol},amount:void 0,type:o}),i=[];return e.steps.forEach(o=>{if(o.kind==="approve"&&o.token){let a=n(o.token,o.amount);i.push(a);}o.kind==="enso"&&o.substeps&&o.substeps.forEach(a=>{let c=a.from[0],s=a.to[0],u=r(a.kind,c,s);i.push(u);});}),i}function Ut(){let{data:e,error:t,isLoading:n}=ve();return {fetchedRoute:e??null,routeError:t,isLoadingRoute:n}}function Ht({userAddress:e,openConnectionModal:t,fetchedRoute:n,routeError:r,isLoadingRoute:i,canExecute:o,isExecuting:a,hasError:c,cancelled:s,error:u,executeCurrentTransaction:p,totalSteps:l,completedSteps:m,showingTransactionStatus:b,hasInsufficientBalance:x,className:g}){let N=!!w().user,{data:k,isLoading:A}=hooks.useGeocheck(),C=async()=>{o&&await p();};return b?null:A?jsxRuntime.jsx(ui.Button,{disabled:true,className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Checking availability..."}):k&&!k.canInteract?jsxRuntime.jsxs(ui.Tooltip,{children:[jsxRuntime.jsx(ui.TooltipTrigger,{className:"w-full cursor-default space-y-2",children:jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Geo Restricted"})}),jsxRuntime.jsx(ui.TooltipContent,{side:"top",sideOffset:6,className:"text-xs",children:"Due to geographical restrictions you can't use this vault."})]}):!e||!N?jsxRuntime.jsx(ui.Button,{onClick:()=>t(),className:"cursor-pointer w-full border-foreground/60 border",variant:"green",border:"interactive",size:"lg",children:"Connect Wallet"}):i?jsxRuntime.jsx(ui.Button,{disabled:true,className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Loading route..."}):r?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Route Error"}):!n||!n.steps||n.steps.length===0?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Enter amount to continue"}):x?jsxRuntime.jsx(ui.Button,{disabled:true,variant:"default",className:`w-full border-foreground/60 border ${g||""}`,size:"lg",children:"Insufficient Balance"}):jsxRuntime.jsxs(ui.Button,{variant:"green",border:"interactive",onClick:C,disabled:!o||a,size:"lg",className:"cursor-pointer w-full border border-foreground/60",children:[a&&"Executing...",c&&"Retry Transaction",s&&"Try Again",!a&&!c&&!s&&(l>1?`Confirm Transaction (${m}/${l})`:"Confirm Transaction")]})}function Jt({steps:e,currentStep:t,allCompleted:n,cancelled:r,estimatedTime:i,tokenSymbol:o,amount:a,resetQueue:c}){let[,s]=jotai.useAtom(ne),u=jotai.useSetAtom(te),p=e.filter(x=>x.completed&&x.txHash).pop(),l=t?.txHash?t:null,m=n?p?.txHash:l?.txHash||p?.txHash,b=react.useMemo(()=>({title:r?"Transaction Cancelled":n?"Transaction Completed!":"Processing Transaction",description:r?"Transaction was cancelled by user":n?"Your deposit has been successfully processed.":"Please wait while your transaction is being confirmed...",txHash:m,explorerUrl:"https://etherscan.io",estimatedTime:void 0,amount:`${a?utils.formatNumber(a,5,false,false):"0"}`,token:o,protocol:"Turtle Protocol",completed:n,cancelled:r,onViewDetails:void 0,onClose:()=>{c(),u(""),s(0);},steps:e.map(x=>({label:x.label,completed:x.completed,current:x.current,txHash:x.txHash}))}),[e,t,n,r,i,o,a,c]);return jsxRuntime.jsx("div",{className:"h-full overflow-hidden",children:jsxRuntime.jsx(ui.TxStatus,{...b,className:"h-full bg-background border-border text-foreground"})})}function Xt({amountToDeposit:e,depositSymbol:t,amountToReceive:n,receiveSymbol:r,receiveDecimals:i,tokenPrice:o,defaultOpen:a=false}){let[c,s]=jotai.useAtom(Ze),u=react.useMemo(()=>{let p=e?utils.formatNumber(e,6,false,false):"0",l=n?utils.formatToken(n,{decimals:i},true,false):"0";return {deposit:e?`${p} ${t||"ETH"}`:"0 ETH",receive:n?`${l} ${r||"ETH"}`:"0 ETH",equivalentInUsd:e&&o?(parseFloat(e)*o).toFixed(2):"0.00",defaultOpen:a,slippage:c,setSlippage:s}},[e,t,n,r,o,a]);return jsxRuntime.jsx(ui.SwapDetails,{details:u})}function Oo(e){return e?`${e.slice(0,10)}...${e.slice(-4)}`:"Connect Wallet"}function Gt({userAddress:e,disconnect:t}){let[n,r]=react.useState(false);return jsxRuntime.jsxs("button",{type:"button",onClick:()=>t(),onMouseEnter:()=>{r(true);},onMouseLeave:()=>{r(false);},className:"relative rounded-full bg-background px-3 py-1.5 border border-muted-foreground/60 cursor-pointer transition-colors hover:border-primary min-w-[140px] h-9 overflow-hidden",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 transition-opacity duration-150",style:{opacity:n?0:1},children:[jsxRuntime.jsx(lucideReact.Wallet2Icon,{className:"w-4 h-4"}),jsxRuntime.jsx("span",{className:"text-foreground font-medium text-xs",children:Oo(e)})]}),jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center gap-2 transition-opacity duration-150",style:{opacity:n?1:0},children:jsxRuntime.jsx("span",{className:"text-primary font-medium text-xs",children:"Log out"})})]})}function Kt({selectedChainId:e=1,onChainChange:t}){let{supportedChains:n,isLoading:r}=F(),i=react.useMemo(()=>{let o=n.find(a=>a.chainId===e);if(o)return o;if(e){let a=chains.getChainById(e),c=chains.chainLogo(e);if(a)return {value:a.name.toLowerCase().replace(/\s+/g,"-"),symbol:a.nativeCurrency.symbol,name:a.name,icon:c,chainId:e}}return n[0]},[e,n]);return r?jsxRuntime.jsxs("div",{className:"flex items-center justify-between rounded-full rounded-l-none bg-background py-2 pr-4 h-9 animate-pulse",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 -translate-x-2.5",children:jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"})}),jsxRuntime.jsx("div",{className:"flex items-center gap-3",children:jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})})]}):!i||n.length===0?null:jsxRuntime.jsxs(ui.DropdownMenu,{children:[jsxRuntime.jsx(ui.DropdownMenuTrigger,{className:"border border-muted-foreground/60",src:i.icon,children:i.name}),jsxRuntime.jsx(ui.DropdownMenuContent,{children:n.map(o=>jsxRuntime.jsxs(ui.DropdownMenuItem,{onClick:()=>t?.(o.chainId),className:"hover:bg-accent/70 hover:text-foreground",children:[jsxRuntime.jsx("img",{src:o.icon,alt:o.name,className:"size-6 rounded-full -ml-1 text-foreground"}),o.name]},o.value))})]})}function Be(){let e=w(),t=e.user,n=!!e.user,r=e.network,i=async o=>{try{await e.changeNetwork(o);}catch(a){console.error("Failed to change network:",a);}};return jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-2 text-foreground",children:[n&&t&&jsxRuntime.jsx(Gt,{userAddress:t,disconnect:e.disconnect}),n&&jsxRuntime.jsx(Kt,{selectedChainId:r,onChainChange:i})]})}function Qt(){return jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4 flex-1 min-h-0 h-full overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0",children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-2",children:[jsxRuntime.jsx("div",{className:"rounded-full bg-secondary px-3 py-1.5 border border-border min-w-[140px] h-9",children:jsxRuntime.jsx("div",{className:"animate-pulse",children:jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})})}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between rounded-full rounded-l-none bg-card py-2 pr-4 h-9 animate-pulse",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 -translate-x-2.5",children:jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"})}),jsxRuntime.jsx("div",{className:"flex items-center gap-3",children:jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})})]})]})}),jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsxs("div",{className:"rounded-lg bg-secondary p-4 space-y-3 animate-pulse",children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("div",{className:"h-8 w-32 bg-muted rounded"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"w-8 h-8 rounded-full bg-muted"}),jsxRuntime.jsx("div",{className:"h-6 w-16 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between text-sm",children:[jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"p-6 border border-border rounded-lg space-y-4 animate-pulse",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsx("div",{className:"w-10 h-10 rounded-full bg-muted"}),jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsx("div",{className:"h-5 w-32 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})]})]}),jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("div",{className:"h-4 w-16 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-20 bg-muted rounded"})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("div",{className:"h-4 w-16 bg-muted rounded"}),jsxRuntime.jsx("div",{className:"h-4 w-24 bg-muted rounded"})]})]}),jsxRuntime.jsx("div",{className:"pt-2",children:jsxRuntime.jsx("div",{className:"h-10 w-full bg-muted rounded-lg"})})]})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0"}),jsxRuntime.jsx("div",{className:"sticky bottom-0 pb-2 w-full",children:jsxRuntime.jsx("div",{className:"h-12 w-full bg-muted rounded-lg animate-pulse"})})]})}function qt(){let e=jotai.useAtomValue(ue),t=jotai.useAtomValue(te),n=jotai.useAtomValue(L),r=jotai.useSetAtom(ie),i=w(),{sendTransaction:o,openConnectionModal:a,user:c}=i,{isLoading:s,balancesLoading:u}=F(),{fetchedRoute:p,routeError:l,isLoadingRoute:m}=Ut(),{routeDetails:b}=ve(),{steps:x,currentStep:g,canExecute:f,isExecuting:N,allCompleted:k,hasError:A,cancelled:C,error:y,executeCurrentTransaction:P,resetQueue:S,totalSteps:d,completedSteps:h}=_t({earnRoute:p,userAddress:c,sendTransaction:o}),T=react.useMemo(()=>N||k||C||x.length>0&&h>0,[N,k,C,x.length,h]),I=!!i.user,D=e?parseFloat(utils.formatToken(e.balance,e)):0,K=react.useMemo(()=>(parseFloat(t)||0)>D&&I,[t,e,I]),W=react.useMemo(()=>t&&parseFloat(t)>0,[t]),en=react.useMemo(()=>({name:n?.opportunityItem.name??"N/A",vaultSymbol:n?.tokenDetails?.tokenSymbol??"N/A",icon:n?.opportunityItem.icon??"N/A",totalApr:n?.opportunityItem.apr??"N/A",aprBreakdown:n?.opportunityItem.aprBreakdown.map(q=>({name:q.name,iconUrl:q.iconUrl,apr:q.apr?.toString()??"0",description:q.description,boost:q.boost}))??[],tvlUsd:n?.opportunityItem.tvl??"N/A",depositDetails:{symbol:e?.symbol??"N/A",price:e?.price??0,depositAmount:parseFloat(t||"0")??0,apr:parseFloat(n?.opportunityItem.apr??"0")/100},type:"Turtle Campaign"}),[n,t,e]);return s||u?jsxRuntime.jsx(Qt,{}):jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4 flex-1 min-h-0 h-full overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0",children:jsxRuntime.jsx(Be,{})}),jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsx(Ft,{}),jsxRuntime.jsx(ui.OpportunitySection,{className:"p-6",value:en,opportunitySelector:"old",onOpportunityClick:()=>r(),hideDisclaimer:true})]}),jsxRuntime.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[W&&p&&!m&&jsxRuntime.jsxs("div",{className:"flex-shrink-0 space-y-2",children:[jsxRuntime.jsx(Xt,{amountToDeposit:t,depositSymbol:e?.symbol||"",amountToReceive:p?.outputAmount||"0",receiveSymbol:n?.tokenDetails?.tokenSymbol||"",receiveDecimals:n?.tokenDetails?.tokenDecimals||0,tokenPrice:e?.price||0,defaultOpen:true}),b&&b.length>0&&jsxRuntime.jsx(ui.RouteDetails,{value:{steps:b}})]}),T&&jsxRuntime.jsx(Jt,{steps:x,currentStep:g,allCompleted:k,cancelled:C,estimatedTime:p?.estimatedTime||0,tokenSymbol:e?.symbol||"",amount:t,resetQueue:S})]}),jsxRuntime.jsx("div",{className:"sticky bottom-0 pb-2 w-full",children:jsxRuntime.jsx(Ht,{userAddress:c||"",openConnectionModal:a,fetchedRoute:p,routeError:l,isLoadingRoute:m,canExecute:f&&!K,isExecuting:N,hasError:A,cancelled:C,error:y,executeCurrentTransaction:P,totalSteps:d,completedSteps:h,showingTransactionStatus:T,hasInsufficientBalance:K,className:"w-full"})})]})}function qo({config:e}){vt();let{isAuthenticated:t}=Tt(),[n,r]=react.useState("earn"),i=react.useMemo(()=>[...t?[{value:"positions",label:"Your Positions"}]:[],{value:"earn",label:"Earn"},{value:"discover",label:"Discover"}],[t]),o=jotai.useAtomValue(j),a=jotai.useSetAtom(j),{light:c,dark:s,fallback:u}=Ct(),{showNavigation:p}=H();return jsxRuntime.jsx(ze,{config:e,children:jsxRuntime.jsx(ut,{children:jsxRuntime.jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[p&&jsxRuntime.jsx(ui.SegmentControl,{cursorPointer:true,variant:"segment",value:n,onChange:l=>{r(l),a("none");},items:i,className:"!bg-background"}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:o!=="none"?jsxRuntime.jsxs(ge,{variant:"border",className:"w-full h-full min-h-0 flex flex-col overflow-hidden",children:[o==="deals"&&jsxRuntime.jsx(ft,{onSwitchToEarn:()=>r("earn")}),o==="assets"&&jsxRuntime.jsx(kt,{})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs(ge,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:[jsxRuntime.jsx("div",{className:"flex-shrink-0 py-2",children:jsxRuntime.jsx(Re,{light:c,dark:s,fallback:u,size:"xs"})}),jsxRuntime.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden",children:[n==="positions"&&jsxRuntime.jsx(It,{}),n==="earn"&&jsxRuntime.jsx(qt,{}),n==="discover"&&jsxRuntime.jsx(wt,{})]})]})})})]})})})})}function Zo({adapter:e,config:t,distributorId:n}){return jsxRuntime.jsx(Ne,{adapter:e,distributorId:n,children:jsxRuntime.jsx(qo,{config:t})})}
|
|
2
|
+
exports.AdapterProvider=Ne;exports.EarnWidget=Zo;exports.defaultWidgetStyleConfig=Ae;exports.useAdapter=w;exports.useNetworkMethods=mn;exports.useTransactionMethods=dn;exports.useWalletConnection=Y;//# sourceMappingURL=index.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|