@wyxos/vibe 2.0.3 → 2.1.0

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 +644 -519
  3. package/package.json +1 -1
package/lib/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),$e={mode:"default",pageSize:20,backfillRequestDelayMs:2e3,page:1,itemWidth:300,prefetchThresholdPx:200,gapX:16,gapY:16,headerHeight:0,footerHeight:0,overscanPx:600};function it(l,y){return!l||l<=0||!y||y<=0?1:Math.max(1,Math.floor(l/y))}function ct(l,y,B,r=0){if(!l||l<=0||!y||y<=0)return B;const c=typeof r=="number"&&r>0?r:0,b=Math.max(0,y-1)*c,w=l-b;return!w||w<=0?B:w/y}function ut(l,y){const B=l?.width,r=l?.height;return typeof B=="number"&&typeof r=="number"&&B>0&&r>0?r/B*y:y}function Xe(l){return Number.isFinite(l)&&l>0?Math.floor(l):1}function he(l){return Number.isFinite(l)&&l>0?Math.floor(l):0}function ft(l){async function y(r){const c=he(r);if(c<=0)return;l.stats.value={...l.stats.value,cooldownMsTotal:c,cooldownMsRemaining:c};const b=Date.now(),w=100;await new Promise(g=>{const v=setInterval(()=>{const p=Date.now()-b,k=Math.max(0,c-p);l.stats.value={...l.stats.value,cooldownMsTotal:c,cooldownMsRemaining:k},k<=0&&(clearInterval(v),g())},w)})}async function B(r){const c=Xe(l.getPageSize()),b=l.isEnabled(),w=he(l.getRequestDelayMs()),g=[];let v=0;l.buffer.value.length&&(v=l.buffer.value.length,g.push(...l.buffer.value),l.buffer.value=[]),l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,cooldownMsTotal:w,cooldownMsRemaining:0,progress:{collected:0,target:0},pageSize:c,bufferSize:0};const p=[];let k=r,T=0,E=!1;for(;g.length<c&&k!=null;){const _=k;E&&(l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!0,requestPage:_,progress:{collected:Math.min(g.length,c),target:c},cooldownMsTotal:w,cooldownMsRemaining:0,pageSize:c});const x=await l.getContent(_);p.push(_),E&&(l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null}),T+=x.items.length,l.markEnterFromLeft(x.items),g.push(...x.items),k=x.nextPage,!E&&g.length<c&&k!=null?(E=!0,l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null,progress:{collected:Math.min(g.length,c),target:c},cooldownMsTotal:w,cooldownMsRemaining:0,pageSize:c}):E&&(l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!0,progress:{collected:Math.min(g.length,c),target:c}}),E&&g.length<c&&k!=null&&await y(w)}const F=g.slice(0,c),S=g.slice(c);return l.buffer.value=S,l.stats.value={...l.stats.value,enabled:b,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsTotal:w,cooldownMsRemaining:0,pageSize:c,bufferSize:S.length,lastBatch:{startPage:r,pages:p,usedFromBuffer:v,fetchedFromNetwork:T,collectedTotal:g.length,emitted:F.length,carried:S.length},totals:{pagesFetched:l.stats.value.totals.pagesFetched+p.length,itemsFetchedFromNetwork:l.stats.value.totals.itemsFetchedFromNetwork+T}},{batchItems:F,pages:p,nextPage:k}}return{loadBackfillBatch:B}}function dt(l){const y=l.columnCount,B=l.columnWidth,r=l.gapX,c=l.gapY,b=l.headerHeight,w=l.footerHeight,g=l.bucketPx,v=Array.from({length:y},()=>0),p=new Array(l.items.length),k=new Array(l.items.length),T=new Map,E=new Map;let F=0;for(let S=0;S<l.items.length;S+=1){const _=l.items[S];_?.id&&E.set(_.id,S);let x=0;for(let M=1;M<v.length;M+=1)v[M]<v[x]&&(x=M);const A=x*(B+r),R=v[x],H=ut(_,B)+b+w;p[S]={x:A,y:R},k[S]=H,v[x]=R+H+c,F=Math.max(F,R+H);const Q=Math.floor(R/g),Z=Math.floor((R+H)/g);for(let M=Q;M<=Z;M+=1){const Y=T.get(M);Y?Y.push(S):T.set(M,[S])}}return{positions:p,heights:k,buckets:T,contentHeight:F,indexById:E}}function mt(l){const y=l.itemCount;if(!y)return[];if(l.viewportHeight<=0)return Array.from({length:y},(v,p)=>p);const B=Math.max(0,l.scrollTop-l.overscanPx),r=l.scrollTop+l.viewportHeight+l.overscanPx,c=Math.floor(B/l.bucketPx),b=Math.floor(r/l.bucketPx),w=new Set;for(let v=c;v<=b;v+=1){const p=l.buckets.get(v);if(p)for(const k of p)w.add(k)}const g=Array.from(w);return g.sort((v,p)=>v-p),g}const ht={key:0,class:"flex h-full items-center justify-center"},vt={key:1,class:"text-sm font-medium text-red-700"},gt=["src","width","height","alt"],pt=["poster"],yt=["src"],wt=["src","width","height","alt"],kt=["poster"],bt=["src"],xt={class:"mt-4 pb-2 text-center text-xs text-slate-600"},Bt={key:0,class:"inline-flex items-center justify-center gap-2"},St={key:1},Mt={key:2},It=200,Le=600,De=300,Ye=600,Oe=600,Et=5,Ft=1e3,je=t.defineComponent({inheritAttrs:!1,__name:"Masonry",props:t.mergeDefaults({getContent:{},mode:{},pageSize:{},backfillRequestDelayMs:{},items:{},page:{},itemWidth:{},prefetchThresholdPx:{},gapX:{},gapY:{},headerHeight:{},footerHeight:{},overscanPx:{}},$e),emits:["update:items"],setup(l,{expose:y,emit:B}){const r=l,c=B,b=t.useAttrs(),w=t.useSlots(),g=t.computed(()=>{const{class:e,...o}=b;return o}),v=t.ref(null),p=t.ref(0),k=t.ref(0),T=t.ref(0);let E;const F=t.computed(()=>r.gapX),S=t.computed(()=>r.gapY);function _(e){if(!e)return 0;const o=Math.max(0,F.value);return Math.max(0,e.clientWidth-o)}const x=t.computed(()=>r.headerHeight),A=t.computed(()=>r.footerHeight),R=t.computed(()=>!!w.itemHeader),H=t.computed(()=>!!w.itemFooter),Q=t.computed(()=>{if(x.value>0)return{height:`${x.value}px`}}),Z=t.computed(()=>{if(A.value>0)return{height:`${A.value}px`}}),M=t.ref([]),Y=t.ref([]),ve=t.ref(new Map),ge=t.ref(0),ee=t.ref(new Map);function pe(e){const o=typeof e=="number"&&Number.isFinite(e)?e:0;return-Math.max(0,o)}const V=t.ref(new Set),O=t.ref(new Set),te=new Set,ne=t.ref(new Map),z=t.ref(new Set),C=t.ref([]);function We(e){const o=ne.value.get(e);return o||{dx:0,dy:0}}function Ge(e){if(O.value.has(e))return`transform ${Ye}ms ease-out`;if(z.value.has(e))return`transform ${De}ms ease-out`}function Ue(e){const n=i.value[e]?.id,a=M.value[e]??{x:0,y:0},s=Y.value[e]??0,d=s>0?s:K.value,u=a.x,m=n&&V.value.has(n)?pe(d):a.y,h=n?We(n):{dx:0,dy:0};return`translate3d(${u+h.dx}px,${m+h.dy}px,0)`}function $(e){(typeof requestAnimationFrame=="function"?requestAnimationFrame:n=>setTimeout(()=>n(0),0))(()=>e())}function Ke(e){$(()=>$(e))}const ye=new Set;function we(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function ae(e){if(!Array.isArray(e)||e.length===0)return;const o=new Set(V.value);let n=!1;for(const a of e){const s=a?.id;if(s){if(!ye.has(s)){const d=a?.width,u=a?.height;(!we(d)||!we(u))&&(ye.add(s),console.warn(`[Masonry] Item "${s}" has invalid dimensions (width=${String(d)}, height=${String(u)}); layout expects { id, width, height }.`))}o.has(s)||(o.add(s),n=!0)}}n&&(V.value=o)}function ke(){const e=new Map;for(const o of de.value){const a=i.value[o]?.id;if(!a)continue;const s=M.value[o];s&&e.set(a,{x:s.x,y:s.y})}return e}function be(e,o){if(!e.size)return;const n=new Map,a=[];for(const[d,u]of e.entries()){if(o?.has(d))continue;const m=ee.value.get(d);if(m==null)continue;const h=M.value[m];if(!h)continue;const f=u.x-h.x,P=u.y-h.y;(f||P)&&(n.set(d,{dx:f,dy:P}),a.push(d))}if(!n.size)return;ne.value=n;const s=new Set(z.value);for(const d of a)s.delete(d);z.value=s,$(()=>{z.value=new Set([...z.value,...a]),$(()=>{ne.value=new Map})}),setTimeout(()=>{const d=new Set(z.value);for(const u of a)d.delete(u);z.value=d},De)}const le=t.ref(!0),G=t.ref(!1),X=t.ref("");let I=0;function xe(e){return e instanceof Error&&e.name==="AbortError"}function Be(){const e=new Error("aborted");return e.name="AbortError",e}function Je(e){return new Promise(o=>setTimeout(o,e))}async function Se(e,o){let n=0;for(;;){if(o!==I)throw Be();try{return await r.getContent(e)}catch(a){if(o!==I)throw Be();if(n>=Et)throw a;n+=1,await Je(n*Ft)}}}const q=t.ref([]),Me=t.ref([]),se=t.ref([]),N=t.ref(r.page),re=t.ref([]);let j=null,W=null,ie=0;function U(e){for(const o of e)!o||typeof o!="object"||o.id&&o.originalIndex==null&&(o.originalIndex=ie,ie+=1)}const L=new Map,D=[];function oe(e){return typeof e=="number"&&Number.isFinite(e)}function Qe(e,o){if(!o.length)return e;const n=new Set;for(const u of e){const m=u?.id;m&&n.add(m)}const a=[];for(const u of o){const m=u?.id;m&&(n.has(m)||(a.push(u),n.add(m)))}if(!a.length)return e;const s=a.slice().sort((u,m)=>{const h=oe(u.originalIndex)?u.originalIndex:Number.POSITIVE_INFINITY,f=oe(m.originalIndex)?m.originalIndex:Number.POSITIVE_INFINITY;return h-f}),d=e.slice();for(const u of s){const m=u.originalIndex;if(!oe(m)){d.push(u);continue}let h=0,f=d.length;for(;h<f;){const P=h+f>>1,J=d[P]?.originalIndex;(oe(J)?J:Number.POSITIVE_INFINITY)<=m?h=P+1:f=P}d.splice(h,0,u)}return d}async function Ie(e){if(!e.length)return;ae(e);const o=ke();i.value=Qe(i.value,e),await t.nextTick(),be(o)}async function Ee(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=[];for(const s of n){const d=L.get(s);d&&a.push(d)}if(a.length){await Ie(a);for(const s of a)s?.id&&L.delete(s.id)}}async function Fe(){const e=D.pop();if(!e?.length)return;const o=[];for(const n of e){const a=L.get(n);a&&o.push(a)}if(o.length){await Ie(o);for(const n of o)n?.id&&L.delete(n.id)}}async function Ze(e){return Ee(e)}async function et(){return Fe()}function Pe(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=new Set(n);for(const s of a)L.delete(s);for(let s=D.length-1;s>=0;s-=1){const u=D[s].filter(m=>!a.has(m));u.length?D[s]=u:D.splice(s,1)}}const ce=t.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}}),Te=ft({getContent:e=>Se(e,I),markEnterFromLeft:ae,buffer:re,stats:ce,isEnabled:()=>r.mode==="backfill",getPageSize:()=>r.pageSize,getRequestDelayMs:()=>r.backfillRequestDelayMs}),ue=t.computed(()=>r.items!==void 0);t.watch(()=>r.items,e=>{ue.value&&(se.value=Array.isArray(e)?e:[])},{immediate:!0});const i=t.computed({get(){return ue.value?se.value:Me.value},set(e){ue.value?(se.value=e,c("update:items",e)):Me.value=e}});async function Ne(e){const o=await Se(e,I);return U(o.items),ae(o.items),{items:o.items,nextPage:o.nextPage}}function fe(e){return e?typeof e=="string"?e:e?.id:null}async function _e(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=new Set(n),s=[];for(const h of a){const f=ee.value.get(h);if(f==null)continue;const P=i.value[f];P&&(L.set(h,P),s.push(h))}s.length&&D.push(s);const d=ke(),u=K.value,m=[];for(const h of a){const f=ee.value.get(h);if(f==null)continue;const P=i.value[f];if(!P)continue;const J=M.value[f]??{x:0,y:0},qe=Y.value[f]??u;m.push({id:h,item:P,fromX:J.x,fromY:J.y,width:u,height:qe,leaving:!0})}if(m.length&&(C.value=[...C.value,...m]),i.value=i.value.filter(h=>{const f=h?.id;return!f||!a.has(f)}),await t.nextTick(),be(d,a),m.length){const h=new Set(m.map(f=>f.id));$(()=>{C.value=C.value.map(f=>h.has(f.id)?{...f,leaving:!1}:f),setTimeout(()=>{C.value=C.value.filter(f=>!h.has(f.id))},Oe)})}}async function Ae(e){return _e(e)}y({remove:_e,restore:Ze,undo:et,forget:Pe,restoreRemoved:Ee,undoLastRemoval:Fe,forgetRemoved:Pe,backfillStats:ce});function Re(){const e=dt({items:i.value,columnCount:me.value,columnWidth:K.value,gapX:F.value,gapY:S.value,headerHeight:x.value,footerHeight:A.value,bucketPx:Le});M.value=e.positions,Y.value=e.heights,ve.value=e.buckets,ge.value=e.contentHeight,ee.value=e.indexById}const tt=t.computed(()=>Math.max(ge.value,k.value)+It),de=t.computed(()=>mt({itemCount:i.value.length,viewportHeight:k.value,scrollTop:T.value,overscanPx:r.overscanPx,bucketPx:Le,buckets:ve.value}));t.watch(de,e=>{if(!e?.length)return;const o=[];for(const n of e){const a=i.value[n]?.id;a&&V.value.has(a)&&(te.has(a)||(te.add(a),o.push(a)))}o.length&&($(()=>{const n=new Set(O.value);for(const a of o)n.add(a);O.value=n}),Ke(()=>{const n=new Set(V.value);for(const a of o)n.delete(a);V.value=n,setTimeout(()=>{const a=new Set(O.value);for(const s of o)a.delete(s),te.delete(s);O.value=a},Ye)}))},{flush:"post"});async function nt(){if(j)return j;if(le.value||G.value||r.mode!=="backfill"&&N.value==null||r.mode==="backfill"&&N.value==null&&re.value.length===0)return;const e=I;let o=null;return o=(async()=>{try{if(G.value=!0,X.value="",r.mode==="backfill"){const s=await Te.loadBackfillBatch(N.value);if(e!==I)return;s.pages.length&&(q.value=[...q.value,...s.pages]),U(s.batchItems),i.value=[...i.value,...s.batchItems],N.value=s.nextPage;return}const n=N.value;if(n==null)return;const a=await Ne(n);if(e!==I)return;q.value=[...q.value,n],U(a.items),i.value=[...i.value,...a.items],N.value=a.nextPage}catch(n){if(e!==I||xe(n))return;X.value=n instanceof Error?n.message:String(n)}finally{e===I&&(G.value=!1),j===o&&(j=null)}})(),j=o,o}function lt(){const e=v.value;if(!e)return;T.value=e.scrollTop,k.value=e.clientHeight,e.scrollHeight-(e.scrollTop+e.clientHeight)<=r.prefetchThresholdPx&&nt()}function ze(){return v.value}function Ce(e){p.value=_(e),k.value=e.clientHeight}function ot(){typeof ResizeObserver>"u"||(E=new ResizeObserver(()=>{const e=ze();e&&Ce(e)}))}function at(){return{enabled:r.mode==="backfill",isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:he(r.backfillRequestDelayMs),pageSize:Xe(r.pageSize),bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}}function He(e){I+=1,j=null,W=null,ie=0,L.clear(),D.length=0,V.value=new Set,O.value=new Set,te.clear(),ne.value=new Map,z.value=new Set,C.value=[],q.value=[],i.value=[],N.value=e,re.value=[],ce.value=at(),le.value=!0,G.value=!1,X.value=""}async function Ve(e){if(W)return W;const o=I;let n=null;return n=(async()=>{try{if(r.mode==="backfill"){const a=await Te.loadBackfillBatch(e);if(o!==I)return;q.value=a.pages.length?a.pages:[e],U(a.batchItems),i.value=a.batchItems,N.value=a.nextPage}else{const a=await Ne(e);if(o!==I)return;q.value=[e],U(a.items),i.value=a.items,N.value=a.nextPage}}catch(a){if(o!==I||xe(a))return;X.value=a instanceof Error?a.message:String(a)}finally{o===I&&(le.value=!1),W===n&&(W=null)}})(),W=n,n}function st(){const e=ze();e&&(Ce(e),T.value=e.scrollTop,E?.observe(e))}t.onMounted(async()=>{ot(),st(),He(r.page),await Ve(r.page)}),t.onUnmounted(()=>{E?.disconnect()}),t.watch(()=>r.page,async e=>{He(e),await Ve(e)}),t.watch(F,()=>{const e=v.value;e&&(p.value=_(e))},{immediate:!1});const me=t.computed(()=>it(p.value,r.itemWidth)),K=t.computed(()=>ct(p.value,me.value,r.itemWidth,F.value));t.watch([me,K,F,S,x,A],()=>{Re()},{immediate:!0}),t.watch(()=>[i.value,i.value.length],()=>Re(),{immediate:!0});const rt=t.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(e,o)=>(t.openBlock(),t.createElementBlock("section",t.mergeProps(g.value,{class:rt.value}),[t.createElementVNode("div",{ref_key:"scrollViewportRef",ref:v,"data-testid":"items-scroll-container",class:"mt-4 min-h-0 flex-1 overflow-auto",style:t.normalizeStyle({paddingRight:F.value+"px"}),onScroll:lt},[le.value?(t.openBlock(),t.createElementBlock("div",ht,o[0]||(o[0]=[t.createElementVNode("div",{class:"inline-flex items-center gap-3 text-sm text-slate-600"},[t.createElementVNode("svg",{class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[t.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),t.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})]),t.createElementVNode("span",null,"Loading…")],-1)]))):X.value?(t.openBlock(),t.createElementBlock("p",vt,"Error: "+t.toDisplayString(X.value),1)):(t.openBlock(),t.createElementBlock("div",{key:2,class:"relative",style:t.normalizeStyle({height:tt.value+"px"})},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(de.value,n=>(t.openBlock(),t.createElementBlock("article",{key:i.value[n].id,"data-testid":"item-card",class:"absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:t.normalizeStyle({width:K.value+"px",transition:Ge(i.value[n].id),transform:Ue(n)})},[R.value||x.value>0?(t.openBlock(),t.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:t.normalizeStyle(Q.value)},[t.renderSlot(e.$slots,"itemHeader",{item:i.value[n],remove:()=>Ae(i.value[n])})],4)):t.createCommentVNode("",!0),t.createElementVNode("div",{class:"bg-slate-100",style:t.normalizeStyle({aspectRatio:i.value[n].width+" / "+i.value[n].height})},[i.value[n].type==="image"?(t.openBlock(),t.createElementBlock("img",{key:0,class:"h-full w-full object-cover",src:i.value[n].preview,width:i.value[n].width,height:i.value[n].height,loading:"lazy",alt:i.value[n].id},null,8,gt)):(t.openBlock(),t.createElementBlock("video",{key:1,class:"h-full w-full object-cover",poster:i.value[n].preview,controls:"",preload:"metadata"},[t.createElementVNode("source",{src:i.value[n].original,type:"video/mp4"},null,8,yt)],8,pt))],4),H.value||A.value>0?(t.openBlock(),t.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:t.normalizeStyle(Z.value)},[t.renderSlot(e.$slots,"itemFooter",{item:i.value[n],remove:()=>Ae(i.value[n])})],4)):t.createCommentVNode("",!0)],4))),128)),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(C.value,n=>(t.openBlock(),t.createElementBlock("article",{key:n.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:t.normalizeStyle({width:n.width+"px",transition:"transform "+Oe+"ms ease-out",transform:n.leaving?"translate3d("+n.fromX+"px,"+n.fromY+"px,0)":"translate3d("+n.fromX+"px,"+pe(n.height)+"px,0)"})},[R.value||x.value>0?(t.openBlock(),t.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:t.normalizeStyle(Q.value)},[t.renderSlot(e.$slots,"itemHeader",{item:n.item,remove:()=>{}})],4)):t.createCommentVNode("",!0),t.createElementVNode("div",{class:"bg-slate-100",style:t.normalizeStyle({aspectRatio:n.item.width+" / "+n.item.height})},[n.item.type==="image"?(t.openBlock(),t.createElementBlock("img",{key:0,class:"h-full w-full object-cover",src:n.item.preview,width:n.item.width,height:n.item.height,loading:"lazy",alt:n.item.id},null,8,wt)):(t.openBlock(),t.createElementBlock("video",{key:1,class:"h-full w-full object-cover",poster:n.item.preview,controls:"",preload:"metadata"},[t.createElementVNode("source",{src:n.item.original,type:"video/mp4"},null,8,bt)],8,kt))],4),H.value||A.value>0?(t.openBlock(),t.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:t.normalizeStyle(Z.value)},[t.renderSlot(e.$slots,"itemFooter",{item:n.item,remove:()=>{}})],4)):t.createCommentVNode("",!0)],4))),128))],4)),t.createElementVNode("div",xt,[G.value?(t.openBlock(),t.createElementBlock("span",Bt,o[1]||(o[1]=[t.createElementVNode("svg",{class:"h-4 w-4 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[t.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),t.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})],-1),t.createElementVNode("span",null,"Loading more…",-1)]))):N.value==null?(t.openBlock(),t.createElementBlock("span",St,"End of list")):(t.openBlock(),t.createElementBlock("span",Mt,"Scroll to load page "+t.toDisplayString(N.value),1))])],36)],16))}}),Pt={install(l){l.component("Masonry",je)}};exports.Masonry=je;exports.VibePlugin=Pt;exports.masonryDefaults=$e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),Ue={mode:"default",pageSize:20,backfillRequestDelayMs:2e3,page:1,itemWidth:300,prefetchThresholdPx:200,gapX:16,gapY:16,headerHeight:0,footerHeight:0,overscanPx:600},vt={key:0,"data-testid":"masonry-loader-spinner",class:"absolute inset-0 flex items-center justify-center"},ht={key:1,"data-testid":"masonry-loader-error",class:"absolute inset-0 flex flex-col items-center justify-center gap-2 p-3"},gt=["src","width","height","alt"],pt=["poster"],yt=["src"],Oe=t.defineComponent({__name:"MasonryLoader",props:{item:{}},emits:["success","error"],setup(l,{emit:b}){const u=l,s=b,i=t.ref(null),p=t.ref(!1),m=t.ref(!1),c=t.ref(!1),g=t.ref(0),k=t.computed(()=>{const x=u.item?.width,B=u.item?.height;return{aspectRatio:`${x} / ${B}`}}),S=t.computed(()=>u.item?.type==="image");let M=null;function E(){p.value||(p.value=!0,m.value=!1,c.value=!1)}t.onMounted(()=>{if(typeof IntersectionObserver>"u"){E();return}M=new IntersectionObserver(x=>{for(const B of x)if(B.isIntersecting&&!((B.intersectionRatio??0)<.5)){E(),M?.disconnect(),M=null;return}},{threshold:[0,.5,1]}),i.value&&M.observe(i.value)}),t.onUnmounted(()=>{M?.disconnect(),M=null});function N(){m.value||(m.value=!0,c.value=!1,s("success",u.item))}function I(x){c.value||(m.value=!1,c.value=!0,s("error",{item:u.item,error:x}))}function R(){p.value&&(m.value=!1,c.value=!1,g.value+=1)}return(x,B)=>(t.openBlock(),t.createElementBlock("div",{ref_key:"rootEl",ref:i,class:"relative bg-slate-100",style:t.normalizeStyle(k.value)},[p.value&&!m.value&&!c.value?(t.openBlock(),t.createElementBlock("div",vt,B[2]||(B[2]=[t.createElementVNode("svg",{class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[t.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),t.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})],-1)]))):p.value&&c.value?(t.openBlock(),t.createElementBlock("div",ht,[B[3]||(B[3]=t.createElementVNode("p",{class:"text-center text-xs font-medium text-red-700"},"Failed to load",-1)),t.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:R}," Retry ")])):t.createCommentVNode("",!0),p.value&&S.value&&!c.value?(t.openBlock(),t.createElementBlock("img",{key:u.item.id+":img:"+g.value,class:t.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",m.value?"opacity-100":"opacity-0"]),src:u.item.preview,width:u.item.width,height:u.item.height,loading:"lazy",alt:u.item.id,onLoad:N,onError:B[0]||(B[0]=A=>I(A))},null,42,gt)):p.value&&!c.value?(t.openBlock(),t.createElementBlock("video",{key:u.item.id+":vid:"+g.value,class:t.normalizeClass(["h-full w-full object-cover transition-opacity duration-300",m.value?"opacity-100":"opacity-0"]),poster:u.item.preview,controls:"",preload:"metadata",onLoadedmetadata:N,onError:B[1]||(B[1]=A=>I(A))},[t.createElementVNode("source",{src:u.item.original,type:"video/mp4"},null,8,yt)],42,pt)):t.createCommentVNode("",!0)],4))}});function wt(l,b){return!l||l<=0||!b||b<=0?1:Math.max(1,Math.floor(l/b))}function xt(l,b,u,s=0){if(!l||l<=0||!b||b<=0)return u;const i=typeof s=="number"&&s>0?s:0,p=Math.max(0,b-1)*i,m=l-p;return!m||m<=0?u:m/b}function kt(l,b){const u=l?.width,s=l?.height;return typeof u=="number"&&typeof s=="number"&&u>0&&s>0?s/u*b:b}function Ge(l){return Number.isFinite(l)&&l>0?Math.floor(l):1}function ve(l){return Number.isFinite(l)&&l>0?Math.floor(l):0}function bt(l){async function b(s){const i=ve(s);if(i<=0)return;l.stats.value={...l.stats.value,cooldownMsTotal:i,cooldownMsRemaining:i};const p=Date.now(),m=100;await new Promise(c=>{const g=setInterval(()=>{const k=Date.now()-p,S=Math.max(0,i-k);l.stats.value={...l.stats.value,cooldownMsTotal:i,cooldownMsRemaining:S},S<=0&&(clearInterval(g),c())},m)})}async function u(s){const i=Ge(l.getPageSize()),p=l.isEnabled(),m=ve(l.getRequestDelayMs()),c=[];let g=0;l.buffer.value.length&&(g=l.buffer.value.length,c.push(...l.buffer.value),l.buffer.value=[]),l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,cooldownMsTotal:m,cooldownMsRemaining:0,progress:{collected:0,target:0},pageSize:i,bufferSize:0};const k=[];let S=s,M=0,E=!1;for(;c.length<i&&S!=null;){const R=S;E&&(l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!0,isRequestInFlight:!0,requestPage:R,progress:{collected:Math.min(c.length,i),target:i},cooldownMsTotal:m,cooldownMsRemaining:0,pageSize:i});const x=await l.getContent(R);k.push(R),E&&(l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null}),M+=x.items.length,l.markEnterFromLeft(x.items),c.push(...x.items),S=x.nextPage,!E&&c.length<i&&S!=null?(E=!0,l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!0,isRequestInFlight:!1,requestPage:null,progress:{collected:Math.min(c.length,i),target:i},cooldownMsTotal:m,cooldownMsRemaining:0,pageSize:i}):E&&(l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!0,progress:{collected:Math.min(c.length,i),target:i}}),E&&c.length<i&&S!=null&&await b(m)}const N=c.slice(0,i),I=c.slice(i);return l.buffer.value=I,l.stats.value={...l.stats.value,enabled:p,isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsTotal:m,cooldownMsRemaining:0,pageSize:i,bufferSize:I.length,lastBatch:{startPage:s,pages:k,usedFromBuffer:g,fetchedFromNetwork:M,collectedTotal:c.length,emitted:N.length,carried:I.length},totals:{pagesFetched:l.stats.value.totals.pagesFetched+k.length,itemsFetchedFromNetwork:l.stats.value.totals.itemsFetchedFromNetwork+M}},{batchItems:N,pages:k,nextPage:S}}return{loadBackfillBatch:u}}function Bt(l){const b=l.columnCount,u=l.columnWidth,s=l.gapX,i=l.gapY,p=l.headerHeight,m=l.footerHeight,c=l.bucketPx,g=Array.from({length:b},()=>0),k=new Array(l.items.length),S=new Array(l.items.length),M=new Map,E=new Map;let N=0;for(let I=0;I<l.items.length;I+=1){const R=l.items[I];R?.id&&E.set(R.id,I);let x=0;for(let P=1;P<g.length;P+=1)g[P]<g[x]&&(x=P);const B=x*(u+s),A=g[x],H=kt(R,u)+p+m;k[I]={x:B,y:A},S[I]=H,g[x]=A+H+i,N=Math.max(N,A+H);const ee=Math.floor(A/c),te=Math.floor((A+H)/c);for(let P=ee;P<=te;P+=1){const D=M.get(P);D?D.push(I):M.set(P,[I])}}return{positions:k,heights:S,buckets:M,contentHeight:N,indexById:E}}function St(l){const b=l.itemCount;if(!b)return[];if(l.viewportHeight<=0)return Array.from({length:b},(g,k)=>k);const u=Math.max(0,l.scrollTop-l.overscanPx),s=l.scrollTop+l.viewportHeight+l.overscanPx,i=Math.floor(u/l.bucketPx),p=Math.floor(s/l.bucketPx),m=new Set;for(let g=i;g<=p;g+=1){const k=l.buckets.get(g);if(k)for(const S of k)m.add(S)}const c=Array.from(m);return c.sort((g,k)=>g-k),c}const Mt={key:0,class:"flex h-full items-center justify-center"},It={key:1,class:"text-sm font-medium text-red-700"},Et={class:"mt-4 pb-2 text-center text-xs text-slate-600"},Nt={key:0,class:"inline-flex items-center justify-center gap-2"},Pt={key:1},Ft={key:2},Tt=200,Ye=600,Xe=300,je=600,We=600,Rt=5,At=1e3,Ke=t.defineComponent({inheritAttrs:!1,__name:"Masonry",props:t.mergeDefaults({getContent:{},mode:{},pageSize:{},backfillRequestDelayMs:{},items:{},page:{},restoredPagesLoaded:{},itemWidth:{},prefetchThresholdPx:{},gapX:{},gapY:{},headerHeight:{},footerHeight:{},overscanPx:{}},Ue),emits:["update:items"],setup(l,{expose:b,emit:u}){const s=l,i=u,p=t.useAttrs(),m=t.useSlots(),c=t.computed(()=>{const{class:e,...o}=p;return o}),g=t.ref(null),k=t.ref(0),S=t.ref(0),M=t.ref(0);let E;const N=t.computed(()=>s.gapX),I=t.computed(()=>s.gapY);function R(e){if(!e)return 0;const o=Math.max(0,N.value);return Math.max(0,e.clientWidth-o)}const x=t.computed(()=>s.headerHeight),B=t.computed(()=>s.footerHeight),A=t.computed(()=>!!m.itemHeader),H=t.computed(()=>!!m.itemFooter),ee=t.computed(()=>{if(x.value>0)return{height:`${x.value}px`}}),te=t.computed(()=>{if(B.value>0)return{height:`${B.value}px`}}),P=t.ref([]),D=t.ref([]),he=t.ref(new Map),ge=t.ref(0),ne=t.ref(new Map);function pe(e){const o=typeof e=="number"&&Number.isFinite(e)?e:0;return Ve.value+Math.max(0,o)}const L=t.ref(new Set),O=t.ref(new Set),oe=new Set,ae=t.ref(new Map),z=t.ref(new Set),_=t.ref([]);function Je(e){const o=ae.value.get(e);return o||{dx:0,dy:0}}function Qe(e){if(O.value.has(e))return`transform ${je}ms ease-out`;if(z.value.has(e))return`transform ${Xe}ms ease-out`}function Ze(e){const n=f.value[e]?.id,a=P.value[e]??{x:0,y:0},r=D.value[e]??0,d=r>0?r:Q.value,v=a.x,y=n&&L.value.has(n)?pe(d):a.y,w=n?Je(n):{dx:0,dy:0};return`translate3d(${v+w.dx}px,${y+w.dy}px,0)`}function Y(e){(typeof requestAnimationFrame=="function"?requestAnimationFrame:n=>setTimeout(()=>n(0),0))(()=>e())}function et(e){Y(()=>Y(e))}const ye=new Set;function we(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function re(e){if(!Array.isArray(e)||e.length===0)return;const o=new Set(L.value);let n=!1;for(const a of e){const r=a?.id;if(r){if(!ye.has(r)){const d=a?.width,v=a?.height;(!we(d)||!we(v))&&(ye.add(r),console.warn(`[Masonry] Item "${r}" has invalid dimensions (width=${String(d)}, height=${String(v)}); layout expects { id, width, height }.`))}o.has(r)||(o.add(r),n=!0)}}n&&(L.value=o)}function xe(){const e=new Map;for(const o of de.value){const a=f.value[o]?.id;if(!a)continue;const r=P.value[o];r&&e.set(a,{x:r.x,y:r.y})}return e}function ke(e,o){if(!e.size)return;const n=new Map,a=[];for(const[d,v]of e.entries()){if(o?.has(d))continue;const y=ne.value.get(d);if(y==null)continue;const w=P.value[y];if(!w)continue;const h=v.x-w.x,C=v.y-w.y;(h||C)&&(n.set(d,{dx:h,dy:C}),a.push(d))}if(!n.size)return;ae.value=n;const r=new Set(z.value);for(const d of a)r.delete(d);z.value=r,Y(()=>{z.value=new Set([...z.value,...a]),Y(()=>{ae.value=new Map})}),setTimeout(()=>{const d=new Set(z.value);for(const v of a)d.delete(v);z.value=d},Xe)}const G=t.ref(!0),K=t.ref(!1),X=t.ref("");let F=0;function be(e){return e instanceof Error&&e.name==="AbortError"}function Be(){const e=new Error("aborted");return e.name="AbortError",e}function tt(e){return new Promise(o=>setTimeout(o,e))}async function Se(e,o){let n=0;for(;;){if(o!==F)throw Be();try{return await s.getContent(e)}catch(a){if(o!==F)throw Be();if(n>=Rt)throw a;n+=1,await tt(n*At)}}}const V=t.ref([]),Me=t.ref([]),se=t.ref([]),T=t.ref(s.page),ie=t.ref([]);let j=null,W=null,le=0;function nt(e){let o=-1;for(const n of e){const a=n?.originalIndex;J(a)&&a>o&&(o=a)}le=o+1}function U(e){for(const o of e)!o||typeof o!="object"||o.id&&o.originalIndex==null&&(o.originalIndex=le,le+=1)}const q=new Map,$=[];function J(e){return typeof e=="number"&&Number.isFinite(e)}function ot(e,o){if(!o.length)return e;const n=new Set;for(const v of e){const y=v?.id;y&&n.add(y)}const a=[];for(const v of o){const y=v?.id;y&&(n.has(y)||(a.push(v),n.add(y)))}if(!a.length)return e;const r=a.slice().sort((v,y)=>{const w=J(v.originalIndex)?v.originalIndex:Number.POSITIVE_INFINITY,h=J(y.originalIndex)?y.originalIndex:Number.POSITIVE_INFINITY;return w-h}),d=e.slice();for(const v of r){const y=v.originalIndex;if(!J(y)){d.push(v);continue}let w=0,h=d.length;for(;w<h;){const C=w+h>>1,Z=d[C]?.originalIndex;(J(Z)?Z:Number.POSITIVE_INFINITY)<=y?w=C+1:h=C}d.splice(w,0,v)}return d}async function Ie(e){if(!e.length)return;re(e);const o=xe();f.value=ot(f.value,e),await t.nextTick(),ke(o)}async function Ee(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=[];for(const r of n){const d=q.get(r);d&&a.push(d)}if(a.length){await Ie(a);for(const r of a)r?.id&&q.delete(r.id)}}async function Ne(){const e=$.pop();if(!e?.length)return;const o=[];for(const n of e){const a=q.get(n);a&&o.push(a)}if(o.length){await Ie(o);for(const n of o)n?.id&&q.delete(n.id)}}async function at(e){return Ee(e)}async function lt(){return Ne()}function Pe(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=new Set(n);for(const r of a)q.delete(r);for(let r=$.length-1;r>=0;r-=1){const v=$[r].filter(y=>!a.has(y));v.length?$[r]=v:$.splice(r,1)}}const ce=t.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}}),Fe=bt({getContent:e=>Se(e,F),markEnterFromLeft:re,buffer:ie,stats:ce,isEnabled:()=>s.mode==="backfill",getPageSize:()=>s.pageSize,getRequestDelayMs:()=>s.backfillRequestDelayMs}),ue=t.computed(()=>s.items!==void 0);t.watch(()=>s.items,e=>{ue.value&&(se.value=Array.isArray(e)?e:[])},{immediate:!0});const f=t.computed({get(){return ue.value?se.value:Me.value},set(e){ue.value?(se.value=e,i("update:items",e)):Me.value=e}});async function Te(e){const o=await Se(e,F);return U(o.items),re(o.items),{items:o.items,nextPage:o.nextPage}}function fe(e){return e?typeof e=="string"?e:e?.id:null}async function Re(e){const n=(Array.isArray(e)?e:[e]).map(fe).filter(Boolean);if(!n.length)return;const a=new Set(n),r=[];for(const w of a){const h=ne.value.get(w);if(h==null)continue;const C=f.value[h];C&&(q.set(w,C),r.push(w))}r.length&&$.push(r);const d=xe(),v=Q.value,y=[];for(const w of a){const h=ne.value.get(w);if(h==null)continue;const C=f.value[h];if(!C)continue;const Z=P.value[h]??{x:0,y:0},De=D.value[h]??v;y.push({id:w,item:C,fromX:Z.x,fromY:Z.y,width:v,height:De,leaving:!0})}if(y.length&&(_.value=[..._.value,...y]),f.value=f.value.filter(w=>{const h=w?.id;return!h||!a.has(h)}),await t.nextTick(),ke(d,a),y.length){const w=new Set(y.map(h=>h.id));Y(()=>{_.value=_.value.map(h=>w.has(h.id)?{...h,leaving:!1}:h),setTimeout(()=>{_.value=_.value.filter(h=>!w.has(h.id))},We)})}}async function Ae(e){return Re(e)}b({remove:Re,restore:at,undo:lt,forget:Pe,pagesLoaded:V,nextPage:T,restoreRemoved:Ee,undoLastRemoval:Ne,forgetRemoved:Pe,backfillStats:ce});function Ce(){const e=Bt({items:f.value,columnCount:me.value,columnWidth:Q.value,gapX:N.value,gapY:I.value,headerHeight:x.value,footerHeight:B.value,bucketPx:Ye});P.value=e.positions,D.value=e.heights,he.value=e.buckets,ge.value=e.contentHeight,ne.value=e.indexById}const Ve=t.computed(()=>Math.max(ge.value,S.value)+Tt),de=t.computed(()=>St({itemCount:f.value.length,viewportHeight:S.value,scrollTop:M.value,overscanPx:s.overscanPx,bucketPx:Ye,buckets:he.value}));t.watch(de,e=>{if(!e?.length)return;const o=[];for(const n of e){const a=f.value[n]?.id;a&&L.value.has(a)&&(oe.has(a)||(oe.add(a),o.push(a)))}o.length&&(Y(()=>{const n=new Set(O.value);for(const a of o)n.add(a);O.value=n}),et(()=>{const n=new Set(L.value);for(const a of o)n.delete(a);L.value=n,setTimeout(()=>{const a=new Set(O.value);for(const r of o)a.delete(r),oe.delete(r);O.value=a},je)}))},{flush:"post"});async function rt(){if(j)return j;if(G.value||K.value||s.mode!=="backfill"&&T.value==null||s.mode==="backfill"&&T.value==null&&ie.value.length===0)return;const e=F;let o=null;return o=(async()=>{try{if(K.value=!0,X.value="",s.mode==="backfill"){const r=await Fe.loadBackfillBatch(T.value);if(e!==F)return;r.pages.length&&(V.value=[...V.value,...r.pages]),U(r.batchItems),f.value=[...f.value,...r.batchItems],T.value=r.nextPage;return}const n=T.value;if(n==null)return;const a=await Te(n);if(e!==F)return;V.value=[...V.value,n],U(a.items),f.value=[...f.value,...a.items],T.value=a.nextPage}catch(n){if(e!==F||be(n))return;X.value=n instanceof Error?n.message:String(n)}finally{e===F&&(K.value=!1),j===o&&(j=null)}})(),j=o,o}function st(){const e=g.value;if(!e)return;M.value=e.scrollTop,S.value=e.clientHeight,e.scrollHeight-(e.scrollTop+e.clientHeight)<=s.prefetchThresholdPx&&rt()}function ze(){return g.value}function _e(e){k.value=R(e),S.value=e.clientHeight}function it(){typeof ResizeObserver>"u"||(E=new ResizeObserver(()=>{const e=ze();e&&_e(e)}))}function ct(){return{enabled:s.mode==="backfill",isBackfillActive:!1,isRequestInFlight:!1,requestPage:null,progress:{collected:0,target:0},cooldownMsRemaining:0,cooldownMsTotal:ve(s.backfillRequestDelayMs),pageSize:Ge(s.pageSize),bufferSize:0,lastBatch:null,totals:{pagesFetched:0,itemsFetchedFromNetwork:0}}}function He(){F+=1,j=null,W=null,le=0,q.clear(),$.length=0,L.value=new Set,O.value=new Set,oe.clear(),ae.value=new Map,z.value=new Set,_.value=[],V.value=[],T.value=null,ie.value=[],ce.value=ct(),G.value=!0,K.value=!1,X.value=""}function Le(e){He(),f.value=[],T.value=e}function ut(e){const o=Array.isArray(e)?e:[e],n=[],a=new Set;for(const r of o){if(r==null)continue;const d=typeof r=="string"?`s:${r}`:`n:${String(r)}`;a.has(d)||(a.add(d),n.push(r))}return n}function ft(e){const o=[];for(const n of e){if(typeof n=="number"&&Number.isFinite(n)){o.push(n);continue}if(typeof n=="string"){const a=Number.parseInt(n,10);Number.isFinite(a)&&o.push(a)}}return o.length?Math.max(...o)+1:null}function qe(e){He();const o=ut(e);V.value=o,T.value=ft(o),G.value=!1,nt(f.value),U(f.value)}async function $e(e){if(W)return W;const o=F;let n=null;return n=(async()=>{try{if(s.mode==="backfill"){const a=await Fe.loadBackfillBatch(e);if(o!==F)return;V.value=a.pages.length?a.pages:[e],U(a.batchItems),f.value=a.batchItems,T.value=a.nextPage}else{const a=await Te(e);if(o!==F)return;V.value=[e],U(a.items),f.value=a.items,T.value=a.nextPage}}catch(a){if(o!==F||be(a))return;X.value=a instanceof Error?a.message:String(a)}finally{o===F&&(G.value=!1),W===n&&(W=null)}})(),W=n,n}function dt(){const e=ze();e&&(_e(e),M.value=e.scrollTop,E?.observe(e))}t.onMounted(async()=>{if(it(),dt(),s.restoredPagesLoaded!=null){qe(s.restoredPagesLoaded);return}Le(s.page),await $e(s.page)}),t.onUnmounted(()=>{E?.disconnect()}),t.watch(()=>s.page,async e=>{s.restoredPagesLoaded==null&&(Le(e),await $e(e))}),t.watch(()=>s.restoredPagesLoaded,e=>{e&&qe(e)}),t.watch(N,()=>{const e=g.value;e&&(k.value=R(e))},{immediate:!1});const me=t.computed(()=>wt(k.value,s.itemWidth)),Q=t.computed(()=>xt(k.value,me.value,s.itemWidth,N.value));t.watch([me,Q,N,I,x,B],()=>{Ce()},{immediate:!0}),t.watch(()=>[f.value,f.value.length],()=>Ce(),{immediate:!0});const mt=t.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",p.class]);return(e,o)=>(t.openBlock(),t.createElementBlock("section",t.mergeProps(c.value,{class:mt.value}),[t.createElementVNode("div",{ref_key:"scrollViewportRef",ref:g,"data-testid":"items-scroll-container",class:"mt-4 min-h-0 flex-1 overflow-auto",style:t.normalizeStyle({paddingRight:N.value+"px"}),onScroll:st},[G.value?(t.openBlock(),t.createElementBlock("div",Mt,o[0]||(o[0]=[t.createElementVNode("div",{class:"inline-flex items-center gap-3 text-sm text-slate-600"},[t.createElementVNode("svg",{class:"h-5 w-5 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[t.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),t.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})]),t.createElementVNode("span",null,"Loading…")],-1)]))):X.value?(t.openBlock(),t.createElementBlock("p",It,"Error: "+t.toDisplayString(X.value),1)):(t.openBlock(),t.createElementBlock("div",{key:2,class:"relative",style:t.normalizeStyle({height:Ve.value+"px"})},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(de.value,n=>(t.openBlock(),t.createElementBlock("article",{key:f.value[n].id,"data-testid":"item-card",class:"absolute overflow-hidden rounded-xl border border-slate-200/60 bg-white shadow-sm",style:t.normalizeStyle({width:Q.value+"px",transition:Qe(f.value[n].id),transform:Ze(n)})},[A.value||x.value>0?(t.openBlock(),t.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:t.normalizeStyle(ee.value)},[t.renderSlot(e.$slots,"itemHeader",{item:f.value[n],remove:()=>Ae(f.value[n])})],4)):t.createCommentVNode("",!0),t.createVNode(Oe,{item:f.value[n]},null,8,["item"]),H.value||B.value>0?(t.openBlock(),t.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:t.normalizeStyle(te.value)},[t.renderSlot(e.$slots,"itemFooter",{item:f.value[n],remove:()=>Ae(f.value[n])})],4)):t.createCommentVNode("",!0)],4))),128)),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(_.value,n=>(t.openBlock(),t.createElementBlock("article",{key:n.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:t.normalizeStyle({width:n.width+"px",transition:"transform "+We+"ms ease-out",transform:n.leaving?"translate3d("+n.fromX+"px,"+n.fromY+"px,0)":"translate3d("+n.fromX+"px,"+pe(n.height)+"px,0)"})},[A.value||x.value>0?(t.openBlock(),t.createElementBlock("div",{key:0,"data-testid":"item-header-container",class:"w-full",style:t.normalizeStyle(ee.value)},[t.renderSlot(e.$slots,"itemHeader",{item:n.item,remove:()=>{}})],4)):t.createCommentVNode("",!0),t.createVNode(Oe,{item:n.item},null,8,["item"]),H.value||B.value>0?(t.openBlock(),t.createElementBlock("div",{key:1,"data-testid":"item-footer-container",class:"w-full",style:t.normalizeStyle(te.value)},[t.renderSlot(e.$slots,"itemFooter",{item:n.item,remove:()=>{}})],4)):t.createCommentVNode("",!0)],4))),128))],4)),t.createElementVNode("div",Et,[K.value?(t.openBlock(),t.createElementBlock("span",Nt,o[1]||(o[1]=[t.createElementVNode("svg",{class:"h-4 w-4 animate-spin text-slate-500",viewBox:"0 0 24 24","aria-hidden":"true"},[t.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"4"}),t.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"})],-1),t.createElementVNode("span",null,"Loading more…",-1)]))):T.value==null?(t.openBlock(),t.createElementBlock("span",Pt,"End of list")):(t.openBlock(),t.createElementBlock("span",Ft,"Scroll to load page "+t.toDisplayString(T.value),1))])],36)],16))}}),Ct={install(l){l.component("Masonry",Ke)}};exports.Masonry=Ke;exports.VibePlugin=Ct;exports.masonryDefaults=Ue;