diff --git a/crates/librqbit/webui/dist/assets/index.js b/crates/librqbit/webui/dist/assets/index.js index c3eb5ed..db73821 100644 --- a/crates/librqbit/webui/dist/assets/index.js +++ b/crates/librqbit/webui/dist/assets/index.js @@ -53,4 +53,4 @@ Error generating stack: `+i.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Qi=C,cg=ag;function fg(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var dg=typeof Object.is=="function"?Object.is:fg,pg=cg.useSyncExternalStore,hg=Qi.useRef,mg=Qi.useEffect,gg=Qi.useMemo,vg=Qi.useDebugValue;Gd.useSyncExternalStoreWithSelector=function(e,t,n,r,l){var i=hg(null);if(i.current===null){var o={hasValue:!1,value:null};i.current=o}else o=i.current;i=gg(function(){function a(w){if(!f){if(f=!0,y=w,w=r(w),l!==void 0&&o.hasValue){var S=o.value;if(l(S,w))return x=S}return x=w}if(S=x,dg(y,w))return S;var k=r(w);return l!==void 0&&l(S,k)?S:(y=w,x=k)}var f=!1,y,x,v=n===void 0?null:n;return[function(){return a(t())},v===null?void 0:function(){return a(v())}]},[t,n,r,l]);var s=pg(e,i[0],i[1]);return mg(function(){o.hasValue=!0,o.value=s},[s]),vg(s),s};Zd.exports=Gd;var yg=Zd.exports;const xg=il(yg),{useDebugValue:wg}=Et,{useSyncExternalStoreWithSelector:Sg}=xg;const kg=e=>e;function Eg(e,t=kg,n){const r=Sg(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return wg(r),r}const yc=e=>{const t=typeof e=="function"?bm(e):e,n=(r,l)=>Eg(t,r,l);return Object.assign(n,t),n},Jd=e=>e?yc(e):yc,Cg=(e,t)=>e.id==t.id&&e.info_hash==t.info_hash,_g=(e,t)=>e===null&&t===null?!0:e===null||t===null?!1:e.length===t.length&&e.every((n,r)=>Cg(n,t[r])),vn=Jd(e=>({torrents:null,torrentsLoading:!1,torrentsInitiallyLoading:!1,setTorrentsLoading:t=>e(n=>n.torrents==null?{torrentsInitiallyLoading:t,torrentsLoading:t}:{torrentsInitiallyLoading:!1,torrentsLoading:t}),setTorrents:t=>e(n=>_g(n.torrents,t)?{}:{torrents:t}),refreshTorrents:()=>{},setRefreshTorrents:t=>e({refreshTorrents:t})})),Tg=({id:e,show:t,onHide:n})=>{if(!t)return null;const[r,l]=C.useState(!1),[i,o]=C.useState(null),[s,a]=C.useState(!1),f=C.useContext(Lt),y=vn(w=>w.refreshTorrents),x=()=>{l(!1),o(null),a(!1),n()},v=()=>{a(!0),(r?f.delete:f.forget)(e).then(()=>{y(),x()}).catch(S=>{o({text:`Error deleting torrent id=${e}`,details:S}),a(!1)})};return d.jsxs(Hi,{isOpen:t,onClose:n,title:"Delete torrent",children:[d.jsxs(Vi,{children:[d.jsx("p",{className:"text-gray-700 dark:text-slate-300",children:"Are you sure you want to delete the torrent?"}),d.jsxs("div",{className:"mt-4 flex items-center",children:[d.jsx("input",{type:"checkbox",id:"deleteFiles",className:"form-checkbox h-4 w-4 text-blue-500",onChange:()=>l(!r),checked:r,placeholder:"Also delete files"}),d.jsx("label",{htmlFor:"deleteFiles",className:"ml-2 text-gray-700 dark:text-slate-300",children:"Also delete files"})]}),i&&d.jsx(En,{error:i})]}),d.jsxs(Wi,{children:[s&&d.jsx(Ei,{}),d.jsx(en,{variant:"cancel",onClick:x,children:"Cancel"}),d.jsx(en,{variant:"danger",onClick:v,disabled:s,children:"Delete Torrent"})]})]})};function jg(e){return ae({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"}}]})(e)}function Ng(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"}}]})(e)}function Pg(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"}}]})(e)}function Lg(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"}}]})(e)}const bn=Jd(e=>({closeableError:null,setCloseableError:t=>e(()=>({closeableError:t})),otherError:null,setOtherError:t=>e(()=>({otherError:t}))})),Og=({id:e,statsResponse:t,extendedView:n,setExtendedView:r})=>{let l=t.state,[i,o]=C.useState(!1),[s,a]=C.useState(!1),f=C.useContext(Ps);const y=l=="live",x=l=="paused"||l=="error",v=l=="paused"||l=="live",w=bn(m=>m.setCloseableError),S=C.useContext(Lt),k=()=>{o(!0),S.start(e).then(()=>{f.refresh()},m=>{w({text:`Error starting torrent id=${e}`,details:m})}).finally(()=>o(!1))},z=()=>{o(!0),S.pause(e).then(()=>{f.refresh()},m=>{w({text:`Error pausing torrent id=${e}`,details:m})}).finally(()=>o(!1))},h=()=>{o(!0),a(!0)},p=()=>{o(!1),a(!1)};return d.jsxs("div",{className:"flex w-full justify-center gap-2 dark:text-slate-300",children:[x&&d.jsx(hn,{onClick:k,disabled:i,children:d.jsx(Pg,{className:"hover:text-green-600"})}),y&&d.jsx(hn,{onClick:z,disabled:i,children:d.jsx(Ng,{className:"hover:text-amber-500"})}),v&&d.jsx(hn,{onClick:()=>r(!n),disabled:i,children:d.jsx(jg,{className:"hover:text-green-600"})}),d.jsx(hn,{onClick:h,disabled:i,children:d.jsx(Lg,{className:"hover:text-red-500"})}),d.jsx(Tg,{id:e,show:s,onHide:p})]})},xc={warn:"bg-amber-500 text-white",info:"bg-blue-500 text-white",success:"bg-green-700 text-white",error:"bg-red-500 text-white"},qd=({now:e,variant:t,label:n,classNames:r})=>{const l=n??`${e.toFixed(2)}%`,i=xc[t??"info"]??xc.info;return d.jsx("div",{className:`w-full bg-gray-200 rounded-full mb-1 dark:bg-gray-500 ${r}`,children:d.jsx("div",{className:`text-xs font-medium transition-all text-center leading-none py-0.5 px-2 rounded-full ${i} ${e<1&&"bg-transparent"}`,style:{width:`${e}%`},children:l})})};function ll(e){if(e===0)return"0 Bytes";const t=1024,n=["Bytes","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,r)).toFixed(2))+" "+n[r]}const Mg=({statsResponse:e})=>{var t,n;switch(e.state){case rm:return"Paused";case Ls:return"Checking files";case im:return"Error"}return e.state!="live"||e.live===null?e.state:d.jsxs(d.Fragment,{children:[!e.finished&&d.jsxs("div",{className:"download-speed",children:["↓ ",(t=e.live.download_speed)==null?void 0:t.human_readable]}),d.jsxs("div",{className:"upload-speed",children:["↑ ",(n=e.live.upload_speed)==null?void 0:n.human_readable,e.live.snapshot.uploaded_bytes>0&&d.jsxs("span",{children:["(",ll(e.live.snapshot.uploaded_bytes),")"]})]})]})};function zg(e){return e.files.filter(n=>n.included).reduce((n,r)=>n.length>r.length?n:r).name}function Fg(e){return e.name??zg(e)}function Ig(e){const t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60,l=(i,o)=>i>0?`${i}${o}`:"";return t>0?`${l(t,"h")} ${l(n,"m")}`.trim():n>0?`${l(n,"m")} ${l(r,"s")}`.trim():`${l(r,"s")}`.trim()}function Dg(e){var n,r,l;let t=(l=(r=(n=e==null?void 0:e.live)==null?void 0:n.time_remaining)==null?void 0:r.duration)==null?void 0:l.secs;return t==null?"N/A":Ig(t)}function Rg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}}]})(e)}function Ag(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}}]})(e)}function $g(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M5 20h14v-2H5v2zM19 9h-4V3H9v6H5l7 7 7-7z"}}]})(e)}function Ug(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M9 16h6v-6h4l-7-7-7 7h4v6zm3-10.17L14.17 8H13v6h-2V8H9.83L12 5.83zM5 18h14v2H5z"}}]})(e)}function Bg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 12c0 5.52-4.48 10-10 10S2 17.52 2 12c0-1.19.22-2.32.6-3.38l1.88.68C4.17 10.14 4 11.05 4 12c0 4.41 3.59 8 8 8s8-3.59 8-8-3.59-8-8-8c-.95 0-1.85.17-2.69.48l-.68-1.89C9.69 2.22 10.82 2 12 2c5.52 0 10 4.48 10 10zM5.5 4C4.67 4 4 4.67 4 5.5S4.67 7 5.5 7 7 6.33 7 5.5 6.33 4 5.5 4zM11 16V8H9v8h2zm4 0V8h-2v8h2z"}}]})(e)}const Hg=({className:e,finished:t,live:n,error:r})=>{const l=t&&n;return r?d.jsx(Ag,{className:e,color:"red"}):l?d.jsx(Ug,{className:e,color:"green"}):t?d.jsx(Rg,{className:e,color:"green"}):n?d.jsx($g,{className:`text-blue-500 ${e}`}):d.jsx(Bg,{className:e})},wc=({checked:e,name:t,disabled:n,onChange:r,label:l,help:i,inputType:o,children:s})=>d.jsxs("div",{className:"flex gap-3 items-start",children:[d.jsx("div",{className:"flex",children:d.jsx("input",{type:o||"checkbox",className:"block mt-1",id:t,name:t,disabled:n,checked:e,onChange:r})}),d.jsxs("div",{className:"text-sm flex flex-col gap-1",children:[d.jsx("label",{htmlFor:t,children:l}),i&&d.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-300 mb-3",children:i})]}),s]});function Vg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"g",attr:{id:"Square_Minus"},child:[{tag:"g",attr:{},child:[{tag:"path",attr:{d:"M18.438,20.938H5.564a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.564,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z"}},{tag:"path",attr:{d:"M9,12.5a.5.5,0,0,1,0-1h6a.5.5,0,0,1,0,1Z"}}]}]}]})(e)}function Wg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"g",attr:{id:"Square_Plus"},child:[{tag:"g",attr:{},child:[{tag:"path",attr:{d:"M18.438,20.938H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z"}},{tag:"path",attr:{d:"M15,12.5H12.5V15a.5.5,0,0,1-1,0V12.5H9a.5.5,0,0,1,0-1h2.5V9a.5.5,0,0,1,1,0v2.5H15A.5.5,0,0,1,15,12.5Z"}}]}]}]})(e)}var Ci={exports:{}};Ci.exports;(function(e,t){var n=200,r="Expected a function",l="__lodash_hash_undefined__",i=1,o=2,s=1/0,a=9007199254740991,f="[object Arguments]",y="[object Array]",x="[object Boolean]",v="[object Date]",w="[object Error]",S="[object Function]",k="[object GeneratorFunction]",z="[object Map]",h="[object Number]",p="[object Object]",m="[object Promise]",_="[object RegExp]",T="[object Set]",j="[object String]",O="[object Symbol]",F="[object WeakMap]",W="[object ArrayBuffer]",A="[object DataView]",we="[object Float32Array]",ft="[object Float64Array]",dt="[object Int8Array]",Tn="[object Int16Array]",fr="[object Int32Array]",Ae="[object Uint8Array]",rt="[object Uint8ClampedArray]",P="[object Uint16Array]",R="[object Uint32Array]",$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,K=/^\w*$/,ee=/^\./,Ge=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/[\\^$.*+?()[\]{}|]/g,pt=/\\(\\)?/g,Ye=/^\[object .+?Constructor\]$/,Ot=/^(?:0|[1-9]\d*)$/,Z={};Z[we]=Z[ft]=Z[dt]=Z[Tn]=Z[fr]=Z[Ae]=Z[rt]=Z[P]=Z[R]=!0,Z[f]=Z[y]=Z[W]=Z[x]=Z[A]=Z[v]=Z[w]=Z[S]=Z[z]=Z[h]=Z[p]=Z[_]=Z[T]=Z[j]=Z[F]=!1;var jn=typeof Ut=="object"&&Ut&&Ut.Object===Object&&Ut,dr=typeof self=="object"&&self&&self.Object===Object&&self,lt=jn||dr||Function("return this")(),pr=t&&!t.nodeType&&t,Nn=pr&&!0&&e&&!e.nodeType&&e,Pn=Nn&&Nn.exports===pr,q=Pn&&jn.process,hr=function(){try{return q&&q.binding("util")}catch{}}(),Ln=hr&&hr.isTypedArray;function l0(u,c,g){switch(g.length){case 0:return u.call(c);case 1:return u.call(c,g[0]);case 2:return u.call(c,g[0],g[1]);case 3:return u.call(c,g[0],g[1],g[2])}return u.apply(c,g)}function Ds(u,c){for(var g=-1,E=u?u.length:0,M=Array(E);++g-1}function F0(u,c){var g=this.__data__,E=ml(g,u);return E<0?g.push([u,c]):g[E][1]=c,this}mt.prototype.clear=L0,mt.prototype.delete=O0,mt.prototype.get=M0,mt.prototype.has=z0,mt.prototype.set=F0;function gt(u){var c=-1,g=u?u.length:0;for(this.clear();++c0&&g(U)?c>1?Ws(U,c-1,g,E,M):i0(M,U):E||(M[M.length]=U)}return M}var Y0=m1();function X0(u,c){return u&&Y0(u,c,wl)}function Qs(u,c){c=vl(c,u)?[c]:Ks(c);for(var g=0,E=c.length;u!=null&&gc||L&&D&&H&&!U&&!G||E&&D&&H||!g&&H||!M)return 1;if(!E&&!L&&!G&&u=U)return H;var G=g[E];return H*(G=="desc"?-1:1)}}return u.index-c.index}function h1(u,c){return function(g,E){if(g==null)return g;if(!vr(g))return u(g,E);for(var M=g.length,L=c?M:-1,D=Object(g);(c?L--:++LU))return!1;var G=L.get(u);if(G&&L.get(c))return G==c;var Se=-1,Te=!0,ce=M&i?new hl:void 0;for(L.set(u,c),L.set(c,u);++Se-1&&u%1==0&&u1&&Gs(u,c[0],c[1])?c=[]:g>2&&Gs(c[0],c[1],c[2])&&(c=[c[0]]),s1(u,Ws(c,1),[])});function no(u,c){if(typeof u!="function"||c&&typeof c!="function")throw new TypeError(r);var g=function(){var E=arguments,M=c?c.apply(this,E):E[0],L=g.cache;if(L.has(M))return L.get(M);var D=u.apply(this,E);return g.cache=L.set(M,D),D};return g.cache=new(no.Cache||gt),g}no.Cache=gt;function ro(u,c){return u===c||u!==u&&c!==c}function lo(u){return T1(u)&&ht.call(u,"callee")&&(!v0.call(u,"callee")||On.call(u)==f)}var zt=Array.isArray;function vr(u){return u!=null&&io(u.length)&&!Js(u)}function T1(u){return xl(u)&&vr(u)}function Js(u){var c=yr(u)?On.call(u):"";return c==S||c==k}function io(u){return typeof u=="number"&&u>-1&&u%1==0&&u<=a}function yr(u){var c=typeof u;return!!u&&(c=="object"||c=="function")}function xl(u){return!!u&&typeof u=="object"}function xr(u){return typeof u=="symbol"||xl(u)&&On.call(u)==O}var j1=Ln?Rs(Ln):n1;function N1(u){return u==null?"":f1(u)}function P1(u,c,g){var E=u==null?void 0:Qs(u,c);return E===void 0?g:E}function L1(u,c){return u!=null&&x1(u,c,q0)}function wl(u){return vr(u)?Z0(u):l1(u)}function qs(u){return u}function O1(u){return vl(u)?u0(yl(u)):a1(u)}e.exports=_1})(Ci,Ci.exports);var Qg=Ci.exports;const Sc=il(Qg),Kg=(e,t)=>{const n=(r,l,i,o)=>{let s=[],a=[],f={};const y=w=>(f[w]=f[w]||[],f[w]);i.forEach(w=>{if(o==w.pathComponents.length-1){s.push(w);return}y(w.pathComponents[0]).push(w)}),s=Sc(s,w=>w.filename);let x=Sc(Object.entries(f),([w,S])=>w),v=0;for(const[w,S]of x)a.push(n(w,l+"."+v,S,o+1)),v+=1;return{name:r,id:l,dirs:a,files:s}};return n("","filetree-root",e.files.map((r,l)=>({id:l,filename:r.components[r.components.length-1],pathComponents:r.components,length:r.length,have_bytes:t?t.file_progress[l]??0:0})),0)},bd=({tree:e,selectedFiles:t,setSelectedFiles:n,initialExpanded:r,torrentDetails:l,torrentStats:i,showProgressBar:o,disabled:s})=>{let[a,f]=C.useState(r),y=C.useMemo(()=>{let k=z=>{let h=z.dirs.flatMap(k);return h.push(...z.files.map(p=>p.id)),h};return k(e)},[e]);const x=k=>{if(k.target.checked){let z=new Set(t);y.forEach(h=>z.add(h)),n(z)}else{let z=new Set(t);y.forEach(h=>z.delete(h)),n(z)}},v=k=>{if(t.has(k)){let z=new Set(t);z.delete(k),n(z)}else{let z=new Set(t);z.add(k),n(z)}},w=()=>y.filter(k=>t.has(k)).length,S=()=>y.filter(k=>t.has(k)).map(k=>l.files[k].length).reduce((k,z)=>k+z,0);return d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex items-center",children:[d.jsx(hn,{onClick:()=>f(!a),children:a?d.jsx(Vg,{}):d.jsx(Wg,{})}),d.jsx(wc,{checked:y.every(k=>t.has(k)),label:`${e.name?e.name+", ":""} ${w()} files, ${ll(S())}`,name:e.id,onChange:x})]}),d.jsxs("div",{className:"pl-5",hidden:!a,children:[e.dirs.map(k=>d.jsx(bd,{torrentDetails:l,torrentStats:i,tree:k,selectedFiles:t,setSelectedFiles:n,initialExpanded:!1,showProgressBar:o,disabled:s},k.name)),d.jsx("div",{className:"pl-1",children:e.files.map(k=>d.jsxs("div",{className:`${o?"grid grid-cols-1 gap-1 items-start lg:grid-cols-2 mb-2 lg:mb-0":""}`,children:[d.jsx(wc,{checked:t.has(k.id),label:`${k.filename} (${ll(k.length)})`,name:`file-${k.id}`,disabled:s,onChange:()=>v(k.id)}),o&&d.jsx(qd,{now:k.have_bytes/k.length*100,variant:k.have_bytes==k.length?"success":"info"})]},k.id))})]})]})},e0=({torrentDetails:e,selectedFiles:t,setSelectedFiles:n,torrentStats:r,showProgressBar:l,disabled:i})=>{let o=C.useMemo(()=>Kg(e,r),[e,r]);return d.jsx(bd,{torrentDetails:e,torrentStats:r,tree:o,selectedFiles:t,setSelectedFiles:n,initialExpanded:!0,showProgressBar:l,disabled:i})},Zg=({id:e,detailsResponse:t,statsResponse:n})=>{const r=(n==null?void 0:n.state)??"",l=(n==null?void 0:n.error)??null,i=(n==null?void 0:n.total_bytes)??1,o=(n==null?void 0:n.progress_bytes)??0,s=(n==null?void 0:n.finished)||!1,a=l||i==0?100:o/i*100,f=()=>{var j;let T=(j=n==null?void 0:n.live)==null?void 0:j.snapshot.peer_stats;return T?`${T.live} / ${T.seen}`:""},y=T=>d.jsx(Hg,{className:T,error:!!l,live:!!(n!=null&&n.live),finished:s}),[x,v]=C.useState(new Set);C.useEffect(()=>{v(new Set((t==null?void 0:t.files.map((T,j)=>({f:T,id:j})).filter(({f:T})=>T.included).map(({id:T})=>T))??[]))},[t]);const w=C.useContext(Lt),S=C.useContext(Ps),[k,z]=C.useState(!1);let h=bn(T=>T.setCloseableError);const p=T=>{z(!0),w.updateOnlyFiles(e,Array.from(T)).then(()=>{S.refresh(),h(null)},j=>{h({text:"Error configuring torrent",details:j})}).finally(()=>z(!1))},[m,_]=C.useState(!1);return d.jsxs("div",{className:"flex flex-col border p-2 border-gray-200 rounded-xl shadow-xs hover:drop-shadow-sm dark:bg-slate-800 dark:border-slate-900",children:[d.jsxs("section",{className:"flex flex-col lg:flex-row items-center gap-2",children:[d.jsx("div",{className:"hidden md:block",children:y("w-10 h-10")}),d.jsxs("div",{className:"w-full flex flex-col gap-2",children:[t&&d.jsxs("div",{className:"flex items-center gap-2",children:[d.jsx("div",{className:"md:hidden",children:y("w-5 h-5")}),d.jsx("div",{className:"text-left text-lg text-gray-900 text-ellipsis break-all dark:text-slate-200",children:Fg(t)})]}),l?d.jsxs("p",{className:"text-red-500 text-sm",children:[d.jsx("strong",{children:"Error:"})," ",l]}):d.jsxs(d.Fragment,{children:[d.jsx("div",{children:d.jsx(qd,{now:a,label:l,variant:r==Ls?"warn":s?"success":"info"})}),d.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-2 sm:flex-wrap items-center text-sm text-nowrap font-medium text-gray-500",children:[d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(cm,{})," ",f().toString()]}),d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(am,{}),d.jsxs("div",{children:[ll(o),"/",ll(i)]})]}),n&&d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(sm,{}),Dg(n)]}),d.jsx("div",{className:"flex gap-2 items-center",children:d.jsx(Mg,{statsResponse:n})})]})]})]})]}),n&&d.jsx("div",{className:"",children:d.jsx(Og,{id:e,statsResponse:n,extendedView:m,setExtendedView:_})})]}),t&&m&&d.jsx("div",{className:"",children:d.jsx(e0,{torrentDetails:t,torrentStats:n,selectedFiles:x,setSelectedFiles:p,disabled:k,showProgressBar:!0})})]})},Gg=({id:e,torrent:t})=>{const[n,r]=C.useState(null),[l,i]=C.useState(null),[o,s]=C.useState(0),a=C.useContext(Lt),f=()=>{s(o+1)};return C.useEffect(()=>Ud(async()=>{await a.getTorrentDetails(t.id).then(r)},1e3),[o]),C.useEffect(()=>Os(async()=>a.getTorrentStats(t.id).then(w=>(i(w),w)).then(w=>w.state==Ls||w.state==lm?1e3:1e4,()=>1e4),0),[o]),d.jsx(Ps.Provider,{value:{refresh:f},children:d.jsx(Zg,{id:e,detailsResponse:n,statsResponse:l})})},Yg=e=>d.jsx("div",{className:"flex flex-col gap-2 mx-2 pb-3 sm:px-7",children:e.torrents===null?e.loading?d.jsx(Ei,{className:"justify-center m-5",label:"Loading torrent list"}):null:e.torrents.length===0?d.jsx("p",{className:"text-center",children:"No existing torrents found."}):e.torrents.map(t=>d.jsx(Gg,{id:t.id,torrent:t},t.id))}),Xg=e=>{let t=bn(o=>o.closeableError),n=bn(o=>o.setCloseableError),r=bn(o=>o.otherError),l=vn(o=>o.torrents),i=vn(o=>o.torrentsInitiallyLoading);return d.jsxs("div",{className:"container mx-auto",children:[d.jsx(En,{error:t,remove:()=>n(null)}),d.jsx(En,{error:r}),d.jsx(Yg,{torrents:l,loading:i})]})};var Jg="Expected a function",kc=0/0,qg="[object Symbol]",bg=/^\s+|\s+$/g,ev=/^[-+]0x[0-9a-f]+$/i,tv=/^0b[01]+$/i,nv=/^0o[0-7]+$/i,rv=parseInt,lv=typeof Ut=="object"&&Ut&&Ut.Object===Object&&Ut,iv=typeof self=="object"&&self&&self.Object===Object&&self,ov=lv||iv||Function("return this")(),uv=Object.prototype,sv=uv.toString,av=Math.max,cv=Math.min,Ao=function(){return ov.Date.now()};function fv(e,t,n){var r,l,i,o,s,a,f=0,y=!1,x=!1,v=!0;if(typeof e!="function")throw new TypeError(Jg);t=Ec(t)||0,Fu(n)&&(y=!!n.leading,x="maxWait"in n,i=x?av(Ec(n.maxWait)||0,t):i,v="trailing"in n?!!n.trailing:v);function w(j){var O=r,F=l;return r=l=void 0,f=j,o=e.apply(F,O),o}function S(j){return f=j,s=setTimeout(h,t),y?w(j):o}function k(j){var O=j-a,F=j-f,W=t-O;return x?cv(W,i-F):W}function z(j){var O=j-a,F=j-f;return a===void 0||O>=t||O<0||x&&F>=i}function h(){var j=Ao();if(z(j))return p(j);s=setTimeout(h,k(j))}function p(j){return s=void 0,v&&r?w(j):(r=l=void 0,o)}function m(){s!==void 0&&clearTimeout(s),f=0,r=a=l=s=void 0}function _(){return s===void 0?o:p(Ao())}function T(){var j=Ao(),O=z(j);if(r=arguments,l=this,a=j,O){if(s===void 0)return S(a);if(x)return s=setTimeout(h,t),w(a)}return s===void 0&&(s=setTimeout(h,t)),o}return T.cancel=m,T.flush=_,T}function Fu(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function dv(e){return!!e&&typeof e=="object"}function pv(e){return typeof e=="symbol"||dv(e)&&sv.call(e)==qg}function Ec(e){if(typeof e=="number")return e;if(pv(e))return kc;if(Fu(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Fu(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(bg,"");var n=tv.test(e);return n||nv.test(e)?rv(e.slice(2),n?2:8):ev.test(e)?kc:+e}var hv=fv;const mv=il(hv),gv=({span:e})=>{let t=Object.entries(e).filter(([n,r])=>n!="name");return t.length==0?null:d.jsxs(d.Fragment,{children:["{",t.map(([n,r])=>d.jsxs("span",{children:[n," = ",r]},n)).reduce((n,r)=>d.jsxs(d.Fragment,{children:[n,", ",r]})),"}"]})},vv=({span:e})=>d.jsxs(d.Fragment,{children:[d.jsx("span",{className:"font-bold",children:e.name}),d.jsx(gv,{span:e}),d.jsx("span",{className:"font-bold",children:":"})]}),yv=({fields:e})=>d.jsxs("span",{className:`m-1 ${e.message.match(/error|fail/g)?"text-red-500":"text-slate-500 dark:text-slate-200"}`,children:[e.message,Object.entries(e).filter(([t,n])=>t!="message").map(([t,n])=>d.jsxs("span",{className:"m-1",children:[d.jsx("span",{className:"italic font-bold",children:t}),"=",n]},t))]}),xv=Et.memo(({line:e})=>{var r;const t=e,n=l=>{switch(l){case"DEBUG":return"text-blue-500";case"INFO":return"text-green-500";case"WARN":return"text-amber-500";case"ERROR":return"text-red-500";default:return"text-slate-500"}};return d.jsxs("p",{className:"font-mono m-0 text-break text-[10px]",children:[d.jsx("span",{className:"m-1 text-slate-500 dark:text-slate-400",children:t.timestamp}),d.jsx("span",{className:`m-1 ${n(t.level)}`,children:t.level}),d.jsx("span",{className:"m-1",children:(r=t.spans)==null?void 0:r.map((l,i)=>d.jsx(vv,{span:l},i))}),d.jsx("span",{className:"m-1 text-slate-500 dark:text-slate-400",children:t.target}),d.jsx(yv,{fields:t.fields})]})}),t0=({children:e})=>d.jsx("form",{children:e}),Is=({autoFocus:e,value:t,name:n,disabled:r,onChange:l,onKeyDown:i,label:o,help:s,inputType:a,placeholder:f})=>d.jsxs("div",{className:"flex flex-col gap-2 text-sm mb-2",children:[d.jsx("label",{htmlFor:n,className:"dark:text-white",children:o}),d.jsx("input",{autoFocus:e,type:a,className:"block border rounded bg-transparent py-1.5 pl-2 text-gray-800 focus:ring-0 sm:text-sm sm:leading-6 dark:text-slate-300",id:n,name:n,disabled:r,placeholder:f,value:t,onKeyDown:i,onChange:l}),s&&d.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-300",children:s})]}),wv=(e,t)=>{if(e.length===0)return t;if(t.length===0)return e;const n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n},Sv=(e,t,n)=>{const r=new AbortController,l=r.signal;let i=!1;const o=()=>{console.log("cancelling fetch"),i=!0,r.abort()},s=async()=>{let f=await fetch(e,{signal:l});if(!f.ok){let v=await f.text();throw n({text:"error fetching logs",details:{statusText:f.statusText,text:v}}),null}if(!f.body){n({text:"error fetching logs: ReadableStream not supported."});return}n(null);const y=f.body.getReader();let x=new Uint8Array;for(;;){const{done:v,value:w}=await y.read();if(v)throw n({text:"log stream terminated"}),null;x=wv(x,w);for(let S;(S=x.indexOf(10))!==-1;){let k=x.slice(0,S),z=new TextDecoder().decode(k);t(z),x=x.slice(S+1)}}};let a=Ud(()=>s().then(()=>{},f=>{if(!i&&f!==null)throw n({text:"error streaming logs",details:{text:f.toString()}}),f}),1e3);return()=>{o(),a()}},kv=({url:e,maxLines:t})=>{const[n,r]=C.useState([]),[l,i]=C.useState(null),[o,s]=C.useState(""),a=C.useRef(null),f=t??1e3,y=C.useCallback(S=>{r(k=>[{id:k.length==0?0:k[0].id+1,content:S,parsed:JSON.parse(S),show:a.current?!!S.match(a.current):!0},...k.slice(0,f-1)])},[a.current,t]),x=C.useRef(y);x.current=y;const v=mv(S=>{let k=null;try{k=new RegExp(S)}catch{return}a.current=k,r(z=>{let h=[...z];for(let p of h)p.show=!!p.content.match(k);return h})},200),w=S=>{s(S),v(S)};return C.useEffect(()=>v.cancel,[]),C.useEffect(()=>Sv(e,S=>x.current(S),i),[e]),d.jsxs("div",{children:[d.jsx(En,{error:l}),d.jsxs("div",{className:"mb-3",children:["Showing last ",f," logs since this window was opened"]}),d.jsx(t0,{children:d.jsx(Is,{value:o,name:"filter",placeholder:"Enter filter (regex)",onChange:S=>w(S.target.value)})}),n.map(S=>d.jsx("div",{hidden:!S.show,children:d.jsx(xv,{line:S.parsed})},S.id))]})},Ev=({show:e,onClose:t})=>{let r=C.useContext(Lt).getStreamLogsUrl();return d.jsxs(Hi,{isOpen:e,onClose:t,title:"rqbit server logs",className:"max-w-7xl",children:[d.jsx(Vi,{children:r?d.jsx(kv,{url:r}):d.jsx(En,{error:{text:"HTTP API not available to stream logs"}})}),d.jsx(Wi,{children:d.jsx(en,{variant:"primary",onClick:t,children:"Close"})})]})},Cv=({children:e,label:t,help:n,className:r})=>d.jsxs("fieldset",{className:`mb-4 ${r}`,children:[t&&d.jsx("label",{className:"text-md font-md mb-3 block pb-1 border-b",children:t}),e]}),_v=e=>{let{onHide:t,listTorrentResponse:n,listTorrentError:r,listTorrentLoading:l,data:i}=e;const[o,s]=C.useState(new Set),[a,f]=C.useState(!1),[y,x]=C.useState(null),[v,w]=C.useState(!1),[S,k]=C.useState(""),z=vn(T=>T.refreshTorrents),h=C.useContext(Lt);C.useEffect(()=>{s(new Set(n==null?void 0:n.details.files.map((T,j)=>j))),k((n==null?void 0:n.output_folder)||"")},[n]);const p=()=>{t(),s(new Set),x(null),f(!1)},m=async()=>{if(!n)return;f(!0);let T=n.seen_peers?n.seen_peers.slice(0,32):null,j={overwrite:!0,only_files:Array.from(o),initial_peers:T,output_folder:S};v&&(j.peer_opts={connect_timeout:20,read_write_timeout:60}),h.uploadTorrent(i,j).then(()=>{t(),z()},O=>{x({text:"Error starting torrent",details:O})}).finally(()=>f(!1))},_=()=>{if(l)return d.jsx(Ei,{label:"Loading torrent contents"});if(r)return d.jsx(En,{error:r});if(n)return d.jsxs(t0,{children:[d.jsx(Is,{label:"Output folder",name:"output_folder",inputType:"text",value:S,onChange:T=>k(T.target.value)}),d.jsx(Cv,{children:d.jsx(e0,{selectedFiles:o,setSelectedFiles:s,torrentDetails:n.details,torrentStats:null})})]})};return d.jsxs(Hi,{isOpen:!0,onClose:p,title:"Add Torrent",children:[d.jsxs(Vi,{children:[_(),d.jsx(En,{error:y})]}),d.jsxs(Wi,{children:[a&&d.jsx(Ei,{}),d.jsx(en,{onClick:p,variant:"cancel",children:"Cancel"}),d.jsx(en,{onClick:m,variant:"primary",disabled:l||a||o.size==0,children:"OK"})]})]})},n0=({onClick:e,data:t,resetData:n,children:r,className:l})=>{const[i,o]=C.useState(!1),[s,a]=C.useState(null),[f,y]=C.useState(null),x=C.useContext(Lt);C.useEffect(()=>{if(t===null)return;let w=setTimeout(async()=>{o(!0);try{const S=await x.uploadTorrent(t,{list_only:!0});a(S)}catch(S){y({text:"Error listing torrent files",details:S})}finally{o(!1)}},0);return()=>clearTimeout(w)},[t]);const v=()=>{n(),y(null),a(null),o(!1)};return d.jsxs(d.Fragment,{children:[d.jsx(en,{onClick:e,className:l,children:r}),t&&d.jsx(_v,{onHide:v,listTorrentError:f,listTorrentResponse:s,data:t,listTorrentLoading:i})]})};function Tv(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none"},child:[{tag:"path",attr:{d:"M10 18V16H8V14H10V12H12V14H14V16H12V18H10Z",fill:"currentColor"}},{tag:"path",attr:{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2C4.34315 2 3 3.34315 3 5V19C3 20.6569 4.34315 22 6 22H18C19.6569 22 21 20.6569 21 19V9C21 5.13401 17.866 2 14 2H6ZM6 4H13V9H19V19C19 19.5523 18.5523 20 18 20H6C5.44772 20 5 19.5523 5 19V5C5 4.44772 5.44772 4 6 4ZM15 4.10002C16.6113 4.4271 17.9413 5.52906 18.584 7H15V4.10002Z",fill:"currentColor"}}]})(e)}function jv(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none"},child:[{tag:"path",attr:{d:"M14.8284 12L16.2426 13.4142L19.071 10.5858C20.6331 9.02365 20.6331 6.49099 19.071 4.9289C17.509 3.3668 14.9763 3.3668 13.4142 4.9289L10.5858 7.75732L12 9.17154L14.8284 6.34311C15.6095 5.56206 16.8758 5.56206 17.6568 6.34311C18.4379 7.12416 18.4379 8.39049 17.6568 9.17154L14.8284 12Z",fill:"currentColor"}},{tag:"path",attr:{d:"M12 14.8285L13.4142 16.2427L10.5858 19.0711C9.02372 20.6332 6.49106 20.6332 4.92896 19.0711C3.36686 17.509 3.36686 14.9764 4.92896 13.4143L7.75739 10.5858L9.1716 12L6.34317 14.8285C5.56212 15.6095 5.56212 16.8758 6.34317 17.6569C7.12422 18.4379 8.39055 18.4379 9.1716 17.6569L12 14.8285Z",fill:"currentColor"}},{tag:"path",attr:{d:"M14.8285 10.5857C15.219 10.1952 15.219 9.56199 14.8285 9.17147C14.4379 8.78094 13.8048 8.78094 13.4142 9.17147L9.1716 13.4141C8.78107 13.8046 8.78107 14.4378 9.1716 14.8283C9.56212 15.2188 10.1953 15.2188 10.5858 14.8283L14.8285 10.5857Z",fill:"currentColor"}}]})(e)}const Nv=({className:e})=>{const t=C.useRef(),[n,r]=C.useState(null),l=async()=>{var a;if(!((a=t==null?void 0:t.current)!=null&&a.files))return;const s=t.current.files[0];r(s)},i=()=>{t!=null&&t.current&&(t.current.value="",r(null))},o=()=>{t!=null&&t.current&&t.current.click()};return d.jsxs(d.Fragment,{children:[d.jsx("input",{type:"file",ref:t,accept:".torrent",onChange:l,hidden:!0}),d.jsxs(n0,{onClick:o,data:n,resetData:i,className:`group ${e}`,children:[d.jsx(Tv,{className:"text-blue-500 group-hover:text-white dark:text-white"}),d.jsx("div",{children:"Upload .torrent File"})]})]})},Pv=({className:e})=>{const[t,n]=C.useState(null),[r,l]=C.useState(""),[i,o]=C.useState(!1),s=()=>{n(r),l(""),o(!1)},a=()=>{o(!1),n(null)};return d.jsxs(d.Fragment,{children:[d.jsxs(n0,{onClick:()=>{o(!0)},data:t,className:`group ${e}`,resetData:()=>n(null),children:[d.jsx(jv,{className:"text-blue-500 group-hover:text-white dark:text-white"}),d.jsx("div",{children:"Add Torrent from Magnet / URL"})]}),d.jsxs(Hi,{isOpen:i,onClose:a,title:"Add torrent",children:[d.jsx(Vi,{children:d.jsx(Is,{autoFocus:!0,value:r,name:"magnet",onChange:f=>l(f.target.value),onKeyDown:f=>{f.key==="Enter"&&r&&s()},placeholder:"magnet:?xt=urn:btih:...",help:"Enter magnet or HTTP(S) URL to the .torrent"})}),d.jsxs(Wi,{children:[d.jsx(en,{variant:"cancel",onClick:a,children:"Cancel"}),d.jsx(en,{disabled:!r,variant:"primary",onClick:s,children:"Add"})]})]})]})},Lv=e=>C.createElement("svg",{width:"64mm",height:"64mm",viewBox:"0 0 64 64",id:"svg1",xmlSpace:"preserve","inkscape:version":"1.3.1 (91b66b0, 2023-11-16)","sodipodi:docname":"logo.svg","xmlns:inkscape":"http://www.inkscape.org/namespaces/inkscape","xmlns:sodipodi":"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",...e},C.createElement("sodipodi:namedview",{id:"namedview1",pagecolor:"#ffffff",bordercolor:"#000000",borderopacity:.25,"inkscape:showpageshadow":2,"inkscape:pageopacity":0,"inkscape:pagecheckerboard":0,"inkscape:deskcolor":"#d1d1d1","inkscape:document-units":"mm","inkscape:zoom":1.4936372,"inkscape:cx":134.90559,"inkscape:cy":139.92689,"inkscape:window-width":1440,"inkscape:window-height":847,"inkscape:window-x":0,"inkscape:window-y":25,"inkscape:window-maximized":0,"inkscape:current-layer":"layer1"}),C.createElement("defs",{id:"defs1"},C.createElement("inkscape:perspective",{"sodipodi:type":"inkscape:persp3d","inkscape:vp_x":"3.1042448 : 18.147022 : 1","inkscape:vp_y":"0 : 999.99994 : 0","inkscape:vp_z":"303.94612 : 54.05812 : 1","inkscape:persp3d-origin":"105 : -134 : 1",id:"perspective4"})),C.createElement("g",{"inkscape:label":"Layer 1","inkscape:groupmode":"layer",id:"layer1",transform:"translate(-56.674541,-85.911432)"},C.createElement("path",{style:{fill:"#0d6efd",fillOpacity:1,strokeWidth:.610041},d:"m 81.603814,145.5382 -7.433116,-4.36986 -6.018097,-3.54529 -6.018099,-3.54529 -0.09405,-0.35761 -0.09406,-0.3576 v -15.31979 -15.31979 l 0.09451,-0.35939 0.09451,-0.35938 6.017643,-3.544433 6.017641,-3.544428 7.432805,-4.369167 7.432803,-4.369166 0.240089,0.09331 0.240083,0.09331 13.292394,7.826122 13.29241,7.826122 0.093,0.35355 0.093,0.35355 v 15.31979 15.31979 l -0.0928,0.35267 -0.0928,0.35266 -13.29682,7.82802 -13.296819,7.82803 -0.235583,0.0921 -0.235588,0.0921 z m 19.758596,-5.88315 12.13185,-7.15306 v -14.45996 -14.45994 l -5.11526,-3.01603 -5.11526,-3.016035 -7.017048,-4.136312 -7.017053,-4.13631 h -0.112738 -0.11273 l -7.097035,4.182089 -7.09703,4.18209 -5.035336,2.971548 -5.035335,2.97155 v 14.45761 14.45762 l 5.275113,3.11051 5.275113,3.11051 6.793709,4.02813 6.793702,4.02812 0.176743,0.0155 0.176742,0.0155 z",id:"path15","sodipodi:nodetypes":"cccccccccccccccccccccccccccccccccccccccccccccccccccc"}),C.createElement("path",{style:{fill:"#000000"},id:"path1",d:""}),C.createElement("path",{d:"m 84.161856,133.76725 -4.567369,-2.5483 -0.700367,0.28585 -0.700376,0.28584 -0.495731,0.11427 -0.495731,0.11426 -3.168791,-1.75603 -3.168782,-1.75603 -0.515321,-0.57002 -0.515323,-0.57002 0.0161,-3.59449 0.0161,-3.59448 0.164041,-0.41611 0.164042,-0.41611 1.480342,-0.85565 1.480346,-0.85565 0.06276,-3.67919 0.06276,-3.67921 0.39653,-0.35884 0.396521,-0.35886 3.663275,-2.04111 3.663267,-2.04112 0.114523,-1.62785 0.114506,-1.62786 0.229029,-0.21764 0.229038,-0.21765 3.341459,-1.854383 3.341467,-1.854382 h 0.301682 0.301682 l 2.476951,1.380374 2.476959,1.380381 1.151673,0.57845 1.151674,0.57845 0.02969,0.27424 0.02969,0.27423 0.02753,1.46272 0.02753,1.46273 3.663258,2.04521 3.66327,2.04521 0.40205,0.36386 0.40206,0.36385 v 3.60098 3.60097 l 0.28629,0.23408 0.28628,0.23408 1.43146,0.72479 1.43145,0.72479 v 3.9806 3.98059 l -0.51533,0.56995 -0.51532,0.56994 -3.19072,1.75191 -3.19072,1.75191 -0.47379,-0.11007 -0.473797,-0.11007 -0.699654,-0.28558 -0.699656,-0.28558 -4.589745,2.5527 -4.589746,2.55269 -0.321886,-0.004 -0.321886,-0.004 z m 8.681258,-1.65766 3.426793,-1.91645 0.06536,-0.19784 0.06535,-0.19785 -1.315884,-0.68709 -1.315885,-0.6871 -0.401264,-0.40081 -0.401265,-0.4008 v -3.79409 -3.79409 l 0.221568,-0.41401 0.221567,-0.414 3.411065,-1.86126 3.411061,-1.86126 h 0.38456 0.38455 l 0.91435,0.46646 0.91435,0.46646 -0.0646,-2.66249 -0.0646,-2.66248 -2.829977,-1.58148 -2.829984,-1.58149 -0.204696,0.12651 -0.204688,0.12651 v 1.11999 1.11999 l -0.744359,0.54975 -0.744358,0.54977 -2.773906,1.52318 -2.773906,1.52319 h -0.526565 -0.526565 l -3.34145,-1.85945 -3.341467,-1.85945 -0.168271,-0.2591 -0.16827,-0.25909 -0.0035,-1.07439 -0.0035,-1.07439 -0.204688,-0.12651 -0.204697,-0.12651 -2.82999,1.58149 -2.829982,1.58148 -0.06458,2.66248 -0.06458,2.66249 0.914351,-0.46646 0.914343,-0.46646 h 0.378551 0.37855 l 3.638639,1.97495 3.63864,1.97495 v 4.0944 4.09441 l -0.401265,0.4008 -0.401264,0.40081 -1.315885,0.6871 -1.315884,0.68709 0.06535,0.19785 0.06536,0.19784 3.426792,1.91645 3.426785,1.91644 h 0.343552 0.343544 z m -16.416873,-5.4431 -0.06475,-2.55838 -2.046125,-1.10985 -2.046124,-1.10984 -0.195677,0.19567 -0.195685,0.19568 0.06596,2.2656 0.06596,2.2656 2.06129,1.18713 2.06129,1.18713 0.179282,0.0198 0.179273,0.0198 z m 4.515881,1.34369 2.061291,-1.19456 0.06527,-2.48747 0.06527,-2.48748 -0.408821,0.15589 -0.408848,0.15589 -1.889514,1.02885 -1.889514,1.02885 v 2.50736 2.50736 l 0.171777,-0.01 0.171767,-0.01 z m 18.666131,-1.29267 v -2.50736 l -1.889509,-1.02885 -1.889522,-1.02885 -0.40883,-0.15589 -0.408839,-0.15589 0.06527,2.48748 0.06527,2.48747 2.061291,1.19456 2.061288,1.19456 0.171777,0.01 0.171774,0.01 z m 4.466127,1.28059 2.06129,-1.18713 0.0661,-2.2656 0.066,-2.2656 -0.19568,-0.19568 -0.19568,-0.19567 -2.04613,1.10984 -2.04612,1.10985 -0.0647,2.55838 -0.0648,2.55838 0.17927,-0.0198 0.17927,-0.0198 z m -24.281888,-6.71835 1.960418,-1.07415 -0.07566,-0.22693 -0.07566,-0.22691 -2.049423,-1.09443 -2.049431,-1.09442 -2.116604,1.14523 -2.116613,1.14523 v 0.17781 0.17782 l 2.004029,1.06709 2.004037,1.06711 0.277236,0.005 0.277237,0.005 z m 23.056528,4.3e-4 2.03643,-1.07372 -0.0708,-0.21245 -0.0708,-0.21244 -2.09332,-1.13015 -2.09332,-1.13016 -2.077692,1.17124 -2.077685,1.17123 v 0.17384 0.17386 l 1.889522,1.0551 1.889505,1.0551 0.31588,0.0161 0.31587,0.0161 z m -14.742004,-11.90808 0.06492,-2.2946 -0.293917,-0.23052 -0.293926,-0.2305 -2.011741,-1.08631 -2.01175,-1.08629 0.06501,2.57478 0.06501,2.57476 1.946776,1.09773 1.946767,1.09773 0.229038,-0.0611 0.229029,-0.0611 z m 4.401245,1.31989 1.946767,-1.09857 0.06501,-2.57476 0.06501,-2.57478 -2.01175,1.08629 -2.011741,1.08631 -0.286291,0.22417 -0.286291,0.22418 v 2.22411 2.2241 l 0.152689,0.15269 0.152689,0.15269 0.133602,-0.0139 0.133602,-0.0139 z m -1.021015,-6.79999 1.952048,-1.05546 -0.224347,-0.26147 -0.224337,-0.26149 -1.958921,-1.03065 -1.958911,-1.03064 -1.958912,1.03064 -1.958912,1.03065 -0.224303,0.26142 -0.224277,0.26141 1.896915,1.04261 1.896906,1.04261 0.517494,0.0129 0.517501,0.0129 z",style:{fill:"#0d6efd",fillOpacity:1,strokeWidth:.865634},id:"path1-8"}))),Ov=({title:e,version:t})=>d.jsxs("header",{className:"bg-slate-50 drop-shadow-lg flex flex-wrap justify-center lg:justify-between items-center dark:bg-slate-800 mb-3",children:[d.jsxs("div",{className:"flex flex-nowrap items-center justify-between m-2",children:[d.jsx(Lv,{className:"w-10 h-10 p-1",alt:"logo"}),d.jsxs("h1",{className:"flex items-center dark:text-white",children:[d.jsx("div",{className:"text-3xl",children:e}),d.jsxs("div",{className:"bg-blue-100 text-blue-800 text-xl font-semibold me-2 px-2.5 py-0.5 rounded ms-2 dark:bg-blue-900 dark:text-white",children:["v",t]})]})]}),d.jsxs("div",{className:"flex flex-wrap gap-1 m-2",children:[d.jsx(Pv,{className:"flex-grow justify-center dark:text-white"}),d.jsx(Nv,{className:"flex-grow justify-center dark:text-white"})]})]});let Fn=window.matchMedia("(prefers-color-scheme: dark)").matches;window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{Ki.setDark(e.matches)});const Ki={isDark:()=>Fn,setDark:e=>(Fn=e,document.body.classList.toggle("dark",Fn),Fn),toggle:()=>{Ki.setDark(!Fn)}};Ki.setDark(Fn);const Mv=e=>{let[t,n]=C.useState(!1);const r=bn(f=>f.setOtherError),l=C.useContext(Lt),i=vn(f=>f.setTorrents),o=vn(f=>f.setTorrentsLoading),s=vn(f=>f.setRefreshTorrents),a=async()=>{o(!0);let f=await l.listTorrents().finally(()=>o(!1));i(f.torrents)};return s(a),C.useEffect(()=>Os(async()=>a().then(()=>(r(null),5e3),f=>(r({text:"Error refreshing torrents",details:f}),console.error(f),5e3)),0),[]),d.jsxs("div",{className:"dark:bg-gray-900 dark:text-gray-200 min-h-screen",children:[d.jsx(Ov,{title:e.title,version:e.version}),d.jsxs("div",{className:"relative",children:[d.jsxs("div",{className:"absolute top-0 start-0 pl-2 z-10",children:[e.menuButtons&&e.menuButtons.map((f,y)=>d.jsx("span",{children:f},y)),d.jsx(hn,{onClick:()=>n(!0),children:d.jsx(fm,{})}),d.jsx(hn,{onClick:Ki.toggle,children:d.jsx(dm,{})})]}),d.jsx(Xg,{})]}),d.jsx(Ev,{show:t,onClose:()=>n(!1)})]})},r0=window.origin==="null"||window.origin==="http://localhost:3031"?"http://localhost:3030":"",ot=async(e,t,n,r)=>{console.log(e,t);const l=r0+t;let i={method:e,headers:{Accept:"application/json"}};r?(i.headers={Accept:"application/json","Content-Type":"application/json"},i.body=JSON.stringify(n)):i.body=n;let o={method:e,path:t,text:""},s;try{s=await fetch(l,i)}catch{return o.text="network error",Promise.reject(o)}if(o.status=s.status,o.statusText=`${s.status} ${s.statusText}`,!s.ok){const f=await s.text();try{const y=JSON.parse(f);o.text=y.human_readable!==void 0?y.human_readable:JSON.stringify(y,null,2)}catch{o.text=f}return Promise.reject(o)}return await s.json()},Cc={getStreamLogsUrl:()=>r0+"/stream_logs",listTorrents:()=>ot("GET","/torrents"),getTorrentDetails:e=>ot("GET",`/torrents/${e}`),getTorrentStats:e=>ot("GET",`/torrents/${e}/stats/v1`),uploadTorrent:(e,t)=>{var r,l;let n="/torrents?&overwrite=true";return t!=null&&t.list_only&&(n+="&list_only=true"),(t==null?void 0:t.only_files)!=null&&(n+=`&only_files=${t.only_files.join(",")}`),(r=t==null?void 0:t.peer_opts)!=null&&r.connect_timeout&&(n+=`&peer_connect_timeout=${t.peer_opts.connect_timeout}`),(l=t==null?void 0:t.peer_opts)!=null&&l.read_write_timeout&&(n+=`&peer_read_write_timeout=${t.peer_opts.read_write_timeout}`),t!=null&&t.initial_peers&&(n+=`&initial_peers=${t.initial_peers.join(",")}`),t!=null&&t.output_folder&&(n+=`&output_folder=${t.output_folder}`),typeof e=="string"&&(n+="&is_url=true"),ot("POST",n,e)},updateOnlyFiles:(e,t)=>{let n=`/torrents/${e}/update_only_files`;return ot("POST",n,{only_files:t},!0)},pause:e=>ot("POST",`/torrents/${e}/pause`),start:e=>ot("POST",`/torrents/${e}/start`),forget:e=>ot("POST",`/torrents/${e}/forget`),delete:e=>ot("POST",`/torrents/${e}/delete`),getVersion:async()=>(await ot("GET","/")).version},zv=()=>{let[e,t]=C.useState("");return C.useEffect(()=>Os(()=>Cc.getVersion().then(r=>{t(r);const l=`rqbit web UI - v${r}`;return document.title=l,1e4},r=>1e3),0),[]),d.jsx(Lt.Provider,{value:Cc,children:d.jsx(Mv,{title:"rqbit web UI",version:e})})};$o.createRoot(document.getElementById("app")).render(d.jsx(C.StrictMode,{children:d.jsx(zv,{})})); + */var Qi=C,cg=ag;function fg(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var dg=typeof Object.is=="function"?Object.is:fg,pg=cg.useSyncExternalStore,hg=Qi.useRef,mg=Qi.useEffect,gg=Qi.useMemo,vg=Qi.useDebugValue;Gd.useSyncExternalStoreWithSelector=function(e,t,n,r,l){var i=hg(null);if(i.current===null){var o={hasValue:!1,value:null};i.current=o}else o=i.current;i=gg(function(){function a(w){if(!f){if(f=!0,y=w,w=r(w),l!==void 0&&o.hasValue){var S=o.value;if(l(S,w))return x=S}return x=w}if(S=x,dg(y,w))return S;var k=r(w);return l!==void 0&&l(S,k)?S:(y=w,x=k)}var f=!1,y,x,v=n===void 0?null:n;return[function(){return a(t())},v===null?void 0:function(){return a(v())}]},[t,n,r,l]);var s=pg(e,i[0],i[1]);return mg(function(){o.hasValue=!0,o.value=s},[s]),vg(s),s};Zd.exports=Gd;var yg=Zd.exports;const xg=il(yg),{useDebugValue:wg}=Et,{useSyncExternalStoreWithSelector:Sg}=xg;const kg=e=>e;function Eg(e,t=kg,n){const r=Sg(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return wg(r),r}const yc=e=>{const t=typeof e=="function"?bm(e):e,n=(r,l)=>Eg(t,r,l);return Object.assign(n,t),n},Jd=e=>e?yc(e):yc,Cg=(e,t)=>e.id==t.id&&e.info_hash==t.info_hash,_g=(e,t)=>e===null&&t===null?!0:e===null||t===null?!1:e.length===t.length&&e.every((n,r)=>Cg(n,t[r])),vn=Jd(e=>({torrents:null,torrentsLoading:!1,torrentsInitiallyLoading:!1,setTorrentsLoading:t=>e(n=>n.torrents==null?{torrentsInitiallyLoading:t,torrentsLoading:t}:{torrentsInitiallyLoading:!1,torrentsLoading:t}),setTorrents:t=>e(n=>_g(n.torrents,t)?{}:{torrents:t}),refreshTorrents:()=>{},setRefreshTorrents:t=>e({refreshTorrents:t})})),Tg=({id:e,show:t,onHide:n})=>{if(!t)return null;const[r,l]=C.useState(!1),[i,o]=C.useState(null),[s,a]=C.useState(!1),f=C.useContext(Lt),y=vn(w=>w.refreshTorrents),x=()=>{l(!1),o(null),a(!1),n()},v=()=>{a(!0),(r?f.delete:f.forget)(e).then(()=>{y(),x()}).catch(S=>{o({text:`Error deleting torrent id=${e}`,details:S}),a(!1)})};return d.jsxs(Hi,{isOpen:t,onClose:n,title:"Delete torrent",children:[d.jsxs(Vi,{children:[d.jsx("p",{className:"text-gray-700 dark:text-slate-300",children:"Are you sure you want to delete the torrent?"}),d.jsxs("div",{className:"mt-4 flex items-center",children:[d.jsx("input",{type:"checkbox",id:"deleteFiles",className:"form-checkbox h-4 w-4 text-blue-500",onChange:()=>l(!r),checked:r,placeholder:"Also delete files"}),d.jsx("label",{htmlFor:"deleteFiles",className:"ml-2 text-gray-700 dark:text-slate-300",children:"Also delete files"})]}),i&&d.jsx(En,{error:i})]}),d.jsxs(Wi,{children:[s&&d.jsx(Ei,{}),d.jsx(en,{variant:"cancel",onClick:x,children:"Cancel"}),d.jsx(en,{variant:"danger",onClick:v,disabled:s,children:"Delete Torrent"})]})]})};function jg(e){return ae({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"}}]})(e)}function Ng(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"}}]})(e)}function Pg(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"}}]})(e)}function Lg(e){return ae({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"}}]})(e)}const bn=Jd(e=>({closeableError:null,setCloseableError:t=>e(()=>({closeableError:t})),otherError:null,setOtherError:t=>e(()=>({otherError:t}))})),Og=({id:e,statsResponse:t,extendedView:n,setExtendedView:r})=>{let l=t.state,[i,o]=C.useState(!1),[s,a]=C.useState(!1),f=C.useContext(Ps);const y=l=="live",x=l=="paused"||l=="error",v=l=="paused"||l=="live",w=bn(m=>m.setCloseableError),S=C.useContext(Lt),k=()=>{o(!0),S.start(e).then(()=>{f.refresh()},m=>{w({text:`Error starting torrent id=${e}`,details:m})}).finally(()=>o(!1))},z=()=>{o(!0),S.pause(e).then(()=>{f.refresh()},m=>{w({text:`Error pausing torrent id=${e}`,details:m})}).finally(()=>o(!1))},h=()=>{o(!0),a(!0)},p=()=>{o(!1),a(!1)};return d.jsxs("div",{className:"flex w-full justify-center gap-2 dark:text-slate-300",children:[x&&d.jsx(hn,{onClick:k,disabled:i,children:d.jsx(Pg,{className:"hover:text-green-600"})}),y&&d.jsx(hn,{onClick:z,disabled:i,children:d.jsx(Ng,{className:"hover:text-amber-500"})}),v&&d.jsx(hn,{onClick:()=>r(!n),disabled:i,children:d.jsx(jg,{className:"hover:text-green-600"})}),d.jsx(hn,{onClick:h,disabled:i,children:d.jsx(Lg,{className:"hover:text-red-500"})}),d.jsx(Tg,{id:e,show:s,onHide:p})]})},xc={warn:"bg-amber-500 text-white",info:"bg-blue-500 text-white",success:"bg-green-700 text-white",error:"bg-red-500 text-white"},qd=({now:e,variant:t,label:n,classNames:r})=>{const l=n??`${e.toFixed(2)}%`,i=xc[t??"info"]??xc.info;return d.jsx("div",{className:`w-full bg-gray-200 rounded-full mb-1 dark:bg-gray-500 ${r}`,children:d.jsx("div",{className:`text-xs font-medium transition-all text-center leading-none py-0.5 px-2 rounded-full ${i} ${e<1&&"bg-transparent"}`,style:{width:`${e}%`},children:l})})};function ll(e){if(e===0)return"0 Bytes";const t=1024,n=["Bytes","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,r)).toFixed(2))+" "+n[r]}const Mg=({statsResponse:e})=>{var t,n;switch(e.state){case rm:return"Paused";case Ls:return"Checking files";case im:return"Error"}return e.state!="live"||e.live===null?e.state:d.jsxs(d.Fragment,{children:[!e.finished&&d.jsxs("div",{className:"download-speed",children:["↓ ",(t=e.live.download_speed)==null?void 0:t.human_readable]}),d.jsxs("div",{className:"upload-speed",children:["↑ ",(n=e.live.upload_speed)==null?void 0:n.human_readable,e.live.snapshot.uploaded_bytes>0&&d.jsxs("span",{children:["(",ll(e.live.snapshot.uploaded_bytes),")"]})]})]})};function zg(e){return e.files.filter(n=>n.included).reduce((n,r)=>n.length>r.length?n:r).name}function Fg(e){return e.name??zg(e)}function Ig(e){const t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60,l=(i,o)=>i>0?`${i}${o}`:"";return t>0?`${l(t,"h")} ${l(n,"m")}`.trim():n>0?`${l(n,"m")} ${l(r,"s")}`.trim():`${l(r,"s")}`.trim()}function Dg(e){var n,r,l;let t=(l=(r=(n=e==null?void 0:e.live)==null?void 0:n.time_remaining)==null?void 0:r.duration)==null?void 0:l.secs;return t==null?"N/A":Ig(t)}function Rg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}}]})(e)}function Ag(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}}]})(e)}function $g(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M5 20h14v-2H5v2zM19 9h-4V3H9v6H5l7 7 7-7z"}}]})(e)}function Ug(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M9 16h6v-6h4l-7-7-7 7h4v6zm3-10.17L14.17 8H13v6h-2V8H9.83L12 5.83zM5 18h14v2H5z"}}]})(e)}function Bg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 12c0 5.52-4.48 10-10 10S2 17.52 2 12c0-1.19.22-2.32.6-3.38l1.88.68C4.17 10.14 4 11.05 4 12c0 4.41 3.59 8 8 8s8-3.59 8-8-3.59-8-8-8c-.95 0-1.85.17-2.69.48l-.68-1.89C9.69 2.22 10.82 2 12 2c5.52 0 10 4.48 10 10zM5.5 4C4.67 4 4 4.67 4 5.5S4.67 7 5.5 7 7 6.33 7 5.5 6.33 4 5.5 4zM11 16V8H9v8h2zm4 0V8h-2v8h2z"}}]})(e)}const Hg=({className:e,finished:t,live:n,error:r})=>{const l=t&&n;return r?d.jsx(Ag,{className:e,color:"red"}):l?d.jsx(Ug,{className:e,color:"green"}):t?d.jsx(Rg,{className:e,color:"green"}):n?d.jsx($g,{className:`text-blue-500 ${e}`}):d.jsx(Bg,{className:e})},wc=({checked:e,name:t,disabled:n,onChange:r,label:l,help:i,inputType:o,children:s})=>d.jsxs("div",{className:"flex gap-3 items-start",children:[d.jsx("div",{className:"flex",children:d.jsx("input",{type:o||"checkbox",className:"block mt-1",id:t,name:t,disabled:n,checked:e,onChange:r})}),d.jsxs("div",{className:"text-sm flex flex-col gap-1",children:[d.jsx("label",{htmlFor:t,children:l}),i&&d.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-300 mb-3",children:i})]}),s]});function Vg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"g",attr:{id:"Square_Minus"},child:[{tag:"g",attr:{},child:[{tag:"path",attr:{d:"M18.438,20.938H5.564a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.564,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z"}},{tag:"path",attr:{d:"M9,12.5a.5.5,0,0,1,0-1h6a.5.5,0,0,1,0,1Z"}}]}]}]})(e)}function Wg(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"g",attr:{id:"Square_Plus"},child:[{tag:"g",attr:{},child:[{tag:"path",attr:{d:"M18.438,20.938H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z"}},{tag:"path",attr:{d:"M15,12.5H12.5V15a.5.5,0,0,1-1,0V12.5H9a.5.5,0,0,1,0-1h2.5V9a.5.5,0,0,1,1,0v2.5H15A.5.5,0,0,1,15,12.5Z"}}]}]}]})(e)}var Ci={exports:{}};Ci.exports;(function(e,t){var n=200,r="Expected a function",l="__lodash_hash_undefined__",i=1,o=2,s=1/0,a=9007199254740991,f="[object Arguments]",y="[object Array]",x="[object Boolean]",v="[object Date]",w="[object Error]",S="[object Function]",k="[object GeneratorFunction]",z="[object Map]",h="[object Number]",p="[object Object]",m="[object Promise]",_="[object RegExp]",T="[object Set]",j="[object String]",O="[object Symbol]",F="[object WeakMap]",W="[object ArrayBuffer]",A="[object DataView]",we="[object Float32Array]",ft="[object Float64Array]",dt="[object Int8Array]",Tn="[object Int16Array]",fr="[object Int32Array]",Ae="[object Uint8Array]",rt="[object Uint8ClampedArray]",P="[object Uint16Array]",R="[object Uint32Array]",$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,K=/^\w*$/,ee=/^\./,Ge=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/[\\^$.*+?()[\]{}|]/g,pt=/\\(\\)?/g,Ye=/^\[object .+?Constructor\]$/,Ot=/^(?:0|[1-9]\d*)$/,Z={};Z[we]=Z[ft]=Z[dt]=Z[Tn]=Z[fr]=Z[Ae]=Z[rt]=Z[P]=Z[R]=!0,Z[f]=Z[y]=Z[W]=Z[x]=Z[A]=Z[v]=Z[w]=Z[S]=Z[z]=Z[h]=Z[p]=Z[_]=Z[T]=Z[j]=Z[F]=!1;var jn=typeof Ut=="object"&&Ut&&Ut.Object===Object&&Ut,dr=typeof self=="object"&&self&&self.Object===Object&&self,lt=jn||dr||Function("return this")(),pr=t&&!t.nodeType&&t,Nn=pr&&!0&&e&&!e.nodeType&&e,Pn=Nn&&Nn.exports===pr,q=Pn&&jn.process,hr=function(){try{return q&&q.binding("util")}catch{}}(),Ln=hr&&hr.isTypedArray;function l0(u,c,g){switch(g.length){case 0:return u.call(c);case 1:return u.call(c,g[0]);case 2:return u.call(c,g[0],g[1]);case 3:return u.call(c,g[0],g[1],g[2])}return u.apply(c,g)}function Ds(u,c){for(var g=-1,E=u?u.length:0,M=Array(E);++g-1}function F0(u,c){var g=this.__data__,E=ml(g,u);return E<0?g.push([u,c]):g[E][1]=c,this}mt.prototype.clear=L0,mt.prototype.delete=O0,mt.prototype.get=M0,mt.prototype.has=z0,mt.prototype.set=F0;function gt(u){var c=-1,g=u?u.length:0;for(this.clear();++c0&&g(U)?c>1?Ws(U,c-1,g,E,M):i0(M,U):E||(M[M.length]=U)}return M}var Y0=m1();function X0(u,c){return u&&Y0(u,c,wl)}function Qs(u,c){c=vl(c,u)?[c]:Ks(c);for(var g=0,E=c.length;u!=null&&gc||L&&D&&H&&!U&&!G||E&&D&&H||!g&&H||!M)return 1;if(!E&&!L&&!G&&u=U)return H;var G=g[E];return H*(G=="desc"?-1:1)}}return u.index-c.index}function h1(u,c){return function(g,E){if(g==null)return g;if(!vr(g))return u(g,E);for(var M=g.length,L=c?M:-1,D=Object(g);(c?L--:++LU))return!1;var G=L.get(u);if(G&&L.get(c))return G==c;var Se=-1,Te=!0,ce=M&i?new hl:void 0;for(L.set(u,c),L.set(c,u);++Se-1&&u%1==0&&u1&&Gs(u,c[0],c[1])?c=[]:g>2&&Gs(c[0],c[1],c[2])&&(c=[c[0]]),s1(u,Ws(c,1),[])});function no(u,c){if(typeof u!="function"||c&&typeof c!="function")throw new TypeError(r);var g=function(){var E=arguments,M=c?c.apply(this,E):E[0],L=g.cache;if(L.has(M))return L.get(M);var D=u.apply(this,E);return g.cache=L.set(M,D),D};return g.cache=new(no.Cache||gt),g}no.Cache=gt;function ro(u,c){return u===c||u!==u&&c!==c}function lo(u){return T1(u)&&ht.call(u,"callee")&&(!v0.call(u,"callee")||On.call(u)==f)}var zt=Array.isArray;function vr(u){return u!=null&&io(u.length)&&!Js(u)}function T1(u){return xl(u)&&vr(u)}function Js(u){var c=yr(u)?On.call(u):"";return c==S||c==k}function io(u){return typeof u=="number"&&u>-1&&u%1==0&&u<=a}function yr(u){var c=typeof u;return!!u&&(c=="object"||c=="function")}function xl(u){return!!u&&typeof u=="object"}function xr(u){return typeof u=="symbol"||xl(u)&&On.call(u)==O}var j1=Ln?Rs(Ln):n1;function N1(u){return u==null?"":f1(u)}function P1(u,c,g){var E=u==null?void 0:Qs(u,c);return E===void 0?g:E}function L1(u,c){return u!=null&&x1(u,c,q0)}function wl(u){return vr(u)?Z0(u):l1(u)}function qs(u){return u}function O1(u){return vl(u)?u0(yl(u)):a1(u)}e.exports=_1})(Ci,Ci.exports);var Qg=Ci.exports;const Sc=il(Qg),Kg=(e,t)=>{const n=(r,l,i,o)=>{let s=[],a=[],f={};const y=w=>(f[w]=f[w]||[],f[w]);i.forEach(w=>{if(o==w.pathComponents.length-1){s.push(w);return}y(w.pathComponents[o]).push(w)}),s=Sc(s,w=>w.filename);let x=Sc(Object.entries(f),([w,S])=>w),v=0;for(const[w,S]of x)a.push(n(w,l+"."+v,S,o+1)),v+=1;return{name:r,id:l,dirs:a,files:s}};return n("","filetree-root",e.files.map((r,l)=>({id:l,filename:r.components[r.components.length-1],pathComponents:r.components,length:r.length,have_bytes:t?t.file_progress[l]??0:0})),0)},bd=({tree:e,selectedFiles:t,setSelectedFiles:n,initialExpanded:r,torrentDetails:l,torrentStats:i,showProgressBar:o,disabled:s})=>{let[a,f]=C.useState(r),y=C.useMemo(()=>{let k=z=>{let h=z.dirs.flatMap(k);return h.push(...z.files.map(p=>p.id)),h};return k(e)},[e]);const x=k=>{if(k.target.checked){let z=new Set(t);y.forEach(h=>z.add(h)),n(z)}else{let z=new Set(t);y.forEach(h=>z.delete(h)),n(z)}},v=k=>{if(t.has(k)){let z=new Set(t);z.delete(k),n(z)}else{let z=new Set(t);z.add(k),n(z)}},w=()=>y.filter(k=>t.has(k)).length,S=()=>y.filter(k=>t.has(k)).map(k=>l.files[k].length).reduce((k,z)=>k+z,0);return d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex items-center",children:[d.jsx(hn,{onClick:()=>f(!a),children:a?d.jsx(Vg,{}):d.jsx(Wg,{})}),d.jsx(wc,{checked:y.every(k=>t.has(k)),label:`${e.name?e.name+", ":""} ${w()} files, ${ll(S())}`,name:e.id,onChange:x})]}),d.jsxs("div",{className:"pl-5",hidden:!a,children:[e.dirs.map(k=>d.jsx(bd,{torrentDetails:l,torrentStats:i,tree:k,selectedFiles:t,setSelectedFiles:n,initialExpanded:!1,showProgressBar:o,disabled:s},k.name)),d.jsx("div",{className:"pl-1",children:e.files.map(k=>d.jsxs("div",{className:`${o?"grid grid-cols-1 gap-1 items-start lg:grid-cols-2 mb-2 lg:mb-0":""}`,children:[d.jsx(wc,{checked:t.has(k.id),label:`${k.filename} (${ll(k.length)})`,name:`file-${k.id}`,disabled:s,onChange:()=>v(k.id)}),o&&d.jsx(qd,{now:k.have_bytes/k.length*100,variant:k.have_bytes==k.length?"success":"info"})]},k.id))})]})]})},e0=({torrentDetails:e,selectedFiles:t,setSelectedFiles:n,torrentStats:r,showProgressBar:l,disabled:i})=>{let o=C.useMemo(()=>Kg(e,r),[e,r]);return d.jsx(bd,{torrentDetails:e,torrentStats:r,tree:o,selectedFiles:t,setSelectedFiles:n,initialExpanded:!0,showProgressBar:l,disabled:i})},Zg=({id:e,detailsResponse:t,statsResponse:n})=>{const r=(n==null?void 0:n.state)??"",l=(n==null?void 0:n.error)??null,i=(n==null?void 0:n.total_bytes)??1,o=(n==null?void 0:n.progress_bytes)??0,s=(n==null?void 0:n.finished)||!1,a=l||i==0?100:o/i*100,f=()=>{var j;let T=(j=n==null?void 0:n.live)==null?void 0:j.snapshot.peer_stats;return T?`${T.live} / ${T.seen}`:""},y=T=>d.jsx(Hg,{className:T,error:!!l,live:!!(n!=null&&n.live),finished:s}),[x,v]=C.useState(new Set);C.useEffect(()=>{v(new Set((t==null?void 0:t.files.map((T,j)=>({f:T,id:j})).filter(({f:T})=>T.included).map(({id:T})=>T))??[]))},[t]);const w=C.useContext(Lt),S=C.useContext(Ps),[k,z]=C.useState(!1);let h=bn(T=>T.setCloseableError);const p=T=>{z(!0),w.updateOnlyFiles(e,Array.from(T)).then(()=>{S.refresh(),h(null)},j=>{h({text:"Error configuring torrent",details:j})}).finally(()=>z(!1))},[m,_]=C.useState(!1);return d.jsxs("div",{className:"flex flex-col border p-2 border-gray-200 rounded-xl shadow-xs hover:drop-shadow-sm dark:bg-slate-800 dark:border-slate-900",children:[d.jsxs("section",{className:"flex flex-col lg:flex-row items-center gap-2",children:[d.jsx("div",{className:"hidden md:block",children:y("w-10 h-10")}),d.jsxs("div",{className:"w-full flex flex-col gap-2",children:[t&&d.jsxs("div",{className:"flex items-center gap-2",children:[d.jsx("div",{className:"md:hidden",children:y("w-5 h-5")}),d.jsx("div",{className:"text-left text-lg text-gray-900 text-ellipsis break-all dark:text-slate-200",children:Fg(t)})]}),l?d.jsxs("p",{className:"text-red-500 text-sm",children:[d.jsx("strong",{children:"Error:"})," ",l]}):d.jsxs(d.Fragment,{children:[d.jsx("div",{children:d.jsx(qd,{now:a,label:l,variant:r==Ls?"warn":s?"success":"info"})}),d.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-2 sm:flex-wrap items-center text-sm text-nowrap font-medium text-gray-500",children:[d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(cm,{})," ",f().toString()]}),d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(am,{}),d.jsxs("div",{children:[ll(o),"/",ll(i)]})]}),n&&d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex gap-2 items-center",children:[d.jsx(sm,{}),Dg(n)]}),d.jsx("div",{className:"flex gap-2 items-center",children:d.jsx(Mg,{statsResponse:n})})]})]})]})]}),n&&d.jsx("div",{className:"",children:d.jsx(Og,{id:e,statsResponse:n,extendedView:m,setExtendedView:_})})]}),t&&m&&d.jsx("div",{className:"",children:d.jsx(e0,{torrentDetails:t,torrentStats:n,selectedFiles:x,setSelectedFiles:p,disabled:k,showProgressBar:!0})})]})},Gg=({id:e,torrent:t})=>{const[n,r]=C.useState(null),[l,i]=C.useState(null),[o,s]=C.useState(0),a=C.useContext(Lt),f=()=>{s(o+1)};return C.useEffect(()=>Ud(async()=>{await a.getTorrentDetails(t.id).then(r)},1e3),[o]),C.useEffect(()=>Os(async()=>a.getTorrentStats(t.id).then(w=>(i(w),w)).then(w=>w.state==Ls||w.state==lm?1e3:1e4,()=>1e4),0),[o]),d.jsx(Ps.Provider,{value:{refresh:f},children:d.jsx(Zg,{id:e,detailsResponse:n,statsResponse:l})})},Yg=e=>d.jsx("div",{className:"flex flex-col gap-2 mx-2 pb-3 sm:px-7",children:e.torrents===null?e.loading?d.jsx(Ei,{className:"justify-center m-5",label:"Loading torrent list"}):null:e.torrents.length===0?d.jsx("p",{className:"text-center",children:"No existing torrents found."}):e.torrents.map(t=>d.jsx(Gg,{id:t.id,torrent:t},t.id))}),Xg=e=>{let t=bn(o=>o.closeableError),n=bn(o=>o.setCloseableError),r=bn(o=>o.otherError),l=vn(o=>o.torrents),i=vn(o=>o.torrentsInitiallyLoading);return d.jsxs("div",{className:"container mx-auto",children:[d.jsx(En,{error:t,remove:()=>n(null)}),d.jsx(En,{error:r}),d.jsx(Yg,{torrents:l,loading:i})]})};var Jg="Expected a function",kc=0/0,qg="[object Symbol]",bg=/^\s+|\s+$/g,ev=/^[-+]0x[0-9a-f]+$/i,tv=/^0b[01]+$/i,nv=/^0o[0-7]+$/i,rv=parseInt,lv=typeof Ut=="object"&&Ut&&Ut.Object===Object&&Ut,iv=typeof self=="object"&&self&&self.Object===Object&&self,ov=lv||iv||Function("return this")(),uv=Object.prototype,sv=uv.toString,av=Math.max,cv=Math.min,Ao=function(){return ov.Date.now()};function fv(e,t,n){var r,l,i,o,s,a,f=0,y=!1,x=!1,v=!0;if(typeof e!="function")throw new TypeError(Jg);t=Ec(t)||0,Fu(n)&&(y=!!n.leading,x="maxWait"in n,i=x?av(Ec(n.maxWait)||0,t):i,v="trailing"in n?!!n.trailing:v);function w(j){var O=r,F=l;return r=l=void 0,f=j,o=e.apply(F,O),o}function S(j){return f=j,s=setTimeout(h,t),y?w(j):o}function k(j){var O=j-a,F=j-f,W=t-O;return x?cv(W,i-F):W}function z(j){var O=j-a,F=j-f;return a===void 0||O>=t||O<0||x&&F>=i}function h(){var j=Ao();if(z(j))return p(j);s=setTimeout(h,k(j))}function p(j){return s=void 0,v&&r?w(j):(r=l=void 0,o)}function m(){s!==void 0&&clearTimeout(s),f=0,r=a=l=s=void 0}function _(){return s===void 0?o:p(Ao())}function T(){var j=Ao(),O=z(j);if(r=arguments,l=this,a=j,O){if(s===void 0)return S(a);if(x)return s=setTimeout(h,t),w(a)}return s===void 0&&(s=setTimeout(h,t)),o}return T.cancel=m,T.flush=_,T}function Fu(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function dv(e){return!!e&&typeof e=="object"}function pv(e){return typeof e=="symbol"||dv(e)&&sv.call(e)==qg}function Ec(e){if(typeof e=="number")return e;if(pv(e))return kc;if(Fu(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Fu(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(bg,"");var n=tv.test(e);return n||nv.test(e)?rv(e.slice(2),n?2:8):ev.test(e)?kc:+e}var hv=fv;const mv=il(hv),gv=({span:e})=>{let t=Object.entries(e).filter(([n,r])=>n!="name");return t.length==0?null:d.jsxs(d.Fragment,{children:["{",t.map(([n,r])=>d.jsxs("span",{children:[n," = ",r]},n)).reduce((n,r)=>d.jsxs(d.Fragment,{children:[n,", ",r]})),"}"]})},vv=({span:e})=>d.jsxs(d.Fragment,{children:[d.jsx("span",{className:"font-bold",children:e.name}),d.jsx(gv,{span:e}),d.jsx("span",{className:"font-bold",children:":"})]}),yv=({fields:e})=>d.jsxs("span",{className:`m-1 ${e.message.match(/error|fail/g)?"text-red-500":"text-slate-500 dark:text-slate-200"}`,children:[e.message,Object.entries(e).filter(([t,n])=>t!="message").map(([t,n])=>d.jsxs("span",{className:"m-1",children:[d.jsx("span",{className:"italic font-bold",children:t}),"=",n]},t))]}),xv=Et.memo(({line:e})=>{var r;const t=e,n=l=>{switch(l){case"DEBUG":return"text-blue-500";case"INFO":return"text-green-500";case"WARN":return"text-amber-500";case"ERROR":return"text-red-500";default:return"text-slate-500"}};return d.jsxs("p",{className:"font-mono m-0 text-break text-[10px]",children:[d.jsx("span",{className:"m-1 text-slate-500 dark:text-slate-400",children:t.timestamp}),d.jsx("span",{className:`m-1 ${n(t.level)}`,children:t.level}),d.jsx("span",{className:"m-1",children:(r=t.spans)==null?void 0:r.map((l,i)=>d.jsx(vv,{span:l},i))}),d.jsx("span",{className:"m-1 text-slate-500 dark:text-slate-400",children:t.target}),d.jsx(yv,{fields:t.fields})]})}),t0=({children:e})=>d.jsx("form",{children:e}),Is=({autoFocus:e,value:t,name:n,disabled:r,onChange:l,onKeyDown:i,label:o,help:s,inputType:a,placeholder:f})=>d.jsxs("div",{className:"flex flex-col gap-2 text-sm mb-2",children:[d.jsx("label",{htmlFor:n,className:"dark:text-white",children:o}),d.jsx("input",{autoFocus:e,type:a,className:"block border rounded bg-transparent py-1.5 pl-2 text-gray-800 focus:ring-0 sm:text-sm sm:leading-6 dark:text-slate-300",id:n,name:n,disabled:r,placeholder:f,value:t,onKeyDown:i,onChange:l}),s&&d.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-300",children:s})]}),wv=(e,t)=>{if(e.length===0)return t;if(t.length===0)return e;const n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n},Sv=(e,t,n)=>{const r=new AbortController,l=r.signal;let i=!1;const o=()=>{console.log("cancelling fetch"),i=!0,r.abort()},s=async()=>{let f=await fetch(e,{signal:l});if(!f.ok){let v=await f.text();throw n({text:"error fetching logs",details:{statusText:f.statusText,text:v}}),null}if(!f.body){n({text:"error fetching logs: ReadableStream not supported."});return}n(null);const y=f.body.getReader();let x=new Uint8Array;for(;;){const{done:v,value:w}=await y.read();if(v)throw n({text:"log stream terminated"}),null;x=wv(x,w);for(let S;(S=x.indexOf(10))!==-1;){let k=x.slice(0,S),z=new TextDecoder().decode(k);t(z),x=x.slice(S+1)}}};let a=Ud(()=>s().then(()=>{},f=>{if(!i&&f!==null)throw n({text:"error streaming logs",details:{text:f.toString()}}),f}),1e3);return()=>{o(),a()}},kv=({url:e,maxLines:t})=>{const[n,r]=C.useState([]),[l,i]=C.useState(null),[o,s]=C.useState(""),a=C.useRef(null),f=t??1e3,y=C.useCallback(S=>{r(k=>[{id:k.length==0?0:k[0].id+1,content:S,parsed:JSON.parse(S),show:a.current?!!S.match(a.current):!0},...k.slice(0,f-1)])},[a.current,t]),x=C.useRef(y);x.current=y;const v=mv(S=>{let k=null;try{k=new RegExp(S)}catch{return}a.current=k,r(z=>{let h=[...z];for(let p of h)p.show=!!p.content.match(k);return h})},200),w=S=>{s(S),v(S)};return C.useEffect(()=>v.cancel,[]),C.useEffect(()=>Sv(e,S=>x.current(S),i),[e]),d.jsxs("div",{children:[d.jsx(En,{error:l}),d.jsxs("div",{className:"mb-3",children:["Showing last ",f," logs since this window was opened"]}),d.jsx(t0,{children:d.jsx(Is,{value:o,name:"filter",placeholder:"Enter filter (regex)",onChange:S=>w(S.target.value)})}),n.map(S=>d.jsx("div",{hidden:!S.show,children:d.jsx(xv,{line:S.parsed})},S.id))]})},Ev=({show:e,onClose:t})=>{let r=C.useContext(Lt).getStreamLogsUrl();return d.jsxs(Hi,{isOpen:e,onClose:t,title:"rqbit server logs",className:"max-w-7xl",children:[d.jsx(Vi,{children:r?d.jsx(kv,{url:r}):d.jsx(En,{error:{text:"HTTP API not available to stream logs"}})}),d.jsx(Wi,{children:d.jsx(en,{variant:"primary",onClick:t,children:"Close"})})]})},Cv=({children:e,label:t,help:n,className:r})=>d.jsxs("fieldset",{className:`mb-4 ${r}`,children:[t&&d.jsx("label",{className:"text-md font-md mb-3 block pb-1 border-b",children:t}),e]}),_v=e=>{let{onHide:t,listTorrentResponse:n,listTorrentError:r,listTorrentLoading:l,data:i}=e;const[o,s]=C.useState(new Set),[a,f]=C.useState(!1),[y,x]=C.useState(null),[v,w]=C.useState(!1),[S,k]=C.useState(""),z=vn(T=>T.refreshTorrents),h=C.useContext(Lt);C.useEffect(()=>{s(new Set(n==null?void 0:n.details.files.map((T,j)=>j))),k((n==null?void 0:n.output_folder)||"")},[n]);const p=()=>{t(),s(new Set),x(null),f(!1)},m=async()=>{if(!n)return;f(!0);let T=n.seen_peers?n.seen_peers.slice(0,32):null,j={overwrite:!0,only_files:Array.from(o),initial_peers:T,output_folder:S};v&&(j.peer_opts={connect_timeout:20,read_write_timeout:60}),h.uploadTorrent(i,j).then(()=>{t(),z()},O=>{x({text:"Error starting torrent",details:O})}).finally(()=>f(!1))},_=()=>{if(l)return d.jsx(Ei,{label:"Loading torrent contents"});if(r)return d.jsx(En,{error:r});if(n)return d.jsxs(t0,{children:[d.jsx(Is,{label:"Output folder",name:"output_folder",inputType:"text",value:S,onChange:T=>k(T.target.value)}),d.jsx(Cv,{children:d.jsx(e0,{selectedFiles:o,setSelectedFiles:s,torrentDetails:n.details,torrentStats:null})})]})};return d.jsxs(Hi,{isOpen:!0,onClose:p,title:"Add Torrent",children:[d.jsxs(Vi,{children:[_(),d.jsx(En,{error:y})]}),d.jsxs(Wi,{children:[a&&d.jsx(Ei,{}),d.jsx(en,{onClick:p,variant:"cancel",children:"Cancel"}),d.jsx(en,{onClick:m,variant:"primary",disabled:l||a||o.size==0,children:"OK"})]})]})},n0=({onClick:e,data:t,resetData:n,children:r,className:l})=>{const[i,o]=C.useState(!1),[s,a]=C.useState(null),[f,y]=C.useState(null),x=C.useContext(Lt);C.useEffect(()=>{if(t===null)return;let w=setTimeout(async()=>{o(!0);try{const S=await x.uploadTorrent(t,{list_only:!0});a(S)}catch(S){y({text:"Error listing torrent files",details:S})}finally{o(!1)}},0);return()=>clearTimeout(w)},[t]);const v=()=>{n(),y(null),a(null),o(!1)};return d.jsxs(d.Fragment,{children:[d.jsx(en,{onClick:e,className:l,children:r}),t&&d.jsx(_v,{onHide:v,listTorrentError:f,listTorrentResponse:s,data:t,listTorrentLoading:i})]})};function Tv(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none"},child:[{tag:"path",attr:{d:"M10 18V16H8V14H10V12H12V14H14V16H12V18H10Z",fill:"currentColor"}},{tag:"path",attr:{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2C4.34315 2 3 3.34315 3 5V19C3 20.6569 4.34315 22 6 22H18C19.6569 22 21 20.6569 21 19V9C21 5.13401 17.866 2 14 2H6ZM6 4H13V9H19V19C19 19.5523 18.5523 20 18 20H6C5.44772 20 5 19.5523 5 19V5C5 4.44772 5.44772 4 6 4ZM15 4.10002C16.6113 4.4271 17.9413 5.52906 18.584 7H15V4.10002Z",fill:"currentColor"}}]})(e)}function jv(e){return ae({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none"},child:[{tag:"path",attr:{d:"M14.8284 12L16.2426 13.4142L19.071 10.5858C20.6331 9.02365 20.6331 6.49099 19.071 4.9289C17.509 3.3668 14.9763 3.3668 13.4142 4.9289L10.5858 7.75732L12 9.17154L14.8284 6.34311C15.6095 5.56206 16.8758 5.56206 17.6568 6.34311C18.4379 7.12416 18.4379 8.39049 17.6568 9.17154L14.8284 12Z",fill:"currentColor"}},{tag:"path",attr:{d:"M12 14.8285L13.4142 16.2427L10.5858 19.0711C9.02372 20.6332 6.49106 20.6332 4.92896 19.0711C3.36686 17.509 3.36686 14.9764 4.92896 13.4143L7.75739 10.5858L9.1716 12L6.34317 14.8285C5.56212 15.6095 5.56212 16.8758 6.34317 17.6569C7.12422 18.4379 8.39055 18.4379 9.1716 17.6569L12 14.8285Z",fill:"currentColor"}},{tag:"path",attr:{d:"M14.8285 10.5857C15.219 10.1952 15.219 9.56199 14.8285 9.17147C14.4379 8.78094 13.8048 8.78094 13.4142 9.17147L9.1716 13.4141C8.78107 13.8046 8.78107 14.4378 9.1716 14.8283C9.56212 15.2188 10.1953 15.2188 10.5858 14.8283L14.8285 10.5857Z",fill:"currentColor"}}]})(e)}const Nv=({className:e})=>{const t=C.useRef(),[n,r]=C.useState(null),l=async()=>{var a;if(!((a=t==null?void 0:t.current)!=null&&a.files))return;const s=t.current.files[0];r(s)},i=()=>{t!=null&&t.current&&(t.current.value="",r(null))},o=()=>{t!=null&&t.current&&t.current.click()};return d.jsxs(d.Fragment,{children:[d.jsx("input",{type:"file",ref:t,accept:".torrent",onChange:l,hidden:!0}),d.jsxs(n0,{onClick:o,data:n,resetData:i,className:`group ${e}`,children:[d.jsx(Tv,{className:"text-blue-500 group-hover:text-white dark:text-white"}),d.jsx("div",{children:"Upload .torrent File"})]})]})},Pv=({className:e})=>{const[t,n]=C.useState(null),[r,l]=C.useState(""),[i,o]=C.useState(!1),s=()=>{n(r),l(""),o(!1)},a=()=>{o(!1),n(null)};return d.jsxs(d.Fragment,{children:[d.jsxs(n0,{onClick:()=>{o(!0)},data:t,className:`group ${e}`,resetData:()=>n(null),children:[d.jsx(jv,{className:"text-blue-500 group-hover:text-white dark:text-white"}),d.jsx("div",{children:"Add Torrent from Magnet / URL"})]}),d.jsxs(Hi,{isOpen:i,onClose:a,title:"Add torrent",children:[d.jsx(Vi,{children:d.jsx(Is,{autoFocus:!0,value:r,name:"magnet",onChange:f=>l(f.target.value),onKeyDown:f=>{f.key==="Enter"&&r&&s()},placeholder:"magnet:?xt=urn:btih:...",help:"Enter magnet or HTTP(S) URL to the .torrent"})}),d.jsxs(Wi,{children:[d.jsx(en,{variant:"cancel",onClick:a,children:"Cancel"}),d.jsx(en,{disabled:!r,variant:"primary",onClick:s,children:"Add"})]})]})]})},Lv=e=>C.createElement("svg",{width:"64mm",height:"64mm",viewBox:"0 0 64 64",id:"svg1",xmlSpace:"preserve","inkscape:version":"1.3.1 (91b66b0, 2023-11-16)","sodipodi:docname":"logo.svg","xmlns:inkscape":"http://www.inkscape.org/namespaces/inkscape","xmlns:sodipodi":"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",...e},C.createElement("sodipodi:namedview",{id:"namedview1",pagecolor:"#ffffff",bordercolor:"#000000",borderopacity:.25,"inkscape:showpageshadow":2,"inkscape:pageopacity":0,"inkscape:pagecheckerboard":0,"inkscape:deskcolor":"#d1d1d1","inkscape:document-units":"mm","inkscape:zoom":1.4936372,"inkscape:cx":134.90559,"inkscape:cy":139.92689,"inkscape:window-width":1440,"inkscape:window-height":847,"inkscape:window-x":0,"inkscape:window-y":25,"inkscape:window-maximized":0,"inkscape:current-layer":"layer1"}),C.createElement("defs",{id:"defs1"},C.createElement("inkscape:perspective",{"sodipodi:type":"inkscape:persp3d","inkscape:vp_x":"3.1042448 : 18.147022 : 1","inkscape:vp_y":"0 : 999.99994 : 0","inkscape:vp_z":"303.94612 : 54.05812 : 1","inkscape:persp3d-origin":"105 : -134 : 1",id:"perspective4"})),C.createElement("g",{"inkscape:label":"Layer 1","inkscape:groupmode":"layer",id:"layer1",transform:"translate(-56.674541,-85.911432)"},C.createElement("path",{style:{fill:"#0d6efd",fillOpacity:1,strokeWidth:.610041},d:"m 81.603814,145.5382 -7.433116,-4.36986 -6.018097,-3.54529 -6.018099,-3.54529 -0.09405,-0.35761 -0.09406,-0.3576 v -15.31979 -15.31979 l 0.09451,-0.35939 0.09451,-0.35938 6.017643,-3.544433 6.017641,-3.544428 7.432805,-4.369167 7.432803,-4.369166 0.240089,0.09331 0.240083,0.09331 13.292394,7.826122 13.29241,7.826122 0.093,0.35355 0.093,0.35355 v 15.31979 15.31979 l -0.0928,0.35267 -0.0928,0.35266 -13.29682,7.82802 -13.296819,7.82803 -0.235583,0.0921 -0.235588,0.0921 z m 19.758596,-5.88315 12.13185,-7.15306 v -14.45996 -14.45994 l -5.11526,-3.01603 -5.11526,-3.016035 -7.017048,-4.136312 -7.017053,-4.13631 h -0.112738 -0.11273 l -7.097035,4.182089 -7.09703,4.18209 -5.035336,2.971548 -5.035335,2.97155 v 14.45761 14.45762 l 5.275113,3.11051 5.275113,3.11051 6.793709,4.02813 6.793702,4.02812 0.176743,0.0155 0.176742,0.0155 z",id:"path15","sodipodi:nodetypes":"cccccccccccccccccccccccccccccccccccccccccccccccccccc"}),C.createElement("path",{style:{fill:"#000000"},id:"path1",d:""}),C.createElement("path",{d:"m 84.161856,133.76725 -4.567369,-2.5483 -0.700367,0.28585 -0.700376,0.28584 -0.495731,0.11427 -0.495731,0.11426 -3.168791,-1.75603 -3.168782,-1.75603 -0.515321,-0.57002 -0.515323,-0.57002 0.0161,-3.59449 0.0161,-3.59448 0.164041,-0.41611 0.164042,-0.41611 1.480342,-0.85565 1.480346,-0.85565 0.06276,-3.67919 0.06276,-3.67921 0.39653,-0.35884 0.396521,-0.35886 3.663275,-2.04111 3.663267,-2.04112 0.114523,-1.62785 0.114506,-1.62786 0.229029,-0.21764 0.229038,-0.21765 3.341459,-1.854383 3.341467,-1.854382 h 0.301682 0.301682 l 2.476951,1.380374 2.476959,1.380381 1.151673,0.57845 1.151674,0.57845 0.02969,0.27424 0.02969,0.27423 0.02753,1.46272 0.02753,1.46273 3.663258,2.04521 3.66327,2.04521 0.40205,0.36386 0.40206,0.36385 v 3.60098 3.60097 l 0.28629,0.23408 0.28628,0.23408 1.43146,0.72479 1.43145,0.72479 v 3.9806 3.98059 l -0.51533,0.56995 -0.51532,0.56994 -3.19072,1.75191 -3.19072,1.75191 -0.47379,-0.11007 -0.473797,-0.11007 -0.699654,-0.28558 -0.699656,-0.28558 -4.589745,2.5527 -4.589746,2.55269 -0.321886,-0.004 -0.321886,-0.004 z m 8.681258,-1.65766 3.426793,-1.91645 0.06536,-0.19784 0.06535,-0.19785 -1.315884,-0.68709 -1.315885,-0.6871 -0.401264,-0.40081 -0.401265,-0.4008 v -3.79409 -3.79409 l 0.221568,-0.41401 0.221567,-0.414 3.411065,-1.86126 3.411061,-1.86126 h 0.38456 0.38455 l 0.91435,0.46646 0.91435,0.46646 -0.0646,-2.66249 -0.0646,-2.66248 -2.829977,-1.58148 -2.829984,-1.58149 -0.204696,0.12651 -0.204688,0.12651 v 1.11999 1.11999 l -0.744359,0.54975 -0.744358,0.54977 -2.773906,1.52318 -2.773906,1.52319 h -0.526565 -0.526565 l -3.34145,-1.85945 -3.341467,-1.85945 -0.168271,-0.2591 -0.16827,-0.25909 -0.0035,-1.07439 -0.0035,-1.07439 -0.204688,-0.12651 -0.204697,-0.12651 -2.82999,1.58149 -2.829982,1.58148 -0.06458,2.66248 -0.06458,2.66249 0.914351,-0.46646 0.914343,-0.46646 h 0.378551 0.37855 l 3.638639,1.97495 3.63864,1.97495 v 4.0944 4.09441 l -0.401265,0.4008 -0.401264,0.40081 -1.315885,0.6871 -1.315884,0.68709 0.06535,0.19785 0.06536,0.19784 3.426792,1.91645 3.426785,1.91644 h 0.343552 0.343544 z m -16.416873,-5.4431 -0.06475,-2.55838 -2.046125,-1.10985 -2.046124,-1.10984 -0.195677,0.19567 -0.195685,0.19568 0.06596,2.2656 0.06596,2.2656 2.06129,1.18713 2.06129,1.18713 0.179282,0.0198 0.179273,0.0198 z m 4.515881,1.34369 2.061291,-1.19456 0.06527,-2.48747 0.06527,-2.48748 -0.408821,0.15589 -0.408848,0.15589 -1.889514,1.02885 -1.889514,1.02885 v 2.50736 2.50736 l 0.171777,-0.01 0.171767,-0.01 z m 18.666131,-1.29267 v -2.50736 l -1.889509,-1.02885 -1.889522,-1.02885 -0.40883,-0.15589 -0.408839,-0.15589 0.06527,2.48748 0.06527,2.48747 2.061291,1.19456 2.061288,1.19456 0.171777,0.01 0.171774,0.01 z m 4.466127,1.28059 2.06129,-1.18713 0.0661,-2.2656 0.066,-2.2656 -0.19568,-0.19568 -0.19568,-0.19567 -2.04613,1.10984 -2.04612,1.10985 -0.0647,2.55838 -0.0648,2.55838 0.17927,-0.0198 0.17927,-0.0198 z m -24.281888,-6.71835 1.960418,-1.07415 -0.07566,-0.22693 -0.07566,-0.22691 -2.049423,-1.09443 -2.049431,-1.09442 -2.116604,1.14523 -2.116613,1.14523 v 0.17781 0.17782 l 2.004029,1.06709 2.004037,1.06711 0.277236,0.005 0.277237,0.005 z m 23.056528,4.3e-4 2.03643,-1.07372 -0.0708,-0.21245 -0.0708,-0.21244 -2.09332,-1.13015 -2.09332,-1.13016 -2.077692,1.17124 -2.077685,1.17123 v 0.17384 0.17386 l 1.889522,1.0551 1.889505,1.0551 0.31588,0.0161 0.31587,0.0161 z m -14.742004,-11.90808 0.06492,-2.2946 -0.293917,-0.23052 -0.293926,-0.2305 -2.011741,-1.08631 -2.01175,-1.08629 0.06501,2.57478 0.06501,2.57476 1.946776,1.09773 1.946767,1.09773 0.229038,-0.0611 0.229029,-0.0611 z m 4.401245,1.31989 1.946767,-1.09857 0.06501,-2.57476 0.06501,-2.57478 -2.01175,1.08629 -2.011741,1.08631 -0.286291,0.22417 -0.286291,0.22418 v 2.22411 2.2241 l 0.152689,0.15269 0.152689,0.15269 0.133602,-0.0139 0.133602,-0.0139 z m -1.021015,-6.79999 1.952048,-1.05546 -0.224347,-0.26147 -0.224337,-0.26149 -1.958921,-1.03065 -1.958911,-1.03064 -1.958912,1.03064 -1.958912,1.03065 -0.224303,0.26142 -0.224277,0.26141 1.896915,1.04261 1.896906,1.04261 0.517494,0.0129 0.517501,0.0129 z",style:{fill:"#0d6efd",fillOpacity:1,strokeWidth:.865634},id:"path1-8"}))),Ov=({title:e,version:t})=>d.jsxs("header",{className:"bg-slate-50 drop-shadow-lg flex flex-wrap justify-center lg:justify-between items-center dark:bg-slate-800 mb-3",children:[d.jsxs("div",{className:"flex flex-nowrap items-center justify-between m-2",children:[d.jsx(Lv,{className:"w-10 h-10 p-1",alt:"logo"}),d.jsxs("h1",{className:"flex items-center dark:text-white",children:[d.jsx("div",{className:"text-3xl",children:e}),d.jsxs("div",{className:"bg-blue-100 text-blue-800 text-xl font-semibold me-2 px-2.5 py-0.5 rounded ms-2 dark:bg-blue-900 dark:text-white",children:["v",t]})]})]}),d.jsxs("div",{className:"flex flex-wrap gap-1 m-2",children:[d.jsx(Pv,{className:"flex-grow justify-center dark:text-white"}),d.jsx(Nv,{className:"flex-grow justify-center dark:text-white"})]})]});let Fn=window.matchMedia("(prefers-color-scheme: dark)").matches;window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{Ki.setDark(e.matches)});const Ki={isDark:()=>Fn,setDark:e=>(Fn=e,document.body.classList.toggle("dark",Fn),Fn),toggle:()=>{Ki.setDark(!Fn)}};Ki.setDark(Fn);const Mv=e=>{let[t,n]=C.useState(!1);const r=bn(f=>f.setOtherError),l=C.useContext(Lt),i=vn(f=>f.setTorrents),o=vn(f=>f.setTorrentsLoading),s=vn(f=>f.setRefreshTorrents),a=async()=>{o(!0);let f=await l.listTorrents().finally(()=>o(!1));i(f.torrents)};return s(a),C.useEffect(()=>Os(async()=>a().then(()=>(r(null),5e3),f=>(r({text:"Error refreshing torrents",details:f}),console.error(f),5e3)),0),[]),d.jsxs("div",{className:"dark:bg-gray-900 dark:text-gray-200 min-h-screen",children:[d.jsx(Ov,{title:e.title,version:e.version}),d.jsxs("div",{className:"relative",children:[d.jsxs("div",{className:"absolute top-0 start-0 pl-2 z-10",children:[e.menuButtons&&e.menuButtons.map((f,y)=>d.jsx("span",{children:f},y)),d.jsx(hn,{onClick:()=>n(!0),children:d.jsx(fm,{})}),d.jsx(hn,{onClick:Ki.toggle,children:d.jsx(dm,{})})]}),d.jsx(Xg,{})]}),d.jsx(Ev,{show:t,onClose:()=>n(!1)})]})},r0=window.origin==="null"||window.origin==="http://localhost:3031"?"http://localhost:3030":"",ot=async(e,t,n,r)=>{console.log(e,t);const l=r0+t;let i={method:e,headers:{Accept:"application/json"}};r?(i.headers={Accept:"application/json","Content-Type":"application/json"},i.body=JSON.stringify(n)):i.body=n;let o={method:e,path:t,text:""},s;try{s=await fetch(l,i)}catch{return o.text="network error",Promise.reject(o)}if(o.status=s.status,o.statusText=`${s.status} ${s.statusText}`,!s.ok){const f=await s.text();try{const y=JSON.parse(f);o.text=y.human_readable!==void 0?y.human_readable:JSON.stringify(y,null,2)}catch{o.text=f}return Promise.reject(o)}return await s.json()},Cc={getStreamLogsUrl:()=>r0+"/stream_logs",listTorrents:()=>ot("GET","/torrents"),getTorrentDetails:e=>ot("GET",`/torrents/${e}`),getTorrentStats:e=>ot("GET",`/torrents/${e}/stats/v1`),uploadTorrent:(e,t)=>{var r,l;let n="/torrents?&overwrite=true";return t!=null&&t.list_only&&(n+="&list_only=true"),(t==null?void 0:t.only_files)!=null&&(n+=`&only_files=${t.only_files.join(",")}`),(r=t==null?void 0:t.peer_opts)!=null&&r.connect_timeout&&(n+=`&peer_connect_timeout=${t.peer_opts.connect_timeout}`),(l=t==null?void 0:t.peer_opts)!=null&&l.read_write_timeout&&(n+=`&peer_read_write_timeout=${t.peer_opts.read_write_timeout}`),t!=null&&t.initial_peers&&(n+=`&initial_peers=${t.initial_peers.join(",")}`),t!=null&&t.output_folder&&(n+=`&output_folder=${t.output_folder}`),typeof e=="string"&&(n+="&is_url=true"),ot("POST",n,e)},updateOnlyFiles:(e,t)=>{let n=`/torrents/${e}/update_only_files`;return ot("POST",n,{only_files:t},!0)},pause:e=>ot("POST",`/torrents/${e}/pause`),start:e=>ot("POST",`/torrents/${e}/start`),forget:e=>ot("POST",`/torrents/${e}/forget`),delete:e=>ot("POST",`/torrents/${e}/delete`),getVersion:async()=>(await ot("GET","/")).version},zv=()=>{let[e,t]=C.useState("");return C.useEffect(()=>Os(()=>Cc.getVersion().then(r=>{t(r);const l=`rqbit web UI - v${r}`;return document.title=l,1e4},r=>1e3),0),[]),d.jsx(Lt.Provider,{value:Cc,children:d.jsx(Mv,{title:"rqbit web UI",version:e})})};$o.createRoot(document.getElementById("app")).render(d.jsx(C.StrictMode,{children:d.jsx(zv,{})})); diff --git a/crates/librqbit/webui/dist/manifest.json b/crates/librqbit/webui/dist/manifest.json index f1249f6..a4f97cf 100644 --- a/crates/librqbit/webui/dist/manifest.json +++ b/crates/librqbit/webui/dist/manifest.json @@ -11,7 +11,7 @@ "css": [ "assets/index-144bafe5.css" ], - "file": "assets/index-4909e839.js", + "file": "assets/index-838acac9.js", "isEntry": true, "src": "index.html" } diff --git a/crates/librqbit/webui/src/components/FileListInput.tsx b/crates/librqbit/webui/src/components/FileListInput.tsx index 0d6e933..83cf4ee 100644 --- a/crates/librqbit/webui/src/components/FileListInput.tsx +++ b/crates/librqbit/webui/src/components/FileListInput.tsx @@ -46,7 +46,7 @@ const newFileTree = ( directFiles.push(file); return; } - getGroup(file.pathComponents[0]).push(file); + getGroup(file.pathComponents[depth]).push(file); }); directFiles = sortBy(directFiles, (f) => f.filename);