import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{Pn as t,ct as n,ki as r,on as i,sn as a}from"./lucide-icons-BjbcRgLk.js";import{t as o}from"./jsx-runtime-By8HlURe.js";import{t as s}from"./useAppContext-ZpOJAKgd.js";import{r as c}from"./react-intl-DZWxPhxo.js";import{a as l,o as u,r as d,t as f}from"./encryptedFile-DKFYUsvG.js";import{t as p}from"./utils-BFSTDHdM.js";import{t as m}from"./button-PfnADMEc.js";import{n as h}from"./appBlossom-CsMDSd4h.js";var g=e(r(),1),_=/^\/([a-f0-9]{64})\b/;function v(e,t){try{let n=new URL(e);if(!_.test(n.pathname))return[];let{origin:r}=n;return t.filter(e=>{try{return new URL(e).origin!==r}catch{return!1}}).map(e=>`${new URL(e).origin}${n.pathname}${n.search}`)}catch{return[]}}function y(e){let{config:t}=s(),[n,r]=(0,g.useState)(-1),i=(0,g.useRef)(!1),a=h(t.blossomServerMetadata,t.useAppBlossomServers),o=(0,g.useMemo)(()=>v(e,a),[e,t.blossomServerMetadata,t.useAppBlossomServers]);return{src:n<0?e:o[n]??e,onError:(0,g.useCallback)(()=>{o.length!==0&&r(e=>{let t=e+1;return t=o.length-1}}function b(e,t,n={}){let{enabled:r=!0}=n,{config:i}=s(),[a,o]=(0,g.useState)({error:!1}),[c,u]=(0,g.useState)(!1),{algorithm:p,key:m,nonce:_,hash:y,mime:b}=t??{},x=t?.fallbacks?.join(` `),S=h(i.blossomServerMetadata,i.useAppBlossomServers),C=(0,g.useMemo)(()=>v(e,S),[e,S.join(` `)]),w=!!t&&!l(t);(0,g.useEffect)(()=>u(!1),[e]),(0,g.useEffect)(()=>{if(!p||!m||!_||w){o({error:w});return}if(!r)return;let t,n=!1,i=new AbortController;return o({error:!1}),d(e,{algorithm:p,key:m,nonce:_,hash:y,mime:b,fallbacks:x?x.split(` `):void 0},{signal:i.signal,fallbackUrls:C,...c?{maxBytes:1/0}:{}}).then(e=>{if(n){URL.revokeObjectURL(e.objectUrl);return}t=e.objectUrl,o({src:e.objectUrl,mime:e.mime,error:!1})}).catch(e=>{n||(e instanceof f?o({error:!1,tooLarge:e.byteSize}):o({error:!0}))}),()=>{n=!0,i.abort(),t&&URL.revokeObjectURL(t)}},[e,p,m,_,y,b,x,w,C,r,c]);let T=(0,g.useCallback)(()=>u(!0),[]);if(!t)return{src:e,mime:void 0,encrypted:!1,loading:!1,error:!1,unsupported:!1,tooLarge:!1,byteSize:void 0,decryptAnyway:T};let E=a.tooLarge!==void 0;return{src:a.src,mime:a.mime??b,encrypted:!0,loading:r&&!a.src&&!a.error&&!E,error:a.error,unsupported:w,tooLarge:E,byteSize:a.tooLarge,decryptAnyway:T}}function x(e){return e<1024?`${e} B`:e<1024*1024?`${Math.round(e/1024)} KB`:e<1024*1024*1024?`${Math.round(e/(1024*1024))} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}var S=o();function C({loading:e,unsupported:r,tooLarge:o,byteSize:s,onDecryptAnyway:l,fill:u,className:d}){let f=e?i:o?t:r?n:a;return(0,S.jsxs)(`div`,{className:p(`flex flex-col items-center justify-center gap-2 bg-muted/50 text-muted-foreground`,u?`absolute inset-0 p-4`:`my-2 min-h-32 rounded-xl border border-dashed border-border px-6 py-8`,d),children:[(0,S.jsx)(f,{className:p(`size-5 shrink-0`,e&&`motion-safe:animate-pulse`),"aria-hidden":!0}),(0,S.jsx)(`p`,{className:`text-sm text-center text-balance`,children:e?(0,S.jsx)(c,{id:`encryptedFile.decrypting`,defaultMessage:`Decrypting…`}):o?s===void 0?(0,S.jsx)(c,{id:`encryptedFile.tooLarge`,defaultMessage:`This encrypted file is large. Decrypting it may use a lot of memory.`}):(0,S.jsx)(c,{id:`encryptedFile.tooLargeWithSize`,defaultMessage:`This encrypted file is {size}. Decrypting it may use a lot of memory.`,values:{size:x(s)}}):r?(0,S.jsx)(c,{id:`encryptedFile.unsupported`,defaultMessage:`This file uses an encryption method Ditto doesn't support.`}):(0,S.jsx)(c,{id:`encryptedFile.failed`,defaultMessage:`This encrypted file couldn't be decrypted.`})}),o&&l&&(0,S.jsx)(m,{variant:`outline`,size:`sm`,className:`rounded-full`,onClick:e=>{e.stopPropagation(),e.preventDefault(),l()},children:(0,S.jsx)(c,{id:`encryptedFile.decryptAnyway`,defaultMessage:`Decrypt anyway`})})]})}function w(e){let t=[];for(let n of e){if(n[0]!==`imeta`)continue;let e={},r=[];for(let t=1;t