@jesec/flood 0.0.0-master.6afabbe → 0.0.0-master.6b0ddfd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +4 -7
  2. package/dist/assets/assets/Alerts-BfYWD54i.js +2 -0
  3. package/dist/assets/assets/{Alerts-CpHH3EgE.js.map → Alerts-BfYWD54i.js.map} +1 -1
  4. package/dist/assets/assets/ApplicationView-nEqg5l1F.js +2 -0
  5. package/dist/assets/assets/{ApplicationView-CT5l4R4M.js.map → ApplicationView-nEqg5l1F.js.map} +1 -1
  6. package/dist/assets/assets/AuthForm-B-hNak0N.js +2 -0
  7. package/dist/assets/assets/{AuthForm-BjCytAY6.js.map → AuthForm-B-hNak0N.js.map} +1 -1
  8. package/dist/assets/assets/Login-DzdQ0hAW.js +2 -0
  9. package/dist/assets/assets/{Login-BVsSTgwh.js.map → Login-DzdQ0hAW.js.map} +1 -1
  10. package/dist/assets/assets/Modals-1o2rZ6px.js +53 -0
  11. package/dist/assets/assets/Modals-1o2rZ6px.js.map +1 -0
  12. package/dist/assets/assets/Overview-CKqnHuvs.js +700 -0
  13. package/dist/assets/assets/Overview-CKqnHuvs.js.map +1 -0
  14. package/dist/assets/assets/Register-CmnhXSLi.js +2 -0
  15. package/dist/assets/assets/{Register-CdqHsdPF.js.map → Register-CmnhXSLi.js.map} +1 -1
  16. package/dist/assets/assets/dist-DTOngMXG.js +5 -0
  17. package/dist/assets/assets/dist-DTOngMXG.js.map +1 -0
  18. package/dist/assets/assets/index-Bokn50Is.js +84 -0
  19. package/dist/assets/assets/index-Bokn50Is.js.map +1 -0
  20. package/dist/assets/assets/index-H8kSoxrM.css +1 -0
  21. package/dist/assets/assets/{pl-LvqNumg3.js → pl-KAHyfQOi.js} +2 -2
  22. package/dist/assets/assets/{pl-LvqNumg3.js.map → pl-KAHyfQOi.js.map} +1 -1
  23. package/dist/assets/index.html +3 -3
  24. package/dist/index.js +2 -2
  25. package/package.json +63 -64
  26. package/dist/assets/assets/Alerts-CpHH3EgE.js +0 -2
  27. package/dist/assets/assets/ApplicationView-CT5l4R4M.js +0 -2
  28. package/dist/assets/assets/AuthForm-BjCytAY6.js +0 -2
  29. package/dist/assets/assets/Badge-Z1xMhNLY.js +0 -2
  30. package/dist/assets/assets/Badge-Z1xMhNLY.js.map +0 -1
  31. package/dist/assets/assets/Login-BVsSTgwh.js +0 -2
  32. package/dist/assets/assets/Modals-CZHAwoPS.js +0 -53
  33. package/dist/assets/assets/Modals-CZHAwoPS.js.map +0 -1
  34. package/dist/assets/assets/Overview-CQhbFTiM.js +0 -700
  35. package/dist/assets/assets/Overview-CQhbFTiM.js.map +0 -1
  36. package/dist/assets/assets/Register-CdqHsdPF.js +0 -2
  37. package/dist/assets/assets/dist-krxpX6n5.js +0 -7
  38. package/dist/assets/assets/dist-krxpX6n5.js.map +0 -1
  39. package/dist/assets/assets/index-BI7wpBCr.js +0 -93
  40. package/dist/assets/assets/index-BI7wpBCr.js.map +0 -1
  41. package/dist/assets/assets/index-YxEtGNVq.css +0 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/dist/index.js
3
- size: 36044777 bytes
4
- sha256: 5247858581ba6ed58398153eb0fe312e0c0ed3f28c720c06790c73c38c3cd4e7
3
+ size: 35824906 bytes
4
+ sha256: 03964b5f2eb13f8fb97e5d7bff752ac473eb9f935ca8b0a004f3f3b9cbec1017
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@jesec/flood",
3
- "version": "0.0.0-master.6afabbe",
3
+ "version": "0.0.0-master.6b0ddfd",
4
4
  "description": "A modern Web UI for various torrent clients with multi-user and multi-client support",
5
+ "type": "module",
5
6
  "keywords": [
6
7
  "typescript",
7
8
  "react",
@@ -43,71 +44,68 @@
43
44
  ]
44
45
  },
45
46
  "devDependencies": {
46
- "@babel/core": "8.0.1",
47
- "@babel/eslint-parser": "8.0.1",
48
- "@babel/preset-env": "8.0.2",
49
- "@babel/preset-react": "8.0.1",
50
- "@babel/preset-typescript": "8.0.1",
51
47
  "@dnd-kit/core": "6.3.1",
52
48
  "@dnd-kit/modifiers": "9.0.0",
53
49
  "@dnd-kit/sortable": "10.0.0",
54
50
  "@dnd-kit/utilities": "3.2.2",
55
51
  "@eslint/js": "9.39.5",
56
- "@fastify/compress": "9.1.0",
52
+ "@fastify/compress": "9.2.0",
57
53
  "@fastify/cookie": "11.1.2",
58
54
  "@fastify/error": "4.2.0",
59
- "@fastify/rate-limit": "11.1.0",
60
- "@fastify/send": "4.1.0",
61
- "@fastify/sse": "0.5.0",
62
- "@fastify/static": "10.1.2",
55
+ "@fastify/rate-limit": "11.2.0",
56
+ "@fastify/send": "4.1.1",
57
+ "@fastify/sse": "0.6.0",
58
+ "@fastify/static": "10.1.4",
63
59
  "@fastify/swagger": "9.8.1",
64
- "@lingui/cli": "6.6.0",
65
- "@lingui/core": "6.6.0",
66
- "@lingui/format-json": "6.6.0",
67
- "@lingui/react": "6.6.0",
68
- "@lingui/vite-plugin": "6.6.0",
60
+ "@lingui/cli": "6.7.0",
61
+ "@lingui/core": "6.7.0",
62
+ "@lingui/format-json": "6.7.0",
63
+ "@lingui/react": "6.7.0",
64
+ "@lingui/vite-plugin": "6.7.0",
69
65
  "@maxmind/geoip2-node": "7.1.0",
70
- "@pandacss/dev": "1.11.5",
66
+ "@pandacss/dev": "1.12.1",
71
67
  "@seald-io/nedb": "4.1.2",
72
- "@storybook/addon-onboarding": "10.5.4",
73
- "@storybook/react-vite": "10.5.4",
74
- "@storybook/test-runner": "0.24.4",
68
+ "@storybook/addon-onboarding": "10.6.0",
69
+ "@storybook/react-vite": "10.6.0",
70
+ "@storybook/test-runner": "0.24.5",
75
71
  "@trim21/neptune": "0.1.0-dev.919",
76
72
  "@types/bencode": "4.0.0",
77
- "@types/content-disposition": "0.5.9",
78
73
  "@types/create-torrent": "6.1.1",
79
74
  "@types/d3": "7.4.3",
80
75
  "@types/d3-array": "3.2.2",
81
76
  "@types/d3-scale": "4.0.9",
82
- "@types/d3-shape": "3.1.8",
77
+ "@types/d3-shape": "3.2.0",
83
78
  "@types/fs-extra": "11.0.4",
84
79
  "@types/http-errors": "2.0.5",
85
80
  "@types/jest": "30.0.0",
86
81
  "@types/jsonwebtoken": "9.0.10",
87
- "@types/lodash": "4.17.24",
82
+ "@types/lodash": "4.17.25",
88
83
  "@types/mime-types": "3.0.1",
89
84
  "@types/morgan": "1.9.10",
90
- "@types/node": "22.20.1",
85
+ "@types/node": "22.20.4",
86
+ "@types/parse-torrent": "11.0.1",
91
87
  "@types/passport": "1.0.17",
92
88
  "@types/passport-jwt": "4.0.1",
93
- "@types/react": "19.2.17",
94
- "@types/react-dom": "19.2.3",
89
+ "@types/react": "19.3.0",
90
+ "@types/react-dom": "19.3.0",
95
91
  "@types/react-measure": "2.0.12",
96
92
  "@types/supertest": "7.2.1",
97
93
  "@types/tar-fs": "2.0.4",
98
94
  "@types/yargs": "17.0.35",
99
- "@typescript-eslint/eslint-plugin": "8.65.0",
100
- "@typescript-eslint/parser": "8.65.0",
101
- "@vitejs/plugin-react": "6.0.4",
102
- "@vitest/coverage-v8": "4.1.10",
103
- "autoprefixer": "10.5.4",
104
- "axios": "1.18.1",
95
+ "@typescript/native": "npm:typescript@7.0.2",
96
+ "@typescript-eslint/eslint-plugin": "8.70.0",
97
+ "@typescript-eslint/parser": "8.70.0",
98
+ "@vitejs/plugin-react": "6.1.1",
99
+ "@vitest/coverage-v8": "5.0.1",
100
+ "@yao-pkg/pkg": "6.23.0",
101
+ "autoprefixer": "10.6.1",
102
+ "axios": "1.20.0",
105
103
  "axios-mock-adapter": "2.1.0",
106
104
  "bencode": "4.0.1",
107
- "chalk": "5.6.2",
105
+ "chalk": "6.0.0",
108
106
  "classnames": "2.5.1",
109
- "concurrently": "10.0.4",
110
- "content-disposition": "2.0.1",
107
+ "concurrently": "10.0.5",
108
+ "content-disposition": "3.0.0",
111
109
  "create-torrent": "6.1.3",
112
110
  "d3-array": "3.2.4",
113
111
  "d3-scale": "4.0.2",
@@ -115,68 +113,69 @@
115
113
  "d3-shape": "3.2.0",
116
114
  "eslint": "9.39.5",
117
115
  "eslint-config-prettier": "10.1.8",
118
- "eslint-plugin-n": "18.2.2",
116
+ "eslint-plugin-n": "18.3.0",
119
117
  "eslint-plugin-react": "7.37.5",
120
- "eslint-plugin-react-hooks": "5.2.0",
118
+ "eslint-plugin-react-hooks": "7.1.1",
121
119
  "eslint-plugin-simple-import-sort": "14.0.0",
122
- "eslint-plugin-storybook": "10.5.4",
120
+ "eslint-plugin-storybook": "10.6.0",
123
121
  "fast-json-patch": "3.1.1",
124
122
  "fast-sort": "3.4.1",
125
- "fastify": "5.10.0",
123
+ "fastify": "5.12.5",
126
124
  "fastify-type-provider-zod": "7.0.0",
127
125
  "feedsub": "0.7.8",
128
126
  "form-data": "4.0.6",
129
127
  "fs-extra": "11.4.0",
130
128
  "get-user-locale": "3.0.0",
131
- "globals": "17.7.0",
129
+ "globals": "17.12.0",
132
130
  "hash-wasm": "4.12.0",
133
131
  "http-errors": "2.0.1",
134
132
  "husky": "9.1.7",
135
133
  "js-file-download": "0.4.12",
136
134
  "jsonwebtoken": "9.0.3",
137
- "lint-staged": "17.2.0",
135
+ "lint-staged": "17.5.1",
138
136
  "lodash": "4.18.1",
139
137
  "mime-types": "3.0.2",
140
- "mobx": "6.16.1",
141
- "mobx-react-lite": "4.1.1",
142
- "morgan": "1.11.0",
138
+ "mobx": "7.0.3",
139
+ "mobx-react-lite": "5.0.3",
140
+ "morgan": "1.12.1",
143
141
  "overlayscrollbars": "2.16.0",
144
142
  "overlayscrollbars-react": "0.5.6",
145
- "p-queue": "9.3.3",
146
- "parse-torrent": "11.0.23",
143
+ "p-queue": "10.0.0",
144
+ "parse-torrent": "11.0.24",
147
145
  "passport": "0.7.0",
148
146
  "passport-jwt": "4.0.1",
149
147
  "pino": "10.3.1",
150
148
  "pino-pretty": "13.1.3",
151
- "postcss": "8.5.23",
152
- "prettier": "3.9.6",
153
- "react": "19.2.8",
154
- "react-dom": "19.2.8",
155
- "react-dropzone": "19.1.1",
149
+ "postcss": "8.5.28",
150
+ "prettier": "3.9.8",
151
+ "react": "19.3.0",
152
+ "react-dom": "19.3.0",
153
+ "react-dropzone": "19.3.0",
156
154
  "react-markdown": "10.1.0",
157
155
  "react-measure": "2.5.2",
158
- "react-router": "8.3.0",
156
+ "react-router": "8.4.0",
159
157
  "react-transition-state": "2.4.0",
160
158
  "react-use": "17.6.1",
161
- "react-window": "2.3.0",
159
+ "react-window": "2.3.1",
162
160
  "ress": "5.0.2",
163
- "rolldown": "1.2.0",
161
+ "rolldown": "1.2.9",
164
162
  "sanitize-filename": "1.6.4",
165
- "sass": "1.102.0",
166
- "saxen": "11.1.0",
167
- "storybook": "10.5.4",
163
+ "sass": "1.104.1",
164
+ "saxen": "11.1.1",
165
+ "storybook": "10.6.0",
168
166
  "supertest": "7.2.2",
169
167
  "tar-fs": "3.1.3",
170
- "tldts": "7.4.9",
168
+ "tldts": "7.4.13",
171
169
  "tsconfig-paths": "4.2.0",
172
170
  "typed-emitter": "2.1.0",
173
- "typescript": "6.0.3",
174
- "typescript-eslint": "8.65.0",
175
- "vite": "8.1.5",
171
+ "typescript": "npm:@typescript/typescript6@6.0.2",
172
+ "typescript-eslint": "8.70.0",
173
+ "unzipper": "0.12.5",
174
+ "vite": "8.3.0",
176
175
  "vite-node": "6.0.0",
177
- "vitest": "4.1.10",
178
- "yargs": "17.7.3",
179
- "zod": "4.4.3"
176
+ "vitest": "5.0.1",
177
+ "yargs": "18.1.0",
178
+ "zod": "4.6.5"
180
179
  },
