// @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"./jsx-runtime-By8HlURe.js";import{t as r}from"./dist-DQ82bf9M.js";import{h as i}from"./useQuery-rCAlChE8.js";import{t as a}from"./useMutation-CgsR0O-3.js";import{o,t as s}from"./useCurrentUser-C6OJJlWo.js";import{t as c}from"./utils-BFSTDHdM.js";import{t as l}from"./useNostrPublish-CrMjnYm4.js";import{s as u}from"./chunk-62JRHF6Z-yJW_vgm4.js";import{Y as d}from"./index-CYEZWNq6.js";import{C as f,E as p,R as m,a as h,c as g,j as _}from"./blobbi-CLChx8JU.js";import{S as v,l as y,n as b,o as x,u as S}from"./useStatusReaction-L-HlqtEq.js";import{b as C,d as w,m as T,n as E,t as D}from"./blobbi-shop-items-gin9pdH4.js";import{a as O,c as k,d as A,l as j,m as M,o as N,p as P,s as F,t as I}from"./blobbi-action-utils-CeIPzrFd.js";var L=e(t(),1),R=n(),z={hunger:40,happiness:35,hygiene:30,health:50,energy:25},B={food:[`hunger`,`energy`],toy:[`happiness`],hygiene:[`hygiene`],medicine:[`health`],energy:[`energy`]};function V(e,t){if(e>=t)return`none`;let n=(t-e)/t;return n>=.6?`critical`:n>=.4?`high`:n>=.2?`normal`:`low`}function H(e,t){let n=t[e]??100,r=z[e]??50;return{needed:ni.indexOf(r.priority)&&(r={needsItem:!0,priority:a,triggeringStat:e,currentValue:o,threshold:s})}return r}function W(e){let t=[];for(let[n,r]of Object.entries(z)){let i=e[n]??100;in.indexOf(e.priority)-n.indexOf(t.priority)),t}var G=[{id:`feed`,label:`Feed`,emoji:`๐ŸŽ`,itemCategory:`food`},{id:`play`,label:`Play`,emoji:`โšฝ`,itemCategory:`toy`},{id:`medicine`,label:`Medicine`,emoji:`๐Ÿ’Š`,itemCategory:`medicine`},{id:`clean`,label:`Clean`,emoji:`๐Ÿงผ`,itemCategory:`hygiene`},{id:`sleep`,label:`Sleep`,emoji:`๐Ÿ˜ด`,itemCategory:null}];function K(e){return G.find(t=>t.id===e)}function q(e){return K(e)?.itemCategory??null}var J={isOpen:!1,selectedAction:null,items:[]},Y={moveThreshold:5,timeThreshold:300},X={food:`feed`,toy:`play`,medicine:`medicine`,hygiene:`clean`,energy:`boost`};function ee(e,t){let n=q(e);if(!n)return[];let r=D(),i=[];for(let e of r)e.type===n&&k(e.id,t).canUse&&i.push({id:e.id,name:e.name,emoji:e.icon,category:e.type,quantity:1/0,effect:e.effect});return i}function te({isActive:e,stage:t=`baby`,onOpen:n,onClose:r,onActionSelect:i,onItemClick:a}){let o=u(),{profile:s}=v(),[c,l]=(0,L.useState)(J),d=(0,L.useMemo)(()=>t===`egg`?G.filter(e=>e.id===`medicine`||e.id===`clean`):G,[t]),f=(0,L.useCallback)(()=>{l(J),r?.()},[r]),p=(0,L.useCallback)(()=>{e&&(l(e=>({...e,isOpen:!0})),n?.())},[e,n]),m=(0,L.useCallback)(()=>{c.isOpen?f():p()},[c.isOpen,f,p]),h=(0,L.useCallback)(n=>{if(!e||!s)return;if(c.selectedAction===n){l(e=>({...e,selectedAction:null,items:[]}));return}let r=ee(n,t);l(e=>({...e,selectedAction:n,items:r})),i?.(n)},[e,s,t,c.selectedAction,i]),g=(0,L.useCallback)(()=>{l(e=>({...e,selectedAction:null,items:[]}))},[]),_=(0,L.useCallback)(e=>{a?.(e)},[a]);return(0,L.useEffect)(()=>{c.isOpen&&f()},[o.pathname]),(0,L.useEffect)(()=>{!e&&c.isOpen&&f()},[e,c.isOpen,f]),{menuState:c,availableActions:d,toggleMenu:m,openMenu:p,closeMenu:f,selectAction:h,clearAction:g,handleItemClick:_}}function ne(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.sqrt(n*n+r*r)}function re({config:e=Y,onClick:t,onDragStart:n}={}){let r=(0,L.useRef)({startPosition:null,startTime:null,hasMoved:!1});return{handlePointerDown:(0,L.useCallback)(e=>{r.current={startPosition:e,startTime:Date.now(),hasMoved:!1}},[]),handlePointerMove:(0,L.useCallback)(t=>{let i=r.current;return i.startPosition?i.hasMoved?!0:ne(i.startPosition,t)>e.moveThreshold?(i.hasMoved=!0,n?.(),!0):!1:!1},[e.moveThreshold,n]),handlePointerUp:(0,L.useCallback)(()=>{let n=r.current;if(!n.startPosition||!n.startTime)return!1;let i=Date.now()-n.startTime,a=!n.hasMoved&&i<=e.timeThreshold;return r.current={startPosition:null,startTime:null,hasMoved:!1},a&&t?.(),a},[e.timeThreshold,t]),reset:(0,L.useCallback)(()=>{r.current={startPosition:null,startTime:null,hasMoved:!1}},[]),isTracking:r.current.startPosition!==null,hasMoved:r.current.hasMoved}}var ie=3e3,ae=500;function oe(e={}){let{nostr:t}=r(),{user:n}=s(),{mutateAsync:c}=l(),u=i(),{profile:d}=v(),D=e.profile??d,R=(0,L.useRef)(new Map),z=(0,L.useCallback)(e=>{let t=R.current.get(e);return t?Date.now()>=t.expiresAt?(R.current.delete(e),!1):!0:!1},[]),B=(0,L.useCallback)(e=>{R.current.delete(e)},[]),V=(0,L.useCallback)((e,t)=>{let n=t?ae:ie;R.current.set(e,{expiresAt:Date.now()+n,wasSuccess:t})},[]),H=(0,L.useCallback)(async()=>{if(e.companion!==void 0)return e.companion??null;if(!n?.pubkey||!D?.currentCompanion)return null;let r=(await t.query([{kinds:[h],authors:[n.pubkey],"#d":[D.currentCompanion]}])).filter(f).sort((e,t)=>t.created_at-e.created_at);return r.length===0?null:p(r[0])??null},[t,n?.pubkey,D?.currentCompanion,e.companion]),U=(0,L.useCallback)(e=>{if(!n?.pubkey||!D?.currentCompanion)return;let t=p(e);if(!t||t.isLegacy){u.invalidateQueries({queryKey:[`blobbi-collection`,n.pubkey]});return}u.setQueryData([`blobbi-collection`,n.pubkey],e=>{if(!e)return e;let n={...e.companionsByD,[t.d]:t};return{companionsByD:n,companions:Object.values(n)}}),u.invalidateQueries({queryKey:[`blobbi-collection`,n.pubkey]})},[u,n?.pubkey,D?.currentCompanion]),W=a({mutationFn:async({itemId:e,action:t})=>{if(!n?.pubkey)throw Error(`You must be logged in to use items`);if(!D)throw Error(`Profile not found`);let r=await H();if(!r)throw Error(`No companion selected`);if(!F(r,t)){let e=A(r,t);throw Error(e??`This companion cannot use this item`)}let i=E(e);if(!i)throw Error(`Item not found in catalog`);let a=k(e,r.stage);if(!a.canUse)throw Error(a.reason??`This item cannot be used by this companion`);if(!i.effect)throw Error(`This item has no effect`);let o=r.stage===`egg`;if(o&&t===`medicine`&&!M(i.effect))throw Error(`This medicine has no effect on eggs`);if(o&&t===`clean`&&!P(i.effect))throw Error(`This item has no cleaning effect on eggs`);let s=Math.floor(Date.now()/1e3),l=C({stage:r.stage,state:r.state,stats:r.stats,lastDecayAt:r.lastDecayAt,now:s}).stats,d=r.stage===`egg`,f={},p={};if(d&&t===`medicine`){let e=N(l.health??0,i.effect.health??0);f.health=e.toString(),p.health=e-(l.health??0),f.hygiene=(l.hygiene??0).toString(),f.happiness=(l.happiness??0).toString(),f.hunger=`100`,f.energy=`100`}else if(d&&t===`clean`){let e=N(l.hygiene??0,i.effect.hygiene??0),t=N(l.happiness??0,i.effect.happiness??0);f.hygiene=e.toString(),p.hygiene=e-(l.hygiene??0),f.happiness=t.toString();let n=t-(l.happiness??0);n!==0&&(p.happiness=n),f.health=(l.health??0).toString(),f.hunger=`100`,f.energy=`100`}else{let e=O({...l},i.effect);f.hunger=j(e.hunger).toString(),p.hunger=(e.hunger??0)-(l.hunger??0),f.happiness=j(e.happiness).toString(),p.happiness=(e.happiness??0)-(l.happiness??0),f.energy=j(e.energy).toString(),p.energy=(e.energy??0)-(l.energy??0),f.hygiene=j(e.hygiene).toString(),p.hygiene=(e.hygiene??0)-(l.hygiene??0),f.health=j(e.health).toString(),p.health=(e.health??0)-(l.health??0)}let v=s.toString(),S=r.progressionState,I=r.allTags;(S===`incubating`||S===`evolving`)&&y(`interactions`,1,n?.pubkey,r.d);let L=r.event.content;if(S===`incubating`||S===`evolving`){let e=x(n?.pubkey,r.d);e&&e.length>0&&(L=m(r.event.content,e))}let R=b(r)??{},z=_(I,{...f,...R,last_interaction:v,last_decay_at:v}),B=await c({kind:h,content:L,tags:z,prev:r.event});U(B);let V=w[t];V&&r&&T(c,{ownerPubkey:r.event.pubkey,blobbiDTag:r.d,action:V,source:`companion`,itemId:e}),u.invalidateQueries({queryKey:[`blobbi-collection`,n.pubkey]});{let e=g(r.event.pubkey,r.d);u.invalidateQueries({queryKey:[`blobbi-interactions`,e]})}return{statsChanged:p}},onSuccess:(e,{itemId:t,action:r})=>{let i=E(t),a=I[r];o({title:`${a.label} successful!`,description:`Used ${i?.name??`item`} on your Blobbi.`}),S(r,n?.pubkey),V(t,!0)},onError:(e,{itemId:t})=>{o({title:`Failed to use item`,description:e.message,variant:`destructive`}),V(t,!1)}});return{useItem:(0,L.useCallback)(async(e,t)=>{if(z(e))return{success:!1,error:`Please wait before trying again`};try{return{success:!0,statsChanged:(await W.mutateAsync({itemId:e,action:t})).statsChanged}}catch(e){return{success:!1,error:e instanceof Error?e.message:`Unknown error`}}},[W,z]),canUseItems:(0,L.useMemo)(()=>!!n?.pubkey&&!!D?.currentCompanion,[n?.pubkey,D?.currentCompanion]),isUsingItem:W.isPending,isItemOnCooldown:z,clearItemCooldown:B}}function se(){let e=(0,L.useContext)(d),t=oe(),[,n]=(0,L.useState)(0);(0,L.useEffect)(()=>{if(e)return e.subscribe(()=>{n(e=>e+1)})},[e]);let r=(0,L.useCallback)(async(n,r)=>e?.registerRef.current?e.registerRef.current(n,r):t.canUseItems?t.useItem(n,r):{success:!1,error:`No companion selected. Please select a Blobbi as your companion first.`},[e,t]),i=(e?.canUseItemsRegisteredRef.current??!1)||t.canUseItems,a=(e?.isUsingItemRegisteredRef.current??!1)||t.isUsingItem;return(0,L.useMemo)(()=>({useItem:r,isUsingItem:a,canUseItems:i,isItemOnCooldown:t.isItemOnCooldown,clearItemCooldown:t.clearItemCooldown}),[r,a,i,t.isItemOnCooldown,t.clearItemCooldown])}function ce(e,t){let n=(0,L.useContext)(d),r=(0,L.useRef)(!1),i=(0,L.useRef)(e);i.current=e;let a=(0,L.useCallback)(async(e,t)=>i.current?i.current(e,t):{success:!1,error:`Item use function not available`},[]);(0,L.useEffect)(()=>{if(!n)return;let i=e!==null;n.registerRef.current=i?a:null,n.canUseItemsRegisteredRef.current=i,n.isUsingItemRegisteredRef.current=t,r.current!==i&&(r.current=i,n.notifyUpdate())},[n,e,a,t]),(0,L.useEffect)(()=>()=>{n&&(n.registerRef.current=null,n.canUseItemsRegisteredRef.current=!1,n.isUsingItemRegisteredRef.current=!1,n.notifyUpdate())},[n])}var Z={radius:85,buttonSize:44,arcSpread:140,arcCenter:270,staggerDelay:30};function le(e,t,n,r,i){if(r===1){let n=i.arcCenter*Math.PI/180;return{x:e+Math.cos(n)*i.radius,y:t+Math.sin(n)*i.radius}}let a=(i.arcCenter-i.arcSpread/2+i.arcSpread/(r-1)*n)*Math.PI/180;return{x:e+Math.cos(a)*i.radius,y:t+Math.sin(a)*i.radius}}function ue({isOpen:e,companionPosition:t,companionSize:n,actions:r,selectedAction:i,onActionClick:a,onClickOutside:o,isSleeping:s=!1}){if(!e)return null;let l=t.x+n/2,u=t.y+n/2;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`div`,{className:`fixed inset-0 pointer-events-auto`,style:{zIndex:10001},onClick:o,"aria-hidden":`true`}),r.map((e,t)=>{let n=le(l,u,t,r.length,Z),o=i===e.id,d=t*Z.staggerDelay,f=e.id===`sleep`,p=f&&s?`โ˜€๏ธ`:e.emoji,m=f&&s?`Wake up`:e.label;return(0,R.jsx)(`button`,{className:c(`fixed flex items-center justify-center rounded-full pointer-events-auto`,`shadow-lg transition-colors duration-200`,`focus:outline-none focus:ring-2 focus:ring-primary/50`,o?`bg-primary text-primary-foreground`:`bg-background/95 hover:bg-accent`,`hover:scale-110 active:scale-95`,`animate-in fade-in zoom-in-75`),style:{left:n.x-Z.buttonSize/2,top:n.y-Z.buttonSize/2,width:Z.buttonSize,height:Z.buttonSize,zIndex:10002,animationDelay:`${d}ms`,animationFillMode:`backwards`,transition:`transform 200ms, background-color 200ms, color 200ms`},onClick:t=>{t.stopPropagation(),a(e.id)},title:m,"aria-label":m,children:(0,R.jsx)(`span`,{className:`text-xl select-none`,role:`img`,"aria-hidden":`true`,children:p})},e.id)})]})}var Q={circleSize:56,emojiSize:`1.75rem`,fallingEmojiSize:`1.875rem`,itemSpacing:80,lineLength:100,lineWidth:2,slideAnimationDuration:350,staggerDelay:40,baseFallDuration:600,minFallDuration:150,baseFallDistance:500,defaultGroundOffset:40,badgeSize:20,landedItemSize:40,contactRadius:50,dragThreshold:5,dropRadius:80,failedUseCooldown:3e3,successUseCooldown:500},$={isDragging:!1,instanceId:null,currentX:0,currentY:0,isOverBlobbi:!1};function de({data:e,isBeingUsed:t=!1,dragState:n,onDragStart:r,onDragMove:i,onDragEnd:a,onCollect:o}){let{item:s,state:l}=e,u=(0,L.useRef)(null),d=(0,L.useRef)(!1),f=(0,L.useRef)(null),p=l===`falling`,m=l===`landed`,h=l===`dragging`,g=n.isDragging&&n.instanceId===e.instanceId,_=g?n.currentX:e.x,v=g?n.currentY:e.y,y=m&&!t&&!n.isDragging,b=(0,L.useCallback)(e=>{!m||t||(e.target.setPointerCapture(e.pointerId),u.current={x:e.clientX,y:e.clientY,pointerId:e.pointerId},d.current=!1)},[m,t]),x=(0,L.useCallback)(t=>{if(!u.current)return;let n=t.clientX-u.current.x,a=t.clientY-u.current.y,o=Math.sqrt(n*n+a*a);!d.current&&o>Q.dragThreshold&&(d.current=!0,r(e.instanceId,s,t.clientX,t.clientY)),d.current&&i(t.clientX,t.clientY)},[e.instanceId,s,r,i]),S=(0,L.useCallback)(t=>{if(!u.current)return;try{t.target.releasePointerCapture(t.pointerId)}catch{}let n=d.current;u.current=null,d.current=!1,n?a():o?.(e.instanceId,s)},[e.instanceId,s,o,a]),C=(0,L.useCallback)(e=>{try{e.target.releasePointerCapture(e.pointerId)}catch{}d.current&&a(),u.current=null,d.current=!1},[a]);return(0,R.jsx)(`div`,{ref:f,className:c(`fixed select-none touch-none`,`transition-transform`,!g&&`duration-100`,g&&`duration-0`,g&&n.isOverBlobbi&&`scale-125`,y&&`hover:scale-125 cursor-grab`,g&&`cursor-grabbing`,(p||t)&&`pointer-events-none`,(m||h)&&`pointer-events-auto`,t&&`animate-pulse`),style:{left:_,top:v,transform:`translate(-50%, -50%)`,zIndex:g?10006:p?10004:10003,filter:g?`drop-shadow(0 8px 12px rgba(0,0,0,0.35))`:m?`drop-shadow(0 2px 3px rgba(0,0,0,0.2))`:`drop-shadow(0 3px 6px rgba(0,0,0,0.25))`,opacity:t?.6:1},onPointerDown:b,onPointerMove:x,onPointerUp:S,onPointerCancel:C,role:y?`button`:void 0,"aria-label":y?`${s.name} on ground. Click or drag to Blobbi to use.`:void 0,children:(0,R.jsx)(`span`,{style:{fontSize:Q.fallingEmojiSize,transform:p?`rotate(-5deg)`:g?`rotate(5deg)`:`rotate(0deg)`,transition:g?`transform 50ms ease-out`:`transform 100ms ease-out`,display:`block`},role:`img`,"aria-hidden":`true`,children:s.emoji})})}function fe({isVisible:e,selectedAction:t,items:n,viewportHeight:r=window.innerHeight,groundOffset:i=Q.defaultGroundOffset,companionPosition:a,companionSize:o=108,onItemRelease:s,onItemLanded:l,onItemUse:u,onItemCollected:d,isItemOnCooldown:f}){let[p,m]=(0,L.useState)(`hidden`),[h,g]=(0,L.useState)(new Map),_=(0,L.useRef)(0),v=(0,L.useRef)(new Set),[,y]=(0,L.useState)(0),[b,x]=(0,L.useState)(new Map),[S,C]=(0,L.useState)($),w=(0,L.useRef)(null),T=(0,L.useRef)(!1),E=(0,L.useRef)(b);E.current=b;let D=(0,L.useRef)(new Set),O=(0,L.useRef)(new Map),k=(0,L.useCallback)(e=>{if(f)return f(e);let t=O.current.get(e);return t?Date.now()>=t?(O.current.delete(e),!1):!0:!1},[f]),A=(0,L.useCallback)((e,t)=>{let n=t?Q.successUseCooldown:Q.failedUseCooldown;O.current.set(e,Date.now()+n)},[]),j=(0,L.useRef)(l);j.current=l;let M=(0,L.useRef)(u);M.current=u;let N=(0,L.useRef)(d);N.current=d;let P=r-i-Q.landedItemSize/2,F=Q.lineLength+Q.circleSize,I=a?a.x+o/2:0,z=a?a.y+o/2:0,B=(0,L.useCallback)(e=>{let t=e/Q.baseFallDistance,n=Q.baseFallDuration*Math.sqrt(t);return Math.max(Q.minFallDuration,n)},[]),V=(0,L.useCallback)(()=>{if(T.current)return;T.current=!0;let e=()=>{let t=performance.now(),n=!1,r=E.current,i=[];for(let[e,a]of r)if(a.state===`falling`){n=!0;let r=t-a.fallStartTime,o=a.targetY-a.startY,s=B(o),c=Math.min(r/s,1),l=c<.8?(c/.8)**2*.9:.9+(c-.8)/.2*.1,u=a.startY+(a.targetY-a.startY)*l;if(c>=1){let t={...a,state:`landed`,y:a.targetY};i.push({id:e,data:t}),j.current?.({item:a.item,instanceId:a.instanceId,x:a.x,y:a.targetY})}else i.push({id:e,data:{...a,y:u}})}i.length>0&&x(e=>{let t=new Map(e);for(let{id:e,data:n}of i)t.set(e,n);return t}),n?w.current=requestAnimationFrame(e):(T.current=!1,w.current=null)};w.current=requestAnimationFrame(e)},[B]);(0,L.useEffect)(()=>()=>{w.current&&(cancelAnimationFrame(w.current),w.current=null,T.current=!1)},[]),(0,L.useEffect)(()=>{if(e&&t){if(p===`hidden`||p===`closing`){m(`opening`);let e=setTimeout(()=>{m(`open`)},Q.slideAnimationDuration);return()=>clearTimeout(e)}}else if(p===`open`||p===`opening`){m(`closing`);let e=setTimeout(()=>{m(`hidden`),g(new Map)},Q.slideAnimationDuration);return()=>clearTimeout(e)}},[e,t,p]);let H=(0,L.useCallback)(async(e,t,n)=>{if(k(e)||v.current.has(e))return;v.current=new Set(v.current).add(e),y(e=>e+1);let r=!1;try{let n=M.current;n?(await n(t)).success&&(r=!0,x(t=>{let n=new Map(t);return n.delete(e),n}),D.current.delete(e),g(e=>{let n=new Map(e),r=n.get(t.id)||0;return r>0&&n.set(t.id,r-1),n})):(r=!0,N.current?.(t),x(t=>{let n=new Map(t);return n.delete(e),n}),D.current.delete(e),g(e=>{let n=new Map(e),r=n.get(t.id)||0;return r>0&&n.set(t.id,r-1),n}))}finally{let t=new Set(v.current);t.delete(e),v.current=t,y(e=>e+1),A(e,r)}},[k,A]);(0,L.useEffect)(()=>{a&&(S.isDragging||b.forEach((e,t)=>{if(e.state!==`landed`||v.current.has(t))return;let n=I-e.x,r=z-e.y,i=Math.sqrt(n*n+r*r){let i=b.get(e);if(!i||i.state!==`landed`)return;x(t=>{let n=new Map(t),r=n.get(e);return r&&n.set(e,{...r,state:`dragging`,dragStartX:r.x,dragStartY:r.y}),n});let o=a?Math.sqrt((n-I)**2+(r-z)**2){if(!S.isDragging)return;let n=a?Math.sqrt((e-I)**2+(t-z)**2)({...r,currentX:e,currentY:t,isOverBlobbi:n}))},[S.isDragging,a,I,z]),G=(0,L.useCallback)(()=>{if(!S.isDragging||!S.instanceId){C($);return}let e=S.instanceId,t=b.get(e);if(!t){C($);return}let n=t.dragStartX??t.x,r=t.dragStartY??t.y;if(S.isOverBlobbi)x(t=>{let i=new Map(t),a=i.get(e);return a&&i.set(e,{...a,state:`landed`,x:n,y:r,dragStartX:void 0,dragStartY:void 0}),i}),H(e,t.item,`drag-drop`);else{let t=S.currentY;if(t{let i=new Map(r),a=i.get(e);return a&&i.set(e,{...a,state:`falling`,x:S.currentX,y:t,startY:t,targetY:P,fallStartTime:n,dragStartX:void 0,dragStartY:void 0}),i}),setTimeout(()=>{V()},0)}else x(t=>{let n=new Map(t),r=n.get(e);return r&&n.set(e,{...r,state:`landed`,x:S.currentX,y:P,dragStartX:void 0,dragStartY:void 0}),n})}C($)},[S,b,H,P,V]),q=(0,L.useCallback)((e,t)=>{let n=performance.now();_.current+=1;let r=`${e.id}-${n}-${_.current}`;g(t=>{let n=new Map(t),r=n.get(e.id)||0;return n.set(e.id,r+1),n});let i={instanceId:r,item:e,state:`falling`,x:t,y:F-Q.circleSize/2,startY:F-Q.circleSize/2,targetY:P,fallStartTime:n};x(e=>{let t=new Map(e);return t.set(r,i),t}),setTimeout(()=>{V()},0),s?.(e)},[F,P,s,V]),J=(0,L.useCallback)((e,t)=>{H(e,t,`click`)},[H]),Y=-((n.length-1)*Q.itemSpacing)/2,X=e=>window.innerWidth/2+Y+e*Q.itemSpacing,ee=n,te=p!==`hidden`||e&&t,ne=e&&t&&n.length===0;return(0,R.jsxs)(R.Fragment,{children:[ne&&(0,R.jsx)(`div`,{className:c(`fixed left-1/2 -translate-x-1/2 top-8 pointer-events-auto`,`transition-all duration-300`,p===`opening`||p===`open`?`opacity-100 translate-y-0`:`opacity-0 -translate-y-4`),style:{zIndex:10003},children:(0,R.jsx)(`div`,{className:`bg-background/95 backdrop-blur-sm rounded-2xl px-6 py-4 shadow-lg border`,children:(0,R.jsxs)(`p`,{className:`text-sm text-muted-foreground text-center`,children:[`No `,K(t)?.label.toLowerCase(),` items available`]})})}),te&&n.length>0&&(0,R.jsx)(`div`,{className:`fixed inset-x-0 top-0 flex justify-center pointer-events-none`,style:{zIndex:10003,transition:`transform ${Q.slideAnimationDuration}ms ease-out`,transform:`translateY(${(()=>{switch(p){case`hidden`:return-(Q.lineLength+Q.circleSize+40);case`opening`:return 0;case`closing`:return-(Q.lineLength+Q.circleSize+40);case`open`:return 0;default:return 0}})()}px)`},children:(0,R.jsx)(`div`,{className:`relative`,style:{height:Q.lineLength+Q.circleSize+20},children:ee.map((e,t)=>{let r=n.findIndex(t=>t.id===e.id),i=Y+r*Q.itemSpacing,a=t*Q.staggerDelay,o=X(r);return(0,R.jsxs)(`div`,{className:`absolute pointer-events-auto`,style:{left:`50%`,transform:`translateX(calc(-50% + ${i}px))`},children:[(0,R.jsx)(`div`,{className:`mx-auto`,style:{width:Q.lineWidth,height:Q.lineLength,background:`linear-gradient(to bottom, hsl(var(--muted-foreground) / 0.3), hsl(var(--muted-foreground) / 0.5))`,animation:p===`open`?`hanging-sway 3s ease-in-out ${a}ms infinite`:void 0,transformOrigin:`top center`}}),(0,R.jsx)(`button`,{className:c(`relative flex items-center justify-center rounded-full`,`bg-background/95 backdrop-blur-sm`,`shadow-lg border-2 border-muted/30`,`transition-all duration-200`,`focus:outline-none focus:ring-2 focus:ring-primary/50`,`hover:scale-110 hover:shadow-xl hover:border-primary/30 active:scale-95`,`cursor-pointer`),style:{width:Q.circleSize,height:Q.circleSize,marginLeft:Q.circleSize/2*-1+Q.lineWidth/2},onClick:()=>q(e,o),title:e.name,"aria-label":`${e.name}. Click to release.`,children:(0,R.jsx)(`span`,{className:`select-none`,style:{fontSize:Q.emojiSize},role:`img`,"aria-hidden":`true`,children:e.emoji})})]},e.id)})})}),S.isDragging&&S.isOverBlobbi&&a&&(0,R.jsx)(`div`,{className:`fixed rounded-full pointer-events-none animate-pulse`,style:{left:a.x-10,top:a.y-10,width:o+20,height:o+20,background:`radial-gradient(circle, hsl(var(--primary) / 0.3) 0%, transparent 70%)`,zIndex:10002}}),Array.from(b.values()).map(e=>(0,R.jsx)(de,{data:e,isBeingUsed:v.current.has(e.instanceId),dragState:S,onDragStart:U,onDragMove:W,onDragEnd:G,onCollect:J},`released-${e.instanceId}`)),(0,R.jsx)(`style`,{children:` @keyframes hanging-sway { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(1deg); } 75% { transform: rotate(-1deg); } } `})]})}export{re as a,Y as c,q as d,K as f,ce as i,J as l,W as m,ue as n,te as o,U as p,se as r,X as s,fe as t,G as u}; // @license-end