1import{z as vt,a as Se,i as le,cL as gt,bU as Le,c9 as He,Q as ft,k as ht,t as O,b as $e,c4 as _t}from"./DQ705e-R.js";import{b as ze,d as De,f as ne,o as l,D as E,y as k,j as e,A as h,B as p,w as Ve,u as a,a as i,Q as xe,v as Me,a8 as Ne,x as K,J as ee,W as we,z as I,k as f,C as be,aa as Ue,e as g,c as w,V as Ge,T as yt,af as bt,ab as wt}from"./iJPA3RaR.js";import{p as kt,u as Ct,P as $t,a as xt,o as Mt}from"./VklIWX3W.js";import{s as Fe}from"./D1R34rGp.js";import{a as It,h as Pt}from"./cWqhi1Tq.js";import{B as Ft}from"./CV6gQ0dN.js";import{B as pe}from"./CxwRQqkM.js";import"./D4cgFmra.js";import"./ZNuda-3F.js";import"./CLyE_KO6.js";import"./CerNklL1.js";import"./F8yjHj1c.js";import"./Dp9JkpWP.js";import"./unoqXWrM.js";import"./CF45t8ie.js";import"./zQV2Cj3B.js";import"./xwlrA477.js";import"./DOEB1szz.js";import"./BHi9s6fO.js";import"./y-S4uPBT.js";import"./CLylFqi5.js";import"./eQgexpGa.js";import"./DvvhwsOL.js";import"./CwHSOz_Q.js";import"./DnPCKati.js";import"./BoTRALHb.js";import"./vcbVnRMA.js";import"./DaDYXMP8.js";import"./CY_VWNGH.js";import"./DTlE9Ykc.js";import"./DL8JkzU7.js";import"./zzWikPBg.js";import"./KBQXbw9s.js";import"./6CQLa_bQ.js";import"./mfXn30ww.js";import"./BfMT2A7Z.js";import"./dIBqoQhQ.js";import"./DS6iK35N.js";import"./SgL5JzYC.js";import"./CnXXaPgW.js";import"./Br-N6VnJ.js";import"./BGq182lc.js";import"./Cv5KaeIZ.js";import"./Cr-qWQCS.js";import"./aY0opD8P.js";import"./13Q1Ctjd.js";import"./CrhlxTrF.js";import"./Byvd8CEZ.js";import"./CAV7JY0-.js";import"./Oyik4rc_.js";import"./CC7zSNUE.js";import"./DJ4p0UdD.js";import"./Dw-zEqZx.js";import"./vrPodevN.js";import"./DpHVs9CB.js";import"./BeEtGYVE.js";import"./yE55SOJZ.js";import"./BeBVxXbr.js";import"./BU2hOgUT.js";import"./kg17UL9Y.js";import"./DYuLImmP.js";import"./BFDFMA7T.js";import"./CeikW-Ce.js";import"./CE1edxPO.js";import"./C_S5QETU.js";import"./BmlyHpHQ.js";import"./Bk5MtPjy.js";import"./BgFZTUwM.js";import"./DoH72Hj4.js";import"./RRwl6KQP.js";import"./DqWZGuaG.js";import"./f6EOvynU.js";import"./D-lcJE5B.js";import"./DS2ImBUn.js";import"./CGJOZNtT.js";import"./BPrPUr3N.js";import"./CXhAlL-P.js";import"./DNkQUiQS.js";import"./V_DsrLxH.js";import"./B2r2zgr5.js";import"./SS1ebxKJ.js";import"./CZqgTExG.js";import"./QMGiKl9l.js";import"./pZnf9HO_.js";import"./zhoVymqv.js";import"./BvbZlAaI.js";import"./BdBTRHkK.js";import"./BgcTy0c3.js";import"./DCyFgjQc.js";import"./sGWXUBIG.js";import"./BtWBC23e.js";import"./CdFUFbpd.js";import"./XLPOkmhU.js";import"./DpORQ7lS.js";import"./DupLu0pB.js";import"./BXhipioy.js";import"./8lrt_O26.js";import"./Qpx21Q3p.js";import"./BhMID7Og.js";import"./WS-sUHAF.js";import"./BHwuPA-i.js";import"./Df_nBvgW.js";import"./C3_LBs6Z.js";import"./BB_Ap6f9.js";import"./DRc6Uf3s.js";import"./DZ8YoXfe.js";import"./VECjHQG5.js";import"./BJlYoyXj.js";import"./Ben7ND6K.js";import"./BMd2hyyq.js";import"./DNRUxoJo.js";import"./Bcae0ofm.js";import"./Dw-2kF5j.js";import"./Df_MaiWu.js";import"./CO-3EgsP.js";import"./C1zUFL2b.js";import"./CD-yqmUc.js";import"./pYDNvLKd.js";import"./CkrRtYgW.js";import"./CczadIQ6.js";import"./C0XV5G6B.js";import"./D2k7HlIC.js";import"./6DFP7iJU.js";import"./C-EgmEGt.js";import"./D22Hpmjy.js";import"./Rh23M_RQ.js";import"./BCHbVvGZ.js";import"./CEWAxYCh.js";try{let n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},v=new n.Error().stack;v&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[v]="b4e8f471-215d-4ae9-86ec-70f5f9869186",n._sentryDebugIdIdentifier="sentry-dbid-b4e8f471-215d-4ae9-86ec-70f5f9869186")}catch{}const St=1e3,Bt=6e4,Tt=n=>{let v=null,t=0,u=null,V=!1,Y=null;const te=()=>{if(V)return;const{public:{wsUrl:j}}=vt(),A=Se().authToken.value;A&&(v=new WebSocket(`${j}/ws/parade/?token=${A}`),v.onopen=()=>{t=0,Y=Fe(()=>{v?.readyState===WebSocket.OPEN&&v.send(JSON.stringify({type:"ping"}))},3e4)},v.onmessage=L=>{let C;try{C=JSON.parse(L.data)}catch{return}C.type==="float_added"?n.onFloatAdded(C.float):C.type==="float_updated"&&n.onFloatUpdated(C.float_id,C.like_count??null,C.comment_count??null)},v.onclose=L=>{if(y(),V)return;const C=Math.min(St*Math.pow(2,t),Bt);t+=1,u=setTimeout(te,C)},v.onerror=()=>{v?.close()})},y=()=>{Y&&(clearInterval(Y),Y=null)},P=()=>{V=!0,u&&(clearTimeout(u),u=null),y(),v?.close(),v=null};return ze(te),De(P),{disconnect:P}},Rt={class:"parade-modal-header"},Ot=["onClick"],Et={class:"parade-shell intro-shell"},At={class:"intro-body"},Lt=ne({__name:"ParadeIntroModal",props:{isOpen:{type:Boolean},goalTarget:{}},emits:["close"],setup(n){return(v,t)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--intro",compact:"","hide-header":"",onClose:t[1]||(t[1]=u=>v.$emit("close"))},{header:k(({close:u})=>[e("div",Rt,[e("button",{class:"parade-modal-close","aria-label":"Close",onClick:u},[...t[2]||(t[2]=[e("i",{class:"ti-close"},null,-1)])],8,Ot)])]),default:k(()=>[e("div",Et,[t[5]||(t[5]=e("h2",{class:"intro-title"}
1,"Welcome to the Parade â¨",-1)),t[6]||(t[6]=e("p",{class:"intro-body"}," Pick one of your OCs, build them a float, and watch the community parade roll by. Drop a like and comment on floats you love! The more love a float gets, the more it shines. ",-1)),e("p",At,[t[3]||(t[3]=h(" Together we're chasing the ",-1)),e("strong",null,p(n.goalTarget)+"-float",1),t[4]||(t[4]=h(" community goal to unlock a free reward. ",-1))]),e("button",{class:"parade-btn-primary",onClick:t[0]||(t[0]=u=>v.$emit("close"))},"Let's go!")])]),_:1},8,["is-open"]))}}),Nt=le(Lt,[["__scopeId","data-v-050bdf2a"]]),Ut={class:"parade-modal-header shop-header"},Gt={class:"step-indicator"},Ht=["onClick"],zt={class:"parade-shell shop-shell"},Dt={class:"balance-row"},Vt={class:"balance-pill"},Yt={class:"balance-pill"},jt={key:0,class:"shop-step"},Jt={class:"char-search-wrap"},Wt={key:0,class:"state-row"},Xt={key:1,class:"state-row empty"},Qt={class:"char-grid"},Zt=["disabled","onClick"],qt={class:"char-avatar-wrap"},Kt=["src","alt"],ea=["src"],ta={class:"char-name"},aa={key:0,class:"char-in-parade"},sa=["disabled"],oa={key:1},la={key:1,class:"shop-step"},na={class:"base-grid"},ia=["onClick"],ra=["src"],da={class:"base-name"},ca={class:"base-price"},ua=["src"],ma={key:2,class:"shop-step"},pa={key:0,class:"customize-row"},va={class:"field-label"},ga=["maxlength"],fa={key:1,class:"locked-note"},ha={class:"upgrades-section"},_a={class:"upgrade-row"},ya={class:"upgrade-meta"},ba={class:"upgrade-name"},wa={class:"upgrade-price"},ka=["src"],Ca={class:"upgrade-row"},$a={class:"upgrade-meta"},xa={class:"upgrade-name"},Ma={class:"upgrade-price"},Ia=["src"],Pa={class:"total-line"},Fa={class:"total-cost"},Sa={key:0},Ba={key:1},Ta={class:"step-actions"},Ra=["disabled"],Oa=40,Ea=ne({__name:"ParadeShopModal",props:{isOpen:{type:Boolean},floatBases:{},globalUpgrades:{},maxBannerLength:{},usedCharacterIds:{}},emits:["close","continue"],setup(n,{emit:v}){const t=n,u=v,{user:V,usersCurrency:Y,getUsersCurrency:te}=Se(),y=g(1),P=g([]),j=g(!0),A=g(!1),L=g(""),C=g(!1);let ve=1,ge=0,fe=null;const G=g(null),x=g(null),H=g(""),F=g(!1),S=g(!1),N=w(()=>t.globalUpgrades?.superstar_crown),B=w(()=>t.globalUpgrades?.magic_sparkles),U=w(()=>x.value?t.floatBases[x.value]:void 0),ie=w(()=>!!U.value?.customizable),T=w(()=>{const m=new Set;for(const[r,d]of Object.entries(t.floatBases))d.limit!=null&&(d.current_count??0)>=d.limit&&m.add(r);return m}),he=w(()=>{let m=0;return U.value?.currency==="coin"&&(m+=U.value.price),F.value&&N.value?.currency==="coin"&&(m+=N.value.price),S.value&&B.value?.currency==="coin"&&(m+=B.value.price),m}),J=w(()=>{let m=0;return U.value?.currency==="gem"&&(m+=U.value.price),F.value&&N.value?.currency==="gem"&&(m+=N.value.price),S.value&&B.value?.currency==="gem"&&(m+=B.value.price),m}),ae=w(()=>y.value===1?!!G.value:y.value===2?!!x.value&&!T.value.has(x.value??""):!0);Ve(()=>t.isOpen,async m=>{m&&(y.value=1,G.value=null,x.value=null,H.value="",F.value=!1,S.value=!1,L.value="",P.value=[],C.value=!1,te(),await W(!0))});const W=async(m=!0)=>{const r=V.value?.id;if(!r){j.value=!1;return}if(!m&&(A.value||!C.value))return;const d=++ge;m?(j.value=!0,A.value=!1,ve=1):(A.value=!0,ve+=1);try{const b=await gt(r,ve,{page_size:Oa,search:L.value.trim()},{skipEtag:!0});if(d!==ge)return;const z=b?.results??b??[];P.value=m?z:[...P.value,...z],C.value=!!b?.next}finally{d===ge&&(j.value=!1,A.value=!1)}},re=()=>{fe&&clearTimeout(fe),fe=setTimeout(()=>W(!0),300)},_e=m=>m?.info?.cropProfilePicture||"/empty-char.svg",X=m=>m?.info?.name||"Unnamed",de=m=>He(ft(m,"profile_ring.image"),"120x120")||"",R=m=>{T.value.has(m)||(x.value=m,t.floatBases[m]?.customizable||(H.value=""))},$={magic_cloud:"/parade/Cloud.svg",phantom_chariot:"/parade/Dragon.svg",wooden_wagon:"/parade/Minecart.svg",pirate_galleon:"/parade/Ship.svg",neon_rocket:"/parade/Train.svg",ghost:"/parade/UFO.svg"},ye=m=>$[m]??"",se=m=>({wooden_wagon:"#8B5A2B",magic_cloud:"#CAB6FF",ghost:"#6F5C9C",neon_rocket:"#FF4DD2",pirate_galleon:"#3A8A6A",phantom_chariot:"#6E2BB8"})[m]||"#6E2BB8",oe=()=>{if(!ae.value)return;if(y.value<3){y.value=y.value+1;return}if(!G.value||!x.value||!U.value)return;const m=P.value.find(r=>r.id===G.value);u("continue",{character_id:G.value,character_name:X(m),float_base_id:x.value,float_base_label:U.value.name,color_hex:"",banner_text:ie.value?H.value.trim():"",has_crown:F.value,has_sparkles:S.value,total_coins:he.value,total_gems:J.value})},ce=()=>u("close");return(m,r)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--shop","hide-header":"",onClose:ce},{header:k(({close:d})=>[e("div",Ut,[e("div",Gt,[e("span",{class:I(["step-pill",{active:a(y)>=1}])},"1",2),e("span",{class:I(["step-pill",{active:a(y)>=2}])},"2",2),e("span",{class:I(["step-pill",{active:a(y)>=3}
1])},"3",2)]),e("button",{class:"parade-modal-close","aria-label":"Close",onClick:d},[...r[6]||(r[6]=[e("i",{class:"ti-close"},null,-1)])],8,Ht)])]),footer:k(()=>[e("div",Ta,[a(y)>1?(l(),i("button",{key:0,class:"parade-btn-secondary",onClick:r[5]||(r[5]=d=>y.value=a(y)-1)},"Back")):(l(),i("button",{key:1,class:"parade-btn-secondary",onClick:ce},"Cancel")),e("button",{class:"parade-btn-primary",disabled:!a(ae),onClick:oe},p(a(y)<3?"Next":"Continue"),9,Ra)])]),default:k(()=>[e("div",zt,[e("div",Dt,[e("div",Vt,[r[7]||(r[7]=e("img",{src:"/icons/hubux.svg",alt:"Hubux"},null,-1)),h(" "+p(a(Y)?.coins??0),1)]),e("div",Yt,[r[8]||(r[8]=e("img",{src:"/gem.svg",alt:"Gems"},null,-1)),h(" "+p(a(Y)?.gems??0),1)])]),a(y)===1?(l(),i("section",jt,[r[10]||(r[10]=e("h3",{class:"step-title"},"Pick your OC",-1)),e("div",Jt,[r[9]||(r[9]=e("i",{class:"ti-search char-search-icon"},null,-1)),xe(e("input",{"onUpdate:modelValue":r[0]||(r[0]=d=>Me(L)?L.value=d:null),class:"char-search-input",type:"text",placeholder:"Search your OCs by name",onInput:re},null,544),[[Ne,a(L)]])]),a(j)?(l(),i("div",Wt,[K(Le,{size:"md"})])):a(P).length?(l(),i(ee,{key:2},[e("div",Qt,[(l(!0),i(ee,null,we(a(P),d=>(l(),i("button",{key:d.id,class:I(["char-card",{selected:a(G)===d.id,used:n.usedCharacterIds.includes(d.id)}]),disabled:n.usedCharacterIds.includes(d.id),onClick:b=>G.value=d.id},[e("div",qt,[e("img",{src:_e(d),alt:X(d),class:"char-avatar"},null,8,Kt),de(d)?(l(),i("img",{key:0,src:de(d),class:"char-ring-overlay",alt:""},null,8,ea)):f("",!0)]),e("span",ta,p(X(d)),1),n.usedCharacterIds.includes(d.id)?(l(),i("span",aa,"In parade")):f("",!0)],10,Zt))),128))]),a(C)?(l(),i("button",{key:0,class:"load-more-btn",disabled:a(A),onClick:r[1]||(r[1]=d=>W(!1))},[a(A)?(l(),E(Le,{key:0,size:"sm"})):(l(),i("span",oa,"Load more"))],8,sa)):f("",!0)],64)):(l(),i("div",Xt,p(a(L).trim()?"No characters match your search.":"You don't have any characters yet."),1))])):a(y)===2?(l(),i("section",la,[r[11]||(r[11]=e("h3",{class:"step-title"},"Choose a float",-1)),e("div",na,[(l(!0),i(ee,null,we(n.floatBases,(d,b)=>(l(),i("button",{key:b,class:I(["base-card",{selected:a(x)===b,limited:d.limited,"sold-out":a(T).has(String(b))}]),onClick:z=>R(String(b))},[d.limited?(l(),i("span",{key:0,class:I(["base-badge",{"sold-out-badge":a(T).has(String(b))}])},p(a(T).has(String(b))?"SOLD OUT":`${Math.max(0,(d.limit??0)-(d.current_count??0))} LEFT`),3)):f("",!0),e("div",{class:"base-preview",style:be({background:se(String(b))})},[e("img",{src:ye(String(b)),class:"base-svg-img",alt:""},null,8,ra)],4),e("div",da,p(d.name),1),e("div",ca,[e("img",{src:d.currency==="gem"?"/gem.svg":"/icons/hubux.svg",alt:""},null,8,ua),h(" "+p(d.price),1)])],10,ia))),128))])])):a(y)===3?(l(),i("section",ma,[r[18]||(r[18]=e("h3",{class:"step-title"},"Customize",-1)),a(ie)?(l(),i("div",pa,[e("label",va," Banner text ("+p(a(H).length)+"/"+p(n.maxBannerLength)+") ",1),xe(e("input",{"onUpdate:modelValue":r[2]||(r[2]=d=>Me(H)?H.value=d:null),class:"text-input",type:"text",maxlength:n.maxBannerLength,placeholder:"e.g. Long live the king"},null,8,ga),[[Ne,a(H)]])])):(l(),i("div",fa," Color picker and banner text unlock on premium floats. ")),e("div",ha,[r[14]||(r[14]=e("div",{class:"upgrades-title"},"Add-on upgrades",-1)),e("label",_a,[xe(e("input",{"onUpdate:modelValue":r[3]||(r[3]=d=>Me(F)?F.value=d:null),type:"checkbox"},null,512),[[Ue,a(F)]]),e("div",ya,[e("div",ba,p(a(N)?.name||"Superstar Crown"),1),r[12]||(r[12]=e("div",{class:"upgrade-desc"},"A bobbing, glowing crown above your OC.",-1))]),e("div",wa,[e("img",{src:a(N)?.currency==="gem"?"/gem.svg":"/icons/hubux.svg",alt:""},null,8,ka),h(" "+p(a(N)?.price??0),1)])]),e("label",Ca,[xe(e("input",{"onUpdate:modelValue":r[4]||(r[4]=d=>Me(S)?S.value=d:null),type:"checkbox"},null,512),[[Ue,a(S)]]),e("div",$a,[e("div",xa,p(a(B)?.name||"Magic Sparkles"),1),r[13]||(r[13]=e("div",{class:"upgrade-desc"},"Pulsing sparkle particles around the float.",-1))]),e("div",Ma,[e("img",{src:a(B)?.currency==="gem"?"/gem.svg":"/icons/hubux.svg",alt:""},null,8,Ia),h(" "+p(a(B)?.price??0),1)])])]),e("div",Pa,[r[17]||(r[17]=e("span",{class:"total-label"},"Total",-1)),e("div",Fa,[a(he)>0?(l(),i("span",Sa,[r[15]||(r[15]=e("img",{src:"/icons/hubux.svg",alt:""},null,-1)),h(" "+p(a(he)),1)])):f("",!0),a(J)>0?(l(),i("span",Ba,[r[16]||(r[16]=e("img",{src:"/gem.svg",alt:""},null,-1)),h(" "+p(a(J)),1)])):f("",!0)])])])):f("",!0)])]),_:1},8,["is-open"]))}}),Aa=le(Ea,[["__scopeId","data-v-514fa50a"]]),La={class:"parade-modal-header"},Na=["onClick"],Ua={class:"parade-shell confirm-shell"},Ga={class:"confirm-body"},Ha={class:"cost-list"},za={key:0},Da={key:1}
1,Va={key:0,class:"error-text"},Ya={class:"confirm-actions"},ja=["disabled"],Ja=["disabled"],Wa={key:0},Xa={key:1},Qa=ne({__name:"ParadePaymentConfirmModal",props:{isOpen:{type:Boolean},characterName:{},baseLabel:{},totalCoins:{},totalGems:{},insufficient:{type:Boolean},loading:{type:Boolean}},emits:["confirm","cancel"],setup(n){return(v,t)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--confirm",compact:"","hide-header":"",onClose:t[2]||(t[2]=u=>v.$emit("cancel"))},{header:k(({close:u})=>[e("div",La,[e("button",{class:"parade-modal-close","aria-label":"Close",onClick:u},[...t[3]||(t[3]=[e("i",{class:"ti-close"},null,-1)])],8,Na)])]),footer:k(()=>[e("div",Ya,[e("button",{class:"parade-btn-secondary",disabled:n.loading,onClick:t[0]||(t[0]=u=>v.$emit("cancel"))},"Cancel",8,ja),e("button",{class:"parade-btn-primary",disabled:n.insufficient||n.loading,onClick:t[1]||(t[1]=u=>v.$emit("confirm"))},[n.loading?(l(),i("span",Wa,"Releasingâ¦")):(l(),i("span",Xa,"Release!"))],8,Ja)])]),default:k(()=>[e("div",Ua,[t[9]||(t[9]=e("h2",{class:"confirm-title"},"Confirm release",-1)),e("p",Ga,[t[4]||(t[4]=h(" Releasing ",-1)),e("strong",null,p(n.characterName),1),t[5]||(t[5]=h(" on a ",-1)),e("strong",null,p(n.baseLabel),1),t[6]||(t[6]=h(" float. ",-1))]),e("ul",Ha,[n.totalCoins>0?(l(),i("li",za,[t[7]||(t[7]=e("img",{src:"/icons/hubux.svg",alt:"Hubux",class:"cost-icon"},null,-1)),e("span",null,p(n.totalCoins)+" Hubux",1)])):f("",!0),n.totalGems>0?(l(),i("li",Da,[t[8]||(t[8]=e("img",{src:"/gem.svg",alt:"Gems",class:"cost-icon"},null,-1)),e("span",null,p(n.totalGems)+" Gems",1)])):f("",!0)]),n.insufficient?(l(),i("p",Va,"Insufficient balance.")):f("",!0)])]),_:1},8,["is-open"]))}}),Za=le(Qa,[["__scopeId","data-v-a3c48594"]]),qa={class:"parade-modal-header map-header"},Ka={class:"map-header-text"},es={class:"header-meta"},ts={class:"map-header-actions"},as=["onClick"],ss={class:"parade-shell map-shell"},os={key:0,class:"state-row"},ls={key:1,class:"map-grid"},ns=["title","onClick"],is=["src","alt"],rs={key:0,class:"owner-badge"},ds=ne({__name:"ParadeMapModal",props:{isOpen:{type:Boolean},floats:{},myFloatId:{}},emits:["close","jump-to"],setup(n){return(v,t)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--map","hide-header":"",onClose:t[1]||(t[1]=u=>v.$emit("close"))},{header:k(({close:u})=>[e("div",qa,[e("div",Ka,[t[2]||(t[2]=e("div",{class:"header-title"},"Parade Map",-1)),e("div",es,p(n.floats.length===1?"1 float":`${n.floats.length} floats`)+" on the track",1)]),e("div",ts,[n.myFloatId?(l(),i("button",{key:0,class:"jump-btn",onClick:t[0]||(t[0]=V=>v.$emit("jump-to",n.myFloatId))},[...t[3]||(t[3]=[e("i",{class:"ti-target"},null,-1),h(" Jump to my OC ",-1)])])):f("",!0),e("button",{class:"parade-modal-close","aria-label":"Close",onClick:u},[...t[4]||(t[4]=[e("i",{class:"ti-close"},null,-1)])],8,as)])])]),default:k(()=>[e("div",ss,[n.floats.length?(l(),i("div",ls,[(l(!0),i(ee,null,we(n.floats,u=>(l(),i("button",{key:u.id,class:I(["map-cell",{owner:u.is_owner}]),title:u.character_name,onClick:V=>v.$emit("jump-to",u.id)},[e("img",{src:a(He)(u.character_avatar_url,"250x250")||"/empty-char.svg",alt:u.character_name,class:"map-avatar",loading:"lazy",decoding:"async"},null,8,is),u.is_owner?(l(),i("span",rs,"YOU")):f("",!0)],10,ns))),128))])):(l(),i("div",os,"No floats yet."))])]),_:1},8,["is-open"]))}}),cs=le(ds,[["__scopeId","data-v-bf1b891f"]]),us={class:"parade-modal-header"},ms=["onClick"],ps={class:"parade-shell reward-shell"},vs={class:"reward-subtitle"},gs={key:0,class:"reward-image-wrap"},fs=["src","alt"],hs={class:"reward-subtitle"},_s=ne({__name:"ParadeRewardModal",props:{isOpen:{type:Boolean},itemName:{},itemImage:{},compensationCoins:{}},emits:["close"],setup(n){return(v,t)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--reward",compact:"","hide-header":"",onClose:t[1]||(t[1]=u=>v.$emit("close"))},{header:k(({close:u})=>[e("div",us,[e("button",{class:"parade-modal-close","aria-label":"Close",onClick:u},[...t[2]||(t[2]=[e("i",{class:"ti-close"},null,-1)])],8,ms)])]),default:k(()=>[e("div",ps,[n.compensationCoins?(l(),i(ee,{key:0},[t[6]||(t[6]=e("div",{class:"reward-check-icon"},[e("img",{src:"/icons/check-contained.svg",alt:""}
1)],-1)),t[7]||(t[7]=e("h2",{class:"reward-title"},"Reward Claimed!",-1)),e("p",vs,[t[3]||(t[3]=h(" You already own ",-1)),e("strong",null,p(n.itemName),1),t[4]||(t[4]=h(", so you received ",-1)),e("strong",null,p(n.compensationCoins.toLocaleString())+" Hubux",1),t[5]||(t[5]=h(" instead! ",-1))])],64)):(l(),i(ee,{key:1},[n.itemImage?(l(),i("div",gs,[e("img",{src:n.itemImage,alt:n.itemName,class:"reward-image"},null,8,fs)])):f("",!0),t[10]||(t[10]=e("h2",{class:"reward-title"},"Reward Claimed!",-1)),e("p",hs,[t[8]||(t[8]=h(" You received ",-1)),e("strong",null,p(n.itemName),1),t[9]||(t[9]=h(" for helping the parade reach its goal! ",-1))])],64)),e("button",{class:"parade-btn-primary",onClick:t[0]||(t[0]=u=>v.$emit("close"))},"Yay, got it!")])]),_:1},8,["is-open"]))}}),ys=le(_s,[["__scopeId","data-v-604a8657"]]),bs={class:"parade-modal-header"},ws=["onClick"],ks={class:"parade-shell preview-shell"},Cs={key:0,class:"preview-image-wrap"},$s=["src","alt"],xs={class:"preview-title"},Ms={key:1,class:"preview-price"},Is=["src"],Ps=ne({__name:"ParadeRewardPreviewModal",props:{isOpen:{type:Boolean},itemName:{},itemImage:{},price:{},currency:{}},emits:["close"],setup(n){return(v,t)=>(l(),E(pe,{"is-open":n.isOpen,"modal-class":"parade-modal parade-modal--preview",compact:"","hide-header":"",onClose:t[1]||(t[1]=u=>v.$emit("close"))},{header:k(({close:u})=>[e("div",bs,[e("button",{class:"parade-modal-close","aria-label":"Close",onClick:u},[...t[2]||(t[2]=[e("i",{class:"ti-close"},null,-1)])],8,ws)])]),default:k(()=>[e("div",ks,[n.itemImage?(l(),i("div",Cs,[e("img",{src:n.itemImage,alt:n.itemName,class:"preview-image"},null,8,$s)])):f("",!0),e("h2",xs,p(n.itemName),1),n.price?(l(),i("p",Ms,[t[3]||(t[3]=h(" Normally ",-1)),e("img",{src:n.currency==="gem"?"/gem.svg":"/icons/hubux.svg",alt:"",class:"price-icon"},null,8,Is),h(" "+p(n.price),1)])):f("",!0),t[4]||(t[4]=e("p",{class:"preview-body"}," Help the community hit the parade goal to claim this for free! ",-1)),e("button",{class:"parade-btn-secondary",onClick:t[0]||(t[0]=u=>v.$emit("close"))},"Got it")])]),_:1},8,["is-open"]))}}),Fs=le(Ps,[["__scopeId","data-v-7b84d671"]]),Ss={class:"parade-page"},Bs={class:"parade-header"},Ts={class:"header-actions"},Rs=["disabled"],Os={class:"balance-pill"},Es={class:"balance-pill"},As=["disabled"],Ls={class:"overlay-layer"},Ns={key:0,class:"float-hover-actions"},Us={class:"hover-name"},Gs={class:"hover-buttons"},Hs=["onClick"],zs=["onClick"],Ds={key:0},Vs={key:1},Ys={key:2},js={class:"goal-row"},Js={class:"goal-count"},Ws={class:"goal-bar"},Xs=["src"],Qs={class:"reward-text"},Zs={class:"reward-price"},qs=["src"],Ks={key:2,class:"claim-row claimed"},eo=["src"],to=["src"],ao={key:1,class:"claim-text"},so={key:2,class:"claim-text"},oo={key:4,class:"claim-row claimed"},lo={key:5,class:"goal-timer goal-timer--failed"},no={key:6,class:"goal-timer"},io=["aria-label"],ro=2500,co=ne({__name:"index",setup(n){const v=["I ship it","10/10 design","Needs more sparkles â¨","So cute! ð","Love this ð","Goals ð","Iconic","My new favorite","No notes","A masterpiece"],{config:t,floats:u,myFloat:V,goalProgress:Y,isReleasing:te,rewardAlreadyOwned:y,fetchConfig:P,fetchFloats:j,likeFloat:A,unlikeFloat:L,releaseFloat:C,findMyFloat:ve,commentOnFloat:ge,claimReward:fe}=kt(),{isAuthenticated:G,usersCurrency:x,getUsersCurrency:H}=Se(),F=g(null),S=g(null),N=g(null),B=g([]),U=g(null),ie=g(null),T=g(!1),he=w(()=>N.value===null||window.innerWidth>720?{}:{top:`${N.value+12}px`,left:"16px",bottom:"auto",transform:"none"}),J=g(!1),ae=g(!1),W=g(!1),re=g(!1),_e=g(!1),X=g(!1),de=g(!1),R=wt({shown:!1,name:"",image:null,compensationCoins:null}),$=g(null),ye=g(null),se=g(null),oe=g([]),ce=g(!1),m=g(!1),r=g(!1),d=g(!1),b=g(0);let z=null;const Be=w(()=>{const o=b.value;if(o<=0)return"";const s=Math.floor(o/86400),_=Math.floor(o%86400/3600),c=Math.floor(o%3600/60),q=o%60;return s>0?`${s}d ${_}h`:_>0?`${_}h ${c}m`:c>0?`${c}m ${q}s`:`${q}s`}),Ye=w(()=>t.value?.reward_virtual_item_currency==="gem"?"Gems":"Hubux"),je=w(()=>t.value?.reward_virtual_item_currency==="gem"?"/gem.svg":"/icons/hubux.svg"),Q=g([]);let Je=0,Ie=null;ht({title:"CharacterHub Parade"});const M=Ct({theme:"fantasy_festival"});Tt({onFloatAdded:o=>{M.addFloat(o)},onFloatUpdated:(o,s,_)=>{const c=D(o);c&&(s!==null&&(c.like_count=s),_!==null&&(c.comment_count=_),M.updateFloat(c))}});const We=w(()=>Ae(x.value?.coins??0)),Xe=w(()=>Ae(x.value?.gems??0)),ke=w(()=>!!t.value?.event_ended),Te=w(()=>B.value.filter(o=>o.cloneIndex===0)),Z=w(()=>ye.value?D(ye.value)??null:null),Pe=w(()=>se.value?D(se.value)??null:null),Qe=w(()=>
1{if(!$.value)return!1;const o=x.value?.coins??0,s=x.value?.gems??0;return o<$.value.total_coins||s<$.value.total_gems}),D=o=>u.value.find(s=>s.id===o),Ze=o=>{const s=F.value;if(!s)return;const _=s.getBoundingClientRect(),c=o.clientX-_.left,q=o.clientY-_.top,ue=B.value.find(me=>Math.abs(c-me.screenX)<me.width/2&&Math.abs(q-me.screenY)<me.height/2);U.value=ue?ue.floatId:null,ie.value=ue?ue.cloneIndex:null},qe=()=>{U.value=null,ie.value=null},Ke=o=>({left:`${o.screenX-o.width/2}px`,top:`${o.screenY-o.height/2}px`,width:`${o.width}px`,height:`${o.height}px`}),et=o=>{const s=Te.value.find(_=>_.floatId===o.floatId);return s?{left:`${s.screenX}px`,top:`${s.screenY-s.height*.6}px`,transform:"translate(-50%, -100%)"}:{display:"none"}};ze(async()=>{try{if(await P(),!t.value?.is_active&&!t.value?.event_ended){O.show("The parade is currently closed","nonative","danger");return}!t.value?.event_ended&&!t.value?.intro_seen&&(J.value=!0),await j(),G.value&&(H(),ve()),F.value&&(await M.init(F.value),M.setFloats(u.value),M.onVisibleFloats(s=>{B.value=s}),M.onFloatTap(s=>{ye.value=s,re.value=!0})),Ie=Fe(pt,1500);const o=t.value?.time_remaining_seconds;o!=null&&o>0&&(b.value=o,z=Fe(()=>{b.value=Math.max(0,b.value-1),b.value<=0&&z&&(clearInterval(z),z=null)},1e3))}catch(o){console.error("Parade init error:",o),O.show("Failed to load parade","nonative","danger")}});let Ce=null;const Re=()=>{!S.value||window.innerWidth>720||(N.value=S.value.getBoundingClientRect().bottom)};Ve(S,o=>{Ce?.disconnect(),o&&(Ce=new ResizeObserver(Re),Ce.observe(o),Re())}),De(()=>{Ie&&clearInterval(Ie),z&&clearInterval(z),Ce?.disconnect(),M.destroy()});const tt=()=>{T.value=!T.value,M.setPaused(T.value)},Oe=async o=>{if(r.value)return;const s=D(o);if(s){r.value=!0;try{s.user_liked?await L(o):await A(o);const _=D(o);_&&M.updateFloat(_)}catch{O.show("Could not register reaction","nonative","danger")}finally{r.value=!1}}},Ee=async o=>{se.value=o,oe.value=[],ce.value=!0,_e.value=!0,re.value=!1;try{const s=await It(o);oe.value=s?.comments||[]}catch{O.show("Failed to load comments","nonative","danger")}finally{ce.value=!1}},at=async o=>{if(!(!se.value||m.value)){m.value=!0;try{const s=await ge(se.value,o);s?.comment&&(oe.value=[s.comment,...oe.value]);const _=Pe.value;_&&M.updateFloat(_)}catch{O.show("Failed to post comment","nonative","danger")}finally{m.value=!1}}},st=()=>{if(ke.value){O.show("This parade event has ended","nonative","danger");return}if(!G.value){O.show("Log in to release a float","nonative","danger"),$e().push("/login");return}ae.value=!0},ot=o=>{$.value=o,ae.value=!1,W.value=!0},lt=()=>{W.value=!1,$.value=null},nt=async()=>{if(!$.value||te.value)return;const o=$.value;try{const s=await C({character_id:o.character_id,float_base_id:o.float_base_id,color_hex:o.color_hex,banner_text:o.banner_text,has_crown:o.has_crown,has_sparkles:o.has_sparkles});s?.float&&(M.addFloat(s.float),M.jumpToFloat(s.float.id)),t.value&&o.character_id&&(t.value.used_character_ids=[...t.value.used_character_ids??[],o.character_id]),H(),W.value=!1,$.value=null,O.show("Your float is in the parade! ð","nonative","success")}catch(s){const _=s?.response?.data?.error||"Failed to release float";O.show(_,"nonative","danger")}},it=()=>{const o=Z.value;o?.character_slug&&Mt(o.character_slug,void 0)},rt=o=>{M.jumpToFloat(o),X.value=!1},dt=async()=>{if(!d.value){if(!t.value?.has_released_float){O.show("Release at least one float to claim the reward","nonative","primary");return}d.value=!0;try{const o=await fe();R.shown=!0,R.name=t.value?.reward_virtual_item_name||"Reward",R.image=t.value?.reward_virtual_item_image||null,R.compensationCoins=o?.duplicate_compensation??null,await P()}catch(o){const s=o?.response?.data?.error;s==="Reward already claimed"?O.show("You've already claimed this reward!","nonative","danger"):O.show(s||"Failed to claim reward","nonative","danger")}finally{d.value=!1}}},ct=()=>{J.value=!1,Pt().catch(()=>{})},ut=()=>{$e().push({name:"events"})},mt=()=>{$e().push({name:"parade-recap"})},Ae=o=>o>=1e3?`${(o/1e3).toFixed(1)}k`:String(o),pt=()=>{const o=performance.now();if(Q.value=Q.value.filter(_=>o-_.spawnedAt<ro),T.value)return;const s=Te.value;if(s.length)for(const _ of s){const c=D(_.floatId);if(!c||c.comment_count<=0)continue;const q=Math.min(.3,c.comment_count/80);if(Math.random()>q||Q.value.some(me=>me.floatId===c.id))continue;const ue=v[Math.floor(Math.random()*v.length)];Q.value.push({id:++Je,floatId:c.id,text:ue,spawnedAt:o}),Q.value.length>8&&(Q.value=Q.value.slice(-8))}};return(o,s)=>{const _=_t;return l(),i("div",Ss,[e("header",Bs,[e("button",{class:"header-btn ghost",onClick:ut},[...s[11]||(s[11]=[e("i",{class:"ti-arrow-left"},null,-1)])]),s[16]||(s[16]=e("div",{class:"parade-title"},[e("span",{class:"title-sparkle"},"â¦"),e("span",{class:"title-text"},"CharacterHub Parade")],-1)),e("div",Ts,[e("button",{class:"header-btn ghost",disabled:!a(u).length,onClick:s[0]||(s[0]=c=>X.value=!0)},[...s[12]||(s[12]=[e("i",{class:"ti-map-alt"},null,-1),h(),e("span",{class:"desktop-only-inline"},"Map",-1)])],8,Rs),e("div",Os,[s[13]||(s[13]=e("img",{src:"/icons/hubux.svg",alt:"Hubux",class:"pill-icon"}
1,null,-1)),e("span",null,p(a(We)),1)]),e("div",Es,[s[14]||(s[14]=e("img",{src:"/gem.svg",alt:"Gems",class:"pill-icon"},null,-1)),e("span",null,p(a(Xe)),1)]),e("button",{class:"header-btn primary",disabled:!a(t)||a(ke),onClick:st},[...s[15]||(s[15]=[e("i",{class:"ti-shopping-cart"},null,-1),h(),e("span",{class:"desktop-only-inline"},"Release Float",-1)])],8,As)])]),e("div",{ref_key:"pixiContainer",ref:F,class:"pixi-canvas-container",onMousemove:Ze,onMouseleave:qe},null,544),e("div",Ls,[(l(!0),i(ee,null,we(a(B),c=>(l(),i("div",{key:`${c.floatId}-${c.cloneIndex}`,class:"float-hover-target",style:be(Ke(c))},[K(yt,{name:"fade"},{default:k(()=>[a(U)===c.floatId&&a(ie)===c.cloneIndex?(l(),i("div",Ns,[e("div",Us,p(D(c.floatId)?.character_name||"Unnamed"),1),e("div",Gs,[e("button",{class:I(["hover-btn",{liked:D(c.floatId)?.user_liked}]),onClick:Ge(q=>Oe(c.floatId),["stop"])},[s[17]||(s[17]=e("i",{class:"ti-heart"},null,-1)),h(" "+p(D(c.floatId)?.like_count??0),1)],10,Hs),e("button",{class:"hover-btn",onClick:Ge(q=>Ee(c.floatId),["stop"])},[s[18]||(s[18]=e("i",{class:"ti-comment"},null,-1)),h(" "+p(D(c.floatId)?.comment_count??0),1)],8,zs)])])):f("",!0)]),_:2},1024)],4))),128)),K(bt,{name:"popup",tag:"div"},{default:k(()=>[(l(!0),i(ee,null,we(a(Q),c=>(l(),i("div",{key:c.id,class:"ambient-popup",style:be(et(c))},p(c.text),5))),128))]),_:1})]),a(t)?(l(),i("div",{key:0,ref_key:"communityHudEl",ref:S,class:"community-hud"},[a(ke)?(l(),i("div",{key:0,class:I(["event-ended-badge",{"goal-met":a(t).community_goal_met,"goal-failed":a(t).goal_failed}])},[a(t).community_goal_met?(l(),i("span",Ds,"Event Ended - Goal Met!")):a(t).goal_failed?(l(),i("span",Vs,"Event Ended - Goal Not Reached")):(l(),i("span",Ys,"Event Ended"))],2)):f("",!0),e("div",js,[e("span",{class:I(["goal-label",{"goal-label--failed":a(t).goal_failed}])},"Community Goal",2),e("span",Js,p(Math.min(a(t).total_floats,a(t).community_goal_target))+" / "+p(a(t).community_goal_target),1)]),e("div",Ws,[e("div",{class:I(["goal-bar-fill",{"goal-bar-fill--failed":a(t).goal_failed}]),style:be({width:`${Math.round(Math.min(a(Y),1)*100)}%`})},null,6)]),!a(t).community_goal_met&&a(t).reward_virtual_item_id&&!a(ke)?(l(),i("div",{key:1,class:"reward-incentive",onClick:s[1]||(s[1]=c=>de.value=!0)},[a(t).reward_virtual_item_image?(l(),i("img",{key:0,src:a(t).reward_virtual_item_image,class:"reward-icon",alt:""},null,8,Xs)):f("",!0),e("span",Qs,[h(" Unlock: "+p(a(t).reward_virtual_item_name)+" ",1),e("span",Zs,[h(" ("+p(a(Ye))+": ",1),e("img",{src:a(je),alt:"",class:"reward-price-icon"},null,8,qs),h(" "+p(a(t).reward_virtual_item_price??0)+") ",1)])])])):f("",!0),a(t).community_goal_met&&a(t).reward_claimed?(l(),i("div",Ks,[a(t).reward_virtual_item_image?(l(),i("img",{key:0,src:a(t).reward_virtual_item_image,class:"claimed-reward-img",alt:""},null,8,eo)):f("",!0),s[19]||(s[19]=e("span",{class:"claim-text"},"Reward Claimed!",-1))])):a(t).community_goal_met&&a(t).reward_virtual_item_id?(l(),i("div",{key:3,class:I(["claim-row",{"claim-row--loading":a(d)}]),onClick:dt},[a(t).reward_virtual_item_image&&!a(y)?(l(),i("img",{key:0,src:a(t).reward_virtual_item_image,class:"claimed-reward-img",alt:""},null,8,to)):f("",!0),a(y)?(l(),i("span",ao,[...s[20]||(s[20]=[h(" GOAL MET! Claim 2,000 Hubux ",-1),e("span",{class:"claim-already-owned"},"(you already own this frame)",-1)])])):(l(),i("span",so,"GOAL MET! Claim "+p(a(t).reward_virtual_item_name),1)),s[21]||(s[21]=e("span",{class:"claim-arrow"},"â",-1))],2)):a(t).community_goal_met?(l(),i("div",oo,[...s[22]||(s[22]=[e("span",{class:"claim-text"},"Community goal reached!",-1)])])):a(t).goal_failed?(l(),i("div",lo,"Expired")):a(Be)?(l(),i("div",no,p(a(Be)),1)):f("",!0),e("button",{class:"recap-link",onClick:mt}," View Parade Recap ")],512)):f("",!0),e("button",{class:"play-pause-btn",style:be(a(he)),"aria-label":a(T)?"Play":"Pause",onClick:tt},[e("i",{class:I(a(T)?"ti-control-play":"ti-control-pause")},null,2)],12,io),a(J)&&a(t)?(l(),E(Nt,{key:1,"is-open":a(J),"goal-target":a(t).community_goal_target,onClose:ct},null,8,["is-open","goal-target"])):f("",!0),a(t)?(l(),E(Aa,{key:2,"is-open":a(ae),"float-bases":a(t).float_bases,"global-upgrades":a(t).global_upgrades,"max-banner-length":a(t).max_banner_length,"used-character-ids":a(t).used_character_ids??[],onClose:s[2]||(s[2]=c=>ae.value=!1),onContinue:ot},null,8,["is-open","float-bases","global-upgrades","max-banner-length","used-character-ids"])):f("",!0),a($)?(l(),E(Za,{key:3,"is-open":a(W),"character-name":a($).character_name,"base-label":a($).float_base_label,"total-coins":a($).total_coins,"total-gems":a($).total_gems,insufficient:a(Qe),loading:a(te),onConfirm:nt,onCancel:lt},null,8,["is-open","character-name","base-label","total-coins","total-gems","insufficient","loading"])):f("",!0),K($t,{"is-open":a(re),float:a(Z),liking:a(r),onClose:s[3]||(s[3]=c=>re.value=!1),onToggleLike:s[4]||(s[4]=c=>a(Z)&&Oe(a(Z).id)),onOpenComments:s[5]||(s[5]=c=>a(Z)&&Ee(a(Z).id)),onVisitCharacter:it,onVisitUser:s[6]||(s[6]=c=>a(Z)?.username&&("useRouter"in o?o.useRouter:a($e))().push({name:"profile",params:{username:a(Z).username}}))},null,8,["is-open","float","liking"]),K(xt,{"is-open":a(_e),"character-name":a(Pe)?.character_name||"","like-count":a(Pe)?.like_count??0,comments:a(oe),loading:a(ce),posting:a(m),onClose:s[7]||(s[7]=c=>_e.value=!1),onPost:at},null,8,["is-open","character-name","like-count","comments","loading","posting"]),K(cs,{"is-open":a(X),floats:a(u),"my-float-id":a(V)?.id??null,onClose:s[8]||(s[8]=c=>X.value=!1),onJumpTo:rt},null,8,["is-open","floats","my-float-id"]),a(R).shown?(l(),E(ys,{key:4,"is-open":a(R).shown,"item-name":a(R).name,"item-image":a(R).image,"compensation-coins":a(R).compensationCoins,onClose:s[9]||(s[9]=c=>a(R).shown=!1)},null,8,["is-open","item-name","item-image","compensation-coins"])):f("",!0),a(t)?.reward_virtual_item_id?(l(),E(Fs,{key:5,"is-open":a(de),"item-name":a(t).reward_virtual_item_name||"Parade Reward","item-image":a(t).reward_virtual_item_image,price:a(t).reward_virtual_item_price,currency:a(t).reward_virtual_item_currency,onClose:s[10]||(s[10]=c=>de.value=!1)},null,8,["is-open","item-name","item-image","price","currency"])):f("",!0),K(_,null,{default:k(()=>[K(Ft,{class:"parade-bottom-bar"})]),_:1})])}}}),Tn=le(co,[["__scopeId","data-v-6d86a53b"]]);export{Tn as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.