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