@liberfi.io/ui-launchpad 1.0.3 → 1.0.5
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 +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var react=require('react'),reactLaunchpad=require('@liberfi.io/react-launchpad'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),types=require('@liberfi.io/types'),jsxRuntime=require('react/jsx-runtime');function E(r){return {status:r,canSubmit:r!=="signing"&&r!=="submitting"&&r!=="uploading"&&r!=="succeeded"}}var ae=["!bg-surface-strong/30","!border","!border-border-control/50","data-[hover=true]:!bg-surface-strong/60","data-[hover=true]:!border-border-control/80","group-data-[focus=true]:!bg-surface-strong/60","group-data-[focus=true]:!border-brand-primary/60"].join(" "),d={inputWrapper:ae,label:"text-text-secondary",input:"text-text-primary placeholder:text-text-muted"},W=["w-full h-28 rounded-lg","bg-surface-strong/30 border border-border-control/50","hover:bg-surface-strong/60 hover:border-border-control/80","focus-visible:border-brand-primary/60 focus-visible:outline-none","transition-colors","flex items-center justify-center overflow-hidden"].join(" "),j={tabList:"!bg-surface-strong/30 !border !border-border-control/50 !gap-1",tab:"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100",cursor:"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none",tabContent:"!text-text-muted group-data-[selected=true]:!text-text-primary"};var q=react.createContext(null);function le({ports:r,children:u}){return react.createElement(q.Provider,{value:r},u)}function x(){let r=react.useContext(q);if(!r)throw new Error("useLaunchpadUiPorts must be used within LaunchpadUiProvider");return r}function ue(r={}){let u=reactLaunchpad.createInMemoryLaunchpadPorts({signError:r.signError,uploadError:r.uploadError});return {chain:r.chain??types.Chain.SOLANA,requireAuth:async o=>{await o();},uploadImage:async o=>{if(r.uploadError)throw r.uploadError;return "https://ipfs.io/ipfs/memory-image"},generateMeme:r.generateMeme,createRuntime:o=>reactLaunchpad.createLaunchpadCreateRuntime({...u,onChange:o})}}var X={name:"",ticker:"",image:"",description:"",website:"",twitter:"",telegram:"",supply:1e9,raised:85,sold:51,locked:0,shareFee:false};function k({platform:r,suggestedImage:u,suggestedName:o,suggestedSymbol:m,className:c,onPreviewChange:p}){let{t}=i18n.useTranslation(),l=x(),[e,g]=react.useState(X),[n,b]=react.useState({}),[v,s]=react.useState({status:"idle"}),[N,S]=react.useState(false),M=react.useRef(null),K=r===reactLaunchpad.LaunchPadPlatform.RAYDIUM,F=E(v.status);react.useEffect(()=>{g(a=>({...a,name:o||a.name,ticker:m||a.ticker,image:u||a.image}));},[u,o,m]),react.useEffect(()=>{p?.(e);},[p,e]);let Z=react.useMemo(()=>!e.name.trim()||!e.ticker.trim()||!e.image.trim()||!F.canSubmit||N,[N,e.image,e.name,e.ticker,F.canSubmit]),h=(a,C)=>{g(f=>({...f,[a]:C})),b(f=>({...f,[a]:void 0}));},ee=()=>{let a={};return e.name.trim()?e.name.length>24&&(a.name=t("launchpad.error_name_length")):a.name=t("launchpad.error_name_required"),e.ticker.trim()?e.ticker.length>10&&(a.ticker=t("launchpad.error_ticker_length")):a.ticker=t("launchpad.error_ticker_required"),e.image.trim()||(a.image=t("launchpad.error_image_required")),K&&((Number.isNaN(e.raised)||e.raised<30)&&(a.raised=t("launchpad.error_raised_min")),(e.sold<51||e.sold>80)&&(a.sold=t("launchpad.error_sold_min")),(e.locked<0||e.locked>30)&&(a.locked=t("launchpad.error_locked_max")),e.sold+e.locked>80&&(a.sold=t("launchpad.error_locked_sum_by_sold"))),b(a),Object.keys(a).length===0};return jsxRuntime.jsxs("form",{className:ui.cn("flex flex-col gap-4",c),onSubmit:a=>{a.preventDefault(),ee()&&l.requireAuth(async()=>{let f=await l.createRuntime(s).submit({chain:l.chain,name:e.name.trim(),symbol:e.ticker.trim(),platform:r,imageUri:e.image,description:e.description||void 0,website:e.website||void 0,twitter:e.twitter||void 0,telegram:e.telegram||void 0});if(f.status==="succeeded"){l.onCreated?.(f),g(X),ui.toast.success(t("launchpad.mint_transaction_submitted"));return}ui.toast.error(f.error?.message??t("launchpad.mint_transaction_error"));});},children:[jsxRuntime.jsx(ui.Input,{label:t("launchpad.name_label"),classNames:d,value:e.name,isInvalid:!!n.name,errorMessage:n.name,onValueChange:a=>h("name",a)}),jsxRuntime.jsx(ui.Input,{label:t("launchpad.ticker_label"),classNames:d,value:e.ticker,isInvalid:!!n.ticker,errorMessage:n.ticker,onValueChange:a=>h("ticker",a)}),jsxRuntime.jsxs("div",{className:"space-y-1.5",children:[jsxRuntime.jsx("h3",{className:ui.cn("text-sm",n.image&&"text-danger"),children:t("launchpad.image_label")}),jsxRuntime.jsx(ui.Upload,{ref:M,accept:{"image/jpeg":[".jpg",".jpeg"],"image/png":[".png"],"image/webp":[".webp"]},maxFiles:1,maxSize:10*1024*1024,noClick:true,noKeyboard:true,onDropAccepted:a=>{let C=a[0];C&&(S(true),l.uploadImage(C).then(f=>h("image",f)).catch(f=>{ui.toast.error(f instanceof Error?f.message:t("launchpad.error_image_upload"));}).finally(()=>S(false)));},children:jsxRuntime.jsx("button",{type:"button","aria-label":t("launchpad.image_label"),className:W,onClick:()=>M.current?.open(),children:e.image?jsxRuntime.jsx(ui.Image,{src:e.image,alt:"",className:"h-full w-full object-cover"}):jsxRuntime.jsx(ui.ImageGalleryIcon,{width:24,height:24,className:"text-text-muted"})})}),n.image?jsxRuntime.jsx("p",{className:"text-xs text-danger",children:n.image}):null]}),jsxRuntime.jsx(ui.Textarea,{label:t("launchpad.description_label"),classNames:d,placeholder:t("launchpad.description_placeholder"),value:e.description,onValueChange:a=>h("description",a)}),jsxRuntime.jsx(ui.Input,{label:t("launchpad.website_label"),classNames:d,value:e.website,onValueChange:a=>h("website",a)}),jsxRuntime.jsx(ui.Input,{label:t("launchpad.twitter_label"),classNames:d,value:e.twitter,onValueChange:a=>h("twitter",a)}),jsxRuntime.jsx(ui.Input,{label:t("launchpad.telegram_label"),classNames:d,value:e.telegram,onValueChange:a=>h("telegram",a)}),K?jsxRuntime.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[jsxRuntime.jsx(ui.NumberInput,{label:t("launchpad.supply_label"),classNames:d,value:e.supply,onValueChange:a=>h("supply",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:t("launchpad.raised_label"),classNames:d,value:e.raised,isInvalid:!!n.raised,errorMessage:n.raised,onValueChange:a=>h("raised",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:t("launchpad.sold_label"),classNames:d,value:e.sold,isInvalid:!!n.sold,errorMessage:n.sold,onValueChange:a=>h("sold",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:t("launchpad.locked_label"),classNames:d,value:e.locked,isInvalid:!!n.locked,errorMessage:n.locked,onValueChange:a=>h("locked",Number(a??0))}),jsxRuntime.jsxs("div",{className:"col-span-2 flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:"text-sm",children:t("launchpad.share_fee_label")}),jsxRuntime.jsx(ui.Switch,{isSelected:e.shareFee,onValueChange:a=>h("shareFee",a)})]})]}):null,jsxRuntime.jsx(ui.Button,{type:"submit",color:"primary",isDisabled:Z,isLoading:!F.canSubmit,children:t("launchpad.submit")})]})}var R=6,J=9,_e="1000000000000000",Ne="793100000000000",Se="35000000000",Me="20000000";function T({platform:r,supply:u=1e9,raised:o=35,soldPercent:m=79.31}){let{t:c}=i18n.useTranslation(),p=react.useMemo(()=>{let l=r===reactLaunchpad.LaunchPadPlatform.PUMPFUN,e=l?_e:String(Math.round(u*10**R)),g=l?Ne:String(Math.round(u*(m/100)*10**R)),n=l?Se:String(Math.round(o*10**J));try{return reactLaunchpad.Curve.getPoolCurvePointByInit({curveType:reactLaunchpad.CurveType.CONSTANT_PRODUCT,supply:e,totalSell:g,totalLockedAmount:0,totalFundRaising:n,migrateFee:Me,decimalA:R,decimalB:J,pointCount:24})}catch{return []}},[r,o,m,u]),t=react.useMemo(()=>{if(p.length===0)return "";let l=p.map(s=>Number(s.totalSellSupply)),e=p.map(s=>Number(s.price)),g=Math.min(...l),n=Math.max(...l)||1,b=Math.min(...e),v=Math.max(...e)||1;return p.map((s,N)=>{let S=(Number(s.totalSellSupply)-g)/(n-g||1)*320,M=120-(Number(s.price)-b)/(v-b||1)*100;return `${N===0?"M":"L"}${S.toFixed(1)},${M.toFixed(1)}`}).join(" ")},[p]);return jsxRuntime.jsxs("div",{className:"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden",children:[jsxRuntime.jsx("h2",{className:"text-sm font-medium",children:c("launchpad.curve_preview")}),jsxRuntime.jsx("svg",{viewBox:"0 0 320 140",className:"w-full h-40",role:"img","aria-label":c("launchpad.curve_preview"),children:jsxRuntime.jsx("path",{d:t,fill:"none",stroke:"currentColor",strokeWidth:"2",className:"text-primary"})})]})}function H({prompt:r="",onGenerate:u}){let{t:o}=i18n.useTranslation(),m=x(),[c,p]=react.useState(r),[t,l]=react.useState(false),e=c.length>300,g=c.length>0&&!e&&!!m.generateMeme&&!t;return jsxRuntime.jsxs("div",{className:"flex flex-col gap-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{className:"font-semibold text-sm",style:{backgroundImage:"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:o("launchpad.magic_launch")}),jsxRuntime.jsxs("span",{className:ui.cn("text-xs",e?"text-danger":"text-text-muted"),children:[c.length,"/300"]})]}),jsxRuntime.jsx(ui.Textarea,{minRows:2,classNames:d,value:c,onValueChange:p,placeholder:o("launchpad.magic_launch_explained")}),jsxRuntime.jsx(ui.Button,{color:"primary",isDisabled:!g,isLoading:t,onPress:()=>{m.requireAuth(async()=>{if(m.generateMeme){l(true);try{let n=await m.generateMeme(c);u?.(n);}finally{l(false);}}});},children:o("launchpad.magic_launch_submit")})]})}var De=[{platform:reactLaunchpad.LaunchPadPlatform.PUMPFUN,name:"Pump",icon:"/images/launchpad/pumpfun.svg"},{platform:reactLaunchpad.LaunchPadPlatform.RAYDIUM,name:"Raydium",icon:"/images/launchpad/raydium.svg"}];function Te({prompt:r,image:u}){let[o,m]=react.useState(reactLaunchpad.LaunchPadPlatform.PUMPFUN),[c,p]=react.useState(u),[t,l]=react.useState(void 0),[e,g]=react.useState(void 0),[n,b]=react.useState(null),v=react.useCallback(s=>{p(s.image),l(s.name),g(s.symbol);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col gap-4",children:[jsxRuntime.jsx(H,{prompt:r,onGenerate:v}),jsxRuntime.jsxs("div",{className:"flex-1 flex items-start justify-center gap-4",children:[jsxRuntime.jsxs("div",{className:ui.cn("h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2"),children:[jsxRuntime.jsx(ui.Tabs,{fullWidth:true,classNames:j,selectedKey:o,onSelectionChange:s=>m(String(s)),disableAnimation:true,children:De.map(s=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Image,{src:s.icon,alt:s.name,width:20,height:20}),jsxRuntime.jsx("span",{children:s.name})]})},s.platform))}),jsxRuntime.jsx(k,{platform:reactLaunchpad.LaunchPadPlatform.PUMPFUN,className:ui.cn({hidden:o!==reactLaunchpad.LaunchPadPlatform.PUMPFUN}),suggestedImage:c,suggestedName:t,suggestedSymbol:e,onPreviewChange:b}),jsxRuntime.jsx(k,{platform:reactLaunchpad.LaunchPadPlatform.RAYDIUM,className:ui.cn({hidden:o!==reactLaunchpad.LaunchPadPlatform.RAYDIUM}),suggestedImage:c,suggestedName:t,suggestedSymbol:e,onPreviewChange:b})]}),jsxRuntime.jsx(T,{platform:o,supply:n?.supply,raised:n?.raised,soldPercent:n?.sold})]})]})}var Oe="@liberfi.io/ui-launchpad";function xa(){return Oe}
|
|
2
|
-
exports.LaunchPadCreateForm=
|
|
1
|
+
'use strict';var react=require('react'),reactLaunchpad=require('@liberfi.io/react-launchpad'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),types=require('@liberfi.io/types'),jsxRuntime=require('react/jsx-runtime'),utils=require('@liberfi.io/utils');function H(o){return {status:o,canSubmit:o!=="signing"&&o!=="submitting"&&o!=="uploading"&&o!=="succeeded"}}var ue=["!bg-surface-strong/30","!border","!border-border-control/50","data-[hover=true]:!bg-surface-strong/60","data-[hover=true]:!border-border-control/80","group-data-[focus=true]:!bg-surface-strong/60","group-data-[focus=true]:!border-brand-primary/60"].join(" "),y={inputWrapper:ue,label:"text-text-secondary",input:"text-text-primary placeholder:text-text-muted"},q=["w-full h-28 rounded-lg","bg-surface-strong/30 border border-border-control/50","hover:bg-surface-strong/60 hover:border-border-control/80","focus-visible:border-brand-primary/60 focus-visible:outline-none","transition-colors","flex items-center justify-center overflow-hidden"].join(" "),z={tabList:"!bg-surface-strong/30 !border !border-border-control/50 !gap-1",tab:"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100",cursor:"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none",tabContent:"!text-text-muted group-data-[selected=true]:!text-text-primary"};var Z=react.createContext(null);function be({ports:o,children:c}){return react.createElement(Z.Provider,{value:o},c)}function M(){let o=react.useContext(Z);if(!o)throw new Error("useLaunchpadUiPorts must be used within LaunchpadUiProvider");return o}function xe(o={}){let c=reactLaunchpad.createInMemoryLaunchpadPorts({signError:o.signError,uploadError:o.uploadError});return {chain:o.chain??types.Chain.SOLANA,requireAuth:async n=>{await n();},uploadImage:async n=>{if(o.uploadError)throw o.uploadError;return "https://ipfs.io/ipfs/memory-image"},generateMeme:o.generateMeme,createRuntime:n=>reactLaunchpad.createLaunchpadCreateRuntime({...c,onChange:n})}}var ee={name:"",ticker:"",image:"",description:"",website:"",twitter:"",telegram:"",supply:1e9,raised:85,sold:51,locked:0,shareFee:false};function V({platform:o,suggestedImage:c,suggestedName:n,suggestedSymbol:h,className:u,onPreviewChange:b}){let{t:e}=i18n.useTranslation(),r=M(),[t,f]=react.useState(ee),[s,_]=react.useState({}),[x,g]=react.useState({status:"idle"}),[I,k]=react.useState(false),S=react.useRef(null),F=o===reactLaunchpad.LaunchPadPlatform.RAYDIUM,i=H(x.status);react.useEffect(()=>{f(a=>({...a,name:n||a.name,ticker:h||a.ticker,image:c||a.image}));},[c,n,h]),react.useEffect(()=>{b?.(t);},[b,t]);let v=react.useMemo(()=>!t.name.trim()||!t.ticker.trim()||!t.image.trim()||!i.canSubmit||I,[I,t.image,t.name,t.ticker,i.canSubmit]),p=(a,A)=>{f(P=>({...P,[a]:A})),_(P=>({...P,[a]:void 0}));},ce=()=>{let a={};return t.name.trim()?t.name.length>24&&(a.name=e("launchpad.error_name_length")):a.name=e("launchpad.error_name_required"),t.ticker.trim()?t.ticker.length>10&&(a.ticker=e("launchpad.error_ticker_length")):a.ticker=e("launchpad.error_ticker_required"),t.image.trim()||(a.image=e("launchpad.error_image_required")),F&&((Number.isNaN(t.raised)||t.raised<30)&&(a.raised=e("launchpad.error_raised_min")),(t.sold<51||t.sold>80)&&(a.sold=e("launchpad.error_sold_min")),(t.locked<0||t.locked>30)&&(a.locked=e("launchpad.error_locked_max")),t.sold+t.locked>80&&(a.sold=e("launchpad.error_locked_sum_by_sold"))),_(a),Object.keys(a).length===0};return jsxRuntime.jsxs("form",{className:ui.cn("flex flex-col gap-4",u),onSubmit:a=>{a.preventDefault(),ce()&&r.requireAuth(async()=>{let P=await r.createRuntime(g).submit({chain:r.chain,name:t.name.trim(),symbol:t.ticker.trim(),platform:o,imageUri:t.image,description:t.description||void 0,website:t.website||void 0,twitter:t.twitter||void 0,telegram:t.telegram||void 0});if(P.status==="succeeded"){r.onCreated?.(P),f(ee),ui.toast.success(e("launchpad.mint_transaction_submitted"));return}ui.toast.error(P.error?.message??e("launchpad.mint_transaction_error"));});},children:[jsxRuntime.jsx(ui.Input,{label:e("launchpad.name_label"),classNames:y,value:t.name,isInvalid:!!s.name,errorMessage:s.name,onValueChange:a=>p("name",a)}),jsxRuntime.jsx(ui.Input,{label:e("launchpad.ticker_label"),classNames:y,value:t.ticker,isInvalid:!!s.ticker,errorMessage:s.ticker,onValueChange:a=>p("ticker",a)}),jsxRuntime.jsxs("div",{className:"space-y-1.5",children:[jsxRuntime.jsx("h3",{className:ui.cn("text-sm",s.image&&"text-danger"),children:e("launchpad.image_label")}),jsxRuntime.jsx(ui.Upload,{ref:S,accept:{"image/jpeg":[".jpg",".jpeg"],"image/png":[".png"],"image/webp":[".webp"]},maxFiles:1,maxSize:10*1024*1024,noClick:true,noKeyboard:true,onDropAccepted:a=>{let A=a[0];A&&(k(true),r.uploadImage(A).then(P=>p("image",P)).catch(P=>{ui.toast.error(P instanceof Error?P.message:e("launchpad.error_image_upload"));}).finally(()=>k(false)));},children:jsxRuntime.jsx("button",{type:"button","aria-label":e("launchpad.image_label"),className:q,onClick:()=>S.current?.open(),children:t.image?jsxRuntime.jsx(ui.Image,{src:t.image,alt:"",className:"h-full w-full object-cover"}):jsxRuntime.jsx(ui.ImageGalleryIcon,{width:24,height:24,className:"text-text-muted"})})}),s.image?jsxRuntime.jsx("p",{className:"text-xs text-danger",children:s.image}):null]}),jsxRuntime.jsx(ui.Textarea,{label:e("launchpad.description_label"),classNames:y,placeholder:e("launchpad.description_placeholder"),value:t.description,onValueChange:a=>p("description",a)}),jsxRuntime.jsx(ui.Input,{label:e("launchpad.website_label"),classNames:y,value:t.website,onValueChange:a=>p("website",a)}),jsxRuntime.jsx(ui.Input,{label:e("launchpad.twitter_label"),classNames:y,value:t.twitter,onValueChange:a=>p("twitter",a)}),jsxRuntime.jsx(ui.Input,{label:e("launchpad.telegram_label"),classNames:y,value:t.telegram,onValueChange:a=>p("telegram",a)}),F?jsxRuntime.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[jsxRuntime.jsx(ui.NumberInput,{label:e("launchpad.supply_label"),classNames:y,value:t.supply,onValueChange:a=>p("supply",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:e("launchpad.raised_label"),classNames:y,value:t.raised,isInvalid:!!s.raised,errorMessage:s.raised,onValueChange:a=>p("raised",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:e("launchpad.sold_label"),classNames:y,value:t.sold,isInvalid:!!s.sold,errorMessage:s.sold,onValueChange:a=>p("sold",Number(a??0))}),jsxRuntime.jsx(ui.NumberInput,{label:e("launchpad.locked_label"),classNames:y,value:t.locked,isInvalid:!!s.locked,errorMessage:s.locked,onValueChange:a=>p("locked",Number(a??0))}),jsxRuntime.jsxs("div",{className:"col-span-2 flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:"text-sm",children:e("launchpad.share_fee_label")}),jsxRuntime.jsx(ui.Switch,{isSelected:t.shareFee,onValueChange:a=>p("shareFee",a)})]})]}):null,jsxRuntime.jsx(ui.Button,{type:"submit",color:"primary",isDisabled:v,isLoading:!i.canSubmit,children:e("launchpad.submit")})]})}var G=6,oe=9,Fe="1000000000000000",Te="793100000000000",Ee="35000000000",Re="20000000",W=420,D=250,m={top:12,right:14,bottom:38,left:58},se=6,ie=5;function B({platform:o,supply:c=1e9,raised:n=35,soldPercent:h=79.31}){let{t:u}=i18n.useTranslation(),b=react.useMemo(()=>{let r=o===reactLaunchpad.LaunchPadPlatform.PUMPFUN,t=r?Fe:String(Math.round(c*10**G)),f=r?Te:String(Math.round(c*(h/100)*10**G)),s=r?Ee:String(Math.round(n*10**oe));try{return reactLaunchpad.Curve.getPoolCurvePointByInit({curveType:reactLaunchpad.CurveType.CONSTANT_PRODUCT,supply:t,totalSell:f,totalLockedAmount:0,totalFundRaising:s,migrateFee:Re,decimalA:G,decimalB:oe,pointCount:40})}catch{return []}},[o,n,h,c]),e=react.useMemo(()=>Ve(b,c),[b,c]);return jsxRuntime.jsxs("div",{className:"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden",children:[jsxRuntime.jsx("h2",{className:"text-sm font-medium",children:u("launchpad.curve_preview")}),jsxRuntime.jsxs("svg",{viewBox:`0 0 ${W} ${D}`,className:"h-[280px] w-full",role:"img","aria-label":u("launchpad.curve_preview"),children:[jsxRuntime.jsx("defs",{children:jsxRuntime.jsxs("linearGradient",{id:"launchpad-curve-area",x1:"0",y1:"0",x2:"0",y2:"1",className:"text-primary",children:[jsxRuntime.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.72"}),jsxRuntime.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.04"})]})}),jsxRuntime.jsxs("g",{"data-testid":"curve-grid",className:"text-border-subtle",children:[e.xTicks.map(r=>jsxRuntime.jsx("line",{x1:r.position,x2:r.position,y1:m.top,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.35",strokeWidth:"0.75"},`x-grid-${r.position}`)),e.yTicks.map(r=>jsxRuntime.jsx("line",{x1:m.left,x2:e.right,y1:r.position,y2:r.position,stroke:"currentColor",strokeOpacity:"0.35",strokeWidth:"0.75"},`y-grid-${r.position}`))]}),jsxRuntime.jsx("line",{"data-testid":"curve-x-axis",x1:m.left,x2:e.right,y1:e.bottom,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.65",strokeWidth:"1",className:"text-text-muted"}),jsxRuntime.jsx("line",{"data-testid":"curve-y-axis",x1:m.left,x2:m.left,y1:m.top,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.65",strokeWidth:"1",className:"text-text-muted"}),jsxRuntime.jsxs("g",{className:"fill-current text-text-muted text-[9px]",children:[e.xTicks.map(r=>jsxRuntime.jsx("text",{x:r.position,y:e.bottom+17,textAnchor:"middle",children:utils.formatAmount(r.value)},`x-label-${r.position}`)),e.yTicks.map(r=>jsxRuntime.jsx("text",{x:m.left-8,y:r.position+3,textAnchor:"end",children:utils.formatPrice(r.value)},`y-label-${r.position}`)),jsxRuntime.jsx("text",{x:(m.left+e.right)/2,y:D-3,textAnchor:"middle",children:u("launchpad.curve_preview_token_supply")}),jsxRuntime.jsx("text",{x:"12",y:(m.top+e.bottom)/2,textAnchor:"middle",transform:`rotate(-90 12 ${(m.top+e.bottom)/2})`,children:"SOL"})]}),jsxRuntime.jsx("path",{"data-testid":"curve-area",d:e.areaPath,fill:"url(#launchpad-curve-area)",className:"text-primary"}),jsxRuntime.jsx("path",{"data-testid":"curve-line",d:e.linePath,fill:"none",stroke:"currentColor",strokeDasharray:"2 8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"3",className:"text-primary"}),jsxRuntime.jsx("g",{"data-testid":"curve-endpoints",children:e.endpoints.map((r,t)=>{let f=t===0,s=t===e.endpoints.length-1;return jsxRuntime.jsx("circle",{cx:r.chartX,cy:r.chartY,r:"4.5",fill:f?"#facc15":s?"#0ea5e9":"currentColor",stroke:"#f0fdf4",strokeWidth:"1.25",className:"text-primary",children:jsxRuntime.jsx("title",{children:`${utils.formatAmount(r.x)} \xB7 ${utils.formatPrice(r.y)} SOL`})},`${r.x}-${r.y}`)})})]}),jsxRuntime.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-x-8 gap-y-2 text-[10px] text-text-muted",children:[jsxRuntime.jsxs("p",{className:"flex items-center",children:[jsxRuntime.jsx("span",{"data-testid":"curve-legend-dot",className:"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#facc15]"}),jsxRuntime.jsx("span",{className:"mr-1.5",children:u("launchpad.curve_preview_starting_mc")}),jsxRuntime.jsx("span",{children:utils.formatAmountInUsd(e.startingMarketCap)})]}),jsxRuntime.jsxs("p",{className:"flex items-center",children:[jsxRuntime.jsx("span",{"data-testid":"curve-legend-dot",className:"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#0ea5e9]"}),jsxRuntime.jsx("span",{className:"mr-1.5",children:u("launchpad.curve_preview_migration_mc")}),jsxRuntime.jsx("span",{children:utils.formatAmountInUsd(e.migrationMarketCap)})]})]})]})}function Ve(o,c){let n=o.map(i=>({x:Number(i.totalSellSupply),y:Number(i.price)})).filter(i=>Number.isFinite(i.x)&&Number.isFinite(i.y)),h=W-m.left-m.right,u=D-m.top-m.bottom,b=n.length>0?Math.min(...n.map(({x:i})=>i)):0,e=n.length>0?Math.max(...n.map(({x:i})=>i)):1,r=n.length>0?Math.max(...n.map(({y:i})=>i)):1,t=e-b||1,f=(r||1)*1.05,s=D-m.bottom,_=W-m.right,x=n.map(({x:i,y:v})=>({x:i,y:v,chartX:m.left+(i-b)/t*h,chartY:m.top+(1-v/f)*u})),g=x.map((i,v)=>`${v===0?"M":"L"}${i.chartX.toFixed(2)},${i.chartY.toFixed(2)}`).join(" "),I=g?`${g} L${x.at(-1)?.chartX.toFixed(2)},${s} L${x[0]?.chartX.toFixed(2)},${s} Z`:"",k=n[0],S=n.at(-1),F=x.length>1?[x[0],x[x.length-1]]:x;return {points:x,endpoints:F,linePath:g,areaPath:I,bottom:s,right:_,xTicks:Array.from({length:se},(i,v)=>{let p=v/(se-1);return {value:b+t*p,position:m.left+h*p}}),yTicks:Array.from({length:ie},(i,v)=>{let p=v/(ie-1);return {value:f*p,position:s-u*p}}),startingMarketCap:k?k.y*c:0,migrationMarketCap:S?S.y*c:0}}function j({prompt:o="",onGenerate:c}){let{t:n}=i18n.useTranslation(),h=M(),[u,b]=react.useState(o),[e,r]=react.useState(false),t=u.length>300,f=u.length>0&&!t&&!!h.generateMeme&&!e;return jsxRuntime.jsxs("div",{className:"flex flex-col gap-2",children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{className:"font-semibold text-sm",style:{backgroundImage:"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:n("launchpad.magic_launch")}),jsxRuntime.jsxs("span",{className:ui.cn("text-xs",t?"text-danger":"text-text-muted"),children:[u.length,"/300"]})]}),jsxRuntime.jsx(ui.Textarea,{minRows:2,classNames:y,value:u,onValueChange:b,placeholder:n("launchpad.magic_launch_explained")}),jsxRuntime.jsx(ui.Button,{color:"primary",isDisabled:!f,isLoading:e,onPress:()=>{h.requireAuth(async()=>{if(h.generateMeme){r(true);try{let s=await h.generateMeme(u);c?.(s);}finally{r(false);}}});},children:n("launchpad.magic_launch_submit")})]})}var Ye=[{platform:reactLaunchpad.LaunchPadPlatform.PUMPFUN,name:"Pump",icon:"/images/launchpad/pumpfun.svg"},{platform:reactLaunchpad.LaunchPadPlatform.RAYDIUM,name:"Raydium",icon:"/images/launchpad/raydium.svg"}];function je({prompt:o,image:c}){let[n,h]=react.useState(reactLaunchpad.LaunchPadPlatform.PUMPFUN),[u,b]=react.useState(c),[e,r]=react.useState(void 0),[t,f]=react.useState(void 0),[s,_]=react.useState(null),x=react.useCallback(g=>{b(g.image),r(g.name),f(g.symbol);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col gap-4",children:[jsxRuntime.jsx(j,{prompt:o,onGenerate:x}),jsxRuntime.jsxs("div",{className:"flex-1 flex items-start justify-center gap-4",children:[jsxRuntime.jsxs("div",{className:ui.cn("h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2"),children:[jsxRuntime.jsx(ui.Tabs,{fullWidth:true,classNames:z,selectedKey:n,onSelectionChange:g=>h(String(g)),disableAnimation:true,children:Ye.map(g=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Image,{src:g.icon,alt:g.name,width:20,height:20}),jsxRuntime.jsx("span",{children:g.name})]})},g.platform))}),jsxRuntime.jsx(V,{platform:reactLaunchpad.LaunchPadPlatform.PUMPFUN,className:ui.cn({hidden:n!==reactLaunchpad.LaunchPadPlatform.PUMPFUN}),suggestedImage:u,suggestedName:e,suggestedSymbol:t,onPreviewChange:_}),jsxRuntime.jsx(V,{platform:reactLaunchpad.LaunchPadPlatform.RAYDIUM,className:ui.cn({hidden:n!==reactLaunchpad.LaunchPadPlatform.RAYDIUM}),suggestedImage:u,suggestedName:e,suggestedSymbol:t,onPreviewChange:_})]}),jsxRuntime.jsx(B,{platform:n,supply:s?.supply,raised:s?.raised,soldPercent:s?.sold})]})]})}var Xe="@liberfi.io/ui-launchpad";function It(){return Xe}
|
|
2
|
+
exports.LaunchPadCreateForm=V;exports.LaunchPadCurvePreview=B;exports.LaunchPadHome=je;exports.LaunchpadCreateStatusView=H;exports.LaunchpadReadyWidget=It;exports.LaunchpadUiProvider=be;exports.MagicLaunch=j;exports.PACKAGE_NAME=Xe;exports.createInMemoryLaunchpadUiPorts=xe;exports.useLaunchpadUiPorts=M;//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create-status.view.ts","../src/form-control-theme.ts","../src/ports.tsx","../src/LaunchPadCreateForm.tsx","../src/LaunchPadCurvePreview.tsx","../src/MagicLaunch.tsx","../src/LaunchPadHome.tsx","../src/index.ts"],"names":["LaunchpadCreateStatusView","status","LAUNCHPAD_FIELD_WRAPPER_CLASS","LAUNCHPAD_FIELD_CLASS_NAMES","LAUNCHPAD_UPLOAD_BUTTON_CLASS","LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES","LaunchpadUiPortsContext","createContext","LaunchpadUiProvider","ports","children","createElement","useLaunchpadUiPorts","useContext","createInMemoryLaunchpadUiPorts","options","memory","createInMemoryLaunchpadPorts","Chain","action","file","onChange","createLaunchpadCreateRuntime","DEFAULT_VALUES","LaunchPadCreateForm","platform","suggestedImage","suggestedName","suggestedSymbol","className","onPreviewChange","useTranslation","values","setValues","useState","errors","setErrors","snapshot","setSnapshot","uploading","setUploading","uploaderRef","useRef","isRaydium","LaunchPadPlatform","view","useEffect","current","disabled","useMemo","setField","key","value","validate","next","jsxs","cn","event","result","toast","jsx","Input","Upload","files","url","error","Image","ImageGalleryIcon","Textarea","NumberInput","Switch","Button","NEW_TOKEN_DECIMALS","SOL_TOKEN_DECIMALS","PUMP_SUPPLY","PUMP_SOLD","PUMP_RAISED","PUMP_MIGRATE_FEE","LaunchPadCurvePreview","supply","raised","soldPercent","t","points","isPump","supplyValue","soldValue","raisedValue","Curve","CurveType","path","xs","point","ys","minX","maxX","minY","maxY","index","x","y","MagicLaunch","prompt","onGenerate","setValue","pending","setPending","tooLong","canGenerate","PLATFORMS","LaunchPadHome","image","setPlatform","setSuggestedImage","setSuggestedName","setSuggestedSymbol","preview","setPreview","useCallback","Tabs","item","Tab","PACKAGE_NAME","LaunchpadReadyWidget"],"mappings":"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","file":"index.js","sourcesContent":["import type { LaunchpadCreateStatus } from \"@liberfi.io/react-launchpad\";\n\nexport function LaunchpadCreateStatusView(status: LaunchpadCreateStatus): {\n status: LaunchpadCreateStatus;\n canSubmit: boolean;\n} {\n return {\n status,\n canSubmit:\n status !== \"signing\" &&\n status !== \"submitting\" &&\n status !== \"uploading\" &&\n status !== \"succeeded\",\n };\n}\n","const LAUNCHPAD_FIELD_WRAPPER_CLASS = [\n \"!bg-surface-strong/30\",\n \"!border\",\n \"!border-border-control/50\",\n \"data-[hover=true]:!bg-surface-strong/60\",\n \"data-[hover=true]:!border-border-control/80\",\n \"group-data-[focus=true]:!bg-surface-strong/60\",\n \"group-data-[focus=true]:!border-brand-primary/60\",\n].join(\" \");\n\nexport const LAUNCHPAD_FIELD_CLASS_NAMES = {\n inputWrapper: LAUNCHPAD_FIELD_WRAPPER_CLASS,\n label: \"text-text-secondary\",\n input: \"text-text-primary placeholder:text-text-muted\",\n} as const;\n\nexport const LAUNCHPAD_UPLOAD_BUTTON_CLASS = [\n \"w-full h-28 rounded-lg\",\n \"bg-surface-strong/30 border border-border-control/50\",\n \"hover:bg-surface-strong/60 hover:border-border-control/80\",\n \"focus-visible:border-brand-primary/60 focus-visible:outline-none\",\n \"transition-colors\",\n \"flex items-center justify-center overflow-hidden\",\n].join(\" \");\n\nexport const LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES = {\n tabList: \"!bg-surface-strong/30 !border !border-border-control/50 !gap-1\",\n tab: \"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100\",\n cursor:\n \"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none\",\n tabContent: \"!text-text-muted group-data-[selected=true]:!text-text-primary\",\n} as const;\n","import {\n createContext,\n createElement,\n useContext,\n type PropsWithChildren,\n} from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n createInMemoryLaunchpadPorts,\n createLaunchpadCreateRuntime,\n type LaunchpadCreateRuntime,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\n\nexport type GeneratedMemeInfo = {\n symbol: string;\n name?: string;\n image?: string;\n};\n\nexport type LaunchpadUiPorts = {\n chain: Chain;\n requireAuth: (action: () => Promise<void>) => Promise<void>;\n uploadImage: (file: File) => Promise<string>;\n createRuntime: (onChange?: (snapshot: LaunchpadCreateSnapshot) => void) => LaunchpadCreateRuntime;\n generateMeme?: (prompt: string) => Promise<GeneratedMemeInfo>;\n onCreated?: (snapshot: LaunchpadCreateSnapshot) => void;\n};\n\nconst LaunchpadUiPortsContext = createContext<LaunchpadUiPorts | null>(null);\n\nexport function LaunchpadUiProvider({\n ports,\n children,\n}: PropsWithChildren<{ ports: LaunchpadUiPorts }>) {\n return createElement(LaunchpadUiPortsContext.Provider, { value: ports }, children);\n}\n\nexport function useLaunchpadUiPorts(): LaunchpadUiPorts {\n const ports = useContext(LaunchpadUiPortsContext);\n if (!ports) {\n throw new Error(\"useLaunchpadUiPorts must be used within LaunchpadUiProvider\");\n }\n return ports;\n}\n\nexport function createInMemoryLaunchpadUiPorts(\n options: {\n chain?: Chain;\n generateMeme?: LaunchpadUiPorts[\"generateMeme\"];\n signError?: Error;\n uploadError?: Error;\n } = {},\n): LaunchpadUiPorts {\n const memory = createInMemoryLaunchpadPorts({\n signError: options.signError,\n uploadError: options.uploadError,\n });\n return {\n chain: options.chain ?? Chain.SOLANA,\n requireAuth: async (action) => {\n await action();\n },\n uploadImage: async (file) => {\n void file;\n if (options.uploadError) throw options.uploadError;\n return \"https://ipfs.io/ipfs/memory-image\";\n },\n generateMeme: options.generateMeme,\n createRuntime: (onChange) =>\n createLaunchpadCreateRuntime({\n ...memory,\n onChange,\n }),\n };\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n LaunchPadPlatform,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n Button,\n cn,\n Image,\n ImageGalleryIcon,\n Input,\n NumberInput,\n Switch,\n Textarea,\n toast,\n Upload,\n type UploadRef,\n} from \"@liberfi.io/ui\";\nimport { LaunchpadCreateStatusView } from \"./create-status.view\";\nimport {\n LAUNCHPAD_FIELD_CLASS_NAMES,\n LAUNCHPAD_UPLOAD_BUTTON_CLASS,\n} from \"./form-control-theme\";\nimport { useLaunchpadUiPorts } from \"./ports\";\n\nexport type LaunchPadCreateFormValues = {\n name: string;\n ticker: string;\n image: string;\n description: string;\n website: string;\n twitter: string;\n telegram: string;\n supply: number;\n raised: number;\n sold: number;\n locked: number;\n shareFee: boolean;\n};\n\nconst DEFAULT_VALUES: LaunchPadCreateFormValues = {\n name: \"\",\n ticker: \"\",\n image: \"\",\n description: \"\",\n website: \"\",\n twitter: \"\",\n telegram: \"\",\n supply: 1e9,\n raised: 85,\n sold: 51,\n locked: 0,\n shareFee: false,\n};\n\nexport function LaunchPadCreateForm({\n platform,\n suggestedImage,\n suggestedName,\n suggestedSymbol,\n className,\n onPreviewChange,\n}: {\n platform: LaunchPadPlatform;\n suggestedImage?: string;\n suggestedName?: string;\n suggestedSymbol?: string;\n className?: string;\n onPreviewChange?: (values: LaunchPadCreateFormValues) => void;\n}) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [values, setValues] =\n useState<LaunchPadCreateFormValues>(DEFAULT_VALUES);\n const [errors, setErrors] = useState<\n Partial<Record<keyof LaunchPadCreateFormValues, string>>\n >({});\n const [snapshot, setSnapshot] = useState<LaunchpadCreateSnapshot>({\n status: \"idle\",\n });\n const [uploading, setUploading] = useState(false);\n const uploaderRef = useRef<UploadRef>(null);\n const isRaydium = platform === LaunchPadPlatform.RAYDIUM;\n const view = LaunchpadCreateStatusView(snapshot.status);\n\n useEffect(() => {\n setValues((current) => ({\n ...current,\n name: suggestedName || current.name,\n ticker: suggestedSymbol || current.ticker,\n image: suggestedImage || current.image,\n }));\n }, [suggestedImage, suggestedName, suggestedSymbol]);\n\n useEffect(() => {\n onPreviewChange?.(values);\n }, [onPreviewChange, values]);\n\n const disabled = useMemo(\n () =>\n !values.name.trim() ||\n !values.ticker.trim() ||\n !values.image.trim() ||\n !view.canSubmit ||\n uploading,\n [uploading, values.image, values.name, values.ticker, view.canSubmit],\n );\n\n const setField = <K extends keyof LaunchPadCreateFormValues>(\n key: K,\n value: LaunchPadCreateFormValues[K],\n ) => {\n setValues((current) => ({ ...current, [key]: value }));\n setErrors((current) => ({ ...current, [key]: undefined }));\n };\n\n const validate = (): boolean => {\n const next: Partial<Record<keyof LaunchPadCreateFormValues, string>> = {};\n if (!values.name.trim()) next.name = t(\"launchpad.error_name_required\");\n else if (values.name.length > 24)\n next.name = t(\"launchpad.error_name_length\");\n if (!values.ticker.trim())\n next.ticker = t(\"launchpad.error_ticker_required\");\n else if (values.ticker.length > 10)\n next.ticker = t(\"launchpad.error_ticker_length\");\n if (!values.image.trim()) next.image = t(\"launchpad.error_image_required\");\n if (isRaydium) {\n if (Number.isNaN(values.raised) || values.raised < 30) {\n next.raised = t(\"launchpad.error_raised_min\");\n }\n if (values.sold < 51 || values.sold > 80)\n next.sold = t(\"launchpad.error_sold_min\");\n if (values.locked < 0 || values.locked > 30)\n next.locked = t(\"launchpad.error_locked_max\");\n if (values.sold + values.locked > 80)\n next.sold = t(\"launchpad.error_locked_sum_by_sold\");\n }\n setErrors(next);\n return Object.keys(next).length === 0;\n };\n\n return (\n <form\n className={cn(\"flex flex-col gap-4\", className)}\n onSubmit={(event) => {\n event.preventDefault();\n if (!validate()) return;\n void ports.requireAuth(async () => {\n const runtime = ports.createRuntime(setSnapshot);\n const result = await runtime.submit({\n chain: ports.chain,\n name: values.name.trim(),\n symbol: values.ticker.trim(),\n platform,\n imageUri: values.image,\n description: values.description || undefined,\n website: values.website || undefined,\n twitter: values.twitter || undefined,\n telegram: values.telegram || undefined,\n });\n if (result.status === \"succeeded\") {\n ports.onCreated?.(result);\n setValues(DEFAULT_VALUES);\n toast.success(t(\"launchpad.mint_transaction_submitted\"));\n return;\n }\n toast.error(\n result.error?.message ?? t(\"launchpad.mint_transaction_error\"),\n );\n });\n }}\n >\n <Input\n label={t(\"launchpad.name_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.name}\n isInvalid={!!errors.name}\n errorMessage={errors.name}\n onValueChange={(value) => setField(\"name\", value)}\n />\n <Input\n label={t(\"launchpad.ticker_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.ticker}\n isInvalid={!!errors.ticker}\n errorMessage={errors.ticker}\n onValueChange={(value) => setField(\"ticker\", value)}\n />\n <div className=\"space-y-1.5\">\n <h3 className={cn(\"text-sm\", errors.image && \"text-danger\")}>\n {t(\"launchpad.image_label\")}\n </h3>\n <Upload\n ref={uploaderRef}\n accept={{\n \"image/jpeg\": [\".jpg\", \".jpeg\"],\n \"image/png\": [\".png\"],\n \"image/webp\": [\".webp\"],\n }}\n maxFiles={1}\n maxSize={10 * 1024 * 1024}\n noClick\n noKeyboard\n onDropAccepted={(files) => {\n const file = files[0];\n if (!file) return;\n setUploading(true);\n void ports\n .uploadImage(file)\n .then((url) => setField(\"image\", url))\n .catch((error: unknown) => {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"launchpad.error_image_upload\"),\n );\n })\n .finally(() => setUploading(false));\n }}\n >\n <button\n type=\"button\"\n aria-label={t(\"launchpad.image_label\")}\n className={LAUNCHPAD_UPLOAD_BUTTON_CLASS}\n onClick={() => uploaderRef.current?.open()}\n >\n {values.image ? (\n <Image\n src={values.image}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <ImageGalleryIcon\n width={24}\n height={24}\n className=\"text-text-muted\"\n />\n )}\n </button>\n </Upload>\n {errors.image ? (\n <p className=\"text-xs text-danger\">{errors.image}</p>\n ) : null}\n </div>\n <Textarea\n label={t(\"launchpad.description_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n placeholder={t(\"launchpad.description_placeholder\")}\n value={values.description}\n onValueChange={(value) => setField(\"description\", value)}\n />\n <Input\n label={t(\"launchpad.website_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.website}\n onValueChange={(value) => setField(\"website\", value)}\n />\n <Input\n label={t(\"launchpad.twitter_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.twitter}\n onValueChange={(value) => setField(\"twitter\", value)}\n />\n <Input\n label={t(\"launchpad.telegram_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.telegram}\n onValueChange={(value) => setField(\"telegram\", value)}\n />\n {isRaydium ? (\n <div className=\"grid grid-cols-2 gap-3\">\n <NumberInput\n label={t(\"launchpad.supply_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.supply}\n onValueChange={(value) => setField(\"supply\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.raised_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.raised}\n isInvalid={!!errors.raised}\n errorMessage={errors.raised}\n onValueChange={(value) => setField(\"raised\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.sold_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.sold}\n isInvalid={!!errors.sold}\n errorMessage={errors.sold}\n onValueChange={(value) => setField(\"sold\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.locked_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.locked}\n isInvalid={!!errors.locked}\n errorMessage={errors.locked}\n onValueChange={(value) => setField(\"locked\", Number(value ?? 0))}\n />\n <div className=\"col-span-2 flex items-center justify-between\">\n <span className=\"text-sm\">{t(\"launchpad.share_fee_label\")}</span>\n <Switch\n isSelected={values.shareFee}\n onValueChange={(value) => setField(\"shareFee\", value)}\n />\n </div>\n </div>\n ) : null}\n <Button\n type=\"submit\"\n color=\"primary\"\n isDisabled={disabled}\n isLoading={!view.canSubmit}\n >\n {t(\"launchpad.submit\")}\n </Button>\n </form>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Curve,\n CurveType,\n LaunchPadPlatform,\n} from \"@liberfi.io/react-launchpad\";\n\nconst NEW_TOKEN_DECIMALS = 6;\nconst SOL_TOKEN_DECIMALS = 9;\nconst PUMP_SUPPLY = \"1000000000000000\";\nconst PUMP_SOLD = \"793100000000000\";\nconst PUMP_RAISED = \"35000000000\";\nconst PUMP_MIGRATE_FEE = \"20000000\";\n\nexport function LaunchPadCurvePreview({\n platform,\n supply = 1e9,\n raised = 35,\n soldPercent = 79.31,\n}: {\n platform: LaunchPadPlatform;\n supply?: number;\n raised?: number;\n soldPercent?: number;\n}) {\n const { t } = useTranslation();\n const points = useMemo(() => {\n const isPump = platform === LaunchPadPlatform.PUMPFUN;\n const supplyValue = isPump\n ? PUMP_SUPPLY\n : String(Math.round(supply * 10 ** NEW_TOKEN_DECIMALS));\n const soldValue = isPump\n ? PUMP_SOLD\n : String(\n Math.round(supply * (soldPercent / 100) * 10 ** NEW_TOKEN_DECIMALS),\n );\n const raisedValue = isPump\n ? PUMP_RAISED\n : String(Math.round(raised * 10 ** SOL_TOKEN_DECIMALS));\n try {\n return Curve.getPoolCurvePointByInit({\n curveType: CurveType.CONSTANT_PRODUCT,\n supply: supplyValue,\n totalSell: soldValue,\n totalLockedAmount: 0,\n totalFundRaising: raisedValue,\n migrateFee: PUMP_MIGRATE_FEE,\n decimalA: NEW_TOKEN_DECIMALS,\n decimalB: SOL_TOKEN_DECIMALS,\n pointCount: 24,\n });\n } catch {\n return [];\n }\n }, [platform, raised, soldPercent, supply]);\n\n const path = useMemo(() => {\n if (points.length === 0) return \"\";\n const xs = points.map((point) => Number(point.totalSellSupply));\n const ys = points.map((point) => Number(point.price));\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs) || 1;\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys) || 1;\n return points\n .map((point, index) => {\n const x =\n ((Number(point.totalSellSupply) - minX) / (maxX - minX || 1)) * 320;\n const y =\n 120 - ((Number(point.price) - minY) / (maxY - minY || 1)) * 100;\n return `${index === 0 ? \"M\" : \"L\"}${x.toFixed(1)},${y.toFixed(1)}`;\n })\n .join(\" \");\n }, [points]);\n\n return (\n <div className=\"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden\">\n <h2 className=\"text-sm font-medium\">{t(\"launchpad.curve_preview\")}</h2>\n <svg\n viewBox=\"0 0 320 140\"\n className=\"w-full h-40\"\n role=\"img\"\n aria-label={t(\"launchpad.curve_preview\")}\n >\n <path\n d={path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"text-primary\"\n />\n </svg>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { Button, cn, Textarea } from \"@liberfi.io/ui\";\nimport { LAUNCHPAD_FIELD_CLASS_NAMES } from \"./form-control-theme\";\nimport { useLaunchpadUiPorts, type GeneratedMemeInfo } from \"./ports\";\n\nexport type MagicLaunchProps = {\n prompt?: string;\n onGenerate?: (result: GeneratedMemeInfo) => void;\n};\n\nexport function MagicLaunch({ prompt = \"\", onGenerate }: MagicLaunchProps) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [value, setValue] = useState(prompt);\n const [pending, setPending] = useState(false);\n const tooLong = value.length > 300;\n const canGenerate =\n value.length > 0 && !tooLong && !!ports.generateMeme && !pending;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex justify-between items-center\">\n <span\n className=\"font-semibold text-sm\"\n style={{\n backgroundImage:\n \"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n }}\n >\n {t(\"launchpad.magic_launch\")}\n </span>\n <span\n className={cn(\"text-xs\", tooLong ? \"text-danger\" : \"text-text-muted\")}\n >\n {value.length}/300\n </span>\n </div>\n <Textarea\n minRows={2}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={value}\n onValueChange={setValue}\n placeholder={t(\"launchpad.magic_launch_explained\")}\n />\n <Button\n color=\"primary\"\n isDisabled={!canGenerate}\n isLoading={pending}\n onPress={() => {\n void ports.requireAuth(async () => {\n if (!ports.generateMeme) return;\n setPending(true);\n try {\n const result = await ports.generateMeme(value);\n onGenerate?.(result);\n } finally {\n setPending(false);\n }\n });\n }}\n >\n {t(\"launchpad.magic_launch_submit\")}\n </Button>\n </div>\n );\n}\n","import { useCallback, useState, type Key } from \"react\";\nimport { LaunchPadPlatform } from \"@liberfi.io/react-launchpad\";\nimport { Image, Tab, Tabs, cn } from \"@liberfi.io/ui\";\nimport {\n LaunchPadCreateForm,\n type LaunchPadCreateFormValues,\n} from \"./LaunchPadCreateForm\";\nimport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nimport { MagicLaunch } from \"./MagicLaunch\";\nimport { LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES } from \"./form-control-theme\";\nimport type { GeneratedMemeInfo } from \"./ports\";\n\nconst PLATFORMS = [\n {\n platform: LaunchPadPlatform.PUMPFUN,\n name: \"Pump\",\n icon: \"/images/launchpad/pumpfun.svg\",\n },\n {\n platform: LaunchPadPlatform.RAYDIUM,\n name: \"Raydium\",\n icon: \"/images/launchpad/raydium.svg\",\n },\n] as const;\n\nexport interface LaunchPadHomeProps {\n prompt?: string;\n image?: string;\n}\n\nexport function LaunchPadHome({ prompt, image }: LaunchPadHomeProps) {\n const [platform, setPlatform] = useState<LaunchPadPlatform>(\n LaunchPadPlatform.PUMPFUN,\n );\n const [suggestedImage, setSuggestedImage] = useState<string | undefined>(\n image,\n );\n const [suggestedName, setSuggestedName] = useState<string | undefined>(\n undefined,\n );\n const [suggestedSymbol, setSuggestedSymbol] = useState<string | undefined>(\n undefined,\n );\n const [preview, setPreview] = useState<LaunchPadCreateFormValues | null>(\n null,\n );\n\n const onGenerate = useCallback((result: GeneratedMemeInfo) => {\n setSuggestedImage(result.image);\n setSuggestedName(result.name);\n setSuggestedSymbol(result.symbol);\n }, []);\n\n return (\n <div className=\"flex flex-col gap-4\">\n <MagicLaunch prompt={prompt} onGenerate={onGenerate} />\n <div className=\"flex-1 flex items-start justify-center gap-4\">\n <div\n className={cn(\n \"h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2\",\n )}\n >\n <Tabs\n fullWidth\n classNames={LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES}\n selectedKey={platform}\n onSelectionChange={(key: Key) =>\n setPlatform(String(key) as LaunchPadPlatform)\n }\n disableAnimation\n >\n {PLATFORMS.map((item) => (\n <Tab\n key={item.platform}\n title={\n <div className=\"flex items-center gap-2\">\n <Image\n src={item.icon}\n alt={item.name}\n width={20}\n height={20}\n />\n <span>{item.name}</span>\n </div>\n }\n />\n ))}\n </Tabs>\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.PUMPFUN}\n className={cn({ hidden: platform !== LaunchPadPlatform.PUMPFUN })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.RAYDIUM}\n className={cn({ hidden: platform !== LaunchPadPlatform.RAYDIUM })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n </div>\n <LaunchPadCurvePreview\n platform={platform}\n supply={preview?.supply}\n raised={preview?.raised}\n soldPercent={preview?.sold}\n />\n </div>\n </div>\n );\n}\n","export const PACKAGE_NAME = \"@liberfi.io/ui-launchpad\" as const;\n\nexport function LaunchpadReadyWidget() {\n return PACKAGE_NAME;\n}\n\nexport { LaunchpadCreateStatusView } from \"./create-status.view\";\nexport { LaunchPadHome, type LaunchPadHomeProps } from \"./LaunchPadHome\";\nexport { LaunchPadCreateForm } from \"./LaunchPadCreateForm\";\nexport { MagicLaunch, type MagicLaunchProps } from \"./MagicLaunch\";\nexport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nexport {\n LaunchpadUiProvider,\n useLaunchpadUiPorts,\n createInMemoryLaunchpadUiPorts,\n type LaunchpadUiPorts,\n type GeneratedMemeInfo,\n} from \"./ports\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/create-status.view.ts","../src/form-control-theme.ts","../src/ports.tsx","../src/LaunchPadCreateForm.tsx","../src/LaunchPadCurvePreview.tsx","../src/MagicLaunch.tsx","../src/LaunchPadHome.tsx","../src/index.ts"],"names":["LaunchpadCreateStatusView","status","LAUNCHPAD_FIELD_WRAPPER_CLASS","LAUNCHPAD_FIELD_CLASS_NAMES","LAUNCHPAD_UPLOAD_BUTTON_CLASS","LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES","LaunchpadUiPortsContext","createContext","LaunchpadUiProvider","ports","children","createElement","useLaunchpadUiPorts","useContext","createInMemoryLaunchpadUiPorts","options","memory","createInMemoryLaunchpadPorts","Chain","action","file","onChange","createLaunchpadCreateRuntime","DEFAULT_VALUES","LaunchPadCreateForm","platform","suggestedImage","suggestedName","suggestedSymbol","className","onPreviewChange","t","useTranslation","values","setValues","useState","errors","setErrors","snapshot","setSnapshot","uploading","setUploading","uploaderRef","useRef","isRaydium","LaunchPadPlatform","view","useEffect","current","disabled","useMemo","setField","key","value","validate","next","jsxs","cn","event","result","toast","jsx","Input","Upload","files","url","error","Image","ImageGalleryIcon","Textarea","NumberInput","Switch","Button","NEW_TOKEN_DECIMALS","SOL_TOKEN_DECIMALS","PUMP_SUPPLY","PUMP_SOLD","PUMP_RAISED","PUMP_MIGRATE_FEE","CHART_WIDTH","CHART_HEIGHT","CHART_MARGIN","X_TICK_COUNT","Y_TICK_COUNT","LaunchPadCurvePreview","supply","raised","soldPercent","points","isPump","supplyValue","soldValue","raisedValue","Curve","CurveType","chart","buildChart","tick","formatAmount","formatPrice","point","index","isFirst","isLast","formatAmountInUsd","source","innerWidth","innerHeight","minX","x","maxX","maxYValue","y","xRange","maxY","bottom","right","chartPoints","linePath","areaPath","firstPoint","lastPoint","endpoints","_","ratio","MagicLaunch","prompt","onGenerate","setValue","pending","setPending","tooLong","canGenerate","PLATFORMS","LaunchPadHome","image","setPlatform","setSuggestedImage","setSuggestedName","setSuggestedSymbol","preview","setPreview","useCallback","Tabs","item","Tab","PACKAGE_NAME","LaunchpadReadyWidget"],"mappings":"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","file":"index.js","sourcesContent":["import type { LaunchpadCreateStatus } from \"@liberfi.io/react-launchpad\";\n\nexport function LaunchpadCreateStatusView(status: LaunchpadCreateStatus): {\n status: LaunchpadCreateStatus;\n canSubmit: boolean;\n} {\n return {\n status,\n canSubmit:\n status !== \"signing\" &&\n status !== \"submitting\" &&\n status !== \"uploading\" &&\n status !== \"succeeded\",\n };\n}\n","const LAUNCHPAD_FIELD_WRAPPER_CLASS = [\n \"!bg-surface-strong/30\",\n \"!border\",\n \"!border-border-control/50\",\n \"data-[hover=true]:!bg-surface-strong/60\",\n \"data-[hover=true]:!border-border-control/80\",\n \"group-data-[focus=true]:!bg-surface-strong/60\",\n \"group-data-[focus=true]:!border-brand-primary/60\",\n].join(\" \");\n\nexport const LAUNCHPAD_FIELD_CLASS_NAMES = {\n inputWrapper: LAUNCHPAD_FIELD_WRAPPER_CLASS,\n label: \"text-text-secondary\",\n input: \"text-text-primary placeholder:text-text-muted\",\n} as const;\n\nexport const LAUNCHPAD_UPLOAD_BUTTON_CLASS = [\n \"w-full h-28 rounded-lg\",\n \"bg-surface-strong/30 border border-border-control/50\",\n \"hover:bg-surface-strong/60 hover:border-border-control/80\",\n \"focus-visible:border-brand-primary/60 focus-visible:outline-none\",\n \"transition-colors\",\n \"flex items-center justify-center overflow-hidden\",\n].join(\" \");\n\nexport const LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES = {\n tabList: \"!bg-surface-strong/30 !border !border-border-control/50 !gap-1\",\n tab: \"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100\",\n cursor:\n \"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none\",\n tabContent: \"!text-text-muted group-data-[selected=true]:!text-text-primary\",\n} as const;\n","import {\n createContext,\n createElement,\n useContext,\n type PropsWithChildren,\n} from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n createInMemoryLaunchpadPorts,\n createLaunchpadCreateRuntime,\n type LaunchpadCreateRuntime,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\n\nexport type GeneratedMemeInfo = {\n symbol: string;\n name?: string;\n image?: string;\n};\n\nexport type LaunchpadUiPorts = {\n chain: Chain;\n requireAuth: (action: () => Promise<void>) => Promise<void>;\n uploadImage: (file: File) => Promise<string>;\n createRuntime: (onChange?: (snapshot: LaunchpadCreateSnapshot) => void) => LaunchpadCreateRuntime;\n generateMeme?: (prompt: string) => Promise<GeneratedMemeInfo>;\n onCreated?: (snapshot: LaunchpadCreateSnapshot) => void;\n};\n\nconst LaunchpadUiPortsContext = createContext<LaunchpadUiPorts | null>(null);\n\nexport function LaunchpadUiProvider({\n ports,\n children,\n}: PropsWithChildren<{ ports: LaunchpadUiPorts }>) {\n return createElement(LaunchpadUiPortsContext.Provider, { value: ports }, children);\n}\n\nexport function useLaunchpadUiPorts(): LaunchpadUiPorts {\n const ports = useContext(LaunchpadUiPortsContext);\n if (!ports) {\n throw new Error(\"useLaunchpadUiPorts must be used within LaunchpadUiProvider\");\n }\n return ports;\n}\n\nexport function createInMemoryLaunchpadUiPorts(\n options: {\n chain?: Chain;\n generateMeme?: LaunchpadUiPorts[\"generateMeme\"];\n signError?: Error;\n uploadError?: Error;\n } = {},\n): LaunchpadUiPorts {\n const memory = createInMemoryLaunchpadPorts({\n signError: options.signError,\n uploadError: options.uploadError,\n });\n return {\n chain: options.chain ?? Chain.SOLANA,\n requireAuth: async (action) => {\n await action();\n },\n uploadImage: async (file) => {\n void file;\n if (options.uploadError) throw options.uploadError;\n return \"https://ipfs.io/ipfs/memory-image\";\n },\n generateMeme: options.generateMeme,\n createRuntime: (onChange) =>\n createLaunchpadCreateRuntime({\n ...memory,\n onChange,\n }),\n };\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n LaunchPadPlatform,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n Button,\n cn,\n Image,\n ImageGalleryIcon,\n Input,\n NumberInput,\n Switch,\n Textarea,\n toast,\n Upload,\n type UploadRef,\n} from \"@liberfi.io/ui\";\nimport { LaunchpadCreateStatusView } from \"./create-status.view\";\nimport {\n LAUNCHPAD_FIELD_CLASS_NAMES,\n LAUNCHPAD_UPLOAD_BUTTON_CLASS,\n} from \"./form-control-theme\";\nimport { useLaunchpadUiPorts } from \"./ports\";\n\nexport type LaunchPadCreateFormValues = {\n name: string;\n ticker: string;\n image: string;\n description: string;\n website: string;\n twitter: string;\n telegram: string;\n supply: number;\n raised: number;\n sold: number;\n locked: number;\n shareFee: boolean;\n};\n\nconst DEFAULT_VALUES: LaunchPadCreateFormValues = {\n name: \"\",\n ticker: \"\",\n image: \"\",\n description: \"\",\n website: \"\",\n twitter: \"\",\n telegram: \"\",\n supply: 1e9,\n raised: 85,\n sold: 51,\n locked: 0,\n shareFee: false,\n};\n\nexport function LaunchPadCreateForm({\n platform,\n suggestedImage,\n suggestedName,\n suggestedSymbol,\n className,\n onPreviewChange,\n}: {\n platform: LaunchPadPlatform;\n suggestedImage?: string;\n suggestedName?: string;\n suggestedSymbol?: string;\n className?: string;\n onPreviewChange?: (values: LaunchPadCreateFormValues) => void;\n}) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [values, setValues] =\n useState<LaunchPadCreateFormValues>(DEFAULT_VALUES);\n const [errors, setErrors] = useState<\n Partial<Record<keyof LaunchPadCreateFormValues, string>>\n >({});\n const [snapshot, setSnapshot] = useState<LaunchpadCreateSnapshot>({\n status: \"idle\",\n });\n const [uploading, setUploading] = useState(false);\n const uploaderRef = useRef<UploadRef>(null);\n const isRaydium = platform === LaunchPadPlatform.RAYDIUM;\n const view = LaunchpadCreateStatusView(snapshot.status);\n\n useEffect(() => {\n setValues((current) => ({\n ...current,\n name: suggestedName || current.name,\n ticker: suggestedSymbol || current.ticker,\n image: suggestedImage || current.image,\n }));\n }, [suggestedImage, suggestedName, suggestedSymbol]);\n\n useEffect(() => {\n onPreviewChange?.(values);\n }, [onPreviewChange, values]);\n\n const disabled = useMemo(\n () =>\n !values.name.trim() ||\n !values.ticker.trim() ||\n !values.image.trim() ||\n !view.canSubmit ||\n uploading,\n [uploading, values.image, values.name, values.ticker, view.canSubmit],\n );\n\n const setField = <K extends keyof LaunchPadCreateFormValues>(\n key: K,\n value: LaunchPadCreateFormValues[K],\n ) => {\n setValues((current) => ({ ...current, [key]: value }));\n setErrors((current) => ({ ...current, [key]: undefined }));\n };\n\n const validate = (): boolean => {\n const next: Partial<Record<keyof LaunchPadCreateFormValues, string>> = {};\n if (!values.name.trim()) next.name = t(\"launchpad.error_name_required\");\n else if (values.name.length > 24)\n next.name = t(\"launchpad.error_name_length\");\n if (!values.ticker.trim())\n next.ticker = t(\"launchpad.error_ticker_required\");\n else if (values.ticker.length > 10)\n next.ticker = t(\"launchpad.error_ticker_length\");\n if (!values.image.trim()) next.image = t(\"launchpad.error_image_required\");\n if (isRaydium) {\n if (Number.isNaN(values.raised) || values.raised < 30) {\n next.raised = t(\"launchpad.error_raised_min\");\n }\n if (values.sold < 51 || values.sold > 80)\n next.sold = t(\"launchpad.error_sold_min\");\n if (values.locked < 0 || values.locked > 30)\n next.locked = t(\"launchpad.error_locked_max\");\n if (values.sold + values.locked > 80)\n next.sold = t(\"launchpad.error_locked_sum_by_sold\");\n }\n setErrors(next);\n return Object.keys(next).length === 0;\n };\n\n return (\n <form\n className={cn(\"flex flex-col gap-4\", className)}\n onSubmit={(event) => {\n event.preventDefault();\n if (!validate()) return;\n void ports.requireAuth(async () => {\n const runtime = ports.createRuntime(setSnapshot);\n const result = await runtime.submit({\n chain: ports.chain,\n name: values.name.trim(),\n symbol: values.ticker.trim(),\n platform,\n imageUri: values.image,\n description: values.description || undefined,\n website: values.website || undefined,\n twitter: values.twitter || undefined,\n telegram: values.telegram || undefined,\n });\n if (result.status === \"succeeded\") {\n ports.onCreated?.(result);\n setValues(DEFAULT_VALUES);\n toast.success(t(\"launchpad.mint_transaction_submitted\"));\n return;\n }\n toast.error(\n result.error?.message ?? t(\"launchpad.mint_transaction_error\"),\n );\n });\n }}\n >\n <Input\n label={t(\"launchpad.name_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.name}\n isInvalid={!!errors.name}\n errorMessage={errors.name}\n onValueChange={(value) => setField(\"name\", value)}\n />\n <Input\n label={t(\"launchpad.ticker_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.ticker}\n isInvalid={!!errors.ticker}\n errorMessage={errors.ticker}\n onValueChange={(value) => setField(\"ticker\", value)}\n />\n <div className=\"space-y-1.5\">\n <h3 className={cn(\"text-sm\", errors.image && \"text-danger\")}>\n {t(\"launchpad.image_label\")}\n </h3>\n <Upload\n ref={uploaderRef}\n accept={{\n \"image/jpeg\": [\".jpg\", \".jpeg\"],\n \"image/png\": [\".png\"],\n \"image/webp\": [\".webp\"],\n }}\n maxFiles={1}\n maxSize={10 * 1024 * 1024}\n noClick\n noKeyboard\n onDropAccepted={(files) => {\n const file = files[0];\n if (!file) return;\n setUploading(true);\n void ports\n .uploadImage(file)\n .then((url) => setField(\"image\", url))\n .catch((error: unknown) => {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"launchpad.error_image_upload\"),\n );\n })\n .finally(() => setUploading(false));\n }}\n >\n <button\n type=\"button\"\n aria-label={t(\"launchpad.image_label\")}\n className={LAUNCHPAD_UPLOAD_BUTTON_CLASS}\n onClick={() => uploaderRef.current?.open()}\n >\n {values.image ? (\n <Image\n src={values.image}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <ImageGalleryIcon\n width={24}\n height={24}\n className=\"text-text-muted\"\n />\n )}\n </button>\n </Upload>\n {errors.image ? (\n <p className=\"text-xs text-danger\">{errors.image}</p>\n ) : null}\n </div>\n <Textarea\n label={t(\"launchpad.description_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n placeholder={t(\"launchpad.description_placeholder\")}\n value={values.description}\n onValueChange={(value) => setField(\"description\", value)}\n />\n <Input\n label={t(\"launchpad.website_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.website}\n onValueChange={(value) => setField(\"website\", value)}\n />\n <Input\n label={t(\"launchpad.twitter_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.twitter}\n onValueChange={(value) => setField(\"twitter\", value)}\n />\n <Input\n label={t(\"launchpad.telegram_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.telegram}\n onValueChange={(value) => setField(\"telegram\", value)}\n />\n {isRaydium ? (\n <div className=\"grid grid-cols-2 gap-3\">\n <NumberInput\n label={t(\"launchpad.supply_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.supply}\n onValueChange={(value) => setField(\"supply\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.raised_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.raised}\n isInvalid={!!errors.raised}\n errorMessage={errors.raised}\n onValueChange={(value) => setField(\"raised\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.sold_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.sold}\n isInvalid={!!errors.sold}\n errorMessage={errors.sold}\n onValueChange={(value) => setField(\"sold\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.locked_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.locked}\n isInvalid={!!errors.locked}\n errorMessage={errors.locked}\n onValueChange={(value) => setField(\"locked\", Number(value ?? 0))}\n />\n <div className=\"col-span-2 flex items-center justify-between\">\n <span className=\"text-sm\">{t(\"launchpad.share_fee_label\")}</span>\n <Switch\n isSelected={values.shareFee}\n onValueChange={(value) => setField(\"shareFee\", value)}\n />\n </div>\n </div>\n ) : null}\n <Button\n type=\"submit\"\n color=\"primary\"\n isDisabled={disabled}\n isLoading={!view.canSubmit}\n >\n {t(\"launchpad.submit\")}\n </Button>\n </form>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Curve,\n CurveType,\n LaunchPadPlatform,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n formatAmount,\n formatAmountInUsd,\n formatPrice,\n} from \"@liberfi.io/utils\";\n\nconst NEW_TOKEN_DECIMALS = 6;\nconst SOL_TOKEN_DECIMALS = 9;\nconst PUMP_SUPPLY = \"1000000000000000\";\nconst PUMP_SOLD = \"793100000000000\";\nconst PUMP_RAISED = \"35000000000\";\nconst PUMP_MIGRATE_FEE = \"20000000\";\nconst CHART_WIDTH = 420;\nconst CHART_HEIGHT = 250;\nconst CHART_MARGIN = { top: 12, right: 14, bottom: 38, left: 58 } as const;\nconst X_TICK_COUNT = 6;\nconst Y_TICK_COUNT = 5;\n\ntype ChartPoint = {\n x: number;\n y: number;\n chartX: number;\n chartY: number;\n};\n\nexport function LaunchPadCurvePreview({\n platform,\n supply = 1e9,\n raised = 35,\n soldPercent = 79.31,\n}: {\n platform: LaunchPadPlatform;\n supply?: number;\n raised?: number;\n soldPercent?: number;\n}) {\n const { t } = useTranslation();\n const points = useMemo(() => {\n const isPump = platform === LaunchPadPlatform.PUMPFUN;\n const supplyValue = isPump\n ? PUMP_SUPPLY\n : String(Math.round(supply * 10 ** NEW_TOKEN_DECIMALS));\n const soldValue = isPump\n ? PUMP_SOLD\n : String(\n Math.round(supply * (soldPercent / 100) * 10 ** NEW_TOKEN_DECIMALS),\n );\n const raisedValue = isPump\n ? PUMP_RAISED\n : String(Math.round(raised * 10 ** SOL_TOKEN_DECIMALS));\n try {\n return Curve.getPoolCurvePointByInit({\n curveType: CurveType.CONSTANT_PRODUCT,\n supply: supplyValue,\n totalSell: soldValue,\n totalLockedAmount: 0,\n totalFundRaising: raisedValue,\n migrateFee: PUMP_MIGRATE_FEE,\n decimalA: NEW_TOKEN_DECIMALS,\n decimalB: SOL_TOKEN_DECIMALS,\n pointCount: 40,\n });\n } catch {\n return [];\n }\n }, [platform, raised, soldPercent, supply]);\n\n const chart = useMemo(() => buildChart(points, supply), [points, supply]);\n\n return (\n <div className=\"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden\">\n <h2 className=\"text-sm font-medium\">{t(\"launchpad.curve_preview\")}</h2>\n <svg\n viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`}\n className=\"h-[280px] w-full\"\n role=\"img\"\n aria-label={t(\"launchpad.curve_preview\")}\n >\n <defs>\n <linearGradient\n id=\"launchpad-curve-area\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n className=\"text-primary\"\n >\n <stop offset=\"0%\" stopColor=\"currentColor\" stopOpacity=\"0.72\" />\n <stop offset=\"100%\" stopColor=\"currentColor\" stopOpacity=\"0.04\" />\n </linearGradient>\n </defs>\n <g data-testid=\"curve-grid\" className=\"text-border-subtle\">\n {chart.xTicks.map((tick) => (\n <line\n key={`x-grid-${tick.position}`}\n x1={tick.position}\n x2={tick.position}\n y1={CHART_MARGIN.top}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.35\"\n strokeWidth=\"0.75\"\n />\n ))}\n {chart.yTicks.map((tick) => (\n <line\n key={`y-grid-${tick.position}`}\n x1={CHART_MARGIN.left}\n x2={chart.right}\n y1={tick.position}\n y2={tick.position}\n stroke=\"currentColor\"\n strokeOpacity=\"0.35\"\n strokeWidth=\"0.75\"\n />\n ))}\n </g>\n <line\n data-testid=\"curve-x-axis\"\n x1={CHART_MARGIN.left}\n x2={chart.right}\n y1={chart.bottom}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1\"\n className=\"text-text-muted\"\n />\n <line\n data-testid=\"curve-y-axis\"\n x1={CHART_MARGIN.left}\n x2={CHART_MARGIN.left}\n y1={CHART_MARGIN.top}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1\"\n className=\"text-text-muted\"\n />\n <g className=\"fill-current text-text-muted text-[9px]\">\n {chart.xTicks.map((tick) => (\n <text\n key={`x-label-${tick.position}`}\n x={tick.position}\n y={chart.bottom + 17}\n textAnchor=\"middle\"\n >\n {formatAmount(tick.value)}\n </text>\n ))}\n {chart.yTicks.map((tick) => (\n <text\n key={`y-label-${tick.position}`}\n x={CHART_MARGIN.left - 8}\n y={tick.position + 3}\n textAnchor=\"end\"\n >\n {formatPrice(tick.value)}\n </text>\n ))}\n <text\n x={(CHART_MARGIN.left + chart.right) / 2}\n y={CHART_HEIGHT - 3}\n textAnchor=\"middle\"\n >\n {t(\"launchpad.curve_preview_token_supply\")}\n </text>\n <text\n x=\"12\"\n y={(CHART_MARGIN.top + chart.bottom) / 2}\n textAnchor=\"middle\"\n transform={`rotate(-90 12 ${(CHART_MARGIN.top + chart.bottom) / 2})`}\n >\n SOL\n </text>\n </g>\n <path\n data-testid=\"curve-area\"\n d={chart.areaPath}\n fill=\"url(#launchpad-curve-area)\"\n className=\"text-primary\"\n />\n <path\n data-testid=\"curve-line\"\n d={chart.linePath}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeDasharray=\"2 8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n className=\"text-primary\"\n />\n <g data-testid=\"curve-endpoints\">\n {chart.endpoints.map((point, index) => {\n const isFirst = index === 0;\n const isLast = index === chart.endpoints.length - 1;\n return (\n <circle\n key={`${point.x}-${point.y}`}\n cx={point.chartX}\n cy={point.chartY}\n r=\"4.5\"\n fill={isFirst ? \"#facc15\" : isLast ? \"#0ea5e9\" : \"currentColor\"}\n stroke=\"#f0fdf4\"\n strokeWidth=\"1.25\"\n className=\"text-primary\"\n >\n <title>{`${formatAmount(point.x)} · ${formatPrice(point.y)} SOL`}</title>\n </circle>\n );\n })}\n </g>\n </svg>\n <div className=\"flex flex-wrap items-center justify-center gap-x-8 gap-y-2 text-[10px] text-text-muted\">\n <p className=\"flex items-center\">\n <span\n data-testid=\"curve-legend-dot\"\n className=\"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#facc15]\"\n />\n <span className=\"mr-1.5\">\n {t(\"launchpad.curve_preview_starting_mc\")}\n </span>\n <span>{formatAmountInUsd(chart.startingMarketCap)}</span>\n </p>\n <p className=\"flex items-center\">\n <span\n data-testid=\"curve-legend-dot\"\n className=\"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#0ea5e9]\"\n />\n <span className=\"mr-1.5\">\n {t(\"launchpad.curve_preview_migration_mc\")}\n </span>\n <span>{formatAmountInUsd(chart.migrationMarketCap)}</span>\n </p>\n </div>\n </div>\n );\n}\n\nfunction buildChart(\n source: Array<{ totalSellSupply: unknown; price: unknown }>,\n supply: number,\n) {\n const values = source\n .map((point) => ({\n x: Number(point.totalSellSupply),\n y: Number(point.price),\n }))\n .filter((point) => Number.isFinite(point.x) && Number.isFinite(point.y));\n const innerWidth = CHART_WIDTH - CHART_MARGIN.left - CHART_MARGIN.right;\n const innerHeight = CHART_HEIGHT - CHART_MARGIN.top - CHART_MARGIN.bottom;\n const minX = values.length > 0 ? Math.min(...values.map(({ x }) => x)) : 0;\n const maxX = values.length > 0 ? Math.max(...values.map(({ x }) => x)) : 1;\n const maxYValue =\n values.length > 0 ? Math.max(...values.map(({ y }) => y)) : 1;\n const xRange = maxX - minX || 1;\n const maxY = (maxYValue || 1) * 1.05;\n const bottom = CHART_HEIGHT - CHART_MARGIN.bottom;\n const right = CHART_WIDTH - CHART_MARGIN.right;\n const chartPoints: ChartPoint[] = values.map(({ x, y }) => ({\n x,\n y,\n chartX: CHART_MARGIN.left + ((x - minX) / xRange) * innerWidth,\n chartY: CHART_MARGIN.top + (1 - y / maxY) * innerHeight,\n }));\n const linePath = chartPoints\n .map(\n (point, index) =>\n `${index === 0 ? \"M\" : \"L\"}${point.chartX.toFixed(2)},${point.chartY.toFixed(2)}`,\n )\n .join(\" \");\n const areaPath = linePath\n ? `${linePath} L${chartPoints.at(-1)?.chartX.toFixed(2)},${bottom} L${chartPoints[0]?.chartX.toFixed(2)},${bottom} Z`\n : \"\";\n const firstPoint = values[0];\n const lastPoint = values.at(-1);\n const endpoints =\n chartPoints.length > 1\n ? [chartPoints[0], chartPoints[chartPoints.length - 1]]\n : chartPoints;\n\n return {\n points: chartPoints,\n endpoints,\n linePath,\n areaPath,\n bottom,\n right,\n xTicks: Array.from({ length: X_TICK_COUNT }, (_, index) => {\n const ratio = index / (X_TICK_COUNT - 1);\n return {\n value: minX + xRange * ratio,\n position: CHART_MARGIN.left + innerWidth * ratio,\n };\n }),\n yTicks: Array.from({ length: Y_TICK_COUNT }, (_, index) => {\n const ratio = index / (Y_TICK_COUNT - 1);\n return {\n value: maxY * ratio,\n position: bottom - innerHeight * ratio,\n };\n }),\n startingMarketCap: firstPoint ? firstPoint.y * supply : 0,\n migrationMarketCap: lastPoint ? lastPoint.y * supply : 0,\n };\n}\n","import { useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { Button, cn, Textarea } from \"@liberfi.io/ui\";\nimport { LAUNCHPAD_FIELD_CLASS_NAMES } from \"./form-control-theme\";\nimport { useLaunchpadUiPorts, type GeneratedMemeInfo } from \"./ports\";\n\nexport type MagicLaunchProps = {\n prompt?: string;\n onGenerate?: (result: GeneratedMemeInfo) => void;\n};\n\nexport function MagicLaunch({ prompt = \"\", onGenerate }: MagicLaunchProps) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [value, setValue] = useState(prompt);\n const [pending, setPending] = useState(false);\n const tooLong = value.length > 300;\n const canGenerate =\n value.length > 0 && !tooLong && !!ports.generateMeme && !pending;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex justify-between items-center\">\n <span\n className=\"font-semibold text-sm\"\n style={{\n backgroundImage:\n \"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n }}\n >\n {t(\"launchpad.magic_launch\")}\n </span>\n <span\n className={cn(\"text-xs\", tooLong ? \"text-danger\" : \"text-text-muted\")}\n >\n {value.length}/300\n </span>\n </div>\n <Textarea\n minRows={2}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={value}\n onValueChange={setValue}\n placeholder={t(\"launchpad.magic_launch_explained\")}\n />\n <Button\n color=\"primary\"\n isDisabled={!canGenerate}\n isLoading={pending}\n onPress={() => {\n void ports.requireAuth(async () => {\n if (!ports.generateMeme) return;\n setPending(true);\n try {\n const result = await ports.generateMeme(value);\n onGenerate?.(result);\n } finally {\n setPending(false);\n }\n });\n }}\n >\n {t(\"launchpad.magic_launch_submit\")}\n </Button>\n </div>\n );\n}\n","import { useCallback, useState, type Key } from \"react\";\nimport { LaunchPadPlatform } from \"@liberfi.io/react-launchpad\";\nimport { Image, Tab, Tabs, cn } from \"@liberfi.io/ui\";\nimport {\n LaunchPadCreateForm,\n type LaunchPadCreateFormValues,\n} from \"./LaunchPadCreateForm\";\nimport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nimport { MagicLaunch } from \"./MagicLaunch\";\nimport { LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES } from \"./form-control-theme\";\nimport type { GeneratedMemeInfo } from \"./ports\";\n\nconst PLATFORMS = [\n {\n platform: LaunchPadPlatform.PUMPFUN,\n name: \"Pump\",\n icon: \"/images/launchpad/pumpfun.svg\",\n },\n {\n platform: LaunchPadPlatform.RAYDIUM,\n name: \"Raydium\",\n icon: \"/images/launchpad/raydium.svg\",\n },\n] as const;\n\nexport interface LaunchPadHomeProps {\n prompt?: string;\n image?: string;\n}\n\nexport function LaunchPadHome({ prompt, image }: LaunchPadHomeProps) {\n const [platform, setPlatform] = useState<LaunchPadPlatform>(\n LaunchPadPlatform.PUMPFUN,\n );\n const [suggestedImage, setSuggestedImage] = useState<string | undefined>(\n image,\n );\n const [suggestedName, setSuggestedName] = useState<string | undefined>(\n undefined,\n );\n const [suggestedSymbol, setSuggestedSymbol] = useState<string | undefined>(\n undefined,\n );\n const [preview, setPreview] = useState<LaunchPadCreateFormValues | null>(\n null,\n );\n\n const onGenerate = useCallback((result: GeneratedMemeInfo) => {\n setSuggestedImage(result.image);\n setSuggestedName(result.name);\n setSuggestedSymbol(result.symbol);\n }, []);\n\n return (\n <div className=\"flex flex-col gap-4\">\n <MagicLaunch prompt={prompt} onGenerate={onGenerate} />\n <div className=\"flex-1 flex items-start justify-center gap-4\">\n <div\n className={cn(\n \"h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2\",\n )}\n >\n <Tabs\n fullWidth\n classNames={LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES}\n selectedKey={platform}\n onSelectionChange={(key: Key) =>\n setPlatform(String(key) as LaunchPadPlatform)\n }\n disableAnimation\n >\n {PLATFORMS.map((item) => (\n <Tab\n key={item.platform}\n title={\n <div className=\"flex items-center gap-2\">\n <Image\n src={item.icon}\n alt={item.name}\n width={20}\n height={20}\n />\n <span>{item.name}</span>\n </div>\n }\n />\n ))}\n </Tabs>\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.PUMPFUN}\n className={cn({ hidden: platform !== LaunchPadPlatform.PUMPFUN })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.RAYDIUM}\n className={cn({ hidden: platform !== LaunchPadPlatform.RAYDIUM })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n </div>\n <LaunchPadCurvePreview\n platform={platform}\n supply={preview?.supply}\n raised={preview?.raised}\n soldPercent={preview?.sold}\n />\n </div>\n </div>\n );\n}\n","export const PACKAGE_NAME = \"@liberfi.io/ui-launchpad\" as const;\n\nexport function LaunchpadReadyWidget() {\n return PACKAGE_NAME;\n}\n\nexport { LaunchpadCreateStatusView } from \"./create-status.view\";\nexport { LaunchPadHome, type LaunchPadHomeProps } from \"./LaunchPadHome\";\nexport { LaunchPadCreateForm } from \"./LaunchPadCreateForm\";\nexport { MagicLaunch, type MagicLaunchProps } from \"./MagicLaunch\";\nexport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nexport {\n LaunchpadUiProvider,\n useLaunchpadUiPorts,\n createInMemoryLaunchpadUiPorts,\n type LaunchpadUiPorts,\n type GeneratedMemeInfo,\n} from \"./ports\";\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createContext,createElement,useContext,useState,useRef,useEffect,useMemo,useCallback}from'react';import {LaunchPadPlatform,createInMemoryLaunchpadPorts,createLaunchpadCreateRuntime,Curve,CurveType}from'@liberfi.io/react-launchpad';import {cn,Input,Upload,Image,ImageGalleryIcon,toast,Textarea,NumberInput,Switch,Button,Tabs,Tab}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {Chain}from'@liberfi.io/types';import {jsxs,jsx}from'react/jsx-runtime';function E(r){return {status:r,canSubmit:r!=="signing"&&r!=="submitting"&&r!=="uploading"&&r!=="succeeded"}}var ae=["!bg-surface-strong/30","!border","!border-border-control/50","data-[hover=true]:!bg-surface-strong/60","data-[hover=true]:!border-border-control/80","group-data-[focus=true]:!bg-surface-strong/60","group-data-[focus=true]:!border-brand-primary/60"].join(" "),d={inputWrapper:ae,label:"text-text-secondary",input:"text-text-primary placeholder:text-text-muted"},W=["w-full h-28 rounded-lg","bg-surface-strong/30 border border-border-control/50","hover:bg-surface-strong/60 hover:border-border-control/80","focus-visible:border-brand-primary/60 focus-visible:outline-none","transition-colors","flex items-center justify-center overflow-hidden"].join(" "),j={tabList:"!bg-surface-strong/30 !border !border-border-control/50 !gap-1",tab:"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100",cursor:"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none",tabContent:"!text-text-muted group-data-[selected=true]:!text-text-primary"};var q=createContext(null);function le({ports:r,children:u}){return createElement(q.Provider,{value:r},u)}function x(){let r=useContext(q);if(!r)throw new Error("useLaunchpadUiPorts must be used within LaunchpadUiProvider");return r}function ue(r={}){let u=createInMemoryLaunchpadPorts({signError:r.signError,uploadError:r.uploadError});return {chain:r.chain??Chain.SOLANA,requireAuth:async o=>{await o();},uploadImage:async o=>{if(r.uploadError)throw r.uploadError;return "https://ipfs.io/ipfs/memory-image"},generateMeme:r.generateMeme,createRuntime:o=>createLaunchpadCreateRuntime({...u,onChange:o})}}var X={name:"",ticker:"",image:"",description:"",website:"",twitter:"",telegram:"",supply:1e9,raised:85,sold:51,locked:0,shareFee:false};function k({platform:r,suggestedImage:u,suggestedName:o,suggestedSymbol:m,className:c,onPreviewChange:p}){let{t}=useTranslation(),l=x(),[e,g]=useState(X),[n,b]=useState({}),[v,s]=useState({status:"idle"}),[N,S]=useState(false),M=useRef(null),K=r===LaunchPadPlatform.RAYDIUM,F=E(v.status);useEffect(()=>{g(a=>({...a,name:o||a.name,ticker:m||a.ticker,image:u||a.image}));},[u,o,m]),useEffect(()=>{p?.(e);},[p,e]);let Z=useMemo(()=>!e.name.trim()||!e.ticker.trim()||!e.image.trim()||!F.canSubmit||N,[N,e.image,e.name,e.ticker,F.canSubmit]),h=(a,C)=>{g(f=>({...f,[a]:C})),b(f=>({...f,[a]:void 0}));},ee=()=>{let a={};return e.name.trim()?e.name.length>24&&(a.name=t("launchpad.error_name_length")):a.name=t("launchpad.error_name_required"),e.ticker.trim()?e.ticker.length>10&&(a.ticker=t("launchpad.error_ticker_length")):a.ticker=t("launchpad.error_ticker_required"),e.image.trim()||(a.image=t("launchpad.error_image_required")),K&&((Number.isNaN(e.raised)||e.raised<30)&&(a.raised=t("launchpad.error_raised_min")),(e.sold<51||e.sold>80)&&(a.sold=t("launchpad.error_sold_min")),(e.locked<0||e.locked>30)&&(a.locked=t("launchpad.error_locked_max")),e.sold+e.locked>80&&(a.sold=t("launchpad.error_locked_sum_by_sold"))),b(a),Object.keys(a).length===0};return jsxs("form",{className:cn("flex flex-col gap-4",c),onSubmit:a=>{a.preventDefault(),ee()&&l.requireAuth(async()=>{let f=await l.createRuntime(s).submit({chain:l.chain,name:e.name.trim(),symbol:e.ticker.trim(),platform:r,imageUri:e.image,description:e.description||void 0,website:e.website||void 0,twitter:e.twitter||void 0,telegram:e.telegram||void 0});if(f.status==="succeeded"){l.onCreated?.(f),g(X),toast.success(t("launchpad.mint_transaction_submitted"));return}toast.error(f.error?.message??t("launchpad.mint_transaction_error"));});},children:[jsx(Input,{label:t("launchpad.name_label"),classNames:d,value:e.name,isInvalid:!!n.name,errorMessage:n.name,onValueChange:a=>h("name",a)}),jsx(Input,{label:t("launchpad.ticker_label"),classNames:d,value:e.ticker,isInvalid:!!n.ticker,errorMessage:n.ticker,onValueChange:a=>h("ticker",a)}),jsxs("div",{className:"space-y-1.5",children:[jsx("h3",{className:cn("text-sm",n.image&&"text-danger"),children:t("launchpad.image_label")}),jsx(Upload,{ref:M,accept:{"image/jpeg":[".jpg",".jpeg"],"image/png":[".png"],"image/webp":[".webp"]},maxFiles:1,maxSize:10*1024*1024,noClick:true,noKeyboard:true,onDropAccepted:a=>{let C=a[0];C&&(S(true),l.uploadImage(C).then(f=>h("image",f)).catch(f=>{toast.error(f instanceof Error?f.message:t("launchpad.error_image_upload"));}).finally(()=>S(false)));},children:jsx("button",{type:"button","aria-label":t("launchpad.image_label"),className:W,onClick:()=>M.current?.open(),children:e.image?jsx(Image,{src:e.image,alt:"",className:"h-full w-full object-cover"}):jsx(ImageGalleryIcon,{width:24,height:24,className:"text-text-muted"})})}),n.image?jsx("p",{className:"text-xs text-danger",children:n.image}):null]}),jsx(Textarea,{label:t("launchpad.description_label"),classNames:d,placeholder:t("launchpad.description_placeholder"),value:e.description,onValueChange:a=>h("description",a)}),jsx(Input,{label:t("launchpad.website_label"),classNames:d,value:e.website,onValueChange:a=>h("website",a)}),jsx(Input,{label:t("launchpad.twitter_label"),classNames:d,value:e.twitter,onValueChange:a=>h("twitter",a)}),jsx(Input,{label:t("launchpad.telegram_label"),classNames:d,value:e.telegram,onValueChange:a=>h("telegram",a)}),K?jsxs("div",{className:"grid grid-cols-2 gap-3",children:[jsx(NumberInput,{label:t("launchpad.supply_label"),classNames:d,value:e.supply,onValueChange:a=>h("supply",Number(a??0))}),jsx(NumberInput,{label:t("launchpad.raised_label"),classNames:d,value:e.raised,isInvalid:!!n.raised,errorMessage:n.raised,onValueChange:a=>h("raised",Number(a??0))}),jsx(NumberInput,{label:t("launchpad.sold_label"),classNames:d,value:e.sold,isInvalid:!!n.sold,errorMessage:n.sold,onValueChange:a=>h("sold",Number(a??0))}),jsx(NumberInput,{label:t("launchpad.locked_label"),classNames:d,value:e.locked,isInvalid:!!n.locked,errorMessage:n.locked,onValueChange:a=>h("locked",Number(a??0))}),jsxs("div",{className:"col-span-2 flex items-center justify-between",children:[jsx("span",{className:"text-sm",children:t("launchpad.share_fee_label")}),jsx(Switch,{isSelected:e.shareFee,onValueChange:a=>h("shareFee",a)})]})]}):null,jsx(Button,{type:"submit",color:"primary",isDisabled:Z,isLoading:!F.canSubmit,children:t("launchpad.submit")})]})}var R=6,J=9,_e="1000000000000000",Ne="793100000000000",Se="35000000000",Me="20000000";function T({platform:r,supply:u=1e9,raised:o=35,soldPercent:m=79.31}){let{t:c}=useTranslation(),p=useMemo(()=>{let l=r===LaunchPadPlatform.PUMPFUN,e=l?_e:String(Math.round(u*10**R)),g=l?Ne:String(Math.round(u*(m/100)*10**R)),n=l?Se:String(Math.round(o*10**J));try{return Curve.getPoolCurvePointByInit({curveType:CurveType.CONSTANT_PRODUCT,supply:e,totalSell:g,totalLockedAmount:0,totalFundRaising:n,migrateFee:Me,decimalA:R,decimalB:J,pointCount:24})}catch{return []}},[r,o,m,u]),t=useMemo(()=>{if(p.length===0)return "";let l=p.map(s=>Number(s.totalSellSupply)),e=p.map(s=>Number(s.price)),g=Math.min(...l),n=Math.max(...l)||1,b=Math.min(...e),v=Math.max(...e)||1;return p.map((s,N)=>{let S=(Number(s.totalSellSupply)-g)/(n-g||1)*320,M=120-(Number(s.price)-b)/(v-b||1)*100;return `${N===0?"M":"L"}${S.toFixed(1)},${M.toFixed(1)}`}).join(" ")},[p]);return jsxs("div",{className:"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden",children:[jsx("h2",{className:"text-sm font-medium",children:c("launchpad.curve_preview")}),jsx("svg",{viewBox:"0 0 320 140",className:"w-full h-40",role:"img","aria-label":c("launchpad.curve_preview"),children:jsx("path",{d:t,fill:"none",stroke:"currentColor",strokeWidth:"2",className:"text-primary"})})]})}function H({prompt:r="",onGenerate:u}){let{t:o}=useTranslation(),m=x(),[c,p]=useState(r),[t,l]=useState(false),e=c.length>300,g=c.length>0&&!e&&!!m.generateMeme&&!t;return jsxs("div",{className:"flex flex-col gap-2",children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{className:"font-semibold text-sm",style:{backgroundImage:"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:o("launchpad.magic_launch")}),jsxs("span",{className:cn("text-xs",e?"text-danger":"text-text-muted"),children:[c.length,"/300"]})]}),jsx(Textarea,{minRows:2,classNames:d,value:c,onValueChange:p,placeholder:o("launchpad.magic_launch_explained")}),jsx(Button,{color:"primary",isDisabled:!g,isLoading:t,onPress:()=>{m.requireAuth(async()=>{if(m.generateMeme){l(true);try{let n=await m.generateMeme(c);u?.(n);}finally{l(false);}}});},children:o("launchpad.magic_launch_submit")})]})}var De=[{platform:LaunchPadPlatform.PUMPFUN,name:"Pump",icon:"/images/launchpad/pumpfun.svg"},{platform:LaunchPadPlatform.RAYDIUM,name:"Raydium",icon:"/images/launchpad/raydium.svg"}];function Te({prompt:r,image:u}){let[o,m]=useState(LaunchPadPlatform.PUMPFUN),[c,p]=useState(u),[t,l]=useState(void 0),[e,g]=useState(void 0),[n,b]=useState(null),v=useCallback(s=>{p(s.image),l(s.name),g(s.symbol);},[]);return jsxs("div",{className:"flex flex-col gap-4",children:[jsx(H,{prompt:r,onGenerate:v}),jsxs("div",{className:"flex-1 flex items-start justify-center gap-4",children:[jsxs("div",{className:cn("h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2"),children:[jsx(Tabs,{fullWidth:true,classNames:j,selectedKey:o,onSelectionChange:s=>m(String(s)),disableAnimation:true,children:De.map(s=>jsx(Tab,{title:jsxs("div",{className:"flex items-center gap-2",children:[jsx(Image,{src:s.icon,alt:s.name,width:20,height:20}),jsx("span",{children:s.name})]})},s.platform))}),jsx(k,{platform:LaunchPadPlatform.PUMPFUN,className:cn({hidden:o!==LaunchPadPlatform.PUMPFUN}),suggestedImage:c,suggestedName:t,suggestedSymbol:e,onPreviewChange:b}),jsx(k,{platform:LaunchPadPlatform.RAYDIUM,className:cn({hidden:o!==LaunchPadPlatform.RAYDIUM}),suggestedImage:c,suggestedName:t,suggestedSymbol:e,onPreviewChange:b})]}),jsx(T,{platform:o,supply:n?.supply,raised:n?.raised,soldPercent:n?.sold})]})]})}var Oe="@liberfi.io/ui-launchpad";function xa(){return Oe}
|
|
2
|
-
export{
|
|
1
|
+
import {createContext,createElement,useContext,useState,useRef,useEffect,useMemo,useCallback}from'react';import {LaunchPadPlatform,createInMemoryLaunchpadPorts,createLaunchpadCreateRuntime,Curve,CurveType}from'@liberfi.io/react-launchpad';import {cn,Input,Upload,Image,ImageGalleryIcon,toast,Textarea,NumberInput,Switch,Button,Tabs,Tab}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {Chain}from'@liberfi.io/types';import {jsxs,jsx}from'react/jsx-runtime';import {formatAmount,formatPrice,formatAmountInUsd}from'@liberfi.io/utils';function H(o){return {status:o,canSubmit:o!=="signing"&&o!=="submitting"&&o!=="uploading"&&o!=="succeeded"}}var ue=["!bg-surface-strong/30","!border","!border-border-control/50","data-[hover=true]:!bg-surface-strong/60","data-[hover=true]:!border-border-control/80","group-data-[focus=true]:!bg-surface-strong/60","group-data-[focus=true]:!border-brand-primary/60"].join(" "),y={inputWrapper:ue,label:"text-text-secondary",input:"text-text-primary placeholder:text-text-muted"},q=["w-full h-28 rounded-lg","bg-surface-strong/30 border border-border-control/50","hover:bg-surface-strong/60 hover:border-border-control/80","focus-visible:border-brand-primary/60 focus-visible:outline-none","transition-colors","flex items-center justify-center overflow-hidden"].join(" "),z={tabList:"!bg-surface-strong/30 !border !border-border-control/50 !gap-1",tab:"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100",cursor:"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none",tabContent:"!text-text-muted group-data-[selected=true]:!text-text-primary"};var Z=createContext(null);function be({ports:o,children:c}){return createElement(Z.Provider,{value:o},c)}function M(){let o=useContext(Z);if(!o)throw new Error("useLaunchpadUiPorts must be used within LaunchpadUiProvider");return o}function xe(o={}){let c=createInMemoryLaunchpadPorts({signError:o.signError,uploadError:o.uploadError});return {chain:o.chain??Chain.SOLANA,requireAuth:async n=>{await n();},uploadImage:async n=>{if(o.uploadError)throw o.uploadError;return "https://ipfs.io/ipfs/memory-image"},generateMeme:o.generateMeme,createRuntime:n=>createLaunchpadCreateRuntime({...c,onChange:n})}}var ee={name:"",ticker:"",image:"",description:"",website:"",twitter:"",telegram:"",supply:1e9,raised:85,sold:51,locked:0,shareFee:false};function V({platform:o,suggestedImage:c,suggestedName:n,suggestedSymbol:h,className:u,onPreviewChange:b}){let{t:e}=useTranslation(),r=M(),[t,f]=useState(ee),[s,_]=useState({}),[x,g]=useState({status:"idle"}),[I,k]=useState(false),S=useRef(null),F=o===LaunchPadPlatform.RAYDIUM,i=H(x.status);useEffect(()=>{f(a=>({...a,name:n||a.name,ticker:h||a.ticker,image:c||a.image}));},[c,n,h]),useEffect(()=>{b?.(t);},[b,t]);let v=useMemo(()=>!t.name.trim()||!t.ticker.trim()||!t.image.trim()||!i.canSubmit||I,[I,t.image,t.name,t.ticker,i.canSubmit]),p=(a,A)=>{f(P=>({...P,[a]:A})),_(P=>({...P,[a]:void 0}));},ce=()=>{let a={};return t.name.trim()?t.name.length>24&&(a.name=e("launchpad.error_name_length")):a.name=e("launchpad.error_name_required"),t.ticker.trim()?t.ticker.length>10&&(a.ticker=e("launchpad.error_ticker_length")):a.ticker=e("launchpad.error_ticker_required"),t.image.trim()||(a.image=e("launchpad.error_image_required")),F&&((Number.isNaN(t.raised)||t.raised<30)&&(a.raised=e("launchpad.error_raised_min")),(t.sold<51||t.sold>80)&&(a.sold=e("launchpad.error_sold_min")),(t.locked<0||t.locked>30)&&(a.locked=e("launchpad.error_locked_max")),t.sold+t.locked>80&&(a.sold=e("launchpad.error_locked_sum_by_sold"))),_(a),Object.keys(a).length===0};return jsxs("form",{className:cn("flex flex-col gap-4",u),onSubmit:a=>{a.preventDefault(),ce()&&r.requireAuth(async()=>{let P=await r.createRuntime(g).submit({chain:r.chain,name:t.name.trim(),symbol:t.ticker.trim(),platform:o,imageUri:t.image,description:t.description||void 0,website:t.website||void 0,twitter:t.twitter||void 0,telegram:t.telegram||void 0});if(P.status==="succeeded"){r.onCreated?.(P),f(ee),toast.success(e("launchpad.mint_transaction_submitted"));return}toast.error(P.error?.message??e("launchpad.mint_transaction_error"));});},children:[jsx(Input,{label:e("launchpad.name_label"),classNames:y,value:t.name,isInvalid:!!s.name,errorMessage:s.name,onValueChange:a=>p("name",a)}),jsx(Input,{label:e("launchpad.ticker_label"),classNames:y,value:t.ticker,isInvalid:!!s.ticker,errorMessage:s.ticker,onValueChange:a=>p("ticker",a)}),jsxs("div",{className:"space-y-1.5",children:[jsx("h3",{className:cn("text-sm",s.image&&"text-danger"),children:e("launchpad.image_label")}),jsx(Upload,{ref:S,accept:{"image/jpeg":[".jpg",".jpeg"],"image/png":[".png"],"image/webp":[".webp"]},maxFiles:1,maxSize:10*1024*1024,noClick:true,noKeyboard:true,onDropAccepted:a=>{let A=a[0];A&&(k(true),r.uploadImage(A).then(P=>p("image",P)).catch(P=>{toast.error(P instanceof Error?P.message:e("launchpad.error_image_upload"));}).finally(()=>k(false)));},children:jsx("button",{type:"button","aria-label":e("launchpad.image_label"),className:q,onClick:()=>S.current?.open(),children:t.image?jsx(Image,{src:t.image,alt:"",className:"h-full w-full object-cover"}):jsx(ImageGalleryIcon,{width:24,height:24,className:"text-text-muted"})})}),s.image?jsx("p",{className:"text-xs text-danger",children:s.image}):null]}),jsx(Textarea,{label:e("launchpad.description_label"),classNames:y,placeholder:e("launchpad.description_placeholder"),value:t.description,onValueChange:a=>p("description",a)}),jsx(Input,{label:e("launchpad.website_label"),classNames:y,value:t.website,onValueChange:a=>p("website",a)}),jsx(Input,{label:e("launchpad.twitter_label"),classNames:y,value:t.twitter,onValueChange:a=>p("twitter",a)}),jsx(Input,{label:e("launchpad.telegram_label"),classNames:y,value:t.telegram,onValueChange:a=>p("telegram",a)}),F?jsxs("div",{className:"grid grid-cols-2 gap-3",children:[jsx(NumberInput,{label:e("launchpad.supply_label"),classNames:y,value:t.supply,onValueChange:a=>p("supply",Number(a??0))}),jsx(NumberInput,{label:e("launchpad.raised_label"),classNames:y,value:t.raised,isInvalid:!!s.raised,errorMessage:s.raised,onValueChange:a=>p("raised",Number(a??0))}),jsx(NumberInput,{label:e("launchpad.sold_label"),classNames:y,value:t.sold,isInvalid:!!s.sold,errorMessage:s.sold,onValueChange:a=>p("sold",Number(a??0))}),jsx(NumberInput,{label:e("launchpad.locked_label"),classNames:y,value:t.locked,isInvalid:!!s.locked,errorMessage:s.locked,onValueChange:a=>p("locked",Number(a??0))}),jsxs("div",{className:"col-span-2 flex items-center justify-between",children:[jsx("span",{className:"text-sm",children:e("launchpad.share_fee_label")}),jsx(Switch,{isSelected:t.shareFee,onValueChange:a=>p("shareFee",a)})]})]}):null,jsx(Button,{type:"submit",color:"primary",isDisabled:v,isLoading:!i.canSubmit,children:e("launchpad.submit")})]})}var G=6,oe=9,Fe="1000000000000000",Te="793100000000000",Ee="35000000000",Re="20000000",W=420,D=250,m={top:12,right:14,bottom:38,left:58},se=6,ie=5;function B({platform:o,supply:c=1e9,raised:n=35,soldPercent:h=79.31}){let{t:u}=useTranslation(),b=useMemo(()=>{let r=o===LaunchPadPlatform.PUMPFUN,t=r?Fe:String(Math.round(c*10**G)),f=r?Te:String(Math.round(c*(h/100)*10**G)),s=r?Ee:String(Math.round(n*10**oe));try{return Curve.getPoolCurvePointByInit({curveType:CurveType.CONSTANT_PRODUCT,supply:t,totalSell:f,totalLockedAmount:0,totalFundRaising:s,migrateFee:Re,decimalA:G,decimalB:oe,pointCount:40})}catch{return []}},[o,n,h,c]),e=useMemo(()=>Ve(b,c),[b,c]);return jsxs("div",{className:"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden",children:[jsx("h2",{className:"text-sm font-medium",children:u("launchpad.curve_preview")}),jsxs("svg",{viewBox:`0 0 ${W} ${D}`,className:"h-[280px] w-full",role:"img","aria-label":u("launchpad.curve_preview"),children:[jsx("defs",{children:jsxs("linearGradient",{id:"launchpad-curve-area",x1:"0",y1:"0",x2:"0",y2:"1",className:"text-primary",children:[jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.72"}),jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.04"})]})}),jsxs("g",{"data-testid":"curve-grid",className:"text-border-subtle",children:[e.xTicks.map(r=>jsx("line",{x1:r.position,x2:r.position,y1:m.top,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.35",strokeWidth:"0.75"},`x-grid-${r.position}`)),e.yTicks.map(r=>jsx("line",{x1:m.left,x2:e.right,y1:r.position,y2:r.position,stroke:"currentColor",strokeOpacity:"0.35",strokeWidth:"0.75"},`y-grid-${r.position}`))]}),jsx("line",{"data-testid":"curve-x-axis",x1:m.left,x2:e.right,y1:e.bottom,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.65",strokeWidth:"1",className:"text-text-muted"}),jsx("line",{"data-testid":"curve-y-axis",x1:m.left,x2:m.left,y1:m.top,y2:e.bottom,stroke:"currentColor",strokeOpacity:"0.65",strokeWidth:"1",className:"text-text-muted"}),jsxs("g",{className:"fill-current text-text-muted text-[9px]",children:[e.xTicks.map(r=>jsx("text",{x:r.position,y:e.bottom+17,textAnchor:"middle",children:formatAmount(r.value)},`x-label-${r.position}`)),e.yTicks.map(r=>jsx("text",{x:m.left-8,y:r.position+3,textAnchor:"end",children:formatPrice(r.value)},`y-label-${r.position}`)),jsx("text",{x:(m.left+e.right)/2,y:D-3,textAnchor:"middle",children:u("launchpad.curve_preview_token_supply")}),jsx("text",{x:"12",y:(m.top+e.bottom)/2,textAnchor:"middle",transform:`rotate(-90 12 ${(m.top+e.bottom)/2})`,children:"SOL"})]}),jsx("path",{"data-testid":"curve-area",d:e.areaPath,fill:"url(#launchpad-curve-area)",className:"text-primary"}),jsx("path",{"data-testid":"curve-line",d:e.linePath,fill:"none",stroke:"currentColor",strokeDasharray:"2 8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"3",className:"text-primary"}),jsx("g",{"data-testid":"curve-endpoints",children:e.endpoints.map((r,t)=>{let f=t===0,s=t===e.endpoints.length-1;return jsx("circle",{cx:r.chartX,cy:r.chartY,r:"4.5",fill:f?"#facc15":s?"#0ea5e9":"currentColor",stroke:"#f0fdf4",strokeWidth:"1.25",className:"text-primary",children:jsx("title",{children:`${formatAmount(r.x)} \xB7 ${formatPrice(r.y)} SOL`})},`${r.x}-${r.y}`)})})]}),jsxs("div",{className:"flex flex-wrap items-center justify-center gap-x-8 gap-y-2 text-[10px] text-text-muted",children:[jsxs("p",{className:"flex items-center",children:[jsx("span",{"data-testid":"curve-legend-dot",className:"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#facc15]"}),jsx("span",{className:"mr-1.5",children:u("launchpad.curve_preview_starting_mc")}),jsx("span",{children:formatAmountInUsd(e.startingMarketCap)})]}),jsxs("p",{className:"flex items-center",children:[jsx("span",{"data-testid":"curve-legend-dot",className:"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#0ea5e9]"}),jsx("span",{className:"mr-1.5",children:u("launchpad.curve_preview_migration_mc")}),jsx("span",{children:formatAmountInUsd(e.migrationMarketCap)})]})]})]})}function Ve(o,c){let n=o.map(i=>({x:Number(i.totalSellSupply),y:Number(i.price)})).filter(i=>Number.isFinite(i.x)&&Number.isFinite(i.y)),h=W-m.left-m.right,u=D-m.top-m.bottom,b=n.length>0?Math.min(...n.map(({x:i})=>i)):0,e=n.length>0?Math.max(...n.map(({x:i})=>i)):1,r=n.length>0?Math.max(...n.map(({y:i})=>i)):1,t=e-b||1,f=(r||1)*1.05,s=D-m.bottom,_=W-m.right,x=n.map(({x:i,y:v})=>({x:i,y:v,chartX:m.left+(i-b)/t*h,chartY:m.top+(1-v/f)*u})),g=x.map((i,v)=>`${v===0?"M":"L"}${i.chartX.toFixed(2)},${i.chartY.toFixed(2)}`).join(" "),I=g?`${g} L${x.at(-1)?.chartX.toFixed(2)},${s} L${x[0]?.chartX.toFixed(2)},${s} Z`:"",k=n[0],S=n.at(-1),F=x.length>1?[x[0],x[x.length-1]]:x;return {points:x,endpoints:F,linePath:g,areaPath:I,bottom:s,right:_,xTicks:Array.from({length:se},(i,v)=>{let p=v/(se-1);return {value:b+t*p,position:m.left+h*p}}),yTicks:Array.from({length:ie},(i,v)=>{let p=v/(ie-1);return {value:f*p,position:s-u*p}}),startingMarketCap:k?k.y*c:0,migrationMarketCap:S?S.y*c:0}}function j({prompt:o="",onGenerate:c}){let{t:n}=useTranslation(),h=M(),[u,b]=useState(o),[e,r]=useState(false),t=u.length>300,f=u.length>0&&!t&&!!h.generateMeme&&!e;return jsxs("div",{className:"flex flex-col gap-2",children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{className:"font-semibold text-sm",style:{backgroundImage:"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:n("launchpad.magic_launch")}),jsxs("span",{className:cn("text-xs",t?"text-danger":"text-text-muted"),children:[u.length,"/300"]})]}),jsx(Textarea,{minRows:2,classNames:y,value:u,onValueChange:b,placeholder:n("launchpad.magic_launch_explained")}),jsx(Button,{color:"primary",isDisabled:!f,isLoading:e,onPress:()=>{h.requireAuth(async()=>{if(h.generateMeme){r(true);try{let s=await h.generateMeme(u);c?.(s);}finally{r(false);}}});},children:n("launchpad.magic_launch_submit")})]})}var Ye=[{platform:LaunchPadPlatform.PUMPFUN,name:"Pump",icon:"/images/launchpad/pumpfun.svg"},{platform:LaunchPadPlatform.RAYDIUM,name:"Raydium",icon:"/images/launchpad/raydium.svg"}];function je({prompt:o,image:c}){let[n,h]=useState(LaunchPadPlatform.PUMPFUN),[u,b]=useState(c),[e,r]=useState(void 0),[t,f]=useState(void 0),[s,_]=useState(null),x=useCallback(g=>{b(g.image),r(g.name),f(g.symbol);},[]);return jsxs("div",{className:"flex flex-col gap-4",children:[jsx(j,{prompt:o,onGenerate:x}),jsxs("div",{className:"flex-1 flex items-start justify-center gap-4",children:[jsxs("div",{className:cn("h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2"),children:[jsx(Tabs,{fullWidth:true,classNames:z,selectedKey:n,onSelectionChange:g=>h(String(g)),disableAnimation:true,children:Ye.map(g=>jsx(Tab,{title:jsxs("div",{className:"flex items-center gap-2",children:[jsx(Image,{src:g.icon,alt:g.name,width:20,height:20}),jsx("span",{children:g.name})]})},g.platform))}),jsx(V,{platform:LaunchPadPlatform.PUMPFUN,className:cn({hidden:n!==LaunchPadPlatform.PUMPFUN}),suggestedImage:u,suggestedName:e,suggestedSymbol:t,onPreviewChange:_}),jsx(V,{platform:LaunchPadPlatform.RAYDIUM,className:cn({hidden:n!==LaunchPadPlatform.RAYDIUM}),suggestedImage:u,suggestedName:e,suggestedSymbol:t,onPreviewChange:_})]}),jsx(B,{platform:n,supply:s?.supply,raised:s?.raised,soldPercent:s?.sold})]})]})}var Xe="@liberfi.io/ui-launchpad";function It(){return Xe}
|
|
2
|
+
export{V as LaunchPadCreateForm,B as LaunchPadCurvePreview,je as LaunchPadHome,H as LaunchpadCreateStatusView,It as LaunchpadReadyWidget,be as LaunchpadUiProvider,j as MagicLaunch,Xe as PACKAGE_NAME,xe as createInMemoryLaunchpadUiPorts,M as useLaunchpadUiPorts};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create-status.view.ts","../src/form-control-theme.ts","../src/ports.tsx","../src/LaunchPadCreateForm.tsx","../src/LaunchPadCurvePreview.tsx","../src/MagicLaunch.tsx","../src/LaunchPadHome.tsx","../src/index.ts"],"names":["LaunchpadCreateStatusView","status","LAUNCHPAD_FIELD_WRAPPER_CLASS","LAUNCHPAD_FIELD_CLASS_NAMES","LAUNCHPAD_UPLOAD_BUTTON_CLASS","LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES","LaunchpadUiPortsContext","createContext","LaunchpadUiProvider","ports","children","createElement","useLaunchpadUiPorts","useContext","createInMemoryLaunchpadUiPorts","options","memory","createInMemoryLaunchpadPorts","Chain","action","file","onChange","createLaunchpadCreateRuntime","DEFAULT_VALUES","LaunchPadCreateForm","platform","suggestedImage","suggestedName","suggestedSymbol","className","onPreviewChange","useTranslation","values","setValues","useState","errors","setErrors","snapshot","setSnapshot","uploading","setUploading","uploaderRef","useRef","isRaydium","LaunchPadPlatform","view","useEffect","current","disabled","useMemo","setField","key","value","validate","next","jsxs","cn","event","result","toast","jsx","Input","Upload","files","url","error","Image","ImageGalleryIcon","Textarea","NumberInput","Switch","Button","NEW_TOKEN_DECIMALS","SOL_TOKEN_DECIMALS","PUMP_SUPPLY","PUMP_SOLD","PUMP_RAISED","PUMP_MIGRATE_FEE","LaunchPadCurvePreview","supply","raised","soldPercent","t","points","isPump","supplyValue","soldValue","raisedValue","Curve","CurveType","path","xs","point","ys","minX","maxX","minY","maxY","index","x","y","MagicLaunch","prompt","onGenerate","setValue","pending","setPending","tooLong","canGenerate","PLATFORMS","LaunchPadHome","image","setPlatform","setSuggestedImage","setSuggestedName","setSuggestedSymbol","preview","setPreview","useCallback","Tabs","item","Tab","PACKAGE_NAME","LaunchpadReadyWidget"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { LaunchpadCreateStatus } from \"@liberfi.io/react-launchpad\";\n\nexport function LaunchpadCreateStatusView(status: LaunchpadCreateStatus): {\n status: LaunchpadCreateStatus;\n canSubmit: boolean;\n} {\n return {\n status,\n canSubmit:\n status !== \"signing\" &&\n status !== \"submitting\" &&\n status !== \"uploading\" &&\n status !== \"succeeded\",\n };\n}\n","const LAUNCHPAD_FIELD_WRAPPER_CLASS = [\n \"!bg-surface-strong/30\",\n \"!border\",\n \"!border-border-control/50\",\n \"data-[hover=true]:!bg-surface-strong/60\",\n \"data-[hover=true]:!border-border-control/80\",\n \"group-data-[focus=true]:!bg-surface-strong/60\",\n \"group-data-[focus=true]:!border-brand-primary/60\",\n].join(\" \");\n\nexport const LAUNCHPAD_FIELD_CLASS_NAMES = {\n inputWrapper: LAUNCHPAD_FIELD_WRAPPER_CLASS,\n label: \"text-text-secondary\",\n input: \"text-text-primary placeholder:text-text-muted\",\n} as const;\n\nexport const LAUNCHPAD_UPLOAD_BUTTON_CLASS = [\n \"w-full h-28 rounded-lg\",\n \"bg-surface-strong/30 border border-border-control/50\",\n \"hover:bg-surface-strong/60 hover:border-border-control/80\",\n \"focus-visible:border-brand-primary/60 focus-visible:outline-none\",\n \"transition-colors\",\n \"flex items-center justify-center overflow-hidden\",\n].join(\" \");\n\nexport const LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES = {\n tabList: \"!bg-surface-strong/30 !border !border-border-control/50 !gap-1\",\n tab: \"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100\",\n cursor:\n \"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none\",\n tabContent: \"!text-text-muted group-data-[selected=true]:!text-text-primary\",\n} as const;\n","import {\n createContext,\n createElement,\n useContext,\n type PropsWithChildren,\n} from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n createInMemoryLaunchpadPorts,\n createLaunchpadCreateRuntime,\n type LaunchpadCreateRuntime,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\n\nexport type GeneratedMemeInfo = {\n symbol: string;\n name?: string;\n image?: string;\n};\n\nexport type LaunchpadUiPorts = {\n chain: Chain;\n requireAuth: (action: () => Promise<void>) => Promise<void>;\n uploadImage: (file: File) => Promise<string>;\n createRuntime: (onChange?: (snapshot: LaunchpadCreateSnapshot) => void) => LaunchpadCreateRuntime;\n generateMeme?: (prompt: string) => Promise<GeneratedMemeInfo>;\n onCreated?: (snapshot: LaunchpadCreateSnapshot) => void;\n};\n\nconst LaunchpadUiPortsContext = createContext<LaunchpadUiPorts | null>(null);\n\nexport function LaunchpadUiProvider({\n ports,\n children,\n}: PropsWithChildren<{ ports: LaunchpadUiPorts }>) {\n return createElement(LaunchpadUiPortsContext.Provider, { value: ports }, children);\n}\n\nexport function useLaunchpadUiPorts(): LaunchpadUiPorts {\n const ports = useContext(LaunchpadUiPortsContext);\n if (!ports) {\n throw new Error(\"useLaunchpadUiPorts must be used within LaunchpadUiProvider\");\n }\n return ports;\n}\n\nexport function createInMemoryLaunchpadUiPorts(\n options: {\n chain?: Chain;\n generateMeme?: LaunchpadUiPorts[\"generateMeme\"];\n signError?: Error;\n uploadError?: Error;\n } = {},\n): LaunchpadUiPorts {\n const memory = createInMemoryLaunchpadPorts({\n signError: options.signError,\n uploadError: options.uploadError,\n });\n return {\n chain: options.chain ?? Chain.SOLANA,\n requireAuth: async (action) => {\n await action();\n },\n uploadImage: async (file) => {\n void file;\n if (options.uploadError) throw options.uploadError;\n return \"https://ipfs.io/ipfs/memory-image\";\n },\n generateMeme: options.generateMeme,\n createRuntime: (onChange) =>\n createLaunchpadCreateRuntime({\n ...memory,\n onChange,\n }),\n };\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n LaunchPadPlatform,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n Button,\n cn,\n Image,\n ImageGalleryIcon,\n Input,\n NumberInput,\n Switch,\n Textarea,\n toast,\n Upload,\n type UploadRef,\n} from \"@liberfi.io/ui\";\nimport { LaunchpadCreateStatusView } from \"./create-status.view\";\nimport {\n LAUNCHPAD_FIELD_CLASS_NAMES,\n LAUNCHPAD_UPLOAD_BUTTON_CLASS,\n} from \"./form-control-theme\";\nimport { useLaunchpadUiPorts } from \"./ports\";\n\nexport type LaunchPadCreateFormValues = {\n name: string;\n ticker: string;\n image: string;\n description: string;\n website: string;\n twitter: string;\n telegram: string;\n supply: number;\n raised: number;\n sold: number;\n locked: number;\n shareFee: boolean;\n};\n\nconst DEFAULT_VALUES: LaunchPadCreateFormValues = {\n name: \"\",\n ticker: \"\",\n image: \"\",\n description: \"\",\n website: \"\",\n twitter: \"\",\n telegram: \"\",\n supply: 1e9,\n raised: 85,\n sold: 51,\n locked: 0,\n shareFee: false,\n};\n\nexport function LaunchPadCreateForm({\n platform,\n suggestedImage,\n suggestedName,\n suggestedSymbol,\n className,\n onPreviewChange,\n}: {\n platform: LaunchPadPlatform;\n suggestedImage?: string;\n suggestedName?: string;\n suggestedSymbol?: string;\n className?: string;\n onPreviewChange?: (values: LaunchPadCreateFormValues) => void;\n}) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [values, setValues] =\n useState<LaunchPadCreateFormValues>(DEFAULT_VALUES);\n const [errors, setErrors] = useState<\n Partial<Record<keyof LaunchPadCreateFormValues, string>>\n >({});\n const [snapshot, setSnapshot] = useState<LaunchpadCreateSnapshot>({\n status: \"idle\",\n });\n const [uploading, setUploading] = useState(false);\n const uploaderRef = useRef<UploadRef>(null);\n const isRaydium = platform === LaunchPadPlatform.RAYDIUM;\n const view = LaunchpadCreateStatusView(snapshot.status);\n\n useEffect(() => {\n setValues((current) => ({\n ...current,\n name: suggestedName || current.name,\n ticker: suggestedSymbol || current.ticker,\n image: suggestedImage || current.image,\n }));\n }, [suggestedImage, suggestedName, suggestedSymbol]);\n\n useEffect(() => {\n onPreviewChange?.(values);\n }, [onPreviewChange, values]);\n\n const disabled = useMemo(\n () =>\n !values.name.trim() ||\n !values.ticker.trim() ||\n !values.image.trim() ||\n !view.canSubmit ||\n uploading,\n [uploading, values.image, values.name, values.ticker, view.canSubmit],\n );\n\n const setField = <K extends keyof LaunchPadCreateFormValues>(\n key: K,\n value: LaunchPadCreateFormValues[K],\n ) => {\n setValues((current) => ({ ...current, [key]: value }));\n setErrors((current) => ({ ...current, [key]: undefined }));\n };\n\n const validate = (): boolean => {\n const next: Partial<Record<keyof LaunchPadCreateFormValues, string>> = {};\n if (!values.name.trim()) next.name = t(\"launchpad.error_name_required\");\n else if (values.name.length > 24)\n next.name = t(\"launchpad.error_name_length\");\n if (!values.ticker.trim())\n next.ticker = t(\"launchpad.error_ticker_required\");\n else if (values.ticker.length > 10)\n next.ticker = t(\"launchpad.error_ticker_length\");\n if (!values.image.trim()) next.image = t(\"launchpad.error_image_required\");\n if (isRaydium) {\n if (Number.isNaN(values.raised) || values.raised < 30) {\n next.raised = t(\"launchpad.error_raised_min\");\n }\n if (values.sold < 51 || values.sold > 80)\n next.sold = t(\"launchpad.error_sold_min\");\n if (values.locked < 0 || values.locked > 30)\n next.locked = t(\"launchpad.error_locked_max\");\n if (values.sold + values.locked > 80)\n next.sold = t(\"launchpad.error_locked_sum_by_sold\");\n }\n setErrors(next);\n return Object.keys(next).length === 0;\n };\n\n return (\n <form\n className={cn(\"flex flex-col gap-4\", className)}\n onSubmit={(event) => {\n event.preventDefault();\n if (!validate()) return;\n void ports.requireAuth(async () => {\n const runtime = ports.createRuntime(setSnapshot);\n const result = await runtime.submit({\n chain: ports.chain,\n name: values.name.trim(),\n symbol: values.ticker.trim(),\n platform,\n imageUri: values.image,\n description: values.description || undefined,\n website: values.website || undefined,\n twitter: values.twitter || undefined,\n telegram: values.telegram || undefined,\n });\n if (result.status === \"succeeded\") {\n ports.onCreated?.(result);\n setValues(DEFAULT_VALUES);\n toast.success(t(\"launchpad.mint_transaction_submitted\"));\n return;\n }\n toast.error(\n result.error?.message ?? t(\"launchpad.mint_transaction_error\"),\n );\n });\n }}\n >\n <Input\n label={t(\"launchpad.name_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.name}\n isInvalid={!!errors.name}\n errorMessage={errors.name}\n onValueChange={(value) => setField(\"name\", value)}\n />\n <Input\n label={t(\"launchpad.ticker_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.ticker}\n isInvalid={!!errors.ticker}\n errorMessage={errors.ticker}\n onValueChange={(value) => setField(\"ticker\", value)}\n />\n <div className=\"space-y-1.5\">\n <h3 className={cn(\"text-sm\", errors.image && \"text-danger\")}>\n {t(\"launchpad.image_label\")}\n </h3>\n <Upload\n ref={uploaderRef}\n accept={{\n \"image/jpeg\": [\".jpg\", \".jpeg\"],\n \"image/png\": [\".png\"],\n \"image/webp\": [\".webp\"],\n }}\n maxFiles={1}\n maxSize={10 * 1024 * 1024}\n noClick\n noKeyboard\n onDropAccepted={(files) => {\n const file = files[0];\n if (!file) return;\n setUploading(true);\n void ports\n .uploadImage(file)\n .then((url) => setField(\"image\", url))\n .catch((error: unknown) => {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"launchpad.error_image_upload\"),\n );\n })\n .finally(() => setUploading(false));\n }}\n >\n <button\n type=\"button\"\n aria-label={t(\"launchpad.image_label\")}\n className={LAUNCHPAD_UPLOAD_BUTTON_CLASS}\n onClick={() => uploaderRef.current?.open()}\n >\n {values.image ? (\n <Image\n src={values.image}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <ImageGalleryIcon\n width={24}\n height={24}\n className=\"text-text-muted\"\n />\n )}\n </button>\n </Upload>\n {errors.image ? (\n <p className=\"text-xs text-danger\">{errors.image}</p>\n ) : null}\n </div>\n <Textarea\n label={t(\"launchpad.description_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n placeholder={t(\"launchpad.description_placeholder\")}\n value={values.description}\n onValueChange={(value) => setField(\"description\", value)}\n />\n <Input\n label={t(\"launchpad.website_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.website}\n onValueChange={(value) => setField(\"website\", value)}\n />\n <Input\n label={t(\"launchpad.twitter_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.twitter}\n onValueChange={(value) => setField(\"twitter\", value)}\n />\n <Input\n label={t(\"launchpad.telegram_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.telegram}\n onValueChange={(value) => setField(\"telegram\", value)}\n />\n {isRaydium ? (\n <div className=\"grid grid-cols-2 gap-3\">\n <NumberInput\n label={t(\"launchpad.supply_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.supply}\n onValueChange={(value) => setField(\"supply\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.raised_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.raised}\n isInvalid={!!errors.raised}\n errorMessage={errors.raised}\n onValueChange={(value) => setField(\"raised\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.sold_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.sold}\n isInvalid={!!errors.sold}\n errorMessage={errors.sold}\n onValueChange={(value) => setField(\"sold\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.locked_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.locked}\n isInvalid={!!errors.locked}\n errorMessage={errors.locked}\n onValueChange={(value) => setField(\"locked\", Number(value ?? 0))}\n />\n <div className=\"col-span-2 flex items-center justify-between\">\n <span className=\"text-sm\">{t(\"launchpad.share_fee_label\")}</span>\n <Switch\n isSelected={values.shareFee}\n onValueChange={(value) => setField(\"shareFee\", value)}\n />\n </div>\n </div>\n ) : null}\n <Button\n type=\"submit\"\n color=\"primary\"\n isDisabled={disabled}\n isLoading={!view.canSubmit}\n >\n {t(\"launchpad.submit\")}\n </Button>\n </form>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Curve,\n CurveType,\n LaunchPadPlatform,\n} from \"@liberfi.io/react-launchpad\";\n\nconst NEW_TOKEN_DECIMALS = 6;\nconst SOL_TOKEN_DECIMALS = 9;\nconst PUMP_SUPPLY = \"1000000000000000\";\nconst PUMP_SOLD = \"793100000000000\";\nconst PUMP_RAISED = \"35000000000\";\nconst PUMP_MIGRATE_FEE = \"20000000\";\n\nexport function LaunchPadCurvePreview({\n platform,\n supply = 1e9,\n raised = 35,\n soldPercent = 79.31,\n}: {\n platform: LaunchPadPlatform;\n supply?: number;\n raised?: number;\n soldPercent?: number;\n}) {\n const { t } = useTranslation();\n const points = useMemo(() => {\n const isPump = platform === LaunchPadPlatform.PUMPFUN;\n const supplyValue = isPump\n ? PUMP_SUPPLY\n : String(Math.round(supply * 10 ** NEW_TOKEN_DECIMALS));\n const soldValue = isPump\n ? PUMP_SOLD\n : String(\n Math.round(supply * (soldPercent / 100) * 10 ** NEW_TOKEN_DECIMALS),\n );\n const raisedValue = isPump\n ? PUMP_RAISED\n : String(Math.round(raised * 10 ** SOL_TOKEN_DECIMALS));\n try {\n return Curve.getPoolCurvePointByInit({\n curveType: CurveType.CONSTANT_PRODUCT,\n supply: supplyValue,\n totalSell: soldValue,\n totalLockedAmount: 0,\n totalFundRaising: raisedValue,\n migrateFee: PUMP_MIGRATE_FEE,\n decimalA: NEW_TOKEN_DECIMALS,\n decimalB: SOL_TOKEN_DECIMALS,\n pointCount: 24,\n });\n } catch {\n return [];\n }\n }, [platform, raised, soldPercent, supply]);\n\n const path = useMemo(() => {\n if (points.length === 0) return \"\";\n const xs = points.map((point) => Number(point.totalSellSupply));\n const ys = points.map((point) => Number(point.price));\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs) || 1;\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys) || 1;\n return points\n .map((point, index) => {\n const x =\n ((Number(point.totalSellSupply) - minX) / (maxX - minX || 1)) * 320;\n const y =\n 120 - ((Number(point.price) - minY) / (maxY - minY || 1)) * 100;\n return `${index === 0 ? \"M\" : \"L\"}${x.toFixed(1)},${y.toFixed(1)}`;\n })\n .join(\" \");\n }, [points]);\n\n return (\n <div className=\"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden\">\n <h2 className=\"text-sm font-medium\">{t(\"launchpad.curve_preview\")}</h2>\n <svg\n viewBox=\"0 0 320 140\"\n className=\"w-full h-40\"\n role=\"img\"\n aria-label={t(\"launchpad.curve_preview\")}\n >\n <path\n d={path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"text-primary\"\n />\n </svg>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { Button, cn, Textarea } from \"@liberfi.io/ui\";\nimport { LAUNCHPAD_FIELD_CLASS_NAMES } from \"./form-control-theme\";\nimport { useLaunchpadUiPorts, type GeneratedMemeInfo } from \"./ports\";\n\nexport type MagicLaunchProps = {\n prompt?: string;\n onGenerate?: (result: GeneratedMemeInfo) => void;\n};\n\nexport function MagicLaunch({ prompt = \"\", onGenerate }: MagicLaunchProps) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [value, setValue] = useState(prompt);\n const [pending, setPending] = useState(false);\n const tooLong = value.length > 300;\n const canGenerate =\n value.length > 0 && !tooLong && !!ports.generateMeme && !pending;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex justify-between items-center\">\n <span\n className=\"font-semibold text-sm\"\n style={{\n backgroundImage:\n \"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n }}\n >\n {t(\"launchpad.magic_launch\")}\n </span>\n <span\n className={cn(\"text-xs\", tooLong ? \"text-danger\" : \"text-text-muted\")}\n >\n {value.length}/300\n </span>\n </div>\n <Textarea\n minRows={2}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={value}\n onValueChange={setValue}\n placeholder={t(\"launchpad.magic_launch_explained\")}\n />\n <Button\n color=\"primary\"\n isDisabled={!canGenerate}\n isLoading={pending}\n onPress={() => {\n void ports.requireAuth(async () => {\n if (!ports.generateMeme) return;\n setPending(true);\n try {\n const result = await ports.generateMeme(value);\n onGenerate?.(result);\n } finally {\n setPending(false);\n }\n });\n }}\n >\n {t(\"launchpad.magic_launch_submit\")}\n </Button>\n </div>\n );\n}\n","import { useCallback, useState, type Key } from \"react\";\nimport { LaunchPadPlatform } from \"@liberfi.io/react-launchpad\";\nimport { Image, Tab, Tabs, cn } from \"@liberfi.io/ui\";\nimport {\n LaunchPadCreateForm,\n type LaunchPadCreateFormValues,\n} from \"./LaunchPadCreateForm\";\nimport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nimport { MagicLaunch } from \"./MagicLaunch\";\nimport { LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES } from \"./form-control-theme\";\nimport type { GeneratedMemeInfo } from \"./ports\";\n\nconst PLATFORMS = [\n {\n platform: LaunchPadPlatform.PUMPFUN,\n name: \"Pump\",\n icon: \"/images/launchpad/pumpfun.svg\",\n },\n {\n platform: LaunchPadPlatform.RAYDIUM,\n name: \"Raydium\",\n icon: \"/images/launchpad/raydium.svg\",\n },\n] as const;\n\nexport interface LaunchPadHomeProps {\n prompt?: string;\n image?: string;\n}\n\nexport function LaunchPadHome({ prompt, image }: LaunchPadHomeProps) {\n const [platform, setPlatform] = useState<LaunchPadPlatform>(\n LaunchPadPlatform.PUMPFUN,\n );\n const [suggestedImage, setSuggestedImage] = useState<string | undefined>(\n image,\n );\n const [suggestedName, setSuggestedName] = useState<string | undefined>(\n undefined,\n );\n const [suggestedSymbol, setSuggestedSymbol] = useState<string | undefined>(\n undefined,\n );\n const [preview, setPreview] = useState<LaunchPadCreateFormValues | null>(\n null,\n );\n\n const onGenerate = useCallback((result: GeneratedMemeInfo) => {\n setSuggestedImage(result.image);\n setSuggestedName(result.name);\n setSuggestedSymbol(result.symbol);\n }, []);\n\n return (\n <div className=\"flex flex-col gap-4\">\n <MagicLaunch prompt={prompt} onGenerate={onGenerate} />\n <div className=\"flex-1 flex items-start justify-center gap-4\">\n <div\n className={cn(\n \"h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2\",\n )}\n >\n <Tabs\n fullWidth\n classNames={LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES}\n selectedKey={platform}\n onSelectionChange={(key: Key) =>\n setPlatform(String(key) as LaunchPadPlatform)\n }\n disableAnimation\n >\n {PLATFORMS.map((item) => (\n <Tab\n key={item.platform}\n title={\n <div className=\"flex items-center gap-2\">\n <Image\n src={item.icon}\n alt={item.name}\n width={20}\n height={20}\n />\n <span>{item.name}</span>\n </div>\n }\n />\n ))}\n </Tabs>\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.PUMPFUN}\n className={cn({ hidden: platform !== LaunchPadPlatform.PUMPFUN })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.RAYDIUM}\n className={cn({ hidden: platform !== LaunchPadPlatform.RAYDIUM })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n </div>\n <LaunchPadCurvePreview\n platform={platform}\n supply={preview?.supply}\n raised={preview?.raised}\n soldPercent={preview?.sold}\n />\n </div>\n </div>\n );\n}\n","export const PACKAGE_NAME = \"@liberfi.io/ui-launchpad\" as const;\n\nexport function LaunchpadReadyWidget() {\n return PACKAGE_NAME;\n}\n\nexport { LaunchpadCreateStatusView } from \"./create-status.view\";\nexport { LaunchPadHome, type LaunchPadHomeProps } from \"./LaunchPadHome\";\nexport { LaunchPadCreateForm } from \"./LaunchPadCreateForm\";\nexport { MagicLaunch, type MagicLaunchProps } from \"./MagicLaunch\";\nexport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nexport {\n LaunchpadUiProvider,\n useLaunchpadUiPorts,\n createInMemoryLaunchpadUiPorts,\n type LaunchpadUiPorts,\n type GeneratedMemeInfo,\n} from \"./ports\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/create-status.view.ts","../src/form-control-theme.ts","../src/ports.tsx","../src/LaunchPadCreateForm.tsx","../src/LaunchPadCurvePreview.tsx","../src/MagicLaunch.tsx","../src/LaunchPadHome.tsx","../src/index.ts"],"names":["LaunchpadCreateStatusView","status","LAUNCHPAD_FIELD_WRAPPER_CLASS","LAUNCHPAD_FIELD_CLASS_NAMES","LAUNCHPAD_UPLOAD_BUTTON_CLASS","LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES","LaunchpadUiPortsContext","createContext","LaunchpadUiProvider","ports","children","createElement","useLaunchpadUiPorts","useContext","createInMemoryLaunchpadUiPorts","options","memory","createInMemoryLaunchpadPorts","Chain","action","file","onChange","createLaunchpadCreateRuntime","DEFAULT_VALUES","LaunchPadCreateForm","platform","suggestedImage","suggestedName","suggestedSymbol","className","onPreviewChange","t","useTranslation","values","setValues","useState","errors","setErrors","snapshot","setSnapshot","uploading","setUploading","uploaderRef","useRef","isRaydium","LaunchPadPlatform","view","useEffect","current","disabled","useMemo","setField","key","value","validate","next","jsxs","cn","event","result","toast","jsx","Input","Upload","files","url","error","Image","ImageGalleryIcon","Textarea","NumberInput","Switch","Button","NEW_TOKEN_DECIMALS","SOL_TOKEN_DECIMALS","PUMP_SUPPLY","PUMP_SOLD","PUMP_RAISED","PUMP_MIGRATE_FEE","CHART_WIDTH","CHART_HEIGHT","CHART_MARGIN","X_TICK_COUNT","Y_TICK_COUNT","LaunchPadCurvePreview","supply","raised","soldPercent","points","isPump","supplyValue","soldValue","raisedValue","Curve","CurveType","chart","buildChart","tick","formatAmount","formatPrice","point","index","isFirst","isLast","formatAmountInUsd","source","innerWidth","innerHeight","minX","x","maxX","maxYValue","y","xRange","maxY","bottom","right","chartPoints","linePath","areaPath","firstPoint","lastPoint","endpoints","_","ratio","MagicLaunch","prompt","onGenerate","setValue","pending","setPending","tooLong","canGenerate","PLATFORMS","LaunchPadHome","image","setPlatform","setSuggestedImage","setSuggestedName","setSuggestedSymbol","preview","setPreview","useCallback","Tabs","item","Tab","PACKAGE_NAME","LaunchpadReadyWidget"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { LaunchpadCreateStatus } from \"@liberfi.io/react-launchpad\";\n\nexport function LaunchpadCreateStatusView(status: LaunchpadCreateStatus): {\n status: LaunchpadCreateStatus;\n canSubmit: boolean;\n} {\n return {\n status,\n canSubmit:\n status !== \"signing\" &&\n status !== \"submitting\" &&\n status !== \"uploading\" &&\n status !== \"succeeded\",\n };\n}\n","const LAUNCHPAD_FIELD_WRAPPER_CLASS = [\n \"!bg-surface-strong/30\",\n \"!border\",\n \"!border-border-control/50\",\n \"data-[hover=true]:!bg-surface-strong/60\",\n \"data-[hover=true]:!border-border-control/80\",\n \"group-data-[focus=true]:!bg-surface-strong/60\",\n \"group-data-[focus=true]:!border-brand-primary/60\",\n].join(\" \");\n\nexport const LAUNCHPAD_FIELD_CLASS_NAMES = {\n inputWrapper: LAUNCHPAD_FIELD_WRAPPER_CLASS,\n label: \"text-text-secondary\",\n input: \"text-text-primary placeholder:text-text-muted\",\n} as const;\n\nexport const LAUNCHPAD_UPLOAD_BUTTON_CLASS = [\n \"w-full h-28 rounded-lg\",\n \"bg-surface-strong/30 border border-border-control/50\",\n \"hover:bg-surface-strong/60 hover:border-border-control/80\",\n \"focus-visible:border-brand-primary/60 focus-visible:outline-none\",\n \"transition-colors\",\n \"flex items-center justify-center overflow-hidden\",\n].join(\" \");\n\nexport const LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES = {\n tabList: \"!bg-surface-strong/30 !border !border-border-control/50 !gap-1\",\n tab: \"data-[hover-unselected=true]:!bg-surface-strong/45 data-[hover-unselected=true]:!opacity-100\",\n cursor:\n \"!bg-surface-strong/60 !border !border-border-control/80 !shadow-none\",\n tabContent: \"!text-text-muted group-data-[selected=true]:!text-text-primary\",\n} as const;\n","import {\n createContext,\n createElement,\n useContext,\n type PropsWithChildren,\n} from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n createInMemoryLaunchpadPorts,\n createLaunchpadCreateRuntime,\n type LaunchpadCreateRuntime,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\n\nexport type GeneratedMemeInfo = {\n symbol: string;\n name?: string;\n image?: string;\n};\n\nexport type LaunchpadUiPorts = {\n chain: Chain;\n requireAuth: (action: () => Promise<void>) => Promise<void>;\n uploadImage: (file: File) => Promise<string>;\n createRuntime: (onChange?: (snapshot: LaunchpadCreateSnapshot) => void) => LaunchpadCreateRuntime;\n generateMeme?: (prompt: string) => Promise<GeneratedMemeInfo>;\n onCreated?: (snapshot: LaunchpadCreateSnapshot) => void;\n};\n\nconst LaunchpadUiPortsContext = createContext<LaunchpadUiPorts | null>(null);\n\nexport function LaunchpadUiProvider({\n ports,\n children,\n}: PropsWithChildren<{ ports: LaunchpadUiPorts }>) {\n return createElement(LaunchpadUiPortsContext.Provider, { value: ports }, children);\n}\n\nexport function useLaunchpadUiPorts(): LaunchpadUiPorts {\n const ports = useContext(LaunchpadUiPortsContext);\n if (!ports) {\n throw new Error(\"useLaunchpadUiPorts must be used within LaunchpadUiProvider\");\n }\n return ports;\n}\n\nexport function createInMemoryLaunchpadUiPorts(\n options: {\n chain?: Chain;\n generateMeme?: LaunchpadUiPorts[\"generateMeme\"];\n signError?: Error;\n uploadError?: Error;\n } = {},\n): LaunchpadUiPorts {\n const memory = createInMemoryLaunchpadPorts({\n signError: options.signError,\n uploadError: options.uploadError,\n });\n return {\n chain: options.chain ?? Chain.SOLANA,\n requireAuth: async (action) => {\n await action();\n },\n uploadImage: async (file) => {\n void file;\n if (options.uploadError) throw options.uploadError;\n return \"https://ipfs.io/ipfs/memory-image\";\n },\n generateMeme: options.generateMeme,\n createRuntime: (onChange) =>\n createLaunchpadCreateRuntime({\n ...memory,\n onChange,\n }),\n };\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n LaunchPadPlatform,\n type LaunchpadCreateSnapshot,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n Button,\n cn,\n Image,\n ImageGalleryIcon,\n Input,\n NumberInput,\n Switch,\n Textarea,\n toast,\n Upload,\n type UploadRef,\n} from \"@liberfi.io/ui\";\nimport { LaunchpadCreateStatusView } from \"./create-status.view\";\nimport {\n LAUNCHPAD_FIELD_CLASS_NAMES,\n LAUNCHPAD_UPLOAD_BUTTON_CLASS,\n} from \"./form-control-theme\";\nimport { useLaunchpadUiPorts } from \"./ports\";\n\nexport type LaunchPadCreateFormValues = {\n name: string;\n ticker: string;\n image: string;\n description: string;\n website: string;\n twitter: string;\n telegram: string;\n supply: number;\n raised: number;\n sold: number;\n locked: number;\n shareFee: boolean;\n};\n\nconst DEFAULT_VALUES: LaunchPadCreateFormValues = {\n name: \"\",\n ticker: \"\",\n image: \"\",\n description: \"\",\n website: \"\",\n twitter: \"\",\n telegram: \"\",\n supply: 1e9,\n raised: 85,\n sold: 51,\n locked: 0,\n shareFee: false,\n};\n\nexport function LaunchPadCreateForm({\n platform,\n suggestedImage,\n suggestedName,\n suggestedSymbol,\n className,\n onPreviewChange,\n}: {\n platform: LaunchPadPlatform;\n suggestedImage?: string;\n suggestedName?: string;\n suggestedSymbol?: string;\n className?: string;\n onPreviewChange?: (values: LaunchPadCreateFormValues) => void;\n}) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [values, setValues] =\n useState<LaunchPadCreateFormValues>(DEFAULT_VALUES);\n const [errors, setErrors] = useState<\n Partial<Record<keyof LaunchPadCreateFormValues, string>>\n >({});\n const [snapshot, setSnapshot] = useState<LaunchpadCreateSnapshot>({\n status: \"idle\",\n });\n const [uploading, setUploading] = useState(false);\n const uploaderRef = useRef<UploadRef>(null);\n const isRaydium = platform === LaunchPadPlatform.RAYDIUM;\n const view = LaunchpadCreateStatusView(snapshot.status);\n\n useEffect(() => {\n setValues((current) => ({\n ...current,\n name: suggestedName || current.name,\n ticker: suggestedSymbol || current.ticker,\n image: suggestedImage || current.image,\n }));\n }, [suggestedImage, suggestedName, suggestedSymbol]);\n\n useEffect(() => {\n onPreviewChange?.(values);\n }, [onPreviewChange, values]);\n\n const disabled = useMemo(\n () =>\n !values.name.trim() ||\n !values.ticker.trim() ||\n !values.image.trim() ||\n !view.canSubmit ||\n uploading,\n [uploading, values.image, values.name, values.ticker, view.canSubmit],\n );\n\n const setField = <K extends keyof LaunchPadCreateFormValues>(\n key: K,\n value: LaunchPadCreateFormValues[K],\n ) => {\n setValues((current) => ({ ...current, [key]: value }));\n setErrors((current) => ({ ...current, [key]: undefined }));\n };\n\n const validate = (): boolean => {\n const next: Partial<Record<keyof LaunchPadCreateFormValues, string>> = {};\n if (!values.name.trim()) next.name = t(\"launchpad.error_name_required\");\n else if (values.name.length > 24)\n next.name = t(\"launchpad.error_name_length\");\n if (!values.ticker.trim())\n next.ticker = t(\"launchpad.error_ticker_required\");\n else if (values.ticker.length > 10)\n next.ticker = t(\"launchpad.error_ticker_length\");\n if (!values.image.trim()) next.image = t(\"launchpad.error_image_required\");\n if (isRaydium) {\n if (Number.isNaN(values.raised) || values.raised < 30) {\n next.raised = t(\"launchpad.error_raised_min\");\n }\n if (values.sold < 51 || values.sold > 80)\n next.sold = t(\"launchpad.error_sold_min\");\n if (values.locked < 0 || values.locked > 30)\n next.locked = t(\"launchpad.error_locked_max\");\n if (values.sold + values.locked > 80)\n next.sold = t(\"launchpad.error_locked_sum_by_sold\");\n }\n setErrors(next);\n return Object.keys(next).length === 0;\n };\n\n return (\n <form\n className={cn(\"flex flex-col gap-4\", className)}\n onSubmit={(event) => {\n event.preventDefault();\n if (!validate()) return;\n void ports.requireAuth(async () => {\n const runtime = ports.createRuntime(setSnapshot);\n const result = await runtime.submit({\n chain: ports.chain,\n name: values.name.trim(),\n symbol: values.ticker.trim(),\n platform,\n imageUri: values.image,\n description: values.description || undefined,\n website: values.website || undefined,\n twitter: values.twitter || undefined,\n telegram: values.telegram || undefined,\n });\n if (result.status === \"succeeded\") {\n ports.onCreated?.(result);\n setValues(DEFAULT_VALUES);\n toast.success(t(\"launchpad.mint_transaction_submitted\"));\n return;\n }\n toast.error(\n result.error?.message ?? t(\"launchpad.mint_transaction_error\"),\n );\n });\n }}\n >\n <Input\n label={t(\"launchpad.name_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.name}\n isInvalid={!!errors.name}\n errorMessage={errors.name}\n onValueChange={(value) => setField(\"name\", value)}\n />\n <Input\n label={t(\"launchpad.ticker_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.ticker}\n isInvalid={!!errors.ticker}\n errorMessage={errors.ticker}\n onValueChange={(value) => setField(\"ticker\", value)}\n />\n <div className=\"space-y-1.5\">\n <h3 className={cn(\"text-sm\", errors.image && \"text-danger\")}>\n {t(\"launchpad.image_label\")}\n </h3>\n <Upload\n ref={uploaderRef}\n accept={{\n \"image/jpeg\": [\".jpg\", \".jpeg\"],\n \"image/png\": [\".png\"],\n \"image/webp\": [\".webp\"],\n }}\n maxFiles={1}\n maxSize={10 * 1024 * 1024}\n noClick\n noKeyboard\n onDropAccepted={(files) => {\n const file = files[0];\n if (!file) return;\n setUploading(true);\n void ports\n .uploadImage(file)\n .then((url) => setField(\"image\", url))\n .catch((error: unknown) => {\n toast.error(\n error instanceof Error\n ? error.message\n : t(\"launchpad.error_image_upload\"),\n );\n })\n .finally(() => setUploading(false));\n }}\n >\n <button\n type=\"button\"\n aria-label={t(\"launchpad.image_label\")}\n className={LAUNCHPAD_UPLOAD_BUTTON_CLASS}\n onClick={() => uploaderRef.current?.open()}\n >\n {values.image ? (\n <Image\n src={values.image}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <ImageGalleryIcon\n width={24}\n height={24}\n className=\"text-text-muted\"\n />\n )}\n </button>\n </Upload>\n {errors.image ? (\n <p className=\"text-xs text-danger\">{errors.image}</p>\n ) : null}\n </div>\n <Textarea\n label={t(\"launchpad.description_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n placeholder={t(\"launchpad.description_placeholder\")}\n value={values.description}\n onValueChange={(value) => setField(\"description\", value)}\n />\n <Input\n label={t(\"launchpad.website_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.website}\n onValueChange={(value) => setField(\"website\", value)}\n />\n <Input\n label={t(\"launchpad.twitter_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.twitter}\n onValueChange={(value) => setField(\"twitter\", value)}\n />\n <Input\n label={t(\"launchpad.telegram_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.telegram}\n onValueChange={(value) => setField(\"telegram\", value)}\n />\n {isRaydium ? (\n <div className=\"grid grid-cols-2 gap-3\">\n <NumberInput\n label={t(\"launchpad.supply_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.supply}\n onValueChange={(value) => setField(\"supply\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.raised_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.raised}\n isInvalid={!!errors.raised}\n errorMessage={errors.raised}\n onValueChange={(value) => setField(\"raised\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.sold_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.sold}\n isInvalid={!!errors.sold}\n errorMessage={errors.sold}\n onValueChange={(value) => setField(\"sold\", Number(value ?? 0))}\n />\n <NumberInput\n label={t(\"launchpad.locked_label\")}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={values.locked}\n isInvalid={!!errors.locked}\n errorMessage={errors.locked}\n onValueChange={(value) => setField(\"locked\", Number(value ?? 0))}\n />\n <div className=\"col-span-2 flex items-center justify-between\">\n <span className=\"text-sm\">{t(\"launchpad.share_fee_label\")}</span>\n <Switch\n isSelected={values.shareFee}\n onValueChange={(value) => setField(\"shareFee\", value)}\n />\n </div>\n </div>\n ) : null}\n <Button\n type=\"submit\"\n color=\"primary\"\n isDisabled={disabled}\n isLoading={!view.canSubmit}\n >\n {t(\"launchpad.submit\")}\n </Button>\n </form>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Curve,\n CurveType,\n LaunchPadPlatform,\n} from \"@liberfi.io/react-launchpad\";\nimport {\n formatAmount,\n formatAmountInUsd,\n formatPrice,\n} from \"@liberfi.io/utils\";\n\nconst NEW_TOKEN_DECIMALS = 6;\nconst SOL_TOKEN_DECIMALS = 9;\nconst PUMP_SUPPLY = \"1000000000000000\";\nconst PUMP_SOLD = \"793100000000000\";\nconst PUMP_RAISED = \"35000000000\";\nconst PUMP_MIGRATE_FEE = \"20000000\";\nconst CHART_WIDTH = 420;\nconst CHART_HEIGHT = 250;\nconst CHART_MARGIN = { top: 12, right: 14, bottom: 38, left: 58 } as const;\nconst X_TICK_COUNT = 6;\nconst Y_TICK_COUNT = 5;\n\ntype ChartPoint = {\n x: number;\n y: number;\n chartX: number;\n chartY: number;\n};\n\nexport function LaunchPadCurvePreview({\n platform,\n supply = 1e9,\n raised = 35,\n soldPercent = 79.31,\n}: {\n platform: LaunchPadPlatform;\n supply?: number;\n raised?: number;\n soldPercent?: number;\n}) {\n const { t } = useTranslation();\n const points = useMemo(() => {\n const isPump = platform === LaunchPadPlatform.PUMPFUN;\n const supplyValue = isPump\n ? PUMP_SUPPLY\n : String(Math.round(supply * 10 ** NEW_TOKEN_DECIMALS));\n const soldValue = isPump\n ? PUMP_SOLD\n : String(\n Math.round(supply * (soldPercent / 100) * 10 ** NEW_TOKEN_DECIMALS),\n );\n const raisedValue = isPump\n ? PUMP_RAISED\n : String(Math.round(raised * 10 ** SOL_TOKEN_DECIMALS));\n try {\n return Curve.getPoolCurvePointByInit({\n curveType: CurveType.CONSTANT_PRODUCT,\n supply: supplyValue,\n totalSell: soldValue,\n totalLockedAmount: 0,\n totalFundRaising: raisedValue,\n migrateFee: PUMP_MIGRATE_FEE,\n decimalA: NEW_TOKEN_DECIMALS,\n decimalB: SOL_TOKEN_DECIMALS,\n pointCount: 40,\n });\n } catch {\n return [];\n }\n }, [platform, raised, soldPercent, supply]);\n\n const chart = useMemo(() => buildChart(points, supply), [points, supply]);\n\n return (\n <div className=\"px-4 py-6 space-y-4 bg-content2 rounded-lg overflow-hidden lg:flex-1 lg:basis-1/2 lg:sticky lg:top-0 max-lg:hidden\">\n <h2 className=\"text-sm font-medium\">{t(\"launchpad.curve_preview\")}</h2>\n <svg\n viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`}\n className=\"h-[280px] w-full\"\n role=\"img\"\n aria-label={t(\"launchpad.curve_preview\")}\n >\n <defs>\n <linearGradient\n id=\"launchpad-curve-area\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n className=\"text-primary\"\n >\n <stop offset=\"0%\" stopColor=\"currentColor\" stopOpacity=\"0.72\" />\n <stop offset=\"100%\" stopColor=\"currentColor\" stopOpacity=\"0.04\" />\n </linearGradient>\n </defs>\n <g data-testid=\"curve-grid\" className=\"text-border-subtle\">\n {chart.xTicks.map((tick) => (\n <line\n key={`x-grid-${tick.position}`}\n x1={tick.position}\n x2={tick.position}\n y1={CHART_MARGIN.top}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.35\"\n strokeWidth=\"0.75\"\n />\n ))}\n {chart.yTicks.map((tick) => (\n <line\n key={`y-grid-${tick.position}`}\n x1={CHART_MARGIN.left}\n x2={chart.right}\n y1={tick.position}\n y2={tick.position}\n stroke=\"currentColor\"\n strokeOpacity=\"0.35\"\n strokeWidth=\"0.75\"\n />\n ))}\n </g>\n <line\n data-testid=\"curve-x-axis\"\n x1={CHART_MARGIN.left}\n x2={chart.right}\n y1={chart.bottom}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1\"\n className=\"text-text-muted\"\n />\n <line\n data-testid=\"curve-y-axis\"\n x1={CHART_MARGIN.left}\n x2={CHART_MARGIN.left}\n y1={CHART_MARGIN.top}\n y2={chart.bottom}\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1\"\n className=\"text-text-muted\"\n />\n <g className=\"fill-current text-text-muted text-[9px]\">\n {chart.xTicks.map((tick) => (\n <text\n key={`x-label-${tick.position}`}\n x={tick.position}\n y={chart.bottom + 17}\n textAnchor=\"middle\"\n >\n {formatAmount(tick.value)}\n </text>\n ))}\n {chart.yTicks.map((tick) => (\n <text\n key={`y-label-${tick.position}`}\n x={CHART_MARGIN.left - 8}\n y={tick.position + 3}\n textAnchor=\"end\"\n >\n {formatPrice(tick.value)}\n </text>\n ))}\n <text\n x={(CHART_MARGIN.left + chart.right) / 2}\n y={CHART_HEIGHT - 3}\n textAnchor=\"middle\"\n >\n {t(\"launchpad.curve_preview_token_supply\")}\n </text>\n <text\n x=\"12\"\n y={(CHART_MARGIN.top + chart.bottom) / 2}\n textAnchor=\"middle\"\n transform={`rotate(-90 12 ${(CHART_MARGIN.top + chart.bottom) / 2})`}\n >\n SOL\n </text>\n </g>\n <path\n data-testid=\"curve-area\"\n d={chart.areaPath}\n fill=\"url(#launchpad-curve-area)\"\n className=\"text-primary\"\n />\n <path\n data-testid=\"curve-line\"\n d={chart.linePath}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeDasharray=\"2 8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n className=\"text-primary\"\n />\n <g data-testid=\"curve-endpoints\">\n {chart.endpoints.map((point, index) => {\n const isFirst = index === 0;\n const isLast = index === chart.endpoints.length - 1;\n return (\n <circle\n key={`${point.x}-${point.y}`}\n cx={point.chartX}\n cy={point.chartY}\n r=\"4.5\"\n fill={isFirst ? \"#facc15\" : isLast ? \"#0ea5e9\" : \"currentColor\"}\n stroke=\"#f0fdf4\"\n strokeWidth=\"1.25\"\n className=\"text-primary\"\n >\n <title>{`${formatAmount(point.x)} · ${formatPrice(point.y)} SOL`}</title>\n </circle>\n );\n })}\n </g>\n </svg>\n <div className=\"flex flex-wrap items-center justify-center gap-x-8 gap-y-2 text-[10px] text-text-muted\">\n <p className=\"flex items-center\">\n <span\n data-testid=\"curve-legend-dot\"\n className=\"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#facc15]\"\n />\n <span className=\"mr-1.5\">\n {t(\"launchpad.curve_preview_starting_mc\")}\n </span>\n <span>{formatAmountInUsd(chart.startingMarketCap)}</span>\n </p>\n <p className=\"flex items-center\">\n <span\n data-testid=\"curve-legend-dot\"\n className=\"mr-1.5 inline-block h-2 w-2 rounded-full bg-[#0ea5e9]\"\n />\n <span className=\"mr-1.5\">\n {t(\"launchpad.curve_preview_migration_mc\")}\n </span>\n <span>{formatAmountInUsd(chart.migrationMarketCap)}</span>\n </p>\n </div>\n </div>\n );\n}\n\nfunction buildChart(\n source: Array<{ totalSellSupply: unknown; price: unknown }>,\n supply: number,\n) {\n const values = source\n .map((point) => ({\n x: Number(point.totalSellSupply),\n y: Number(point.price),\n }))\n .filter((point) => Number.isFinite(point.x) && Number.isFinite(point.y));\n const innerWidth = CHART_WIDTH - CHART_MARGIN.left - CHART_MARGIN.right;\n const innerHeight = CHART_HEIGHT - CHART_MARGIN.top - CHART_MARGIN.bottom;\n const minX = values.length > 0 ? Math.min(...values.map(({ x }) => x)) : 0;\n const maxX = values.length > 0 ? Math.max(...values.map(({ x }) => x)) : 1;\n const maxYValue =\n values.length > 0 ? Math.max(...values.map(({ y }) => y)) : 1;\n const xRange = maxX - minX || 1;\n const maxY = (maxYValue || 1) * 1.05;\n const bottom = CHART_HEIGHT - CHART_MARGIN.bottom;\n const right = CHART_WIDTH - CHART_MARGIN.right;\n const chartPoints: ChartPoint[] = values.map(({ x, y }) => ({\n x,\n y,\n chartX: CHART_MARGIN.left + ((x - minX) / xRange) * innerWidth,\n chartY: CHART_MARGIN.top + (1 - y / maxY) * innerHeight,\n }));\n const linePath = chartPoints\n .map(\n (point, index) =>\n `${index === 0 ? \"M\" : \"L\"}${point.chartX.toFixed(2)},${point.chartY.toFixed(2)}`,\n )\n .join(\" \");\n const areaPath = linePath\n ? `${linePath} L${chartPoints.at(-1)?.chartX.toFixed(2)},${bottom} L${chartPoints[0]?.chartX.toFixed(2)},${bottom} Z`\n : \"\";\n const firstPoint = values[0];\n const lastPoint = values.at(-1);\n const endpoints =\n chartPoints.length > 1\n ? [chartPoints[0], chartPoints[chartPoints.length - 1]]\n : chartPoints;\n\n return {\n points: chartPoints,\n endpoints,\n linePath,\n areaPath,\n bottom,\n right,\n xTicks: Array.from({ length: X_TICK_COUNT }, (_, index) => {\n const ratio = index / (X_TICK_COUNT - 1);\n return {\n value: minX + xRange * ratio,\n position: CHART_MARGIN.left + innerWidth * ratio,\n };\n }),\n yTicks: Array.from({ length: Y_TICK_COUNT }, (_, index) => {\n const ratio = index / (Y_TICK_COUNT - 1);\n return {\n value: maxY * ratio,\n position: bottom - innerHeight * ratio,\n };\n }),\n startingMarketCap: firstPoint ? firstPoint.y * supply : 0,\n migrationMarketCap: lastPoint ? lastPoint.y * supply : 0,\n };\n}\n","import { useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { Button, cn, Textarea } from \"@liberfi.io/ui\";\nimport { LAUNCHPAD_FIELD_CLASS_NAMES } from \"./form-control-theme\";\nimport { useLaunchpadUiPorts, type GeneratedMemeInfo } from \"./ports\";\n\nexport type MagicLaunchProps = {\n prompt?: string;\n onGenerate?: (result: GeneratedMemeInfo) => void;\n};\n\nexport function MagicLaunch({ prompt = \"\", onGenerate }: MagicLaunchProps) {\n const { t } = useTranslation();\n const ports = useLaunchpadUiPorts();\n const [value, setValue] = useState(prompt);\n const [pending, setPending] = useState(false);\n const tooLong = value.length > 300;\n const canGenerate =\n value.length > 0 && !tooLong && !!ports.generateMeme && !pending;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex justify-between items-center\">\n <span\n className=\"font-semibold text-sm\"\n style={{\n backgroundImage:\n \"linear-gradient(90deg, rgb(199, 255, 46) 0%, rgb(247, 104, 22) 100%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n }}\n >\n {t(\"launchpad.magic_launch\")}\n </span>\n <span\n className={cn(\"text-xs\", tooLong ? \"text-danger\" : \"text-text-muted\")}\n >\n {value.length}/300\n </span>\n </div>\n <Textarea\n minRows={2}\n classNames={LAUNCHPAD_FIELD_CLASS_NAMES}\n value={value}\n onValueChange={setValue}\n placeholder={t(\"launchpad.magic_launch_explained\")}\n />\n <Button\n color=\"primary\"\n isDisabled={!canGenerate}\n isLoading={pending}\n onPress={() => {\n void ports.requireAuth(async () => {\n if (!ports.generateMeme) return;\n setPending(true);\n try {\n const result = await ports.generateMeme(value);\n onGenerate?.(result);\n } finally {\n setPending(false);\n }\n });\n }}\n >\n {t(\"launchpad.magic_launch_submit\")}\n </Button>\n </div>\n );\n}\n","import { useCallback, useState, type Key } from \"react\";\nimport { LaunchPadPlatform } from \"@liberfi.io/react-launchpad\";\nimport { Image, Tab, Tabs, cn } from \"@liberfi.io/ui\";\nimport {\n LaunchPadCreateForm,\n type LaunchPadCreateFormValues,\n} from \"./LaunchPadCreateForm\";\nimport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nimport { MagicLaunch } from \"./MagicLaunch\";\nimport { LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES } from \"./form-control-theme\";\nimport type { GeneratedMemeInfo } from \"./ports\";\n\nconst PLATFORMS = [\n {\n platform: LaunchPadPlatform.PUMPFUN,\n name: \"Pump\",\n icon: \"/images/launchpad/pumpfun.svg\",\n },\n {\n platform: LaunchPadPlatform.RAYDIUM,\n name: \"Raydium\",\n icon: \"/images/launchpad/raydium.svg\",\n },\n] as const;\n\nexport interface LaunchPadHomeProps {\n prompt?: string;\n image?: string;\n}\n\nexport function LaunchPadHome({ prompt, image }: LaunchPadHomeProps) {\n const [platform, setPlatform] = useState<LaunchPadPlatform>(\n LaunchPadPlatform.PUMPFUN,\n );\n const [suggestedImage, setSuggestedImage] = useState<string | undefined>(\n image,\n );\n const [suggestedName, setSuggestedName] = useState<string | undefined>(\n undefined,\n );\n const [suggestedSymbol, setSuggestedSymbol] = useState<string | undefined>(\n undefined,\n );\n const [preview, setPreview] = useState<LaunchPadCreateFormValues | null>(\n null,\n );\n\n const onGenerate = useCallback((result: GeneratedMemeInfo) => {\n setSuggestedImage(result.image);\n setSuggestedName(result.name);\n setSuggestedSymbol(result.symbol);\n }, []);\n\n return (\n <div className=\"flex flex-col gap-4\">\n <MagicLaunch prompt={prompt} onGenerate={onGenerate} />\n <div className=\"flex-1 flex items-start justify-center gap-4\">\n <div\n className={cn(\n \"h-full flex flex-col gap-4 max-lg:w-full lg:flex-1 lg:basis-1/2\",\n )}\n >\n <Tabs\n fullWidth\n classNames={LAUNCHPAD_PLATFORM_TABS_CLASS_NAMES}\n selectedKey={platform}\n onSelectionChange={(key: Key) =>\n setPlatform(String(key) as LaunchPadPlatform)\n }\n disableAnimation\n >\n {PLATFORMS.map((item) => (\n <Tab\n key={item.platform}\n title={\n <div className=\"flex items-center gap-2\">\n <Image\n src={item.icon}\n alt={item.name}\n width={20}\n height={20}\n />\n <span>{item.name}</span>\n </div>\n }\n />\n ))}\n </Tabs>\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.PUMPFUN}\n className={cn({ hidden: platform !== LaunchPadPlatform.PUMPFUN })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n <LaunchPadCreateForm\n platform={LaunchPadPlatform.RAYDIUM}\n className={cn({ hidden: platform !== LaunchPadPlatform.RAYDIUM })}\n suggestedImage={suggestedImage}\n suggestedName={suggestedName}\n suggestedSymbol={suggestedSymbol}\n onPreviewChange={setPreview}\n />\n </div>\n <LaunchPadCurvePreview\n platform={platform}\n supply={preview?.supply}\n raised={preview?.raised}\n soldPercent={preview?.sold}\n />\n </div>\n </div>\n );\n}\n","export const PACKAGE_NAME = \"@liberfi.io/ui-launchpad\" as const;\n\nexport function LaunchpadReadyWidget() {\n return PACKAGE_NAME;\n}\n\nexport { LaunchpadCreateStatusView } from \"./create-status.view\";\nexport { LaunchPadHome, type LaunchPadHomeProps } from \"./LaunchPadHome\";\nexport { LaunchPadCreateForm } from \"./LaunchPadCreateForm\";\nexport { MagicLaunch, type MagicLaunchProps } from \"./MagicLaunch\";\nexport { LaunchPadCurvePreview } from \"./LaunchPadCurvePreview\";\nexport {\n LaunchpadUiProvider,\n useLaunchpadUiPorts,\n createInMemoryLaunchpadUiPorts,\n type LaunchpadUiPorts,\n type GeneratedMemeInfo,\n} from \"./ports\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liberfi.io/ui-launchpad",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Launchpad widgets for Liberfi React SDK",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"access": "public"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@liberfi.io/hooks": "0.1.
|
|
29
|
-
"@liberfi.io/types": "0.4.
|
|
30
|
-
"@liberfi.io/utils": "0.2.
|
|
28
|
+
"@liberfi.io/hooks": "0.1.270",
|
|
29
|
+
"@liberfi.io/types": "0.4.78",
|
|
30
|
+
"@liberfi.io/utils": "0.2.77"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@tanstack/react-query": "^5.90.2",
|
|
@@ -43,17 +43,17 @@
|
|
|
43
43
|
"ts-jest": "^29.4.5",
|
|
44
44
|
"tsup": "^8.5.0",
|
|
45
45
|
"typescript": "^5.9.2",
|
|
46
|
-
"@liberfi.io/i18n": "0.1.
|
|
47
|
-
"@liberfi.io/react-launchpad": "0.1.
|
|
48
|
-
"@liberfi.io/ui": "0.3.
|
|
49
|
-
"tsconfig": "0.1.
|
|
46
|
+
"@liberfi.io/i18n": "0.1.275",
|
|
47
|
+
"@liberfi.io/react-launchpad": "0.1.5",
|
|
48
|
+
"@liberfi.io/ui": "0.3.78",
|
|
49
|
+
"tsconfig": "0.1.261"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
52
|
"react": ">=18",
|
|
53
53
|
"react-dom": ">=18",
|
|
54
|
-
"@liberfi.io/i18n": "0.1.
|
|
55
|
-
"@liberfi.io/react-launchpad": "0.1.
|
|
56
|
-
"@liberfi.io/ui": "0.3.
|
|
54
|
+
"@liberfi.io/i18n": "0.1.275",
|
|
55
|
+
"@liberfi.io/react-launchpad": "0.1.5",
|
|
56
|
+
"@liberfi.io/ui": "0.3.78"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"dev": "tsup --watch",
|