@turtleclub/earn-widget 0.5.0-beta.6 → 0.5.0-beta.60

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.js CHANGED
@@ -1,3 +1,3 @@
1
- import {clsx}from'clsx';import {createContext,useMemo,useRef,useEffect,useCallback,useContext,useState}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {Card,cn,BaseSelector,iconUrlToImg,OpportunityRateEstimator,Button,Skeleton,SwapInput,SwapDetails,DropdownMenu,DropdownMenuTrigger,DropdownMenuContent,DropdownMenuItem}from'@turtleclub/ui';import {cva}from'class-variance-authority';import {useCheckMembership,useCreateMembershipAgreement,useCreateMembership,useBalance,useWidgetOpportunities,useTokenBalance,useSwapRoute}from'@turtleclub/hooks';import {atom,useAtom,useAtomValue}from'jotai';import {ChevronLeft,Wallet2Icon,LogOutIcon}from'lucide-react';import {SLIPPAGE_DEFAULT,APRBreakdownTooltip,BalancesDataTable,OpportunitiesTable,useTransactionQueue,RouteDetails,TransactionStatusSection,ConfirmButton}from'@turtleclub/opportunities';import {parseUnits}from'viem';import {formatNumber,formatToken}from'@turtleclub/utils';import {mainnet}from'viem/chains';function B(...e){return clsx(e)}var Ce=createContext(null);function Te({config:e,children:t}){return jsx(Ce.Provider,{value:e,children:t})}function F(){let e=useContext(Ce);if(!e)throw new Error("useWidgetConfig must be used within WidgetConfigProvider");return e}function H(e){return `rgb(from ${e} calc(255 - r) calc(255 - g) calc(255 - b))`}function Wt(e,t=10){return `color-mix(in srgb, ${e} ${100-t}%, black)`}function xe(e,t){let o=t==="dark",r={"--color-brand-black":o?e.background_dark:H(e.background_dark),"--color-brand-white":o?e.foreground_dark:H(e.foreground_dark),"--color-brand-green":o?e.primary_dark:Wt(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:H(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:H(e.muted_foreground_dark??e.muted_foreground_dark??e.foreground_dark)),r}var we={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"},Ne="dark",We="Montserrat, sans-serif",Oe="DM Sans, sans-serif";function N(){let e=F(),t=e?.theme??Ne,o=e?.fontFamily??We,r=e?.fontSecondary??Oe,n=e?.widgetWidth??"default",a=e?.customWidth??"100%",i=e?.showNavigation??true,c=e?.padding??"default",s=e?.rounding??"default",d=e?.styles??we,p=xe(d,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:p,fontPrimary:o,fontSecondary:r,widgetWidth:n,customWidth:a,showNavigation:i,padding:c,rounding:s,config:e,widgetStyles:d}}var Se={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 Ee({light:e,dark:t,fallback:o="Turtle Club",className:r,size:n="lg"}){let[a,i]=useState(false),{theme:c}=N(),d=c==="dark"?t||e:e||t;return d&&!a?jsx("div",{className:cn("flex justify-center items-center",r),children:jsx("img",{src:d,alt:o,className:cn("object-contain",Se[n]),onError:()=>i(true),onLoad:()=>i(false)})}):jsx("div",{className:cn("flex justify-center items-center",r),children:jsx("span",{className:cn("font-bold text-primary",Se[n]),children:o})})}function Ae(){let e=F();return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var At=cva("p-0",{variants:{padding:{none:"p-0",sm:"p-3",default:"p-4",md:"p-6",lg:"p-7"}},defaultVariants:{padding:"default"}});function te({children:e,className:t,variant:o,padding:r,rounding:n,showLogo:a=true,logoSize:i="xs",...c}){let{padding:s}=N(),{light:d,dark:m,fallback:p}=Ae(),k=At({padding:r??s});return jsxs(Card,{className:B(t,k),...c,variant:o,gradient:"white",children:[a&&jsx("div",{className:"flex-shrink-0 py-2",children:jsx(Ee,{light:d,dark:m,fallback:p,size:i})}),e]})}var Pe=createContext(null),Le=createContext(""),_e=({adapter:e,distributorId:t,children:o})=>jsx(Pe.Provider,{value:e,children:jsx(Le.Provider,{value:t,children:o})}),W=()=>{let e=useContext(Pe);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},P=()=>useContext(Le);function Be({children:e}){let t=F(),{theme:o,coreTokenCSS:r,fontPrimary:n,fontSecondary:a,widgetWidth:i}=N();return jsx("div",{className:B("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":n,"--font-secondary":a,fontFamily:n,backgroundColor:"transparent",maxHeight:"90vh"},children:jsx("div",{className:B("flex flex-col gap-2 h-full overflow-hidden",i==="full"?"w-full items-center":i==="custom"?"items-stretch":"items-center"),style:{...i==="custom"&&t.customWidth?{width:t.customWidth}:i==="default"?{width:"620px"}:{}},children:jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:e})})})}var O=()=>{let e=W(),t=useRef(void 0),o=useRef(false),{data:r,isLoading:n,refetch:a}=useCheckMembership({params:{address:e.user||"",walletEcosystem:"evm"},enabled:!!e.user}),{mutateAsync:i,isPending:c,error:s}=useCreateMembershipAgreement(),{mutateAsync:d,isPending:m,error:p}=useCreateMembership();useEffect(()=>{let g=e.user;if(!g){t.current!==void 0&&(t.current=void 0);return}g!==t.current&&(t.current=g,k(g));},[e.user]);let k=async g=>{if(!o.current){o.current=true;try{let{data:A}=await a();if(A?.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 R=await i({address:g,walletEcosystem:"evm",url:window.location.href,chainId:String(e.network||1)});console.log("[useWidgetAuth] Requesting signature from wallet...");let f=await e.signMessage(R.message);console.log("[useWidgetAuth] Creating membership with signature...");let C=await d({address:g,walletEcosystem:"evm",signature:f,nonce:R.nonce});C.isMember?console.log("[useWidgetAuth] Membership created successfully!"):console.error("[useWidgetAuth] Failed to create membership:",C.error);}catch(A){console.error("[useWidgetAuth] Membership flow error:",A);}finally{o.current=false;}}},u=n||c||m,l=s?.message||p?.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:u,error:l}};function Ue(e){let[t,o]=useState(e),r=useCallback(n=>{o(n);},[]);return {currentTab:t,setTab:r}}var Ut=atom({id:"none"});function h(){let[e,t]=useAtom(Ut),o=useCallback((n,a)=>{t({id:n,data:a});},[t]),r=useCallback(()=>{t({id:"none"});},[t]);return {currentOverlay:e.id,overlayData:e.data,isOverlayOpen:e.id!=="none",openOverlay:o,closeOverlay:r}}function ne({tabs:e,overlays:t,defaultTab:o}){let {showNavigation:r}=N(),{currentTab:n}=Ue(o),{currentOverlay:i,overlayData:c}=h();useMemo(()=>Object.entries(e).filter(([u,l])=>l.visible!==false).map(([u,l])=>({value:u,label:l.label})),[e]);let m=useMemo(()=>e[n].component,[n,e]),p=useMemo(()=>i==="none"?null:t[i].component,[i,t]);return jsxs(Fragment,{children:[r&&false,jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:jsx(te,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:p?jsx(p,{data:c}):jsx(m,{})})})})]})}function M({onBack:e,children:t,className:o}){let{closeOverlay:r}=h();return jsxs("div",{className:`flex flex-col h-full ${o||""}`,children:[jsx("div",{className:"flex items-center gap-2 pb-3",children:jsx(Button,{variant:"green",border:"interactive",size:"icon",onClick:e??r,className:"h-8 w-8 shrink-0","aria-label":"Go back",children:jsx(ChevronLeft,{className:"h-5 w-5"})})}),jsx("div",{className:"flex-1 min-h-0 overflow-auto pt-4",children:t})]})}var ae=atom(null),ie=atom(null),se=atom(SLIPPAGE_DEFAULT),de=atom(null),$e=atom(e=>{let t=e(ae),o=e(de),r=e(ie),n=e(se),a=!!(r&&Number.parseFloat(r)>0),i=!!t&&!!o&&a&&!!n,c=i?{chain:Number(t?.receiptToken?.chain.chainId)??1,token_in:o?.token.address??"",token_out:t?.receiptToken?.address??"",amount:parseUnits(r??"0",o?.token.decimals??18).toString(),slippage:n}:void 0;return {opportunity:t,tokenBalance:o,amount:r,options:c,isValid:i}});function T(){let[e,t]=useAtom(ae),[o,r]=useAtom(de),[n,a]=useAtom(ie),[i,c]=useAtom(se),s=useAtomValue($e),d=useCallback(()=>{r(null),a(""),c(SLIPPAGE_DEFAULT);},[r,a,c]);return useEffect(()=>{o&&(a(""),c(SLIPPAGE_DEFAULT));},[o,a,c]),{opportunity:e,tokenBalance:o,amount:n,slippage:i,isValid:s.isValid,options:s.options,selectOpportunity:t,selectTokenBalance:r,setAmount:a,setSlippage:c,reset:d}}function He(){let e=P(),{data:t,isLoading:o,error:r}=useWidgetOpportunities(e),{changeNetwork:n,network:a}=W(),{selectOpportunity:i,selectTokenBalance:c}=T(),{closeOverlay:s}=h();return o?jsx("div",{children:"Loading..."}):r?jsxs("div",{children:["Error: ",r.message]}):t===void 0?jsx("div",{children:"No data"}):t.opportunities&&t.opportunities.length===0?jsx("div",{children:"No opportunities"}):jsx(M,{children:jsx(OpportunitiesTable,{opportunities:t.opportunities||[],currentNetwork:a,onSelectOpportunity:i,onChangeNetwork:n,onResetToken:()=>c(null),onClose:s,isWidget:true})})}var Ye=()=>{let{openOverlay:e}=h();return jsx("button",{onClick:()=>{e("balances"),console.log("Positions Content Click");},children:"Positions Content Click"})};var Qe=()=>jsx("div",{children:"Discover Content"});function qe(e){return {chainId:Number(e.receiptToken?.chain.chainId)??mainnet.id,address:e.receiptToken?.address??"",symbol:e.receiptToken?.symbol??"",decimals:e.receiptToken?.decimals??18}}function et({opportunity:e,address:t,distributorId:o,executeTransaction:r,refetchBalances:n,refreshSelectedToken:a,stickyButton:i=false}){let{openOverlay:c}=h(),{chainId:s,symbol:d,decimals:m}=useMemo(()=>qe(e),[e]),{setAmount:p,setSlippage:k,tokenBalance:u,amount:l,slippage:g,options:A,isValid:R,reset:f}=T(),{usdValue:C,hasInsufficientBalance:y,handleMaxClick:I}=useTokenBalance({tokenBalance:u,amount:l??void 0,setAmount:w=>p(w??null)}),{routeDetails:D,isReady:ht,outputAmount:$,fetchedRoute:Z,routeError:pe,isLoadingRoute:fe}=useSwapRoute(R,t,o,A),vt=useCallback(async w=>{let ee={from:w.from,to:w.to,data:w.data,value:BigInt(w.value),chainId:s??1};return await r(ee)},[r,s]),{steps:yt,currentStep:ge,canExecute:he,isExecuting:z,allCompleted:bt,hasError:ve,cancelled:K,executeCurrentTransaction:ye,resetQueue:kt,totalSteps:be,completedSteps:ke,showTxStatus:j}=useTransactionQueue({earnRoute:Z,userAddress:t,chainId:s,sendTransaction:vt,onSuccess:()=>{n(),a();}}),Ct=useMemo(()=>{let w=l?formatNumber(l,6,true,false):"0",ee=$&&m?formatToken($,{decimals:m},true,false,6):"0";return {deposit:l?`${w} ${u?.token.symbol||"ETH"}`:"0 ETH",receive:$&&m?`${ee} ${d||"ETH"}`:"0 ETH",equivalentInUsd:l&&u?.token.priceUsd?(Number.parseFloat(l)*u.token.priceUsd).toFixed(2):"0.00",defaultOpen:true,slippage:g,setSlippage:k}},[l,$,m,d,u,g]);return jsxs("div",{className:cn("grid gap-3 flex-1 min-h-0",i?"grid-rows-[auto_1fr_auto] pb-6":"grid-rows-[auto_1fr]"),children:[jsx(SwapInput,{tokens:[],useCustomTokenSelector:true,selectedTokenData:u?.token,onCustomTokenSelectorClick:()=>c("balances"),value:l??void 0,onChange:p,usdValue:y?void 0:C,balance:u?formatToken(u.amount,u.token,true,false,5):"0",onMaxClick:I,className:cn("p-5",y?"border-destructive/50 border":"border-border border")}),jsxs("div",{className:"overflow-auto min-h-0 space-y-3",children:[ht&&D&&jsx(SwapDetails,{details:Ct}),D&&D.length>0&&jsx(RouteDetails,{value:{steps:D}}),ge&&l&&j&&jsx(TransactionStatusSection,{steps:yt,currentStep:ge,allCompleted:bt,cancelled:K,tokenSymbol:u?.token.symbol||"",amount:l,resetQueue:kt,resetForm:f,refetchBalances:n}),!i&&!j&&jsx("div",{className:"pt-3",children:jsx(ConfirmButton,{fetchedRoute:Z,routeError:pe,isLoadingRoute:fe,canExecute:he,isExecuting:z,hasError:ve,cancelled:K,executeCurrentTransaction:ye,totalSteps:be,completedSteps:ke,showingTransactionStatus:z,hasInsufficientBalance:y})})]}),i&&!j&&jsx("div",{className:"w-full",children:jsx(ConfirmButton,{fetchedRoute:Z,routeError:pe,isLoadingRoute:fe,canExecute:he,isExecuting:z,hasError:ve,cancelled:K,executeCurrentTransaction:ye,totalSteps:be,completedSteps:ke,showingTransactionStatus:z,hasInsufficientBalance:y})})]})}var bo=(e,t)=>{let o=e.filter(n=>Number(n.token.chain.chainId)===t);return o.filter(n=>(typeof n.amount=="bigint"?n.amount:BigInt(n.amount))>0n)[0]??o[0]??null};function ot(){let{user:e,network:t,sendTransaction:o}=W(),r=P(),{openOverlay:n}=h(),{tokenBalance:a,selectOpportunity:i,selectTokenBalance:c,opportunity:s}=T(),d=useRef(null),m=useRef(null),{balances:p,isLoading:k,refetchAll:u}=useBalance({chainIds:[Number(s?.receiptToken?.chain.chainId)??mainnet.id],address:e,depositOpportunity:s}),{data:l,isLoading:g}=useWidgetOpportunities(r);useEffect(()=>{if(l&&l.opportunities&&l.opportunities.length>0&&!s){let f=t??mainnet.id,y=l.opportunities.find(I=>Number(I.receiptToken?.chain.chainId)===f)||l.opportunities[0];i(y);}},[l,s,t]),useEffect(()=>{let f=t??mainnet.id;if(m.current!==null&&m.current!==f&&l?.opportunities&&l.opportunities.length>0){let y=l.opportunities.find(I=>Number(I.receiptToken?.chain.chainId)===f);y&&i(y);}m.current=f;},[t,l,i]),useEffect(()=>{let f=Number(s?.receiptToken?.chain.chainId)??mainnet.id,C=a?.token.chain.chainId,y=d.current!==f,I=!a||Number(C)!==f;if(y&&I&&p.length>0){let D=bo(p,f);D&&(c(D),d.current=f);}else y||(d.current=f);},[s,a,p,c]);let A=useMemo(()=>k||g,[k,g]),R=useCallback(()=>{if(!a)return;let f=p.find(C=>C.token.address.toLowerCase()===a.token.address.toLowerCase()&&Number(C.token.chain.chainId)===Number(a.token.chain.chainId));f&&c(f);},[p,a,c]);return {address:e,network:t,distributorId:r,openOverlay:n,sendTransaction:o,isLoading:A,refetchBalances:u,refreshSelectedToken:R}}function xo(e,t=4){return e?`${e.slice(0,t+2)}...${e.slice(-t)}`:""}function rt(){let{isMember:e,isLoading:t,address:o,isConnected:r,disconnect:n}=O();if(t)return jsx("div",{className:"h-10 w-[133px] animate-pulse rounded-full bg-neutral-alpha-10"});if(!r)return null;if(r&&e)return jsx(Button,{variant:"ghost",border:"bordered",onClick:n,className:"group min-w-[140px] transition-colors",children:jsxs("div",{className:"gap-2 flex text-md items-center justify-between",children:[jsx(Wallet2Icon,{className:"size-6 stroke-accent group-hover:hidden"}),jsx(LogOutIcon,{className:"hidden size-6 stroke-destructive group-hover:block"}),jsx("span",{className:"group-hover:hidden",children:xo(o)}),jsx("span",{className:"hidden group-hover:block text-foreground",children:"Disconnect"})]})})}function at(){let e=P(),{data:t}=useWidgetOpportunities(e),o=t?.chains||[],{changeNetwork:r,currentChain:n,isConnected:a}=O(),i=useMemo(()=>o.find(s=>Number(s.chainId)===n)||o[0],[o,n]),c=async s=>{try{await r(s);}catch(d){console.error("Failed to change network:",d);}};return a?jsxs(DropdownMenu,{children:[jsx(DropdownMenuTrigger,{src:i?.logoUrl,children:i?.name}),jsx(DropdownMenuContent,{children:o.map(s=>jsxs(DropdownMenuItem,{onClick:()=>c(Number(s.chainId)),children:[jsx("img",{src:s.logoUrl,alt:s.name,className:"size-6 rounded-full"}),s.name]},s.id))})]}):null}function ue(){return jsxs("div",{className:"flex justify-between items-center gap-2",children:[jsx(rt,{}),jsx(at,{})]})}var dt=()=>jsx("div",{className:"mt-5 flex flex-col gap-4 h-full",children:jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"flex gap-3",children:[jsx(Skeleton,{className:"h-12 flex-1 rounded-turtle"}),jsx(Skeleton,{className:"h-12 w-48 rounded-turtle"})]}),jsxs(Card,{variant:"shadow",gradient:"white",className:"rounded-turtle space-y-2",children:[jsxs("div",{className:"flex justify-between p-4",children:[jsx(Skeleton,{className:"h-8 w-24"}),jsx(Skeleton,{className:"h-8 w-56 rounded-full"})]}),jsxs("div",{className:"mx-4 mb-4 space-y-1",children:[jsxs("div",{className:"flex justify-between",children:[jsx(Skeleton,{className:"h-4 w-16"}),jsx(Skeleton,{className:"h-4 w-40"})]}),jsxs("div",{className:"flex justify-between",children:[jsx(Skeleton,{className:"h-4 w-16"}),jsx(Skeleton,{className:"h-4 w-40"})]})]})]}),jsxs(Card,{variant:"shadow",className:"rounded-turtle p-4",children:[jsx("div",{className:"mb-4",children:jsx(Skeleton,{className:"h-20 w-full rounded-turtle"})}),jsxs("div",{className:"flex justify-between items-center mb-4",children:[jsx(Skeleton,{className:"h-10 w-40 rounded-full"}),jsx(Skeleton,{className:"h-5 w-32"})]})]}),jsx(Skeleton,{className:"h-14 w-full rounded-turtle"})]})});var ct=()=>{let{isConnected:e,connect:t}=O(),{address:o,distributorId:r,openOverlay:n,sendTransaction:a,isLoading:i,refetchBalances:c,refreshSelectedToken:s}=ot(),{opportunity:d,amount:m,tokenBalance:p}=T(),k=u=>u.filter(l=>l.rewardType!=="points").reduce((l,g)=>l+(g.yield??0),0);return i?jsx(dt,{}):jsxs("div",{className:"mt-5 flex flex-col gap-4 h-full",children:[jsxs("div",{className:"text-foreground space-y-3",children:[jsx(ue,{}),jsxs(Card,{variant:"shadow",gradient:"white",className:cn("rounded-turtle space-y-2"),children:[jsxs("div",{className:"flex justify-between p-4",children:[jsx(APRBreakdownTooltip,{vaultConfig:d?.vaultConfig??void 0,incentives:d?.incentives||[],isWidget:true,className:"text-xl text-primary"}),jsx(BaseSelector,{icon:iconUrlToImg(d?.receiptToken?.logoUrl||"",d?.receiptToken?.symbol||""),text:d?.name||"",onClick:()=>n("opportunities"),size:"sm"})]}),jsx(OpportunityRateEstimator,{value:{symbol:d?.baseTokens?.symbol||"",price:d?.baseTokens?.priceUsd||0,depositedAmountUsd:Number(Number(m??0)*Number(p?.token.priceUsd??0))||0,apr:k(d?.incentives||[])}})]})]}),d&&o&&r&&jsx(et,{opportunity:d,address:o,distributorId:r,stickyButton:true,refetchBalances:c,refreshSelectedToken:s,executeTransaction:async u=>await a(u)}),!e&&jsx("div",{className:"mt-auto sticky bottom-0",children:jsx(Button,{variant:"green",border:"interactive",size:"lg",onClick:t,className:"w-full",children:"Connect Wallet"})})]})};function ut(){let{selectTokenBalance:e,opportunity:t}=T(),{closeOverlay:o}=h(),{user:r}=W(),n=Number(t?.receiptToken?.chain.chainId)??mainnet.id,{balances:a,isLoading:i,error:c}=useBalance({chainIds:[n],address:r||"",depositOpportunity:t}),s=useMemo(()=>a.filter(m=>Number(m.token.chain.chainId)===n),[a,n]),d=useCallback(m=>{e(m),o();},[e,o]);return c?jsxs("div",{children:["Error: ",c.message]}):jsx(M,{children:jsx(BalancesDataTable,{balances:s,isLoading:i,onBalanceSelect:d,emptyStateMessage:"No balances found"})})}function ft(){let{isMember:e}=O(),t=useMemo(()=>({positions:{label:"Your Positions",component:Ye,visible:e},earn:{label:"Earn",component:ct},discover:{label:"Discover",component:Qe}}),[e]),o=useMemo(()=>({opportunities:{component:He},balances:{component:ut}}),[]);return jsx(Be,{children:jsx(ne,{tabs:t,overlays:o,defaultTab:"earn"})})}function gt({adapter:e,config:t,distributorId:o}){return jsx(Te,{config:t,children:jsx(_e,{adapter:e,distributorId:o,children:jsx(ft,{})})})}var Go={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
1
+ import {clsx}from'clsx';import {createContext,useMemo,useRef,useEffect,useCallback,useContext,useState}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {Card,BaseSelector,iconUrlToImg,OpportunityRateEstimator,cn,Button,Skeleton,SwapInput,SwapDetails,DropdownMenu,DropdownMenuTrigger,DropdownMenuContent,DropdownMenuItem}from'@turtleclub/ui';import {cva}from'class-variance-authority';import {useCheckMembership,useCreateMembershipAgreement,useCreateMembership,useBalance,useWidgetOpportunities,useTokenBalance,useSwapRoute}from'@turtleclub/hooks';import {atom,useAtom,useAtomValue}from'jotai';import {ChevronLeft,Wallet2Icon,LogOutIcon}from'lucide-react';import {SLIPPAGE_DEFAULT,APRBreakdownTooltip,BalancesDataTable,OpportunitiesTable,useTransactionQueue,RouteDetails,TransactionStatusSection,ConfirmButton}from'@turtleclub/opportunities';import {parseUnits}from'viem';import {formatNumber,formatToken}from'@turtleclub/utils';import {mainnet}from'viem/chains';function B(...e){return clsx(e)}var Ce=createContext(null);function Te({config:e,children:t}){return jsx(Ce.Provider,{value:e,children:t})}function F(){let e=useContext(Ce);if(!e)throw new Error("useWidgetConfig must be used within WidgetConfigProvider");return e}function H(e){return `rgb(from ${e} calc(255 - r) calc(255 - g) calc(255 - b))`}function Wt(e,t=10){return `color-mix(in srgb, ${e} ${100-t}%, black)`}function xe(e,t){let o=t==="dark",r={"--color-brand-black":o?e.background_dark:H(e.background_dark),"--color-brand-white":o?e.foreground_dark:H(e.foreground_dark),"--color-brand-green":o?e.primary_dark:Wt(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:H(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:H(e.muted_foreground_dark??e.muted_foreground_dark??e.foreground_dark)),r}var we={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"},Ne="dark",We="Montserrat, sans-serif",Oe="DM Sans, sans-serif";function N(){let e=F(),t=e?.theme??Ne,o=e?.fontFamily??We,r=e?.fontSecondary??Oe,n=e?.widgetWidth??"default",a=e?.customWidth??"100%",i=e?.showNavigation??true,c=e?.padding??"default",s=e?.rounding??"default",d=e?.styles??we,p=xe(d,t==="auto"?"dark":t);return {theme:t,coreTokenCSS:p,fontPrimary:o,fontSecondary:r,widgetWidth:n,customWidth:a,showNavigation:i,padding:c,rounding:s,config:e,widgetStyles:d}}var Se={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 Ee({light:e,dark:t,fallback:o="Turtle Club",className:r,size:n="lg"}){let[a,i]=useState(false),{theme:c}=N(),d=c==="dark"?t||e:e||t;return d&&!a?jsx("div",{className:cn("flex justify-center items-center",r),children:jsx("img",{src:d,alt:o,className:cn("object-contain",Se[n]),onError:()=>i(true),onLoad:()=>i(false)})}):jsx("div",{className:cn("flex justify-center items-center",r),children:jsx("span",{className:cn("font-bold text-primary",Se[n]),children:o})})}function Ae(){let e=F();return {light:e?.logo?.light,dark:e?.logo?.dark,fallback:e?.logo?.fallback||"Turtle Club"}}var At=cva("p-0",{variants:{padding:{none:"p-0",sm:"p-3",default:"p-4",md:"p-6",lg:"p-7"}},defaultVariants:{padding:"default"}});function te({children:e,className:t,variant:o,padding:r,rounding:n,showLogo:a=true,logoSize:i="xs",...c}){let{padding:s}=N(),{light:d,dark:m,fallback:p}=Ae(),k=At({padding:r??s});return jsxs(Card,{className:B(t,k),...c,variant:o,gradient:"white",children:[a&&jsx("div",{className:"flex-shrink-0 py-2",children:jsx(Ee,{light:d,dark:m,fallback:p,size:i})}),e]})}var Pe=createContext(null),Le=createContext(""),_e=({adapter:e,distributorId:t,children:o})=>jsx(Pe.Provider,{value:e,children:jsx(Le.Provider,{value:t,children:o})}),W=()=>{let e=useContext(Pe);if(!e)throw new Error("useAdapter must be used within an AdapterProvider");return e},P=()=>useContext(Le);function Be({children:e}){let t=F(),{theme:o,coreTokenCSS:r,fontPrimary:n,fontSecondary:a,widgetWidth:i}=N();return jsx("div",{className:B("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":n,"--font-secondary":a,fontFamily:n,backgroundColor:"transparent",maxHeight:"90vh"},children:jsx("div",{className:B("flex flex-col gap-2 h-full overflow-hidden",i==="full"?"w-full items-center":i==="custom"?"items-stretch":"items-center"),style:{...i==="custom"&&t.customWidth?{width:t.customWidth}:i==="default"?{width:"620px"}:{}},children:jsx("div",{className:"w-full max-w-md h-full flex flex-col gap-2 overflow-hidden",children:e})})})}var O=()=>{let e=W(),t=useRef(void 0),o=useRef(false),{data:r,isLoading:n,refetch:a}=useCheckMembership({params:{address:e.user||"",walletEcosystem:"evm"},enabled:!!e.user}),{mutateAsync:i,isPending:c,error:s}=useCreateMembershipAgreement(),{mutateAsync:d,isPending:m,error:p}=useCreateMembership();useEffect(()=>{let g=e.user;if(!g){t.current!==void 0&&(t.current=void 0);return}g!==t.current&&(t.current=g,k(g));},[e.user]);let k=async g=>{if(!o.current){o.current=true;try{let{data:A}=await a();if(A?.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 R=await i({address:g,walletEcosystem:"evm",url:window.location.href,chainId:String(e.network||1)});console.log("[useWidgetAuth] Requesting signature from wallet...");let f=await e.signMessage(R.message);console.log("[useWidgetAuth] Creating membership with signature...");let C=await d({address:g,walletEcosystem:"evm",signature:f,nonce:R.nonce});C.isMember?console.log("[useWidgetAuth] Membership created successfully!"):console.error("[useWidgetAuth] Failed to create membership:",C.error);}catch(A){console.error("[useWidgetAuth] Membership flow error:",A);}finally{o.current=false;}}},u=n||c||m,l=s?.message||p?.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:u,error:l}};function Ue(e){let[t,o]=useState(e),r=useCallback(n=>{o(n);},[]);return {currentTab:t,setTab:r}}var Ut=atom({id:"none"});function h(){let[e,t]=useAtom(Ut),o=useCallback((n,a)=>{t({id:n,data:a});},[t]),r=useCallback(()=>{t({id:"none"});},[t]);return {currentOverlay:e.id,overlayData:e.data,isOverlayOpen:e.id!=="none",openOverlay:o,closeOverlay:r}}function ne({tabs:e,overlays:t,defaultTab:o}){let {showNavigation:r}=N(),{currentTab:n}=Ue(o),{currentOverlay:i,overlayData:c}=h();useMemo(()=>Object.entries(e).filter(([u,l])=>l.visible!==false).map(([u,l])=>({value:u,label:l.label})),[e]);let m=useMemo(()=>e[n].component,[n,e]),p=useMemo(()=>i==="none"?null:t[i].component,[i,t]);return jsxs(Fragment,{children:[r&&false,jsx("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col gap-2 bg-transparent",children:jsx(te,{variant:"border",className:"flex-1 min-h-0 w-full flex flex-col overflow-hidden",children:jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:p?jsx(p,{data:c}):jsx(m,{})})})})]})}function M({onBack:e,children:t,className:o}){let{closeOverlay:r}=h();return jsxs("div",{className:`flex flex-col h-full ${o||""}`,children:[jsx("div",{className:"flex items-center gap-2 pb-3",children:jsx(Button,{variant:"green",border:"interactive",size:"icon",onClick:e??r,className:"h-8 w-8 shrink-0","aria-label":"Go back",children:jsx(ChevronLeft,{className:"h-5 w-5"})})}),jsx("div",{className:"flex-1 min-h-0 overflow-auto pt-4",children:t})]})}var ae=atom(null),ie=atom(null),se=atom(SLIPPAGE_DEFAULT),de=atom(null),$e=atom(e=>{let t=e(ae),o=e(de),r=e(ie),n=e(se),a=!!(r&&Number.parseFloat(r)>0),i=!!t&&!!o&&a&&!!n,c=i?{chain:Number(t?.receiptToken?.chain.chainId)??1,token_in:o?.token.address??"",token_out:t?.receiptToken?.address??"",amount:parseUnits(r??"0",o?.token.decimals??18).toString(),slippage:n}:void 0;return {opportunity:t,tokenBalance:o,amount:r,options:c,isValid:i}});function T(){let[e,t]=useAtom(ae),[o,r]=useAtom(de),[n,a]=useAtom(ie),[i,c]=useAtom(se),s=useAtomValue($e),d=useCallback(()=>{r(null),a(""),c(SLIPPAGE_DEFAULT);},[r,a,c]);return useEffect(()=>{o&&(a(""),c(SLIPPAGE_DEFAULT));},[o,a,c]),{opportunity:e,tokenBalance:o,amount:n,slippage:i,isValid:s.isValid,options:s.options,selectOpportunity:t,selectTokenBalance:r,setAmount:a,setSlippage:c,reset:d}}function He(){let e=P(),{data:t,isLoading:o,error:r}=useWidgetOpportunities(e),{changeNetwork:n,network:a}=W(),{selectOpportunity:i,selectTokenBalance:c}=T(),{closeOverlay:s}=h();return o?jsx("div",{children:"Loading..."}):r?jsxs("div",{children:["Error: ",r.message]}):t===void 0?jsx("div",{children:"No data"}):t.opportunities&&t.opportunities.length===0?jsx("div",{children:"No opportunities"}):jsx(M,{children:jsx(OpportunitiesTable,{opportunities:t.opportunities||[],currentNetwork:a,onSelectOpportunity:i,onChangeNetwork:n,onResetToken:()=>c(null),onClose:s,isWidget:true})})}var Ye=()=>{let{openOverlay:e}=h();return jsx("button",{onClick:()=>{e("balances"),console.log("Positions Content Click");},children:"Positions Content Click"})};var Qe=()=>jsx("div",{children:"Discover Content"});function qe(e){return {chainId:Number(e.receiptToken?.chain.chainId)??mainnet.id,address:e.receiptToken?.address??"",symbol:e.receiptToken?.symbol??"",decimals:e.receiptToken?.decimals??18}}function et({opportunity:e,address:t,distributorId:o,executeTransaction:r,refetchBalances:n,refreshSelectedToken:a,stickyButton:i=false}){let{openOverlay:c}=h(),{chainId:s,symbol:d,decimals:m}=useMemo(()=>qe(e),[e]),{setAmount:p,setSlippage:k,tokenBalance:u,amount:l,slippage:g,options:A,isValid:R,reset:f}=T(),{usdValue:C,hasInsufficientBalance:y,handleMaxClick:I}=useTokenBalance({tokenBalance:u,amount:l??void 0,setAmount:w=>p(w??null)}),{routeDetails:D,isReady:ht,outputAmount:$,fetchedRoute:Z,routeError:pe,isLoadingRoute:fe}=useSwapRoute(R,t,o,A),vt=useCallback(async w=>{let ee={from:w.from,to:w.to,data:w.data,value:BigInt(w.value),chainId:s??1};return await r(ee)},[r,s]),{steps:yt,currentStep:ge,canExecute:he,isExecuting:z,allCompleted:bt,hasError:ve,cancelled:K,executeCurrentTransaction:ye,resetQueue:kt,totalSteps:be,completedSteps:ke,showTxStatus:j}=useTransactionQueue({earnRoute:Z,userAddress:t,chainId:s,sendTransaction:vt,onSuccess:()=>{n(),a();}}),Ct=useMemo(()=>{let w=l?formatNumber(l,6,true,false):"0",ee=$&&m?formatToken($,{decimals:m},true,false,6):"0";return {deposit:l?`${w} ${u?.token.symbol||"ETH"}`:"0 ETH",receive:$&&m?`${ee} ${d||"ETH"}`:"0 ETH",equivalentInUsd:l&&u?.token.priceUsd?(Number.parseFloat(l)*u.token.priceUsd).toFixed(2):"0.00",defaultOpen:true,slippage:g,setSlippage:k}},[l,$,m,d,u,g]);return jsxs("div",{className:cn("grid gap-3 flex-1 min-h-0",i?"grid-rows-[auto_1fr_auto] pb-6":"grid-rows-[auto_1fr]"),children:[jsx(SwapInput,{tokens:[],useCustomTokenSelector:true,selectedTokenData:u?.token,onCustomTokenSelectorClick:()=>c("balances"),value:l??void 0,onChange:p,usdValue:y?void 0:C,balance:u?formatToken(u.amount,u.token,true,false,5):"0",onMaxClick:I,className:cn("p-5",y?"border-destructive/50 border":"border-border border")}),jsxs("div",{className:"overflow-auto min-h-0 space-y-3",children:[ht&&D&&jsx(SwapDetails,{details:Ct}),D&&D.length>0&&jsx(RouteDetails,{value:{steps:D}}),ge&&l&&j&&jsx(TransactionStatusSection,{steps:yt,currentStep:ge,allCompleted:bt,cancelled:K,tokenSymbol:u?.token.symbol||"",amount:l,resetQueue:kt,resetForm:f,refetchBalances:n}),!i&&!j&&jsx("div",{className:"pt-3",children:jsx(ConfirmButton,{fetchedRoute:Z,routeError:pe,isLoadingRoute:fe,canExecute:he,isExecuting:z,hasError:ve,cancelled:K,executeCurrentTransaction:ye,totalSteps:be,completedSteps:ke,showingTransactionStatus:z,hasInsufficientBalance:y})})]}),i&&!j&&jsx("div",{className:"w-full",children:jsx(ConfirmButton,{fetchedRoute:Z,routeError:pe,isLoadingRoute:fe,canExecute:he,isExecuting:z,hasError:ve,cancelled:K,executeCurrentTransaction:ye,totalSteps:be,completedSteps:ke,showingTransactionStatus:z,hasInsufficientBalance:y})})]})}var bo=(e,t)=>{let o=e.filter(n=>Number(n.token.chain.chainId)===t);return o.filter(n=>(typeof n.amount=="bigint"?n.amount:BigInt(n.amount))>0n)[0]??o[0]??null};function ot(){let{user:e,network:t,sendTransaction:o}=W(),r=P(),{openOverlay:n}=h(),{tokenBalance:a,selectOpportunity:i,selectTokenBalance:c,opportunity:s}=T(),d=useRef(null),m=useRef(null),{balances:p,isLoading:k,refetchAll:u}=useBalance({chainIds:[Number(s?.receiptToken?.chain.chainId)??mainnet.id],address:e,depositOpportunity:s}),{data:l,isLoading:g}=useWidgetOpportunities(r);useEffect(()=>{if(l&&l.opportunities&&l.opportunities.length>0&&!s){let f=t??mainnet.id,y=l.opportunities.find(I=>Number(I.receiptToken?.chain.chainId)===f)||l.opportunities[0];i(y);}},[l,s,t]),useEffect(()=>{let f=t??mainnet.id;if(m.current!==null&&m.current!==f&&l?.opportunities&&l.opportunities.length>0){let y=l.opportunities.find(I=>Number(I.receiptToken?.chain.chainId)===f);y&&i(y);}m.current=f;},[t,l,i]),useEffect(()=>{let f=Number(s?.receiptToken?.chain.chainId)??mainnet.id,C=a?.token.chain.chainId,y=d.current!==f,I=!a||Number(C)!==f;if(y&&I&&p.length>0){let D=bo(p,f);D&&(c(D),d.current=f);}else y||(d.current=f);},[s,a,p,c]);let A=useMemo(()=>k||g,[k,g]),R=useCallback(()=>{if(!a)return;let f=p.find(C=>C.token.address.toLowerCase()===a.token.address.toLowerCase()&&Number(C.token.chain.chainId)===Number(a.token.chain.chainId));f&&c(f);},[p,a,c]);return {address:e,network:t,distributorId:r,openOverlay:n,sendTransaction:o,isLoading:A,refetchBalances:u,refreshSelectedToken:R}}function xo(e,t=4){return e?`${e.slice(0,t+2)}...${e.slice(-t)}`:""}function rt(){let{isMember:e,isLoading:t,address:o,isConnected:r,disconnect:n}=O();if(t)return jsx("div",{className:"h-10 w-[133px] animate-pulse rounded-full bg-neutral-alpha-10"});if(!r)return null;if(r&&e)return jsx(Button,{variant:"ghost",border:"bordered",onClick:n,className:"group min-w-[140px] transition-colors",children:jsxs("div",{className:"gap-2 flex text-md items-center justify-between",children:[jsx(Wallet2Icon,{className:"size-6 stroke-accent group-hover:hidden"}),jsx(LogOutIcon,{className:"hidden size-6 stroke-destructive group-hover:block"}),jsx("span",{className:"group-hover:hidden",children:xo(o)}),jsx("span",{className:"hidden group-hover:block text-foreground",children:"Disconnect"})]})})}function at(){let e=P(),{data:t}=useWidgetOpportunities(e),o=t?.chains||[],{changeNetwork:r,currentChain:n,isConnected:a}=O(),i=useMemo(()=>o.find(s=>Number(s.chainId)===n)||o[0],[o,n]),c=async s=>{try{await r(s);}catch(d){console.error("Failed to change network:",d);}};return a?jsxs(DropdownMenu,{children:[jsx(DropdownMenuTrigger,{src:i?.logoUrl,children:i?.name}),jsx(DropdownMenuContent,{children:o.map(s=>jsxs(DropdownMenuItem,{onClick:()=>c(Number(s.chainId)),children:[jsx("img",{src:s.logoUrl,alt:s.name,className:"size-6 rounded-full"}),s.name]},s.id))})]}):null}function ue(){return jsxs("div",{className:"flex justify-between items-center gap-2",children:[jsx(rt,{}),jsx(at,{})]})}var dt=()=>jsx("div",{className:"mt-5 flex flex-col gap-4 h-full",children:jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"flex gap-3",children:[jsx(Skeleton,{className:"h-12 flex-1 rounded-turtle"}),jsx(Skeleton,{className:"h-12 w-48 rounded-turtle"})]}),jsxs(Card,{variant:"shadow",gradient:"white",className:"rounded-turtle space-y-2",children:[jsxs("div",{className:"flex justify-between p-4",children:[jsx(Skeleton,{className:"h-8 w-24"}),jsx(Skeleton,{className:"h-8 w-56 rounded-full"})]}),jsxs("div",{className:"mx-4 mb-4 space-y-1",children:[jsxs("div",{className:"flex justify-between",children:[jsx(Skeleton,{className:"h-4 w-16"}),jsx(Skeleton,{className:"h-4 w-40"})]}),jsxs("div",{className:"flex justify-between",children:[jsx(Skeleton,{className:"h-4 w-16"}),jsx(Skeleton,{className:"h-4 w-40"})]})]})]}),jsxs(Card,{variant:"shadow",className:"rounded-turtle p-4",children:[jsx("div",{className:"mb-4",children:jsx(Skeleton,{className:"h-20 w-full rounded-turtle"})}),jsxs("div",{className:"flex justify-between items-center mb-4",children:[jsx(Skeleton,{className:"h-10 w-40 rounded-full"}),jsx(Skeleton,{className:"h-5 w-32"})]})]}),jsx(Skeleton,{className:"h-14 w-full rounded-turtle"})]})});var ct=()=>{let{isConnected:e,connect:t}=O(),{address:o,distributorId:r,openOverlay:n,sendTransaction:a,isLoading:i,refetchBalances:c,refreshSelectedToken:s}=ot(),{opportunity:d,amount:m,tokenBalance:p}=T(),k=u=>u.filter(l=>l.rewardType!=="points").reduce((l,g)=>l+(g.yield??0),0);return i?jsx(dt,{}):jsxs("div",{className:"mt-5 flex flex-col gap-4 h-full",children:[jsxs("div",{className:"text-foreground space-y-3",children:[jsx(ue,{}),jsxs(Card,{variant:"shadow",gradient:"white",className:cn("rounded-turtle space-y-2"),children:[jsxs("div",{className:"flex justify-between p-4",children:[jsx(APRBreakdownTooltip,{vaultConfig:d?.vaultConfig??void 0,incentives:d?.incentives||[],isWidget:true,className:"text-xl text-primary"}),jsx(BaseSelector,{icon:iconUrlToImg(d?.receiptToken?.logoUrl||"",d?.receiptToken?.symbol||""),text:d?.name||"",onClick:()=>n("opportunities"),size:"sm"})]}),jsx(OpportunityRateEstimator,{value:{symbol:d?.baseTokens?.symbol||"",price:d?.baseTokens?.priceUsd||0,depositedAmountUsd:Number(Number(m??0)*Number(p?.token.priceUsd??0))||0,apr:k(d?.incentives||[])}})]})]}),d&&o&&r&&jsx(et,{opportunity:d,address:o,distributorId:r,stickyButton:true,refetchBalances:c,refreshSelectedToken:s,executeTransaction:async u=>await a(u)}),!e&&jsx("div",{className:"mt-auto sticky bottom-0",children:jsx(Button,{variant:"green",border:"interactive",size:"lg",onClick:t,className:"w-full",children:"Connect Wallet"})})]})};function ut(){let{selectTokenBalance:e,opportunity:t}=T(),{closeOverlay:o}=h(),{user:r}=W(),n=Number(t?.receiptToken?.chain.chainId)??mainnet.id,{balances:a,isLoading:i,error:c}=useBalance({chainIds:[n],address:r||"",depositOpportunity:t}),s=useMemo(()=>a.filter(m=>Number(m.token.chain.chainId)===n),[a,n]),d=useCallback(m=>{e(m),o();},[e,o]);return c?jsxs("div",{children:["Error: ",c.message]}):jsx(M,{children:jsx(BalancesDataTable,{balances:s,isLoading:i,onBalanceSelect:d,emptyStateMessage:"No balances found"})})}function ft(){let{isMember:e}=O(),t=useMemo(()=>({positions:{label:"Your Positions",component:Ye,visible:e},earn:{label:"Earn",component:ct},discover:{label:"Discover",component:Qe}}),[e]),o=useMemo(()=>({opportunities:{component:He},balances:{component:ut}}),[]);return jsx(Be,{children:jsx(ne,{tabs:t,overlays:o,defaultTab:"earn"})})}function gt({adapter:e,config:t,distributorId:o}){return jsx(Te,{config:t,children:jsx(_e,{adapter:e,distributorId:o,children:jsx(ft,{})})})}var Go={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
2
  export{gt as EarnWidget,Go as defaultWidgetStyleConfig};//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/styles.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
2
  @layer properties;
3
3
  @layer properties {
4
4
  @supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))) {
@@ -204,6 +204,10 @@
204
204
  --color-chart-3: var(--chart-3);
205
205
  --color-chart-4: var(--chart-4);
206
206
  --color-chart-5: var(--chart-5);
207
+ --color-chart-6: var(--chart-6);
208
+ --color-chart-7: var(--chart-7);
209
+ --color-chart-8: var(--chart-8);
210
+ --color-chart-9: var(--chart-9);
207
211
  --border-gradient-white: linear-gradient(175deg,var(--color-neutral-alpha-50)0%,var(--color-neutral-alpha-5)40%,var(--color-neutral-alpha-2)62%,var(--color-neutral-alpha-20)100%)border-box;
208
212
  --border-gradient-soft: linear-gradient(165deg,var(--color-neutral-alpha-20)0%,var(--color-neutral-alpha-2)40%,var(--color-neutral-alpha-2)62%,var(--color-neutral-alpha-5)100%)border-box;
209
213
  --border-gradient-primary: linear-gradient(175deg,var(--color-primary-alpha-50)0%,var(--color-primary-alpha-20)40%,var(--color-primary-alpha-10)62%,var(--color-primary-alpha-30)100%)border-box;
@@ -942,6 +946,9 @@
942
946
  .turtle-widget-root .field-sizing-content {
943
947
  field-sizing: content;
944
948
  }
949
+ .turtle-widget-root .aspect-\[4\/3\] {
950
+ aspect-ratio: 4/3;
951
+ }
945
952
  .turtle-widget-root .aspect-square {
946
953
  aspect-ratio: 1;
947
954
  }
@@ -1033,6 +1040,9 @@
1033
1040
  .turtle-widget-root .h-9 {
1034
1041
  height: calc(var(--spacing)*9);
1035
1042
  }
1043
+ .turtle-widget-root .h-9\! {
1044
+ height: calc(var(--spacing)*9) !important;
1045
+ }
1036
1046
  .turtle-widget-root .h-10 {
1037
1047
  height: calc(var(--spacing)*10);
1038
1048
  }
@@ -1339,6 +1349,9 @@
1339
1349
  .turtle-widget-root .rotate-45 {
1340
1350
  rotate: 45deg;
1341
1351
  }
1352
+ .turtle-widget-root .rotate-90 {
1353
+ rotate: 90deg;
1354
+ }
1342
1355
  .turtle-widget-root .rotate-180 {
1343
1356
  rotate: 180deg;
1344
1357
  }
@@ -1417,6 +1430,9 @@
1417
1430
  .turtle-widget-root .flex-wrap {
1418
1431
  flex-wrap: wrap;
1419
1432
  }
1433
+ .turtle-widget-root .place-items-center {
1434
+ place-items: center;
1435
+ }
1420
1436
  .turtle-widget-root .items-center {
1421
1437
  align-items: center;
1422
1438
  }
@@ -1693,9 +1709,6 @@
1693
1709
  .turtle-widget-root .bg-card {
1694
1710
  background-color: var(--color-card);
1695
1711
  }
1696
- .turtle-widget-root .bg-foreground {
1697
- background-color: var(--color-foreground);
1698
- }
1699
1712
  .turtle-widget-root .bg-muted {
1700
1713
  background-color: var(--color-muted);
1701
1714
  }
@@ -1733,7 +1746,18 @@
1733
1746
  .turtle-widget-root .bg-popover {
1734
1747
  background-color: var(--color-popover);
1735
1748
  }
1736
- .turtle-widget-root .bg-primary, .turtle-widget-root .bg-primary\/20 {
1749
+ .turtle-widget-root .bg-primary, .turtle-widget-root .bg-primary\/10 {
1750
+ background-color: var(--color-primary);
1751
+ }
1752
+ @supports (color:color-mix(in lab,red,red)) {
1753
+ .turtle-widget-root .bg-primary\/10 {
1754
+ background-color: var(--color-primary);
1755
+ @supports (color: color-mix(in lab, red, red)) {
1756
+ background-color: color-mix(in oklab,var(--color-primary)10%,transparent);
1757
+ }
1758
+ }
1759
+ }
1760
+ .turtle-widget-root .bg-primary\/20 {
1737
1761
  background-color: var(--color-primary);
1738
1762
  }
1739
1763
  @supports (color:color-mix(in lab,red,red)) {
@@ -1744,6 +1768,17 @@
1744
1768
  }
1745
1769
  }
1746
1770
  }
1771
+ .turtle-widget-root .bg-primary\/50 {
1772
+ background-color: var(--color-primary);
1773
+ }
1774
+ @supports (color:color-mix(in lab,red,red)) {
1775
+ .turtle-widget-root .bg-primary\/50 {
1776
+ background-color: var(--color-primary);
1777
+ @supports (color: color-mix(in lab, red, red)) {
1778
+ background-color: color-mix(in oklab,var(--color-primary)50%,transparent);
1779
+ }
1780
+ }
1781
+ }
1747
1782
  .turtle-widget-root .bg-secondary {
1748
1783
  background-color: var(--color-secondary);
1749
1784
  }
@@ -2318,17 +2353,14 @@
2318
2353
  }
2319
2354
  }
2320
2355
  }
2321
- .turtle-widget-root .ring-primary {
2356
+ .turtle-widget-root .ring-primary, .turtle-widget-root .ring-primary\/20 {
2322
2357
  --tw-ring-color: var(--color-primary);
2323
2358
  }
2324
- .turtle-widget-root .ring-ring\/50 {
2325
- --tw-ring-color: var(--color-ring);
2326
- }
2327
2359
  @supports (color:color-mix(in lab,red,red)) {
2328
- .turtle-widget-root .ring-ring\/50 {
2329
- --tw-ring-color: var(--color-ring);
2360
+ .turtle-widget-root .ring-primary\/20 {
2361
+ --tw-ring-color: var(--color-primary);
2330
2362
  @supports (color: color-mix(in lab, red, red)) {
2331
- --tw-ring-color: color-mix(in oklab,var(--color-ring)50%,transparent);
2363
+ --tw-ring-color: color-mix(in oklab,var(--color-primary)20%,transparent);
2332
2364
  }
2333
2365
  }
2334
2366
  }
@@ -2992,8 +3024,8 @@
2992
3024
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);
2993
3025
  box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
2994
3026
  }
2995
- .turtle-widget-root .hover\:ring-4:hover {
2996
- --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
3027
+ .turtle-widget-root .hover\:ring-\[6px\]:hover {
3028
+ --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(6px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
2997
3029
  box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
2998
3030
  }
2999
3031
  .turtle-widget-root .hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *) {
@@ -3105,14 +3137,14 @@
3105
3137
  --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
3106
3138
  box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
3107
3139
  }
3108
- .turtle-widget-root .focus-visible\:ring-4:focus-visible {
3109
- --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
3110
- box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
3111
- }
3112
3140
  .turtle-widget-root .focus-visible\:ring-\[3px\]:focus-visible {
3113
3141
  --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
3114
3142
  box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
3115
3143
  }
3144
+ .turtle-widget-root .focus-visible\:ring-\[6px\]:focus-visible {
3145
+ --tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(6px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);
3146
+ box-shadow: var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);
3147
+ }
3116
3148
  .turtle-widget-root .focus-visible\:ring-destructive\/20:focus-visible {
3117
3149
  --tw-ring-color: var(--color-destructive);
3118
3150
  }
@@ -4575,11 +4607,15 @@
4575
4607
  --sidebar: var(--color-neutral-base-850);
4576
4608
  --sidebar-foreground: var(--color-brand-white);
4577
4609
  --radius: var(--radius-turtle);
4578
- --chart-1: var(--color-brand-green);
4579
- --chart-2: var(--color-info);
4580
- --chart-3: var(--color-warning);
4581
- --chart-4: var(--color-error);
4582
- --chart-5: var(--color-success);
4610
+ --chart-1: oklch(75% .17 164);
4611
+ --chart-2: oklch(72% .14 200);
4612
+ --chart-3: oklch(56% .18 272);
4613
+ --chart-4: oklch(68% .13 192);
4614
+ --chart-5: oklch(72% .18 350);
4615
+ --chart-6: oklch(75% .15 75);
4616
+ --chart-7: oklch(70% .14 230);
4617
+ --chart-8: oklch(62% .02 60);
4618
+ --chart-9: oklch(58% .02 240);
4583
4619
  }