181
180
  "engines": {
182
181
  "node": ">=22.0.0"
@@ -1,2 +0,0 @@
1
- import{Bt as e,C as t,Tt as n,Wt as r,Xt as i,an as a,n as o,wt as s,zt as c}from"./dist-krxpX6n5.js";var l=a(r()),u=c(),d=i(t=>{let{id:r}=t,{count:i,type:a}=e.alerts[r]||{};if(r==null||i==null||a==null)return null;let c=(0,l.default)(`alert`,{"is-success":a===`success`,"is-error":a===`error`}),d=(0,u.jsx)(n,{});return a===`error`&&(d=(0,u.jsx)(s,{})),(0,u.jsxs)(`li`,{className:c,children:[d,(0,u.jsx)(`span`,{className:`alert__content`,children:(0,u.jsx)(o,{id:r,values:{count:i,countElement:(0,u.jsx)(`span`,{className:`alert__count`,children:i})}})})]})}),f=i(()=>{let{sortedAlerts:n}=e;return(0,u.jsx)(t,{classNamePrefix:`alerts__list`,in:n!=null&&n.length>0,mountOnEnter:!0,timeout:{enter:250,exit:250},unmountOnExit:!0,children:e=>(0,u.jsx)(`ul`,{className:(0,l.default)(`alerts__list`,e),children:n.map(e=>(0,u.jsx)(d,{id:e.id},e.id))})})});export{f as default};
2
- //# sourceMappingURL=Alerts-CpHH3EgE.js.map
@@ -1,2 +0,0 @@
1
- import{Wt as e,Xt as t,an as n,zt as r}from"./dist-krxpX6n5.js";import{m as i}from"./index-BI7wpBCr.js";var a=n(e()),o=r(),s=function(e){return e.AuthForm=`auth-form`,e.SidebarAlternativeState=`sidebar-alternative-state`,e}({}),c=t(({children:e,modifier:t})=>{let n=[];return t!=null&&n.push(t),i.isSidebarAlternativeState&&n.push(`sidebar-alternative-state`),(0,o.jsx)(`div`,{className:(0,a.default)(`application__view`,...n.map(e=>`application__view--${e}`)),children:e})});export{s as n,c as t};
2
- //# sourceMappingURL=ApplicationView-CT5l4R4M.js.map
@@ -1,2 +0,0 @@
1
- import{_ as e,an as t,b as n,d as r,f as i,g as a,i as o,l as s,m as c,nn as l,r as u,u as d,zt as f}from"./dist-krxpX6n5.js";import{c as p,f as m,k as h,s as g}from"./index-BI7wpBCr.js";var _=t(l()),v=f(),y=({mode:t})=>{let{i18n:l}=u(),f=(0,_.useRef)(null),y=(0,_.useRef)(null),[b,x]=(0,_.useState)(void 0),[S,C]=(0,_.useState)(!1),w=h(),T=t===`login`;return(0,v.jsx)(`div`,{className:`application__entry-barrier`,children:(0,v.jsx)(i,{spacing:`large`,children:(0,v.jsxs)(e,{onSubmit:e=>{e.event.preventDefault(),C(!0);let t=e.formData;if(t.username==null||t.username===``){C(!1),x({id:`auth.error.username.empty`});return}if(t.password==null||t.password===``){C(!1),x({id:`auth.error.password.empty`});return}if(T){let e=t;p.authenticate({username:e.username,password:e.password}).then(()=>{C(!1),w(`/overview`,{replace:!0})}).catch(e=>{C(!1),x(e.message),w(`/login`,{replace:!0})})}else{let e=t;if(y.current==null){C(!1),x({id:`connection.settings.error.empty`});return}let n=y.current;if(n==null){C(!1),x({id:`connection.settings.error.empty`});return}p.register({username:e.username,password:e.password,client:n,level:m.ADMINISTRATOR}).then(()=>{C(!1),w(`/overview`,{replace:!0})},e=>{C(!1),x(e.message)})}},ref:f,children:[(0,v.jsx)(s,{children:(0,v.jsx)(`h1`,{children:T?l._(`auth.login`):l._(`auth.create.an.account`)})}),(0,v.jsxs)(r,{children:[(0,v.jsx)(`p`,{className:`copy--lead`,children:T?l._(`auth.login.intro`):l._(`auth.create.an.account.intro`)}),b==null?null:(0,v.jsx)(c,{children:(0,v.jsx)(a,{isLoading:S,children:typeof b==`string`?b:l._(b)})}),(0,v.jsx)(c,{children:(0,v.jsx)(o,{placeholder:l._(`auth.username`),id:`username`,autoComplete:`username`})}),(0,v.jsx)(c,{children:(0,v.jsx)(o,{placeholder:l._(`auth.password`),id:`password`,type:`password`,autoComplete:T?`current-password`:`new-password`})})]}),T?null:(0,v.jsx)(r,{hasBorder:!0,children:(0,v.jsx)(g,{onSettingsChange:e=>{y.current=e}})}),(0,v.jsx)(d,{hasBorder:!0,children:(0,v.jsxs)(c,{justify:`end`,children:[(0,v.jsx)(n,{priority:`tertiary`,onClick:()=>{f.current!=null&&f.current.resetForm()},children:l._(`auth.input.clear`)}),(0,v.jsx)(n,{isLoading:S,type:`submit`,children:T?l._(`auth.log.in`):l._(`auth.create.account`)})]})})]})})})};export{y as t};
2
- //# sourceMappingURL=AuthForm-BjCytAY6.js.map
@@ -1,2 +0,0 @@
1
- import{Bt as e,F as t,Gt as n,Ht as r,I as i,L as a,Ut as o,Wt as s,Xt as c,an as l,dt as u,n as d,nn as f,r as p,rn as m,wt as h,zt as g}from"./dist-krxpX6n5.js";import{O as _,a as v,i as y,m as b,o as ee}from"./index-BI7wpBCr.js";var x=l(f());function S(){var e=(0,x.useRef)(!0);return e.current?(e.current=!1,!0):e.current}var C=function(e,t){var n=S();(0,x.useEffect)(function(){if(!n)return e()},t)};function w(e){var t=(0,x.useRef)(e&&e.current);return(0,x.useEffect)(function(){e&&(e.current=t.current)},[e]),t}var T=function(e){var t=(0,x.useState)([!1,null]),r=t[0],i=t[1];return n(e,function(e){return i([!0,e])},{event:`keydown`},[r]),n(e,function(e){return i([!1,e])},{event:`keyup`},[r]),r},te=function(e,t,n,r){r===void 0&&(r=T);var i=r(e),a=i[0],o=i[1];C(function(){!a&&n?n(o):a&&t&&t(o)},[a])},ne=l(m(((e,t)=>{t.exports=function(e,t,n,r){var i=new Blob(r===void 0?[e]:[r,e],{type:n||`application/octet-stream`});if(window.navigator.msSaveBlob!==void 0)window.navigator.msSaveBlob(i,t);else{var a=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(i):window.webkitURL.createObjectURL(i),o=document.createElement(`a`);o.style.display=`none`,o.href=a,o.setAttribute(`download`,t),o.download===void 0&&o.setAttribute(`target`,`_blank`),document.body.appendChild(o),o.click(),setTimeout(function(){document.body.removeChild(o),window.URL.revokeObjectURL(a)},200)}}}))()),{baseURI:E}=r,D=t=>{e.add({id:`alert.torrent.add.sent`,count:t})},O=t=>{e.add({id:`alert.torrent.add`,type:`success`,count:t})},k=t=>{e.add({id:`alert.torrent.add.failed`,type:`error`,count:t})},A={addTorrentsByUrls:e=>_.post(`${E}api/torrents/add-urls`,e).then(({data:t})=>{t.length?O(t.length):D(e.urls.length)},()=>{k(e.urls.length)}),addTorrentsByFiles:e=>_.post(`${E}api/torrents/add-files`,e).then(({data:t})=>{t.length?O(t.length):D(e.files.length)},()=>{k(e.files.length)}),createTorrent:e=>_.post(`${E}api/torrents/create`,e,{responseType:`blob`}).then(({data:t})=>{(0,ne.default)(t,(e.name||`${Date.now()}`).concat(`.torrent`)),O(1)},()=>{k(1)}),deleteTorrents:t=>_.post(`${E}api/torrents/delete`,t).then(()=>e.add({id:`alert.torrent.remove`,type:`success`,count:t.hashes.length}),()=>e.add({id:`alert.torrent.remove.failed`,type:`error`,count:t.hashes.length})),checkHash:e=>_.post(`${E}api/torrents/check-hash`,e).then(()=>{},()=>{}),fetchMediainfo:(e,t)=>_.get(`${E}api/torrents/${e}/mediainfo`,{cancelToken:t}).then(e=>e.data),fetchTorrentContents:e=>_.get(`${E}api/torrents/${e}/contents`).then(e=>e.data,()=>null),fetchTorrentPeers:e=>_.get(`${E}api/torrents/${e}/peers`).then(e=>e.data,()=>null),fetchTorrentTrackers:e=>_.get(`${E}api/torrents/${e}/trackers`).then(e=>e.data,()=>null),getTorrentContentsDataPermalink:(e,t)=>_.get(`${r.baseURI}api/torrents/${e}/contents/${t.join(`,`)}/token`).then(n=>`${window.location.protocol}//${window.location.host}${r.baseURI}api/torrents/${e}/contents/${t.join(`,`)}/data?token=${n.data}`),moveTorrents:t=>_.post(`${E}api/torrents/move`,t).then(()=>e.add({id:`alert.torrent.move`,type:`success`,count:t.hashes.length}),()=>e.add({id:`alert.torrent.move.failed`,type:`error`,count:t.hashes.length})),reannounce:e=>_.post(`${E}api/torrents/reannounce`,e).then(()=>{},()=>{}),startTorrents:async e=>{if(e.hashes.length>0)return _.post(`${E}api/torrents/start`,e).then(()=>{},()=>{})},stopTorrents:async e=>{if(e.hashes.length>0)return _.post(`${E}api/torrents/stop`,e).then(()=>{},()=>{})},setInitialSeeding:e=>_.patch(`${E}api/torrents/initial-seeding`,e).then(()=>{},()=>{}),setPriority:e=>_.patch(`${E}api/torrents/priority`,e).then(()=>{},()=>{}),setSequential:e=>_.patch(`${E}api/torrents/sequential`,e).then(()=>{},()=>{}),setFilePriority:(e,t)=>_.patch(`${E}api/torrents/${e}/contents`,t).then(()=>{},()=>{}),setTags:e=>_.patch(`${E}api/torrents/tags`,e).then(()=>b.handleSetTaxonomySuccess(),()=>{}),setTrackers:e=>_.patch(`${E}api/torrents/trackers`,e).then(()=>{},()=>{})},re=new Map([[`avif`,`image/avif`],[`bmp`,`image/bmp`],[`css`,`text/css`],[`csv`,`text/csv`],[`doc`,`application/msword`],[`docx`,`application/vnd.openxmlformats-officedocument.wordprocessingml.document`],[`gif`,`image/gif`],[`gz`,`application/gzip`],[`htm`,`text/html`],[`html`,`text/html`],[`ico`,`image/x-icon`],[`jpeg`,`image/jpeg`],[`jpg`,`image/jpeg`],[`js`,`application/javascript`],[`json`,`application/json`],[`md`,`text/markdown`],[`mjs`,`application/javascript`],[`mp3`,`audio/mpeg`],[`mp4`,`video/mp4`],[`ogg`,`audio/ogg`],[`pdf`,`application/pdf`],[`png`,`image/png`],[`ppt`,`application/powerpoint`],[`pptx`,`application/vnd.openxmlformats-officedocument.presentationml.presentation`],[`svg`,`image/svg+xml`],[`tif`,`image/tiff`],[`tiff`,`image/tiff`],[`txt`,`text/plain`],[`wasm`,`application/wasm`],[`wav`,`audio/x-wav`],[`weba`,`audio/webm`],[`webm`,`video/webm`],[`webp`,`image/webp`],[`xls`,`application/vnd.ms-excel`],[`xlsx`,`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`],[`xml`,`application/xml`],[`zip`,`application/zip`]]),j=class extends Error{constructor(e){super(`DataTransferItem is not a file`),this.item=e,this.name=`UnexpectedObjectError`}};function M(e,t,n){let r=e,{webkitRelativePath:i}=e,a=typeof t==`string`?t:typeof i==`string`&&i.length>0?i:`./${e.name}`;return typeof r.path!=`string`&&P(r,`path`,a),n!==void 0&&Object.defineProperty(r,"handle",{value:n,writable:!1,configurable:!1,enumerable:!0}),P(r,`relativePath`,a),r}function N(e,t=re){let{name:n}=e;if(n&&n.lastIndexOf(`.`)!==-1&&!e.type){let r=n.split(`.`).pop().toLowerCase(),i=t.get(r);i&&Object.defineProperty(e,"type",{value:i,writable:!1,configurable:!1,enumerable:!0})}return e}function P(e,t,n){Object.defineProperty(e,t,{value:n,writable:!1,configurable:!1,enumerable:!0})}var ie=[`.DS_Store`,`Thumbs.db`];async function ae(e,{mimeTypes:t=re}={}){return(await F(e)).map(e=>e instanceof File?N(e,t):e)}async function F(e){return R(e)&&I(e.dataTransfer)?oe(e.dataTransfer,e.type):L(e)?z(e):Array.isArray(e)&&e.every(e=>`getFile`in e&&typeof e.getFile==`function`)?B(e):[]}function I(e){return R(e)}function L(e){return R(e)&&R(e.target)}function R(e){return typeof e==`object`&&!!e}function z(e){return se(e.target.files).map(e=>M(e))}async function B(e){return(await Promise.all(e.map(e=>e.getFile()))).map(e=>M(e))}async function oe(e,t){let n=se(e.items).filter(e=>e.kind===`file`);return t===`drop`?V(H(await Promise.all(n.map(ce)))):n}function V(e){return e.filter(e=>ie.indexOf(e.name)===-1)}function se(e){return e===null?[]:Array.from(e)}async function ce(e){if(typeof e.webkitGetAsEntry!=`function`)return U(e);let t=e.webkitGetAsEntry();if(t?.isDirectory){let n=await W(e);return n?.kind===`directory`?G(n,`/${n.name}`):K(t)}return U(e,t)}function H(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...H(n)):t.push(n);return t}async function U(e,t){let n=e.getAsFile(),r=await W(e);if(r!=null){let e=n??await r.getFile();return e.handle=r,M(e)}if(!n)throw new j(e);return M(n,t?.fullPath??void 0)}async function W(e){if(globalThis.isSecureContext&&typeof e.getAsFileSystemHandle==`function`)return e.getAsFileSystemHandle()}async function G(e,t){let n=[];for await(let r of e.values()){let e=`${t}/${r.name}`;if(r.kind===`directory`)n.push(...await G(r,e));else{let t=await r.getFile();n.push(M(t,e,r))}}return n}async function le(e){return e.isDirectory?K(e):ue(e)}function K(e){let t=e.createReader();return new Promise((e,n)=>{let r=[];function i(){t.readEntries(async t=>{if(t.length){let e=Promise.all(t.map(le));r.push(e),i()}else try{e(await Promise.all(r))}catch(e){n(e)}},e=>{n(e)})}i()})}async function ue(e){return new Promise((t,n)=>{e.file(n=>{t(M(n,e.fullPath))},e=>{n(e)})})}var q=l(m((e=>{e.__esModule=!0,e.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(`,`);if(n.length===0)return!0;var r=e.name||``,i=(e.type||``).toLowerCase(),a=i.replace(/\/.*$/,``);return n.some(function(e){var t=e.trim().toLowerCase();return t.charAt(0)===`.`?r.toLowerCase().endsWith(t):t.endsWith(`/*`)?a===t.replace(/\/.*$/,``):i===t})}return!0}}))(),1),J=g(),de=typeof q.default==`function`?q.default:q.default.default,Y=`file-invalid-type`,X=`file-too-large`,fe=`file-too-small`,pe=`too-many-files`;function me(e=``){let t=e.split(`,`);return{code:Y,message:`File type must be ${t.length>1?`one of ${t.join(`, `)}`:t[0]}`}}var he=[`KB`,`MB`,`GB`,`TB`,`PB`];function ge(e){if(e<1024)return`${e} ${e===1?`byte`:`bytes`}`;let t=e/1024,n=0;for(;t>=1024&&n<he.length-1;)t/=1024,n++;return`${Number(t.toFixed(2))} ${he[n]}`}function _e(e){return{code:X,message:`File is larger than ${ge(e)}`}}function ve(e){return{code:fe,message:`File is smaller than ${ge(e)}`}}var ye={code:pe,message:`Too many files`};function be(e){return e.type===``&&typeof e.getAsFile==`function`}function xe(e,t){let n=e.type===`application/x-moz-file`||de(e,t??``)||be(e);return[n,n?null:me(t)]}function Se(e,t,n){if(Z(e.size)){if(Z(t)&&Z(n)){if(e.size>n)return[!1,_e(n)];if(e.size<t)return[!1,ve(t)]}else if(Z(t)&&e.size<t)return[!1,ve(t)];else if(Z(n)&&e.size>n)return[!1,_e(n)]}return[!0,null]}function Z(e){return e!=null}function Ce(e){return e!=null&&typeof e.then==`function`}function we({files:e,accept:t,minSize:n,maxSize:r,multiple:i,maxFiles:a=0,validator:o}){return!i&&e.length>1||i&&a>=1&&e.length>a||e.some(e=>{let[i]=xe(e,t),[a]=Se(e,n,r);return!i||!a})?`reject`:o?`unknown`:`accept`}function Te(e){return typeof e.isPropagationStopped==`function`?e.isPropagationStopped():e.cancelBubble!==void 0&&e.cancelBubble}function Q(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,e=>e===`Files`||e===`application/x-moz-file`)||Array.prototype.some.call(e.dataTransfer.items??[],Ee):!!e.target&&!!e.target.files}function Ee(e){return typeof e==`object`&&!!e&&e.kind===`file`}function De(e){e.preventDefault()}function Oe(e){return e.indexOf(`MSIE`)!==-1||e.indexOf(`Trident/`)!==-1}function ke(e){return e.indexOf(`Edge/`)!==-1}function Ae(e=window.navigator.userAgent){return Oe(e)||ke(e)}function $(...e){return(t,...n)=>e.some(e=>(!Te(t)&&e&&e(t,...n),Te(t)))}function je(){return`showOpenFilePicker`in window}function Me(e){if(Z(e))return[{description:`Files`,accept:Object.entries(e).filter(([e,t])=>{let n=!0;return Le(e)||(console.warn(`Skipped "${e}" because it is not a valid MIME type. Check https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types for a list of valid MIME types.`),n=!1),(!Array.isArray(t)||!t.every(ze))&&(console.warn(`Skipped "${e}" because an invalid file extension was provided.`),n=!1),n}).reduce((e,[t,n])=>(e[t]=n,e),{})}]}function Ne(e,{omitWildcardMimeTypesWithExtensions:t=!1}={}){if(Z(e))return Object.entries(e).reduce((e,[n,r])=>(t&&Re(n)&&r.some(ze)?e.push(...r):e.push(n,...r),e),[]).filter(e=>Le(e)||ze(e)).join(`,`)}function Pe(e){return e instanceof DOMException&&(e.name===`AbortError`||e.code===e.ABORT_ERR)}function Fe(e){return e instanceof DOMException&&(e.name===`SecurityError`||e.code===e.SECURITY_ERR)}function Ie(e){return e instanceof DOMException&&e.name===`NotAllowedError`}function Le(e){return e===`audio/*`||e===`video/*`||e===`image/*`||e===`text/*`||e===`application/*`||/\w+\/[-+.\w]+/g.test(e)}function Re(e){return e.endsWith(`/*`)}function ze(e){return/^.*\.[\w]+$/.test(e)}var Be=(0,x.forwardRef)(({children:e,...t},n)=>{let{open:r,...i}=He(t);return(0,x.useImperativeHandle)(n,()=>({open:r}),[r]),(0,J.jsx)(J.Fragment,{children:e?.({...i,open:r})})});Be.displayName=`Dropzone`;var Ve={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,isDragUnknown:!1,isDragGlobal:!1,isProcessing:!1,acceptedFiles:[],fileRejections:[]};function He(e={}){let{accept:t,disabled:n=!1,getFilesFromEvent:r=ae,maxSize:i=1/0,minSize:a=0,multiple:o=!0,maxFiles:s=0,onDragEnter:c,onDragLeave:l,onDragOver:u,onDrop:d,onDropAccepted:f,onDropRejected:p,onFileDialogCancel:m,onFileDialogOpen:h,useFsAccessApi:g=!1,autoFocus:_=!1,preventDropOnDocument:v=!0,noClick:y=!1,noKeyboard:b=!1,noDrag:ee=!1,noDragEventsBubbling:S=!1,onError:C,validator:w,getErrorMessage:T}=e,te=(0,x.useMemo)(()=>Ne(t),[t]),ne=(0,x.useMemo)(()=>Ne(t,{omitWildcardMimeTypesWithExtensions:!0}),[t]),E=(0,x.useMemo)(()=>Me(t),[t]),D=(0,x.useMemo)(()=>typeof h==`function`?h:We,[h]),O=(0,x.useMemo)(()=>typeof m==`function`?m:We,[m]),k=(0,x.useRef)(null),A=(0,x.useRef)(null),[re,j]=(0,x.useReducer)(Ue,Ve),{isFocused:M,isFileDialogActive:N}=re,P=(0,x.useRef)(N);P.current=N;let ie=(0,x.useRef)(null),F=(0,x.useCallback)(()=>{ie.current?.abort();let e=new AbortController;return ie.current=e,j({type:`setProcessing`,isProcessing:!0}),e.signal},[]),I=(0,x.useCallback)(e=>{e.aborted||j({type:`setProcessing`,isProcessing:!1})},[]),L=(0,x.useRef)(typeof window<`u`&&window.isSecureContext&&g&&je()),R=()=>{!L.current&&N&&setTimeout(()=>{if(A.current){let{files:e}=A.current;e?.length||(j({type:`closeDialog`}),O())}},300)};(0,x.useEffect)(()=>(window.addEventListener(`focus`,R,!1),()=>{window.removeEventListener(`focus`,R,!1)}),[A,N,O,L]);let z=(0,x.useRef)([]),B=(0,x.useRef)([]),oe=e=>{k.current&&e.target&&k.current.contains(e.target)&&e.defaultPrevented||(e.preventDefault(),z.current=[])};(0,x.useEffect)(()=>(v&&(document.addEventListener(`dragover`,De,!1),document.addEventListener(`drop`,oe,!1)),()=>{v&&(document.removeEventListener(`dragover`,De),document.removeEventListener(`drop`,oe))}),[k,v]),(0,x.useEffect)(()=>{let e=e=>{e.target&&(B.current=[...B.current,e.target]),Q(e)&&j({isDragGlobal:!0,type:`setDragGlobal`})},t=e=>{B.current=B.current.filter(t=>t!==e.target&&t!==null),!(B.current.length>0)&&j({isDragGlobal:!1,type:`setDragGlobal`})},n=()=>{B.current=[],j({isDragGlobal:!1,type:`setDragGlobal`})},r=()=>{B.current=[],j({isDragGlobal:!1,type:`setDragGlobal`})};return document.addEventListener(`dragenter`,e,!1),document.addEventListener(`dragleave`,t,!1),document.addEventListener(`dragend`,n,!1),document.addEventListener(`drop`,r,!1),()=>{document.removeEventListener(`dragenter`,e),document.removeEventListener(`dragleave`,t),document.removeEventListener(`dragend`,n),document.removeEventListener(`drop`,r)}},[k]),(0,x.useEffect)(()=>(!n&&_&&k.current&&k.current.focus(),()=>{}),[k,_,n]);let V=(0,x.useCallback)(e=>{C?C(e):console.error(e)},[C]),se=(0,x.useCallback)(e=>{e.preventDefault(),e.persist?.(),X(e),!P.current&&(z.current=[...z.current,e.target],Q(e)&&Promise.resolve(r(e)).then(t=>{if(Te(e)&&!S)return;let n=t.length>0?we({files:t,accept:te,minSize:a,maxSize:i,multiple:o,maxFiles:s,validator:w}):null;j({isDragAccept:n===`accept`,isDragReject:n===`reject`,isDragUnknown:n===`unknown`,isDragActive:!0,type:`setDraggedFiles`}),c&&c(e)}).catch(e=>V(e)))},[r,c,V,S,te,a,i,o,s,w]),ce=(0,x.useCallback)(e=>{if(e.preventDefault(),e.persist?.(),X(e),P.current)return!1;let t=Q(e);if(t&&e.dataTransfer)try{e.dataTransfer.dropEffect=`copy`}catch{}return t&&u&&u(e),!1},[u,S]),H=(0,x.useCallback)(e=>{e.preventDefault(),e.persist?.(),X(e);let t=z.current.filter(e=>k.current?.contains(e)),n=t.indexOf(e.target);n!==-1&&t.splice(n,1),z.current=t,!(t.length>0)&&(j({type:`setDraggedFiles`,isDragActive:!1,isDragAccept:!1,isDragReject:!1,isDragUnknown:!1}),Q(e)&&l&&l(e))},[k,l,S]),U=(0,x.useCallback)(async(e,t,n)=>{let r=(e,t)=>T?{...e,message:T(e,t)}:e,c=e=>{let n=[],i=[];e.forEach(({file:e,accepted:t,acceptError:a,sizeMatch:o,sizeError:s,customErrors:c})=>{if(t&&o&&!c)n.push(e);else{let t=[a,s];c&&(t=t.concat(c)),i.push({file:e,errors:t.filter(e=>e!=null).map(t=>r(t,e))})}});let a=o?s>=1?s:1/0:1;n.length>a&&n.splice(a).forEach(e=>{i.push({file:e,errors:[r(ye,e)]})}),j({acceptedFiles:n,fileRejections:i,type:`setFiles`}),d&&d(n,i,t),i.length>0&&p&&p(i,t),n.length>0&&f&&f(n,t)},l=e.map(e=>{let[t,n]=xe(e,ne),[r,o]=Se(e,a,i);return{file:e,accepted:t,acceptError:n,sizeMatch:r,sizeError:o,customErrors:w?w(e):null}});if(!l.some(({customErrors:e})=>Ce(e))){c(l);return}let u;try{u=await Promise.all(l.map(async({customErrors:e,...t})=>({...t,customErrors:await e})))}catch(e){n.aborted||(I(n),V(e));return}n.aborted||c(u)},[j,o,ne,a,i,s,d,f,p,w,T,V,I]),W=(0,x.useCallback)(e=>{if(e.preventDefault(),e.persist?.(),X(e),z.current=[],!(P.current&&e.dataTransfer)&&(j({type:`reset`}),Q(e))){let t=F();Promise.resolve(r(e)).then(n=>{if(!t.aborted){if(Te(e)&&!S){I(t);return}return U(n,e,t)}}).catch(e=>{t.aborted||(I(t),V(e))})}},[r,U,V,S,F,I]),G=(0,x.useCallback)(()=>{if(L.current){j({type:`openDialog`}),D();let e={multiple:o,types:E},t;window.showOpenFilePicker(e).then(e=>(t=F(),r(e))).then(e=>{if(j({type:`closeDialog`}),!t.aborted)return U(e,null,t)}).catch(e=>{t&&I(t),Pe(e)?(O(e),j({type:`closeDialog`})):Fe(e)||Ie(e)?(L.current=!1,A.current?(A.current.value=``,A.current.click()):V(Error(`Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no <input> was provided.`))):V(e)});return}A.current&&(j({type:`openDialog`}),D(),A.current.value=``,A.current.click())},[j,D,O,g,U,V,E,o,F,I]),le=(0,x.useCallback)(e=>{k.current?.isEqualNode(e.target)&&(e.key===` `||e.key===`Enter`||e.keyCode===32||e.keyCode===13)&&(e.preventDefault(),G())},[k,G]),K=(0,x.useCallback)(()=>{j({type:`focus`})},[]),ue=(0,x.useCallback)(()=>{j({type:`blur`})},[]),q=(0,x.useCallback)(()=>{y||(Ae()?setTimeout(G,0):G())},[y,G]),J=e=>n?null:e,de=e=>b?null:J(e),Y=e=>ee?null:J(e),X=e=>{S&&e.stopPropagation()},fe=(0,x.useMemo)(()=>({refKey:e=`ref`,role:t,onKeyDown:r,onFocus:i,onBlur:a,onClick:o,onDragEnter:s,onDragOver:c,onDragLeave:l,onDrop:u,...d}={})=>({onKeyDown:de($(r,le)),onFocus:de($(i,K)),onBlur:de($(a,ue)),onClick:J($(o,q)),onDragEnter:Y($(s,se)),onDragOver:Y($(c,ce)),onDragLeave:Y($(l,H)),onDrop:Y($(u,W)),role:typeof t==`string`&&t!==``?t:`presentation`,[e]:k,...!n&&!b?{tabIndex:0}:{},...n?{"aria-disabled":!0}:{},...d}),[k,le,K,ue,q,se,ce,H,W,b,ee,n]),pe=(0,x.useCallback)(e=>{e.stopPropagation()},[]),me=(0,x.useMemo)(()=>({refKey:e=`ref`,onChange:t,onClick:n,...r}={})=>({accept:ne,multiple:o,type:`file`,"aria-label":`file upload`,style:{border:0,display:`block`,height:0,margin:0,opacity:0,overflow:`hidden`,padding:0,width:0},onChange:J($(t,W)),onClick:J($(n,pe)),tabIndex:-1,[e]:A,...r}),[A,t,o,W,n]);return{...re,isFocused:M&&!n,getRootProps:fe,getInputProps:me,rootRef:k,inputRef:A,open:J(G)}}function Ue(e,t){switch(t.type){case`focus`:return{...e,isFocused:!0};case`blur`:return{...e,isFocused:!1};case`openDialog`:return{...Ve,isFileDialogActive:!0};case`closeDialog`:return{...e,isFileDialogActive:!1};case`setDraggedFiles`:return{...e,isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject,isDragUnknown:t.isDragUnknown};case`setProcessing`:return{...e,isProcessing:t.isProcessing};case`setFiles`:return{...e,acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections,isProcessing:!1,isDragReject:!1,isDragUnknown:!1};case`setDragGlobal`:return{...e,isDragGlobal:t.isDragGlobal};case`reset`:return{...Ve};default:return e}}function We(){}var Ge=e=>new Promise((t,n)=>{let r=new FileReader;r.onload=r=>{typeof r.target?.result==`string`?t({name:e.name,data:r.target.result.split(`base64,`)[1]}):n(Error(`Unable to read file: ${e.name}`))},r.onerror=()=>n(Error(`File read failed`,{cause:r.error})),r.readAsDataURL(e)}),Ke=e=>Promise.all(e.map(Ge)),qe={file:{0:`DONT_DOWNLOAD`,1:`NORMAL`,2:`HIGH`},torrent:{0:`DONT_DOWNLOAD`,1:`LOW`,2:`NORMAL`,3:`HIGH`}},Je=({id:e,level:t,maxLevel:n,priorityType:r,showLabel:i=!1,clickHandled:a=!1,changePriorityFuncRef:s,onChange:c})=>{let{i18n:l}=p(),[u,d]=(0,x.useState)(t),f=()=>{let t=u;return t>=n?t=0:t+=1,d(t),c(e,t),t};s!=null&&(s.current=f);let m;if(i){let e=qe[r],t;switch(e[u]){case`DONT_DOWNLOAD`:t=l._(`priority.dont.download`);break;case`HIGH`:t=l._(`priority.high`);break;case`LOW`:t=l._(`priority.low`);break;default:t=l._(`priority.normal`);break}m=(0,J.jsx)(`span`,{className:`priority-meter__label`,children:t})}let h=(0,J.jsx)(`div`,{className:`priority-meter priority-meter--max-${n} priority-meter--level-${u}`}),g=o({_focus:{outline:`none`,WebkitTapHighlightColor:`transparent`},_focusVisible:{outline:`dashed`}});return a?(0,J.jsxs)(`div`,{className:`priority-meter__wrapper ${g}`,children:[h,m]}):(0,J.jsxs)(`button`,{className:`priority-meter__wrapper ${g}`,type:`button`,onClick:()=>{f()},children:[h,m]})},Ye=({value:e,isSpeed:t=!1,className:n,precision:r=2})=>{let i=v(e,r),{i18n:a}=p(),o=a._(ee(i.unit));return t&&(o=a._(`unit.speed`,{baseUnit:o})),(0,J.jsxs)(`span`,{className:n,children:[Number.isNaN(i.value)?`—`:y(a.locale,i.value),(0,J.jsx)(`em`,{className:`unit`,children:o})]})},Xe=l(s()),Ze=({status:e,downRate:t,upRate:n},r,...i)=>(0,Xe.default)(i,{"torrent--has-error":e.includes(`error`),"torrent--has-warning":(r.trackerWarningEnabled??!0)&&e.includes(`warning`),"torrent--is-stopped":e.includes(`stopped`),"torrent--is-downloading":e.includes(`downloading`),"torrent--is-downloading--actively":t>0,"torrent--is-uploading--actively":n>0,"torrent--is-seeding":e.includes(`seeding`),"torrent--is-completed":e.includes(`complete`),"torrent--is-checking":e.includes(`checking`),"torrent--is-moving":e.includes(`moving`),"torrent--is-inactive":e.includes(`inactive`)}),Qe=(e,t)=>{let n=t?.trackerWarningEnabled??!0,r=`stopped`;return[`warning`,`error`,`moving`,`checking`,`stopped`,`downloading`,`seeding`].some(t=>t===`warning`&&!n?!1:e.includes(t)?(r=t,!0):!1),r},$e=e=>{let t=Math.floor(e/31536e3),n=Math.floor(e%31536e3/604800),r=Math.floor(e%31536e3%604800/86400),i=Math.floor(e%31536e3%604800%86400/3600),a=Math.floor(e%31536e3%604800%86400%3600/60),o=Math.floor(e-a*60),s=null;return s=t>0?{years:t,weeks:n,cumSeconds:e}:n>0?{weeks:n,days:r,cumSeconds:e}:r>0?{days:r,hours:i,cumSeconds:e}:i>0?{hours:i,minutes:a,cumSeconds:e}:a>0?{minutes:a,seconds:o,cumSeconds:e}:{seconds:o,cumSeconds:e},s},et=({suffix:e,value:t})=>{if(t==null)return null;let n=null,r=null;e&&(r=(0,J.jsx)(`span`,{className:`duration--segment`,children:e}));let i=t===-1?-1:$e(t);return n=i===-1?(0,J.jsx)(d,{id:`unit.time.infinity`}):i.years!=null&&i.years>0?[(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.years,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.year`})})]},`years`),(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.weeks,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.week`})})]},`weeks`)]:i.weeks!=null&&i.weeks>0?[(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.weeks,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.week`})})]},`weeks`),(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.days,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.day`})})]},`days`)]:i.days!=null&&i.days>0?[(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.days,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.day`})})]},`days`),(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.hours,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.hour`})})]},`hours`)]:i.hours!=null&&i.hours>0?[(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.hours,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.hour`})})]},`hours`),(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.minutes,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.minute`})})]},`minutes`)]:i.minutes!=null&&i.minutes>0?[(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.minutes,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.minute`})})]},`minutes`),(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.seconds,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.second`})})]},`seconds`)]:(0,J.jsxs)(`span`,{className:`duration--segment`,children:[i.seconds,(0,J.jsx)(`em`,{className:`unit`,children:(0,J.jsx)(d,{id:`unit.time.second`})})]}),(0,J.jsxs)(`span`,{className:`duration`,children:[n,r]})},tt=(0,x.memo)(({status:e})=>{switch(e){case`warning`:return(0,J.jsx)(h,{});case`error`:return(0,J.jsx)(u,{});case`checking`:return(0,J.jsx)(a,{});case`moving`:return(0,J.jsx)(a,{});case`downloading`:return(0,J.jsx)(i,{});case`seeding`:return(0,J.jsx)(i,{});default:return(0,J.jsx)(t,{})}}),nt=c(({percent:e,status:t,showPercentLabel:n=!1})=>{let{i18n:r}=p(),i=Math.min(Math.max(e,0),100),a=i===0||i===100?y(r.locale,i,{maximumFractionDigits:0}):y(r.locale,i,{minimumFractionDigits:1,maximumFractionDigits:1});return(0,J.jsxs)(`div`,{className:(0,Xe.default)(`progress-bar`,{"progress-bar--with-percent":n}),children:[(0,J.jsx)(`div`,{className:`progress-bar__icon`,children:t&&(0,J.jsx)(tt,{status:t})}),(0,J.jsxs)(`div`,{className:`progress-bar__fill__wrapper`,children:[(0,J.jsx)(`div`,{className:`progress-bar__fill`,style:{width:`${i}%`}}),n?(0,J.jsxs)(`span`,{className:`progress-bar__percent`,children:[a,`%`]}):null]})]})}),rt=({children:e})=>(0,J.jsx)(`div`,{className:`badge`,children:e});export{Qe as a,Ke as c,A as d,te as f,Ze as i,Be as l,nt as n,Ye as o,w as p,et as r,Je as s,rt as t,He as u};
2
- //# sourceMappingURL=Badge-Z1xMhNLY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Badge-Z1xMhNLY.js","names":["useKeyPress","useKeyPressDefault","attrAccept","Fragment"],"sources":["../../../node_modules/react-use/esm/useFirstMountState.js","../../../node_modules/react-use/esm/useUpdateEffect.js","../../../node_modules/react-use/esm/useEnsuredForwardedRef.js","../../../node_modules/react-use/esm/useKeyPress.js","../../../node_modules/react-use/esm/useKeyPressEvent.js","../../../node_modules/js-file-download/file-download.js","../../../client/src/javascript/actions/TorrentActions.ts","../../../node_modules/file-selector/dist/mime-default.js","../../../node_modules/file-selector/dist/index.js","../../../node_modules/attr-accept/dist/es/index.js","../../../node_modules/react-dropzone/dist/index.js","../../../client/src/javascript/util/processFiles.ts","../../../client/src/javascript/constants/PriorityLevels.ts","../../../client/src/javascript/components/general/PriorityMeter.tsx","../../../client/src/javascript/components/general/Size.tsx","../../../client/src/javascript/util/torrentStatus.ts","../../../client/src/javascript/components/general/Duration.tsx","../../../client/src/javascript/components/general/TorrentStatusIcon.tsx","../../../client/src/javascript/components/general/ProgressBar.tsx","../../../client/src/javascript/components/general/Badge.tsx"],"sourcesContent":["import { useRef } from 'react';\nexport function useFirstMountState() {\n var isFirst = useRef(true);\n if (isFirst.current) {\n isFirst.current = false;\n return true;\n }\n return isFirst.current;\n}\n","import { useEffect } from 'react';\nimport { useFirstMountState } from './useFirstMountState';\nvar useUpdateEffect = function (effect, deps) {\n var isFirstMount = useFirstMountState();\n useEffect(function () {\n if (!isFirstMount) {\n return effect();\n }\n }, deps);\n};\nexport default useUpdateEffect;\n","import { forwardRef, useEffect, useRef, } from 'react';\nexport default function useEnsuredForwardedRef(forwardedRef) {\n var ensuredRef = useRef(forwardedRef && forwardedRef.current);\n useEffect(function () {\n if (!forwardedRef) {\n return;\n }\n forwardedRef.current = ensuredRef.current;\n }, [forwardedRef]);\n return ensuredRef;\n}\nexport function ensuredForwardRef(Component) {\n return forwardRef(function (props, ref) {\n var ensuredRef = useEnsuredForwardedRef(ref);\n return Component(props, ensuredRef);\n });\n}\n","import { useState } from 'react';\nimport useKey from './useKey';\nvar useKeyPress = function (keyFilter) {\n var _a = useState([false, null]), state = _a[0], set = _a[1];\n useKey(keyFilter, function (event) { return set([true, event]); }, { event: 'keydown' }, [state]);\n useKey(keyFilter, function (event) { return set([false, event]); }, { event: 'keyup' }, [state]);\n return state;\n};\nexport default useKeyPress;\n","import useKeyPressDefault from './useKeyPress';\nimport useUpdateEffect from './useUpdateEffect';\nvar useKeyPressEvent = function (key, keydown, keyup, useKeyPress) {\n if (useKeyPress === void 0) { useKeyPress = useKeyPressDefault; }\n var _a = useKeyPress(key), pressed = _a[0], event = _a[1];\n useUpdateEffect(function () {\n if (!pressed && keyup) {\n keyup(event);\n }\n else if (pressed && keydown) {\n keydown(event);\n }\n }, [pressed]);\n};\nexport default useKeyPressEvent;\n","module.exports = function(data, filename, mime, bom) {\n var blobData = (typeof bom !== 'undefined') ? [bom, data] : [data]\n var blob = new Blob(blobData, {type: mime || 'application/octet-stream'});\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\n // IE workaround for \"HTML7007: One or more blob URLs were\n // revoked by closing the blob for which they were created.\n // These URLs will no longer resolve as the data backing\n // the URL has been freed.\"\n window.navigator.msSaveBlob(blob, filename);\n }\n else {\n var blobURL = (window.URL && window.URL.createObjectURL) ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob);\n var tempLink = document.createElement('a');\n tempLink.style.display = 'none';\n tempLink.href = blobURL;\n tempLink.setAttribute('download', filename);\n\n // Safari thinks _blank anchor are pop ups. We only want to set _blank\n // target if the browser does not support the HTML5 download attribute.\n // This allows you to download files in desktop safari if pop up blocking\n // is enabled.\n if (typeof tempLink.download === 'undefined') {\n tempLink.setAttribute('target', '_blank');\n }\n\n document.body.appendChild(tempLink);\n tempLink.click();\n\n // Fixes \"webkit blob resource error 1\"\n setTimeout(function() {\n document.body.removeChild(tempLink);\n window.URL.revokeObjectURL(blobURL);\n }, 200)\n }\n}\n","import axios, {CancelToken} from 'axios';\nimport download from 'js-file-download';\n\nimport AlertStore from '@client/stores/AlertStore';\nimport ConfigStore from '@client/stores/ConfigStore';\nimport UIStore from '@client/stores/UIStore';\n\nimport type {\n AddTorrentByFileOptions,\n AddTorrentByURLOptions,\n ReannounceTorrentsOptions,\n SetTorrentsTagsOptions,\n} from '@shared/schema/api/torrents';\nimport {\n CheckTorrentsOptions,\n ICreateTorrentOptions,\n DeleteTorrentsOptions,\n MoveTorrentsOptions,\n SetTorrentContentsPropertiesOptions,\n SetTorrentsInitialSeedingOptions,\n SetTorrentsPriorityOptions,\n SetTorrentsSequentialOptions,\n SetTorrentsTrackersOptions,\n StartTorrentsOptions,\n StopTorrentsOptions,\n TorrentAddResponse,\n TorrentMediainfoResponse,\n} from '@shared/types/api/torrents';\nimport type {TorrentContent} from '@shared/types/TorrentContent';\nimport type {TorrentPeer} from '@shared/types/TorrentPeer';\nimport type {TorrentTracker} from '@shared/types/TorrentTracker';\nimport type {TorrentProperties} from '@shared/types/Torrent';\n\nconst {baseURI} = ConfigStore;\n\nconst emitRequestSentAlert = (count: number) => {\n AlertStore.add({\n id: 'alert.torrent.add.sent',\n count,\n });\n};\n\nconst emitTorrentAddedAlert = (count: number) => {\n AlertStore.add({\n id: 'alert.torrent.add',\n type: 'success',\n count,\n });\n};\n\nconst emitFailedToAddTorrentAlert = (count: number) => {\n AlertStore.add({\n id: 'alert.torrent.add.failed',\n type: 'error',\n count,\n });\n};\n\nconst TorrentActions = {\n addTorrentsByUrls: (options: AddTorrentByURLOptions): Promise<void> =>\n axios.post<TorrentAddResponse>(`${baseURI}api/torrents/add-urls`, options).then(\n ({data}) => {\n if (data.length) {\n emitTorrentAddedAlert(data.length);\n } else {\n emitRequestSentAlert(options.urls.length);\n }\n },\n () => {\n emitFailedToAddTorrentAlert(options.urls.length);\n },\n ),\n\n addTorrentsByFiles: (options: AddTorrentByFileOptions): Promise<void> =>\n axios.post<TorrentAddResponse>(`${baseURI}api/torrents/add-files`, options).then(\n ({data}) => {\n if (data.length) {\n emitTorrentAddedAlert(data.length);\n } else {\n emitRequestSentAlert(options.files.length);\n }\n },\n () => {\n emitFailedToAddTorrentAlert(options.files.length);\n },\n ),\n\n createTorrent: (options: ICreateTorrentOptions): Promise<void> =>\n axios.post<Blob>(`${baseURI}api/torrents/create`, options, {responseType: 'blob'}).then(\n ({data}) => {\n download(data, (options.name || `${Date.now()}`).concat('.torrent'));\n emitTorrentAddedAlert(1);\n },\n () => {\n emitFailedToAddTorrentAlert(1);\n },\n ),\n\n deleteTorrents: (options: DeleteTorrentsOptions): Promise<void> =>\n axios.post(`${baseURI}api/torrents/delete`, options).then(\n () =>\n AlertStore.add({\n id: 'alert.torrent.remove',\n type: 'success',\n count: options.hashes.length,\n }),\n () =>\n AlertStore.add({\n id: 'alert.torrent.remove.failed',\n type: 'error',\n count: options.hashes.length,\n }),\n ),\n\n checkHash: (options: CheckTorrentsOptions): Promise<void> =>\n axios.post(`${baseURI}api/torrents/check-hash`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n fetchMediainfo: (hash: TorrentProperties['hash'], cancelToken?: CancelToken): Promise<{output: string}> =>\n axios\n .get<TorrentMediainfoResponse>(`${baseURI}api/torrents/${hash}/mediainfo`, {cancelToken})\n .then<{output: string}>((res) => res.data),\n\n fetchTorrentContents: (hash: TorrentProperties['hash']): Promise<Array<TorrentContent> | null> =>\n axios.get<Array<TorrentContent>>(`${baseURI}api/torrents/${hash}/contents`).then(\n (res) => res.data,\n () => null,\n ),\n\n fetchTorrentPeers: (hash: TorrentProperties['hash']): Promise<Array<TorrentPeer> | null> =>\n axios.get<Array<TorrentPeer>>(`${baseURI}api/torrents/${hash}/peers`).then(\n (res) => res.data,\n () => null,\n ),\n\n fetchTorrentTrackers: (hash: TorrentProperties['hash']): Promise<Array<TorrentTracker> | null> =>\n axios.get<Array<TorrentTracker>>(`${baseURI}api/torrents/${hash}/trackers`).then(\n (res) => res.data,\n () => null,\n ),\n\n getTorrentContentsDataPermalink: (hash: TorrentProperties['hash'], indices: number[]): Promise<string> =>\n axios\n .get(`${ConfigStore.baseURI}api/torrents/${hash}/contents/${indices.join(',')}/token`)\n .then(\n (res) =>\n `${window.location.protocol}//${window.location.host}${\n ConfigStore.baseURI\n }api/torrents/${hash}/contents/${indices.join(',')}/data?token=${res.data}`,\n ),\n\n moveTorrents: (options: MoveTorrentsOptions): Promise<void> =>\n axios.post(`${baseURI}api/torrents/move`, options).then(\n () =>\n AlertStore.add({\n id: 'alert.torrent.move',\n type: 'success',\n count: options.hashes.length,\n }),\n () =>\n AlertStore.add({\n id: 'alert.torrent.move.failed',\n type: 'error',\n count: options.hashes.length,\n }),\n ),\n\n reannounce: (options: ReannounceTorrentsOptions): Promise<void> =>\n axios.post(`${baseURI}api/torrents/reannounce`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n startTorrents: async (options: StartTorrentsOptions): Promise<void> => {\n if (options.hashes.length > 0) {\n return axios.post(`${baseURI}api/torrents/start`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n );\n }\n return undefined;\n },\n\n stopTorrents: async (options: StopTorrentsOptions): Promise<void> => {\n if (options.hashes.length > 0) {\n return axios.post(`${baseURI}api/torrents/stop`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n );\n }\n return undefined;\n },\n\n setInitialSeeding: (options: SetTorrentsInitialSeedingOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/initial-seeding`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n setPriority: (options: SetTorrentsPriorityOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/priority`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n setSequential: (options: SetTorrentsSequentialOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/sequential`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n setFilePriority: (hash: TorrentProperties['hash'], options: SetTorrentContentsPropertiesOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/${hash}/contents`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n\n setTags: (options: SetTorrentsTagsOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/tags`, options).then(\n () => UIStore.handleSetTaxonomySuccess(),\n () => {\n // do nothing.\n },\n ),\n\n setTrackers: (options: SetTorrentsTrackersOptions): Promise<void> =>\n axios.patch(`${baseURI}api/torrents/trackers`, options).then(\n () => {\n // do nothing.\n },\n () => {\n // do nothing.\n },\n ),\n};\n\nexport default TorrentActions;\n","//#region src/mime-default.ts\n/**\n* A small set of the most common file extensions, bundled into the main entry so that\n* {@link fromEvent} guesses a MIME type for typeless files out of the box.\n*\n* This is the single source of truth for these defaults: the full extension-to-MIME table\n* (`COMMON_MIME_TYPES`, exposed via the `file-selector/mime` subpath) spreads this map in\n* rather than redefining these entries, so no value is duplicated across modules.\n*\n* See https://github.com/react-dropzone/file-selector/issues/127\n*/\nconst DEFAULT_MIME_TYPES = /* @__PURE__ */ new Map([\n\t[\"avif\", \"image/avif\"],\n\t[\"bmp\", \"image/bmp\"],\n\t[\"css\", \"text/css\"],\n\t[\"csv\", \"text/csv\"],\n\t[\"doc\", \"application/msword\"],\n\t[\"docx\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"],\n\t[\"gif\", \"image/gif\"],\n\t[\"gz\", \"application/gzip\"],\n\t[\"htm\", \"text/html\"],\n\t[\"html\", \"text/html\"],\n\t[\"ico\", \"image/x-icon\"],\n\t[\"jpeg\", \"image/jpeg\"],\n\t[\"jpg\", \"image/jpeg\"],\n\t[\"js\", \"application/javascript\"],\n\t[\"json\", \"application/json\"],\n\t[\"md\", \"text/markdown\"],\n\t[\"mjs\", \"application/javascript\"],\n\t[\"mp3\", \"audio/mpeg\"],\n\t[\"mp4\", \"video/mp4\"],\n\t[\"ogg\", \"audio/ogg\"],\n\t[\"pdf\", \"application/pdf\"],\n\t[\"png\", \"image/png\"],\n\t[\"ppt\", \"application/powerpoint\"],\n\t[\"pptx\", \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"],\n\t[\"svg\", \"image/svg+xml\"],\n\t[\"tif\", \"image/tiff\"],\n\t[\"tiff\", \"image/tiff\"],\n\t[\"txt\", \"text/plain\"],\n\t[\"wasm\", \"application/wasm\"],\n\t[\"wav\", \"audio/x-wav\"],\n\t[\"weba\", \"audio/webm\"],\n\t[\"webm\", \"video/webm\"],\n\t[\"webp\", \"image/webp\"],\n\t[\"xls\", \"application/vnd.ms-excel\"],\n\t[\"xlsx\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],\n\t[\"xml\", \"application/xml\"],\n\t[\"zip\", \"application/zip\"]\n]);\n//#endregion\nexport { DEFAULT_MIME_TYPES };\n\n//# sourceMappingURL=mime-default.js.map","import { DEFAULT_MIME_TYPES } from \"./mime-default.js\";\n//#region src/error.ts\nvar UnexpectedObjectError = class extends Error {\n\tconstructor(item) {\n\t\tsuper(\"DataTransferItem is not a file\");\n\t\tthis.item = item;\n\t\tthis.name = \"UnexpectedObjectError\";\n\t}\n};\n//#endregion\n//#region src/file.ts\nfunction toFileWithPath(file, path, h) {\n\tconst f = file;\n\tconst { webkitRelativePath } = file;\n\tconst p = typeof path === \"string\" ? path : typeof webkitRelativePath === \"string\" && webkitRelativePath.length > 0 ? webkitRelativePath : `./${file.name}`;\n\tif (typeof f.path !== \"string\") setObjProp(f, \"path\", p);\n\tif (h !== void 0) Object.defineProperty(f, \"handle\", {\n\t\tvalue: h,\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: true\n\t});\n\tsetObjProp(f, \"relativePath\", p);\n\treturn f;\n}\n/**\n* Sets a File's `type` from its extension using the provided `mimeTypes` lookup,\n* but only when the browser didn't already set a type. Returns the same File.\n*/\nfunction withMimeType(file, mimeTypes = DEFAULT_MIME_TYPES) {\n\tconst { name } = file;\n\tif (name && name.lastIndexOf(\".\") !== -1 && !file.type) {\n\t\tconst ext = name.split(\".\").pop().toLowerCase();\n\t\tconst type = mimeTypes.get(ext);\n\t\tif (type) Object.defineProperty(file, \"type\", {\n\t\t\tvalue: type,\n\t\t\twritable: false,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true\n\t\t});\n\t}\n\treturn file;\n}\nfunction setObjProp(f, key, value) {\n\tObject.defineProperty(f, key, {\n\t\tvalue,\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: true\n\t});\n}\n//#endregion\n//#region src/file-selector.ts\nconst FILES_TO_IGNORE = [\".DS_Store\", \"Thumbs.db\"];\n/**\n* Convert a DragEvent's DataTrasfer object to a list of File objects\n* NOTE: If some of the items are folders,\n* everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n*\n* EXPERIMENTAL: A list of https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle objects can also be passed as an arg\n* and a list of File objects will be returned.\n*\n* @param evt\n* @param options\n*/\nasync function fromEvent(evt, { mimeTypes = DEFAULT_MIME_TYPES } = {}) {\n\treturn (await getFilesOrItems(evt)).map((item) => item instanceof File ? withMimeType(item, mimeTypes) : item);\n}\nasync function getFilesOrItems(evt) {\n\tif (isObject(evt) && isDataTransfer(evt.dataTransfer)) return getDataTransferFiles(evt.dataTransfer, evt.type);\n\telse if (isChangeEvt(evt)) return getInputFiles(evt);\n\telse if (Array.isArray(evt) && evt.every((item) => \"getFile\" in item && typeof item.getFile === \"function\")) return getFsHandleFiles(evt);\n\treturn [];\n}\nfunction isDataTransfer(value) {\n\treturn isObject(value);\n}\nfunction isChangeEvt(value) {\n\treturn isObject(value) && isObject(value.target);\n}\nfunction isObject(v) {\n\treturn typeof v === \"object\" && v !== null;\n}\nfunction getInputFiles(evt) {\n\treturn fromList(evt.target.files).map((file) => toFileWithPath(file));\n}\nasync function getFsHandleFiles(handles) {\n\treturn (await Promise.all(handles.map((h) => h.getFile()))).map((file) => toFileWithPath(file));\n}\nasync function getDataTransferFiles(dt, type) {\n\tconst items = fromList(dt.items).filter((item) => item.kind === \"file\");\n\tif (type !== \"drop\") return items;\n\treturn noIgnoredFiles(flatten(await Promise.all(items.map(toFilePromises))));\n}\nfunction noIgnoredFiles(files) {\n\treturn files.filter((file) => FILES_TO_IGNORE.indexOf(file.name) === -1);\n}\nfunction fromList(items) {\n\tif (items === null) return [];\n\treturn Array.from(items);\n}\nasync function toFilePromises(item) {\n\tif (typeof item.webkitGetAsEntry !== \"function\") return fromDataTransferItem(item);\n\tconst entry = item.webkitGetAsEntry();\n\tif (entry?.isDirectory) {\n\t\tconst handle = await getFsHandle(item);\n\t\tif (handle?.kind === \"directory\") return fromDirHandle(handle, `/${handle.name}`);\n\t\treturn fromDirEntry(entry);\n\t}\n\treturn fromDataTransferItem(item, entry);\n}\nfunction flatten(items) {\n\tconst result = [];\n\tfor (const item of items) if (Array.isArray(item)) result.push(...flatten(item));\n\telse result.push(item);\n\treturn result;\n}\nasync function fromDataTransferItem(item, entry) {\n\tconst syncFile = item.getAsFile();\n\tconst h = await getFsHandle(item);\n\tif (h !== null && h !== void 0) {\n\t\tconst file = syncFile ?? await h.getFile();\n\t\tfile.handle = h;\n\t\treturn toFileWithPath(file);\n\t}\n\tif (!syncFile) throw new UnexpectedObjectError(item);\n\treturn toFileWithPath(syncFile, entry?.fullPath ?? void 0);\n}\nasync function getFsHandle(item) {\n\tif (globalThis.isSecureContext && typeof item.getAsFileSystemHandle === \"function\") return item.getAsFileSystemHandle();\n}\nasync function fromDirHandle(handle, path) {\n\tconst files = [];\n\tfor await (const child of handle.values()) {\n\t\tconst childPath = `${path}/${child.name}`;\n\t\tif (child.kind === \"directory\") files.push(...await fromDirHandle(child, childPath));\n\t\telse {\n\t\t\tconst file = await child.getFile();\n\t\t\tfiles.push(toFileWithPath(file, childPath, child));\n\t\t}\n\t}\n\treturn files;\n}\nasync function fromEntry(entry) {\n\treturn entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry);\n}\nfunction fromDirEntry(entry) {\n\tconst reader = entry.createReader();\n\treturn new Promise((resolve, reject) => {\n\t\tconst entries = [];\n\t\tfunction readEntries() {\n\t\t\treader.readEntries(async (batch) => {\n\t\t\t\tif (!batch.length) try {\n\t\t\t\t\tresolve(await Promise.all(entries));\n\t\t\t\t} catch (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst items = Promise.all(batch.map(fromEntry));\n\t\t\t\t\tentries.push(items);\n\t\t\t\t\treadEntries();\n\t\t\t\t}\n\t\t\t}, (err) => {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t}\n\t\treadEntries();\n\t});\n}\nasync function fromFileEntry(entry) {\n\treturn new Promise((resolve, reject) => {\n\t\tentry.file((file) => {\n\t\t\tresolve(toFileWithPath(file, entry.fullPath));\n\t\t}, (err) => {\n\t\t\treject(err);\n\t\t});\n\t});\n}\n//#endregion\nexport { DEFAULT_MIME_TYPES, fromEvent };\n\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n if (file && acceptedFiles) {\n var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n\n if (acceptedFilesArray.length === 0) {\n return true;\n }\n\n var fileName = file.name || '';\n var mimeType = (file.type || '').toLowerCase();\n var baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptedFilesArray.some(function (type) {\n var validType = type.trim().toLowerCase();\n\n if (validType.charAt(0) === '.') {\n return fileName.toLowerCase().endsWith(validType);\n } else if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '');\n }\n\n return mimeType === validType;\n });\n }\n\n return true;\n};","import { fromEvent } from \"file-selector\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport attrAccept from \"attr-accept\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\n//#region src/utils/index.ts\nconst accepts = typeof attrAccept === \"function\" ? attrAccept : attrAccept.default;\nconst FILE_INVALID_TYPE = \"file-invalid-type\";\nconst FILE_TOO_LARGE = \"file-too-large\";\nconst FILE_TOO_SMALL = \"file-too-small\";\nconst TOO_MANY_FILES = \"too-many-files\";\nlet ErrorCode = /* @__PURE__ */ function(ErrorCode) {\n\tErrorCode[\"FileInvalidType\"] = \"file-invalid-type\";\n\tErrorCode[\"FileTooLarge\"] = \"file-too-large\";\n\tErrorCode[\"FileTooSmall\"] = \"file-too-small\";\n\tErrorCode[\"TooManyFiles\"] = \"too-many-files\";\n\treturn ErrorCode;\n}({});\nfunction getInvalidTypeRejectionErr(accept = \"\") {\n\tconst acceptArr = accept.split(\",\");\n\tconst msg = acceptArr.length > 1 ? `one of ${acceptArr.join(\", \")}` : acceptArr[0];\n\treturn {\n\t\tcode: FILE_INVALID_TYPE,\n\t\tmessage: `File type must be ${msg}`\n\t};\n}\nconst FILE_SIZE_UNITS = [\n\t\"KB\",\n\t\"MB\",\n\t\"GB\",\n\t\"TB\",\n\t\"PB\"\n];\n/**\n* Format a byte count into a human-readable string, e.g. `1111` -> `1.08 KB`.\n* Values below 1 KB are kept in bytes to preserve the singular/plural wording.\n*/\nfunction formatBytes(bytes) {\n\tif (bytes < 1024) return `${bytes} ${bytes === 1 ? \"byte\" : \"bytes\"}`;\n\tlet size = bytes / 1024;\n\tlet unitIndex = 0;\n\twhile (size >= 1024 && unitIndex < FILE_SIZE_UNITS.length - 1) {\n\t\tsize /= 1024;\n\t\tunitIndex++;\n\t}\n\treturn `${Number(size.toFixed(2))} ${FILE_SIZE_UNITS[unitIndex]}`;\n}\nfunction getTooLargeRejectionErr(maxSize) {\n\treturn {\n\t\tcode: FILE_TOO_LARGE,\n\t\tmessage: `File is larger than ${formatBytes(maxSize)}`\n\t};\n}\nfunction getTooSmallRejectionErr(minSize) {\n\treturn {\n\t\tcode: FILE_TOO_SMALL,\n\t\tmessage: `File is smaller than ${formatBytes(minSize)}`\n\t};\n}\nconst TOO_MANY_FILES_REJECTION = {\n\tcode: TOO_MANY_FILES,\n\tmessage: \"Too many files\"\n};\n/**\n* Check if the given file is a DataTransferItem with an empty type.\n*\n* During drag events, browsers may return DataTransferItem objects instead of File objects.\n* Some browsers (e.g., Chrome) return an empty MIME type for certain file types (like .md files)\n* on DataTransferItem during drag events, even though the type is correctly set during drop.\n*/\nfunction isDataTransferItemWithEmptyType(file) {\n\treturn file.type === \"\" && typeof file.getAsFile === \"function\";\n}\n/**\n* Check if file is accepted.\n*\n* Firefox versions prior to 53 return a bogus MIME type for every file drag,\n* so dragovers with that MIME type will always be accepted.\n*\n* Chrome/other browsers may return an empty MIME type for files during drag events,\n* so we accept those as well (we'll validate properly on drop).\n*/\nfunction fileAccepted(file, accept) {\n\tconst isAcceptable = file.type === \"application/x-moz-file\" || accepts(file, accept ?? \"\") || isDataTransferItemWithEmptyType(file);\n\treturn [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nfunction fileMatchSize(file, minSize, maxSize) {\n\tif (isDefined(file.size)) {\n\t\tif (isDefined(minSize) && isDefined(maxSize)) {\n\t\t\tif (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n\t\t\tif (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n\t\t} else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n\t\telse if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n\t}\n\treturn [true, null];\n}\nfunction isDefined(value) {\n\treturn value !== void 0 && value !== null;\n}\n/**\n* Check if a value is thenable (Promise-like), used to tell a synchronous validator result from an\n* asynchronous one.\n*/\nfunction isThenable(value) {\n\treturn value != null && typeof value.then === \"function\";\n}\n/**\n* Classify a set of dragged files for the `isDragAccept`/`isDragReject`/`isDragUnknown` states.\n*\n* During `dragenter`/`dragover` the browser only exposes `DataTransferItem`s, which carry a MIME\n* `type` but no file name, extension or size (see https://html.spec.whatwg.org/multipage/dnd.html#dndevents).\n* So the drag-time check is deliberately optimistic about anything it can't see:\n*\n* - The custom `validator` is **never** run here. It is typed `(file: File) => ...` and users\n* routinely read `file.name`/`file.size`, which are `undefined` on a `DataTransferItem` - running\n* it would throw and abort the whole drag handler (leaving `isDragActive` stuck at `false`).\n* See https://github.com/react-dropzone/react-dropzone/issues/1408\n* - When a `validator` is configured we therefore can't promise the files are acceptable, so the\n* verdict is `unknown` rather than a misleading `reject` (or a premature `accept`).\n* See https://github.com/react-dropzone/react-dropzone/issues/1244\n*\n* The full check (including the `validator`) still runs on drop in {@link fileAccepted}/`setFiles`.\n*/\nfunction getDragVerdict({ files, accept, minSize, maxSize, multiple, maxFiles = 0, validator }) {\n\tif (!multiple && files.length > 1 || multiple && maxFiles >= 1 && files.length > maxFiles) return \"reject\";\n\tif (files.some((file) => {\n\t\tconst [accepted] = fileAccepted(file, accept);\n\t\tconst [sizeMatch] = fileMatchSize(file, minSize, maxSize);\n\t\treturn !accepted || !sizeMatch;\n\t})) return \"reject\";\n\treturn validator ? \"unknown\" : \"accept\";\n}\nfunction isPropagationStopped(event) {\n\tif (typeof event.isPropagationStopped === \"function\") return event.isPropagationStopped();\n\telse if (typeof event.cancelBubble !== \"undefined\") return event.cancelBubble;\n\treturn false;\n}\nfunction isEvtWithFiles(event) {\n\tif (!event.dataTransfer) return !!event.target && !!event.target.files;\n\treturn Array.prototype.some.call(event.dataTransfer.types, (type) => type === \"Files\" || type === \"application/x-moz-file\") || Array.prototype.some.call(event.dataTransfer.items ?? [], isKindFile);\n}\nfunction isKindFile(item) {\n\treturn typeof item === \"object\" && item !== null && item.kind === \"file\";\n}\nfunction onDocumentDragOver(event) {\n\tevent.preventDefault();\n}\nfunction isIe(userAgent) {\n\treturn userAgent.indexOf(\"MSIE\") !== -1 || userAgent.indexOf(\"Trident/\") !== -1;\n}\nfunction isEdge(userAgent) {\n\treturn userAgent.indexOf(\"Edge/\") !== -1;\n}\nfunction isIeOrEdge(userAgent = window.navigator.userAgent) {\n\treturn isIe(userAgent) || isEdge(userAgent);\n}\n/**\n* This is intended to be used to compose event handlers.\n* They are executed in order until one of them calls `event.isPropagationStopped()`.\n* Note that the check is done on the first invoke too,\n* meaning that if propagation was stopped before invoking the fns,\n* no handlers will be executed.\n*/\nfunction composeEventHandlers(...fns) {\n\treturn (event, ...args) => fns.some((fn) => {\n\t\tif (!isPropagationStopped(event) && fn) fn(event, ...args);\n\t\treturn isPropagationStopped(event);\n\t});\n}\n/**\n* canUseFileSystemAccessAPI checks if the File System Access API is supported by the browser.\n*/\nfunction canUseFileSystemAccessAPI() {\n\treturn \"showOpenFilePicker\" in window;\n}\n/**\n* Convert the `{accept}` dropzone prop to the `{types}` option for showOpenFilePicker.\n*/\nfunction pickerOptionsFromAccept(accept) {\n\tif (isDefined(accept)) return [{\n\t\tdescription: \"Files\",\n\t\taccept: Object.entries(accept).filter(([mimeType, ext]) => {\n\t\t\tlet ok = true;\n\t\t\tif (!isMIMEType(mimeType)) {\n\t\t\t\tconsole.warn(`Skipped \"${mimeType}\" because it is not a valid MIME type. Check https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types for a list of valid MIME types.`);\n\t\t\t\tok = false;\n\t\t\t}\n\t\t\tif (!Array.isArray(ext) || !ext.every(isExt)) {\n\t\t\t\tconsole.warn(`Skipped \"${mimeType}\" because an invalid file extension was provided.`);\n\t\t\t\tok = false;\n\t\t\t}\n\t\t\treturn ok;\n\t\t}).reduce((agg, [mimeType, ext]) => {\n\t\t\tagg[mimeType] = ext;\n\t\t\treturn agg;\n\t\t}, {})\n\t}];\n}\n/**\n* Convert the `{accept}` dropzone prop to a comma-separated accept attribute string.\n*\n* When `omitWildcardMimeTypesWithExtensions` is set, a wildcard MIME type (e.g. `image/*`)\n* that is paired with explicit extensions is dropped in favour of those extensions. The\n* accept attribute is an OR list, so leaving `image/*` in would make both the native file\n* picker and the drop-time validator accept ANY file of that type, ignoring the extension\n* restriction. The drag-time `isDragAccept` check keeps the wildcard because file names\n* (and therefore extensions) aren't readable during a drag.\n*\n* See https://github.com/react-dropzone/react-dropzone/issues/1220\n*/\nfunction acceptPropAsAcceptAttr(accept, { omitWildcardMimeTypesWithExtensions = false } = {}) {\n\tif (isDefined(accept)) return Object.entries(accept).reduce((a, [mimeType, ext]) => {\n\t\tif (omitWildcardMimeTypesWithExtensions && isMIMETypeWildcard(mimeType) && ext.some(isExt)) a.push(...ext);\n\t\telse a.push(mimeType, ...ext);\n\t\treturn a;\n\t}, []).filter((v) => isMIMEType(v) || isExt(v)).join(\",\");\n}\n/**\n* Check if v is an exception caused by aborting a request (e.g window.showOpenFilePicker()).\n*/\nfunction isAbort(v) {\n\treturn v instanceof DOMException && (v.name === \"AbortError\" || v.code === v.ABORT_ERR);\n}\n/**\n* Check if v is a security error.\n*/\nfunction isSecurityError(v) {\n\treturn v instanceof DOMException && (v.name === \"SecurityError\" || v.code === v.SECURITY_ERR);\n}\n/**\n* Check if v is a \"not allowed\" error.\n*\n* Some browsers/configurations block `window.showOpenFilePicker()` outright and reject with a\n* `NotAllowedError` instead of showing the picker (e.g. Microsoft Edge for Business, or other\n* restrictive enterprise/security policies). We treat this like a security error and fall back\n* to the native `<input>`. See https://github.com/react-dropzone/react-dropzone/issues/1429\n*/\nfunction isNotAllowedError(v) {\n\treturn v instanceof DOMException && v.name === \"NotAllowedError\";\n}\n/**\n* Check if v is a MIME type string.\n*/\nfunction isMIMEType(v) {\n\treturn v === \"audio/*\" || v === \"video/*\" || v === \"image/*\" || v === \"text/*\" || v === \"application/*\" || /\\w+\\/[-+.\\w]+/g.test(v);\n}\n/**\n* Check if v is a wildcard MIME type (e.g. `image/*`).\n*/\nfunction isMIMETypeWildcard(v) {\n\treturn v.endsWith(\"/*\");\n}\n/**\n* Check if v is a file extension.\n*/\nfunction isExt(v) {\n\treturn /^.*\\.[\\w]+$/.test(v);\n}\n//#endregion\n//#region src/index.tsx\n/**\n* Convenience wrapper component for the `useDropzone` hook\n*\n* ```jsx\n* <Dropzone>\n* {({getRootProps, getInputProps}) => (\n* <div {...getRootProps()}>\n* <input {...getInputProps()} />\n* <p>Drag 'n' drop some files here, or click to select files</p>\n* </div>\n* )}\n* </Dropzone>\n* ```\n*/\nconst Dropzone = forwardRef(({ children, ...params }, ref) => {\n\tconst { open, ...props } = useDropzone(params);\n\tuseImperativeHandle(ref, () => ({ open }), [open]);\n\treturn /* @__PURE__ */ jsx(Fragment, { children: children?.({\n\t\t...props,\n\t\topen\n\t}) });\n});\nDropzone.displayName = \"Dropzone\";\nconst initialState = {\n\tisFocused: false,\n\tisFileDialogActive: false,\n\tisDragActive: false,\n\tisDragAccept: false,\n\tisDragReject: false,\n\tisDragUnknown: false,\n\tisDragGlobal: false,\n\tisProcessing: false,\n\tacceptedFiles: [],\n\tfileRejections: []\n};\n/**\n* A React hook that creates a drag 'n' drop area.\n*\n* ```jsx\n* function MyDropzone(props) {\n* const {getRootProps, getInputProps} = useDropzone({\n* onDrop: acceptedFiles => {\n* // do something with the File objects, e.g. upload to some server\n* }\n* });\n* return (\n* <div {...getRootProps()}>\n* <input {...getInputProps()} />\n* <p>Drag and drop some files here, or click to select files</p>\n* </div>\n* )\n* }\n* ```\n*/\nfunction useDropzone(props = {}) {\n\tconst { accept, disabled = false, getFilesFromEvent = fromEvent, maxSize = Number.POSITIVE_INFINITY, minSize = 0, multiple = true, maxFiles = 0, onDragEnter, onDragLeave, onDragOver, onDrop, onDropAccepted, onDropRejected, onFileDialogCancel, onFileDialogOpen, useFsAccessApi = false, autoFocus = false, preventDropOnDocument = true, noClick = false, noKeyboard = false, noDrag = false, noDragEventsBubbling = false, onError, validator, getErrorMessage } = props;\n\tconst acceptAttr = useMemo(() => acceptPropAsAcceptAttr(accept), [accept]);\n\tconst inputAcceptAttr = useMemo(() => acceptPropAsAcceptAttr(accept, { omitWildcardMimeTypesWithExtensions: true }), [accept]);\n\tconst pickerTypes = useMemo(() => pickerOptionsFromAccept(accept), [accept]);\n\tconst onFileDialogOpenCb = useMemo(() => typeof onFileDialogOpen === \"function\" ? onFileDialogOpen : noop, [onFileDialogOpen]);\n\tconst onFileDialogCancelCb = useMemo(() => typeof onFileDialogCancel === \"function\" ? onFileDialogCancel : noop, [onFileDialogCancel]);\n\tconst rootRef = useRef(null);\n\tconst inputRef = useRef(null);\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\tconst { isFocused, isFileDialogActive } = state;\n\tconst isFileDialogActiveRef = useRef(isFileDialogActive);\n\tisFileDialogActiveRef.current = isFileDialogActive;\n\tconst processingAbortRef = useRef(null);\n\tconst beginProcessing = useCallback(() => {\n\t\tprocessingAbortRef.current?.abort();\n\t\tconst controller = new AbortController();\n\t\tprocessingAbortRef.current = controller;\n\t\tdispatch({\n\t\t\ttype: \"setProcessing\",\n\t\t\tisProcessing: true\n\t\t});\n\t\treturn controller.signal;\n\t}, []);\n\tconst endProcessing = useCallback((signal) => {\n\t\tif (!signal.aborted) dispatch({\n\t\t\ttype: \"setProcessing\",\n\t\t\tisProcessing: false\n\t\t});\n\t}, []);\n\tconst fsAccessApiWorksRef = useRef(typeof window !== \"undefined\" && window.isSecureContext && useFsAccessApi && canUseFileSystemAccessAPI());\n\tconst onWindowFocus = () => {\n\t\tif (!fsAccessApiWorksRef.current && isFileDialogActive) setTimeout(() => {\n\t\t\tif (inputRef.current) {\n\t\t\t\tconst { files } = inputRef.current;\n\t\t\t\tif (!files?.length) {\n\t\t\t\t\tdispatch({ type: \"closeDialog\" });\n\t\t\t\t\tonFileDialogCancelCb();\n\t\t\t\t}\n\t\t\t}\n\t\t}, 300);\n\t};\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"focus\", onWindowFocus, false);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"focus\", onWindowFocus, false);\n\t\t};\n\t}, [\n\t\tinputRef,\n\t\tisFileDialogActive,\n\t\tonFileDialogCancelCb,\n\t\tfsAccessApiWorksRef\n\t]);\n\tconst dragTargetsRef = useRef([]);\n\tconst globalDragTargetsRef = useRef([]);\n\tconst onDocumentDrop = (event) => {\n\t\tif (rootRef.current && event.target && rootRef.current.contains(event.target) && event.defaultPrevented) return;\n\t\tevent.preventDefault();\n\t\tdragTargetsRef.current = [];\n\t};\n\tuseEffect(() => {\n\t\tif (preventDropOnDocument) {\n\t\t\tdocument.addEventListener(\"dragover\", onDocumentDragOver, false);\n\t\t\tdocument.addEventListener(\"drop\", onDocumentDrop, false);\n\t\t}\n\t\treturn () => {\n\t\t\tif (preventDropOnDocument) {\n\t\t\t\tdocument.removeEventListener(\"dragover\", onDocumentDragOver);\n\t\t\t\tdocument.removeEventListener(\"drop\", onDocumentDrop);\n\t\t\t}\n\t\t};\n\t}, [rootRef, preventDropOnDocument]);\n\tuseEffect(() => {\n\t\tconst onDocumentDragEnter = (event) => {\n\t\t\tif (event.target) globalDragTargetsRef.current = [...globalDragTargetsRef.current, event.target];\n\t\t\tif (isEvtWithFiles(event)) dispatch({\n\t\t\t\tisDragGlobal: true,\n\t\t\t\ttype: \"setDragGlobal\"\n\t\t\t});\n\t\t};\n\t\tconst onDocumentDragLeave = (event) => {\n\t\t\tglobalDragTargetsRef.current = globalDragTargetsRef.current.filter((el) => el !== event.target && el !== null);\n\t\t\tif (globalDragTargetsRef.current.length > 0) return;\n\t\t\tdispatch({\n\t\t\t\tisDragGlobal: false,\n\t\t\t\ttype: \"setDragGlobal\"\n\t\t\t});\n\t\t};\n\t\tconst onDocumentDragEnd = () => {\n\t\t\tglobalDragTargetsRef.current = [];\n\t\t\tdispatch({\n\t\t\t\tisDragGlobal: false,\n\t\t\t\ttype: \"setDragGlobal\"\n\t\t\t});\n\t\t};\n\t\tconst onDocumentDropGlobal = () => {\n\t\t\tglobalDragTargetsRef.current = [];\n\t\t\tdispatch({\n\t\t\t\tisDragGlobal: false,\n\t\t\t\ttype: \"setDragGlobal\"\n\t\t\t});\n\t\t};\n\t\tdocument.addEventListener(\"dragenter\", onDocumentDragEnter, false);\n\t\tdocument.addEventListener(\"dragleave\", onDocumentDragLeave, false);\n\t\tdocument.addEventListener(\"dragend\", onDocumentDragEnd, false);\n\t\tdocument.addEventListener(\"drop\", onDocumentDropGlobal, false);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"dragenter\", onDocumentDragEnter);\n\t\t\tdocument.removeEventListener(\"dragleave\", onDocumentDragLeave);\n\t\t\tdocument.removeEventListener(\"dragend\", onDocumentDragEnd);\n\t\t\tdocument.removeEventListener(\"drop\", onDocumentDropGlobal);\n\t\t};\n\t}, [rootRef]);\n\tuseEffect(() => {\n\t\tif (!disabled && autoFocus && rootRef.current) rootRef.current.focus();\n\t\treturn () => {};\n\t}, [\n\t\trootRef,\n\t\tautoFocus,\n\t\tdisabled\n\t]);\n\tconst onErrCb = useCallback((e) => {\n\t\tif (onError) onError(e);\n\t\telse console.error(e);\n\t}, [onError]);\n\tconst onDragEnterCb = useCallback((event) => {\n\t\tevent.preventDefault();\n\t\tevent.persist?.();\n\t\tstopPropagation(event);\n\t\tif (isFileDialogActiveRef.current) return;\n\t\tdragTargetsRef.current = [...dragTargetsRef.current, event.target];\n\t\tif (isEvtWithFiles(event)) Promise.resolve(getFilesFromEvent(event)).then((files) => {\n\t\t\tif (isPropagationStopped(event) && !noDragEventsBubbling) return;\n\t\t\tconst verdict = files.length > 0 ? getDragVerdict({\n\t\t\t\tfiles,\n\t\t\t\taccept: acceptAttr,\n\t\t\t\tminSize,\n\t\t\t\tmaxSize,\n\t\t\t\tmultiple,\n\t\t\t\tmaxFiles,\n\t\t\t\tvalidator\n\t\t\t}) : null;\n\t\t\tdispatch({\n\t\t\t\tisDragAccept: verdict === \"accept\",\n\t\t\t\tisDragReject: verdict === \"reject\",\n\t\t\t\tisDragUnknown: verdict === \"unknown\",\n\t\t\t\tisDragActive: true,\n\t\t\t\ttype: \"setDraggedFiles\"\n\t\t\t});\n\t\t\tif (onDragEnter) onDragEnter(event);\n\t\t}).catch((e) => onErrCb(e));\n\t}, [\n\t\tgetFilesFromEvent,\n\t\tonDragEnter,\n\t\tonErrCb,\n\t\tnoDragEventsBubbling,\n\t\tacceptAttr,\n\t\tminSize,\n\t\tmaxSize,\n\t\tmultiple,\n\t\tmaxFiles,\n\t\tvalidator\n\t]);\n\tconst onDragOverCb = useCallback((event) => {\n\t\tevent.preventDefault();\n\t\tevent.persist?.();\n\t\tstopPropagation(event);\n\t\tif (isFileDialogActiveRef.current) return false;\n\t\tconst hasFiles = isEvtWithFiles(event);\n\t\tif (hasFiles && event.dataTransfer) try {\n\t\t\tevent.dataTransfer.dropEffect = \"copy\";\n\t\t} catch {}\n\t\tif (hasFiles && onDragOver) onDragOver(event);\n\t\treturn false;\n\t}, [onDragOver, noDragEventsBubbling]);\n\tconst onDragLeaveCb = useCallback((event) => {\n\t\tevent.preventDefault();\n\t\tevent.persist?.();\n\t\tstopPropagation(event);\n\t\tconst targets = dragTargetsRef.current.filter((target) => rootRef.current?.contains(target));\n\t\tconst targetIdx = targets.indexOf(event.target);\n\t\tif (targetIdx !== -1) targets.splice(targetIdx, 1);\n\t\tdragTargetsRef.current = targets;\n\t\tif (targets.length > 0) return;\n\t\tdispatch({\n\t\t\ttype: \"setDraggedFiles\",\n\t\t\tisDragActive: false,\n\t\t\tisDragAccept: false,\n\t\t\tisDragReject: false,\n\t\t\tisDragUnknown: false\n\t\t});\n\t\tif (isEvtWithFiles(event) && onDragLeave) onDragLeave(event);\n\t}, [\n\t\trootRef,\n\t\tonDragLeave,\n\t\tnoDragEventsBubbling\n\t]);\n\tconst setFiles = useCallback(async (files, event, signal) => {\n\t\tconst localizeError = (error, file) => getErrorMessage ? {\n\t\t\t...error,\n\t\t\tmessage: getErrorMessage(error, file)\n\t\t} : error;\n\t\tconst commit = (results) => {\n\t\t\tconst acceptedFiles = [];\n\t\t\tconst fileRejections = [];\n\t\t\tresults.forEach(({ file, accepted, acceptError, sizeMatch, sizeError, customErrors }) => {\n\t\t\t\tif (accepted && sizeMatch && !customErrors) acceptedFiles.push(file);\n\t\t\t\telse {\n\t\t\t\t\tlet errors = [acceptError, sizeError];\n\t\t\t\t\tif (customErrors) errors = errors.concat(customErrors);\n\t\t\t\t\tfileRejections.push({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\terrors: errors.filter((e) => e != null).map((error) => localizeError(error, file))\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst acceptedFilesLimit = multiple ? maxFiles >= 1 ? maxFiles : Number.POSITIVE_INFINITY : 1;\n\t\t\tif (acceptedFiles.length > acceptedFilesLimit) acceptedFiles.splice(acceptedFilesLimit).forEach((file) => {\n\t\t\t\tfileRejections.push({\n\t\t\t\t\tfile,\n\t\t\t\t\terrors: [localizeError(TOO_MANY_FILES_REJECTION, file)]\n\t\t\t\t});\n\t\t\t});\n\t\t\tdispatch({\n\t\t\t\tacceptedFiles,\n\t\t\t\tfileRejections,\n\t\t\t\ttype: \"setFiles\"\n\t\t\t});\n\t\t\tif (onDrop) onDrop(acceptedFiles, fileRejections, event);\n\t\t\tif (fileRejections.length > 0 && onDropRejected) onDropRejected(fileRejections, event);\n\t\t\tif (acceptedFiles.length > 0 && onDropAccepted) onDropAccepted(acceptedFiles, event);\n\t\t};\n\t\tconst pending = files.map((file) => {\n\t\t\tconst [accepted, acceptError] = fileAccepted(file, inputAcceptAttr);\n\t\t\tconst [sizeMatch, sizeError] = fileMatchSize(file, minSize, maxSize);\n\t\t\treturn {\n\t\t\t\tfile,\n\t\t\t\taccepted,\n\t\t\t\tacceptError,\n\t\t\t\tsizeMatch,\n\t\t\t\tsizeError,\n\t\t\t\tcustomErrors: validator ? validator(file) : null\n\t\t\t};\n\t\t});\n\t\tif (!pending.some(({ customErrors }) => isThenable(customErrors))) {\n\t\t\tcommit(pending);\n\t\t\treturn;\n\t\t}\n\t\tlet results;\n\t\ttry {\n\t\t\tresults = await Promise.all(pending.map(async ({ customErrors, ...rest }) => ({\n\t\t\t\t...rest,\n\t\t\t\tcustomErrors: await customErrors\n\t\t\t})));\n\t\t} catch (e) {\n\t\t\tif (!signal.aborted) {\n\t\t\t\tendProcessing(signal);\n\t\t\t\tonErrCb(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (signal.aborted) return;\n\t\tcommit(results);\n\t}, [\n\t\tdispatch,\n\t\tmultiple,\n\t\tinputAcceptAttr,\n\t\tminSize,\n\t\tmaxSize,\n\t\tmaxFiles,\n\t\tonDrop,\n\t\tonDropAccepted,\n\t\tonDropRejected,\n\t\tvalidator,\n\t\tgetErrorMessage,\n\t\tonErrCb,\n\t\tendProcessing\n\t]);\n\tconst onDropCb = useCallback((event) => {\n\t\tevent.preventDefault();\n\t\tevent.persist?.();\n\t\tstopPropagation(event);\n\t\tdragTargetsRef.current = [];\n\t\tif (isFileDialogActiveRef.current && event.dataTransfer) return;\n\t\tdispatch({ type: \"reset\" });\n\t\tif (isEvtWithFiles(event)) {\n\t\t\tconst signal = beginProcessing();\n\t\t\tPromise.resolve(getFilesFromEvent(event)).then((files) => {\n\t\t\t\tif (signal.aborted) return;\n\t\t\t\tif (isPropagationStopped(event) && !noDragEventsBubbling) {\n\t\t\t\t\tendProcessing(signal);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn setFiles(files, event, signal);\n\t\t\t}).catch((e) => {\n\t\t\t\tif (!signal.aborted) {\n\t\t\t\t\tendProcessing(signal);\n\t\t\t\t\tonErrCb(e);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, [\n\t\tgetFilesFromEvent,\n\t\tsetFiles,\n\t\tonErrCb,\n\t\tnoDragEventsBubbling,\n\t\tbeginProcessing,\n\t\tendProcessing\n\t]);\n\tconst openFileDialog = useCallback(() => {\n\t\tif (fsAccessApiWorksRef.current) {\n\t\t\tdispatch({ type: \"openDialog\" });\n\t\t\tonFileDialogOpenCb();\n\t\t\tconst opts = {\n\t\t\t\tmultiple,\n\t\t\t\ttypes: pickerTypes\n\t\t\t};\n\t\t\tlet signal;\n\t\t\twindow.showOpenFilePicker(opts).then((handles) => {\n\t\t\t\tsignal = beginProcessing();\n\t\t\t\treturn getFilesFromEvent(handles);\n\t\t\t}).then((files) => {\n\t\t\t\tdispatch({ type: \"closeDialog\" });\n\t\t\t\tif (signal.aborted) return;\n\t\t\t\treturn setFiles(files, null, signal);\n\t\t\t}).catch((e) => {\n\t\t\t\tif (signal) endProcessing(signal);\n\t\t\t\tif (isAbort(e)) {\n\t\t\t\t\tonFileDialogCancelCb(e);\n\t\t\t\t\tdispatch({ type: \"closeDialog\" });\n\t\t\t\t} else if (isSecurityError(e) || isNotAllowedError(e)) {\n\t\t\t\t\tfsAccessApiWorksRef.current = false;\n\t\t\t\t\tif (inputRef.current) {\n\t\t\t\t\t\tinputRef.current.value = \"\";\n\t\t\t\t\t\tinputRef.current.click();\n\t\t\t\t\t} else onErrCb(/* @__PURE__ */ new Error(\"Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no <input> was provided.\"));\n\t\t\t\t} else onErrCb(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (inputRef.current) {\n\t\t\tdispatch({ type: \"openDialog\" });\n\t\t\tonFileDialogOpenCb();\n\t\t\tinputRef.current.value = \"\";\n\t\t\tinputRef.current.click();\n\t\t}\n\t}, [\n\t\tdispatch,\n\t\tonFileDialogOpenCb,\n\t\tonFileDialogCancelCb,\n\t\tuseFsAccessApi,\n\t\tsetFiles,\n\t\tonErrCb,\n\t\tpickerTypes,\n\t\tmultiple,\n\t\tbeginProcessing,\n\t\tendProcessing\n\t]);\n\tconst onKeyDownCb = useCallback((event) => {\n\t\tif (!rootRef.current?.isEqualNode(event.target)) return;\n\t\tif (event.key === \" \" || event.key === \"Enter\" || event.keyCode === 32 || event.keyCode === 13) {\n\t\t\tevent.preventDefault();\n\t\t\topenFileDialog();\n\t\t}\n\t}, [rootRef, openFileDialog]);\n\tconst onFocusCb = useCallback(() => {\n\t\tdispatch({ type: \"focus\" });\n\t}, []);\n\tconst onBlurCb = useCallback(() => {\n\t\tdispatch({ type: \"blur\" });\n\t}, []);\n\tconst onClickCb = useCallback(() => {\n\t\tif (noClick) return;\n\t\tif (isIeOrEdge()) setTimeout(openFileDialog, 0);\n\t\telse openFileDialog();\n\t}, [noClick, openFileDialog]);\n\tconst composeHandler = (fn) => {\n\t\treturn disabled ? null : fn;\n\t};\n\tconst composeKeyboardHandler = (fn) => {\n\t\treturn noKeyboard ? null : composeHandler(fn);\n\t};\n\tconst composeDragHandler = (fn) => {\n\t\treturn noDrag ? null : composeHandler(fn);\n\t};\n\tconst stopPropagation = (event) => {\n\t\tif (noDragEventsBubbling) event.stopPropagation();\n\t};\n\tconst getRootProps = useMemo(() => ({ refKey = \"ref\", role, onKeyDown, onFocus, onBlur, onClick, onDragEnter, onDragOver, onDragLeave, onDrop, ...rest } = {}) => ({\n\t\tonKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n\t\tonFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n\t\tonBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n\t\tonClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n\t\tonDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n\t\tonDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n\t\tonDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n\t\tonDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),\n\t\trole: typeof role === \"string\" && role !== \"\" ? role : \"presentation\",\n\t\t[refKey]: rootRef,\n\t\t...!disabled && !noKeyboard ? { tabIndex: 0 } : {},\n\t\t...disabled ? { \"aria-disabled\": true } : {},\n\t\t...rest\n\t}), [\n\t\trootRef,\n\t\tonKeyDownCb,\n\t\tonFocusCb,\n\t\tonBlurCb,\n\t\tonClickCb,\n\t\tonDragEnterCb,\n\t\tonDragOverCb,\n\t\tonDragLeaveCb,\n\t\tonDropCb,\n\t\tnoKeyboard,\n\t\tnoDrag,\n\t\tdisabled\n\t]);\n\tconst onInputElementClick = useCallback((event) => {\n\t\tevent.stopPropagation();\n\t}, []);\n\tconst getInputProps = useMemo(() => ({ refKey = \"ref\", onChange, onClick, ...rest } = {}) => {\n\t\treturn {\n\t\t\taccept: inputAcceptAttr,\n\t\t\tmultiple,\n\t\t\ttype: \"file\",\n\t\t\t\"aria-label\": \"file upload\",\n\t\t\tstyle: {\n\t\t\t\tborder: 0,\n\t\t\t\tdisplay: \"block\",\n\t\t\t\theight: 0,\n\t\t\t\tmargin: 0,\n\t\t\t\topacity: 0,\n\t\t\t\toverflow: \"hidden\",\n\t\t\t\tpadding: 0,\n\t\t\t\twidth: 0\n\t\t\t},\n\t\t\tonChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n\t\t\tonClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n\t\t\ttabIndex: -1,\n\t\t\t[refKey]: inputRef,\n\t\t\t...rest\n\t\t};\n\t}, [\n\t\tinputRef,\n\t\taccept,\n\t\tmultiple,\n\t\tonDropCb,\n\t\tdisabled\n\t]);\n\treturn {\n\t\t...state,\n\t\tisFocused: isFocused && !disabled,\n\t\tgetRootProps,\n\t\tgetInputProps,\n\t\trootRef,\n\t\tinputRef,\n\t\topen: composeHandler(openFileDialog)\n\t};\n}\nfunction reducer(state, action) {\n\tswitch (action.type) {\n\t\tcase \"focus\": return {\n\t\t\t...state,\n\t\t\tisFocused: true\n\t\t};\n\t\tcase \"blur\": return {\n\t\t\t...state,\n\t\t\tisFocused: false\n\t\t};\n\t\tcase \"openDialog\": return {\n\t\t\t...initialState,\n\t\t\tisFileDialogActive: true\n\t\t};\n\t\tcase \"closeDialog\": return {\n\t\t\t...state,\n\t\t\tisFileDialogActive: false\n\t\t};\n\t\tcase \"setDraggedFiles\": return {\n\t\t\t...state,\n\t\t\tisDragActive: action.isDragActive,\n\t\t\tisDragAccept: action.isDragAccept,\n\t\t\tisDragReject: action.isDragReject,\n\t\t\tisDragUnknown: action.isDragUnknown\n\t\t};\n\t\tcase \"setProcessing\": return {\n\t\t\t...state,\n\t\t\tisProcessing: action.isProcessing\n\t\t};\n\t\tcase \"setFiles\": return {\n\t\t\t...state,\n\t\t\tacceptedFiles: action.acceptedFiles,\n\t\t\tfileRejections: action.fileRejections,\n\t\t\tisProcessing: false,\n\t\t\tisDragReject: false,\n\t\t\tisDragUnknown: false\n\t\t};\n\t\tcase \"setDragGlobal\": return {\n\t\t\t...state,\n\t\t\tisDragGlobal: action.isDragGlobal\n\t\t};\n\t\tcase \"reset\": return { ...initialState };\n\t\tdefault: return state;\n\t}\n}\nfunction noop() {}\n//#endregion\nexport { ErrorCode, Dropzone as default, useDropzone };\n\n//# sourceMappingURL=index.js.map","export type ProcessedFiles = Array<{name: string; data: string}>;\n\nconst readFile = (file: File): Promise<ProcessedFiles[number]> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (typeof e.target?.result === 'string') {\n resolve({name: file.name, data: e.target.result.split('base64,')[1]});\n } else {\n reject(new Error(`Unable to read file: ${file.name}`));\n }\n };\n reader.onerror = () => reject(new Error('File read failed', {cause: reader.error}));\n reader.readAsDataURL(file);\n });\n\n// Reads each file into the base64 payload the add-torrent API expects.\nconst processFiles = (files: Array<File>): Promise<ProcessedFiles> => Promise.all(files.map(readFile));\n\nexport default processFiles;\n","const PriorityLevels = {\n file: {\n 0: 'DONT_DOWNLOAD',\n 1: 'NORMAL',\n 2: 'HIGH',\n },\n torrent: {\n 0: 'DONT_DOWNLOAD',\n 1: 'LOW',\n 2: 'NORMAL',\n 3: 'HIGH',\n },\n} as const;\n\nexport default PriorityLevels;\n","import React, {FC, ReactNode, useState} from 'react';\nimport {useLingui} from '@lingui/react';\nimport {css} from '@client/styled-system/css';\n\nimport PriorityLevels from '../../constants/PriorityLevels';\n\ninterface PriorityMeterProps {\n id: string | number;\n level: number;\n maxLevel: number;\n priorityType: keyof typeof PriorityLevels;\n showLabel?: boolean;\n clickHandled?: boolean;\n changePriorityFuncRef?: React.RefObject<() => number>;\n onChange: (id: this['id'], level: this['level']) => void;\n}\n\nconst PriorityMeter: FC<PriorityMeterProps> = ({\n id,\n level,\n maxLevel,\n priorityType,\n showLabel = false,\n clickHandled = false,\n changePriorityFuncRef,\n onChange,\n}: PriorityMeterProps) => {\n const {i18n} = useLingui();\n const [priorityLevel, setPriorityLevel] = useState<number>(level);\n\n const changePriority = () => {\n let newLevel = priorityLevel;\n\n if (newLevel >= maxLevel) {\n newLevel = 0;\n } else {\n newLevel += 1;\n }\n\n setPriorityLevel(newLevel);\n onChange(id, newLevel);\n\n return newLevel;\n };\n\n if (changePriorityFuncRef != null) {\n changePriorityFuncRef.current = changePriority;\n }\n\n let labelElement: ReactNode;\n if (showLabel) {\n const priorityLevels = PriorityLevels[priorityType];\n\n let priorityLabelElement: ReactNode;\n switch (priorityLevels[priorityLevel as keyof typeof priorityLevels]) {\n case 'DONT_DOWNLOAD':\n priorityLabelElement = i18n._('priority.dont.download');\n break;\n case 'HIGH':\n priorityLabelElement = i18n._('priority.high');\n break;\n case 'LOW':\n priorityLabelElement = i18n._('priority.low');\n break;\n default:\n priorityLabelElement = i18n._('priority.normal');\n break;\n }\n\n labelElement = <span className=\"priority-meter__label\">{priorityLabelElement}</span>;\n }\n\n const levelElement = (\n <div className={`priority-meter priority-meter--max-${maxLevel} priority-meter--level-${priorityLevel}`} />\n );\n\n const styles = css({\n _focus: {\n outline: 'none',\n WebkitTapHighlightColor: 'transparent',\n },\n _focusVisible: {\n outline: 'dashed',\n },\n });\n\n return clickHandled ? (\n <div className={`priority-meter__wrapper ${styles}`}>\n {levelElement}\n {labelElement}\n </div>\n ) : (\n <button\n className={`priority-meter__wrapper ${styles}`}\n type=\"button\"\n onClick={() => {\n changePriority();\n }}\n >\n {levelElement}\n {labelElement}\n </button>\n );\n};\n\nexport default PriorityMeter;\n","import {FC} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport {compute, getTranslationString} from '../../util/size';\nimport {formatNumber} from '../../util/format';\n\ninterface SizeProps {\n value: number;\n precision?: number;\n isSpeed?: boolean;\n className?: string;\n}\n\nconst Size: FC<SizeProps> = ({value, isSpeed = false, className, precision = 2}: SizeProps) => {\n const computed = compute(value, precision);\n const {i18n} = useLingui();\n\n let translatedUnit = i18n._(getTranslationString(computed.unit));\n\n if (isSpeed) {\n translatedUnit = i18n._('unit.speed', {\n baseUnit: translatedUnit,\n });\n }\n\n return (\n <span className={className}>\n {Number.isNaN(computed.value) ? '—' : formatNumber(i18n.locale, computed.value)}\n <em className=\"unit\">{translatedUnit}</em>\n </span>\n );\n};\n\nexport default Size;\n","import classnames from 'classnames';\n\nimport type {TorrentProperties} from '@shared/types/Torrent';\n\nexport interface TorrentStatusOptions {\n trackerWarningEnabled?: boolean;\n}\n\nexport const torrentStatusClasses = (\n {status, downRate, upRate}: Pick<TorrentProperties, 'status' | 'downRate' | 'upRate'>,\n options: TorrentStatusOptions,\n ...classes: Array<string>\n): string =>\n classnames(classes, {\n 'torrent--has-error': status.includes('error'),\n 'torrent--has-warning': (options.trackerWarningEnabled ?? true) && status.includes('warning'),\n 'torrent--is-stopped': status.includes('stopped'),\n 'torrent--is-downloading': status.includes('downloading'),\n 'torrent--is-downloading--actively': downRate > 0,\n 'torrent--is-uploading--actively': upRate > 0,\n 'torrent--is-seeding': status.includes('seeding'),\n 'torrent--is-completed': status.includes('complete'),\n 'torrent--is-checking': status.includes('checking'),\n 'torrent--is-moving': status.includes('moving'),\n 'torrent--is-inactive': status.includes('inactive'),\n });\n\nexport const torrentStatusEffective = (\n status: TorrentProperties['status'],\n options?: TorrentStatusOptions,\n): TorrentProperties['status'][number] => {\n const warningEnabled = options?.trackerWarningEnabled ?? true;\n let result: TorrentProperties['status'][number] = 'stopped';\n\n ['warning', 'error', 'moving', 'checking', 'stopped', 'downloading', 'seeding'].some((state) => {\n if (state === 'warning' && !warningEnabled) {\n return false;\n }\n if (status.includes(state as TorrentProperties['status'][number])) {\n result = state as TorrentProperties['status'][number];\n return true;\n }\n return false;\n });\n\n return result;\n};\n","import {FC, ReactNode} from 'react';\nimport {Trans} from '@lingui/react';\n\nconst secondsToDuration = (\n cumSeconds: number,\n): {\n years?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n cumSeconds: number;\n} => {\n const years = Math.floor(cumSeconds / 31536000);\n const weeks = Math.floor((cumSeconds % 31536000) / 604800);\n const days = Math.floor(((cumSeconds % 31536000) % 604800) / 86400);\n const hours = Math.floor((((cumSeconds % 31536000) % 604800) % 86400) / 3600);\n const minutes = Math.floor(((((cumSeconds % 31536000) % 604800) % 86400) % 3600) / 60);\n const seconds = Math.floor(cumSeconds - minutes * 60);\n let timeRemaining = null;\n\n if (years > 0) {\n timeRemaining = {years, weeks, cumSeconds};\n } else if (weeks > 0) {\n timeRemaining = {weeks, days, cumSeconds};\n } else if (days > 0) {\n timeRemaining = {days, hours, cumSeconds};\n } else if (hours > 0) {\n timeRemaining = {hours, minutes, cumSeconds};\n } else if (minutes > 0) {\n timeRemaining = {minutes, seconds, cumSeconds};\n } else {\n timeRemaining = {seconds, cumSeconds};\n }\n\n return timeRemaining;\n};\n\ninterface DurationProps {\n suffix?: ReactNode;\n value: number;\n}\n\nconst Duration: FC<DurationProps> = ({suffix, value}: DurationProps) => {\n if (value == null) {\n return null;\n }\n\n let content = null;\n let suffixElement = null;\n\n if (suffix) {\n suffixElement = <span className=\"duration--segment\">{suffix}</span>;\n }\n\n const duration = value === -1 ? -1 : secondsToDuration(value);\n\n if (duration === -1) {\n content = <Trans id=\"unit.time.infinity\" />;\n } else if (duration.years != null && duration.years > 0) {\n content = [\n <span className=\"duration--segment\" key=\"years\">\n {duration.years}\n <em className=\"unit\">\n <Trans id=\"unit.time.year\" />\n </em>\n </span>,\n <span className=\"duration--segment\" key=\"weeks\">\n {duration.weeks}\n <em className=\"unit\">\n <Trans id=\"unit.time.week\" />\n </em>\n </span>,\n ];\n } else if (duration.weeks != null && duration.weeks > 0) {\n content = [\n <span className=\"duration--segment\" key=\"weeks\">\n {duration.weeks}\n <em className=\"unit\">\n <Trans id=\"unit.time.week\" />\n </em>\n </span>,\n <span className=\"duration--segment\" key=\"days\">\n {duration.days}\n <em className=\"unit\">\n <Trans id=\"unit.time.day\" />\n </em>\n </span>,\n ];\n } else if (duration.days != null && duration.days > 0) {\n content = [\n <span className=\"duration--segment\" key=\"days\">\n {duration.days}\n <em className=\"unit\">\n <Trans id=\"unit.time.day\" />\n </em>\n </span>,\n <span className=\"duration--segment\" key=\"hours\">\n {duration.hours}\n <em className=\"unit\">\n <Trans id=\"unit.time.hour\" />\n </em>\n </span>,\n ];\n } else if (duration.hours != null && duration.hours > 0) {\n content = [\n <span className=\"duration--segment\" key=\"hours\">\n {duration.hours}\n <em className=\"unit\">\n <Trans id=\"unit.time.hour\" />\n </em>\n </span>,\n <span className=\"duration--segment\" key=\"minutes\">\n {duration.minutes}\n <em className=\"unit\">\n <Trans id=\"unit.time.minute\" />\n </em>\n </span>,\n ];\n } else if (duration.minutes != null && duration.minutes > 0) {\n content = [\n <span className=\"duration--segment\" key=\"minutes\">\n {duration.minutes}\n <em className=\"unit\">\n <Trans id=\"unit.time.minute\" />\n </em>\n </span>,\n <span className=\"duration--segment\" key=\"seconds\">\n {duration.seconds}\n <em className=\"unit\">\n <Trans id=\"unit.time.second\" />\n </em>\n </span>,\n ];\n } else {\n content = (\n <span className=\"duration--segment\">\n {duration.seconds}\n <em className=\"unit\">\n <Trans id=\"unit.time.second\" />\n </em>\n </span>\n );\n }\n\n return (\n <span className=\"duration\">\n {content}\n {suffixElement}\n </span>\n );\n};\n\nexport default Duration;\n","import {FC, memo} from 'react';\n\nimport {CircleExclamation, Error, Spinner, Start, Stop} from '@client/ui/icons';\n\nimport type {TorrentStatus} from '@shared/constants/torrentStatusMap';\n\ninterface TorrentStatusIconProps {\n status: TorrentStatus;\n}\n\nconst TorrentStatusIcon: FC<TorrentStatusIconProps> = memo(({status}: TorrentStatusIconProps) => {\n switch (status) {\n case 'warning':\n return <CircleExclamation />;\n case 'error':\n return <Error />;\n case 'checking':\n return <Spinner />;\n case 'moving':\n return <Spinner />;\n case 'downloading':\n return <Start />;\n case 'seeding':\n return <Start />;\n default:\n return <Stop />;\n }\n});\n\nexport default TorrentStatusIcon;\n","import classnames from 'classnames';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport type {TorrentStatus} from '@shared/constants/torrentStatusMap';\nimport {formatNumber} from '../../util/format';\n\nimport TorrentStatusIcon from './TorrentStatusIcon';\n\ninterface ProgressBarProps {\n percent: number;\n status?: TorrentStatus;\n showPercentLabel?: boolean;\n}\n\nconst ProgressBar: FC<ProgressBarProps> = observer(({percent, status, showPercentLabel = false}: ProgressBarProps) => {\n const {i18n} = useLingui();\n const clampedPercent = Math.min(Math.max(percent, 0), 100);\n const percentLabel =\n clampedPercent === 0 || clampedPercent === 100\n ? formatNumber(i18n.locale, clampedPercent, {maximumFractionDigits: 0})\n : formatNumber(i18n.locale, clampedPercent, {minimumFractionDigits: 1, maximumFractionDigits: 1});\n\n return (\n <div className={classnames('progress-bar', {'progress-bar--with-percent': showPercentLabel})}>\n <div className=\"progress-bar__icon\">{status && <TorrentStatusIcon status={status} />}</div>\n <div className=\"progress-bar__fill__wrapper\">\n <div className=\"progress-bar__fill\" style={{width: `${clampedPercent}%`}} />\n {showPercentLabel ? <span className=\"progress-bar__percent\">{percentLabel}%</span> : null}\n </div>\n </div>\n );\n});\n\nexport default ProgressBar;\n","import {FC, ReactNode} from 'react';\n\ninterface BadgeProps {\n children: ReactNode;\n}\n\nconst Badge: FC<BadgeProps> = ({children}: BadgeProps) => <div className=\"badge\">{children}</div>;\n\nexport default Badge;\n"],"x_google_ignoreList":[0,1,2,3,4,5,7,8,9,10],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{zt as e}from"./dist-krxpX6n5.js";import{n as t,t as n}from"./ApplicationView-CT5l4R4M.js";import{t as r}from"./AuthForm-BjCytAY6.js";var i=e(),a=()=>(0,i.jsx)(n,{modifier:t.AuthForm,children:(0,i.jsx)(r,{mode:`login`})});export{a as default};
2
- //# sourceMappingURL=Login-BVsSTgwh.js.map