@turtleclub/earn-widget 0.4.0-beta.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/styles.css +3 -0
- package/package.json +8 -8
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var clsx=require('clsx'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),ui=require('@turtleclub/ui'),classVarianceAuthority=require('class-variance-authority'),hooks=require('@turtleclub/hooks'),jotai=require('jotai'),lucideReact=require('lucide-react'),utils=require('@turtleclub/utils'),viem=require('viem'),chains=require('viem/chains');function q(...e){return clsx.clsx(e)}var Pe=react.createContext(null);function De({config:e,children:t}){return jsxRuntime.jsx(Pe.Provider,{value:e,children:t})}function M(){let e=react.useContext(Pe);if(!e)throw new Error("useWidgetConfig must be used within WidgetConfigProvider");return e}function X(e){return `rgb(from ${e} calc(255 - r) calc(255 - g) calc(255 - b))`}function Gt(e,t=10){return `color-mix(in srgb, ${e} ${100-t}%, black)`}function _e(e,t){let r=t==="dark",o={"--color-brand-black":r?e.background_dark:X(e.background_dark),"--color-brand-white":r?e.foreground_dark:X(e.foreground_dark),"--color-brand-green":r?e.primary_dark:Gt(e.primary_dark)};return (e.card!==void 0||e.card_dark!==void 0)&&(o["--color-surface-primary"]=r?e.card_dark??e.card??e.background_dark:X(e.card_dark??e.background_dark)),(e.muted_foreground!==void 0||e.muted_foreground_dark!==void 0)&&(o["--muted-foreground"]=r?e.muted_foreground_dark??e.muted_foreground??e.foreground_dark:X(e.muted_foreground_dark??e.muted_foreground_dark??e.foreground_dark)),o}var Le={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"},Fe="dark",Me="Montserrat, sans-serif",Ue="DM Sans, sans-serif";function A(){let e=M(),t=e?.theme??Fe,r=e?.fontFamily??Me,o=e?.fontSecondary??Ue,n=e?.widgetWidth??"default",i=e?.customWidth??"100%",u=e?.showNavigation??true,s=e?.padding??"default",a=e?.rounding??"default",l=e?.styles??Le,c=_e(l,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:c,fontPrimary:r,fontSecondary:o,widgetWidth:n,customWidth:i,showNavigation:u,padding:s,rounding:a,config:e,widgetStyles:l}}var Be={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 Qe({light:e,dark:t,fallback:r="Turtle Club",className:o,size:n="lg"}){let[i,u]=react.useState(false),{theme:s}=A(),l=s==="dark"?t||e:e||t;return l&&!i?jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",o),children:jsxRuntime.jsx("img",{src:l,alt:r,className:ui.cn("object-contain",Be[n]),onError:()=>u(true),onLoad:()=>u(false)})}):jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",o),children:jsxRuntime.jsx("span",{className:ui.cn("font-bold text-primary",Be[n]),children:r})})}function ze(){let e=M();return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var Kt=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 ue({children:e,className:t,variant:r,padding:o,rounding:n,showLogo:i=true,logoSize:u="xs",...s}){let{padding:a}=A(),{light:l,dark:m,fallback:c}=ze(),d=Kt({padding:o??a});return jsxRuntime.jsxs(ui.Card,{className:q(t,d),...s,variant:r,gradient:"white",children:[i&&jsxRuntime.jsx("div",{className:"flex-shrink-0 py-2",children:jsxRuntime.jsx(Qe,{light:l,dark:m,fallback:c,size:u})}),e]})}var Ve=react.createContext(null),Ge=react.createContext(""),Xe=({adapter:e,distributorId:t,children:r})=>jsxRuntime.jsx(Ve.Provider,{value:e,children:jsxRuntime.jsx(Ge.Provider,{value:t,children:r})}),W=()=>{let e=react.useContext(Ve);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},U=()=>react.useContext(Ge);function Ze({children:e}){let t=M(),{theme:r,coreTokenCSS:o,fontPrimary:n,fontSecondary:i,widgetWidth:u}=A();return jsxRuntime.jsx("div",{className:q("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:{...o,"--font-primary":n,"--font-secondary":i,fontFamily:n,backgroundColor:"transparent",maxHeight:"90vh"},children:jsxRuntime.jsx("div",{className:q("flex flex-col gap-2 h-full overflow-hidden",u==="full"?"w-full items-center":u==="custom"?"items-stretch":"items-center"),style:{...u==="custom"&&t.customWidth?{width:t.customWidth}:u==="default"?{width:"620px"}:{}},children:jsxRuntime.jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:e})})})}var R=()=>{let e=W(),t=react.useRef(void 0),r=react.useRef(false),{data:o,isLoading:n,refetch:i}=hooks.useCheckMembership({params:{address:e.user||"",walletEcosystem:"evm"},enabled:!!e.user}),{mutateAsync:u,isPending:s,error:a}=hooks.useCreateMembershipAgreement(),{mutateAsync:l,isPending:m,error:c}=hooks.useCreateMembership();react.useEffect(()=>{let k=e.user;if(!k){t.current!==void 0&&(t.current=void 0);return}k!==t.current&&(t.current=k,d(k));},[e.user]);let d=async k=>{if(!r.current){r.current=true;try{let{data:w}=await i();if(w?.isMember){console.log("[useWidgetAuth] User is already a member");return}console.log("[useWidgetAuth] User is not a member, starting membership flow..."),console.log("[useWidgetAuth] Creating membership agreement...");let S=await u({address:k,walletEcosystem:"evm",url:window.location.href,chainId:String(e.network||1)});console.log("[useWidgetAuth] Requesting signature from wallet...");let H=await e.signMessage(S.message);console.log("[useWidgetAuth] Creating membership with signature...");let E=await l({address:k,walletEcosystem:"evm",signature:H,nonce:S.nonce});E.isMember?console.log("[useWidgetAuth] Membership created successfully!"):console.error("[useWidgetAuth] Failed to create membership:",E.error);}catch(w){console.error("[useWidgetAuth] Membership flow error:",w);}finally{r.current=false;}}},p=n||s||m,b=a?.message||c?.message||null;return {address:e.user,isConnected:!!e.user,isMember:o?.isMember,currentChain:e.network,connect:e.openConnectionModal,disconnect:e.disconnect,changeNetwork:e.changeNetwork,isLoading:p,error:b}};function Ke(e){let[t,r]=react.useState(e),o=react.useCallback(n=>{r(n);},[]);return {currentTab:t,setTab:o}}var ur=jotai.atom({id:"none"});function y(){let[e,t]=jotai.useAtom(ur),r=react.useCallback((n,i)=>{t({id:n,data:i});},[t]),o=react.useCallback(()=>{t({id:"none"});},[t]);return {currentOverlay:e.id,overlayData:e.data,isOverlayOpen:e.id!=="none",openOverlay:r,closeOverlay:o}}function de({tabs:e,overlays:t,defaultTab:r}){let {showNavigation:o}=A(),{currentTab:n}=Ke(r),{currentOverlay:u,overlayData:s}=y();react.useMemo(()=>Object.entries(e).filter(([p,b])=>b.visible!==false).map(([p,b])=>({value:p,label:b.label})),[e]);let m=react.useMemo(()=>e[n].component,[n,e]),c=react.useMemo(()=>u==="none"?null:t[u].component,[u,t]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o&&false,jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:jsxRuntime.jsx(ue,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:c?jsxRuntime.jsx(c,{data:s}):jsxRuntime.jsx(m,{})})})})]})}function Y({onBack:e,children:t,className:r}){let{closeOverlay:o}=y();return jsxRuntime.jsxs("div",{className:`flex flex-col h-full ${r||""}`,children:[jsxRuntime.jsx("div",{className:"flex items-center gap-2 pb-3",children:jsxRuntime.jsx(ui.Button,{variant:"green",border:"interactive",size:"icon",onClick:e??o,className:"h-8 w-8 shrink-0","aria-label":"Go back",children:jsxRuntime.jsx(lucideReact.ChevronLeft,{className:"h-5 w-5"})})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-auto pt-4",children:t})]})}var J=e=>e.filter(t=>t.rewardType!=="points").reduce((t,r)=>t+(r.yield??0),0),et=e=>({totalYield:react.useMemo(()=>J(e),[e])});function ee({incentives:e,isPill:t,className:r}){let{totalYield:o}=et(e),n=react.useMemo(()=>e.filter(i=>i.rewardType!=="points"&&i.yield!==null&&i.yield!==void 0).sort((i,u)=>u.yield-i.yield),[e]);return jsxRuntime.jsx(ui.TurtleTooltip,{trigger:jsxRuntime.jsxs("div",{className:ui.cn("group flex items-center gap-1",r,t&&"hover:bg-neutral-alpha-5 border-border bg-neutral-alpha-2 hover:border-gradient-white rounded-full border px-3 py-1.5 text-xs"),children:[utils.formatNumber(o,1,false,false),"%"," ",jsxRuntime.jsx(lucideReact.InfoIcon,{className:"text-primary/70 group-hover:text-primary size-2.5"})]}),content:jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"text-sm",children:"APR Breakdown"}),jsxRuntime.jsx("div",{children:n.map(i=>jsxRuntime.jsxs("div",{className:"my-1 flex justify-between gap-2 text-xs",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[i.iconUrl&&jsxRuntime.jsx("img",{src:i.iconUrl,alt:i.name||i.id,className:"size-4 rounded-full",loading:"lazy"}),jsxRuntime.jsx("div",{children:i.name})]}),jsxRuntime.jsxs("div",{children:[utils.formatNumber(i.yield,1,false,false),"%"]})]},i.id))}),jsxRuntime.jsxs("div",{className:"text-primary flex justify-between gap-2 text-sm",children:[jsxRuntime.jsx("span",{children:"Total"}),jsxRuntime.jsxs("span",{children:[utils.formatNumber(o,1,false,false),"%"]})]})]}),side:"bottom",contentClassName:"p-5 backdrop-blur-xl"})}function rt({chain:e,triggerClassName:t}){let r=utils.getNetworkById(e.slug);return jsxRuntime.jsx("div",{className:ui.cn("bg-foreground -mr-1 flex size-5 items-center justify-center overflow-hidden rounded-full ring-1 ring-white last:mr-0 lg:-mr-4 lg:size-6",utils.getNetworkBackgroundColor(r),t),children:jsxRuntime.jsx("img",{src:e.logoUrl,className:"size-5 rounded-full object-contain lg:size-6",alt:e.name})})}var pe=jotai.atom(null),fe=jotai.atom(null),ge=jotai.atom(.001),be=jotai.atom(null),nt=jotai.atom(e=>{let t=e(pe),r=e(be),o=e(fe),n=e(ge),i=!!(o&&Number.parseFloat(o)>0),u=!!t&&!!r&&i&&!!n,s=u?{chain:Number(t?.receiptToken?.chain.chainId)??1,token_in:r?.address??"",token_out:t?.receiptToken?.address??"",amount:viem.parseUnits(o??"0",r?.decimals??18).toString(),slippage:n}:void 0;return {opportunity:t,token:r,amount:o,options:s,isValid:u}});function C(){let[e,t]=jotai.useAtom(pe),[r,o]=jotai.useAtom(be),[n,i]=jotai.useAtom(fe),[u,s]=jotai.useAtom(ge),a=jotai.useAtomValue(nt),l=react.useCallback(()=>{t(null),o(null),i(null),s(.001);},[t,o,i]);return react.useEffect(()=>{i(""),s(.001);},[r]),{opportunity:e,token:r,amount:n,slippage:u,isValid:a.isValid,options:a.options,selectOpportunity:t,selectToken:o,setAmount:i,setSlippage:s,reset:l}}function re({opportunities:e}){let{changeNetwork:t,network:r}=W(),{selectOpportunity:o,selectToken:n}=C(),{closeOverlay:i}=y();return jsxRuntime.jsx(ui.DataTable,{columns:[{accessorKey:"name",header:()=>jsxRuntime.jsx("div",{children:"Opportunity"}),cell:({row:a})=>jsxRuntime.jsxs("div",{className:"flex items-center gap-2 px-1",children:[jsxRuntime.jsx(ui.APIStatus,{warning:false}),jsxRuntime.jsx("img",{src:a.original.token.logoUrl,className:"size-6 rounded-full",loading:"lazy"}),a.original.name||a.original.token.name]}),enableSorting:true},{accessorKey:"chain",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"Chain"}),cell:({row:a})=>jsxRuntime.jsx(rt,{chain:a.original.token.chain})},{id:"organization",accessorFn:a=>a.products.length?a.products[0].organization.name:"-",header:()=>jsxRuntime.jsx("div",{children:"Partner"}),cell:({row:a})=>a.original.products.length?jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("img",{src:a.original.products[0].organization.iconUrl||"",className:"size-6 rounded-full",loading:"lazy"}),a.original.products[0].organization.name]}):"-",enableSorting:true},{accessorKey:"tvl",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"TVL"}),cell:({row:a})=>jsxRuntime.jsx("div",{className:"text-end",children:utils.formatCurrency(a.original.tvl,0,true)}),enableSorting:true},{accessorKey:"totalYield",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"Estimated APR"}),cell:({row:a})=>jsxRuntime.jsx("div",{className:"flex flex-row-reverse",children:jsxRuntime.jsx(ee,{incentives:a.original.incentives})}),enableSorting:true,sortingFn:(a,l)=>{let m=J(a.original.incentives),c=J(l.original.incentives);return m-c}}],onRowClick:a=>{o(a);let l=Number(a.token.chain.chainId);l!==r&&(t(l),n(null)),i();},data:e,enableSearch:true,grid:{displayAsGrid:true,headerSlot:"name",rightSlot:"totalYield",excludeColumns:[],className:"grid-cols-1 gap-2.5"}})}function at(){let e=U(),{data:t,isLoading:r,error:o}=hooks.useWidgetOpportunities(e);return r?jsxRuntime.jsx("div",{children:"Loading..."}):o?jsxRuntime.jsxs("div",{children:["Error: ",o.message]}):t===void 0?jsxRuntime.jsx("div",{children:"No data"}):t.opportunities&&t.opportunities.length===0?jsxRuntime.jsx("div",{children:"No opportunities"}):jsxRuntime.jsx(Y,{children:jsxRuntime.jsx(re,{opportunities:t.opportunities||[]})})}var ut=()=>{let{openOverlay:e}=y();return jsxRuntime.jsx("button",{onClick:()=>{e("balances"),console.log("Positions Content Click");},children:"Positions Content Click"})};var lt=()=>jsxRuntime.jsx("div",{children:"Discover Content"});function ye({steps:e,currentStep:t,allCompleted:r,cancelled:o,tokenSymbol:n,amount:i,resetQueue:u,resetForm:s}){let a=e.filter(d=>d.status==="completed"&&d.txHash).pop(),l=t?.txHash?t:null,m=r?a?.txHash:l?.txHash||a?.txHash,c=react.useMemo(()=>({title:o?"Transaction Cancelled":r?"Transaction Completed!":"Processing Transaction",description:o?"Transaction was cancelled by user":r?"Your deposit has been successfully processed.":"Please wait while your transaction is being confirmed...",txHash:m,explorerUrl:"https://etherscan.io",estimatedTime:void 0,amount:`${i?utils.formatNumber(i,5,false,false):"0"}`,token:n,protocol:"Turtle Protocol",completed:r,cancelled:o,onViewDetails:void 0,onClose:()=>{u(),s();},steps:e.map(d=>({label:d.label,completed:d.status==="completed",current:d.status==="executing",txHash:d.txHash}))}),[e,r,o,n,i,u,s,m]);return jsxRuntime.jsx("div",{className:"h-full overflow-hidden",children:jsxRuntime.jsx(ui.TxStatus,{...c,className:"bg-background border-border text-foreground h-full"})})}function dt(e){return e.kind==="approve"&&e.token?`Approve ${e.token.symbol}`:e.kind==="enso"?"Execute Deposit":`Execute ${e.kind}`}function mt(e,t){return e.kind==="approve"&&e.token?`Allow contract to spend ${e.token.symbol}`:`Transaction step ${t+1}`}function pt(e){let t=e instanceof Error?e.message:String(e);return ["user rejected","user denied","user cancelled","cancelled by user","transaction rejected","4001"].some(o=>t.toLowerCase().includes(o.toLowerCase()))}function ft(e){if(e.steps.length<=1||e.queueStatus!=="idle")return false;let t=e.steps[e.currentIndex-1],r=e.steps[e.currentIndex];return e.currentIndex>0&&e.currentIndex<e.steps.length&&t?.status==="completed"&&r?.status==="pending"}var Br=1e3;function yt(e,t){return e.tx?{id:t,label:dt(e),description:mt(e,t),txData:e.tx,status:"pending"}:null}function Qr(e,t){switch(t.type){case "INITIALIZE_QUEUE":return {steps:t.steps,currentIndex:0,queueStatus:"idle",lastError:void 0};case "START_EXECUTION":return {...e,steps:e.steps.map((r,o)=>o===t.index?{...r,status:"executing"}:r),queueStatus:"executing",lastError:void 0};case "COMPLETE_STEP":{let r=e.steps.map((i,u)=>u===t.index?{...i,status:"completed",txHash:t.txHash}:i),o=t.index+1,n=o>=r.length;return {...e,steps:r,currentIndex:n?e.currentIndex:o,queueStatus:n?"completed":"idle"}}case "FAIL_STEP":return {...e,steps:e.steps.map((r,o)=>o===t.index?{...r,status:"failed",error:t.error}:r),queueStatus:t.isCancellation?"cancelled":"error",lastError:t.error};case "RESET_QUEUE":return {steps:t.steps,currentIndex:0,queueStatus:"idle",lastError:void 0};default:return e}}function ve({earnRoute:e,userAddress:t,chainId:r,sendTransaction:o,onError:n=()=>{},onSuccess:i=()=>{}}){let u={steps:[],currentIndex:0,queueStatus:"idle"},[s,a]=react.useReducer(Qr,u);react.useEffect(()=>{if(!e?.steps?.length){a({type:"INITIALIZE_QUEUE",steps:[]});return}let f=e.steps.map((v,g)=>yt(v,g)).filter(v=>v!==null);a({type:"INITIALIZE_QUEUE",steps:f});},[e]);let l=react.useCallback(async()=>{if(!t||!r||!o||s.queueStatus==="executing")return;let f=s.steps[s.currentIndex];if(!f||f.status!=="pending"&&f.status!=="failed")return;if(f.txData.from.toLowerCase()!==t.toLowerCase()){let g=new Error("Transaction 'from' address doesn't match connected wallet");a({type:"FAIL_STEP",index:s.currentIndex,error:g.message,isCancellation:false}),n&&n(g);return}a({type:"START_EXECUTION",index:s.currentIndex});try{let g=await o({...f.txData,chainId:r});a({type:"COMPLETE_STEP",index:s.currentIndex,txHash:g??""}),s.currentIndex+1>=s.steps.length&&i&&i();}catch(g){let L=g instanceof Error?g.message:"Transaction failed",$=pt(g);a({type:"FAIL_STEP",index:s.currentIndex,error:$?"Transaction cancelled by user":L,isCancellation:$}),!$&&n&&n(g instanceof Error?g:new Error(L));}},[t,r,o,s.queueStatus,s.steps,s.currentIndex,i,n]),m=react.useCallback(()=>{if(!e?.steps?.length)return;let f=e.steps.map((v,g)=>yt(v,g)).filter(v=>v!==null);a({type:"RESET_QUEUE",steps:f});},[e]),c=s.steps[s.currentIndex]||null,d=s.queueStatus==="executing",p=s.queueStatus==="completed",b=s.queueStatus==="error",k=s.queueStatus==="cancelled",w=s.steps.filter(f=>f.status==="completed").length,S=s.steps.length,H=S>0?w/S*100:0,E=react.useMemo(()=>c?!!(p||d&&c.id===0||c.id>0):false,[c,p,d]),ne=!!(t&&r&&s.steps.length>0&&s.queueStatus!=="executing"&&s.queueStatus!=="completed");return react.useEffect(()=>{if(ft(s)){let f=setTimeout(()=>{l();},Br);return ()=>clearTimeout(f)}},[s,l]),{steps:s.steps.map((f,v)=>({...f,completed:f.status==="completed",current:v===s.currentIndex})),currentIndex:s.currentIndex,isExecuting:d,allCompleted:p,hasError:b,cancelled:k,error:s.lastError,currentStep:c?{...c,completed:c.status==="completed",current:true}:null,canExecute:ne,executeCurrentTransaction:l,resetQueue:m,totalSteps:S,completedSteps:w,progress:H,showTxStatus:E}}var $r=(e,t,r)=>({in:{icon:t.logos[0],symbol:t.symbol},out:{icon:r.logos[0],symbol:r.symbol},amount:void 0,type:e}),qr=(e,t)=>({in:{icon:e.logos[0],symbol:e.symbol},out:null,amount:utils.formatToken(t,{decimals:e.decimals},true,false,4),type:"approve"});function vt(e){if(!e)return [];let t=[];return e.steps.forEach(r=>{if(r.kind==="approve"&&r.token){let o=qr(r.token,r.amount);t.push(o);}r.kind==="enso"&&r.substeps&&r.substeps.forEach(o=>{let n=o.from[0],i=o.to[0],u=$r(o.kind,n,i);t.push(u);});}),t}function ht(e){return {chainId:Number(e.receiptToken?.chain.chainId)??chains.mainnet.id,address:e.receiptToken?.address??"",symbol:e.receiptToken?.symbol??"",decimals:e.receiptToken?.decimals??18}}function xt(e,t,r,o,n){let i=react.useMemo(()=>{if(!(!o||!e))return {...o,user:t,distributor_id:r,referral_code:n}},[o,t,r,n]),u=react.useMemo(()=>!!(t&&i?.token_in&&i?.token_out&&i?.amount&&i?.chain&&i?.slippage&&i?.distributor_id),[o]),{data:s,isLoading:a,error:l}=hooks.useEarnRoute({params:i,enabled:u&&e}),m=react.useMemo(()=>vt(s??null),[s]);return {fetchedRoute:s??null,outputAmount:s?.amount_out??void 0,isReady:u&&s&&!a,hasRequiredParams:u,routeDetails:m,routeError:l,isLoadingRoute:a}}function xe({fetchedRoute:e,routeError:t,isLoadingRoute:r,canExecute:o,isExecuting:n,hasError:i,cancelled:u,executeCurrentTransaction:s,totalSteps:a,completedSteps:l,showingTransactionStatus:m,hasInsufficientBalance:c}){let d=react.useCallback(async()=>{o&&await s();},[o,s]),p=react.useMemo(()=>m?null:r?{text:"Loading route...",disabled:true,className:"cursor-not-allowed"}:t?{text:"Route Error",disabled:true,className:"cursor-not-allowed"}:!e||!e.steps||e.steps.length===0?{text:"Enter amount to continue",disabled:true,className:"cursor-not-allowed"}:c?{text:"Insufficient Balance",disabled:true,className:"cursor-not-allowed"}:n?{text:"Executing...",disabled:true,className:"cursor-not-allowed"}:i?{text:"Retry Transaction",disabled:!o,onClick:d,className:"cursor-pointer"}:u?{text:"Try Again",disabled:!o,onClick:d,className:"cursor-pointer"}:{text:a>1&&l!==a?`Confirm Transaction (${l}/${a})`:"Confirm Transaction",disabled:false,onClick:d,className:"cursor-pointer"},[m,r,t,e,c,n,i,u,o,a,l,d]);return p?jsxRuntime.jsx(ui.Button,{border:"plain",onClick:()=>p.onClick?.(),disabled:p.disabled,className:p.className+" w-full",children:p.text}):null}function Et({opportunity:e,address:t,distributorId:r,executeTransaction:o,stickyButton:n=false}){let{openOverlay:i}=y(),{chainId:u,symbol:s,decimals:a}=react.useMemo(()=>ht(e),[e]),{setAmount:l,setSlippage:m,token:c,amount:d,slippage:p,options:b,isValid:k}=C(),{usdValue:w,hasInsufficientBalance:S,handleMaxClick:H}=hooks.useTokenBalance({token:c,amount:d??void 0,setAmount:O=>l(O??null)}),{routeDetails:E,isReady:ne,outputAmount:f,fetchedRoute:v,routeError:g,isLoadingRoute:L}=xt(k,t,r,b),$=react.useCallback(async O=>{let ie={from:O.from,to:O.to,data:O.data,value:BigInt(O.value),chainId:u??1};return await o(ie)},[o,u]),{steps:Qt,currentStep:Ne,canExecute:we,isExecuting:F,allCompleted:se,hasError:Oe,cancelled:ae,executeCurrentTransaction:Ae,resetQueue:We,totalSteps:Re,completedSteps:Ie,showTxStatus:zt}=ve({earnRoute:v,userAddress:t,chainId:u,sendTransaction:$}),Ht=react.useMemo(()=>{let O=d?utils.formatNumber(d,6,true,false):"0",ie=f&&a?utils.formatToken(f,{decimals:a},true,false,6):"0";return {deposit:d?`${O} ${c?.symbol||"ETH"}`:"0 ETH",receive:f&&a?`${ie} ${s||"ETH"}`:"0 ETH",equivalentInUsd:d&&c?.price?(Number.parseFloat(d)*c.price).toFixed(2):"0.00",defaultOpen:true,slippage:p,setSlippage:m}},[d,f,a,s,c,p]);return jsxRuntime.jsxs("div",{className:ui.cn("grid gap-3 flex-1 min-h-0",n?"grid-rows-[auto_1fr_auto] pb-6":"grid-rows-[auto_1fr]"),children:[jsxRuntime.jsx(ui.SwapInput,{tokens:[],useCustomTokenSelector:true,selectedTokenData:c,onCustomTokenSelectorClick:()=>i("balances"),value:d??void 0,onChange:l,usdValue:S?void 0:w,balance:c?utils.formatToken(c.balance,c,true,false,5):"0",onMaxClick:H,className:ui.cn("p-5",S?"border-destructive/50 border":"border-border border")}),jsxRuntime.jsxs("div",{className:"overflow-auto min-h-0 space-y-3",children:[ne&&E&&jsxRuntime.jsx(ui.SwapDetails,{details:Ht}),E&&E.length>0&&jsxRuntime.jsx(ui.RouteDetails,{value:{steps:E}}),Ne&&d&&zt&&jsxRuntime.jsx(ye,{steps:Qt,currentStep:Ne,allCompleted:se,cancelled:ae,tokenSymbol:c?.symbol||"",amount:d,resetQueue:We,resetForm:We}),!n&&(!F||se)&&jsxRuntime.jsx("div",{className:"pt-3",children:jsxRuntime.jsx(xe,{fetchedRoute:v,routeError:g,isLoadingRoute:L,canExecute:we,isExecuting:F,hasError:Oe,cancelled:ae,executeCurrentTransaction:Ae,totalSteps:Re,completedSteps:Ie,showingTransactionStatus:F,hasInsufficientBalance:S})})]}),n&&(!F||se)&&jsxRuntime.jsx("div",{className:"w-full",children:jsxRuntime.jsx(xe,{fetchedRoute:v,routeError:g,isLoadingRoute:L,canExecute:we,isExecuting:F,hasError:Oe,cancelled:ae,executeCurrentTransaction:Ae,totalSteps:Re,completedSteps:Ie,showingTransactionStatus:F,hasInsufficientBalance:S})})]})}function co(e,t){let r={address:e.token.address,name:e.token.name,symbol:e.token.symbol,decimals:e.token.decimals,balance:e.amount,price:e.token.price??void 0,chainId:e.token.chain,logo:e.token.logos?.[0]},o=utils.getNetworkByChainId(Number(t));return {id:`${t}-${r.address}`,symbol:r.symbol,name:r.name,icon:r.logo?jsxRuntime.jsx("img",{src:r.logo,alt:r.symbol,className:"h-8 w-8 rounded-full"}):jsxRuntime.jsx("div",{className:"bg-muted flex h-8 w-8 items-center justify-center rounded-full text-xs",children:r.symbol?.charAt(0)||"?"}),balance:utils.formatToken(r.balance,r),balanceUSD:utils.formatCurrencyWithCommas(Number.parseFloat(utils.formatToken(r.balance,r))*(r.price||0),2),chainId:String(t),chainName:o?.name||"Unknown",address:r.address,decimals:r.decimals}}function Te(e){let t=[];return Object.entries(e).forEach(([r,o])=>{o.forEach(n=>{t.push(co(n,r));});}),t}function ke(e,t,r){let n=e[Number(t)]?.find(i=>i.token.address===r);return n?{address:n.token.address,name:n.token.name,symbol:n.token.symbol,decimals:n.token.decimals,logo:n.token.logos?.[0],icon:jsxRuntime.jsx("img",{src:n.token.logos?.[0],alt:n.token.symbol,className:"size-4 rounded-full"}),balance:n.amount,price:n.token.price??void 0,chainId:n.token.chain}:null}function wt(){let{selectToken:e,opportunity:t}=C(),{closeOverlay:r}=y(),{user:o}=W(),{balances:n,isLoading:i,error:u}=hooks.useMultiChainBalances({chainIds:[Number(t?.receiptToken?.chain.chainId)??chains.mainnet.id],address:o||""}),s=react.useCallback(l=>{let m=ke(n,l.chainId,l.address);e(m),r();},[e,r,n]),a=react.useMemo(()=>Te(n),[n]);return i?jsxRuntime.jsx("div",{children:"Loading..."}):u?jsxRuntime.jsxs("div",{children:["Error: ",u.message]}):jsxRuntime.jsx(Y,{children:jsxRuntime.jsx(ui.AssetList,{assets:a,onAssetClick:s,groupByChain:true,showChainIcon:true,filterVariant:"navigation",className:"h-full",itemClassName:"!rounded-full"})})}var yo=e=>{let r=Te(e)[0];return r?ke(e,r.chainId,r.address):null};function At(){let{user:e,network:t,sendTransaction:r}=W(),o=U(),{openOverlay:n}=y(),{token:i,selectOpportunity:u,selectToken:s,opportunity:a}=C(),{balances:l,isLoading:m}=hooks.useMultiChainBalances({chainIds:[Number(a?.receiptToken?.chain.chainId)??chains.mainnet.id],address:e}),{data:c,isLoading:d}=hooks.useWidgetOpportunities(o);react.useEffect(()=>{if(c&&c.opportunities&&c.opportunities.length>0&&!a){let b=c.opportunities[0];u(b);}},[c,a]),react.useEffect(()=>{if(!i&&Object.keys(l).length>0){let b=yo(l);b&&s(b);}},[l,i]);let p=react.useMemo(()=>m||d,[m,d]);return {address:e,network:t,distributorId:o,openOverlay:n,sendTransaction:r,isLoading:p}}function To(e,t=4){return e?`${e.slice(0,t+2)}...${e.slice(-t)}`:""}function Wt(){let{isMember:e,isLoading:t,address:r,isConnected:o,disconnect:n}=R();if(t)return jsxRuntime.jsx("div",{className:"h-10 w-[133px] animate-pulse rounded-full bg-neutral-alpha-10"});if(!o)return null;if(o&&e)return jsxRuntime.jsx(ui.Button,{variant:"ghost",border:"bordered",onClick:n,className:"group min-w-[140px] transition-colors",children:jsxRuntime.jsxs("div",{className:"gap-2 flex text-md items-center justify-between",children:[jsxRuntime.jsx(lucideReact.Wallet2Icon,{className:"size-6 stroke-accent group-hover:hidden"}),jsxRuntime.jsx(lucideReact.LogOutIcon,{className:"hidden size-6 stroke-destructive group-hover:block"}),jsxRuntime.jsx("span",{className:"group-hover:hidden",children:To(r)}),jsxRuntime.jsx("span",{className:"hidden group-hover:block text-foreground",children:"Disconnect"})]})})}function It(){let e=U(),{data:t}=hooks.useWidgetOpportunities(e),r=t?.chains||[],{changeNetwork:o,currentChain:n,isConnected:i}=R(),u=react.useMemo(()=>r.find(a=>Number(a.chainId)===n)||r[0],[r,n]),s=async a=>{try{await o(a);}catch(l){console.error("Failed to change network:",l);}};return i?jsxRuntime.jsxs(ui.DropdownMenu,{children:[jsxRuntime.jsx(ui.DropdownMenuTrigger,{src:u?.logoUrl,children:u?.name}),jsxRuntime.jsx(ui.DropdownMenuContent,{children:r.map(a=>jsxRuntime.jsxs(ui.DropdownMenuItem,{onClick:()=>s(Number(a.chainId)),children:[jsxRuntime.jsx("img",{src:a.logoUrl,alt:a.name,className:"size-6 rounded-full"}),a.name]},a.id))})]}):null}function Ce(){return jsxRuntime.jsxs("div",{className:"flex justify-between items-center gap-2",children:[jsxRuntime.jsx(Wt,{}),jsxRuntime.jsx(It,{})]})}var _t=()=>jsxRuntime.jsx("div",{className:"mt-5 flex flex-col gap-4 h-full",children:jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsxs("div",{className:"flex gap-3",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-12 flex-1 rounded-turtle"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-12 w-48 rounded-turtle"})]}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",gradient:"white",className:"rounded-turtle space-y-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between p-4",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-8 w-24"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-8 w-56 rounded-full"})]}),jsxRuntime.jsxs("div",{className:"mx-4 mb-4 space-y-1",children:[jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-16"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-40"})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-16"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-40"})]})]})]}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",className:"rounded-turtle p-4",children:[jsxRuntime.jsx("div",{className:"mb-4",children:jsxRuntime.jsx(ui.Skeleton,{className:"h-20 w-full rounded-turtle"})}),jsxRuntime.jsxs("div",{className:"flex justify-between items-center mb-4",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-10 w-40 rounded-full"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-5 w-32"})]})]}),jsxRuntime.jsx(ui.Skeleton,{className:"h-14 w-full rounded-turtle"})]})});var Lt=()=>{let{isConnected:e,connect:t}=R(),{address:r,distributorId:o,openOverlay:n,sendTransaction:i,isLoading:u}=At(),{opportunity:s,amount:a,token:l}=C(),m=c=>c.filter(d=>d.rewardType!=="points").reduce((d,p)=>d+(p.yield??0),0);return u?jsxRuntime.jsx(_t,{}):jsxRuntime.jsxs("div",{className:"mt-5 flex flex-col gap-4 h-full",children:[jsxRuntime.jsxs("div",{className:"text-foreground space-y-3",children:[jsxRuntime.jsx(Ce,{}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",gradient:"white",className:ui.cn("rounded-turtle space-y-2"),children:[jsxRuntime.jsxs("div",{className:"flex justify-between p-4",children:[jsxRuntime.jsx(ee,{incentives:s?.incentives||[],className:"text-xl text-primary"}),jsxRuntime.jsx(ui.BaseSelector,{icon:ui.iconUrlToImg(s?.receiptToken?.logoUrl||"",s?.receiptToken?.symbol||""),text:s?.name||"",onClick:()=>n("opportunities"),size:"sm"})]}),jsxRuntime.jsx(ui.OpportunityRateEstimator,{value:{symbol:s?.baseTokens?.symbol||"",price:s?.baseTokens?.priceUsd||0,depositedAmountUsd:Number(Number(a??0)*Number(l?.price??0))||0,apr:m(s?.incentives||[])}})]})]}),s&&r&&o&&jsxRuntime.jsx(Et,{opportunity:s,address:r,distributorId:o,stickyButton:true,executeTransaction:async c=>await i(c)}),!e&&jsxRuntime.jsx("div",{className:"mt-auto sticky bottom-0",children:jsxRuntime.jsx(ui.Button,{variant:"green",border:"interactive",size:"lg",onClick:t,className:"w-full",children:"Connect Wallet"})})]})};function Ut(){let{isMember:e}=R(),t=react.useMemo(()=>({positions:{label:"Your Positions",component:ut,visible:e},earn:{label:"Earn",component:Lt},discover:{label:"Discover",component:lt}}),[e]),r=react.useMemo(()=>({opportunities:{component:at},balances:{component:wt}}),[]);return jsxRuntime.jsx(Ze,{children:jsxRuntime.jsx(de,{tabs:t,overlays:r,defaultTab:"earn"})})}function Bt({adapter:e,config:t,distributorId:r}){return jsxRuntime.jsx(De,{config:t,children:jsxRuntime.jsx(Xe,{adapter:e,distributorId:r,children:jsxRuntime.jsx(Ut,{})})})}var Lo={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"}};//! Will be deprecated when just use distributorId to fetch everything from the API
|
|
2
|
-
exports.EarnWidget=
|
|
1
|
+
'use strict';var clsx=require('clsx'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),ui=require('@turtleclub/ui'),classVarianceAuthority=require('class-variance-authority'),hooks=require('@turtleclub/hooks'),jotai=require('jotai'),lucideReact=require('lucide-react'),utils=require('@turtleclub/utils'),viem=require('viem'),chains=require('viem/chains');function $(...e){return clsx.clsx(e)}var De=react.createContext(null);function _e({config:e,children:t}){return jsxRuntime.jsx(De.Provider,{value:e,children:t})}function B(){let e=react.useContext(De);if(!e)throw new Error("useWidgetConfig must be used within WidgetConfigProvider");return e}function Z(e){return `rgb(from ${e} calc(255 - r) calc(255 - g) calc(255 - b))`}function to(e,t=10){return `color-mix(in srgb, ${e} ${100-t}%, black)`}function Le(e,t){let o=t==="dark",r={"--color-brand-black":o?e.background_dark:Z(e.background_dark),"--color-brand-white":o?e.foreground_dark:Z(e.foreground_dark),"--color-brand-green":o?e.primary_dark:to(e.primary_dark)};return (e.card!==void 0||e.card_dark!==void 0)&&(r["--color-surface-primary"]=o?e.card_dark??e.card??e.background_dark:Z(e.card_dark??e.background_dark)),(e.muted_foreground!==void 0||e.muted_foreground_dark!==void 0)&&(r["--muted-foreground"]=o?e.muted_foreground_dark??e.muted_foreground??e.foreground_dark:Z(e.muted_foreground_dark??e.muted_foreground_dark??e.foreground_dark)),r}var Fe={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"},Me="dark",Be="Montserrat, sans-serif",Ue="DM Sans, sans-serif";function W(){let e=B(),t=e?.theme??Me,o=e?.fontFamily??Be,r=e?.fontSecondary??Ue,s=e?.widgetWidth??"default",a=e?.customWidth??"100%",u=e?.showNavigation??true,i=e?.padding??"default",n=e?.rounding??"default",l=e?.styles??Fe,m=Le(l,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:m,fontPrimary:o,fontSecondary:r,widgetWidth:s,customWidth:a,showNavigation:u,padding:i,rounding:n,config:e,widgetStyles:l}}var Qe={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 ze({light:e,dark:t,fallback:o="Turtle Club",className:r,size:s="lg"}){let[a,u]=react.useState(false),{theme:i}=W(),l=i==="dark"?t||e:e||t;return l&&!a?jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("img",{src:l,alt:o,className:ui.cn("object-contain",Qe[s]),onError:()=>u(true),onLoad:()=>u(false)})}):jsxRuntime.jsx("div",{className:ui.cn("flex justify-center items-center",r),children:jsxRuntime.jsx("span",{className:ui.cn("font-bold text-primary",Qe[s]),children:o})})}function He(){let e=B();return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var so=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 le({children:e,className:t,variant:o,padding:r,rounding:s,showLogo:a=true,logoSize:u="xs",...i}){let{padding:n}=W(),{light:l,dark:p,fallback:m}=He(),d=so({padding:r??n});return jsxRuntime.jsxs(ui.Card,{className:$(t,d),...i,variant:o,gradient:"white",children:[a&&jsxRuntime.jsx("div",{className:"flex-shrink-0 py-2",children:jsxRuntime.jsx(ze,{light:l,dark:p,fallback:m,size:u})}),e]})}var Ve=react.createContext(null),Xe=react.createContext(""),Ze=({adapter:e,distributorId:t,children:o})=>jsxRuntime.jsx(Ve.Provider,{value:e,children:jsxRuntime.jsx(Xe.Provider,{value:t,children:o})}),I=()=>{let e=react.useContext(Ve);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},U=()=>react.useContext(Xe);function Ke({children:e}){let t=B(),{theme:o,coreTokenCSS:r,fontPrimary:s,fontSecondary:a,widgetWidth:u}=W();return jsxRuntime.jsx("div",{className:$("turtle-widget-root text-foreground","antialiased transition-all duration-700 ease-linear w-full overflow-hidden","h-full flex items-center justify-center",o==="dark"?"dark":""),style:{...r,"--font-primary":s,"--font-secondary":a,fontFamily:s,backgroundColor:"transparent",maxHeight:"90vh"},children:jsxRuntime.jsx("div",{className:$("flex flex-col gap-2 h-full overflow-hidden",u==="full"?"w-full items-center":u==="custom"?"items-stretch":"items-center"),style:{...u==="custom"&&t.customWidth?{width:t.customWidth}:u==="default"?{width:"620px"}:{}},children:jsxRuntime.jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:e})})})}var R=()=>{let e=I(),t=react.useRef(void 0),o=react.useRef(false),{data:r,isLoading:s,refetch:a}=hooks.useCheckMembership({params:{address:e.user||"",walletEcosystem:"evm"},enabled:!!e.user}),{mutateAsync:u,isPending:i,error:n}=hooks.useCreateMembershipAgreement(),{mutateAsync:l,isPending:p,error:m}=hooks.useCreateMembership();react.useEffect(()=>{let b=e.user;if(!b){t.current!==void 0&&(t.current=void 0);return}b!==t.current&&(t.current=b,d(b));},[e.user]);let d=async b=>{if(!o.current){o.current=true;try{let{data:S}=await a();if(S?.isMember){console.log("[useWidgetAuth] User is already a member");return}console.log("[useWidgetAuth] User is not a member, starting membership flow..."),console.log("[useWidgetAuth] Creating membership agreement...");let N=await u({address:b,walletEcosystem:"evm",url:window.location.href,chainId:String(e.network||1)});console.log("[useWidgetAuth] Requesting signature from wallet...");let O=await e.signMessage(N.message);console.log("[useWidgetAuth] Creating membership with signature...");let E=await l({address:b,walletEcosystem:"evm",signature:O,nonce:N.nonce});E.isMember?console.log("[useWidgetAuth] Membership created successfully!"):console.error("[useWidgetAuth] Failed to create membership:",E.error);}catch(S){console.error("[useWidgetAuth] Membership flow error:",S);}finally{o.current=false;}}},c=s||i||p,h=n?.message||m?.message||null;return {address:e.user,isConnected:!!e.user,isMember:r?.isMember,currentChain:e.network,connect:e.openConnectionModal,disconnect:e.disconnect,changeNetwork:e.changeNetwork,isLoading:c,error:h}};function Je(e){let[t,o]=react.useState(e),r=react.useCallback(s=>{o(s);},[]);return {currentTab:t,setTab:r}}var ho=jotai.atom({id:"none"});function y(){let[e,t]=jotai.useAtom(ho),o=react.useCallback((s,a)=>{t({id:s,data:a});},[t]),r=react.useCallback(()=>{t({id:"none"});},[t]);return {currentOverlay:e.id,overlayData:e.data,isOverlayOpen:e.id!=="none",openOverlay:o,closeOverlay:r}}function me({tabs:e,overlays:t,defaultTab:o}){let {showNavigation:r}=W(),{currentTab:s}=Je(o),{currentOverlay:u,overlayData:i}=y();react.useMemo(()=>Object.entries(e).filter(([c,h])=>h.visible!==false).map(([c,h])=>({value:c,label:h.label})),[e]);let p=react.useMemo(()=>e[s].component,[s,e]),m=react.useMemo(()=>u==="none"?null:t[u].component,[u,t]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r&&false,jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:jsxRuntime.jsx(le,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:m?jsxRuntime.jsx(m,{data:i}):jsxRuntime.jsx(p,{})})})})]})}function q({onBack:e,children:t,className:o}){let{closeOverlay:r}=y();return jsxRuntime.jsxs("div",{className:`flex flex-col h-full ${o||""}`,children:[jsxRuntime.jsx("div",{className:"flex items-center gap-2 pb-3",children:jsxRuntime.jsx(ui.Button,{variant:"green",border:"interactive",size:"icon",onClick:e??r,className:"h-8 w-8 shrink-0","aria-label":"Go back",children:jsxRuntime.jsx(lucideReact.ChevronLeft,{className:"h-5 w-5"})})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-auto pt-4",children:t})]})}var ee=e=>e.filter(t=>t.rewardType!=="points").reduce((t,o)=>t+(o.yield??0),0),tt=e=>({totalYield:react.useMemo(()=>ee(e),[e])});function te({incentives:e,isPill:t,className:o}){let{totalYield:r}=tt(e),s=react.useMemo(()=>e.filter(a=>a.rewardType!=="points"&&a.yield!==null&&a.yield!==void 0).sort((a,u)=>u.yield-a.yield),[e]);return jsxRuntime.jsx(ui.TurtleTooltip,{trigger:jsxRuntime.jsxs("div",{className:ui.cn("group flex items-center gap-1",o,t&&"hover:bg-neutral-alpha-5 border-border bg-neutral-alpha-2 hover:border-gradient-white rounded-full border px-3 py-1.5 text-xs"),children:[utils.formatNumber(r,1,false,false),"%"," ",jsxRuntime.jsx(lucideReact.InfoIcon,{className:"text-primary/70 group-hover:text-primary size-2.5"})]}),content:jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"text-sm",children:"APR Breakdown"}),jsxRuntime.jsx("div",{children:s.map(a=>jsxRuntime.jsxs("div",{className:"my-1 flex justify-between gap-2 text-xs",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[a.iconUrl&&jsxRuntime.jsx("img",{src:a.iconUrl,alt:a.name||a.id,className:"size-4 rounded-full",loading:"lazy"}),jsxRuntime.jsx("div",{children:a.name})]}),jsxRuntime.jsxs("div",{children:[utils.formatNumber(a.yield,1,false,false),"%"]})]},a.id))}),jsxRuntime.jsxs("div",{className:"text-primary flex justify-between gap-2 text-sm",children:[jsxRuntime.jsx("span",{children:"Total"}),jsxRuntime.jsxs("span",{children:[utils.formatNumber(r,1,false,false),"%"]})]})]}),side:"bottom",contentClassName:"p-5 backdrop-blur-xl"})}function rt({chain:e,triggerClassName:t}){let o=utils.getNetworkById(e.slug);return jsxRuntime.jsx("div",{className:ui.cn("bg-foreground -mr-1 flex size-5 items-center justify-center overflow-hidden rounded-full ring-1 ring-white last:mr-0 lg:-mr-4 lg:size-6",utils.getNetworkBackgroundColor(o),t),children:jsxRuntime.jsx("img",{src:e.logoUrl,className:"size-5 rounded-full object-contain lg:size-6",alt:e.name})})}var fe=jotai.atom(null),ge=jotai.atom(null),he=jotai.atom(.001),be=jotai.atom(null),st=jotai.atom(e=>{let t=e(fe),o=e(be),r=e(ge),s=e(he),a=!!(r&&Number.parseFloat(r)>0),u=!!t&&!!o&&a&&!!s,i=u?{chain:Number(t?.receiptToken?.chain.chainId)??1,token_in:o?.address??"",token_out:t?.receiptToken?.address??"",amount:viem.parseUnits(r??"0",o?.decimals??18).toString(),slippage:s}:void 0;return {opportunity:t,token:o,amount:r,options:i,isValid:u}});function C(){let[e,t]=jotai.useAtom(fe),[o,r]=jotai.useAtom(be),[s,a]=jotai.useAtom(ge),[u,i]=jotai.useAtom(he),n=jotai.useAtomValue(st),l=react.useCallback(()=>{r(null),a(""),i(.001);},[r,a,i]);return react.useEffect(()=>{o&&(a(""),i(.001));},[o,a,i]),{opportunity:e,token:o,amount:s,slippage:u,isValid:n.isValid,options:n.options,selectOpportunity:t,selectToken:r,setAmount:a,setSlippage:i,reset:l}}function re({opportunities:e}){let{changeNetwork:t,network:o}=I(),{selectOpportunity:r,selectToken:s}=C(),{closeOverlay:a}=y();return jsxRuntime.jsx(ui.DataTable,{columns:[{accessorKey:"name",header:()=>jsxRuntime.jsx("div",{children:"Opportunity"}),cell:({row:n})=>jsxRuntime.jsxs("div",{className:"flex items-center gap-2 px-1",children:[jsxRuntime.jsx(ui.APIStatus,{warning:false}),jsxRuntime.jsx("img",{src:n.original.receiptToken.logoUrl,className:"size-6 rounded-full",loading:"lazy"}),n.original.name||n.original.receiptToken.name]}),enableSorting:true},{accessorKey:"chain",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"Chain"}),cell:({row:n})=>jsxRuntime.jsx(rt,{chain:n.original.receiptToken.chain})},{id:"organization",accessorFn:n=>n.products.length?n.products[0].organization.name:"-",header:()=>jsxRuntime.jsx("div",{children:"Partner"}),cell:({row:n})=>n.original.products.length?jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("img",{src:n.original.products[0].organization.iconUrl||"",className:"size-6 rounded-full",loading:"lazy"}),n.original.products[0].organization.name]}):"-",enableSorting:true},{accessorKey:"tvl",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"TVL"}),cell:({row:n})=>jsxRuntime.jsx("div",{className:"text-end",children:utils.formatCurrency(n.original.tvl,0,true)}),enableSorting:true},{accessorKey:"totalYield",header:()=>jsxRuntime.jsx("div",{className:"flex w-full justify-end",children:"Estimated APR"}),cell:({row:n})=>jsxRuntime.jsx("div",{className:"flex flex-row-reverse",children:jsxRuntime.jsx(te,{incentives:n.original.incentives})}),enableSorting:true,sortingFn:(n,l)=>{let p=ee(n.original.incentives),m=ee(l.original.incentives);return p-m}}],onRowClick:n=>{r(n);let l=Number(n.receiptToken.chain.chainId);l!==o&&(t(l),s(null)),a();},data:e,enableSearch:true,grid:{displayAsGrid:true,headerSlot:"name",rightSlot:"totalYield",excludeColumns:[],className:"grid-cols-1 gap-2.5"}})}function it(){let e=U(),{data:t,isLoading:o,error:r}=hooks.useWidgetOpportunities(e);return o?jsxRuntime.jsx("div",{children:"Loading..."}):r?jsxRuntime.jsxs("div",{children:["Error: ",r.message]}):t===void 0?jsxRuntime.jsx("div",{children:"No data"}):t.opportunities&&t.opportunities.length===0?jsxRuntime.jsx("div",{children:"No opportunities"}):jsxRuntime.jsx(q,{children:jsxRuntime.jsx(re,{opportunities:t.opportunities||[]})})}var lt=()=>{let{openOverlay:e}=y();return jsxRuntime.jsx("button",{onClick:()=>{e("balances"),console.log("Positions Content Click");},children:"Positions Content Click"})};var ct=()=>jsxRuntime.jsx("div",{children:"Discover Content"});function ye({steps:e,currentStep:t,allCompleted:o,cancelled:r,tokenSymbol:s,amount:a,resetQueue:u,resetForm:i,refetchBalances:n}){let l=e.filter(c=>c.status==="completed"&&c.txHash).pop(),p=t?.txHash?t:null,m=o?l?.txHash:p?.txHash||l?.txHash,d=react.useMemo(()=>({title:r?"Transaction Cancelled":o?"Transaction Completed!":"Processing Transaction",description:r?"Transaction was cancelled by user":o?"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:s,protocol:"Turtle Protocol",completed:o,cancelled:r,onViewDetails:void 0,onClose:()=>{u(),i(),n?.();},steps:e.map(c=>({label:c.label,completed:c.status==="completed",current:c.status==="executing",txHash:c.txHash}))}),[e,o,r,s,a,u,i,n,m]);return jsxRuntime.jsx("div",{className:"h-full overflow-hidden",children:jsxRuntime.jsx(ui.TxStatus,{...d,className:"bg-background border-border text-foreground h-full"})})}function mt(e){return e.kind==="approve"&&e.token?`Approve ${e.token.symbol}`:e.kind==="enso"?"Execute Deposit":`Execute ${e.kind}`}function pt(e,t){return e.kind==="approve"&&e.token?`Allow contract to spend ${e.token.symbol}`:`Transaction step ${t+1}`}function ft(e){let t=e instanceof Error?e.message:String(e);return ["user rejected","user denied","user cancelled","cancelled by user","transaction rejected","4001"].some(r=>t.toLowerCase().includes(r.toLowerCase()))}function gt(e){if(e.steps.length<=1||e.queueStatus!=="idle")return false;let t=e.steps[e.currentIndex-1],o=e.steps[e.currentIndex];return e.currentIndex>0&&e.currentIndex<e.steps.length&&t?.status==="completed"&&o?.status==="pending"}var Vo=1e3;function yt(e,t){return e.tx?{id:t,label:mt(e),description:pt(e,t),txData:e.tx,status:"pending"}:null}function Xo(e,t){switch(t.type){case "INITIALIZE_QUEUE":return {steps:t.steps,currentIndex:0,queueStatus:"idle",lastError:void 0};case "START_EXECUTION":return {...e,steps:e.steps.map((o,r)=>r===t.index?{...o,status:"executing"}:o),queueStatus:"executing",lastError:void 0};case "COMPLETE_STEP":{let o=e.steps.map((a,u)=>u===t.index?{...a,status:"completed",txHash:t.txHash}:a),r=t.index+1,s=r>=o.length;return {...e,steps:o,currentIndex:s?e.currentIndex:r,queueStatus:s?"completed":"idle"}}case "FAIL_STEP":return {...e,steps:e.steps.map((o,r)=>r===t.index?{...o,status:"failed",error:t.error}:o),queueStatus:t.isCancellation?"cancelled":"error",lastError:t.error};case "RESET_QUEUE":return {steps:t.steps,currentIndex:0,queueStatus:"idle",lastError:void 0};default:return e}}function ve({earnRoute:e,userAddress:t,chainId:o,sendTransaction:r,onError:s=()=>{},onSuccess:a=()=>{}}){let u={steps:[],currentIndex:0,queueStatus:"idle"},[i,n]=react.useReducer(Xo,u);react.useEffect(()=>{if(!e?.steps?.length){n({type:"INITIALIZE_QUEUE",steps:[]});return}let f=e.steps.map((x,g)=>yt(x,g)).filter(x=>x!==null);n({type:"INITIALIZE_QUEUE",steps:f});},[e]);let l=react.useCallback(async()=>{if(!t||!o||!r||i.queueStatus==="executing")return;let f=i.steps[i.currentIndex];if(!f||f.status!=="pending"&&f.status!=="failed")return;if(f.txData.from.toLowerCase()!==t.toLowerCase()){let g=new Error("Transaction 'from' address doesn't match connected wallet");n({type:"FAIL_STEP",index:i.currentIndex,error:g.message,isCancellation:false}),s&&s(g);return}n({type:"START_EXECUTION",index:i.currentIndex});try{let g=await r({...f.txData,chainId:o});n({type:"COMPLETE_STEP",index:i.currentIndex,txHash:g??""}),i.currentIndex+1>=i.steps.length&&a&&a();}catch(g){let _=g instanceof Error?g.message:"Transaction failed",M=ft(g);n({type:"FAIL_STEP",index:i.currentIndex,error:M?"Transaction cancelled by user":_,isCancellation:M}),!M&&s&&s(g instanceof Error?g:new Error(_));}},[t,o,r,i.queueStatus,i.steps,i.currentIndex,a,s]),p=react.useCallback(()=>{if(!e?.steps?.length)return;let f=e.steps.map((x,g)=>yt(x,g)).filter(x=>x!==null);n({type:"RESET_QUEUE",steps:f});},[e]),m=i.steps[i.currentIndex]||null,d=i.queueStatus==="executing",c=i.queueStatus==="completed",h=i.queueStatus==="error",b=i.queueStatus==="cancelled",S=i.steps.filter(f=>f.status==="completed").length,N=i.steps.length,O=N>0?S/N*100:0,E=react.useMemo(()=>m?!!(c||d&&m.id===0||m.id>0):false,[m,c,d]),se=!!(t&&o&&i.steps.length>0&&i.queueStatus!=="executing"&&i.queueStatus!=="completed");return react.useEffect(()=>{if(gt(i)){let f=setTimeout(()=>{l();},Vo);return ()=>clearTimeout(f)}},[i,l]),{steps:i.steps.map((f,x)=>({...f,completed:f.status==="completed",current:x===i.currentIndex})),currentIndex:i.currentIndex,isExecuting:d,allCompleted:c,hasError:h,cancelled:b,error:i.lastError,currentStep:m?{...m,completed:m.status==="completed",current:true}:null,canExecute:se,executeCurrentTransaction:l,resetQueue:p,totalSteps:N,completedSteps:S,progress:O,showTxStatus:E}}var jo=(e,t,o)=>({in:{icon:t.logos[0],symbol:t.symbol},out:{icon:o.logos[0],symbol:o.symbol},amount:void 0,type:e}),Jo=(e,t)=>({in:{icon:e.logos[0],symbol:e.symbol},out:null,amount:utils.formatToken(t,{decimals:e.decimals},true,false,4),type:"approve"});function vt(e){if(!e)return [];let t=[];return e.steps.forEach(o=>{if(o.kind==="approve"&&o.token){let r=Jo(o.token,o.amount);t.push(r);}o.kind==="enso"&&o.substeps&&o.substeps.forEach(r=>{let s=r.from[0],a=r.to[0],u=jo(r.kind,s,a);t.push(u);});}),t}function Tt(e){return {chainId:Number(e.receiptToken?.chain.chainId)??chains.mainnet.id,address:e.receiptToken?.address??"",symbol:e.receiptToken?.symbol??"",decimals:e.receiptToken?.decimals??18}}function xt(e,t,o,r,s){let a=react.useMemo(()=>{if(!(!r||!e))return {...r,user:t,distributor_id:o,referral_code:s}},[r,t,o,s]),u=react.useMemo(()=>!!(t&&a?.token_in&&a?.token_out&&a?.amount&&a?.chain&&a?.slippage&&a?.distributor_id),[r]),{data:i,isLoading:n,error:l}=hooks.useEarnRoute({params:a,enabled:u&&e}),p=react.useMemo(()=>vt(i??null),[i]);return {fetchedRoute:i??null,outputAmount:i?.amount_out??void 0,isReady:u&&i&&!n,hasRequiredParams:u,routeDetails:p,routeError:l,isLoadingRoute:n}}function St({children:e,className:t}){let{data:o,isLoading:r}=hooks.useGeocheck();return r?jsxRuntime.jsx(ui.Button,{disabled:true,className:t,size:"lg",fullWidth:true,children:"Checking availability..."}):o&&!o.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:t,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."})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:e})}function xe({fetchedRoute:e,routeError:t,isLoadingRoute:o,canExecute:r,isExecuting:s,hasError:a,cancelled:u,executeCurrentTransaction:i,totalSteps:n,completedSteps:l,showingTransactionStatus:p,hasInsufficientBalance:m}){let d=react.useCallback(async()=>{r&&await i();},[r,i]),c=react.useMemo(()=>p?null:o?{text:"Loading route...",disabled:true,className:"cursor-not-allowed"}:t?{text:"Route Error",disabled:true,className:"cursor-not-allowed"}:!e||!e.steps||e.steps.length===0?{text:"Enter amount to continue",disabled:true,className:"cursor-not-allowed"}:m?{text:"Insufficient Balance",disabled:true,className:"cursor-not-allowed"}:s?{text:"Executing...",disabled:true,className:"cursor-not-allowed"}:a?{text:"Retry Transaction",disabled:!r,onClick:d,className:"cursor-pointer"}:u?{text:"Try Again",disabled:!r,onClick:d,className:"cursor-pointer"}:{text:n>1&&l!==n?`Confirm Transaction (${l}/${n})`:"Confirm Transaction",disabled:false,onClick:d,className:"cursor-pointer"},[p,o,t,e,m,s,a,u,r,n,l,d]);return c?jsxRuntime.jsx(St,{children:jsxRuntime.jsx(ui.Button,{border:"plain",onClick:()=>c.onClick?.(),disabled:c.disabled,className:c.className+" w-full",children:c.text})}):null}function At({opportunity:e,address:t,distributorId:o,executeTransaction:r,refetchBalances:s,stickyButton:a=false}){let{openOverlay:u}=y(),{chainId:i,symbol:n,decimals:l}=react.useMemo(()=>Tt(e),[e]),{setAmount:p,setSlippage:m,token:d,amount:c,slippage:h,options:b,isValid:S,reset:N}=C(),{usdValue:O,hasInsufficientBalance:E,handleMaxClick:se}=hooks.useTokenBalance({token:d,amount:c??void 0,setAmount:A=>p(A??null)}),{routeDetails:f,isReady:x,outputAmount:g,fetchedRoute:_,routeError:M,isLoadingRoute:we}=xt(S,t,o,b),Yt=react.useCallback(async A=>{let ue={from:A.from,to:A.to,data:A.data,value:BigInt(A.value),chainId:i??1};return await r(ue)},[r,i]),{steps:Gt,currentStep:Oe,canExecute:Ae,isExecuting:X,allCompleted:Vt,hasError:We,cancelled:ae,executeCurrentTransaction:Ie,resetQueue:Xt,totalSteps:Re,completedSteps:Pe,showTxStatus:ie}=ve({earnRoute:_,userAddress:t,chainId:i,sendTransaction:Yt,onSuccess:()=>{s();}}),Zt=react.useMemo(()=>{let A=c?utils.formatNumber(c,6,true,false):"0",ue=g&&l?utils.formatToken(g,{decimals:l},true,false,6):"0";return {deposit:c?`${A} ${d?.symbol||"ETH"}`:"0 ETH",receive:g&&l?`${ue} ${n||"ETH"}`:"0 ETH",equivalentInUsd:c&&d?.price?(Number.parseFloat(c)*d.price).toFixed(2):"0.00",defaultOpen:true,slippage:h,setSlippage:m}},[c,g,l,n,d,h]);return jsxRuntime.jsxs("div",{className:ui.cn("grid gap-3 flex-1 min-h-0",a?"grid-rows-[auto_1fr_auto] pb-6":"grid-rows-[auto_1fr]"),children:[jsxRuntime.jsx(ui.SwapInput,{tokens:[],useCustomTokenSelector:true,selectedTokenData:d,onCustomTokenSelectorClick:()=>u("balances"),value:c??void 0,onChange:p,usdValue:E?void 0:O,balance:d?utils.formatToken(d.balance,d,true,false,5):"0",onMaxClick:se,className:ui.cn("p-5",E?"border-destructive/50 border":"border-border border")}),jsxRuntime.jsxs("div",{className:"overflow-auto min-h-0 space-y-3",children:[x&&f&&jsxRuntime.jsx(ui.SwapDetails,{details:Zt}),f&&f.length>0&&jsxRuntime.jsx(ui.RouteDetails,{value:{steps:f}}),Oe&&c&&ie&&jsxRuntime.jsx(ye,{steps:Gt,currentStep:Oe,allCompleted:Vt,cancelled:ae,tokenSymbol:d?.symbol||"",amount:c,resetQueue:Xt,resetForm:N,refetchBalances:s}),!a&&!ie&&jsxRuntime.jsx("div",{className:"pt-3",children:jsxRuntime.jsx(xe,{fetchedRoute:_,routeError:M,isLoadingRoute:we,canExecute:Ae,isExecuting:X,hasError:We,cancelled:ae,executeCurrentTransaction:Ie,totalSteps:Re,completedSteps:Pe,showingTransactionStatus:X,hasInsufficientBalance:E})})]}),a&&!ie&&jsxRuntime.jsx("div",{className:"w-full",children:jsxRuntime.jsx(xe,{fetchedRoute:_,routeError:M,isLoadingRoute:we,canExecute:Ae,isExecuting:X,hasError:We,cancelled:ae,executeCurrentTransaction:Ie,totalSteps:Re,completedSteps:Pe,showingTransactionStatus:X,hasInsufficientBalance:E})})]})}function Sr(e,t){let o={address:e.token.address,name:e.token.name,symbol:e.token.symbol,decimals:e.token.decimals,balance:e.amount,price:e.token.price??void 0,chainId:e.token.chain,logo:e.token.logos?.[0]},r=utils.getNetworkByChainId(Number(t));return {id:`${t}-${o.address}`,symbol:o.symbol,name:o.name,icon:o.logo?jsxRuntime.jsx("img",{src:o.logo,alt:o.symbol,className:"h-8 w-8 rounded-full"}):jsxRuntime.jsx("div",{className:"bg-muted flex h-8 w-8 items-center justify-center rounded-full text-xs",children:o.symbol?.charAt(0)||"?"}),balance:utils.formatToken(o.balance,o),balanceUSD:utils.formatCurrencyWithCommas(Number.parseFloat(utils.formatToken(o.balance,o))*(o.price||0),2),chainId:String(t),chainName:r?.name||"Unknown",address:o.address,decimals:o.decimals}}function ke(e){let t=[];return Object.entries(e).forEach(([o,r])=>{r.forEach(s=>{t.push(Sr(s,o));});}),t}function Se(e,t,o){let s=e[Number(t)]?.find(a=>a.token.address===o);return s?{address:s.token.address,name:s.token.name,symbol:s.token.symbol,decimals:s.token.decimals,logo:s.token.logos?.[0],icon:jsxRuntime.jsx("img",{src:s.token.logos?.[0],alt:s.token.symbol,className:"size-4 rounded-full"}),balance:s.amount,price:s.token.price??void 0,chainId:s.token.chain}:null}function It(){let{selectToken:e,opportunity:t}=C(),{closeOverlay:o}=y(),{user:r}=I(),{balances:s,isLoading:a,error:u}=hooks.useMultiChainBalances({chainIds:[Number(t?.receiptToken?.chain.chainId)??chains.mainnet.id],address:r||""}),i=react.useCallback(l=>{let p=Se(s,l.chainId,l.address);e(p),o();},[e,o,s]),n=react.useMemo(()=>ke(s),[s]);return a?jsxRuntime.jsx("div",{children:"Loading..."}):u?jsxRuntime.jsxs("div",{children:["Error: ",u.message]}):jsxRuntime.jsx(q,{children:jsxRuntime.jsx(ui.AssetList,{assets:n,onAssetClick:i,groupByChain:true,showChainIcon:true,filterVariant:"navigation",className:"h-full",itemClassName:"!rounded-full"})})}var Or=e=>{let o=ke(e)[0];return o?Se(e,o.chainId,o.address):null};function Dt(){let{user:e,network:t,sendTransaction:o}=I(),r=U(),{openOverlay:s}=y(),{token:a,selectOpportunity:u,selectToken:i,opportunity:n}=C(),{balances:l,isLoading:p,refetchAll:m}=hooks.useMultiChainBalances({chainIds:[Number(n?.receiptToken?.chain.chainId)??chains.mainnet.id],address:e}),{data:d,isLoading:c}=hooks.useWidgetOpportunities(r);react.useEffect(()=>{if(d&&d.opportunities&&d.opportunities.length>0&&!n){let b=d.opportunities[0];u(b);}},[d,n]),react.useEffect(()=>{let b=Number(n?.receiptToken?.chain.chainId)??chains.mainnet.id,S=a?.chainId;if((!a||S!==b)&&Object.keys(l).length>0){let O=Or(l);O&&i(O);}},[l,a,n]);let h=react.useMemo(()=>p||c,[p,c]);return {address:e,network:t,distributorId:r,openOverlay:s,sendTransaction:o,isLoading:h,refetchBalances:m}}function Rr(e,t=4){return e?`${e.slice(0,t+2)}...${e.slice(-t)}`:""}function _t(){let{isMember:e,isLoading:t,address:o,isConnected:r,disconnect:s}=R();if(t)return jsxRuntime.jsx("div",{className:"h-10 w-[133px] animate-pulse rounded-full bg-neutral-alpha-10"});if(!r)return null;if(r&&e)return jsxRuntime.jsx(ui.Button,{variant:"ghost",border:"bordered",onClick:s,className:"group min-w-[140px] transition-colors",children:jsxRuntime.jsxs("div",{className:"gap-2 flex text-md items-center justify-between",children:[jsxRuntime.jsx(lucideReact.Wallet2Icon,{className:"size-6 stroke-accent group-hover:hidden"}),jsxRuntime.jsx(lucideReact.LogOutIcon,{className:"hidden size-6 stroke-destructive group-hover:block"}),jsxRuntime.jsx("span",{className:"group-hover:hidden",children:Rr(o)}),jsxRuntime.jsx("span",{className:"hidden group-hover:block text-foreground",children:"Disconnect"})]})})}function Ft(){let e=U(),{data:t}=hooks.useWidgetOpportunities(e),o=t?.chains||[],{changeNetwork:r,currentChain:s,isConnected:a}=R(),u=react.useMemo(()=>o.find(n=>Number(n.chainId)===s)||o[0],[o,s]),i=async n=>{try{await r(n);}catch(l){console.error("Failed to change network:",l);}};return a?jsxRuntime.jsxs(ui.DropdownMenu,{children:[jsxRuntime.jsx(ui.DropdownMenuTrigger,{src:u?.logoUrl,children:u?.name}),jsxRuntime.jsx(ui.DropdownMenuContent,{children:o.map(n=>jsxRuntime.jsxs(ui.DropdownMenuItem,{onClick:()=>i(Number(n.chainId)),children:[jsxRuntime.jsx("img",{src:n.logoUrl,alt:n.name,className:"size-6 rounded-full"}),n.name]},n.id))})]}):null}function Ne(){return jsxRuntime.jsxs("div",{className:"flex justify-between items-center gap-2",children:[jsxRuntime.jsx(_t,{}),jsxRuntime.jsx(Ft,{})]})}var Ut=()=>jsxRuntime.jsx("div",{className:"mt-5 flex flex-col gap-4 h-full",children:jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsxs("div",{className:"flex gap-3",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-12 flex-1 rounded-turtle"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-12 w-48 rounded-turtle"})]}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",gradient:"white",className:"rounded-turtle space-y-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between p-4",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-8 w-24"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-8 w-56 rounded-full"})]}),jsxRuntime.jsxs("div",{className:"mx-4 mb-4 space-y-1",children:[jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-16"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-40"})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-16"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-4 w-40"})]})]})]}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",className:"rounded-turtle p-4",children:[jsxRuntime.jsx("div",{className:"mb-4",children:jsxRuntime.jsx(ui.Skeleton,{className:"h-20 w-full rounded-turtle"})}),jsxRuntime.jsxs("div",{className:"flex justify-between items-center mb-4",children:[jsxRuntime.jsx(ui.Skeleton,{className:"h-10 w-40 rounded-full"}),jsxRuntime.jsx(ui.Skeleton,{className:"h-5 w-32"})]})]}),jsxRuntime.jsx(ui.Skeleton,{className:"h-14 w-full rounded-turtle"})]})});var Qt=()=>{let{isConnected:e,connect:t}=R(),{address:o,distributorId:r,openOverlay:s,sendTransaction:a,isLoading:u,refetchBalances:i}=Dt(),{opportunity:n,amount:l,token:p}=C(),m=d=>d.filter(c=>c.rewardType!=="points").reduce((c,h)=>c+(h.yield??0),0);return u?jsxRuntime.jsx(Ut,{}):jsxRuntime.jsxs("div",{className:"mt-5 flex flex-col gap-4 h-full",children:[jsxRuntime.jsxs("div",{className:"text-foreground space-y-3",children:[jsxRuntime.jsx(Ne,{}),jsxRuntime.jsxs(ui.Card,{variant:"shadow",gradient:"white",className:ui.cn("rounded-turtle space-y-2"),children:[jsxRuntime.jsxs("div",{className:"flex justify-between p-4",children:[jsxRuntime.jsx(te,{incentives:n?.incentives||[],className:"text-xl text-primary"}),jsxRuntime.jsx(ui.BaseSelector,{icon:ui.iconUrlToImg(n?.receiptToken?.logoUrl||"",n?.receiptToken?.symbol||""),text:n?.name||"",onClick:()=>s("opportunities"),size:"sm"})]}),jsxRuntime.jsx(ui.OpportunityRateEstimator,{value:{symbol:n?.baseTokens?.symbol||"",price:n?.baseTokens?.priceUsd||0,depositedAmountUsd:Number(Number(l??0)*Number(p?.price??0))||0,apr:m(n?.incentives||[])}})]})]}),n&&o&&r&&jsxRuntime.jsx(At,{opportunity:n,address:o,distributorId:r,stickyButton:true,refetchBalances:i,executeTransaction:async d=>await a(d)}),!e&&jsxRuntime.jsx("div",{className:"mt-auto sticky bottom-0",children:jsxRuntime.jsx(ui.Button,{variant:"green",border:"interactive",size:"lg",onClick:t,className:"w-full",children:"Connect Wallet"})})]})};function $t(){let{isMember:e}=R(),t=react.useMemo(()=>({positions:{label:"Your Positions",component:lt,visible:e},earn:{label:"Earn",component:Qt},discover:{label:"Discover",component:ct}}),[e]),o=react.useMemo(()=>({opportunities:{component:it},balances:{component:It}}),[]);return jsxRuntime.jsx(Ke,{children:jsxRuntime.jsx(me,{tabs:t,overlays:o,defaultTab:"earn"})})}function qt({adapter:e,config:t,distributorId:o}){return jsxRuntime.jsx(_e,{config:t,children:jsxRuntime.jsx(Ze,{adapter:e,distributorId:o,children:jsxRuntime.jsx($t,{})})})}var Gr={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"}};//! Will be deprecated when just use distributorId to fetch everything from the API
|
|
2
|
+
exports.EarnWidget=qt;exports.defaultWidgetStyleConfig=Gr;//# sourceMappingURL=index.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|