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