// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-or-later // @source: https://gitlab.com/soapbox-pub/ditto/-/tree/f0a3877c import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{qi as t}from"./lucide-icons-BdRF0moN.js";import{t as n}from"./dist-DQ82bf9M.js";import{h as r,t as i}from"./useQuery-rCAlChE8.js";import{t as a}from"./useLocalStorage-DLDvi0Ge.js";import{t as o}from"./useCurrentUser-C6OJJlWo.js";import{C as s,D as c,E as l,F as u,N as d,P as f,S as p,_ as m,a as h,g,m as _,n as v,o as y,r as ee,t as b,w as x,x as S}from"./blobbi-CLChx8JU.js";import{c as C,i as w,r as T,u as E}from"./blobbi-shop-items-gin9pdH4.js";import{c as te}from"./BlobbiStageVisual-Cyhy_5-y.js";var D=e(t(),1);function O(){let{nostr:e}=n(),{user:t}=o(),s=r(),[l,u]=a(b,null),d=(0,D.useMemo)(()=>!l||!t?.pubkey||l.pubkey!==t.pubkey||!l.profile||l.profile.event.pubkey!==t.pubkey?null:l.profile,[l,t?.pubkey]),f=i({queryKey:[`blobbonaut-profile`,t?.pubkey],queryFn:async({signal:n})=>{if(!t?.pubkey)return null;let r=_(t.pubkey),i={kinds:[...ee],authors:[t.pubkey],"#d":r},a=(await e.query([i],{signal:n})).filter(x);if(a.length===0)return null;let o=a.filter(e=>e.kind===y),s=a.filter(e=>p(e));return o.length>0?c(o.sort((e,t)=>t.created_at-e.created_at)[0])??null:s.length>0?c(s.sort((e,t)=>t.created_at-e.created_at)[0])??null:null},enabled:!!t?.pubkey,staleTime:3e4,gcTime:300*1e3,refetchOnWindowFocus:!1,refetchOnReconnect:!0,refetchOnMount:`always`,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4),initialData:d??void 0,initialDataUpdatedAt:d?l?.cachedAt??0:void 0}),m=(0,D.useMemo)(()=>{let e=f.data;return e?`${e.d}:${e.event.created_at}`:``},[f.data]),h=(0,D.useRef)(``);(0,D.useEffect)(()=>{!f.data||!t?.pubkey||f.data.event.pubkey===t.pubkey&&h.current!==m&&(h.current=m,u(e=>{let n=e?.profile?`${e.profile.d}:${e.profile.event.created_at}`:``;return e?.pubkey===t.pubkey&&n===m?e:{pubkey:t.pubkey,profile:f.data,companion:e?.pubkey===t.pubkey?e.companion??null:null,cachedAt:Date.now()}}))},[m,t?.pubkey,f.data,u]);let g=(0,D.useCallback)(()=>{t?.pubkey&&s.invalidateQueries({queryKey:[`blobbonaut-profile`,t.pubkey]})},[s,t?.pubkey]),v=(0,D.useCallback)(e=>{let n=c(e);n&&t?.pubkey&&(s.setQueryData([`blobbonaut-profile`,t.pubkey],n),u(e=>e?.pubkey===t.pubkey&&e.profile?.event.created_at===n.event.created_at&&e.profile?.d===n.d?e:{pubkey:t.pubkey,profile:n,companion:e?.pubkey===t.pubkey?e.companion??null:null,cachedAt:Date.now()}))},[s,t?.pubkey,u]),S=(0,D.useMemo)(()=>f.data?.currentCompanion,[f.data]),C=(0,D.useMemo)(()=>{let e=f.data;return e?p(e.event):!1},[f.data]);return{profile:f.data??null,effectiveCompanionD:S,isLoading:f.isLoading&&!d,isFetching:f.isFetching,isSuccess:f.isSuccess,isFetched:f.isFetched,isStale:f.isStale,error:f.error,invalidate:g,updateProfileEvent:v,isFromCache:!!d&&f.isFetching,needsKindMigration:C}}var k=20;function A(e){return[...e].sort((e,t)=>e.d.localeCompare(t.d))}function ne(e,t){let n=[];for(let r=0;rc===`all`||!e||e.length===0?null:[...e].sort(),[c,e]),d=c===`all`?`all`:u?.join(`,`)??``,f=i({queryKey:[`blobbi-collection`,t,d],queryFn:async({signal:e})=>{if(!t)return console.log(`[useBlobbisCollection] No pubkey, returning empty`),{companionsByD:{},companions:[]};let n;if(c===`all`){let r={kinds:[h],authors:[t],"#b":[v]};console.log(`[Blobbi] 31124 query filter (all):`,JSON.stringify(r,null,2)),n=await a.query([r],{signal:e}),console.log(`[useBlobbisCollection] Fetch-all returned`,n.length,`events`)}else{if(!u||u.length===0)return console.log(`[useBlobbisCollection] Empty dList, returning empty`),{companionsByD:{},companions:[]};console.log(`[Blobbi] dList:`,u);let r=ne(u,k);console.log(`[useBlobbisCollection] Splitting into`,r.length,`chunk(s)`),n=[];for(let i of r){let r={kinds:[h],authors:[t],"#d":i};console.log(`[Blobbi] 31124 query filter:`,JSON.stringify(r,null,2));let o=await a.query([r],{signal:e});n.push(...o),console.log(`[useBlobbisCollection] Chunk returned`,o.length,`events`)}}console.log(`[useBlobbisCollection] Total events received:`,n.length);let r=n.filter(e=>s(e)&&!S(e));console.log(`[useBlobbisCollection] Valid (canonical, non-legacy) events:`,r.length);let i=new Map;for(let e of r){let t=e.tags.find(([e])=>e===`d`)?.[1];if(!t)continue;let n=i.get(t);(!n||e.created_at>n.created_at)&&i.set(t,e)}let o={},d=[];for(let[e,t]of i){let n=l(t);n&&!n.isLegacy&&(o[e]=n,d.push(n))}let f=A(d);return console.log(`[useBlobbisCollection] Parsed companions:`,{count:f.length,dTags:Object.keys(o)}),{companionsByD:o,companions:f}},enabled:!!t&&(c===`all`||!!u&&u.length>0),staleTime:3e4,gcTime:300*1e3,refetchOnWindowFocus:!1,refetchOnReconnect:!0,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4)}),p=(0,D.useCallback)(()=>{t&&o.invalidateQueries({queryKey:[`blobbi-collection`,t,d]})},[o,t,d]),m=(0,D.useCallback)(e=>{let n=l(e);if(!n||n.isLegacy||!t)return;let r=o.getQueriesData({queryKey:[`blobbi-collection`,t]});for(let[e,t]of r){if(!t)continue;let r={...t.companionsByD,[n.d]:n};o.setQueryData(e,{companionsByD:r,companions:A(Object.values(r))})}r.length===0&&o.setQueryData([`blobbi-collection`,t,d],{companionsByD:{[n.d]:n},companions:[n]})},[o,t,d]);return{companionsByD:f.data?.companionsByD??{},companions:f.data?.companions??[],isLoading:f.isLoading,isFetching:f.isFetching,isStale:f.isStale,error:f.error,invalidate:p,updateCompanionEvent:m}}function M(){let{user:e}=o(),{profile:t,isLoading:n}=O(),r=t?.currentCompanion,{companionsByD:i,isLoading:a}=j((0,D.useMemo)(()=>{if(r)return[r]},[r]),e?.pubkey),s=r?i[r]??null:null,c=E(s);return{companion:(0,D.useMemo)(()=>{if(!r||!s)return null;let e=c?.stats??s.stats;return{d:s.d,name:s.name,stage:s.stage,visualTraits:s.visualTraits,energy:e.energy??100,stats:{hunger:e.hunger??100,happiness:e.happiness??100,health:e.health??100,hygiene:e.hygiene??100,energy:e.energy??100},state:s.state,adultType:s.adultType,seed:s.seed}},[r,s,c?.stats]),isLoading:n||!!r&&a,error:null}}var N=[{id:`interact_3`,title:`Quick Care`,description:`Interact with your Blobbi 3 times`,action:`interact`,target:3,tracking:`tally`,xp:15,weight:10,requiredStages:[`baby`,`adult`]},{id:`interact_6`,title:`Attentive Caretaker`,description:`Interact with your Blobbi 6 times`,action:`interact`,target:6,tracking:`tally`,xp:30,weight:8,requiredStages:[`baby`,`adult`]},{id:`feed_1`,title:`Snack Time`,description:`Feed your Blobbi once`,action:`feed`,target:1,tracking:`tally`,xp:10,weight:10,requiredStages:[`baby`,`adult`]},{id:`feed_2`,title:`Hungry Blobbi`,description:`Feed your Blobbi 2 times`,action:`feed`,target:2,tracking:`tally`,xp:20,weight:8,requiredStages:[`baby`,`adult`]},{id:`feed_3`,title:`Feast Day`,description:`Feed your Blobbi 3 times`,action:`feed`,target:3,tracking:`tally`,xp:35,weight:5,requiredStages:[`baby`,`adult`]},{id:`sleep_1`,title:`Nap Time`,description:`Put your Blobbi to sleep`,action:`sleep`,target:1,tracking:`tally`,xp:15,weight:6,requiredStages:[`baby`,`adult`]},{id:`take_photo_1`,title:`Snapshot`,description:`Take a photo of your Blobbi`,action:`take_photo`,target:1,tracking:`tally`,xp:25,weight:4,requiredStages:[`baby`,`adult`]},{id:`take_photo_2`,title:`Photo Album`,description:`Take 2 photos of your Blobbi`,action:`take_photo`,target:2,tracking:`tally`,xp:40,weight:2,requiredStages:[`baby`,`adult`]},{id:`clean_1`,title:`Quick Cleanup`,description:`Clean your Blobbi once`,action:`clean`,target:1,tracking:`tally`,xp:10,weight:10,requiredStages:[`egg`,`baby`,`adult`]},{id:`clean_2`,title:`Squeaky Clean`,description:`Clean your Blobbi 2 times`,action:`clean`,target:2,tracking:`tally`,xp:20,weight:6,requiredStages:[`egg`,`baby`,`adult`]},{id:`sing_1`,title:`Sing Along`,description:`Sing a song to your Blobbi`,action:`sing`,target:1,tracking:`tally`,xp:15,weight:6,requiredStages:[`egg`,`baby`,`adult`]},{id:`sing_2`,title:`Karaoke Session`,description:`Sing 2 songs to your Blobbi`,action:`sing`,target:2,tracking:`tally`,xp:25,weight:3,requiredStages:[`egg`,`baby`,`adult`]},{id:`play_music_1`,title:`DJ Time`,description:`Play a song for your Blobbi`,action:`play_music`,target:1,tracking:`tally`,xp:15,weight:6,requiredStages:[`egg`,`baby`,`adult`]},{id:`play_music_2`,title:`Music Marathon`,description:`Play 2 songs for your Blobbi`,action:`play_music`,target:2,tracking:`tally`,xp:25,weight:3,requiredStages:[`egg`,`baby`,`adult`]},{id:`medicine_1`,title:`Health Check`,description:`Give medicine to your Blobbi`,action:`medicine`,target:1,tracking:`tally`,xp:20,weight:5,requiredStages:[`egg`,`baby`,`adult`]},{id:`medicine_2`,title:`Doctor Visit`,description:`Give medicine to your Blobbi 2 times`,action:`medicine`,target:2,tracking:`tally`,xp:35,weight:3,requiredStages:[`egg`,`baby`,`adult`]}],P=new Map(N.map(e=>[e.id,e]));function re(e){return P.get(e)}function F(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function I(e){return e?e.date!==F():!0}function ie(e){return function(){let t=e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function ae(e,t){let n=t?`${e}:${t}`:e,r=0;for(let e=0;et.includes(e))}function R(e,t,n,r){let i=r??[`baby`,`adult`],a=N.filter(e=>L(e,i));if(a.length===0)return[];let o=ie(ae(t,n)),s=[...a],c=[];for(;c.length0;){let e=s.reduce((e,t)=>e+t.weight,0),t=o()*e,n=0;for(let e=0;e{let r=P.get(e.id);if(!r||r.action!==t)return e;if(u(e))return e.count>=e.target?e:{...e,count:Math.min(e.count+n,e.target)};if(d(e)&&r.tracking===`tally`){let t=e.events.length;return t>=e.target?e:{id:e.id,target:e.target,count:Math.min(t+n,e.target)}}return e});return{...e,daily:r}}function H(e,t,n=1){return e.map(e=>e.id!==t||!u(e)||e.count>=e.target?e:{...e,count:Math.min(e.count+n,e.target)})}function U(e,t,n){return e.map(e=>e.id!==t||!d(e)||e.events.length>=e.target||e.events.includes(n)?e:{...e,events:[...e.events,n]})}function W(e){return e.daily.length>0&&e.daily.every(f)}function G(e){return e.daily.reduce((e,t)=>{let n=P.get(t.id);return e+(n&&f(t)?n.xp:0)},0)+(W(e)?50:0)}var K=new Map;function q(e){return e??``}function J(e,t){let n=K.get(q(e));if(!I(n))return n;let r=B(F(),e,t);return K.set(q(e),r),r}function Y(e){window.dispatchEvent(new CustomEvent(`daily-missions-updated`,{detail:e}))}var X=new Map;function Z(e,t){return`${e??``}:${t??``}`}function oe(e,t=1,n){let r=V(J(n),e,t);K.set(q(n),r),Y({action:e,count:t})}function Q(e,t){let n=J(t);for(let t of e)n=V(n,t,1);K.set(q(t),n),Y({actions:e})}function se(e,t=1,n,r){let i=Z(n,r),a=X.get(i);if(!a||a.length===0)return;let o=H(a,e,t);X.set(i,o),Y({evolution:!0,missionId:e,count:t,d:r})}function ce(e,t,n,r){let i=Z(n,r),a=X.get(i);if(!a||a.length===0)return;let o=U(a,e,t);X.set(i,o),Y({evolution:!0,missionId:e,eventId:t,d:r})}function le(e){return K.get(q(e))}function ue(e,t){K.set(q(t),e)}function de(e,t){return X.get(Z(e,t))}function fe(e,t,n){X.set(Z(t,n),e)}function pe(e,t,n){let r=Z(t,n);X.has(r)||X.set(r,e)}function me(e,t){X.delete(Z(e,t))}function he(e,t){let n=[`interact`];e===`feed`&&n.push(`feed`),e===`clean`&&n.push(`clean`),e===`medicine`&&n.push(`medicine`),Q(n,t)}function ge(e,t,n=new Date){let r=Math.floor(n.getTime()/1e3),i=m(n);return e===void 0||e===0||!t?{wasUpdated:!0,newStreak:1,newLastAt:r,newLastDay:i,action:`initialized`}:t===i?{wasUpdated:!1,newStreak:e,newLastAt:r,newLastDay:i,action:`same_day`}:g(t,i)===1?{wasUpdated:!0,newStreak:e+1,newLastAt:r,newLastDay:i,action:`incremented`}:{wasUpdated:!0,newStreak:1,newLastAt:r,newLastDay:i,action:`reset`}}function _e(e,t=new Date){let n=ge(e.careStreak,e.careStreakLastDay,t);if(n.wasUpdated)return{care_streak:n.newStreak.toString(),care_streak_last_at:n.newLastAt.toString(),care_streak_last_day:n.newLastDay}}var ve={sleepy:8e3,sick:4e3,hungry:4e3,dirty:3e3,sad:6e3,dizzy:2e3,boring:3e3,angry:2e3,surprised:1e3,curious:1e3,excited:1500,excitedB:1500,mischievous:1500};function ye(e){let t=Object.entries(ve).filter(([t])=>e.includes(t)).map(([,e])=>e);return t.length>0?Math.max(...t):2e3}var $={recipe:w,label:`neutral`,triggeringStat:null,severity:null};function be({stats:e,enabled:t=!0,timing:n,actionOverride:r}){let i=(0,D.useMemo)(()=>({...T,...n,cooldownMultipliers:{...T.cooldownMultipliers,...n?.cooldownMultipliers}}),[n]),[a,o]=(0,D.useState)($),s=(0,D.useRef)({checkTimer:null,recipeStartTime:0,current:$}),c=(0,D.useRef)(e);c.current=e;let l=(0,D.useRef)(i);l.current=i;let u=(0,D.useCallback)(()=>{let e=s.current;e.checkTimer&&=(clearTimeout(e.checkTimer),null)},[]),d=(0,D.useCallback)(()=>{s.current.current=$,o($)},[]),f=(0,D.useCallback)(e=>{let t=s.current,n=Date.now(),r=t.current;if(e.label!==r.label){if(e.label===`neutral`){t.current=e,t.recipeStartTime=n,o(e);return}if(r.label===`neutral`){t.current=e,t.recipeStartTime=n,o(e);return}n-t.recipeStartTime>=ye(r.label)&&(t.current=e,t.recipeStartTime=n,o(e))}},[]),p=(0,D.useCallback)(()=>{let e=c.current,t=l.current,n=s.current,r=C(e);f(r),n.checkTimer=setTimeout(p,t.checkInterval)},[f]);(0,D.useEffect)(()=>{if(!t){u(),d();return}let e=C(c.current),n=s.current;return n.current=e,n.recipeStartTime=Date.now(),o(e),n.checkTimer=setTimeout(p,l.current.checkInterval),()=>{u()}},[t,p,u,d]),(0,D.useEffect)(()=>{let t=C(e);f(t)},[e,f]),(0,D.useEffect)(()=>()=>{u()},[u]);let m=r!=null,h=(0,D.useMemo)(()=>m?te(r):w,[m,r]);return{recipe:m?h:a.recipe,recipeLabel:m?r:a.label,isStatusReactionActive:a.label!==`neutral`&&!m,triggeringStat:a.triggeringStat,currentSeverity:a.severity,isOverrideActive:m}}export{O as S,F as _,le as a,M as b,ce as c,Q as d,ue as f,re as g,B as h,pe as i,se as l,W as m,_e as n,de as o,fe as p,me as r,oe as s,be as t,he as u,I as v,j as x,G as y}; // @license-end