4584
4620
  .turtle-widget-root .light {
4585
4621
  --background: var(--color-brand-white);
@@ -5045,6 +5081,10 @@
5045
5081
  --color-chart-3: var(--chart-3);
5046
5082
  --color-chart-4: var(--chart-4);
5047
5083
  --color-chart-5: var(--chart-5);
5084
+ --color-chart-6: var(--chart-6);
5085
+ --color-chart-7: var(--chart-7);
5086
+ --color-chart-8: var(--chart-8);
5087
+ --color-chart-9: var(--chart-9);
5048
5088
  --border-gradient-white: linear-gradient(
5049
5089
  175deg,
5050
5090
  var(--color-neutral-alpha-50) 0%,
@@ -5888,51 +5928,37 @@
5888
5928
  --tracking-widest: 0.1em;
5889
5929
  }
5890
5930
  .turtle-widget-root {
5891
- --background: var(
5892
- --color-brand-black
5893
- );
5931
+ --background: var(--color-brand-black);
5894
5932
  --foreground: var(--color-brand-white);
5895
5933
  --card: var(--color-brand-black);
5896
5934
  --card-foreground: var(--color-brand-white);
5897
5935
  --popover: var(--color-brand-black);
5898
- --popover-foreground: var(
5899
- --color-brand-white
5900
- );
5936
+ --popover-foreground: var(--color-brand-white);
5901
5937
  --primary: var(--color-brand-green);
5902
- --primary-foreground: var(
5903
- --color-brand-black
5904
- );
5905
- --secondary: var(
5906
- --color-neutral-base-800
5907
- );
5938
+ --primary-foreground: var(--color-brand-black);
5939
+ --secondary: var(--color-neutral-base-800);
5908
5940
  --secondary-foreground: var(--color-brand-white);
5909
5941
  --muted: var(--color-neutral-base-850);
5910
- --muted-foreground: var(
5911
- --color-neutral-alpha-50
5912
- );
5942
+ --muted-foreground: var(--color-neutral-alpha-50);
5913
5943
  --accent: var(--color-brand-green);
5914
- --accent-foreground: var(
5915
- --color-brand-black
5916
- );
5944
+ --accent-foreground: var(--color-brand-black);
5917
5945
  --destructive: var(--color-error);
5918
- --destructive-foreground: var(
5919
- --color-brand-white
5920
- );
5921
- --border: var(
5922
- --color-neutral-alpha-10
5923
- );
5924
- --input: var(
5925
- --color-neutral-alpha-2
5926
- );
5946
+ --destructive-foreground: var(--color-brand-white);
5947
+ --border: var(--color-neutral-alpha-10);
5948
+ --input: var(--color-neutral-alpha-2);
5927
5949
  --ring: var(--color-brand-green);
5928
5950
  --sidebar: var(--color-neutral-base-850);
5929
5951
  --sidebar-foreground: var(--color-brand-white);
5930
5952
  --radius: var(--radius-turtle);
5931
- --chart-1: var(--color-brand-green);
5932
- --chart-2: var(--color-info);
5933
- --chart-3: var(--color-warning);
5934
- --chart-4: var(--color-error);
5935
- --chart-5: var(--color-success);
5953
+ --chart-1: oklch(0.75 0.17 164);
5954
+ --chart-2: oklch(0.72 0.14 200);
5955
+ --chart-3: oklch(0.56 0.18 272);
5956
+ --chart-4: oklch(0.68 0.13 192);
5957
+ --chart-5: oklch(0.72 0.18 350);
5958
+ --chart-6: oklch(0.75 0.15 75);
5959
+ --chart-7: oklch(0.7 0.14 230);
5960
+ --chart-8: oklch(0.62 0.02 60);
5961
+ --chart-9: oklch(0.58 0.02 240);
5936
5962
  }
5937
5963
  .turtle-widget-root .light {
5938
5964
  --background: var(--color-brand-white);
@@ -5940,35 +5966,19 @@
5940
5966
  --card: var(--color-brand-white);
5941
5967
  --card-foreground: var(--color-brand-black);
5942
5968
  --popover: var(--color-brand-white);
5943
- --popover-foreground: var(
5944
- --color-brand-black
5945
- );
5946
- --primary: var(
5947
- --color-brand-green
5948
- );
5949
- --primary-foreground: var(
5950
- --color-brand-black
5951
- );
5969
+ --popover-foreground: var(--color-brand-black);
5970
+ --primary: var(--color-brand-green);
5971
+ --primary-foreground: var(--color-brand-black);
5952
5972
  --secondary: var(--color-neutral-alpha-10);
5953
5973
  --secondary-foreground: var(--color-brand-black);
5954
5974
  --muted: var(--color-neutral-alpha-2);
5955
- --muted-foreground: var(
5956
- --color-neutral-alpha-50
5957
- );
5975
+ --muted-foreground: var(--color-neutral-alpha-50);
5958
5976
  --accent: var(--color-brand-green);
5959
- --accent-foreground: var(
5960
- --color-brand-black
5961
- );
5977
+ --accent-foreground: var(--color-brand-black);
5962
5978
  --destructive: var(--color-error);
5963
- --destructive-foreground: var(
5964
- --color-brand-white
5965
- );
5966
- --border: var(
5967
- --color-neutral-alpha-dark-10
5968
- );
5969
- --input: var(
5970
- --color-neutral-alpha-2
5971
- );
5979
+ --destructive-foreground: var(--color-brand-white);
5980
+ --border: var(--color-neutral-alpha-dark-10);
5981
+ --input: var(--color-neutral-alpha-2);
5972
5982
  --ring: var(--color-brand-green);
5973
5983
  --sidebar: var(--color-neutral-base-850);
5974
5984
  --sidebar-foreground: var(--color-brand-white);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@turtleclub/earn-widget",
3
- "version": "0.5.0-beta.6",
3
+ "version": "0.5.0-beta.60",
4
4
  "description": "Configurable and self-contained Turtle Earn widget for third-party integration",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -41,9 +41,9 @@
41
41
  "dependencies": {
42
42
  "@tailwindcss/postcss": "^4.1.11",
43
43
  "@turtleclub/chains": "0.3.0",
44
- "@turtleclub/hooks": "0.5.0-beta.2",
45
- "@turtleclub/opportunities": "0.1.0-beta.6",
46
- "@turtleclub/ui": "0.7.0-beta.5",
44
+ "@turtleclub/hooks": "0.5.0-beta.43",
45
+ "@turtleclub/opportunities": "0.1.0-beta.60",
46
+ "@turtleclub/ui": "0.7.0-beta.23",
47
47
  "@turtleclub/utils": "0.4.0-beta.0",
48
48
  "class-variance-authority": "^0.7.1",
49
49
  "clsx": "^2.1.1",
@@ -85,5 +85,5 @@
85
85
  "publishConfig": {
86
86
  "access": "public"
87
87
  },
88
- "gitHead": "09d5d186b6253d8315b6e69aae3921d6850cddb2"
88
+ "gitHead": "ae345f4c4390594e945a1d39c719324620f981bc"
89
89
  }