1import{z as V,a2 as B,ae as I,r as w,d as A,C as E,x as D,D as N,c as i,f as n,a as c,u as e,ab as j,af as P,w as z,e as q,n as O,t as p,H,I as K,o as r,g as F,aa as G,h as S}from"./index-CYPoTM9a.js";import{_ as J}from"./FileTypeBadge.vue_vue_type_script_setup_true_lang-CILkm7BX.js";import{f as Q,h as W}from"./files-BUAjSKCJ.js";import{f as X}from"./format-C0_KLEwl.js";import{c as Y}from"./lazyVisible-CN5pyazB.js";import{_ as Z}from"./Logo.vue_vue_type_script_setup_true_lang-DURdZWue.js";import{D as ee}from"./download-DYvBKeD9.js";function te(T){const _=V(),v=encodeURIComponent(T),u=w("loading"),f=w(null),b=w([]),y=w(!1),h=w(!1),l=I({});let m=null,x=!1;async function U(t){const d=await _.get(`/shared-folders/${v}/files`,{query:t?{cursor:t}:void 0});b.value=t===null?d.items:[...b.value,...d.items],m=d.next_cursor??null,y.value=m!==null}async function R(){u.value="loading",m=null;for(const t of Object.values(l))URL.revokeObjectURL(t);for(const t of Object.keys(l))delete l[t];try{f.value=await _.get(`/shared-folders/${v}`),await U(null)}catch(t){f.value=null,b.value=[],y.value=!1,u.value=t instanceof B&&t.status===404?"gone":"error";return}x||(u.value="ready")}async function $(){if(!(!y.value||h.value||m===null)){h.value=!0;try{await U(m)}catch{}finally{h.value=!1}}}async function k(t){if(!(t.thumbnail_status!=="ready"||l[t.locator]!==void 0))try{const d=await _.blob(`/shared-folders/${v}/files/thumbnail?locator=${encodeURIComponent(t.locator)}`);if(x||d.size===0)return;l[t.locator]=URL.createObjectURL(new Blob([d],{type:"image/webp"}))}catch{}}async function C(t){const d=await _.blob(`/shared-folders/${v}/files/download?locator=${encodeURIComponent(t.locator)}`),L=URL.createObjectURL(d),s=document.createElement("a");s.href=L,s.download=t.name,s.style.display="none",document.body.append(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(L),6e4)}function g(){x=!0;for(const t of Object.values(l))URL.revokeObjectURL(t)}return{state:u,facts:f,files:b,hasMore:y,loadingMore:h,thumbnailUrls:l,load:R,loadMore:$,loadThumbnail:k,downloadFile:C,dispose:g}}const oe={class:"flex min-h-screen flex-col bg-background"},ae={class:"flex h-14 shrink-0 items-center gap-2 border-b px-4"},se={class:"mx-auto w-full max-w-3xl flex-1 px-4 py-6 sm:py-10"},ne={key:0,class:"space-y-3"},re={key:1,class:"flex flex-col items-center gap-3 py-16 text-center","data-testid":"shared-folder-gone"},le={key:2,class:"flex flex-col items-center gap-3 py-16 text-center","data-testid":"shared-folder-error"},de={key:3,class:"space-y-6","data-testid":"shared-folder-stage"},ie={class:"text-xl font-semibold","data-testid":"shared-folder-name"},ce={class:"text-sm text-muted-foreground","data-testid":"shared-folder-count"},ue={class:"grid grid-cols-1 gap-3 sm:grid-cols-2"},fe=["src","alt"],me={class:"min-w-0 flex-1"},he=["title"],pe={class:"text-xs text-muted-foreground"},_e={key:0,class:"flex justify-center"},ve={key:1},Ce=A({__name:"SharedFolderView",setup(T){const _=E(),v=String(_.params.token??""),{state:u,facts:f,files:b,hasMore:y,loadingMore:h,thumbnailUrls:l,load:m,loadMore:x,loadThumbnail:U,downloadFile:R,dispose:$}=te(v),k=Y();D(()=>k.disconnect());const C=new Set,g=new Map;function t(s,a){if(!(s instanceof Element)){const o=g.get(a.locator);o&&(k.unobserve(o),g.delete(a.locator));return}C.has(a.locator)||(g.set(a.locator,s),k.observe(s,()=>{C.add(a.locator),g.delete(a.locator),U(a)}))}N(m),D($);async function d(s){await R(s)}async function L(){await x()}return(s,a)=>(r(),i("div",oe,[n("header",ae,[c(e(Z),{class:"h-6 w-auto"})]),n("main",se,[e(u)==="loading"?(r(),i("div",ne,[c(e(j),{class:"h-8 w-48"}),c(e(j),{class:"h-24 w-full"}),c(e(j),{class:"h-24 w-full"})])):e(u)==="gone"?(r(),i("div",re,[c(e(P),{class:"size-10 text-muted-foreground"}),a[0]||(a[0]=n("h1",{class:"text-lg font-medium"},"This link no longer opens a folder",-1)),a[1]||(a[1]=n("p",{class:"text-sm text-muted-foreground"}," It may have been turned off, or it never existed. Ask whoever sent it for a new link. ",-1))])):e(u)==="error"?(r(),i("div",le,[a[3]||(a[3]=n("h1",{class:"text-lg font-medium"},"Something went wrong",-1)),c(e(O),{variant:"outline","data-testid":"shared-folder-retry",onClick:e(m)},{default:z(()=>[...a[2]||(a[2]=[q("Try again",-1)])]),_:1}
1,8,["onClick"])])):e(f)?(r(),i("div",de,[n("div",null,[n("h1",ie,p(e(f).name),1),n("p",ce,p(e(f).total)+" "+p(e(f).total===1?"file":"files"),1)]),n("ul",ue,[(r(!0),i(H,null,K(e(b),o=>(r(),i("li",{key:o.locator,class:"flex items-center gap-3 rounded-lg border p-3","data-testid":"shared-folder-file"},[n("div",{ref_for:!0,ref:M=>t(M,o),class:"flex size-12 shrink-0 items-center justify-center overflow-hidden rounded-md bg-muted"},[e(l)[o.locator]?(r(),i("img",{key:0,src:e(l)[o.locator],alt:o.name,class:"size-full object-cover"},null,8,fe)):(r(),F(J,{key:1,kind:o.kind,"content-type":o.content_type},null,8,["kind","content-type"]))],512),n("div",me,[n("p",{class:"truncate text-sm font-medium",title:o.name,"data-testid":"shared-folder-file-name"},p(o.name),9,he),n("p",pe,p(e(Q)(o.kind))+" · "+p(e(W)(o.byte_size))+" · "+p(e(X)(o.created_at)),1)]),c(e(O),{variant:"ghost",size:"icon","aria-label":`Download ${o.name}`,"data-testid":"shared-folder-download",onClick:M=>d(o)},{default:z(()=>[c(e(ee),{class:"size-4"})]),_:1},8,["aria-label","onClick"])]))),128))]),e(y)?(r(),i("div",_e,[c(e(O),{variant:"outline",disabled:e(h),"data-testid":"shared-folder-load-more",onClick:L},{default:z(()=>[e(h)?(r(),F(e(G),{key:0,class:"size-4 animate-spin"})):(r(),i("span",ve,"Load more"))]),_:1},8,["disabled"])])):S("",!0)])):S("",!0)])]))}});export{Ce as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.