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