@wyxos/vibe 2.1.13 → 2.1.14

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.
Files changed (3) hide show
  1. package/lib/index.cjs +1 -1
  2. package/lib/index.js +754 -648
  3. package/package.json +1 -1
package/lib/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),vt={mode:"default",pageSize:20,backfillRequestDelayMs:2e3,enterStaggerMs:40,page:1,itemWidth:300,prefetchThresholdPx:200,gapX:16,gapY:16,headerHeight:0,footerHeight:0,overscanPx:600},Dt={key:0,"data-testid":"masonry-loader-spinner",class:"absolute inset-0 z-10 flex items-center justify-center"},Ot={key:1,class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},Yt={key:1,"data-testid":"masonry-loader-error",class:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-2 p-3"},$t=["src","width","height","alt"],Xt=["poster"],jt=["src"],it=e.defineComponent({__name:"MasonryLoader",props:{item:{},remove:{},loaderSlotFn:{},errorSlotFn:{},timeoutMs:{default:15e3}},emits:["success","error"],setup(a,{emit:p}){const i=a,s=p,f=e.defineComponent({name:"SlotRenderer",props:{slotFn:{type:Function,required:!1},slotProps:{type:Object,required:!0}},setup(y){return()=>{const b=y.slotFn;return b?b(y.slotProps):null}}}),w=e.ref(null),h=e.ref(!1),u=e.ref(!1),d=e.ref(!1),g=e.ref(0),k=e.ref(null);function F(){i.remove?.()}const T=e.computed(()=>{const y=i.item?.width,b=i.item?.height;return{aspectRatio:`${y} / ${b}`}}),A=e.computed(()=>i.item?.type==="image");let B=null,_=null;function P(){_!=null&&(window.clearTimeout(_),_=null)}function J(){P();const y=typeof i.timeoutMs=="number"&&Number.isFinite(i.timeoutMs)?i.timeoutMs:0;y<=0||(_=window.setTimeout(()=>{h.value&&(u.value||d.value||z(new Error("timeout")))},y))}function C(){h.value||(h.value=!0,u.value=!1,d.value=!1,J())}e.onMounted(()=>{if(typeof IntersectionObserver>"u"){C();return}B=new IntersectionObserver(y=>{for(const b of y)if(b.isIntersecting&&!((b.intersectionRatio??0)<.5)){C(),B?.disconnect(),B=null;return}},{threshold:[0,.5,1]}),w.value&&B.observe(w.value)}),e.onUnmounted(()=>{B?.disconnect(),B=null,P()});function R(){u.value||(u.value=!0,d.value=!1,k.value=null,P(),s("success",i.item))}function z(y){d.value||(u.value=!1,d.value=!0,k.value=y,P(),s("error",{item:i.item,error:y}))}function V(){h.value&&(u.value=!1,d.value=!1,k.value=null,g.value+=1,J())}return(y,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootEl",ref:w,class:"relative bg-slate-100",style:e.normalizeStyle(T.value)},[h.value&&!u.value&&!d.value?(e.openBlock(),e.createElementBlock("div",Dt,[i.loaderSlotFn?(e.openBlock(),e.createBlock(e.unref(f),{key:0,"slot-fn":i.loaderSlotFn,"slot-props":{item:i.item,remove:F}},null,8,["slot-fn","slot-props"])):(e.openBlock(),e.createElementBlock("svg",Ot,b[2]||(b[2]=[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"},null,-1),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"},null,-1)])))])):h.value&&d.value?(e.openBlock(),e.createElementBlock("div",Yt,[i.errorSlotFn?(e.openBlock(),e.createBlock(e.unref(f),{key:0,"slot-fn":i.errorSlotFn,"slot-props":{item:i.item,remove:F,error:k.value,retry:V}},null,8,["slot-fn","slot-props"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[b[3]||(b[3]=e.createElementVNode("p",{class:"text-center text-xs font-medium text-red-700"},"Failed to load",-1)),e.createElementVNode("button",{type:"button","data-testid":"masonry-loader-retry",class:"inline-flex items-center rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-700",onClick:V}," Retry ")],64))])):e.createCommentVNode("",!0),h.value&&A.value&&!d.value?(e.openBlock(),e.createElementBlock("img",{key:i.item.id+":img:"+g.value,class:e.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",u.value?"opacity-100":"opacity-0"]),src:i.item.preview,width:i.item.width,height:i.item.height,loading:"lazy",alt:i.item.id,onLoad:R,onError:b[0]||(b[0]=H=>z(H))},null,42,$t)):h.value&&!d.value?(e.openBlock(),e.createElementBlock("video",{key:i.item.id+":vid:"+g.value,class:e.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",u.value?"opacity-100":"opacity-0"]),poster:i.item.preview,controls:"",preload:"metadata",onLoadedmetadata:R,onError:b[1]||(b[1]=H=>z(H))},[e.createElementVNode("source",{src:i.item.original,type:"video/mp4"},null,8,jt)],42,Xt)):e.createCommentVNode("",!0)],4))}}),ht=Symbol("masonryItemRegistry");function Wt(a,p){return!a||a<=0||!p||p<=0?1:Math.max(1,Math.floor(a/p))}function Gt(a,p,i,s=0){if(!a||a<=0||!p||p<=0)return i;const f=typeof s=="number"&&s>0?s:0,w=Math.max(0,p-1)*f,h=a-w;return!h||h<=0?i:h/p}function Ut(a,p){const i=a?.width,s=a?.height;return typeof i=="number"&&typeof s=="number"&&i>0&&s>0?s/i*p:p}function gt(a){return Number.isFinite(a)&&a>0?Math.floor(a):1}function Ne(a){return Number.isFinite(a)&&a>0?Math.floor(a):0}function Kt(a){async function p(s){const f=Ne(s);if(f<=0)return;a.stats.value={...a.stats.value,cooldownMsTotal:f,cooldownMsRemaining:f};const w=Date.now(),h=100;await new Promise(u=>{const d=setInterval(()=>{const g=Date.now()-w,k=Math.max(0,f-g);a.stats.value={...a.stats.value,cooldownMsTotal:f,cooldownMsRemaining:k},k<=0&&(clearInterval(d),u())},h)})}async function i(s){const f=gt(a.getPageSize()),w=a.isEnabled(),h=Ne(a.getRequestDelayMs()),u=[];let d=0;a.buffer.value.length&&(d=a.buffer.value.length,u.push(...a.buffer.value),a.buffer.value=[]),a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,cooldownMsTotal:h,cooldownMsRemaining:0,progress:{collected:0,target:0},pageSize:f,bufferSize:0};const g=[];let k=s,F=0,T=!1;for(;u.length<f&&k!=null;){const _=k;T&&(a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!0,isRequestInFlight:!0,requestPage:_,progress:{collected:Math.min(u.length,f),target:f},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:f});const P=await a.getContent(_);g.push(_),T&&(a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null}),F+=P.items.length,a.markEnterFromLeft(P.items),u.push(...P.items),k=P.nextPage,!T&&u.length<f&&k!=null?(T=!0,a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null,progress:{collected:Math.min(u.length,f),target:f},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:f}):T&&(a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!0,progress:{collected:Math.min(u.length,f),target:f}}),T&&u.length<f&&k!=null&&await p(h)}const A=u.slice(0,f),B=u.slice(f);return a.buffer.value=B,a.stats.value={...a.stats.value,enabled:w,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:f,bufferSize:B.length,lastBatch:{startPage:s,pages:g,usedFromBuffer:d,fetchedFromNetwork:F,collectedTotal:u.length,emitted:A.length,carried:B.length},totals:{pagesFetched:a.stats.value.totals.pagesFetched+g.length,itemsFetchedFromNetwork:a.stats.value.totals.itemsFetchedFromNetwork+F}},{batchItems:A,pages:g,nextPage:k}}return{loadBackfillBatch:i}}function Jt(a){const p=a.columnCount,i=a.columnWidth,s=a.gapX,f=a.gapY,w=a.headerHeight,h=a.footerHeight,u=a.bucketPx,d=Array.from({length:p},()=>0),g=new Array(a.items.length),k=new Array(a.items.length),F=new Map,T=new Map;let A=0;for(let B=0;B<a.items.length;B+=1){const _=a.items[B];_?.id&&T.set(_.id,B);let P=0;for(let y=1;y<d.length;y+=1)d[y]<d[P]&&(P=y);const J=P*(i+s),C=d[P],R=Ut(_,i)+w+h;g[B]={x:J,y:C},k[B]=R,d[P]=C+R+f,A=Math.max(A,C+R);const z=Math.floor(C/u),V=Math.floor((C+R)/u);for(let y=z;y<=V;y+=1){const b=F.get(y);b?b.push(B):F.set(y,[B])}}return{positions:g,heights:k,buckets:F,contentHeight:A,indexById:T}}function Qt(a){const p=a.itemCount;if(!p)return[];if(a.viewportHeight<=0)return Array.from({length:p},(d,g)=>g);const i=Math.max(0,a.scrollTop-a.overscanPx),s=a.scrollTop+a.viewportHeight+a.overscanPx,f=Math.floor(i/a.bucketPx),w=Math.floor(s/a.bucketPx),h=new Set;for(let d=f;d<=w;d+=1){const g=a.buckets.get(d);if(g)for(const k of g)h.add(k)}const u=Array.from(h);return u.sort((d,g)=>d-g),u}const Zt={class:"hidden"},en={key:0,class:"flex h-full items-center justify-center"},tn={key:1,class:"text-sm font-medium text-red-700"},nn={class:"relative"},on={key:0,class:"pointer-events-auto absolute inset-0"},ln={class:"relative"},an={key:0,class:"pointer-events-auto absolute inset-0"},rn={class:"mt-4 pb-2 text-center text-xs text-slate-600"},sn={key:0,class:"inline-flex items-center justify-center gap-2"},un={key:1},cn={key:2},ut=100,fn=200,ct=600,ft=300,dt=600,mt=600,dn=400,mn=5,vn=1e3,pt=e.defineComponent({inheritAttrs:!1,__name:"Masonry",props:e.mergeDefaults({getContent:{},mode:{},pageSize:{},backfillRequestDelayMs:{},enterStaggerMs:{},items:{},page:{},restoredPages:{},itemWidth:{},prefetchThresholdPx:{},gapX:{},gapY:{},headerHeight:{},footerHeight:{},overscanPx:{}},vt),emits:["update:items","preloaded","failures"],setup(a,{expose:p,emit:i}){const s=a,f=i,w=e.useAttrs(),h=e.defineComponent({name:"SlotRenderer",props:{slotFn:{type:Function,required:!1},slotProps:{type:Object,required:!0}},setup(t){return()=>{const n=t.slotFn;return n?n(t.slotProps):null}}}),u=e.shallowRef(null);e.provide(ht,t=>{u.value||(u.value=t)});const d=[],g=[];let k=null,F=null;function T(){if(!d.length)return;const t=d.splice(0,d.length);f("preloaded",t)}function A(){if(!g.length)return;const t=g.splice(0,g.length);f("failures",t)}function B(){k||(k=setTimeout(()=>{k=null,T()},ut))}function _(){F||(F=setTimeout(()=>{F=null,A()},ut))}function P(t){u.value?.onPreloaded?.(t),d.push(t),B()}function J(t){u.value?.onFailed?.(t),g.push(t),_()}e.onMounted(()=>{if(!u.value)throw new Error("[Masonry] Missing <MasonryItem> definition. Add <MasonryItem> as a child of <Masonry>.")});const C=e.computed(()=>{const{class:t,...n}=w;return n}),R=e.ref(null),z=e.ref(0),V=e.ref(0),y=e.ref(0);let b;const H=e.computed(()=>s.gapX),Te=e.computed(()=>s.gapY);function _e(t){if(!t)return 0;const n=Math.max(0,H.value);return Math.max(0,t.clientWidth-n)}const Q=e.computed(()=>s.headerHeight),Z=e.computed(()=>s.footerHeight),pe=e.computed(()=>u.value?.header),Re=e.computed(()=>u.value?.loader),ye=e.computed(()=>u.value?.footer),we=e.computed(()=>u.value?.overlay),Ae=e.computed(()=>u.value?.error),Ve=e.computed(()=>!!pe.value),Ce=e.computed(()=>!!ye.value),ze=e.computed(()=>!!we.value),He=e.computed(()=>{if(Q.value>0)return{height:`${Q.value}px`}}),Le=e.computed(()=>{if(Z.value>0)return{height:`${Z.value}px`}}),le=e.ref([]),ke=e.ref([]),qe=e.ref(new Map),De=e.ref(0),ie=e.ref(new Map);function wt(t){const n=typeof t=="number"&&Number.isFinite(t)?t:0;return y.value+V.value+Math.max(0,n)}const Y=e.ref(new Set),$=e.ref(new Set),ue=new Set,ae=e.ref(new Map);function kt(t){return Number.isFinite(t)?Math.max(0,Math.min(250,t)):0}function xt(t){if(!$.value.has(t))return;const n=ae.value.get(t)??0;if(!(n<=0))return`${n}ms`}const ce=e.ref(new Map),q=e.ref(new Set),D=e.ref([]);function bt(t){const n=ce.value.get(t);return n||{dx:0,dy:0}}function St(t){if($.value.has(t))return`transform ${dt}ms ease-out`;if(q.value.has(t))return`transform ${ft}ms ease-out`}function Bt(t){const o=m.value[t]?.id,l=le.value[t]??{x:0,y:0},r=ke.value[t]??0,c=r>0?r:se.value,v=l.x,S=o&&Y.value.has(o)?wt(c):l.y,E=o?bt(o):{dx:0,dy:0};return`translate3d(${v+E.dx}px,${S+E.dy}px,0)`}function ee(t){(typeof requestAnimationFrame=="function"?requestAnimationFrame:o=>setTimeout(()=>o(0),0))(()=>t())}function Mt(t){ee(()=>ee(t))}const Oe=new Set;function Ye(t){return typeof t=="number"&&Number.isFinite(t)&&t>0}function fe(t){if(!Array.isArray(t)||t.length===0)return;const n=new Set(Y.value);let o=!1;for(const l of t){const r=l?.id;if(r){if(!Oe.has(r)){const c=l?.width,v=l?.height;(!Ye(c)||!Ye(v))&&(Oe.add(r),console.warn(`[Masonry] Item "${r}" has invalid dimensions (width=${String(c)}, height=${String(v)}); layout expects { id, width, height }.`))}n.has(r)||(n.add(r),o=!0)}}o&&(Y.value=n)}function $e(){const t=new Map;for(const n of Ie.value){const l=m.value[n]?.id;if(!l)continue;const r=le.value[n];r&&t.set(l,{x:r.x,y:r.y})}return t}function Xe(t,n){if(!t.size)return;const o=new Map,l=[];for(const[c,v]of t.entries()){if(n?.has(c))continue;const S=ie.value.get(c);if(S==null)continue;const E=le.value[S];if(!E)continue;const M=v.x-E.x,x=v.y-E.y;(M||x)&&(o.set(c,{dx:M,dy:x}),l.push(c))}if(!o.size)return;ce.value=o;const r=new Set(q.value);for(const c of l)r.delete(c);q.value=r,ee(()=>{q.value=new Set([...q.value,...l]),ee(()=>{ce.value=new Map})}),setTimeout(()=>{const c=new Set(q.value);for(const v of l)c.delete(v);q.value=c},ft)}const X=e.ref(!0),j=e.ref(!1),te=e.ref("");let N=0,xe=0,be=0;function je(t){return t instanceof Error&&t.name==="AbortError"}function We(){const t=new Error("aborted");return t.name="AbortError",t}function Et(t){return new Promise(n=>setTimeout(n,t))}async function Ge(t,n){let o=0;for(;;){if(n!==N)throw We();try{return await s.getContent(t)}catch(l){if(n!==N)throw We();if(o>=mn)throw l;o+=1,await Et(o*vn)}}}const L=e.ref([]),Ue=e.ref([]),Se=e.ref([]),I=e.ref(s.page),de=e.ref([]);let W=null,G=null,me=0;function It(t){let n=-1;for(const o of t){const l=o?.originalIndex;re(l)&&l>n&&(n=l)}me=n+1}function ne(t){for(const n of t)!n||typeof n!="object"||n.id&&n.originalIndex==null&&(n.originalIndex=me,me+=1)}const U=new Map,K=[];function re(t){return typeof t=="number"&&Number.isFinite(t)}function Ft(t,n){if(!n.length)return t;const o=new Set;for(const v of t){const S=v?.id;S&&o.add(S)}const l=[];for(const v of n){const S=v?.id;S&&(o.has(S)||(l.push(v),o.add(S)))}if(!l.length)return t;const r=l.slice().sort((v,S)=>{const E=re(v.originalIndex)?v.originalIndex:Number.POSITIVE_INFINITY,M=re(S.originalIndex)?S.originalIndex:Number.POSITIVE_INFINITY;return E-M}),c=t.slice();for(const v of r){const S=v.originalIndex;if(!re(S)){c.push(v);continue}let E=0,M=c.length;for(;E<M;){const x=E+M>>1,O=c[x]?.originalIndex;(re(O)?O:Number.POSITIVE_INFINITY)<=S?E=x+1:M=x}c.splice(E,0,v)}return c}async function Ke(t){if(!t.length)return;fe(t);const n=$e();m.value=Ft(m.value,t),await e.nextTick(),Xe(n)}async function Pt(t){const o=(Array.isArray(t)?t:[t]).map(Ee).filter(Boolean);if(!o.length)return;const l=[];for(const r of o){const c=U.get(r);c&&l.push(c)}if(l.length){await Ke(l);for(const r of l)r?.id&&U.delete(r.id)}}async function Nt(){const t=K.pop();if(!t?.length)return;const n=[];for(const o of t){const l=U.get(o);l&&n.push(l)}if(n.length){await Ke(n);for(const o of n)o?.id&&U.delete(o.id)}}function Tt(t){const o=(Array.isArray(t)?t:[t]).map(Ee).filter(Boolean);if(!o.length)return;const l=new Set(o);for(const r of l)U.delete(r);for(let r=K.length-1;r>=0;r-=1){const v=K[r].filter(S=>!l.has(S));v.length?K[r]=v:K.splice(r,1)}}const Be=e.shallowRef({enabled:!1,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:2e3,pageSize:20,bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}),Je=Kt({getContent:t=>Ge(t,N),markEnterFromLeft:fe,buffer:de,stats:Be,isEnabled:()=>s.mode==="backfill",getPageSize:()=>s.pageSize,getRequestDelayMs:()=>s.backfillRequestDelayMs}),ve=e.computed(()=>s.items!==void 0);e.watch(()=>s.items,t=>{ve.value&&(Se.value=Array.isArray(t)?t:[])},{immediate:!0});const m=e.computed({get(){return ve.value?Se.value:Ue.value},set(t){ve.value?(Se.value=t,f("update:items",t)):Ue.value=t}}),oe=e.ref(!1),Me=e.ref(!1);async function Qe(t){const n=await Ge(t,N);return ne(n.items),fe(n.items),{items:n.items,nextPage:n.nextPage}}function Ee(t){return t?typeof t=="string"?t:t?.id:null}async function Ze(t){const o=(Array.isArray(t)?t:[t]).map(Ee).filter(Boolean);if(!o.length)return;const l=new Set(o),r=[];for(const M of l){const x=ie.value.get(M);if(x==null)continue;const O=m.value[x];O&&(U.set(M,O),r.push(M))}r.length&&K.push(r);const c=$e(),v=se.value,S=y.value+V.value,E=[];for(const M of l){const x=ie.value.get(M);if(x==null)continue;const O=m.value[x];if(!O)continue;const ge=le.value[x]??{x:0,y:0},st=ke.value[x]??v,qt=Math.max(ge.y,S);E.push({id:M,item:O,fromX:ge.x,fromY:ge.y,toY:qt+Math.max(0,st),width:v,height:st,leaving:!0})}if(E.length&&(D.value=[...D.value,...E]),m.value=m.value.filter(M=>{const x=M?.id;return!x||!l.has(x)}),await e.nextTick(),Xe(c,l),E.length){const M=new Set(E.map(x=>x.id));ee(()=>{D.value=D.value.map(x=>M.has(x.id)?{...x,leaving:!1}:x),setTimeout(()=>{D.value=D.value.filter(x=>!M.has(x.id))},mt)})}}async function he(t){return Ze(t)}function _t(){N+=1,W=null,G=null,X.value=!1,j.value=!1}p({remove:Ze,restore:Pt,undo:Nt,forget:Tt,loadNextPage:tt,cancel:_t,get pagesLoaded(){return L.value},set pagesLoaded(t){L.value=t},get nextPage(){return I.value},set nextPage(t){I.value=t},get isLoading(){return X.value||j.value},get hasReachedEnd(){return s.mode!=="backfill"?I.value==null:I.value==null&&de.value.length===0},get backfillStats(){return Be.value}});function et(){const t=Jt({items:m.value,columnCount:Pe.value,columnWidth:se.value,gapX:H.value,gapY:Te.value,headerHeight:Q.value,footerHeight:Z.value,bucketPx:ct});le.value=t.positions,ke.value=t.heights,qe.value=t.buckets,De.value=t.contentHeight,ie.value=t.indexById}const Rt=e.computed(()=>Math.max(De.value,V.value)+fn),Ie=e.computed(()=>Qt({itemCount:m.value.length,viewportHeight:V.value,scrollTop:y.value,overscanPx:s.overscanPx,bucketPx:ct,buckets:qe.value}));e.watch(Ie,t=>{if(!t?.length)return;if(oe.value&&!Me.value){const l=[];for(const r of t){const c=m.value[r];c&&l.push(c)}l.length&&fe(l),Me.value=!0}const n=[];for(const l of t){const r=m.value[l]?.id;r&&Y.value.has(r)&&(ue.has(r)||(ue.add(r),n.push(r)))}if(!n.length)return;const o=n.length>1?kt(s.enterStaggerMs):0;if(o>0){const l=new Map(ae.value);for(let r=0;r<n.length;r+=1){const c=n[r],v=Math.min(r*o,dn);l.set(c,v)}ae.value=l}ee(()=>{const l=new Set($.value);for(const r of n)l.add(r);$.value=l}),Mt(()=>{const l=new Set(Y.value);for(const r of n)l.delete(r);Y.value=l,setTimeout(()=>{const r=new Set($.value),c=new Map(ae.value);for(const v of n)r.delete(v),ue.delete(v),c.delete(v);$.value=r,ae.value=c},dt)})},{flush:"post"});async function tt(){if(W)return W;if(X.value||j.value||s.mode!=="backfill"&&I.value==null||s.mode==="backfill"&&I.value==null&&de.value.length===0)return;const t=N;let n=null;return n=(async()=>{try{if(j.value=!0,te.value="",s.mode==="backfill"){const r=await Je.loadBackfillBatch(I.value);if(t!==N)return;r.pages.length&&(L.value=[...L.value,...r.pages]),ne(r.batchItems),m.value=[...m.value,...r.batchItems],I.value=r.nextPage;return}const o=I.value;if(o==null)return;const l=await Qe(o);if(t!==N)return;L.value=[...L.value,o],ne(l.items),m.value=[...m.value,...l.items],I.value=l.nextPage}catch(o){if(t!==N||je(o))return;te.value=o instanceof Error?o.message:String(o)}finally{t===N&&(j.value=!1),W===n&&(W=null)}})(),W=n,n}function At(){const t=R.value;if(!t)return;const n=t.scrollTop,o=t.clientHeight,l=t.scrollHeight;y.value=n,V.value=o;const r=xe,c=be,v=c>0&&l<c;if(xe=n,be=l,v&&n<=r)return;l-(n+o)<=s.prefetchThresholdPx&&tt()}function nt(){return R.value}function ot(t){z.value=_e(t),V.value=t.clientHeight}function Vt(){typeof ResizeObserver>"u"||(b=new ResizeObserver(()=>{const t=nt();t&&ot(t)}))}function Ct(){return{enabled:s.mode==="backfill",isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:Ne(s.backfillRequestDelayMs),pageSize:gt(s.pageSize),bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}}function lt(){N+=1,W=null,G=null,xe=0,be=0,me=0,U.clear(),K.length=0,Y.value=new Set,$.value=new Set,ue.clear(),ce.value=new Map,q.value=new Set,D.value=[],L.value=[],I.value=null,de.value=[],Be.value=Ct(),X.value=!0,j.value=!1,te.value="",Me.value=!1}function at(t){lt(),m.value=[],I.value=t}function zt(t){const n=Array.isArray(t)?t:[t],o=[],l=new Set;for(const r of n){if(r==null)continue;const c=typeof r=="string"?`s:${r}`:`n:${String(r)}`;l.has(c)||(l.add(c),o.push(r))}return o}function Fe(t){lt(),L.value=t?zt(t):[],I.value=s.page,X.value=!1,It(m.value),ne(m.value)}async function rt(t){if(G)return G;const n=N;let o=null;return o=(async()=>{try{if(s.mode==="backfill"){const l=await Je.loadBackfillBatch(t);if(n!==N)return;L.value=l.pages.length?l.pages:[t],ne(l.batchItems),m.value=l.batchItems,I.value=l.nextPage}else{const l=await Qe(t);if(n!==N)return;L.value=[t],ne(l.items),m.value=l.items,I.value=l.nextPage}}catch(l){if(n!==N||je(l))return;te.value=l instanceof Error?l.message:String(l)}finally{n===N&&(X.value=!1),G===o&&(G=null)}})(),G=o,o}function Ht(){const t=nt();t&&(ot(t),y.value=t.scrollTop,b?.observe(t))}e.onMounted(async()=>{if(Vt(),Ht(),s.restoredPages!=null){oe.value=!0,Fe(s.restoredPages);return}if(ve.value&&m.value.length>0){oe.value=!0,Fe();return}oe.value=!1,at(s.page),await rt(s.page)}),e.onUnmounted(()=>{b?.disconnect(),k&&(clearTimeout(k),k=null),F&&(clearTimeout(F),F=null),T(),A()}),e.watch(()=>s.page,async t=>{if(oe.value){I.value=t;return}at(t),await rt(t)}),e.watch(()=>s.restoredPages,t=>{t&&(oe.value=!0,Fe(t))}),e.watch(H,()=>{const t=R.value;t&&(z.value=_e(t))},{immediate:!1});const Pe=e.computed(()=>Wt(z.value,s.itemWidth)),se=e.computed(()=>Gt(z.value,Pe.value,s.itemWidth,H.value));e.watch([Pe,se,H,Te,Q,Z],()=>{et()},{immediate:!0}),e.watch(()=>[m.value,m.value.length],()=>et(),{immediate:!0});const Lt=e.computed(()=>["mt-8 flex min-h-0 flex-1 flex-col rounded-2xl border border-slate-200/70 bg-white/70 p-5 shadow-sm backdrop-blur",w.class]);return(t,n)=>(e.openBlock(),e.createElementBlock("section",e.mergeProps(C.value,{class:Lt.value}),[e.createElementVNode("div",Zt,[e.renderSlot(t.$slots,"default")]),e.createElementVNode("div",{ref_key:"scrollViewportRef",ref:R,"data-testid":"items-scroll-container",class:"mt-4 min-h-0 flex-1 overflow-auto",style:e.normalizeStyle({paddingRight:H.value+"px"}),onScroll:At},[X.value?(e.openBlock(),e.createElementBlock("div",en,n[0]||(n[0]=[e.createElementVNode("div",{class:"inline-flex items-center gap-3 text-sm text-slate-600"},[e.createElementVNode("svg",{class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})]),e.createElementVNode("span",null,"Loading…")],-1)]))):te.value?(e.openBlock(),e.createElementBlock("p",tn,"Error: "+e.toDisplayString(te.value),1)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"relative",style:e.normalizeStyle({height:Rt.value+"px"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ie.value,o=>(e.openBlock(),e.createElementBlock("article",{key:m.value[o].id,"data-testid":"item-card",class:"absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:e.normalizeStyle({width:se.value+"px",transition:St(m.value[o].id),transitionDelay:xt(m.value[o].id),transform:Bt(o)})},[Ve.value||Q.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:e.normalizeStyle(He.value)},[e.createVNode(e.unref(h),{"slot-fn":pe.value,"slot-props":{item:m.value[o],remove:()=>he(m.value[o])}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0),e.createElementVNode("div",nn,[e.createVNode(it,{item:m.value[o],remove:()=>he(m.value[o]),"loader-slot-fn":Re.value,"error-slot-fn":Ae.value,onSuccess:P,onError:J},null,8,["item","remove","loader-slot-fn","error-slot-fn"]),ze.value?(e.openBlock(),e.createElementBlock("div",on,[e.createVNode(e.unref(h),{"slot-fn":we.value,"slot-props":{item:m.value[o],remove:()=>he(m.value[o])}},null,8,["slot-fn","slot-props"])])):e.createCommentVNode("",!0)]),Ce.value||Z.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:e.normalizeStyle(Le.value)},[e.createVNode(e.unref(h),{"slot-fn":ye.value,"slot-props":{item:m.value[o],remove:()=>he(m.value[o])}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0)],4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,o=>(e.openBlock(),e.createElementBlock("article",{key:o.id+":leaving","data-testid":"item-card-leaving",class:"pointer-events-none absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:e.normalizeStyle({width:o.width+"px",transition:"transform "+mt+"ms ease-out",transform:o.leaving?"translate3d("+o.fromX+"px,"+o.fromY+"px,0)":"translate3d("+o.fromX+"px,"+o.toY+"px,0)"})},[Ve.value||Q.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:e.normalizeStyle(He.value)},[e.createVNode(e.unref(h),{"slot-fn":pe.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0),e.createElementVNode("div",ln,[e.createVNode(it,{item:o.item,remove:()=>{},"loader-slot-fn":Re.value,"error-slot-fn":Ae.value},null,8,["item","loader-slot-fn","error-slot-fn"]),ze.value?(e.openBlock(),e.createElementBlock("div",an,[e.createVNode(e.unref(h),{"slot-fn":we.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])])):e.createCommentVNode("",!0)]),Ce.value||Z.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:e.normalizeStyle(Le.value)},[e.createVNode(e.unref(h),{"slot-fn":ye.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0)],4))),128))],4)),e.createElementVNode("div",rn,[j.value?(e.openBlock(),e.createElementBlock("span",sn,n[1]||(n[1]=[e.createElementVNode("svg",{class:"h-4 w-4 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})],-1),e.createElementVNode("span",null,"Loading more…",-1)]))):I.value==null?(e.openBlock(),e.createElementBlock("span",un,"End of list")):(e.openBlock(),e.createElementBlock("span",cn,"Scroll to load page "+e.toDisplayString(I.value),1))])],36)],16))}}),yt=e.defineComponent({name:"MasonryItem",setup(a,{slots:p,attrs:i}){const s=e.inject(ht,null);if(!s)return()=>null;const f=i.onPreloaded,w=i.onFailed,h=p.overlay,u=p.default;return s({header:p.header,loader:p.loader,overlay:h??u,error:p.error,footer:p.footer,onPreloaded:typeof f=="function"?f:Array.isArray(f)?d=>{for(const g of f)typeof g=="function"&&g(d)}:void 0,onFailed:typeof w=="function"?w:Array.isArray(w)?d=>{for(const g of w)typeof g=="function"&&g(d)}:void 0}),()=>null}}),hn={install(a){a.component("Masonry",pt),a.component("MasonryItem",yt)}};exports.Masonry=pt;exports.MasonryItem=yt;exports.VibePlugin=hn;exports.masonryDefaults=vt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),vt={mode:"default",pageSize:20,backfillRequestDelayMs:2e3,enterStaggerMs:40,page:1,itemWidth:300,prefetchThresholdPx:200,gapX:16,gapY:16,headerHeight:0,footerHeight:0,overscanPx:600},Dt={key:0,"data-testid":"masonry-loader-spinner",class:"absolute inset-0 z-10 flex items-center justify-center"},$t={key:1,class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},Ot={key:1,"data-testid":"masonry-loader-error",class:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-2 p-3"},Yt=["src","width","height","alt"],jt=["poster"],Xt=["src"],Ut={key:4,class:"pointer-events-none absolute inset-x-0 bottom-0 z-20 p-2 opacity-0 transition-opacity duration-200 group-hover:pointer-events-auto group-hover:opacity-100"},Wt={class:"flex items-center gap-2 rounded-lg border border-slate-200/70 bg-white/90 px-2 py-2 backdrop-blur"},Gt=["aria-label"],Kt=["max","value"],Jt=["value"],it=e.defineComponent({__name:"MasonryLoader",props:{item:{},remove:{},loaderSlotFn:{},errorSlotFn:{},timeoutMs:{default:15e3}},emits:["success","error"],setup(a,{emit:w}){const u=a,s=w,d=e.defineComponent({name:"SlotRenderer",props:{slotFn:{type:Function,required:!1},slotProps:{type:Object,required:!0}},setup(i){return()=>{const y=i.slotFn;return y?y(i.slotProps):null}}}),b=e.ref(null),h=e.ref(null),c=e.ref(!1),v=e.ref(!1),m=e.ref(!1),k=e.ref(0),E=e.ref(null),P=e.computed(()=>u.item?.type==="video"),A=e.ref(!1),F=e.ref(!1),C=e.ref(0),V=e.ref(0),X=e.ref(.6);function D(){u.remove?.()}const z=e.computed(()=>{const i=u.item?.width,y=u.item?.height;return{aspectRatio:`${i} / ${y}`}}),U=e.computed(()=>u.item?.type==="image");let R=null,M=null,H=null;function L(){H!=null&&(window.clearTimeout(H),H=null)}function fe(){L();const i=typeof u.timeoutMs=="number"&&Number.isFinite(u.timeoutMs)?u.timeoutMs:0;i<=0||(H=window.setTimeout(()=>{c.value&&(v.value||m.value||ae(new Error("timeout")))},i))}function de(){c.value||(c.value=!0,v.value=!1,m.value=!1,fe())}function $(i){C.value=Number.isFinite(i.duration)?i.duration:0,V.value=Number.isFinite(i.currentTime)?i.currentTime:0,X.value=Number.isFinite(i.volume)?i.volume:X.value}async function Y(){if(!P.value||!c.value||!v.value||!A.value||F.value)return;const i=h.value;if(i)try{i.muted=!0,await i.play()}catch{}}function me(){const i=h.value;i&&(i.paused||i.pause())}function ke(){const i=h.value;if(i){if(i.paused){F.value=!1,i.play();return}F.value=!0,i.pause()}}function ve(i){const y=h.value;if(!y)return;const _=i.target?.value,q=_==null?NaN:Number(_);Number.isFinite(q)&&(y.currentTime=Math.max(0,Math.min(q,Number.isFinite(y.duration)?y.duration:q)),$(y))}function he(i){const y=h.value;if(!y)return;const _=i.target?.value,q=_==null?NaN:Number(_);if(!Number.isFinite(q))return;const j=Math.max(0,Math.min(1,q));y.volume=j,y.muted=j===0,X.value=j}e.onMounted(()=>{if(typeof IntersectionObserver>"u"){de();return}if(R=new IntersectionObserver(i=>{for(const y of i)if(y.isIntersecting&&!((y.intersectionRatio??0)<.5)){de(),R?.disconnect(),R=null;return}},{threshold:[0,.5,1]}),b.value&&R.observe(b.value),P.value&&b.value){const i=b.value.closest('[data-testid="items-scroll-container"]');M=new IntersectionObserver(y=>{for(const _ of y){const q=_.intersectionRatio??0,j=!!_.isIntersecting&&q>=.5;A.value=j,j?Y():me()}},{root:i??void 0,threshold:[0,.25,.5,.75,1]}),M.observe(b.value)}}),e.onUnmounted(()=>{R?.disconnect(),R=null,M?.disconnect(),M=null,L()});function pe(){v.value||(v.value=!0,m.value=!1,E.value=null,L(),s("success",u.item))}function ae(i){m.value||(v.value=!1,m.value=!0,E.value=i,L(),s("error",{item:u.item,error:i}))}function ge(){c.value&&(v.value=!1,m.value=!1,E.value=null,k.value+=1,fe())}function xe(){pe();const i=h.value;i&&$(i),Y()}function re(){const i=h.value;i&&$(i)}return(i,y)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootEl",ref:b,class:"group relative bg-slate-100",style:e.normalizeStyle(z.value)},[c.value&&!v.value&&!m.value?(e.openBlock(),e.createElementBlock("div",Dt,[u.loaderSlotFn?(e.openBlock(),e.createBlock(e.unref(d),{key:0,"slot-fn":u.loaderSlotFn,"slot-props":{item:u.item,remove:D}},null,8,["slot-fn","slot-props"])):(e.openBlock(),e.createElementBlock("svg",$t,y[2]||(y[2]=[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"},null,-1),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"},null,-1)])))])):c.value&&m.value?(e.openBlock(),e.createElementBlock("div",Ot,[u.errorSlotFn?(e.openBlock(),e.createBlock(e.unref(d),{key:0,"slot-fn":u.errorSlotFn,"slot-props":{item:u.item,remove:D,error:E.value,retry:ge}},null,8,["slot-fn","slot-props"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[y[3]||(y[3]=e.createElementVNode("p",{class:"text-center text-xs font-medium text-red-700"},"Failed to load",-1)),e.createElementVNode("button",{type:"button","data-testid":"masonry-loader-retry",class:"inline-flex items-center rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-700",onClick:ge}," Retry ")],64))])):e.createCommentVNode("",!0),c.value&&U.value&&!m.value?(e.openBlock(),e.createElementBlock("img",{key:u.item.id+":img:"+k.value,class:e.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",v.value?"opacity-100":"opacity-0"]),src:u.item.preview,width:u.item.width,height:u.item.height,loading:"lazy",alt:u.item.id,onLoad:pe,onError:y[0]||(y[0]=_=>ae(_))},null,42,Yt)):c.value&&!m.value?(e.openBlock(),e.createElementBlock("video",{key:u.item.id+":vid:"+k.value,class:e.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",v.value?"opacity-100":"opacity-0"]),poster:u.item.preview,ref_key:"videoEl",ref:h,playsinline:"",preload:"metadata",onLoadedmetadata:xe,onTimeupdate:re,onDurationchange:re,onLoadeddata:re,onError:y[1]||(y[1]=_=>ae(_))},[e.createElementVNode("source",{src:u.item.original,type:"video/mp4"},null,8,Xt)],42,jt)):e.createCommentVNode("",!0),c.value&&P.value&&!m.value?(e.openBlock(),e.createElementBlock("div",Ut,[e.createElementVNode("div",Wt,[e.createElementVNode("button",{type:"button",class:"inline-flex h-8 w-8 items-center justify-center rounded-md border border-slate-200 bg-white text-slate-700 hover:bg-slate-50","aria-label":h.value?.paused?"Play":"Pause",onClick:ke},[e.createElementVNode("i",{class:e.normalizeClass(h.value?.paused?"fa-solid fa-play":"fa-solid fa-pause"),"aria-hidden":"true"},null,2)],8,Gt),e.createElementVNode("input",{type:"range",class:"h-2 w-full",min:0,max:C.value||0,step:"0.1",value:V.value,"aria-label":"Seek",onInput:ve},null,40,Kt),e.createElementVNode("input",{type:"range",class:"h-2 w-24",min:"0",max:"1",step:"0.05",value:X.value,"aria-label":"Volume",onInput:he},null,40,Jt)])])):e.createCommentVNode("",!0)],4))}}),ht=Symbol("masonryItemRegistry");function Qt(a,w){return!a||a<=0||!w||w<=0?1:Math.max(1,Math.floor(a/w))}function Zt(a,w,u,s=0){if(!a||a<=0||!w||w<=0)return u;const d=typeof s=="number"&&s>0?s:0,b=Math.max(0,w-1)*d,h=a-b;return!h||h<=0?u:h/w}function en(a,w){const u=a?.width,s=a?.height;return typeof u=="number"&&typeof s=="number"&&u>0&&s>0?s/u*w:w}function pt(a){return Number.isFinite(a)&&a>0?Math.floor(a):1}function De(a){return Number.isFinite(a)&&a>0?Math.floor(a):0}function tn(a){async function w(s){const d=De(s);if(d<=0)return;a.stats.value={...a.stats.value,cooldownMsTotal:d,cooldownMsRemaining:d};const b=Date.now(),h=100;await new Promise(c=>{const v=setInterval(()=>{const m=Date.now()-b,k=Math.max(0,d-m);a.stats.value={...a.stats.value,cooldownMsTotal:d,cooldownMsRemaining:k},k<=0&&(clearInterval(v),c())},h)})}async function u(s){const d=pt(a.getPageSize()),b=a.isEnabled(),h=De(a.getRequestDelayMs()),c=[];let v=0;a.buffer.value.length&&(v=a.buffer.value.length,c.push(...a.buffer.value),a.buffer.value=[]),a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,cooldownMsTotal:h,cooldownMsRemaining:0,progress:{collected:0,target:0},pageSize:d,bufferSize:0};const m=[];let k=s,E=0,P=!1;for(;c.length<d&&k!=null;){const C=k;P&&(a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!0,requestPage:C,progress:{collected:Math.min(c.length,d),target:d},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:d});const V=await a.getContent(C);m.push(C),P&&(a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null}),E+=V.items.length,a.markEnterFromLeft(V.items),c.push(...V.items),k=V.nextPage,!P&&c.length<d&&k!=null?(P=!0,a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null,progress:{collected:Math.min(c.length,d),target:d},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:d}):P&&(a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!0,progress:{collected:Math.min(c.length,d),target:d}}),P&&c.length<d&&k!=null&&await w(h)}const A=c.slice(0,d),F=c.slice(d);return a.buffer.value=F,a.stats.value={...a.stats.value,enabled:b,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsTotal:h,cooldownMsRemaining:0,pageSize:d,bufferSize:F.length,lastBatch:{startPage:s,pages:m,usedFromBuffer:v,fetchedFromNetwork:E,collectedTotal:c.length,emitted:A.length,carried:F.length},totals:{pagesFetched:a.stats.value.totals.pagesFetched+m.length,itemsFetchedFromNetwork:a.stats.value.totals.itemsFetchedFromNetwork+E}},{batchItems:A,pages:m,nextPage:k}}return{loadBackfillBatch:u}}function nn(a){const w=a.columnCount,u=a.columnWidth,s=a.gapX,d=a.gapY,b=a.headerHeight,h=a.footerHeight,c=a.bucketPx,v=Array.from({length:w},()=>0),m=new Array(a.items.length),k=new Array(a.items.length),E=new Map,P=new Map;let A=0;for(let F=0;F<a.items.length;F+=1){const C=a.items[F];C?.id&&P.set(C.id,F);let V=0;for(let M=1;M<v.length;M+=1)v[M]<v[V]&&(V=M);const X=V*(u+s),D=v[V],z=en(C,u)+b+h;m[F]={x:X,y:D},k[F]=z,v[V]=D+z+d,A=Math.max(A,D+z);const U=Math.floor(D/c),R=Math.floor((D+z)/c);for(let M=U;M<=R;M+=1){const H=E.get(M);H?H.push(F):E.set(M,[F])}}return{positions:m,heights:k,buckets:E,contentHeight:A,indexById:P}}function on(a){const w=a.itemCount;if(!w)return[];if(a.viewportHeight<=0)return Array.from({length:w},(v,m)=>m);const u=Math.max(0,a.scrollTop-a.overscanPx),s=a.scrollTop+a.viewportHeight+a.overscanPx,d=Math.floor(u/a.bucketPx),b=Math.floor(s/a.bucketPx),h=new Set;for(let v=d;v<=b;v+=1){const m=a.buckets.get(v);if(m)for(const k of m)h.add(k)}const c=Array.from(h);return c.sort((v,m)=>v-m),c}const ln={class:"hidden"},an={key:0,class:"flex h-full items-center justify-center"},rn={key:1,class:"text-sm font-medium text-red-700"},sn={class:"relative"},un={key:0,class:"pointer-events-auto absolute inset-0 z-10"},cn={class:"relative"},fn={key:0,class:"pointer-events-auto absolute inset-0 z-10"},dn={class:"mt-4 pb-2 text-center text-xs text-slate-600"},mn={key:0,class:"inline-flex items-center justify-center gap-2"},vn={key:1},hn={key:2},ut=100,pn=200,ct=600,ft=300,dt=600,mt=600,gn=400,yn=5,wn=1e3,gt=e.defineComponent({inheritAttrs:!1,__name:"Masonry",props:e.mergeDefaults({getContent:{},mode:{},pageSize:{},backfillRequestDelayMs:{},enterStaggerMs:{},items:{},page:{},restoredPages:{},itemWidth:{},prefetchThresholdPx:{},gapX:{},gapY:{},headerHeight:{},footerHeight:{},overscanPx:{}},vt),emits:["update:items","preloaded","failures"],setup(a,{expose:w,emit:u}){const s=a,d=u,b=e.useAttrs(),h=e.defineComponent({name:"SlotRenderer",props:{slotFn:{type:Function,required:!1},slotProps:{type:Object,required:!0}},setup(t){return()=>{const n=t.slotFn;return n?n(t.slotProps):null}}}),c=e.shallowRef(null);e.provide(ht,t=>{c.value||(c.value=t)});const v=[],m=[];let k=null,E=null;function P(){if(!v.length)return;const t=v.splice(0,v.length);d("preloaded",t)}function A(){if(!m.length)return;const t=m.splice(0,m.length);d("failures",t)}function F(){k||(k=setTimeout(()=>{k=null,P()},ut))}function C(){E||(E=setTimeout(()=>{E=null,A()},ut))}function V(t){c.value?.onPreloaded?.(t),v.push(t),F()}function X(t){c.value?.onFailed?.(t),m.push(t),C()}e.onMounted(()=>{if(!c.value)throw new Error("[Masonry] Missing <MasonryItem> definition. Add <MasonryItem> as a child of <Masonry>.")});const D=e.computed(()=>{const{class:t,...n}=b;return n}),z=e.ref(null),U=e.ref(0),R=e.ref(0),M=e.ref(0);let H;const L=e.computed(()=>s.gapX),fe=e.computed(()=>s.gapY);function de(t){if(!t)return 0;const n=Math.max(0,L.value);return Math.max(0,t.clientWidth-n)}const $=e.computed(()=>s.headerHeight),Y=e.computed(()=>s.footerHeight),me=e.computed(()=>c.value?.header),ke=e.computed(()=>c.value?.loader),ve=e.computed(()=>c.value?.footer),he=e.computed(()=>c.value?.overlay),pe=e.computed(()=>c.value?.error),ae=e.computed(()=>!!me.value),ge=e.computed(()=>!!ve.value),xe=e.computed(()=>!!he.value),re=e.computed(()=>{if($.value>0)return{height:`${$.value}px`}}),i=e.computed(()=>{if(Y.value>0)return{height:`${Y.value}px`}}),y=e.ref([]),_=e.ref([]),q=e.ref(new Map),j=e.ref(0),Se=e.ref(new Map);function wt(t){const n=typeof t=="number"&&Number.isFinite(t)?t:0;return M.value+R.value+Math.max(0,n)}const J=e.ref(new Set),Q=e.ref(new Set),Me=new Set,ye=e.ref(new Map);function bt(t){return Number.isFinite(t)?Math.max(0,Math.min(250,t)):0}function kt(t){if(!Q.value.has(t))return;const n=ye.value.get(t)??0;if(!(n<=0))return`${n}ms`}const Be=e.ref(new Map),W=e.ref(new Set),G=e.ref([]);function xt(t){const n=Be.value.get(t);return n||{dx:0,dy:0}}function St(t){if(Q.value.has(t))return`transform ${dt}ms ease-out`;if(W.value.has(t))return`transform ${ft}ms ease-out`}function Mt(t){const o=p.value[t]?.id,l=y.value[t]??{x:0,y:0},r=_.value[t]??0,f=r>0?r:be.value,g=l.x,S=o&&J.value.has(o)?wt(f):l.y,I=o?xt(o):{dx:0,dy:0};return`translate3d(${g+I.dx}px,${S+I.dy}px,0)`}function se(t){(typeof requestAnimationFrame=="function"?requestAnimationFrame:o=>setTimeout(()=>o(0),0))(()=>t())}function Bt(t){se(()=>se(t))}const $e=new Set;function Oe(t){return typeof t=="number"&&Number.isFinite(t)&&t>0}function Ee(t){if(!Array.isArray(t)||t.length===0)return;const n=new Set(J.value);let o=!1;for(const l of t){const r=l?.id;if(r){if(!$e.has(r)){const f=l?.width,g=l?.height;(!Oe(f)||!Oe(g))&&($e.add(r),console.warn(`[Masonry] Item "${r}" has invalid dimensions (width=${String(f)}, height=${String(g)}); layout expects { id, width, height }.`))}n.has(r)||(n.add(r),o=!0)}}o&&(J.value=n)}function Ye(){const t=new Map;for(const n of He.value){const l=p.value[n]?.id;if(!l)continue;const r=y.value[n];r&&t.set(l,{x:r.x,y:r.y})}return t}function je(t,n){if(!t.size)return;const o=new Map,l=[];for(const[f,g]of t.entries()){if(n?.has(f))continue;const S=Se.value.get(f);if(S==null)continue;const I=y.value[S];if(!I)continue;const B=g.x-I.x,x=g.y-I.y;(B||x)&&(o.set(f,{dx:B,dy:x}),l.push(f))}if(!o.size)return;Be.value=o;const r=new Set(W.value);for(const f of l)r.delete(f);W.value=r,se(()=>{W.value=new Set([...W.value,...l]),se(()=>{Be.value=new Map})}),setTimeout(()=>{const f=new Set(W.value);for(const g of l)f.delete(g);W.value=f},ft)}const Z=e.ref(!0),ee=e.ref(!1),ie=e.ref("");let T=0,Te=0,Ve=0;function Xe(t){return t instanceof Error&&t.name==="AbortError"}function Ue(){const t=new Error("aborted");return t.name="AbortError",t}function Et(t){return new Promise(n=>setTimeout(n,t))}async function We(t,n){let o=0;for(;;){if(n!==T)throw Ue();try{return await s.getContent(t)}catch(l){if(n!==T)throw Ue();if(o>=yn)throw l;o+=1,await Et(o*wn)}}}const O=e.ref([]),Ge=e.ref([]),Re=e.ref([]),N=e.ref(s.page),Ie=e.ref([]);let te=null,ne=null,Fe=0;function It(t){let n=-1;for(const o of t){const l=o?.originalIndex;we(l)&&l>n&&(n=l)}Fe=n+1}function ue(t){for(const n of t)!n||typeof n!="object"||n.id&&n.originalIndex==null&&(n.originalIndex=Fe,Fe+=1)}const oe=new Map,le=[];function we(t){return typeof t=="number"&&Number.isFinite(t)}function Ft(t,n){if(!n.length)return t;const o=new Set;for(const g of t){const S=g?.id;S&&o.add(S)}const l=[];for(const g of n){const S=g?.id;S&&(o.has(S)||(l.push(g),o.add(S)))}if(!l.length)return t;const r=l.slice().sort((g,S)=>{const I=we(g.originalIndex)?g.originalIndex:Number.POSITIVE_INFINITY,B=we(S.originalIndex)?S.originalIndex:Number.POSITIVE_INFINITY;return I-B}),f=t.slice();for(const g of r){const S=g.originalIndex;if(!we(S)){f.push(g);continue}let I=0,B=f.length;for(;I<B;){const x=I+B>>1,K=f[x]?.originalIndex;(we(K)?K:Number.POSITIVE_INFINITY)<=S?I=x+1:B=x}f.splice(I,0,g)}return f}async function Ke(t){if(!t.length)return;Ee(t);const n=Ye();p.value=Ft(p.value,t),await e.nextTick(),je(n)}async function Nt(t){const o=(Array.isArray(t)?t:[t]).map(ze).filter(Boolean);if(!o.length)return;const l=[];for(const r of o){const f=oe.get(r);f&&l.push(f)}if(l.length){await Ke(l);for(const r of l)r?.id&&oe.delete(r.id)}}async function Pt(){const t=le.pop();if(!t?.length)return;const n=[];for(const o of t){const l=oe.get(o);l&&n.push(l)}if(n.length){await Ke(n);for(const o of n)o?.id&&oe.delete(o.id)}}function _t(t){const o=(Array.isArray(t)?t:[t]).map(ze).filter(Boolean);if(!o.length)return;const l=new Set(o);for(const r of l)oe.delete(r);for(let r=le.length-1;r>=0;r-=1){const g=le[r].filter(S=>!l.has(S));g.length?le[r]=g:le.splice(r,1)}}const Ae=e.shallowRef({enabled:!1,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:2e3,pageSize:20,bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}),Je=tn({getContent:t=>We(t,T),markEnterFromLeft:Ee,buffer:Ie,stats:Ae,isEnabled:()=>s.mode==="backfill",getPageSize:()=>s.pageSize,getRequestDelayMs:()=>s.backfillRequestDelayMs}),Ne=e.computed(()=>s.items!==void 0);e.watch(()=>s.items,t=>{Ne.value&&(Re.value=Array.isArray(t)?t:[])},{immediate:!0});const p=e.computed({get(){return Ne.value?Re.value:Ge.value},set(t){Ne.value?(Re.value=t,d("update:items",t)):Ge.value=t}}),ce=e.ref(!1),Ce=e.ref(!1);async function Qe(t){const n=await We(t,T);return ue(n.items),Ee(n.items),{items:n.items,nextPage:n.nextPage}}function ze(t){return t?typeof t=="string"?t:t?.id:null}async function Ze(t){const o=(Array.isArray(t)?t:[t]).map(ze).filter(Boolean);if(!o.length)return;const l=new Set(o),r=[];for(const B of l){const x=Se.value.get(B);if(x==null)continue;const K=p.value[x];K&&(oe.set(B,K),r.push(B))}r.length&&le.push(r);const f=Ye(),g=be.value,S=M.value+R.value,I=[];for(const B of l){const x=Se.value.get(B);if(x==null)continue;const K=p.value[x];if(!K)continue;const _e=y.value[x]??{x:0,y:0},st=_.value[x]??g,qt=Math.max(_e.y,S);I.push({id:B,item:K,fromX:_e.x,fromY:_e.y,toY:qt+Math.max(0,st),width:g,height:st,leaving:!0})}if(I.length&&(G.value=[...G.value,...I]),p.value=p.value.filter(B=>{const x=B?.id;return!x||!l.has(x)}),await e.nextTick(),je(f,l),I.length){const B=new Set(I.map(x=>x.id));se(()=>{G.value=G.value.map(x=>B.has(x.id)?{...x,leaving:!1}:x),setTimeout(()=>{G.value=G.value.filter(x=>!B.has(x.id))},mt)})}}async function Pe(t){return Ze(t)}function Tt(){T+=1,te=null,ne=null,Z.value=!1,ee.value=!1}w({remove:Ze,restore:Nt,undo:Pt,forget:_t,loadNextPage:tt,cancel:Tt,get pagesLoaded(){return O.value},set pagesLoaded(t){O.value=t},get nextPage(){return N.value},set nextPage(t){N.value=t},get isLoading(){return Z.value||ee.value},get hasReachedEnd(){return s.mode!=="backfill"?N.value==null:N.value==null&&Ie.value.length===0},get backfillStats(){return Ae.value}});function et(){const t=nn({items:p.value,columnCount:qe.value,columnWidth:be.value,gapX:L.value,gapY:fe.value,headerHeight:$.value,footerHeight:Y.value,bucketPx:ct});y.value=t.positions,_.value=t.heights,q.value=t.buckets,j.value=t.contentHeight,Se.value=t.indexById}const Vt=e.computed(()=>Math.max(j.value,R.value)+pn),He=e.computed(()=>on({itemCount:p.value.length,viewportHeight:R.value,scrollTop:M.value,overscanPx:s.overscanPx,bucketPx:ct,buckets:q.value}));e.watch(He,t=>{if(!t?.length)return;if(ce.value&&!Ce.value){const l=[];for(const r of t){const f=p.value[r];f&&l.push(f)}l.length&&Ee(l),Ce.value=!0}const n=[];for(const l of t){const r=p.value[l]?.id;r&&J.value.has(r)&&(Me.has(r)||(Me.add(r),n.push(r)))}if(!n.length)return;const o=n.length>1?bt(s.enterStaggerMs):0;if(o>0){const l=new Map(ye.value);for(let r=0;r<n.length;r+=1){const f=n[r],g=Math.min(r*o,gn);l.set(f,g)}ye.value=l}se(()=>{const l=new Set(Q.value);for(const r of n)l.add(r);Q.value=l}),Bt(()=>{const l=new Set(J.value);for(const r of n)l.delete(r);J.value=l,setTimeout(()=>{const r=new Set(Q.value),f=new Map(ye.value);for(const g of n)r.delete(g),Me.delete(g),f.delete(g);Q.value=r,ye.value=f},dt)})},{flush:"post"});async function tt(){if(te)return te;if(Z.value||ee.value||s.mode!=="backfill"&&N.value==null||s.mode==="backfill"&&N.value==null&&Ie.value.length===0)return;const t=T;let n=null;return n=(async()=>{try{if(ee.value=!0,ie.value="",s.mode==="backfill"){const r=await Je.loadBackfillBatch(N.value);if(t!==T)return;r.pages.length&&(O.value=[...O.value,...r.pages]),ue(r.batchItems),p.value=[...p.value,...r.batchItems],N.value=r.nextPage;return}const o=N.value;if(o==null)return;const l=await Qe(o);if(t!==T)return;O.value=[...O.value,o],ue(l.items),p.value=[...p.value,...l.items],N.value=l.nextPage}catch(o){if(t!==T||Xe(o))return;ie.value=o instanceof Error?o.message:String(o)}finally{t===T&&(ee.value=!1),te===n&&(te=null)}})(),te=n,n}function Rt(){const t=z.value;if(!t)return;const n=t.scrollTop,o=t.clientHeight,l=t.scrollHeight;M.value=n,R.value=o;const r=Te,f=Ve,g=f>0&&l<f;if(Te=n,Ve=l,g&&n<=r)return;l-(n+o)<=s.prefetchThresholdPx&&tt()}function nt(){return z.value}function ot(t){U.value=de(t),R.value=t.clientHeight}function At(){typeof ResizeObserver>"u"||(H=new ResizeObserver(()=>{const t=nt();t&&ot(t)}))}function Ct(){return{enabled:s.mode==="backfill",isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:De(s.backfillRequestDelayMs),pageSize:pt(s.pageSize),bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}}function lt(){T+=1,te=null,ne=null,Te=0,Ve=0,Fe=0,oe.clear(),le.length=0,J.value=new Set,Q.value=new Set,Me.clear(),Be.value=new Map,W.value=new Set,G.value=[],O.value=[],N.value=null,Ie.value=[],Ae.value=Ct(),Z.value=!0,ee.value=!1,ie.value="",Ce.value=!1}function at(t){lt(),p.value=[],N.value=t}function zt(t){const n=Array.isArray(t)?t:[t],o=[],l=new Set;for(const r of n){if(r==null)continue;const f=typeof r=="string"?`s:${r}`:`n:${String(r)}`;l.has(f)||(l.add(f),o.push(r))}return o}function Le(t){lt(),O.value=t?zt(t):[],N.value=s.page,Z.value=!1,It(p.value),ue(p.value)}async function rt(t){if(ne)return ne;const n=T;let o=null;return o=(async()=>{try{if(s.mode==="backfill"){const l=await Je.loadBackfillBatch(t);if(n!==T)return;O.value=l.pages.length?l.pages:[t],ue(l.batchItems),p.value=l.batchItems,N.value=l.nextPage}else{const l=await Qe(t);if(n!==T)return;O.value=[t],ue(l.items),p.value=l.items,N.value=l.nextPage}}catch(l){if(n!==T||Xe(l))return;ie.value=l instanceof Error?l.message:String(l)}finally{n===T&&(Z.value=!1),ne===o&&(ne=null)}})(),ne=o,o}function Ht(){const t=nt();t&&(ot(t),M.value=t.scrollTop,H?.observe(t))}e.onMounted(async()=>{if(At(),Ht(),s.restoredPages!=null){ce.value=!0,Le(s.restoredPages);return}if(Ne.value&&p.value.length>0){ce.value=!0,Le();return}ce.value=!1,at(s.page),await rt(s.page)}),e.onUnmounted(()=>{H?.disconnect(),k&&(clearTimeout(k),k=null),E&&(clearTimeout(E),E=null),P(),A()}),e.watch(()=>s.page,async t=>{if(ce.value){N.value=t;return}at(t),await rt(t)}),e.watch(()=>s.restoredPages,t=>{t&&(ce.value=!0,Le(t))}),e.watch(L,()=>{const t=z.value;t&&(U.value=de(t))},{immediate:!1});const qe=e.computed(()=>Qt(U.value,s.itemWidth)),be=e.computed(()=>Zt(U.value,qe.value,s.itemWidth,L.value));e.watch([qe,be,L,fe,$,Y],()=>{et()},{immediate:!0}),e.watch(()=>[p.value,p.value.length],()=>et(),{immediate:!0});const Lt=e.computed(()=>["mt-8 flex min-h-0 flex-1 flex-col rounded-2xl border border-slate-200/70 bg-white/70 p-5 shadow-sm backdrop-blur",b.class]);return(t,n)=>(e.openBlock(),e.createElementBlock("section",e.mergeProps(D.value,{class:Lt.value}),[e.createElementVNode("div",ln,[e.renderSlot(t.$slots,"default")]),e.createElementVNode("div",{ref_key:"scrollViewportRef",ref:z,"data-testid":"items-scroll-container",class:"mt-4 min-h-0 flex-1 overflow-auto",style:e.normalizeStyle({paddingRight:L.value+"px"}),onScroll:Rt},[Z.value?(e.openBlock(),e.createElementBlock("div",an,n[0]||(n[0]=[e.createElementVNode("div",{class:"inline-flex items-center gap-3 text-sm text-slate-600"},[e.createElementVNode("svg",{class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})]),e.createElementVNode("span",null,"Loading…")],-1)]))):ie.value?(e.openBlock(),e.createElementBlock("p",rn,"Error: "+e.toDisplayString(ie.value),1)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"relative",style:e.normalizeStyle({height:Vt.value+"px"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(He.value,o=>(e.openBlock(),e.createElementBlock("article",{key:p.value[o].id,"data-testid":"item-card",class:"absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:e.normalizeStyle({width:be.value+"px",transition:St(p.value[o].id),transitionDelay:kt(p.value[o].id),transform:Mt(o)})},[ae.value||$.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:e.normalizeStyle(re.value)},[e.createVNode(e.unref(h),{"slot-fn":me.value,"slot-props":{item:p.value[o],remove:()=>Pe(p.value[o])}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0),e.createElementVNode("div",sn,[e.createVNode(it,{item:p.value[o],remove:()=>Pe(p.value[o]),"loader-slot-fn":ke.value,"error-slot-fn":pe.value,onSuccess:V,onError:X},null,8,["item","remove","loader-slot-fn","error-slot-fn"]),xe.value?(e.openBlock(),e.createElementBlock("div",un,[e.createVNode(e.unref(h),{"slot-fn":he.value,"slot-props":{item:p.value[o],remove:()=>Pe(p.value[o])}},null,8,["slot-fn","slot-props"])])):e.createCommentVNode("",!0)]),ge.value||Y.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:e.normalizeStyle(i.value)},[e.createVNode(e.unref(h),{"slot-fn":ve.value,"slot-props":{item:p.value[o],remove:()=>Pe(p.value[o])}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0)],4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(G.value,o=>(e.openBlock(),e.createElementBlock("article",{key:o.id+":leaving","data-testid":"item-card-leaving",class:"pointer-events-none absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:e.normalizeStyle({width:o.width+"px",transition:"transform "+mt+"ms ease-out",transform:o.leaving?"translate3d("+o.fromX+"px,"+o.fromY+"px,0)":"translate3d("+o.fromX+"px,"+o.toY+"px,0)"})},[ae.value||$.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:e.normalizeStyle(re.value)},[e.createVNode(e.unref(h),{"slot-fn":me.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0),e.createElementVNode("div",cn,[e.createVNode(it,{item:o.item,remove:()=>{},"loader-slot-fn":ke.value,"error-slot-fn":pe.value},null,8,["item","loader-slot-fn","error-slot-fn"]),xe.value?(e.openBlock(),e.createElementBlock("div",fn,[e.createVNode(e.unref(h),{"slot-fn":he.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])])):e.createCommentVNode("",!0)]),ge.value||Y.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:e.normalizeStyle(i.value)},[e.createVNode(e.unref(h),{"slot-fn":ve.value,"slot-props":{item:o.item,remove:()=>{}}},null,8,["slot-fn","slot-props"])],4)):e.createCommentVNode("",!0)],4))),128))],4)),e.createElementVNode("div",dn,[ee.value?(e.openBlock(),e.createElementBlock("span",mn,n[1]||(n[1]=[e.createElementVNode("svg",{class:"h-4 w-4 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})],-1),e.createElementVNode("span",null,"Loading more…",-1)]))):N.value==null?(e.openBlock(),e.createElementBlock("span",vn,"End of list")):(e.openBlock(),e.createElementBlock("span",hn,"Scroll to load page "+e.toDisplayString(N.value),1))])],36)],16))}}),yt=e.defineComponent({name:"MasonryItem",setup(a,{slots:w,attrs:u}){const s=e.inject(ht,null);if(!s)return()=>null;const d=u.onPreloaded,b=u.onFailed,h=w.overlay,c=w.default;return s({header:w.header,loader:w.loader,overlay:h??c,error:w.error,footer:w.footer,onPreloaded:typeof d=="function"?d:Array.isArray(d)?v=>{for(const m of d)typeof m=="function"&&m(v)}:void 0,onFailed:typeof b=="function"?b:Array.isArray(b)?v=>{for(const m of b)typeof m=="function"&&m(v)}:void 0}),()=>null}}),bn={install(a){a.component("Masonry",gt),a.component("MasonryItem",yt)}};exports.Masonry=gt;exports.MasonryItem=yt;exports.VibePlugin=bn;exports.masonryDefaults=vt;