@turtleclub/earn-widget 0.5.0-beta.6 → 0.5.0-beta.61
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 +1 -1
- package/dist/styles.css +89 -79
- package/package.json +5 -5
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.
|
|
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\/
|
|
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-
|
|
2329
|
-
--tw-ring-color: var(--color-
|
|
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-
|
|
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
|
|
2996
|
-
--tw-ring-shadow: var(--tw-ring-inset,)0 0 0 calc(
|
|
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:
|
|
4579
|
-
--chart-2:
|
|
4580
|
-
--chart-3:
|
|
4581
|
-
--chart-4:
|
|
4582
|
-
--chart-5:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
5932
|
-
--chart-2:
|
|
5933
|
-
--chart-3:
|
|
5934
|
-
--chart-4:
|
|
5935
|
-
--chart-5:
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "0.5.0-beta.61",
|
|
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.
|
|
45
|
-
"@turtleclub/opportunities": "0.1.0-beta.
|
|
46
|
-
"@turtleclub/ui": "0.7.0-beta.
|
|
44
|
+
"@turtleclub/hooks": "0.5.0-beta.44",
|
|
45
|
+
"@turtleclub/opportunities": "0.1.0-beta.61",
|
|
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": "
|
|
88
|
+
"gitHead": "4a93ec9e58cff4424e003cabe74da0892dadcc95"
|
|
89
89
|
}
|