@jesec/flood 0.0.0-master.bb859fe → 0.0.0-master.bc35c2a

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 (755) hide show
  1. package/README.md +15 -27
  2. package/dist/assets/assets/Alerts-DfIc2RDo.js +2 -0
  3. package/dist/assets/assets/Alerts-DfIc2RDo.js.map +1 -0
  4. package/dist/assets/assets/ApplicationView-DRawSzhC.js +2 -0
  5. package/dist/assets/assets/ApplicationView-DRawSzhC.js.map +1 -0
  6. package/dist/assets/assets/AuthForm-BUE0cPyH.js +2 -0
  7. package/dist/assets/assets/AuthForm-BUE0cPyH.js.map +1 -0
  8. package/dist/assets/assets/Login-J3I6-ZM-.js +2 -0
  9. package/dist/assets/assets/Login-J3I6-ZM-.js.map +1 -0
  10. package/dist/assets/assets/Modals-DtL_Mqdq.js +53 -0
  11. package/dist/assets/assets/Modals-DtL_Mqdq.js.map +1 -0
  12. package/dist/assets/assets/Overview-DGRHJxN_.js +700 -0
  13. package/dist/assets/assets/Overview-DGRHJxN_.js.map +1 -0
  14. package/dist/assets/assets/Register-D8Wl99rj.js +2 -0
  15. package/dist/assets/assets/Register-D8Wl99rj.js.map +1 -0
  16. package/dist/assets/assets/ad-DuzDZabR.js +2 -0
  17. package/dist/assets/assets/ad-DuzDZabR.js.map +1 -0
  18. package/dist/assets/assets/ae-mkY-Q7Jw.js +2 -0
  19. package/dist/assets/assets/ae-mkY-Q7Jw.js.map +1 -0
  20. package/dist/assets/assets/af-B6-pStw9.js +2 -0
  21. package/dist/assets/assets/af-B6-pStw9.js.map +1 -0
  22. package/dist/assets/assets/af-DPrtuV94.js +2 -0
  23. package/dist/assets/assets/af-DPrtuV94.js.map +1 -0
  24. package/dist/assets/assets/ag-DNCGAFJH.js +2 -0
  25. package/dist/assets/assets/ag-DNCGAFJH.js.map +1 -0
  26. package/dist/assets/assets/al-C_aTCEDQ.js +2 -0
  27. package/dist/assets/assets/al-C_aTCEDQ.js.map +1 -0
  28. package/dist/assets/assets/am-Sr8MvIS7.js +2 -0
  29. package/dist/assets/assets/am-Sr8MvIS7.js.map +1 -0
  30. package/dist/assets/assets/ao-CsJhl30Y.js +2 -0
  31. package/dist/assets/assets/ao-CsJhl30Y.js.map +1 -0
  32. package/dist/assets/assets/ar-B_CHaIUf.js +2 -0
  33. package/dist/assets/assets/ar-B_CHaIUf.js.map +1 -0
  34. package/dist/assets/assets/ar-Cevz1Qs-.js +2 -0
  35. package/dist/assets/assets/ar-Cevz1Qs-.js.map +1 -0
  36. package/dist/assets/assets/at-CiWOhHAz.js +2 -0
  37. package/dist/assets/assets/at-CiWOhHAz.js.map +1 -0
  38. package/dist/assets/assets/au-Bg5EqKS0.js +2 -0
  39. package/dist/assets/assets/au-Bg5EqKS0.js.map +1 -0
  40. package/dist/assets/assets/az-B61XRgw0.js +2 -0
  41. package/dist/assets/assets/az-B61XRgw0.js.map +1 -0
  42. package/dist/assets/assets/ba-Cmt66gfg.js +2 -0
  43. package/dist/assets/assets/ba-Cmt66gfg.js.map +1 -0
  44. package/dist/assets/assets/bb-CR-__YaH.js +2 -0
  45. package/dist/assets/assets/bb-CR-__YaH.js.map +1 -0
  46. package/dist/assets/assets/bd-BNthAGOP.js +2 -0
  47. package/dist/assets/assets/bd-BNthAGOP.js.map +1 -0
  48. package/dist/assets/assets/be-n0KexQYT.js +2 -0
  49. package/dist/assets/assets/be-n0KexQYT.js.map +1 -0
  50. package/dist/assets/assets/bf-CW9xprIG.js +2 -0
  51. package/dist/assets/assets/bf-CW9xprIG.js.map +1 -0
  52. package/dist/assets/assets/bg-CEPzQvFM.js +2 -0
  53. package/dist/assets/assets/bg-CEPzQvFM.js.map +1 -0
  54. package/dist/assets/assets/bh-D956X5o9.js +2 -0
  55. package/dist/assets/assets/bh-D956X5o9.js.map +1 -0
  56. package/dist/assets/assets/bi-dPCv_c-w.js +2 -0
  57. package/dist/assets/assets/bi-dPCv_c-w.js.map +1 -0
  58. package/dist/assets/assets/bj-BI_8Wbdr.js +2 -0
  59. package/dist/assets/assets/bj-BI_8Wbdr.js.map +1 -0
  60. package/dist/assets/assets/bn-BC2Aoz80.js +2 -0
  61. package/dist/assets/assets/bn-BC2Aoz80.js.map +1 -0
  62. package/dist/assets/assets/bo-CELcxyPF.js +2 -0
  63. package/dist/assets/assets/bo-CELcxyPF.js.map +1 -0
  64. package/dist/assets/assets/br-CXLqJ-F4.js +2 -0
  65. package/dist/assets/assets/br-CXLqJ-F4.js.map +1 -0
  66. package/dist/assets/assets/bs-NowsU2-W.js +2 -0
  67. package/dist/assets/assets/bs-NowsU2-W.js.map +1 -0
  68. package/dist/assets/assets/bt-dYTlOroH.js +2 -0
  69. package/dist/assets/assets/bt-dYTlOroH.js.map +1 -0
  70. package/dist/assets/assets/bw-D4vkJpZr.js +2 -0
  71. package/dist/assets/assets/bw-D4vkJpZr.js.map +1 -0
  72. package/dist/assets/assets/by-eP_jw9Kc.js +2 -0
  73. package/dist/assets/assets/by-eP_jw9Kc.js.map +1 -0
  74. package/dist/assets/assets/bz-CCMMQS8N.js +2 -0
  75. package/dist/assets/assets/bz-CCMMQS8N.js.map +1 -0
  76. package/dist/assets/assets/ca-DAtf_5hQ.js +2 -0
  77. package/dist/assets/assets/ca-DAtf_5hQ.js.map +1 -0
  78. package/dist/assets/assets/ca-XCK4Ukes.js +2 -0
  79. package/dist/assets/assets/ca-XCK4Ukes.js.map +1 -0
  80. package/dist/assets/assets/cd-EHjOG1bO.js +2 -0
  81. package/dist/assets/assets/cd-EHjOG1bO.js.map +1 -0
  82. package/dist/assets/assets/cf-DnV2k9tP.js +2 -0
  83. package/dist/assets/assets/cf-DnV2k9tP.js.map +1 -0
  84. package/dist/assets/assets/cg-2ZHLG0Mz.js +2 -0
  85. package/dist/assets/assets/cg-2ZHLG0Mz.js.map +1 -0
  86. package/dist/assets/assets/ch-CA-QpVeB.js +2 -0
  87. package/dist/assets/assets/ch-CA-QpVeB.js.map +1 -0
  88. package/dist/assets/assets/ci-eeX5pCsO.js +2 -0
  89. package/dist/assets/assets/ci-eeX5pCsO.js.map +1 -0
  90. package/dist/assets/assets/cl-D2scfwli.js +2 -0
  91. package/dist/assets/assets/cl-D2scfwli.js.map +1 -0
  92. package/dist/assets/assets/cm-DyX7ciTH.js +2 -0
  93. package/dist/assets/assets/cm-DyX7ciTH.js.map +1 -0
  94. package/dist/assets/assets/cn-CUTpdmU5.js +2 -0
  95. package/dist/assets/assets/cn-CUTpdmU5.js.map +1 -0
  96. package/dist/assets/assets/co-DcXC8Nb5.js +2 -0
  97. package/dist/assets/assets/co-DcXC8Nb5.js.map +1 -0
  98. package/dist/assets/assets/cr-D4hE4yAQ.js +2 -0
  99. package/dist/assets/assets/cr-D4hE4yAQ.js.map +1 -0
  100. package/dist/assets/assets/cs-BIjoDiHH.js +2 -0
  101. package/dist/assets/assets/cs-BIjoDiHH.js.map +1 -0
  102. package/dist/assets/assets/cu-Dl19LoSo.js +2 -0
  103. package/dist/assets/assets/cu-Dl19LoSo.js.map +1 -0
  104. package/dist/assets/assets/cv-Dc7EiSki.js +2 -0
  105. package/dist/assets/assets/cv-Dc7EiSki.js.map +1 -0
  106. package/dist/assets/assets/cw-B3QTQWLm.js +2 -0
  107. package/dist/assets/assets/cw-B3QTQWLm.js.map +1 -0
  108. package/dist/assets/assets/cy-lPbapF6t.js +2 -0
  109. package/dist/assets/assets/cy-lPbapF6t.js.map +1 -0
  110. package/dist/assets/assets/cz-CSN1u-1p.js +2 -0
  111. package/dist/assets/assets/cz-CSN1u-1p.js.map +1 -0
  112. package/dist/assets/assets/da-Cd4-2_5U.js +2 -0
  113. package/dist/assets/assets/da-Cd4-2_5U.js.map +1 -0
  114. package/dist/assets/assets/de-C7YtizCu.js +2 -0
  115. package/dist/assets/assets/de-C7YtizCu.js.map +1 -0
  116. package/dist/assets/assets/de-DNid5tvw.js +2 -0
  117. package/dist/assets/assets/de-DNid5tvw.js.map +1 -0
  118. package/dist/assets/assets/dist-CV9BnlWY.js +5 -0
  119. package/dist/assets/assets/dist-CV9BnlWY.js.map +1 -0
  120. package/dist/assets/assets/dj-BY__Rk6N.js +2 -0
  121. package/dist/assets/assets/dj-BY__Rk6N.js.map +1 -0
  122. package/dist/assets/assets/dk-BrBg2C-u.js +2 -0
  123. package/dist/assets/assets/dk-BrBg2C-u.js.map +1 -0
  124. package/dist/assets/assets/dm-B8fppkLZ.js +2 -0
  125. package/dist/assets/assets/dm-B8fppkLZ.js.map +1 -0
  126. package/dist/assets/assets/do-DT6lsFi0.js +2 -0
  127. package/dist/assets/assets/do-DT6lsFi0.js.map +1 -0
  128. package/dist/assets/assets/dz-DvjjArkf.js +2 -0
  129. package/dist/assets/assets/dz-DvjjArkf.js.map +1 -0
  130. package/dist/assets/assets/ec-CLcn3ZY5.js +2 -0
  131. package/dist/assets/assets/ec-CLcn3ZY5.js.map +1 -0
  132. package/dist/assets/assets/ee-DhRoyamb.js +2 -0
  133. package/dist/assets/assets/ee-DhRoyamb.js.map +1 -0
  134. package/dist/assets/assets/eg-BMJXSjA7.js +2 -0
  135. package/dist/assets/assets/eg-BMJXSjA7.js.map +1 -0
  136. package/dist/assets/assets/eh-kPNs0m4W.js +2 -0
  137. package/dist/assets/assets/eh-kPNs0m4W.js.map +1 -0
  138. package/dist/assets/assets/el-BaaG9zXY.js +2 -0
  139. package/dist/assets/assets/el-BaaG9zXY.js.map +1 -0
  140. package/dist/assets/assets/er-CgcszDHk.js +2 -0
  141. package/dist/assets/assets/er-CgcszDHk.js.map +1 -0
  142. package/dist/assets/assets/es-Cn40GwkH.js +2 -0
  143. package/dist/assets/assets/es-Cn40GwkH.js.map +1 -0
  144. package/dist/assets/assets/es-DDZkgU93.js +2 -0
  145. package/dist/assets/assets/es-DDZkgU93.js.map +1 -0
  146. package/dist/assets/assets/et-xpjwka4f.js +2 -0
  147. package/dist/assets/assets/et-xpjwka4f.js.map +1 -0
  148. package/dist/assets/assets/fi-BaKFdgP1.js +2 -0
  149. package/dist/assets/assets/fi-BaKFdgP1.js.map +1 -0
  150. package/dist/assets/assets/fi-CFoJ7h4p.js +2 -0
  151. package/dist/assets/assets/fi-CFoJ7h4p.js.map +1 -0
  152. package/dist/assets/assets/fj-Dv9fACYg.js +2 -0
  153. package/dist/assets/assets/fj-Dv9fACYg.js.map +1 -0
  154. package/dist/assets/assets/fm-CJS-CajN.js +2 -0
  155. package/dist/assets/assets/fm-CJS-CajN.js.map +1 -0
  156. package/dist/assets/assets/fr-CFYjBpyx.js +2 -0
  157. package/dist/assets/assets/fr-CFYjBpyx.js.map +1 -0
  158. package/dist/assets/assets/fr-DihSzc5w.js +2 -0
  159. package/dist/assets/assets/fr-DihSzc5w.js.map +1 -0
  160. package/dist/assets/assets/ga-CNumRDCQ.js +2 -0
  161. package/dist/assets/assets/ga-CNumRDCQ.js.map +1 -0
  162. package/dist/assets/assets/gb-WNer3TCs.js +2 -0
  163. package/dist/assets/assets/gb-WNer3TCs.js.map +1 -0
  164. package/dist/assets/assets/gd-AxP8ZqQ3.js +2 -0
  165. package/dist/assets/assets/gd-AxP8ZqQ3.js.map +1 -0
  166. package/dist/assets/assets/ge-BZNhlpjl.js +2 -0
  167. package/dist/assets/assets/ge-BZNhlpjl.js.map +1 -0
  168. package/dist/assets/assets/gh-DfG0KL4E.js +2 -0
  169. package/dist/assets/assets/gh-DfG0KL4E.js.map +1 -0
  170. package/dist/assets/assets/gm-DNv0Gi3L.js +2 -0
  171. package/dist/assets/assets/gm-DNv0Gi3L.js.map +1 -0
  172. package/dist/assets/assets/gn-CCNIcOau.js +2 -0
  173. package/dist/assets/assets/gn-CCNIcOau.js.map +1 -0
  174. package/dist/assets/assets/gq-Db3JBvRp.js +2 -0
  175. package/dist/assets/assets/gq-Db3JBvRp.js.map +1 -0
  176. package/dist/assets/assets/gr-CUycZL06.js +2 -0
  177. package/dist/assets/assets/gr-CUycZL06.js.map +1 -0
  178. package/dist/assets/assets/gt-CvcG2CCr.js +2 -0
  179. package/dist/assets/assets/gt-CvcG2CCr.js.map +1 -0
  180. package/dist/assets/assets/gw-Bz6bHaFC.js +2 -0
  181. package/dist/assets/assets/gw-Bz6bHaFC.js.map +1 -0
  182. package/dist/assets/assets/gy-Bh14gmuk.js +2 -0
  183. package/dist/assets/assets/gy-Bh14gmuk.js.map +1 -0
  184. package/dist/assets/assets/he-BqHuQNYF.js +2 -0
  185. package/dist/assets/assets/he-BqHuQNYF.js.map +1 -0
  186. package/dist/assets/assets/hk-CoxQRos-.js +2 -0
  187. package/dist/assets/assets/hk-CoxQRos-.js.map +1 -0
  188. package/dist/assets/assets/hn-D9MR-twd.js +2 -0
  189. package/dist/assets/assets/hn-D9MR-twd.js.map +1 -0
  190. package/dist/assets/assets/hr-CY8ssDf2.js +2 -0
  191. package/dist/assets/assets/hr-CY8ssDf2.js.map +1 -0
  192. package/dist/assets/assets/ht-Btab_P66.js +2 -0
  193. package/dist/assets/assets/ht-Btab_P66.js.map +1 -0
  194. package/dist/assets/assets/hu-Bd15G6cY.js +2 -0
  195. package/dist/assets/assets/hu-Bd15G6cY.js.map +1 -0
  196. package/dist/assets/assets/hu-XTCl1evV.js +2 -0
  197. package/dist/assets/assets/hu-XTCl1evV.js.map +1 -0
  198. package/dist/assets/assets/id-Cl2IUqcE.js +2 -0
  199. package/dist/assets/assets/id-Cl2IUqcE.js.map +1 -0
  200. package/dist/assets/assets/ie-DhNM_aaB.js +2 -0
  201. package/dist/assets/assets/ie-DhNM_aaB.js.map +1 -0
  202. package/dist/assets/assets/il-CjxCOku_.js +2 -0
  203. package/dist/assets/assets/il-CjxCOku_.js.map +1 -0
  204. package/dist/assets/assets/in-BiAGGW0P.js +2 -0
  205. package/dist/assets/assets/in-BiAGGW0P.js.map +1 -0
  206. package/dist/assets/assets/index-9MYKwVAF.css +1 -0
  207. package/dist/assets/assets/index-9hy4Aqda.js +84 -0
  208. package/dist/assets/assets/index-9hy4Aqda.js.map +1 -0
  209. package/dist/assets/assets/iq-Cv2AX3gf.js +2 -0
  210. package/dist/assets/assets/iq-Cv2AX3gf.js.map +1 -0
  211. package/dist/assets/assets/ir-ChSMloNP.js +2 -0
  212. package/dist/assets/assets/ir-ChSMloNP.js.map +1 -0
  213. package/dist/assets/assets/is-B_gQCHkP.js +2 -0
  214. package/dist/assets/assets/is-B_gQCHkP.js.map +1 -0
  215. package/dist/assets/assets/it-CKWb6UZL.js +2 -0
  216. package/dist/assets/assets/it-CKWb6UZL.js.map +1 -0
  217. package/dist/assets/assets/it-nE66-Fr1.js +2 -0
  218. package/dist/assets/assets/it-nE66-Fr1.js.map +1 -0
  219. package/dist/assets/assets/ja-B623Yqkl.js +2 -0
  220. package/dist/assets/assets/ja-B623Yqkl.js.map +1 -0
  221. package/dist/assets/assets/je-Bf5hMZi_.js +2 -0
  222. package/dist/assets/assets/je-Bf5hMZi_.js.map +1 -0
  223. package/dist/assets/assets/jm-B9-ZYIdz.js +2 -0
  224. package/dist/assets/assets/jm-B9-ZYIdz.js.map +1 -0
  225. package/dist/assets/assets/jo-LRCd5NbG.js +2 -0
  226. package/dist/assets/assets/jo-LRCd5NbG.js.map +1 -0
  227. package/dist/assets/assets/jp-Jgwu6K6N.js +2 -0
  228. package/dist/assets/assets/jp-Jgwu6K6N.js.map +1 -0
  229. package/dist/assets/assets/ke-BDIx-O5L.js +2 -0
  230. package/dist/assets/assets/ke-BDIx-O5L.js.map +1 -0
  231. package/dist/assets/assets/kg-D_8Ev0zW.js +2 -0
  232. package/dist/assets/assets/kg-D_8Ev0zW.js.map +1 -0
  233. package/dist/assets/assets/kh-D9n-04BG.js +2 -0
  234. package/dist/assets/assets/kh-D9n-04BG.js.map +1 -0
  235. package/dist/assets/assets/ki-DfQfF35G.js +2 -0
  236. package/dist/assets/assets/ki-DfQfF35G.js.map +1 -0
  237. package/dist/assets/assets/km-DIs2PJNm.js +2 -0
  238. package/dist/assets/assets/km-DIs2PJNm.js.map +1 -0
  239. package/dist/assets/assets/kn-A-kuWFN_.js +2 -0
  240. package/dist/assets/assets/kn-A-kuWFN_.js.map +1 -0
  241. package/dist/assets/assets/ko-DE_dHFvf.js +2 -0
  242. package/dist/assets/assets/ko-DE_dHFvf.js.map +1 -0
  243. package/dist/assets/assets/kp-DdNIIhXM.js +2 -0
  244. package/dist/assets/assets/kp-DdNIIhXM.js.map +1 -0
  245. package/dist/assets/assets/kr-DrWfuTqv.js +2 -0
  246. package/dist/assets/assets/kr-DrWfuTqv.js.map +1 -0
  247. package/dist/assets/assets/ks-DJfQ-YO3.js +2 -0
  248. package/dist/assets/assets/ks-DJfQ-YO3.js.map +1 -0
  249. package/dist/assets/assets/kw-Bo7h3oBB.js +2 -0
  250. package/dist/assets/assets/kw-Bo7h3oBB.js.map +1 -0
  251. package/dist/assets/assets/kz-DG6hiRvd.js +2 -0
  252. package/dist/assets/assets/kz-DG6hiRvd.js.map +1 -0
  253. package/dist/assets/assets/la-DIC6JYVS.js +2 -0
  254. package/dist/assets/assets/la-DIC6JYVS.js.map +1 -0
  255. package/dist/assets/assets/lb-DZ9bz8Y4.js +2 -0
  256. package/dist/assets/assets/lb-DZ9bz8Y4.js.map +1 -0
  257. package/dist/assets/assets/lc-Dr02stwZ.js +2 -0
  258. package/dist/assets/assets/lc-Dr02stwZ.js.map +1 -0
  259. package/dist/assets/assets/li-DhScucbM.js +2 -0
  260. package/dist/assets/assets/li-DhScucbM.js.map +1 -0
  261. package/dist/assets/assets/lk-D_git-VI.js +2 -0
  262. package/dist/assets/assets/lk-D_git-VI.js.map +1 -0
  263. package/dist/assets/assets/lr-Gz2Pv4Is.js +2 -0
  264. package/dist/assets/assets/lr-Gz2Pv4Is.js.map +1 -0
  265. package/dist/assets/assets/ls-Dla8Mtxv.js +2 -0
  266. package/dist/assets/assets/ls-Dla8Mtxv.js.map +1 -0
  267. package/dist/assets/assets/lt-C9s1s2DO.js +2 -0
  268. package/dist/assets/assets/lt-C9s1s2DO.js.map +1 -0
  269. package/dist/assets/assets/lu-2yhjYU-Q.js +2 -0
  270. package/dist/assets/assets/lu-2yhjYU-Q.js.map +1 -0
  271. package/dist/assets/assets/lv-W5x5JHfO.js +2 -0
  272. package/dist/assets/assets/lv-W5x5JHfO.js.map +1 -0
  273. package/dist/assets/assets/ly-CQRzcpdX.js +2 -0
  274. package/dist/assets/assets/ly-CQRzcpdX.js.map +1 -0
  275. package/dist/assets/assets/ma-B7eS8F31.js +2 -0
  276. package/dist/assets/assets/ma-B7eS8F31.js.map +1 -0
  277. package/dist/assets/assets/mc-KSBzvhnr.js +2 -0
  278. package/dist/assets/assets/mc-KSBzvhnr.js.map +1 -0
  279. package/dist/assets/assets/md-DZXCIQ3o.js +2 -0
  280. package/dist/assets/assets/md-DZXCIQ3o.js.map +1 -0
  281. package/dist/assets/assets/me-Bx7s2-BC.js +2 -0
  282. package/dist/assets/assets/me-Bx7s2-BC.js.map +1 -0
  283. package/dist/assets/assets/mg-CUAmb4P0.js +2 -0
  284. package/dist/assets/assets/mg-CUAmb4P0.js.map +1 -0
  285. package/dist/assets/assets/mh-D58v_sSR.js +2 -0
  286. package/dist/assets/assets/mh-D58v_sSR.js.map +1 -0
  287. package/dist/assets/assets/mk-B1iKenEf.js +2 -0
  288. package/dist/assets/assets/mk-B1iKenEf.js.map +1 -0
  289. package/dist/assets/assets/ml-aN2SVTBH.js +2 -0
  290. package/dist/assets/assets/ml-aN2SVTBH.js.map +1 -0
  291. package/dist/assets/assets/mm-BwRj9s66.js +2 -0
  292. package/dist/assets/assets/mm-BwRj9s66.js.map +1 -0
  293. package/dist/assets/assets/mn-CcmT9UiQ.js +2 -0
  294. package/dist/assets/assets/mn-CcmT9UiQ.js.map +1 -0
  295. package/dist/assets/assets/mr-DnTuk3n4.js +2 -0
  296. package/dist/assets/assets/mr-DnTuk3n4.js.map +1 -0
  297. package/dist/assets/assets/mt-DGPWqRA6.js +2 -0
  298. package/dist/assets/assets/mt-DGPWqRA6.js.map +1 -0
  299. package/dist/assets/assets/mu-DcnqbcP-.js +2 -0
  300. package/dist/assets/assets/mu-DcnqbcP-.js.map +1 -0
  301. package/dist/assets/assets/mv-CCKYaZ-D.js +2 -0
  302. package/dist/assets/assets/mv-CCKYaZ-D.js.map +1 -0
  303. package/dist/assets/assets/mw-BxhR28Lk.js +2 -0
  304. package/dist/assets/assets/mw-BxhR28Lk.js.map +1 -0
  305. package/dist/assets/assets/mx-By-j66iW.js +2 -0
  306. package/dist/assets/assets/mx-By-j66iW.js.map +1 -0
  307. package/dist/assets/assets/my-3m2yhQRk.js +2 -0
  308. package/dist/assets/assets/my-3m2yhQRk.js.map +1 -0
  309. package/dist/assets/assets/mz-oGkxPx1n.js +2 -0
  310. package/dist/assets/assets/mz-oGkxPx1n.js.map +1 -0
  311. package/dist/assets/assets/na-CUsEkM92.js +2 -0
  312. package/dist/assets/assets/na-CUsEkM92.js.map +1 -0
  313. package/dist/assets/assets/ne-D_CUh-Lc.js +2 -0
  314. package/dist/assets/assets/ne-D_CUh-Lc.js.map +1 -0
  315. package/dist/assets/assets/ng-BPWJ1Me2.js +2 -0
  316. package/dist/assets/assets/ng-BPWJ1Me2.js.map +1 -0
  317. package/dist/assets/assets/ni-DEQvXqPw.js +2 -0
  318. package/dist/assets/assets/ni-DEQvXqPw.js.map +1 -0
  319. package/dist/assets/assets/nl-DDw301fE.js +2 -0
  320. package/dist/assets/assets/nl-DDw301fE.js.map +1 -0
  321. package/dist/assets/assets/nl-ld0j2zd2.js +2 -0
  322. package/dist/assets/assets/nl-ld0j2zd2.js.map +1 -0
  323. package/dist/assets/assets/no-D8_ZUO5T.js +2 -0
  324. package/dist/assets/assets/no-D8_ZUO5T.js.map +1 -0
  325. package/dist/assets/assets/no-XfCZZj7G.js +2 -0
  326. package/dist/assets/assets/no-XfCZZj7G.js.map +1 -0
  327. package/dist/assets/assets/np-ByWMGf7r.js +2 -0
  328. package/dist/assets/assets/np-ByWMGf7r.js.map +1 -0
  329. package/dist/assets/assets/nr-BGV1QKHR.js +2 -0
  330. package/dist/assets/assets/nr-BGV1QKHR.js.map +1 -0
  331. package/dist/assets/assets/nz-CtNGOSed.js +2 -0
  332. package/dist/assets/assets/nz-CtNGOSed.js.map +1 -0
  333. package/dist/assets/assets/om-DFZfEG_j.js +2 -0
  334. package/dist/assets/assets/om-DFZfEG_j.js.map +1 -0
  335. package/dist/assets/assets/pa-BTioHiDq.js +2 -0
  336. package/dist/assets/assets/pa-BTioHiDq.js.map +1 -0
  337. package/dist/assets/assets/pe-DWboUCbW.js +2 -0
  338. package/dist/assets/assets/pe-DWboUCbW.js.map +1 -0
  339. package/dist/assets/assets/pg-D4BAFBl7.js +2 -0
  340. package/dist/assets/assets/pg-D4BAFBl7.js.map +1 -0
  341. package/dist/assets/assets/ph-B9-4c05j.js +2 -0
  342. package/dist/assets/assets/ph-B9-4c05j.js.map +1 -0
  343. package/dist/assets/assets/pk-BoydhDTc.js +2 -0
  344. package/dist/assets/assets/pk-BoydhDTc.js.map +1 -0
  345. package/dist/assets/assets/pl-Dicpp7c2.js +2 -0
  346. package/dist/assets/assets/pl-Dicpp7c2.js.map +1 -0
  347. package/dist/assets/assets/pl-LvqNumg3.js +2 -0
  348. package/dist/assets/assets/pl-LvqNumg3.js.map +1 -0
  349. package/dist/assets/assets/pt-DA9RUNlT.js +2 -0
  350. package/dist/assets/assets/pt-DA9RUNlT.js.map +1 -0
  351. package/dist/assets/assets/pt-Gy6aSAgY.js +2 -0
  352. package/dist/assets/assets/pt-Gy6aSAgY.js.map +1 -0
  353. package/dist/assets/assets/pw-J_gyjYWh.js +2 -0
  354. package/dist/assets/assets/pw-J_gyjYWh.js.map +1 -0
  355. package/dist/assets/assets/py-CKAKoon7.js +2 -0
  356. package/dist/assets/assets/py-CKAKoon7.js.map +1 -0
  357. package/dist/assets/assets/qa-CNYB3R3R.js +2 -0
  358. package/dist/assets/assets/qa-CNYB3R3R.js.map +1 -0
  359. package/dist/assets/assets/ro-Btys85cp.js +2 -0
  360. package/dist/assets/assets/ro-Btys85cp.js.map +1 -0
  361. package/dist/assets/assets/ro-sfXVxWl6.js +2 -0
  362. package/dist/assets/assets/ro-sfXVxWl6.js.map +1 -0
  363. package/dist/assets/assets/rs-CVrceSzu.js +2 -0
  364. package/dist/assets/assets/rs-CVrceSzu.js.map +1 -0
  365. package/dist/assets/assets/ru-CrGgx3bV.js +2 -0
  366. package/dist/assets/assets/ru-CrGgx3bV.js.map +1 -0
  367. package/dist/assets/assets/ru-D7oU7uiF.js +2 -0
  368. package/dist/assets/assets/ru-D7oU7uiF.js.map +1 -0
  369. package/dist/assets/assets/rw-B0hMa2RX.js +2 -0
  370. package/dist/assets/assets/rw-B0hMa2RX.js.map +1 -0
  371. package/dist/assets/assets/sa-Cy9ipXz-.js +2 -0
  372. package/dist/assets/assets/sa-Cy9ipXz-.js.map +1 -0
  373. package/dist/assets/assets/sb-DJqNmnJ7.js +2 -0
  374. package/dist/assets/assets/sb-DJqNmnJ7.js.map +1 -0
  375. package/dist/assets/assets/sc-fjfYLACH.js +2 -0
  376. package/dist/assets/assets/sc-fjfYLACH.js.map +1 -0
  377. package/dist/assets/assets/sd-DPOn7vAp.js +2 -0
  378. package/dist/assets/assets/sd-DPOn7vAp.js.map +1 -0
  379. package/dist/assets/assets/se-DfjgVkvK.js +2 -0
  380. package/dist/assets/assets/se-DfjgVkvK.js.map +1 -0
  381. package/dist/assets/assets/sg-CX_EtT3D.js +2 -0
  382. package/dist/assets/assets/sg-CX_EtT3D.js.map +1 -0
  383. package/dist/assets/assets/si-uhOMNPy-.js +2 -0
  384. package/dist/assets/assets/si-uhOMNPy-.js.map +1 -0
  385. package/dist/assets/assets/sk-Dw1JgI5Z.js +2 -0
  386. package/dist/assets/assets/sk-Dw1JgI5Z.js.map +1 -0
  387. package/dist/assets/assets/sl-BwQ6WjNS.js +2 -0
  388. package/dist/assets/assets/sl-BwQ6WjNS.js.map +1 -0
  389. package/dist/assets/assets/sm-Cbxq8dmu.js +2 -0
  390. package/dist/assets/assets/sm-Cbxq8dmu.js.map +1 -0
  391. package/dist/assets/assets/sn-a-NX0-yL.js +2 -0
  392. package/dist/assets/assets/sn-a-NX0-yL.js.map +1 -0
  393. package/dist/assets/assets/so-DVEtVrBI.js +2 -0
  394. package/dist/assets/assets/so-DVEtVrBI.js.map +1 -0
  395. package/dist/assets/assets/sr-CPY2UrNZ.js +2 -0
  396. package/dist/assets/assets/sr-CPY2UrNZ.js.map +1 -0
  397. package/dist/assets/assets/sr-D0aNQziT.js +2 -0
  398. package/dist/assets/assets/sr-D0aNQziT.js.map +1 -0
  399. package/dist/assets/assets/st-BbElRNN3.js +2 -0
  400. package/dist/assets/assets/st-BbElRNN3.js.map +1 -0
  401. package/dist/assets/assets/sv-BIZdpGwy.js +2 -0
  402. package/dist/assets/assets/sv-BIZdpGwy.js.map +1 -0
  403. package/dist/assets/assets/sv-CtoRKEOL.js +2 -0
  404. package/dist/assets/assets/sv-CtoRKEOL.js.map +1 -0
  405. package/dist/assets/assets/sy-DuMP7Nb5.js +2 -0
  406. package/dist/assets/assets/sy-DuMP7Nb5.js.map +1 -0
  407. package/dist/assets/assets/sz-Bbm_EfJR.js +2 -0
  408. package/dist/assets/assets/sz-Bbm_EfJR.js.map +1 -0
  409. package/dist/assets/assets/td-C26ZKLeS.js +2 -0
  410. package/dist/assets/assets/td-C26ZKLeS.js.map +1 -0
  411. package/dist/assets/assets/tg-ClEcBIP7.js +2 -0
  412. package/dist/assets/assets/tg-ClEcBIP7.js.map +1 -0
  413. package/dist/assets/assets/th-Taw3xGiW.js +2 -0
  414. package/dist/assets/assets/th-Taw3xGiW.js.map +1 -0
  415. package/dist/assets/assets/tj-BgQ6d5Wt.js +2 -0
  416. package/dist/assets/assets/tj-BgQ6d5Wt.js.map +1 -0
  417. package/dist/assets/assets/tl-S1pvdloF.js +2 -0
  418. package/dist/assets/assets/tl-S1pvdloF.js.map +1 -0
  419. package/dist/assets/assets/tm-DPbuNbnA.js +2 -0
  420. package/dist/assets/assets/tm-DPbuNbnA.js.map +1 -0
  421. package/dist/assets/assets/tn-_Pbys28Y.js +2 -0
  422. package/dist/assets/assets/tn-_Pbys28Y.js.map +1 -0
  423. package/dist/assets/assets/to-Cr3ejDiA.js +2 -0
  424. package/dist/assets/assets/to-Cr3ejDiA.js.map +1 -0
  425. package/dist/assets/assets/tr-BKZ6SEMN.js +2 -0
  426. package/dist/assets/assets/tr-BKZ6SEMN.js.map +1 -0
  427. package/dist/assets/assets/tr-D_AEGmAM.js +2 -0
  428. package/dist/assets/assets/tr-D_AEGmAM.js.map +1 -0
  429. package/dist/assets/assets/tt-IRFqPLkZ.js +2 -0
  430. package/dist/assets/assets/tt-IRFqPLkZ.js.map +1 -0
  431. package/dist/assets/assets/tv-ByYAbG0B.js +2 -0
  432. package/dist/assets/assets/tv-ByYAbG0B.js.map +1 -0
  433. package/dist/assets/assets/tw-Ebz6JQyM.js +2 -0
  434. package/dist/assets/assets/tw-Ebz6JQyM.js.map +1 -0
  435. package/dist/assets/assets/tz-DofxpwnJ.js +2 -0
  436. package/dist/assets/assets/tz-DofxpwnJ.js.map +1 -0
  437. package/dist/assets/assets/ua-C-Z749Zo.js +2 -0
  438. package/dist/assets/assets/ua-C-Z749Zo.js.map +1 -0
  439. package/dist/assets/assets/ug-CWupOauw.js +2 -0
  440. package/dist/assets/assets/ug-CWupOauw.js.map +1 -0
  441. package/dist/assets/assets/uk-WjqaL9eb.js +2 -0
  442. package/dist/assets/assets/uk-WjqaL9eb.js.map +1 -0
  443. package/dist/assets/assets/us-ev7042Ru.js +2 -0
  444. package/dist/assets/assets/us-ev7042Ru.js.map +1 -0
  445. package/dist/assets/assets/uy-FbqkNalt.js +2 -0
  446. package/dist/assets/assets/uy-FbqkNalt.js.map +1 -0
  447. package/dist/assets/assets/uz-BplITj4H.js +2 -0
  448. package/dist/assets/assets/uz-BplITj4H.js.map +1 -0
  449. package/dist/assets/assets/va-DB_VgAEh.js +2 -0
  450. package/dist/assets/assets/va-DB_VgAEh.js.map +1 -0
  451. package/dist/assets/assets/vc-oE5LafoZ.js +2 -0
  452. package/dist/assets/assets/vc-oE5LafoZ.js.map +1 -0
  453. package/dist/assets/assets/ve-TIdwcWAT.js +2 -0
  454. package/dist/assets/assets/ve-TIdwcWAT.js.map +1 -0
  455. package/dist/assets/assets/vi-DhDHRZca.js +2 -0
  456. package/dist/assets/assets/vi-DhDHRZca.js.map +1 -0
  457. package/dist/assets/assets/vn-TW3TOhkl.js +2 -0
  458. package/dist/assets/assets/vn-TW3TOhkl.js.map +1 -0
  459. package/dist/assets/assets/vu-Hso0UfdZ.js +2 -0
  460. package/dist/assets/assets/vu-Hso0UfdZ.js.map +1 -0
  461. package/dist/assets/assets/ws-B8OQPEXR.js +2 -0
  462. package/dist/assets/assets/ws-B8OQPEXR.js.map +1 -0
  463. package/dist/assets/assets/ye-N2E5D6OR.js +2 -0
  464. package/dist/assets/assets/ye-N2E5D6OR.js.map +1 -0
  465. package/dist/assets/assets/za-DAg0rnhw.js +2 -0
  466. package/dist/assets/assets/za-DAg0rnhw.js.map +1 -0
  467. package/dist/assets/assets/zh-Hans-2KaAC0e7.js +2 -0
  468. package/dist/assets/assets/zh-Hans-2KaAC0e7.js.map +1 -0
  469. package/dist/assets/assets/zh-Hant-BgZemFsG.js +2 -0
  470. package/dist/assets/assets/zh-Hant-BgZemFsG.js.map +1 -0
  471. package/dist/assets/assets/zm-BGyCVCwM.js +2 -0
  472. package/dist/assets/assets/zm-BGyCVCwM.js.map +1 -0
  473. package/dist/assets/assets/zw-aeNZQ8mk.js +2 -0
  474. package/dist/assets/assets/zw-aeNZQ8mk.js.map +1 -0
  475. package/dist/assets/index.html +22 -1
  476. package/dist/assets/manifest.json +15 -1
  477. package/dist/index.js +2 -2
  478. package/package.json +153 -183
  479. package/dist/assets/static/css/main.7f47feb1b73e8c2e37d8.css +0 -2
  480. package/dist/assets/static/css/main.7f47feb1b73e8c2e37d8.css.map +0 -1
  481. package/dist/assets/static/js/179.9f54e07c.chunk.js +0 -2
  482. package/dist/assets/static/js/179.9f54e07c.chunk.js.map +0 -1
  483. package/dist/assets/static/js/525.fd2bf11c.chunk.js +0 -2
  484. package/dist/assets/static/js/525.fd2bf11c.chunk.js.map +0 -1
  485. package/dist/assets/static/js/579.c1d22a5c.chunk.js +0 -2
  486. package/dist/assets/static/js/579.c1d22a5c.chunk.js.map +0 -1
  487. package/dist/assets/static/js/704.09c4831d.chunk.js +0 -2
  488. package/dist/assets/static/js/704.09c4831d.chunk.js.map +0 -1
  489. package/dist/assets/static/js/flag0.390f4d80.chunk.js +0 -2
  490. package/dist/assets/static/js/flag0.390f4d80.chunk.js.map +0 -1
  491. package/dist/assets/static/js/flag1.c2493006.chunk.js +0 -1
  492. package/dist/assets/static/js/flag2.55e1234c.chunk.js +0 -1
  493. package/dist/assets/static/js/flag3.f007a894.chunk.js +0 -1
  494. package/dist/assets/static/js/i18n0.244d5d95.chunk.js +0 -2
  495. package/dist/assets/static/js/i18n0.244d5d95.chunk.js.map +0 -1
  496. package/dist/assets/static/js/i18n1.d4b8420a.chunk.js +0 -2
  497. package/dist/assets/static/js/i18n1.d4b8420a.chunk.js.map +0 -1
  498. package/dist/assets/static/js/i18n10.730f7797.chunk.js +0 -2
  499. package/dist/assets/static/js/i18n10.730f7797.chunk.js.map +0 -1
  500. package/dist/assets/static/js/i18n11.986e67b5.chunk.js +0 -2
  501. package/dist/assets/static/js/i18n11.986e67b5.chunk.js.map +0 -1
  502. package/dist/assets/static/js/i18n12.b0d05581.chunk.js +0 -2
  503. package/dist/assets/static/js/i18n12.b0d05581.chunk.js.map +0 -1
  504. package/dist/assets/static/js/i18n13.c77799b0.chunk.js +0 -2
  505. package/dist/assets/static/js/i18n13.c77799b0.chunk.js.map +0 -1
  506. package/dist/assets/static/js/i18n14.50212936.chunk.js +0 -2
  507. package/dist/assets/static/js/i18n14.50212936.chunk.js.map +0 -1
  508. package/dist/assets/static/js/i18n15.ef9ef320.chunk.js +0 -2
  509. package/dist/assets/static/js/i18n15.ef9ef320.chunk.js.map +0 -1
  510. package/dist/assets/static/js/i18n16.0019bbf1.chunk.js +0 -2
  511. package/dist/assets/static/js/i18n16.0019bbf1.chunk.js.map +0 -1
  512. package/dist/assets/static/js/i18n17.6d285efb.chunk.js +0 -2
  513. package/dist/assets/static/js/i18n17.6d285efb.chunk.js.map +0 -1
  514. package/dist/assets/static/js/i18n18.ac4f71a6.chunk.js +0 -2
  515. package/dist/assets/static/js/i18n18.ac4f71a6.chunk.js.map +0 -1
  516. package/dist/assets/static/js/i18n19.8850767e.chunk.js +0 -2
  517. package/dist/assets/static/js/i18n19.8850767e.chunk.js.map +0 -1
  518. package/dist/assets/static/js/i18n2.a19c5497.chunk.js +0 -2
  519. package/dist/assets/static/js/i18n2.a19c5497.chunk.js.map +0 -1
  520. package/dist/assets/static/js/i18n20.ee3da5b9.chunk.js +0 -2
  521. package/dist/assets/static/js/i18n20.ee3da5b9.chunk.js.map +0 -1
  522. package/dist/assets/static/js/i18n21.2f9e9e60.chunk.js +0 -2
  523. package/dist/assets/static/js/i18n21.2f9e9e60.chunk.js.map +0 -1
  524. package/dist/assets/static/js/i18n22.b8a54386.chunk.js +0 -2
  525. package/dist/assets/static/js/i18n22.b8a54386.chunk.js.map +0 -1
  526. package/dist/assets/static/js/i18n23.8cf11bde.chunk.js +0 -2
  527. package/dist/assets/static/js/i18n23.8cf11bde.chunk.js.map +0 -1
  528. package/dist/assets/static/js/i18n24.68a89169.chunk.js +0 -2
  529. package/dist/assets/static/js/i18n24.68a89169.chunk.js.map +0 -1
  530. package/dist/assets/static/js/i18n25.cb685699.chunk.js +0 -2
  531. package/dist/assets/static/js/i18n25.cb685699.chunk.js.map +0 -1
  532. package/dist/assets/static/js/i18n26.8a1698f7.chunk.js +0 -2
  533. package/dist/assets/static/js/i18n26.8a1698f7.chunk.js.map +0 -1
  534. package/dist/assets/static/js/i18n27.ac1ea7bc.chunk.js +0 -2
  535. package/dist/assets/static/js/i18n27.ac1ea7bc.chunk.js.map +0 -1
  536. package/dist/assets/static/js/i18n28.ae608fbf.chunk.js +0 -2
  537. package/dist/assets/static/js/i18n28.ae608fbf.chunk.js.map +0 -1
  538. package/dist/assets/static/js/i18n3.65a0b086.chunk.js +0 -2
  539. package/dist/assets/static/js/i18n3.65a0b086.chunk.js.map +0 -1
  540. package/dist/assets/static/js/i18n4.6eeb7f55.chunk.js +0 -2
  541. package/dist/assets/static/js/i18n4.6eeb7f55.chunk.js.map +0 -1
  542. package/dist/assets/static/js/i18n5.8a5ba3cd.chunk.js +0 -2
  543. package/dist/assets/static/js/i18n5.8a5ba3cd.chunk.js.map +0 -1
  544. package/dist/assets/static/js/i18n6.5eabd9dc.chunk.js +0 -2
  545. package/dist/assets/static/js/i18n6.5eabd9dc.chunk.js.map +0 -1
  546. package/dist/assets/static/js/i18n8.92bc0e34.chunk.js +0 -2
  547. package/dist/assets/static/js/i18n8.92bc0e34.chunk.js.map +0 -1
  548. package/dist/assets/static/js/i18n9.b947d3c4.chunk.js +0 -2
  549. package/dist/assets/static/js/i18n9.b947d3c4.chunk.js.map +0 -1
  550. package/dist/assets/static/js/main.c704f65d.js +0 -2
  551. package/dist/assets/static/js/main.c704f65d.js.map +0 -1
  552. package/dist/assets/static/media/ad.1b24595d.png +0 -0
  553. package/dist/assets/static/media/ae.4dd8f55e.png +0 -0
  554. package/dist/assets/static/media/af.4ce660eb.png +0 -0
  555. package/dist/assets/static/media/ag.fd9409e4.png +0 -0
  556. package/dist/assets/static/media/al.a297aacf.png +0 -0
  557. package/dist/assets/static/media/am.c84ee0cf.png +0 -0
  558. package/dist/assets/static/media/ao.a7c9214e.png +0 -0
  559. package/dist/assets/static/media/ar.7e57ef92.png +0 -0
  560. package/dist/assets/static/media/at.5aa9728a.png +0 -0
  561. package/dist/assets/static/media/au.155b51d8.png +0 -0
  562. package/dist/assets/static/media/az.63afef5b.png +0 -0
  563. package/dist/assets/static/media/ba.5ce8f273.png +0 -0
  564. package/dist/assets/static/media/bb.f369fc62.png +0 -0
  565. package/dist/assets/static/media/bd.516278fc.png +0 -0
  566. package/dist/assets/static/media/be.08ec4a8d.png +0 -0
  567. package/dist/assets/static/media/bf.50bfcb31.png +0 -0
  568. package/dist/assets/static/media/bg.d9346b96.png +0 -0
  569. package/dist/assets/static/media/bh.f06d5914.png +0 -0
  570. package/dist/assets/static/media/bi.4923e3a3.png +0 -0
  571. package/dist/assets/static/media/bj.019fa79b.png +0 -0
  572. package/dist/assets/static/media/bn.077671e2.png +0 -0
  573. package/dist/assets/static/media/bo.8fb15fc6.png +0 -0
  574. package/dist/assets/static/media/br.ec051f0c.png +0 -0
  575. package/dist/assets/static/media/bs.a74a126f.png +0 -0
  576. package/dist/assets/static/media/bt.4217b804.png +0 -0
  577. package/dist/assets/static/media/bw.21fe1567.png +0 -0
  578. package/dist/assets/static/media/by.d247fe16.png +0 -0
  579. package/dist/assets/static/media/bz.98ec59f6.png +0 -0
  580. package/dist/assets/static/media/ca.25743e11.png +0 -0
  581. package/dist/assets/static/media/cd.a5bfda53.png +0 -0
  582. package/dist/assets/static/media/cf.de7d5d92.png +0 -0
  583. package/dist/assets/static/media/cg.a47b626b.png +0 -0
  584. package/dist/assets/static/media/ch.445f47a1.png +0 -0
  585. package/dist/assets/static/media/ci.a6009c5b.png +0 -0
  586. package/dist/assets/static/media/cl.de1d715e.png +0 -0
  587. package/dist/assets/static/media/cm.3ce8a86a.png +0 -0
  588. package/dist/assets/static/media/cn.e6a26073.png +0 -0
  589. package/dist/assets/static/media/co.e9244faa.png +0 -0
  590. package/dist/assets/static/media/cr.c895e035.png +0 -0
  591. package/dist/assets/static/media/cu.e486c055.png +0 -0
  592. package/dist/assets/static/media/cv.a9585acf.png +0 -0
  593. package/dist/assets/static/media/cw.df13039d.png +0 -0
  594. package/dist/assets/static/media/cy.b31f43a9.png +0 -0
  595. package/dist/assets/static/media/cz.8ec5948b.png +0 -0
  596. package/dist/assets/static/media/de.d12f391a.png +0 -0
  597. package/dist/assets/static/media/dj.154c3580.png +0 -0
  598. package/dist/assets/static/media/dk.da382fe2.png +0 -0
  599. package/dist/assets/static/media/dm.f452e6cd.png +0 -0
  600. package/dist/assets/static/media/do.c6bd7637.png +0 -0
  601. package/dist/assets/static/media/dz.672a69c0.png +0 -0
  602. package/dist/assets/static/media/ec.349d9bd7.png +0 -0
  603. package/dist/assets/static/media/ee.2396205f.png +0 -0
  604. package/dist/assets/static/media/eg.ccbf3f45.png +0 -0
  605. package/dist/assets/static/media/eh.af65674a.png +0 -0
  606. package/dist/assets/static/media/er.21afb638.png +0 -0
  607. package/dist/assets/static/media/es.2a6eaee4.png +0 -0
  608. package/dist/assets/static/media/et.8beb65c8.png +0 -0
  609. package/dist/assets/static/media/fi.331f70fd.png +0 -0
  610. package/dist/assets/static/media/fj.7724d800.png +0 -0
  611. package/dist/assets/static/media/fm.eeaf71e9.png +0 -0
  612. package/dist/assets/static/media/fr.5d5ab008.png +0 -0
  613. package/dist/assets/static/media/ga.77ed474c.png +0 -0
  614. package/dist/assets/static/media/gb.e00065bf.png +0 -0
  615. package/dist/assets/static/media/gd.b4522267.png +0 -0
  616. package/dist/assets/static/media/ge.91a7654d.png +0 -0
  617. package/dist/assets/static/media/gh.4759f92f.png +0 -0
  618. package/dist/assets/static/media/gm.81cd9f75.png +0 -0
  619. package/dist/assets/static/media/gn.9f3d376e.png +0 -0
  620. package/dist/assets/static/media/gq.e8ad58be.png +0 -0
  621. package/dist/assets/static/media/gr.26f3ac0b.png +0 -0
  622. package/dist/assets/static/media/gt.9d81c52e.png +0 -0
  623. package/dist/assets/static/media/gw.dc906982.png +0 -0
  624. package/dist/assets/static/media/gy.a4f62b6c.png +0 -0
  625. package/dist/assets/static/media/hk.56555c3f.png +0 -0
  626. package/dist/assets/static/media/hn.64ee6aad.png +0 -0
  627. package/dist/assets/static/media/hr.93ebecd3.png +0 -0
  628. package/dist/assets/static/media/ht.42ca1596.png +0 -0
  629. package/dist/assets/static/media/hu.bb30f05d.png +0 -0
  630. package/dist/assets/static/media/id.2cb49f2d.png +0 -0
  631. package/dist/assets/static/media/ie.b4dd1f19.png +0 -0
  632. package/dist/assets/static/media/il.cd1d1faf.png +0 -0
  633. package/dist/assets/static/media/in.2df03847.png +0 -0
  634. package/dist/assets/static/media/iq.a9b670ab.png +0 -0
  635. package/dist/assets/static/media/ir.9a3de085.png +0 -0
  636. package/dist/assets/static/media/is.d88f4fc9.png +0 -0
  637. package/dist/assets/static/media/it.b73713e3.png +0 -0
  638. package/dist/assets/static/media/je.0353f56a.png +0 -0
  639. package/dist/assets/static/media/jm.20330ef4.png +0 -0
  640. package/dist/assets/static/media/jo.eb66f1d1.png +0 -0
  641. package/dist/assets/static/media/jp.63e382ae.png +0 -0
  642. package/dist/assets/static/media/ke.ab2e43b8.png +0 -0
  643. package/dist/assets/static/media/kg.2c47c2af.png +0 -0
  644. package/dist/assets/static/media/kh.4732c810.png +0 -0
  645. package/dist/assets/static/media/ki.5fba09fd.png +0 -0
  646. package/dist/assets/static/media/km.7bbed3e9.png +0 -0
  647. package/dist/assets/static/media/kn.a9595a16.png +0 -0
  648. package/dist/assets/static/media/kp.8a4dc30a.png +0 -0
  649. package/dist/assets/static/media/kr.5273be1d.png +0 -0
  650. package/dist/assets/static/media/ks.99f78645.png +0 -0
  651. package/dist/assets/static/media/kw.af3521bc.png +0 -0
  652. package/dist/assets/static/media/kz.ea47ef79.png +0 -0
  653. package/dist/assets/static/media/la.78a598d7.png +0 -0
  654. package/dist/assets/static/media/lb.7a7c15a9.png +0 -0
  655. package/dist/assets/static/media/lc.6083a4ff.png +0 -0
  656. package/dist/assets/static/media/li.61c564a4.png +0 -0
  657. package/dist/assets/static/media/lk.6fa85802.png +0 -0
  658. package/dist/assets/static/media/lr.8063f7db.png +0 -0
  659. package/dist/assets/static/media/ls.901ddb71.png +0 -0
  660. package/dist/assets/static/media/lt.9209ace3.png +0 -0
  661. package/dist/assets/static/media/lu.c9872bc1.png +0 -0
  662. package/dist/assets/static/media/lv.7bcacf0a.png +0 -0
  663. package/dist/assets/static/media/ly.2830aa63.png +0 -0
  664. package/dist/assets/static/media/ma.ce5f697b.png +0 -0
  665. package/dist/assets/static/media/mc.4bd5d57a.png +0 -0
  666. package/dist/assets/static/media/md.fb4b5bdf.png +0 -0
  667. package/dist/assets/static/media/me.1f1d1772.png +0 -0
  668. package/dist/assets/static/media/mg.89101bd2.png +0 -0
  669. package/dist/assets/static/media/mh.ff11dff7.png +0 -0
  670. package/dist/assets/static/media/mk.8420e604.png +0 -0
  671. package/dist/assets/static/media/ml.4db47c66.png +0 -0
  672. package/dist/assets/static/media/mm.8e4ac30a.png +0 -0
  673. package/dist/assets/static/media/mn.dc1daa04.png +0 -0
  674. package/dist/assets/static/media/mr.7cbca6d0.png +0 -0
  675. package/dist/assets/static/media/mt.28a4b863.png +0 -0
  676. package/dist/assets/static/media/mu.d93db6c7.png +0 -0
  677. package/dist/assets/static/media/mv.7d026bf1.png +0 -0
  678. package/dist/assets/static/media/mw.960cd4fb.png +0 -0
  679. package/dist/assets/static/media/mx.39b78eb2.png +0 -0
  680. package/dist/assets/static/media/my.916a8392.png +0 -0
  681. package/dist/assets/static/media/mz.facb4ea3.png +0 -0
  682. package/dist/assets/static/media/na.472666a9.png +0 -0
  683. package/dist/assets/static/media/ne.d774701f.png +0 -0
  684. package/dist/assets/static/media/ng.7b06a49f.png +0 -0
  685. package/dist/assets/static/media/ni.7140131c.png +0 -0
  686. package/dist/assets/static/media/nl.4c04aa96.png +0 -0
  687. package/dist/assets/static/media/no.c19eb00d.png +0 -0
  688. package/dist/assets/static/media/np.54fb4f2f.png +0 -0
  689. package/dist/assets/static/media/nr.7527cc38.png +0 -0
  690. package/dist/assets/static/media/nz.738be05b.png +0 -0
  691. package/dist/assets/static/media/om.b25e0a17.png +0 -0
  692. package/dist/assets/static/media/pa.b28a9059.png +0 -0
  693. package/dist/assets/static/media/pe.c1fc1d96.png +0 -0
  694. package/dist/assets/static/media/pg.380115db.png +0 -0
  695. package/dist/assets/static/media/ph.02199ddc.png +0 -0
  696. package/dist/assets/static/media/pk.094f9517.png +0 -0
  697. package/dist/assets/static/media/pl.41521283.png +0 -0
  698. package/dist/assets/static/media/pt.1f82dc04.png +0 -0
  699. package/dist/assets/static/media/pw.a26c2316.png +0 -0
  700. package/dist/assets/static/media/py.926c65ed.png +0 -0
  701. package/dist/assets/static/media/qa.c6a3c20e.png +0 -0
  702. package/dist/assets/static/media/ro.a36876c9.png +0 -0
  703. package/dist/assets/static/media/rs.c6629de8.png +0 -0
  704. package/dist/assets/static/media/ru.a9b948c1.png +0 -0
  705. package/dist/assets/static/media/rw.e8aecba0.png +0 -0
  706. package/dist/assets/static/media/sa.859049c8.png +0 -0
  707. package/dist/assets/static/media/sb.4ad27b27.png +0 -0
  708. package/dist/assets/static/media/sc.3293efde.png +0 -0
  709. package/dist/assets/static/media/sd.19c94faa.png +0 -0
  710. package/dist/assets/static/media/se.195b3f93.png +0 -0
  711. package/dist/assets/static/media/sg.19d81907.png +0 -0
  712. package/dist/assets/static/media/si.367c5443.png +0 -0
  713. package/dist/assets/static/media/sk.4e5b8a39.png +0 -0
  714. package/dist/assets/static/media/sl.4b174b1c.png +0 -0
  715. package/dist/assets/static/media/sm.2cba3dac.png +0 -0
  716. package/dist/assets/static/media/sn.a4c1041d.png +0 -0
  717. package/dist/assets/static/media/so.b455e3bf.png +0 -0
  718. package/dist/assets/static/media/sr.5adc1c00.png +0 -0
  719. package/dist/assets/static/media/st.5ae44155.png +0 -0
  720. package/dist/assets/static/media/sv.43aa6cdf.png +0 -0
  721. package/dist/assets/static/media/sy.0fbd24f7.png +0 -0
  722. package/dist/assets/static/media/sz.ff204912.png +0 -0
  723. package/dist/assets/static/media/td.c7aa2a4e.png +0 -0
  724. package/dist/assets/static/media/tg.857c3bec.png +0 -0
  725. package/dist/assets/static/media/th.683600c7.png +0 -0
  726. package/dist/assets/static/media/tj.d20c5570.png +0 -0
  727. package/dist/assets/static/media/tl.5edd8ea7.png +0 -0
  728. package/dist/assets/static/media/tm.15960215.png +0 -0
  729. package/dist/assets/static/media/tn.40df718e.png +0 -0
  730. package/dist/assets/static/media/to.c3b054df.png +0 -0
  731. package/dist/assets/static/media/tr.adeace6d.png +0 -0
  732. package/dist/assets/static/media/tt.839bd7f1.png +0 -0
  733. package/dist/assets/static/media/tv.628cae3e.png +0 -0
  734. package/dist/assets/static/media/tw.4e885914.png +0 -0
  735. package/dist/assets/static/media/tz.b2f0dc37.png +0 -0
  736. package/dist/assets/static/media/ua.6b103313.png +0 -0
  737. package/dist/assets/static/media/ug.c84042fc.png +0 -0
  738. package/dist/assets/static/media/us.8523c31d.png +0 -0
  739. package/dist/assets/static/media/uy.a943f85e.png +0 -0
  740. package/dist/assets/static/media/uz.25552673.png +0 -0
  741. package/dist/assets/static/media/va.a29e1b53.png +0 -0
  742. package/dist/assets/static/media/vc.7480bd37.png +0 -0
  743. package/dist/assets/static/media/ve.fd4273c2.png +0 -0
  744. package/dist/assets/static/media/vn.7d2eff1b.png +0 -0
  745. package/dist/assets/static/media/vu.48b64cf3.png +0 -0
  746. package/dist/assets/static/media/ws.f3d9202f.png +0 -0
  747. package/dist/assets/static/media/ye.311a0e50.png +0 -0
  748. package/dist/assets/static/media/za.090a856f.png +0 -0
  749. package/dist/assets/static/media/zm.8371e197.png +0 -0
  750. package/dist/assets/static/media/zw.a6809447.png +0 -0
  751. /package/dist/assets/{static/media/Roboto-500.c7e17507.woff2 → assets/Roboto-500-CsZWW7Bu.woff2} +0 -0
  752. /package/dist/assets/{static/media/Roboto-700.2b8c7cb1.woff2 → assets/Roboto-700-D1ZLqfE0.woff2} +0 -0
  753. /package/dist/assets/{static/media/Roboto-700italic.05e025ae.woff2 → assets/Roboto-700italic-CfNT1HYS.woff2} +0 -0
  754. /package/dist/assets/{static/media/Roboto-italic.766b7c5c.woff2 → assets/Roboto-italic-BTa0Y66b.woff2} +0 -0
  755. /package/dist/assets/{static/media/Roboto-regular.11bce66a.woff2 → assets/Roboto-regular-CJgdpARq.woff2} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/704.09c4831d.chunk.js","mappings":"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","sources":["client/src/javascript/components/general/TorrentStatusIcon.tsx","client/src/javascript/components/general/ProgressBar.tsx","client/src/javascript/components/torrent-list/Action.tsx","client/src/javascript/constants/SortDirections.ts","client/src/javascript/components/general/form-elements/Dropdown.tsx","client/src/javascript/components/torrent-list/SortDropdown.tsx","client/src/javascript/components/torrent-list/ActionBar.tsx","client/src/javascript/components/layout/ApplicationContent.tsx","client/src/javascript/components/layout/ApplicationPanel.tsx","client/src/javascript/components/sidebar/DiskUsage.tsx","client/src/javascript/components/sidebar/FeedsButton.tsx","client/src/javascript/components/sidebar/SidebarFilter.tsx","client/src/javascript/components/sidebar/LocationFilters.tsx","client/src/javascript/components/sidebar/NotificationsButton.tsx","client/src/javascript/components/sidebar/SearchBox.tsx","client/src/javascript/components/sidebar/SettingsButton.tsx","client/src/javascript/components/sidebar/SidebarActions.tsx","client/src/javascript/components/sidebar/SpeedLimitDropdown.tsx","client/src/javascript/components/sidebar/Expando.tsx","client/src/javascript/components/sidebar/StatusFilters.tsx","client/src/javascript/components/sidebar/TagFilters.tsx","client/src/javascript/components/sidebar/ThemeSwitchButton.tsx","client/src/javascript/components/sidebar/TrackerFilters.tsx","client/src/javascript/components/sidebar/TransferRateDetails.tsx","client/src/javascript/components/sidebar/TransferRateGraph.tsx","client/src/javascript/components/sidebar/TransferData.tsx","client/src/javascript/components/sidebar/Sidebar.tsx","client/src/javascript/components/general/ContextMenuMountPoint.tsx","client/src/javascript/components/general/ListViewport.tsx","client/src/javascript/components/torrent-list/TableHeading.tsx","client/src/javascript/components/torrent-list/TorrentListDropzone.tsx","client/src/javascript/components/torrent-list/TorrentListContextMenu.tsx","client/src/javascript/components/torrent-list/TorrentListCell.tsx","client/src/javascript/components/torrent-list/TorrentListRowCondensed.tsx","client/src/javascript/components/torrent-list/TorrentListRowExpanded.tsx","client/src/javascript/components/torrent-list/TorrentListRow.tsx","client/src/javascript/components/torrent-list/TorrentList.tsx","client/src/javascript/util/loadOverlayScrollbars.ts","client/src/javascript/routes/Overview.tsx","client/src/javascript/routes/Login.tsx","client/src/javascript/util/torrentStatus.ts","client/src/javascript/components/general/Duration.tsx","client/src/javascript/actions/TorrentActions.ts","client/src/javascript/routes/Register.tsx","client/src/javascript/components/general/Badge.tsx","client/src/javascript/components/layout/ApplicationView.tsx","client/src/javascript/components/general/Size.tsx","client/src/javascript/components/auth/AuthForm.tsx","client/src/javascript/constants/PriorityLevels.ts","client/src/javascript/components/general/PriorityMeter.tsx"],"sourcesContent":["import {FC, memo} from 'react';\n\nimport {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 'error':\n return <Error />;\n case 'checking':\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';\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 ? i18n.number(clampedPercent, {maximumFractionDigits: 0})\n : i18n.number(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 classnames from 'classnames';\nimport {FC, ReactNode} from 'react';\n\nimport Tooltip from '../general/Tooltip';\n\ninterface ActionProps {\n clickHandler: () => void;\n icon: ReactNode;\n label: ReactNode;\n slug: string;\n noTip?: boolean;\n}\n\nconst Action: FC<ActionProps> = ({clickHandler, icon, label, slug, noTip = false}: ActionProps) => {\n const classes = classnames('action tooltip__wrapper', {\n [`action--${slug}`]: slug != null,\n });\n\n return (\n <Tooltip content={label} onClick={clickHandler} position=\"bottom\" wrapperClassName={classes} suppress={noTip}>\n {icon}\n <span className=\"action__label\">{label}</span>\n </Tooltip>\n );\n};\n\nexport default Action;\n","// Overwrite initial sort direction (ascending)\n\nconst SortDirections: Record<string, 'asc' | 'desc'> = {\n dateAdded: 'desc',\n dateFinished: 'desc',\n dateActive: 'desc',\n downRate: 'desc',\n downTotal: 'desc',\n upRate: 'desc',\n upTotal: 'desc',\n};\n\nexport default SortDirections;\n","import classnames from 'classnames';\nimport {CSSTransition, TransitionGroup} from 'react-transition-group';\nimport {EventHandler, FC, MutableRefObject, ReactNode, SyntheticEvent, useCallback, useRef} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport uniqueId from 'lodash/uniqueId';\nimport {useKeyPressEvent} from 'react-use';\n\nimport {css} from '@client/styled-system/css';\nimport UIStore from '@client/stores/UIStore';\n\ninterface DropdownButtonProps {\n className?: string;\n label: ReactNode;\n isFocusHandled: boolean;\n onClick: EventHandler<SyntheticEvent>;\n}\n\nconst DropdownButton: FC<DropdownButtonProps> = ({className, label, isFocusHandled, onClick}: DropdownButtonProps) =>\n isFocusHandled ? (\n <div role=\"none\" className={className} onClick={onClick}>\n {label}\n </div>\n ) : (\n <button\n type=\"button\"\n className={classnames(\n className,\n css({\n width: '100%',\n height: '100%',\n textAlign: 'left',\n _focusVisible: {\n outline: 'dashed',\n },\n }),\n )}\n onClick={onClick}\n >\n {label}\n </button>\n );\n\nexport interface DropdownItem<T extends string = string> {\n className?: string;\n displayName: ReactNode;\n selectable?: boolean;\n selected?: boolean;\n property?: T;\n value?: number | null;\n}\n\ntype DropdownItems<T extends string = string> = Array<DropdownItem<T>>;\n\ninterface DropdownProps<T extends string = string> {\n header: ReactNode;\n trigger?: ReactNode;\n dropdownButtonClass?: string;\n dropdownClickRef?: MutableRefObject<() => void>;\n menuItems: Array<DropdownItems<T>>;\n handleItemSelect: (item: DropdownItem<T>) => void;\n onOpen?: () => void;\n\n dropdownWrapperClass?: string;\n baseClassName?: string;\n direction?: 'down' | 'up';\n width?: 'small' | 'medium' | 'large';\n matchButtonWidth?: boolean;\n noWrap?: boolean;\n\n isFocusHandled?: boolean;\n}\n\nconst Dropdown = observer(\n <T extends string = string>({\n baseClassName = 'dropdown',\n dropdownWrapperClass = 'dropdown',\n dropdownButtonClass = 'dropdown__trigger',\n dropdownClickRef,\n direction = 'down',\n header,\n matchButtonWidth = false,\n menuItems,\n noWrap = false,\n trigger,\n width,\n isFocusHandled = false,\n handleItemSelect,\n onOpen,\n }: DropdownProps<T>) => {\n const id = useRef<string>(uniqueId('dropdown_'));\n const isOpen = UIStore.activeDropdownMenu === id.current;\n const dropdownWrapperClassName = classnames(dropdownWrapperClass, `${baseClassName}--direction-${direction}`, {\n [`${baseClassName}--match-button-width`]: matchButtonWidth,\n [`${baseClassName}--width-${width}`]: width != null,\n [`${baseClassName}--no-wrap`]: noWrap,\n 'is-expanded': isOpen,\n });\n\n const closeDropdown = useCallback(() => {\n window.removeEventListener('click', closeDropdown);\n\n UIStore.setActiveDropdownMenu(null);\n }, []);\n\n useKeyPressEvent('Escape', () => closeDropdown());\n\n const openDropdown = useCallback(() => {\n window.addEventListener('click', closeDropdown);\n\n if (onOpen) {\n onOpen();\n }\n\n UIStore.setActiveDropdownMenu(id.current);\n }, [closeDropdown, onOpen]);\n\n const handleDropdownClick = (event?: SyntheticEvent): void => {\n event?.stopPropagation();\n\n if (isOpen) {\n closeDropdown();\n } else {\n openDropdown();\n }\n };\n\n if (dropdownClickRef) {\n dropdownClickRef.current = handleDropdownClick;\n }\n\n let contentElement: ReactNode;\n if (isOpen) {\n const headerElement = (\n <div className=\"dropdown__header\" key=\"dropdown-header\">\n <DropdownButton\n className={dropdownButtonClass}\n label={header}\n isFocusHandled={isFocusHandled ?? false}\n onClick={handleDropdownClick}\n />\n </div>\n );\n\n const listElement = (\n <ul className=\"dropdown__items\" key=\"dropdown-items\">\n {menuItems.map((items, index) => (\n <div className=\"dropdown__list\" key={index}>\n {items.map((item, itemIndex) => {\n const classes = classnames('dropdown__item menu__item', item.className, {\n 'is-selectable': item.selectable !== false,\n 'is-selected': item.selected,\n });\n\n return (\n <li className={classes} key={itemIndex}>\n <button\n type=\"button\"\n disabled={item.selectable === false}\n onClick={\n item.selectable === false\n ? undefined\n : () => {\n closeDropdown();\n handleItemSelect(item);\n }\n }\n >\n {item.displayName}\n </button>\n </li>\n );\n })}\n </div>\n ))}\n </ul>\n );\n\n contentElement = (\n <CSSTransition classNames=\"menu\" timeout={{enter: 250, exit: 250}}>\n <div className=\"dropdown__content menu\">\n {direction === 'up' ? [listElement, headerElement] : [headerElement, listElement]}\n </div>\n </CSSTransition>\n );\n }\n\n return (\n <div className={dropdownWrapperClassName}>\n <DropdownButton\n className={dropdownButtonClass}\n label={trigger ?? header}\n isFocusHandled={isFocusHandled ?? false}\n onClick={handleDropdownClick}\n />\n <TransitionGroup>{contentElement}</TransitionGroup>\n </div>\n );\n },\n);\n\nexport default Dropdown;\n","import {FC} from 'react';\nimport {Trans, useLingui} from '@lingui/react';\n\nimport SortDirections from '@client/constants/SortDirections';\n\nimport type {FloodSettings} from '@shared/types/FloodSettings';\n\nimport Dropdown from '../general/form-elements/Dropdown';\nimport TorrentListColumns from '../../constants/TorrentListColumns';\n\nimport type {TorrentListColumn} from '../../constants/TorrentListColumns';\n\nconst SORT_PROPERTIES = [\n 'name',\n 'eta',\n 'downRate',\n 'upRate',\n 'ratio',\n 'percentComplete',\n 'downTotal',\n 'upTotal',\n 'sizeBytes',\n 'dateAdded',\n 'dateFinished',\n 'dateActive',\n] as const;\n\ninterface SortDropdownProps {\n selectedProperty: TorrentListColumn;\n direction: 'asc' | 'desc';\n onSortChange: (sortBy: FloodSettings['sortTorrents']) => void;\n}\n\nconst SortDropdown: FC<SortDropdownProps> = (props: SortDropdownProps) => {\n const {direction, selectedProperty, onSortChange} = props;\n const {i18n} = useLingui();\n\n if (selectedProperty == null) {\n return null;\n }\n\n const header = (\n <div className=\"dropdown__button\">\n <span className=\"dropdown__label\">\n <Trans id=\"torrents.sort.title\" />\n </span>\n <span className=\"dropdown__value\">\n <Trans id={TorrentListColumns[selectedProperty]} />\n </span>\n </div>\n );\n\n const menuItems = [\n SORT_PROPERTIES.map((sortProp) => {\n const isSelected = sortProp === selectedProperty;\n const directionIndicator = isSelected ? (\n <span className={`sort-dropdown__indicator sort-dropdown__indicator--${direction}`} />\n ) : null;\n\n return {\n displayName: (\n <div className=\"sort-dropdown__item\">\n {i18n._(TorrentListColumns[sortProp])}\n {directionIndicator}\n </div>\n ),\n selected: isSelected,\n property: sortProp,\n };\n }),\n ];\n\n return (\n <Dropdown\n handleItemSelect={(selection) => {\n const {property} = selection;\n\n if (property == null) {\n return;\n }\n\n let nextDirection: 'asc' | 'desc' = SortDirections[property] ?? 'asc';\n if (selectedProperty === property) {\n nextDirection = direction === 'asc' ? 'desc' : 'asc';\n }\n\n onSortChange({direction: nextDirection, property});\n }}\n header={header}\n menuItems={menuItems}\n />\n );\n};\n\nexport default SortDropdown;\n","import classnames from 'classnames';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport {Add, Menu, Remove, Start, Stop} from '@client/ui/icons';\nimport SettingActions from '@client/actions/SettingActions';\nimport SettingStore from '@client/stores/SettingStore';\nimport TorrentActions from '@client/actions/TorrentActions';\nimport TorrentStore from '@client/stores/TorrentStore';\nimport UIStore from '@client/stores/UIStore';\n\nimport Action from './Action';\nimport SortDropdown from './SortDropdown';\n\nconst ActionBar: FC = observer(() => {\n const {i18n} = useLingui();\n const {sortTorrents: sortBy, torrentListViewSize} = SettingStore.floodSettings;\n\n const classes = classnames('action-bar', {\n 'action-bar--is-condensed': torrentListViewSize === 'condensed',\n });\n\n return (\n <nav className={classes}>\n <div className=\"actions action-bar__item action-bar__item--sidebar-expand-collapse\">\n <Action\n label=\"actionbar.button.sidebar.expand.collapse\"\n slug=\"sidebar-expand-collapse\"\n icon={<Menu />}\n clickHandler={() => {\n const view = document.getElementsByClassName('application__view')[0];\n if (view != null) {\n view.classList.toggle('application__view--sidebar-alternative-state');\n }\n }}\n noTip\n />\n </div>\n <div className=\"actions action-bar__item action-bar__item--sort-torrents\">\n <SortDropdown\n direction={sortBy != null ? sortBy.direction : 'desc'}\n onSortChange={(newSortBy) => {\n SettingActions.saveSetting('sortTorrents', newSortBy);\n }}\n selectedProperty={sortBy != null ? sortBy.property : 'dateAdded'}\n />\n </div>\n <div className=\"actions action-bar__item action-bar__item--torrent-operations\">\n <div className=\"action-bar__group\">\n <Action\n label={i18n._('actionbar.button.start.torrent')}\n slug=\"start-torrent\"\n icon={<Start />}\n clickHandler={() =>\n TorrentActions.startTorrents({\n hashes: TorrentStore.selectedTorrents,\n })\n }\n />\n <Action\n label={i18n._('actionbar.button.stop.torrent')}\n slug=\"stop-torrent\"\n icon={<Stop />}\n clickHandler={() =>\n TorrentActions.stopTorrents({\n hashes: TorrentStore.selectedTorrents,\n })\n }\n />\n </div>\n <div className=\"action-bar__group action-bar__group--has-divider\">\n <Action\n label={i18n._('actionbar.button.add.torrent')}\n slug=\"add-torrent\"\n icon={<Add />}\n clickHandler={() => UIStore.setActiveModal({id: 'add-torrents'})}\n />\n <Action\n label={i18n._('actionbar.button.remove.torrent')}\n slug=\"remove-torrent\"\n icon={<Remove />}\n clickHandler={() =>\n UIStore.setActiveModal({\n id: 'remove-torrents',\n })\n }\n />\n </div>\n </div>\n </nav>\n );\n});\n\nexport default ActionBar;\n","import {FC, ReactNode} from 'react';\n\ninterface ApplicationContentProps {\n children: ReactNode;\n}\n\nconst ApplicationContent: FC<ApplicationContentProps> = ({children}: ApplicationContentProps) => (\n <div className=\"application__content\">{children}</div>\n);\n\nexport default ApplicationContent;\n","import classnames from 'classnames';\nimport {FC, ReactNode} from 'react';\n\ninterface ApplicationContentProps {\n children: ReactNode;\n baseClassName?: string;\n className: string;\n modifier: string;\n}\n\nconst ApplicationContent: FC<ApplicationContentProps> = ({\n children,\n baseClassName = 'application__panel',\n className,\n modifier,\n}: ApplicationContentProps) => {\n const classes = classnames(baseClassName, {\n [`${baseClassName}--${modifier}`]: baseClassName,\n [className]: className,\n });\n\n return <div className={classes}>{children}</div>;\n};\n\nexport default ApplicationContent;\n","import {FC, ReactNode, ReactNodeArray} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\nimport {css} from '@client/styled-system/css';\n\nimport * as lodash from 'lodash';\n\nimport type {Disk} from '@shared/types/DiskUsage';\n\nimport DiskUsageStore from '../../stores/DiskUsageStore';\nimport Size from '../general/Size';\nimport Tooltip from '../general/Tooltip';\nimport ProgressBar from '../general/ProgressBar';\nimport SettingStore from '../../stores/SettingStore';\n\ninterface DiskUsageTooltipItemProps {\n label: ReactNode;\n value: number;\n}\n\nconst DiskUsageTooltipItem: FC<DiskUsageTooltipItemProps> = ({label, value}: DiskUsageTooltipItemProps) => (\n <li aria-label=\"label\" className=\"diskusage__details-list__item\" role=\"cell\">\n <span className=\"diskusage__details-list__label\">{label}</span>\n <Size className=\"diskuage__size-used\" value={value} />\n </li>\n);\n\nconst DiskUsage: FC = observer(() => {\n const {i18n} = useLingui();\n\n const {disks} = DiskUsageStore;\n const {mountPoints} = SettingStore.floodSettings;\n\n if (disks == null || mountPoints == null) {\n return null;\n }\n\n const diskMap = disks.reduce(\n (disksByTarget: Record<string, Disk>, disk: Disk) => ({\n ...disksByTarget,\n [disk.target]: disk,\n }),\n {},\n );\n\n const diskNodes: ReactNodeArray = mountPoints\n .filter((target) => target in diskMap)\n .map((target) => diskMap[target])\n .map((d) => (\n <li key={d.target} className=\"sidebar-filter__item sidebar__diskusage\" role=\"row\">\n <Tooltip\n content={\n <ul className=\"diskusage__details-list\" role=\"tooltip\">\n <DiskUsageTooltipItem value={d.used} label={i18n._('status.diskusage.used')} />\n <DiskUsageTooltipItem value={d.avail} label={i18n._('status.diskusage.free')} />\n <DiskUsageTooltipItem value={d.size} label={i18n._('status.diskusage.total')} />\n </ul>\n }\n position=\"top\"\n styles={css({\n cursor: 'default',\n })}\n wrapperClassName=\"diskusage__item\"\n >\n <div className=\"diskusage__text-row\">\n {d.target}\n <span>{lodash.round((100 * d.used) / d.size, 2)}%</span>\n </div>\n <ProgressBar percent={lodash.round((100 * d.used) / d.size, 2)} />\n </Tooltip>\n </li>\n ));\n\n if (diskNodes == null || diskNodes.length === 0) {\n return null;\n }\n\n const title = i18n._('status.diskusage.title');\n\n return (\n <ul aria-label={title} className=\"sidebar-filter sidebar__item\" role=\"table\">\n <li className=\"sidebar-filter__item sidebar-filter__item--heading\">{title}</li>\n {diskNodes}\n </ul>\n );\n});\n\nexport default DiskUsage;\n","import {FC, useRef} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport {Feed} from '@client/ui/icons';\nimport UIStore from '@client/stores/UIStore';\n\nimport Tooltip, {TooltipHandle} from '../general/Tooltip';\n\nconst FeedsButton: FC = () => {\n const {i18n} = useLingui();\n const tooltipRef = useRef<TooltipHandle>(null);\n\n return (\n <Tooltip\n content={i18n._('sidebar.button.feeds')}\n onClick={() => {\n if (tooltipRef.current != null) {\n tooltipRef.current.dismissTooltip();\n }\n\n UIStore.setActiveModal({id: 'feeds'});\n }}\n ref={tooltipRef}\n position=\"bottom\"\n wrapperClassName=\"sidebar__action sidebar__icon-button\n sidebar__icon-button--interactive tooltip__wrapper\"\n >\n <Feed />\n </Tooltip>\n );\n};\n\nexport default FeedsButton;\n","import classnames from 'classnames';\nimport {createRef, FC, ReactNode, KeyboardEvent, MouseEvent, RefObject, TouchEvent, useEffect, useState} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport {css} from '@client/styled-system/css';\nimport {Start} from '@client/ui/icons';\n\nimport Badge from '../general/Badge';\nimport Size from '../general/Size';\n\nconst focusStyle = css({\n _focus: {\n outline: 'none',\n WebkitTapHighlightColor: 'transparent',\n },\n});\n\nconst useRefTextOverflowed = (ref: RefObject<HTMLElement>) => {\n const [overflowed, setOverflowed] = useState(false);\n\n useEffect(() => {\n if (ref.current) {\n const {current} = ref;\n setOverflowed(current.scrollWidth > current.clientWidth);\n }\n }, [ref, ref?.current?.scrollWidth, ref?.current?.clientWidth]);\n\n return overflowed;\n};\n\ninterface SidebarFilterProps {\n children?: ReactNode[];\n name: string;\n icon?: ReactNode;\n isActive: boolean;\n slug: string;\n count: number;\n size?: number;\n handleClick: (slug: string, event: KeyboardEvent | MouseEvent | TouchEvent) => void;\n}\n\nconst SidebarFilter: FC<SidebarFilterProps> = ({\n children,\n name: _name,\n icon,\n isActive,\n slug,\n count,\n size,\n handleClick,\n}: SidebarFilterProps) => {\n const nameSpanRef = createRef<HTMLSpanElement>();\n const overflowed = useRefTextOverflowed(nameSpanRef);\n\n const {i18n} = useLingui();\n\n const [expanded, setExpanded] = useState(false);\n\n const classNames = classnames('sidebar-filter__item', {\n 'is-active': isActive,\n });\n const expanderClassNames = classnames('sidebar-filter__expander', {\n 'is-active': isActive,\n expanded: expanded,\n });\n\n let name = _name;\n if (name === '') {\n name = i18n._('filter.all');\n } else if (name === 'untagged') {\n if (count === 0) {\n return null;\n }\n name = i18n._('filter.untagged');\n }\n\n if (slug === 'checking' || slug === 'error') {\n if (count === 0) {\n return null;\n }\n }\n\n return (\n <li>\n <div className={children ? css({display: 'flex'}) : undefined}>\n {children && (\n <button\n className={`${expanderClassNames} ${focusStyle}`}\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n role=\"switch\"\n aria-checked={expanded}\n >\n <Start />\n </button>\n )}\n <button\n className={`${classNames} ${focusStyle}`}\n type=\"button\"\n onClick={(event) => handleClick(slug, event)}\n role=\"menuitem\"\n >\n {icon}\n <span className=\"name\" ref={nameSpanRef} title={overflowed ? name || '' : undefined}>\n {name}\n </span>\n <Badge>{count}</Badge>\n {size != null && <Size value={size} className=\"size\" />}\n </button>\n </div>\n {children && expanded && <ul className=\"sidebar-filter__nested\">{children}</ul>}\n </li>\n );\n};\n\nexport default SidebarFilter;\n","import {FC, KeyboardEvent, MouseEvent, ReactNode, TouchEvent} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\nimport {LocationTreeNode} from '@shared/types/Taxonomy';\n\nimport SidebarFilter from './SidebarFilter';\nimport TorrentFilterStore from '../../stores/TorrentFilterStore';\n\nconst buildLocationFilterTree = (location: LocationTreeNode): ReactNode => {\n if (location.children.length === 1 && location.containedCount === location.children[0].containedCount) {\n const onlyChild = location.children[0];\n const separator = onlyChild.fullPath.includes('/') ? '/' : '\\\\';\n return buildLocationFilterTree({\n ...onlyChild,\n directoryName: location.directoryName + separator + onlyChild.directoryName,\n });\n }\n\n const children = location.children.map(buildLocationFilterTree);\n\n return (\n <SidebarFilter\n handleClick={(filter: string | '', event: KeyboardEvent | MouseEvent | TouchEvent) =>\n TorrentFilterStore.setLocationFilters(filter, event)\n }\n count={location.containedCount}\n key={location.fullPath}\n isActive={\n (location.fullPath === '' && !TorrentFilterStore.locationFilter.length) ||\n TorrentFilterStore.locationFilter.includes(location.fullPath)\n }\n name={location.directoryName}\n slug={location.fullPath}\n size={location.containedSize}\n >\n {(children.length && children) || undefined}\n </SidebarFilter>\n );\n};\n\nconst LocationFilters: FC = observer(() => {\n const {i18n} = useLingui();\n\n if (TorrentFilterStore.taxonomy.locationTree.containedCount === 0) {\n return null;\n }\n\n const filterElements = buildLocationFilterTree(TorrentFilterStore.taxonomy.locationTree);\n\n const title = i18n._('filter.location.title');\n\n return (\n <ul aria-label={title} className=\"sidebar-filter sidebar__item\" role=\"menu\">\n <li className=\"sidebar-filter__item sidebar-filter__item--heading\" role=\"none\">\n {title}\n </li>\n {filterElements}\n </ul>\n );\n});\n\nexport default LocationFilters;\n","import classnames from 'classnames';\nimport {FC, useEffect, useRef, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport FloodActions from '@client/actions/FloodActions';\nimport {ChevronLeft, ChevronRight, LoadingIndicatorDots, Notification as NotificationIcon} from '@client/ui/icons';\nimport NotificationStore from '@client/stores/NotificationStore';\n\nimport type {Notification} from '@shared/types/Notification';\n\nimport Tooltip, {TooltipHandle} from '../general/Tooltip';\n\nconst NOTIFICATIONS_PER_PAGE = 10;\n\nconst fetchNotifications = (paginationStart: number) =>\n FloodActions.fetchNotifications({\n id: 'notification-tooltip',\n limit: NOTIFICATIONS_PER_PAGE,\n start: paginationStart,\n });\n\ninterface NotificationTopToolbarProps {\n paginationStart: number;\n notificationTotal: number;\n}\n\nconst NotificationTopToolbar: FC<NotificationTopToolbarProps> = ({\n paginationStart,\n notificationTotal,\n}: NotificationTopToolbarProps) => {\n const {i18n} = useLingui();\n\n if (notificationTotal > NOTIFICATIONS_PER_PAGE) {\n let countStart = paginationStart + 1;\n let countEnd = paginationStart + NOTIFICATIONS_PER_PAGE;\n\n if (countStart > notificationTotal) {\n countStart = notificationTotal;\n }\n\n if (countEnd > notificationTotal) {\n countEnd = notificationTotal;\n }\n\n return (\n <div className=\"toolbar toolbar--dark toolbar--top tooltip__toolbar tooltip__content--padding-surrogate\">\n <span className=\"toolbar__item toolbar__item--label\">\n {`${i18n._('notification.showing')} `}\n <strong>\n {countStart}\n {` ${i18n._('general.to')} `}\n {countEnd}\n </strong>\n {` ${i18n._('general.of')} `}\n <strong>{notificationTotal}</strong>\n </span>\n </div>\n );\n }\n\n return null;\n};\n\ninterface NotificationItemProps {\n notification: Notification;\n}\n\nconst NotificationItem: FC<NotificationItemProps> = ({notification}: NotificationItemProps) => {\n const {i18n} = useLingui();\n\n return (\n <li className=\"notifications__list__item\">\n <div className=\"notification__heading\">\n <span className=\"notification__category\">{i18n._(`${notification.id}.heading`)}</span>\n {' — '}\n <span className=\"notification__timestamp\">\n {i18n.date(new Date(notification.ts), {\n year: 'numeric',\n month: 'long',\n day: '2-digit',\n hour: 'numeric',\n minute: 'numeric',\n })}\n </span>\n </div>\n <div className=\"notification__message\">{i18n._(`${notification.id}.body`, notification.data)}</div>\n </li>\n );\n};\n\ninterface NotificationBottomToolbarProps {\n paginationStart: number;\n notificationTotal: number;\n onPrevClick: () => void;\n onNextClick: () => void;\n onClearClick: () => void;\n}\n\nconst NotificationBottomToolbar: FC<NotificationBottomToolbarProps> = ({\n paginationStart,\n notificationTotal,\n onPrevClick,\n onClearClick,\n onNextClick,\n}: NotificationBottomToolbarProps) => {\n const {i18n} = useLingui();\n\n if (notificationTotal > 0) {\n let olderTo = paginationStart + NOTIFICATIONS_PER_PAGE * 2;\n let newerFrom = paginationStart - NOTIFICATIONS_PER_PAGE;\n\n if (olderTo > notificationTotal) {\n olderTo = notificationTotal;\n }\n\n if (newerFrom < 0) {\n newerFrom = 0;\n }\n\n return (\n <ul\n className=\"notifications__toolbar toolbar toolbar--dark\n toolbar--bottom\"\n >\n <li\n className={classnames('toolbar__item toolbar__item--button', {\n 'is-disabled': paginationStart === 0,\n })}\n >\n <button className=\"tooltip__content--padding-surrogate\" type=\"button\" onClick={onPrevClick}>\n <ChevronLeft />\n {`${newerFrom + 1} - ${paginationStart}`}\n </button>\n </li>\n <li className=\"toolbar__item toolbar__item--button\">\n <button className=\"tooltip__content--padding-surrogate\" type=\"button\" onClick={onClearClick}>\n {i18n._('notification.clear.all')}\n </button>\n </li>\n <li\n className={classnames('toolbar__item toolbar__item--button', {\n 'is-disabled': paginationStart + NOTIFICATIONS_PER_PAGE >= notificationTotal,\n })}\n >\n <button className=\"tooltip__content--padding-surrogate\" type=\"button\" onClick={onNextClick}>\n {`${paginationStart + NOTIFICATIONS_PER_PAGE + 1} - ${olderTo}`}\n <ChevronRight />\n </button>\n </li>\n </ul>\n );\n }\n\n return null;\n};\n\nconst NotificationsButton: FC = observer(() => {\n const {i18n} = useLingui();\n\n const tooltipRef = useRef<TooltipHandle>(null);\n const notificationsListRef = useRef<HTMLUListElement>(null);\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [paginationStart, setPaginationStart] = useState<number>(0);\n const [prevHeight, setPrevHeight] = useState<number>(0);\n\n const {hasNotification, notifications, notificationCount} = NotificationStore;\n\n useEffect(() => {\n if (notificationCount.total > 0 && tooltipRef.current?.isOpen()) {\n setIsLoading(true);\n fetchNotifications(paginationStart).finally(() => setIsLoading(false));\n }\n }, [notificationCount, paginationStart]);\n\n return (\n <Tooltip\n contentClassName=\"tooltip__content tooltip__content--no-padding\"\n content={\n hasNotification ? (\n <div\n className={classnames('notifications', {\n 'notifications--is-loading': isLoading,\n })}\n >\n <NotificationTopToolbar paginationStart={paginationStart} notificationTotal={notificationCount.total} />\n <div className=\"notifications__loading-indicator\">\n <LoadingIndicatorDots />\n </div>\n <ul\n className=\"notifications__list tooltip__content--padding-surrogate\"\n ref={notificationsListRef}\n style={{minHeight: prevHeight}}\n >\n {notifications.map((notification, index) => (\n <NotificationItem key={index} notification={notification} />\n ))}\n </ul>\n <NotificationBottomToolbar\n paginationStart={paginationStart}\n notificationTotal={notificationCount.total}\n onPrevClick={() => {\n const newPaginationStart = paginationStart - NOTIFICATIONS_PER_PAGE;\n if (newPaginationStart >= 0) {\n setPrevHeight(notificationsListRef.current?.clientHeight || 0);\n setPaginationStart(newPaginationStart);\n }\n }}\n onClearClick={() => {\n if (tooltipRef.current != null) {\n tooltipRef.current.dismissTooltip();\n }\n\n FloodActions.clearNotifications();\n\n setPrevHeight(0);\n setPaginationStart(0);\n }}\n onNextClick={() => {\n const newPaginationStart = paginationStart + NOTIFICATIONS_PER_PAGE;\n if (notificationCount.total > newPaginationStart) {\n setPrevHeight(notificationsListRef.current?.clientHeight || 0);\n setPaginationStart(newPaginationStart);\n }\n }}\n />\n </div>\n ) : (\n <div className=\"notifications tooltip__content--padding-surrogate\" style={{textAlign: 'center'}}>\n {i18n._('notification.no.notification')}\n </div>\n )\n }\n interactive\n onOpen={() => fetchNotifications(paginationStart)}\n ref={tooltipRef}\n width={340}\n position=\"bottom\"\n wrapperClassName=\"sidebar__action sidebar__icon-button\n tooltip__wrapper\"\n >\n <NotificationIcon />\n {hasNotification ? <span className=\"notifications__badge\">{notificationCount.total}</span> : null}\n </Tooltip>\n );\n});\n\nexport default NotificationsButton;\n","import classnames from 'classnames';\nimport {FC, useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport {Close, Search} from '@client/ui/icons';\nimport TorrentFilterStore from '@client/stores/TorrentFilterStore';\n\nconst SearchBox: FC = observer(() => {\n const {i18n} = useLingui();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const {searchFilter} = TorrentFilterStore;\n\n useEffect(() => {\n if (inputRef.current != null) {\n if (searchFilter !== inputRef.current.value) {\n inputRef.current.value = searchFilter;\n }\n }\n }, [inputRef, searchFilter]);\n\n const isSearchActive = searchFilter !== '';\n\n return (\n <div\n className={classnames({\n sidebar__item: true,\n search: true,\n 'is-in-use': isSearchActive,\n })}\n >\n {isSearchActive && (\n <button\n className=\"button search__reset-button\"\n onClick={() => {\n TorrentFilterStore.setSearchFilter('');\n if (inputRef.current != null) {\n inputRef.current.blur();\n }\n }}\n type=\"button\"\n >\n <Close />\n </button>\n )}\n <Search />\n <input\n className=\"textbox\"\n ref={inputRef}\n type=\"text\"\n placeholder={i18n._('sidebar.search.placeholder')}\n onChange={(event) => {\n TorrentFilterStore.setSearchFilter(event.target.value);\n }}\n />\n </div>\n );\n});\n\nexport default SearchBox;\n","import {FC, useRef} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport {Settings} from '@client/ui/icons';\nimport UIStore from '@client/stores/UIStore';\n\nimport Tooltip, {TooltipHandle} from '../general/Tooltip';\n\nconst SettingsButton: FC = () => {\n const {i18n} = useLingui();\n const tooltipRef = useRef<TooltipHandle>(null);\n\n return (\n <Tooltip\n content={i18n._('sidebar.button.settings')}\n onClick={() => {\n if (tooltipRef.current != null) {\n tooltipRef.current.dismissTooltip();\n }\n\n UIStore.setActiveModal({id: 'settings'});\n }}\n ref={tooltipRef}\n position=\"bottom\"\n wrapperClassName=\"sidebar__action sidebar__icon-button\n sidebar__icon-button--interactive tooltip__wrapper\"\n >\n <Settings />\n </Tooltip>\n );\n};\n\nexport default SettingsButton;\n","import {FC, ReactNode} from 'react';\n\ninterface SidebarActionsProps {\n children: ReactNode;\n}\n\nconst SidebarActions: FC<SidebarActionsProps> = ({children}: SidebarActionsProps) => (\n <div className=\"sidebar__actions\">{children}</div>\n);\n\nexport default SidebarActions;\n","import {FC, useRef} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport sortedIndex from 'lodash/sortedIndex';\nimport {Trans, useLingui} from '@lingui/react';\n\nimport type {I18n} from '@lingui/core';\n\nimport ClientActions from '@client/actions/ClientActions';\nimport {Limits} from '@client/ui/icons';\nimport SettingStore from '@client/stores/SettingStore';\n\nimport type {TransferDirection} from '@shared/types/TransferData';\n\nimport Dropdown from '../general/form-elements/Dropdown';\nimport Size from '../general/Size';\nimport Tooltip, {TooltipHandle} from '../general/Tooltip';\n\nimport type {DropdownItem} from '../general/form-elements/Dropdown';\n\nconst HumanReadableSpeed: FC<{bytes: number}> = ({bytes}: {bytes: number}) =>\n bytes === 0 ? <Trans id=\"speed.unlimited\" /> : <Size value={bytes} isSpeed precision={1} />;\n\nconst getSpeedList = ({\n i18n,\n direction,\n speedLimits,\n throttleGlobalDownSpeed,\n throttleGlobalUpSpeed,\n}: {\n i18n: I18n;\n direction: TransferDirection;\n speedLimits: {\n download: Array<number>;\n upload: Array<number>;\n };\n throttleGlobalDownSpeed: number;\n throttleGlobalUpSpeed: number;\n}): Array<DropdownItem<TransferDirection>> => {\n const heading = {\n className: `dropdown__label dropdown__label--${direction}`,\n ...(direction === 'download'\n ? {displayName: i18n._('sidebar.speedlimits.download')}\n : {displayName: i18n._('sidebar.speedlimits.upload')}),\n selectable: false,\n value: null,\n };\n\n const currentThrottle: Record<TransferDirection, number> = {\n download: throttleGlobalDownSpeed,\n upload: throttleGlobalUpSpeed,\n };\n\n const speeds: number[] = speedLimits[direction];\n\n let insertCurrentThrottle = true;\n const items: Array<DropdownItem<TransferDirection>> = speeds.map((bytes) => {\n let selected = false;\n\n // Check if the current throttle setting exists in the preset speeds list.\n // Determine if we need to add the current throttle setting to the menu.\n if (currentThrottle && currentThrottle[direction] === bytes) {\n selected = true;\n insertCurrentThrottle = false;\n }\n\n return {\n displayName: <HumanReadableSpeed bytes={bytes} />,\n property: direction,\n selected,\n selectable: true,\n value: bytes,\n };\n });\n\n // If the current throttle setting doesn't exist in the pre-set speeds list,\n // add it and show it as selected.\n if (insertCurrentThrottle && currentThrottle) {\n // Find the position to insert the current throttle setting so that it\n // remains sorted from lowest to highest.\n const insertionPoint = sortedIndex(speeds, currentThrottle[direction]);\n\n items.splice(insertionPoint, 0, {\n displayName: <HumanReadableSpeed bytes={currentThrottle[direction]} />,\n property: direction,\n selected: true,\n selectable: true,\n value: currentThrottle[direction],\n });\n }\n\n items.unshift(heading);\n\n return items;\n};\n\nconst SpeedLimitDropdown: FC = observer(() => {\n const {i18n} = useLingui();\n const tooltipRef = useRef<TooltipHandle>(null);\n const dropdownClickRef = useRef<() => void>(() => {\n // do nothing.\n });\n\n const label = i18n._('sidebar.button.speedlimits');\n const speedListOptions = {\n i18n,\n speedLimits: SettingStore.floodSettings.speedLimits,\n throttleGlobalDownSpeed: SettingStore.clientSettings?.throttleGlobalDownSpeed ?? 0,\n throttleGlobalUpSpeed: SettingStore.clientSettings?.throttleGlobalUpSpeed ?? 0,\n };\n\n return (\n <Dropdown\n dropdownClickRef={dropdownClickRef}\n dropdownWrapperClass=\"dropdown dropdown--speed-limits sidebar__action\"\n handleItemSelect={(item) => {\n if (item.value != null) {\n if (item.property === 'download') {\n ClientActions.saveSetting('throttleGlobalDownSpeed', item.value);\n } else if (item.property === 'upload') {\n ClientActions.saveSetting('throttleGlobalUpSpeed', item.value);\n }\n }\n }}\n header={\n <div\n className=\"sidebar__icon-button sidebar__icon-button--interactive\n sidebar__icon-button--limits\"\n title={label}\n >\n <Limits />\n {label}\n </div>\n }\n menuItems={[\n getSpeedList({direction: 'download', ...speedListOptions}),\n getSpeedList({direction: 'upload', ...speedListOptions}),\n ]}\n onOpen={() => {\n if (tooltipRef.current != null) {\n tooltipRef.current.dismissTooltip();\n }\n }}\n trigger={\n <Tooltip\n content={label}\n position=\"bottom\"\n ref={tooltipRef}\n wrapperClassName=\"sidebar__icon-button tooltip__wrapper\"\n onClick={() => dropdownClickRef.current?.()}\n >\n <Limits />\n </Tooltip>\n }\n isFocusHandled\n />\n );\n});\n\nexport default SpeedLimitDropdown;\n","import {FC, KeyboardEvent, MouseEvent, ReactNode, TouchEvent} from 'react';\n\nimport {css} from '@client/styled-system/css';\nimport {Chevron} from '@client/ui/icons';\n\ninterface ExpandoProps {\n children: ReactNode;\n className?: string;\n expanded: boolean;\n handleClick: (event: KeyboardEvent | MouseEvent | TouchEvent) => void;\n}\n\nconst Expando: FC<ExpandoProps> = ({children, className, expanded, handleClick}: ExpandoProps) => (\n <button className={className} onClick={(event) => handleClick(event)}>\n {children}\n {expanded ? <Chevron className={css({transform: 'scaleY(-1)'})} /> : <Chevron />}\n </button>\n);\n\nexport default Expando;\n","import {FC, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport {Active, All, Completed, DownloadSmall, Error, Inactive, Stop, Spinner, UploadSmall} from '@client/ui/icons';\nimport TorrentFilterStore from '@client/stores/TorrentFilterStore';\n\nimport type {TorrentStatus} from '@shared/constants/torrentStatusMap';\n\nimport SidebarFilter from './SidebarFilter';\nimport Expando from './Expando';\n\nconst StatusFilters: FC = observer(() => {\n const {i18n} = useLingui();\n\n const filters: Array<{\n label: string;\n slug: TorrentStatus | '';\n icon: JSX.Element;\n }> = [\n {\n label: i18n._('filter.all'),\n slug: '',\n icon: <All />,\n },\n {\n label: i18n._('filter.status.downloading'),\n slug: 'downloading',\n icon: <DownloadSmall />,\n },\n {\n label: i18n._('filter.status.seeding'),\n slug: 'seeding',\n icon: <UploadSmall />,\n },\n {\n label: i18n._('filter.status.checking'),\n slug: 'checking',\n icon: <Spinner />,\n },\n {\n label: i18n._('filter.status.completed'),\n slug: 'complete',\n icon: <Completed />,\n },\n {\n label: i18n._('filter.status.stopped'),\n slug: 'stopped',\n icon: <Stop />,\n },\n {\n label: i18n._('filter.status.active'),\n slug: 'active',\n icon: <Active />,\n },\n {\n label: i18n._('filter.status.inactive'),\n slug: 'inactive',\n icon: <Inactive />,\n },\n {\n label: i18n._('filter.status.error'),\n slug: 'error',\n icon: <Error />,\n },\n ];\n\n const filterElements = filters.map((filter) => (\n <SidebarFilter\n handleClick={(selection, event) => TorrentFilterStore.setStatusFilters(selection as TorrentStatus, event)}\n count={TorrentFilterStore.taxonomy.statusCounts[filter.slug] || 0}\n key={filter.slug}\n icon={filter.icon}\n isActive={\n (filter.slug === '' && !TorrentFilterStore.statusFilter.length) ||\n TorrentFilterStore.statusFilter.includes(filter.slug as TorrentStatus)\n }\n name={filter.label}\n slug={filter.slug}\n size={TorrentFilterStore.taxonomy.statusSizes[filter.slug] ?? 0}\n />\n ));\n\n const title = i18n._('filter.status.title');\n\n const [expanded, setExpanded] = useState<boolean>(true);\n const expandoClick = () => {\n setExpanded(!expanded);\n };\n\n return (\n <ul aria-label={title} className=\"sidebar-filter sidebar__item\" role=\"menu\">\n <li className=\"sidebar-filter__item\" role=\"none\">\n <Expando className=\"sidebar-filter__item--heading\" expanded={expanded} handleClick={expandoClick}>\n {title}\n </Expando>\n </li>\n {expanded && filterElements}\n </ul>\n );\n});\n\nexport default StatusFilters;\n","import {FC, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport SidebarFilter from './SidebarFilter';\nimport Expando from './Expando';\nimport TorrentFilterStore from '../../stores/TorrentFilterStore';\n\nconst TagFilters: FC = observer(() => {\n const {i18n} = useLingui();\n const [expanded, setExpanded] = useState<boolean>(true);\n\n const tags = Object.keys(TorrentFilterStore.taxonomy.tagCounts);\n\n if ((tags.length === 1 && tags[0] === '') || (tags.length === 2 && tags[1] === 'untagged')) {\n return null;\n }\n\n const filterItems = tags.slice().sort((a, b) => {\n if (a === '' || a === 'untagged') {\n return -1;\n }\n\n if (b === '' || b === 'untagged') {\n return 1;\n }\n\n return a.localeCompare(b);\n });\n\n const filterElements = filterItems.map((filter) => (\n <SidebarFilter\n handleClick={(tag, event) => TorrentFilterStore.setTagFilters(tag, event)}\n count={TorrentFilterStore.taxonomy.tagCounts[filter] || 0}\n key={filter}\n isActive={\n (filter === '' && !TorrentFilterStore.tagFilter.length) || TorrentFilterStore.tagFilter.includes(filter)\n }\n name={filter}\n slug={filter}\n size={TorrentFilterStore.taxonomy.tagSizes[filter]}\n />\n ));\n\n const title = i18n._('filter.tag.title');\n\n const expandoClick = () => {\n setExpanded(!expanded);\n };\n\n return (\n <ul aria-label={title} className=\"sidebar-filter sidebar__item\" role=\"menu\">\n <li className=\"sidebar-filter__item\" role=\"none\">\n <Expando className=\"sidebar-filter__item--heading\" expanded={expanded} handleClick={expandoClick}>\n {title}\n </Expando>\n </li>\n {expanded && filterElements}\n </ul>\n );\n});\n\nexport default TagFilters;\n","import {FC} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport ConfigStore from '@client/stores/ConfigStore';\nimport {ThemeSwitch} from '@client/ui/icons';\n\nimport Tooltip from '../general/Tooltip';\n\nconst ThemeSwitchButton: FC = () => {\n const {i18n} = useLingui();\n\n return (\n <Tooltip\n content={i18n._(ConfigStore.isPreferDark ? 'sidebar.button.theme.light' : 'sidebar.button.theme.dark')}\n onClick={() => ConfigStore.setUserPreferDark(!ConfigStore.isPreferDark)}\n position=\"bottom\"\n wrapperClassName=\"sidebar__action sidebar__icon-button\n sidebar__icon-button--interactive tooltip__wrapper\"\n >\n <ThemeSwitch />\n </Tooltip>\n );\n};\n\nexport default ThemeSwitchButton;\n","import {FC, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport SidebarFilter from './SidebarFilter';\nimport Expando from './Expando';\nimport TorrentFilterStore from '../../stores/TorrentFilterStore';\n\nconst TrackerFilters: FC = observer(() => {\n const {i18n} = useLingui();\n const [expanded, setExpanded] = useState<boolean>(true);\n\n const trackers = Object.keys(TorrentFilterStore.taxonomy.trackerCounts);\n\n if (trackers.length === 1 && trackers[0] === '') {\n return null;\n }\n\n const filterItems = trackers.slice().sort((a, b) => {\n if (a === '') {\n return -1;\n }\n if (b === '') {\n return 1;\n }\n\n return a.localeCompare(b);\n });\n\n const filterElements = filterItems.map((filter) => (\n <SidebarFilter\n handleClick={(tracker, event) => TorrentFilterStore.setTrackerFilters(tracker, event)}\n count={TorrentFilterStore.taxonomy.trackerCounts[filter] || 0}\n key={filter}\n isActive={\n (filter === '' && !TorrentFilterStore.trackerFilter.length) || TorrentFilterStore.trackerFilter.includes(filter)\n }\n name={filter}\n slug={filter}\n size={TorrentFilterStore.taxonomy.trackerSizes[filter]}\n />\n ));\n\n const title = i18n._('filter.tracker.title');\n\n const expandoClick = () => {\n setExpanded(!expanded);\n };\n\n return (\n <ul aria-label={title} className=\"sidebar-filter sidebar__item\" role=\"menu\">\n <li className=\"sidebar-filter__item\" role=\"none\">\n <Expando className=\"sidebar-filter__item--heading\" expanded={expanded} handleClick={expandoClick}>\n {title}\n </Expando>\n </li>\n {expanded && filterElements}\n </ul>\n );\n});\n\nexport default TrackerFilters;\n","import classnames from 'classnames';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport ClientStatusStore from '@client/stores/ClientStatusStore';\nimport {Download, InfinityIcon, Upload} from '@client/ui/icons';\nimport SettingStore from '@client/stores/SettingStore';\nimport TransferDataStore from '@client/stores/TransferDataStore';\n\nimport type {TransferDirection} from '@shared/types/TransferData';\n\nimport Duration from '../general/Duration';\nimport Size from '../general/Size';\n\nimport type {TransferRateGraphInspectorPoint} from './TransferRateGraph';\n\nconst icons = {\n download: <Download />,\n infinity: <InfinityIcon />,\n upload: <Upload />,\n};\n\ninterface TransferRateDetailsProps {\n inspectorPoint?: TransferRateGraphInspectorPoint | null;\n}\n\nconst TransferRateDetails: FC<TransferRateDetailsProps> = observer(({inspectorPoint}: TransferRateDetailsProps) => {\n const {i18n} = useLingui();\n\n const getCurrentTransferRate = (direction: TransferDirection, options: {showHoverDuration?: boolean} = {}) => {\n const {throttleGlobalDownSpeed = 0, throttleGlobalUpSpeed = 0} = SettingStore.clientSettings || {};\n const {transferSummary} = TransferDataStore;\n\n const throttles = {\n download: throttleGlobalDownSpeed,\n upload: throttleGlobalUpSpeed,\n };\n\n const transferTotals = {\n download: transferSummary.downTotal,\n upload: transferSummary.upTotal,\n };\n\n let transferRates = {\n download: transferSummary.downRate,\n upload: transferSummary.upRate,\n };\n\n if (inspectorPoint != null) {\n transferRates = {\n upload: inspectorPoint.upload,\n download: inspectorPoint.download,\n };\n }\n\n const secondaryDataClasses = classnames('client-stats__rate__data--secondary', {\n 'is-visible': inspectorPoint == null && ClientStatusStore.isConnected,\n });\n\n const timestampClasses = classnames('client-stats__rate__data--timestamp', {\n 'is-visible': inspectorPoint != null && options.showHoverDuration,\n });\n\n let timestamp = null;\n if (inspectorPoint?.timestamp != null) {\n timestamp = (\n <div className={timestampClasses}>\n <Duration suffix={i18n._('general.ago')} value={Math.trunc((Date.now() - inspectorPoint.timestamp) / 1000)} />\n </div>\n );\n }\n\n let limit = null;\n\n if (throttles[direction] === 0) {\n limit = icons.infinity;\n } else {\n limit = <Size value={throttles[direction]} isSpeed />;\n }\n\n return (\n <div className={`client-stats__rate client-stats__rate--${direction}`}>\n <div className=\"client-stats__rate__icon\">{icons[direction]}</div>\n <div className=\"client-stats__rate__data\">\n <div className=\"client-stats__rate__data--primary\">\n <Size value={transferRates[direction]} isSpeed />\n </div>\n {timestamp}\n <div className={secondaryDataClasses}>\n <div className=\"client-stats__rate__data--total\">\n <Size value={transferTotals[direction]} />\n </div>\n <div className=\"client-stats__rate__data--limit\">{limit}</div>\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div className=\"client-stats__rates\">\n {getCurrentTransferRate('download', {showHoverDuration: true})}\n {getCurrentTransferRate('upload')}\n </div>\n );\n});\n\nexport default TransferRateDetails;\n","import {area, curveMonotoneX, line} from 'd3-shape';\nimport {FC, MutableRefObject, useRef, useState} from 'react';\nimport {max} from 'd3-array';\nimport {observer} from 'mobx-react-lite';\nimport {scaleLinear} from 'd3-scale';\n\nimport type {TransferDirection, TransferHistory} from '@shared/types/TransferData';\n\nimport TransferDataStore, {TRANSFER_DIRECTIONS} from '../../stores/TransferDataStore';\n\nconst TransferRateGraphGradient: FC<{direction: TransferDirection}> = ({direction}: {direction: TransferDirection}) => (\n <linearGradient id={`graph__gradient--${direction}`} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop className={`graph__gradient--top graph__gradient--top--${direction}`} offset=\"0%\" />\n <stop className={`graph__gradient--bottom graph__gradient--bottom--${direction}`} offset=\"100%\" />\n </linearGradient>\n);\n\nexport interface TransferRateGraphEventHandlers {\n handleMouseMove: (mouseX: number) => void;\n handleMouseOut: () => void;\n handleMouseOver: () => void;\n}\n\nexport interface TransferRateGraphInspectorPoint {\n upload: number;\n download: number;\n timestamp: number;\n}\n\ninterface TransferRateGraphProps {\n id: string;\n height: number;\n width: number;\n handlerRefs: MutableRefObject<TransferRateGraphEventHandlers | null>;\n onHover: (inspectorPoint: TransferRateGraphInspectorPoint) => void;\n onMouseOut: () => void;\n}\n\nconst getSpeedAtHoverPoint = (history: TransferHistory, direction: TransferDirection, hoverPoint: number) => {\n const upperSpeed = history[direction][Math.ceil(hoverPoint)];\n const lowerSpeed = history[direction][Math.floor(hoverPoint)];\n return lowerSpeed + (upperSpeed - lowerSpeed) * (hoverPoint % 1);\n};\n\nconst TransferRateGraph: FC<TransferRateGraphProps> = observer(\n ({id, height, width, handlerRefs, onHover, onMouseOut}: TransferRateGraphProps) => {\n const [isHovered, setIsHovered] = useState<boolean>(false);\n\n const hoverPoint = useRef<number>(0);\n const inspectorPoint = useRef<TransferRateGraphInspectorPoint>({download: 0, upload: 0, timestamp: 0});\n\n const historicalData = TransferDataStore.transferRates;\n\n const xScale = scaleLinear()\n .domain([0, historicalData.download.length - 1])\n .range([0, width]);\n\n const yScale = scaleLinear()\n .domain([\n 0,\n max(historicalData.download, (dataPoint, index) => Math.max(dataPoint, historicalData.upload[index])) as number,\n ])\n .range([height - 10, 10]);\n\n handlerRefs.current = {\n handleMouseMove: (mouseX: number) => {\n hoverPoint.current = xScale.invert(mouseX);\n onHover(inspectorPoint.current);\n },\n handleMouseOut: () => {\n setIsHovered(false);\n onMouseOut();\n },\n handleMouseOver: () => {\n setIsHovered(true);\n },\n };\n\n if (isHovered) {\n inspectorPoint.current = {\n download: getSpeedAtHoverPoint(historicalData, 'download', hoverPoint.current),\n upload: getSpeedAtHoverPoint(historicalData, 'upload', hoverPoint.current),\n timestamp: historicalData.timestamps[Math.round(hoverPoint.current)],\n };\n }\n\n const interpolation = curveMonotoneX;\n\n return (\n <svg className=\"graph\" id={id} height=\"100%\" width=\"100%\">\n <defs>\n <TransferRateGraphGradient direction=\"upload\" />\n <TransferRateGraphGradient direction=\"download\" />\n </defs>\n {TRANSFER_DIRECTIONS.map((direction) => [\n <path\n className=\"graph__area\"\n key={`area-${direction}`}\n fill={`url('#graph__gradient--${direction}')`}\n d={\n area<number>()\n .x((_dataPoint, index) => xScale(index) || 0)\n .y0(height)\n .y1((dataPoint) => yScale(dataPoint) || 0)\n .curve(interpolation)(historicalData[direction]) as string\n }\n />,\n <path\n className={`graph__line graph__line--${direction}`}\n key={`line-${direction}`}\n d={\n line<number>()\n .x((_dataPoint, index) => xScale(index) || 0)\n .y((dataPoint) => yScale(dataPoint) || 0)\n .curve(interpolation)(historicalData[direction]) as string\n }\n />,\n <circle\n className={`graph__circle graph__circle--${direction}`}\n key={`point-${direction}`}\n r={2.5}\n style={{opacity: isHovered ? 1 : 0}}\n transform={`translate(${xScale(hoverPoint.current)},${yScale(inspectorPoint.current[direction])})`}\n />,\n ])}\n </svg>\n );\n },\n);\n\nexport default TransferRateGraph;\n","import {FC, useState, useRef} from 'react';\nimport Measure from 'react-measure';\nimport {observer} from 'mobx-react-lite';\n\nimport ClientStatusStore from '../../stores/ClientStatusStore';\nimport TransferRateDetails from './TransferRateDetails';\nimport TransferRateGraph from './TransferRateGraph';\n\nimport type {TransferRateGraphEventHandlers, TransferRateGraphInspectorPoint} from './TransferRateGraph';\n\nconst TransferData: FC = observer(() => {\n const [graphInspectorPoint, setGraphInspectorPoint] = useState<TransferRateGraphInspectorPoint | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState<number>(250);\n const rateGraphHandlerRefs = useRef<TransferRateGraphEventHandlers>(null);\n\n return (\n <Measure\n offset\n onResize={(contentRect) => {\n if (contentRect.offset?.width) {\n setSidebarWidth(contentRect.offset.width);\n }\n }}\n >\n {({measureRef}) => (\n <div ref={measureRef} className=\"client-stats__wrapper sidebar__item\">\n <div\n className=\"client-stats\"\n onMouseMove={(event) => {\n if (event?.nativeEvent?.clientX != null) {\n rateGraphHandlerRefs.current?.handleMouseMove(event.nativeEvent.clientX);\n }\n }}\n onMouseOver={() => rateGraphHandlerRefs.current?.handleMouseOver()}\n onMouseOut={() => rateGraphHandlerRefs.current?.handleMouseOut()}\n onFocus={() => rateGraphHandlerRefs.current?.handleMouseOver()}\n onBlur={() => rateGraphHandlerRefs.current?.handleMouseOut()}\n >\n <TransferRateDetails inspectorPoint={graphInspectorPoint} />\n {ClientStatusStore.isConnected && (\n <TransferRateGraph\n height={150}\n id=\"transfer-rate-graph\"\n onMouseOut={() => {\n setGraphInspectorPoint(null);\n }}\n onHover={(inspectorPoint) => {\n setGraphInspectorPoint(inspectorPoint);\n }}\n handlerRefs={rateGraphHandlerRefs}\n width={sidebarWidth}\n />\n )}\n </div>\n </div>\n )}\n </Measure>\n );\n});\n\nexport default TransferData;\n","import {FC} from 'react';\nimport {OverlayScrollbarsComponent} from 'overlayscrollbars-react';\n\nimport DiskUsage from './DiskUsage';\nimport FeedsButton from './FeedsButton';\nimport LogoutButton from './LogoutButton';\nimport LocationFilters from './LocationFilters';\nimport NotificationsButton from './NotificationsButton';\nimport SearchBox from './SearchBox';\nimport SettingsButton from './SettingsButton';\nimport SidebarActions from './SidebarActions';\nimport SpeedLimitDropdown from './SpeedLimitDropdown';\nimport StatusFilters from './StatusFilters';\nimport TagFilters from './TagFilters';\nimport ThemeSwitchButton from './ThemeSwitchButton';\nimport TrackerFilters from './TrackerFilters';\nimport TransferData from './TransferData';\n\nconst Sidebar: FC = () => (\n <OverlayScrollbarsComponent\n className=\"application__sidebar\"\n options={{\n scrollbars: {\n autoHide: 'scroll',\n clickScroll: false,\n dragScroll: false,\n theme: `os-theme-thin`,\n },\n overflow: {\n x: 'hidden',\n y: 'scroll',\n },\n }}\n >\n <div style={{display: 'flex', flexDirection: 'column'}}>\n <SidebarActions>\n <SpeedLimitDropdown />\n <SettingsButton />\n <FeedsButton />\n <NotificationsButton />\n <LogoutButton />\n </SidebarActions>\n <TransferData />\n <SearchBox />\n <StatusFilters />\n <TagFilters />\n <TrackerFilters />\n <LocationFilters />\n <DiskUsage />\n <div style={{flexGrow: 1}} />\n <SidebarActions>\n <ThemeSwitchButton />\n </SidebarActions>\n </div>\n </OverlayScrollbarsComponent>\n);\n\nexport default Sidebar;\n","import classnames from 'classnames';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\nimport {useKeyPressEvent} from 'react-use';\n\nimport {ContextMenu} from '@client/ui';\nimport UIStore from '@client/stores/UIStore';\n\nimport type {ActiveContextMenu} from '@client/stores/UIStore';\n\ninterface ContextMenuMountPointProps {\n id: ActiveContextMenu['id'];\n}\n\nconst ContextMenuMountPoint: FC<ContextMenuMountPointProps> = observer(({id}: ContextMenuMountPointProps) => {\n const isOpen = UIStore.activeContextMenu?.id === id;\n const items = UIStore.activeContextMenu?.items ?? [];\n const triggerCoordinates = UIStore.activeContextMenu?.clickPosition ?? {\n x: 0,\n y: 0,\n };\n\n const {i18n} = useLingui();\n\n useKeyPressEvent('Escape', () => UIStore.dismissContextMenu(id));\n\n return (\n <ContextMenu\n triggerCoordinates={triggerCoordinates}\n onOverlayClick={() => {\n UIStore.dismissContextMenu(id);\n }}\n onOverlayRightClick={(e) => {\n e.preventDefault();\n }}\n isIn={isOpen}\n >\n {items.map((item, index) => {\n let menuItemContent;\n let menuItemClasses;\n\n switch (item.type) {\n case 'action':\n menuItemClasses = classnames('menu__item', {\n 'is-selectable': item.clickHandler,\n });\n menuItemContent = (\n <span>\n <span\n className={classnames('menu__item__label--primary', {\n 'has-action': item.labelAction,\n })}\n >\n <span className=\"menu__item__label\">{i18n._(item.label)}</span>\n {item.labelAction ? (\n <span className=\"menu__item__label__action\">\n <item.labelAction />\n </span>\n ) : undefined}\n </span>\n {item.labelSecondary ? (\n <span className=\"menu__item__label--secondary\">\n <item.labelSecondary />\n </span>\n ) : undefined}\n </span>\n );\n break;\n case 'separator':\n default:\n menuItemClasses = classnames('menu__item', {\n 'menu__item--separator': item.type === 'separator',\n });\n break;\n }\n\n return (\n <li className={menuItemClasses} key={item.type === 'action' ? item.action : `sep-${index}`}>\n <button\n type=\"button\"\n disabled={item.type !== 'action' || !item.clickHandler}\n onClick={(event) => {\n if (item.type !== 'separator') {\n if (item.dismissMenu === false) {\n event.nativeEvent.stopImmediatePropagation();\n }\n\n if (item.clickHandler) {\n item.clickHandler(event);\n }\n\n if (item.dismissMenu !== false) {\n UIStore.dismissContextMenu(id);\n }\n }\n\n return false;\n }}\n onContextMenu={(event) => {\n event.preventDefault();\n }}\n >\n {menuItemContent}\n </button>\n </li>\n );\n })}\n </ContextMenu>\n );\n});\n\nexport default ContextMenuMountPoint;\n","import {ComponentProps, FC, forwardRef, RefCallback, UIEvent, useEffect, useRef} from 'react';\nimport {FixedSizeList} from 'react-window';\nimport {observer} from 'mobx-react-lite';\nimport {OverlayScrollbarsComponent} from 'overlayscrollbars-react';\nimport {useWindowSize} from 'react-use';\n\nimport ConfigStore from '@client/stores/ConfigStore';\n\nimport type {OverlayScrollbarsComponentRef} from 'overlayscrollbars-react';\nimport type {FixedSizeListProps, ListChildComponentProps} from 'react-window';\n\nconst Overflow = forwardRef<HTMLDivElement, ComponentProps<'div'>>((props: ComponentProps<'div'>, ref) => {\n const {children, onScroll} = props;\n const osRef = useRef<OverlayScrollbarsComponentRef>(null);\n\n useEffect(() => {\n const scrollbarRef = osRef.current;\n\n if (scrollbarRef == null) {\n return () => {\n // do nothing.\n };\n }\n\n const viewport = scrollbarRef.osInstance()?.elements().viewport as HTMLDivElement;\n\n const refCallback = ref as RefCallback<HTMLDivElement>;\n refCallback(viewport);\n\n if (onScroll) {\n viewport.addEventListener('scroll', (e) => onScroll(e as unknown as UIEvent<HTMLDivElement>), {\n passive: true,\n });\n }\n\n return () => {\n if (onScroll) {\n viewport.removeEventListener('scroll', (e) => onScroll(e as unknown as UIEvent<HTMLDivElement>));\n }\n };\n }, [onScroll, ref]);\n\n return (\n <OverlayScrollbarsComponent\n {...props}\n options={{\n scrollbars: {\n autoHide: 'leave',\n clickScroll: true,\n theme: `os-theme-${ConfigStore.isPreferDark ? 'light' : 'dark'}`,\n },\n }}\n ref={osRef}\n >\n {children}\n </OverlayScrollbarsComponent>\n );\n});\n\ninterface ListViewportProps\n extends Pick<FixedSizeListProps, 'className' | 'itemCount' | 'itemKey' | 'itemSize' | 'outerRef'> {\n itemRenderer: FC<ListChildComponentProps>;\n}\n\nconst ListViewport = forwardRef<FixedSizeList, ListViewportProps>((props: ListViewportProps, ref) => {\n const {className, itemCount, itemKey, itemRenderer, itemSize, outerRef} = props;\n const {height: windowHeight} = useWindowSize();\n\n return (\n <FixedSizeList\n className={className}\n height={Math.max(itemSize * 30, windowHeight)}\n itemCount={itemCount}\n itemKey={itemKey}\n itemSize={itemSize}\n width=\"100%\"\n outerElementType={ConfigStore.isSmallScreen ? undefined : Overflow} // Don't use custom scrollbar on smaller screens\n ref={ref}\n overscanCount={30}\n outerRef={outerRef}\n >\n {itemRenderer}\n </FixedSizeList>\n );\n});\n\nexport default observer(ListViewport);\n","import classnames from 'classnames';\nimport {forwardRef, MutableRefObject, ReactElement, useRef, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {Trans, useLingui} from '@lingui/react';\nimport {useEnsuredForwardedRef} from 'react-use';\n\nimport {css} from '@client/styled-system/css';\nimport TorrentListColumns, {TorrentListColumn} from '../../constants/TorrentListColumns';\nimport SettingStore from '../../stores/SettingStore';\nimport UIStore from '../../stores/UIStore';\n\nconst pointerDownStyles = `\n body { user-select: none !important; }\n * { cursor: col-resize !important; }\n`;\n\ninterface TableHeadingProps {\n onCellClick: (column: TorrentListColumn) => void;\n onCellFocus: () => void;\n onWidthsChange: (column: TorrentListColumn, width: number) => void;\n}\n\nconst TableHeading = observer(\n forwardRef<HTMLDivElement, TableHeadingProps>(\n ({onCellClick, onCellFocus, onWidthsChange}: TableHeadingProps, ref) => {\n const [isPointerDown, setIsPointerDown] = useState<boolean>(false);\n\n const focusedCell = useRef<TorrentListColumn>();\n const focusedCellWidth = useRef<number>();\n const lastPointerX = useRef<number>();\n const tableHeading = useEnsuredForwardedRef<HTMLDivElement>(ref as MutableRefObject<HTMLDivElement>);\n const resizeLine = useRef<HTMLDivElement>(null);\n\n const {i18n} = useLingui();\n\n const handlePointerMove = (event: PointerEvent) => {\n let widthDelta = 0;\n if (lastPointerX.current != null) {\n widthDelta = event.clientX - lastPointerX.current;\n }\n\n let nextCellWidth = 20;\n if (focusedCellWidth.current != null) {\n nextCellWidth = focusedCellWidth.current + widthDelta;\n }\n\n if (nextCellWidth > 20) {\n focusedCellWidth.current = nextCellWidth;\n lastPointerX.current = event.clientX;\n if (resizeLine.current != null && tableHeading.current != null) {\n resizeLine.current.style.transform = `translate(${Math.max(0, event.clientX)}px, ${\n tableHeading.current.getBoundingClientRect().top\n }px)`;\n }\n }\n };\n\n const handlePointerUp = () => {\n UIStore.removeGlobalStyle(pointerDownStyles);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointermove', handlePointerMove);\n\n setIsPointerDown(false);\n lastPointerX.current = undefined;\n\n if (resizeLine.current != null) {\n resizeLine.current.style.opacity = '0';\n }\n\n if (focusedCell.current != null && focusedCellWidth.current != null) {\n onWidthsChange(focusedCell.current, focusedCellWidth.current);\n }\n\n focusedCell.current = undefined;\n focusedCellWidth.current = undefined;\n };\n\n return (\n <div className=\"table__row table__row--heading\" role=\"row\" ref={tableHeading}>\n {SettingStore.floodSettings.torrentListColumns.reduce((accumulator: Array<ReactElement>, {id, visible}) => {\n if (!visible) {\n return accumulator;\n }\n\n const labelID = TorrentListColumns[id];\n if (labelID == null) {\n return accumulator;\n }\n\n let handle = null;\n const width = SettingStore.floodSettings.torrentListColumnWidths[id] || 100;\n\n if (!isPointerDown) {\n handle = (\n <span\n className=\"table__heading__handle\"\n onPointerDown={(event) => {\n if (!isPointerDown && resizeLine.current != null && tableHeading.current != null) {\n setIsPointerDown(true);\n\n focusedCell.current = id;\n focusedCellWidth.current = width;\n lastPointerX.current = event.clientX;\n\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointermove', handlePointerMove);\n UIStore.addGlobalStyle(pointerDownStyles);\n\n resizeLine.current.style.transform = `translate(${Math.max(0, event.clientX)}px, ${\n tableHeading.current.getBoundingClientRect().top\n }px)`;\n resizeLine.current.style.opacity = '1';\n }\n }}\n />\n );\n }\n\n const isSortActive = id === SettingStore.floodSettings.sortTorrents.property;\n const classes = classnames('table__cell table__heading', {\n 'table__heading--is-sorted': isSortActive,\n [`table__heading--direction--${SettingStore.floodSettings.sortTorrents.direction}`]: isSortActive,\n });\n\n accumulator.push(\n <button\n className={`${classes} ${css({\n textAlign: 'left',\n _focus: {\n outline: 'none',\n WebkitTapHighlightColor: 'transparent',\n },\n })}`}\n role=\"columnheader\"\n aria-sort={\n isSortActive\n ? SettingStore.floodSettings.sortTorrents.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n type=\"button\"\n key={id}\n onClick={() => onCellClick(id)}\n onFocus={() => onCellFocus()}\n style={{\n width: `${width}px`,\n }}\n >\n <span className=\"table__heading__label\" title={i18n._(labelID)}>\n <Trans id={labelID} />\n </span>\n {handle}\n </button>,\n );\n\n return accumulator;\n }, [])}\n <div className=\"table__cell table__heading table__heading--fill\" />\n <div className=\"table__heading__resize-line\" ref={resizeLine} />\n </div>\n );\n },\n ),\n);\n\nexport default TableHeading;\n","import {FC, ReactNode} from 'react';\nimport {useDropzone} from 'react-dropzone';\n\nimport UIStore from '@client/stores/UIStore';\n\nimport type {ProcessedFiles} from '@client/components/general/form-elements/FileDropzone';\n\nconst handleFileDrop = (files: Array<File>) => {\n const processedFiles: ProcessedFiles = [];\n\n files.forEach((file) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result != null && typeof e.target.result === 'string') {\n processedFiles.push({\n name: file.name,\n data: e.target.result.split('base64,')[1],\n });\n }\n\n if (processedFiles.length === files.length && processedFiles[0] != null) {\n UIStore.setActiveModal({id: 'add-torrents', tab: 'by-file', files: processedFiles});\n }\n };\n reader.readAsDataURL(file);\n });\n};\n\nconst TorrentListDropzone: FC<{children: ReactNode}> = ({children}: {children: ReactNode}) => {\n const {getRootProps, isDragActive} = useDropzone({\n onDrop: handleFileDrop,\n noClick: true,\n noKeyboard: true,\n });\n\n return (\n <div\n {...getRootProps({onClick: (evt) => evt.preventDefault()})}\n className={`dropzone dropzone--with-overlay torrents ${isDragActive ? 'dropzone--is-dragging' : ''}`}\n >\n {children}\n </div>\n );\n};\n\nexport default TorrentListDropzone;\n","import {createRef, FC, MutableRefObject} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport {Checkmark} from '@client/ui/icons';\nimport ConfigStore from '@client/stores/ConfigStore';\nimport TorrentActions from '@client/actions/TorrentActions';\nimport TorrentContextMenuActions from '@client/constants/TorrentContextMenuActions';\nimport TorrentStore from '@client/stores/TorrentStore';\nimport UIStore from '@client/stores/UIStore';\n\nimport type {ContextMenuItem} from '@client/stores/UIStore';\n\nimport type {TorrentProperties} from '@shared/types/Torrent';\n\nimport PriorityMeter from '../general/PriorityMeter';\n\nconst getLastSelectedTorrent = (): string => TorrentStore.selectedTorrents[TorrentStore.selectedTorrents.length - 1];\n\nconst InlineTorrentPropertyCheckbox: FC<{property: keyof TorrentProperties}> = observer(\n ({property}: {property: keyof TorrentProperties}) => (\n <span className=\"toggle-input checkbox\" style={{display: 'inline'}}>\n <div className=\"toggle-input__indicator\">\n <div\n className=\"toggle-input__indicator__icon\"\n style={{\n opacity: TorrentStore.torrents[getLastSelectedTorrent()][property] ? '1' : undefined,\n }}\n >\n <Checkmark />\n </div>\n </div>\n </span>\n ),\n);\n\nexport const getContextMenuItems = (torrent: TorrentProperties): Array<ContextMenuItem> => {\n const changePriorityFuncRef = createRef<() => number>();\n\n return [\n {\n type: 'action',\n action: 'start',\n label: TorrentContextMenuActions.start,\n clickHandler: () => {\n TorrentActions.startTorrents({\n hashes: TorrentStore.selectedTorrents,\n });\n },\n },\n {\n type: 'action',\n action: 'stop',\n label: TorrentContextMenuActions.stop,\n clickHandler: () => {\n TorrentActions.stopTorrents({\n hashes: TorrentStore.selectedTorrents,\n });\n },\n },\n {\n type: 'action',\n action: 'remove',\n label: TorrentContextMenuActions.remove,\n clickHandler: () => {\n UIStore.setActiveModal({id: 'remove-torrents'});\n },\n },\n {\n type: 'action',\n action: 'checkHash',\n label: TorrentContextMenuActions.checkHash,\n clickHandler: () => {\n TorrentActions.checkHash({\n hashes: TorrentStore.selectedTorrents,\n });\n },\n },\n {\n type: 'action',\n action: 'reannounce',\n label: TorrentContextMenuActions.reannounce,\n clickHandler: () => {\n TorrentActions.reannounce({\n hashes: TorrentStore.selectedTorrents as [string, ...string[]],\n });\n },\n },\n {\n type: 'separator',\n },\n {\n type: 'action',\n action: 'setTaxonomy',\n label: TorrentContextMenuActions.setTaxonomy,\n clickHandler: () => {\n UIStore.setActiveModal({id: 'set-taxonomy'});\n },\n },\n {\n type: 'action',\n action: 'move',\n label: TorrentContextMenuActions.move,\n clickHandler: () => {\n UIStore.setActiveModal({id: 'move-torrents'});\n },\n },\n {\n type: 'action',\n action: 'setTrackers',\n label: TorrentContextMenuActions.setTrackers,\n clickHandler: () => {\n UIStore.setActiveModal({id: 'set-trackers'});\n },\n },\n {\n type: 'separator',\n },\n {\n type: 'action',\n action: 'torrentDetails',\n label: TorrentContextMenuActions.torrentDetails,\n clickHandler: () => {\n UIStore.setActiveModal({\n id: 'torrent-details',\n hash: getLastSelectedTorrent(),\n });\n },\n },\n {\n type: 'action',\n action: 'downloadContents',\n label: TorrentContextMenuActions.downloadContents,\n clickHandler: (e) => {\n e.preventDefault();\n\n TorrentStore.selectedTorrents.forEach((hash) => {\n const link = document.createElement('a');\n\n link.download = '';\n link.href = `${ConfigStore.baseURI}api/torrents/${hash}/contents/all/data`;\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n });\n },\n },\n {\n type: 'action',\n action: 'downloadMetainfo',\n label: TorrentContextMenuActions.downloadMetainfo,\n clickHandler: (e) => {\n e.preventDefault();\n\n const link = document.createElement('a');\n\n link.download = '';\n link.href = `${ConfigStore.baseURI}api/torrents/${TorrentStore.selectedTorrents.join(',')}/metainfo`;\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n },\n {\n type: 'action',\n action: 'generateMagnet',\n label: TorrentContextMenuActions.generateMagnet,\n clickHandler: () => {\n UIStore.setActiveModal({id: 'generate-magnet'});\n },\n },\n {\n type: 'action',\n action: 'setInitialSeeding',\n label: TorrentContextMenuActions.setInitialSeeding,\n clickHandler: () => {\n const {selectedTorrents} = TorrentStore;\n TorrentActions.setInitialSeeding({\n hashes: selectedTorrents,\n isInitialSeeding: !TorrentStore.torrents[getLastSelectedTorrent()].isInitialSeeding,\n });\n },\n dismissMenu: false,\n labelAction: () => <InlineTorrentPropertyCheckbox property=\"isInitialSeeding\" />,\n },\n {\n type: 'action',\n action: 'setSequential',\n label: TorrentContextMenuActions.setSequential,\n clickHandler: () => {\n const {selectedTorrents} = TorrentStore;\n TorrentActions.setSequential({\n hashes: selectedTorrents,\n isSequential: !TorrentStore.torrents[getLastSelectedTorrent()].isSequential,\n });\n },\n dismissMenu: false,\n labelAction: () => <InlineTorrentPropertyCheckbox property=\"isSequential\" />,\n },\n {\n type: 'action',\n action: 'setPriority',\n label: TorrentContextMenuActions.setPriority,\n clickHandler: () => {\n if (changePriorityFuncRef.current != null) {\n TorrentActions.setPriority({\n hashes: TorrentStore.selectedTorrents,\n priority: changePriorityFuncRef.current(),\n });\n }\n },\n dismissMenu: false,\n labelAction: () => (\n <PriorityMeter\n id={torrent.hash}\n key={torrent.hash}\n level={torrent.priority}\n maxLevel={3}\n onChange={() => undefined}\n priorityType=\"torrent\"\n showLabel={false}\n changePriorityFuncRef={changePriorityFuncRef as MutableRefObject<() => number>}\n clickHandled\n />\n ),\n },\n ];\n};\n","import classnames from 'classnames';\nimport {computed} from 'mobx';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {Trans, useLingui} from '@lingui/react';\n\nimport {css} from '@client/styled-system/css';\nimport {\n CalendarFinished,\n CalendarCreated,\n Calendar,\n CheckmarkThick,\n Clock,\n DiskFlat,\n DetailNotAvailable,\n DownloadThick,\n FolderClosedSolid,\n Hash,\n Lock,\n TrackerMessage,\n Peers,\n Ratio,\n Seeds,\n Radar,\n UploadThick,\n} from '@client/ui/icons';\nimport Duration from '@client/components/general/Duration';\nimport ProgressBar from '@client/components/general/ProgressBar';\nimport Size from '@client/components/general/Size';\nimport {torrentStatusEffective} from '@client/util/torrentStatus';\nimport SettingStore from '@client/stores/SettingStore';\nimport TorrentStore from '@client/stores/TorrentStore';\n\nimport type {TorrentListColumn} from '@client/constants/TorrentListColumns';\n\nimport type {TorrentProperties} from '@shared/types/Torrent';\n\nconst ICONS: Partial<Record<TorrentListColumn, JSX.Element>> = {\n eta: <Clock />,\n sizeBytes: <DiskFlat />,\n downRate: <DownloadThick />,\n directory: <FolderClosedSolid />,\n hash: <Hash />,\n dateActive: <Clock />,\n dateAdded: <Calendar />,\n dateCreated: <CalendarCreated />,\n dateFinished: <CalendarFinished />,\n isPrivate: <Lock />,\n message: <TrackerMessage />,\n percentComplete: <DownloadThick />,\n peers: <Peers />,\n ratio: <Ratio />,\n seeds: <Seeds />,\n trackerURIs: <Radar />,\n upRate: <UploadThick />,\n upTotal: <UploadThick />,\n} as const;\n\nconst BooleanCell: FC<{value: boolean}> = observer(({value}: {value: boolean}) =>\n value ? <CheckmarkThick className=\"torrent__detail__icon torrent__detail__icon--checkmark\" /> : null,\n);\n\nconst DateCell: FC<{date: number}> = observer(({date}: {date: number}) => {\n const {i18n} = useLingui();\n\n if (date === 0) {\n return null;\n }\n\n return <span>{i18n.date(new Date(date * 1000))}</span>;\n});\n\nconst ETACell: FC<{eta: number}> = observer(({eta}: {eta: number}) => (eta ? <Duration value={eta} /> : null));\n\nconst PeerCell: FC<{peersConnected: number; totalPeers: number}> = observer(\n ({peersConnected, totalPeers}: {peersConnected: number; totalPeers: number}) => {\n const {i18n} = useLingui();\n\n return (\n <Trans\n id=\"torrent.list.peers\"\n values={{\n connected: i18n.number(peersConnected),\n of: (\n <em className=\"unit\">\n <Trans id=\"torrent.list.peers.of\" />\n </em>\n ),\n total: i18n.number(totalPeers),\n }}\n />\n );\n },\n);\n\nconst RatioCell: FC<{ratio: number}> = observer(({ratio}: {ratio: number}) => {\n const {i18n} = useLingui();\n\n return <span>{i18n.number(ratio, {maximumFractionDigits: 2})}</span>;\n});\n\nconst TagsCell: FC<{tags: string[]}> = observer(({tags}: {tags: string[]}) => (\n <ul className=\"torrent__tags tag\">\n {tags.map((tag) => (\n <li className=\"torrent__tag\" key={tag}>\n {tag}\n </li>\n ))}\n </ul>\n));\n\nconst TrackersCell: FC<{trackers: string[]}> = observer(({trackers}: {trackers: string[]}) => (\n <span>{trackers.join(', ')}</span>\n));\n\nexport interface TorrentListCellContentProps {\n torrent: TorrentProperties;\n column: TorrentListColumn;\n}\n\nconst DefaultTorrentListCellContent: FC<TorrentListCellContentProps> = observer(\n ({torrent, column}: TorrentListCellContentProps) => {\n switch (column) {\n case 'dateActive':\n return <DateCell date={torrent[column]} />;\n case 'dateAdded':\n return <DateCell date={torrent[column]} />;\n case 'dateCreated':\n return <DateCell date={torrent[column]} />;\n case 'dateFinished':\n return <DateCell date={torrent[column]} />;\n case 'downRate':\n return <Size value={torrent[column]} isSpeed />;\n case 'upRate':\n return <Size value={torrent[column]} isSpeed />;\n case 'downTotal':\n return <Size value={torrent[column]} />;\n case 'upTotal':\n return <Size value={torrent[column]} />;\n case 'sizeBytes':\n return <Size value={torrent[column]} />;\n case 'ratio':\n return <RatioCell ratio={torrent[column]} />;\n case 'isPrivate':\n return <BooleanCell value={torrent[column]} />;\n case 'tags':\n return <TagsCell tags={torrent[column]} />;\n case 'trackerURIs':\n return <TrackersCell trackers={torrent[column]} />;\n case 'eta':\n return <ETACell eta={torrent[column]} />;\n case 'seeds':\n return <PeerCell peersConnected={torrent.seedsConnected} totalPeers={torrent.seedsTotal} />;\n case 'peers':\n return <PeerCell peersConnected={torrent.peersConnected} totalPeers={torrent.peersTotal} />;\n case 'percentComplete':\n return (\n <ProgressBar\n percent={computed(() => torrent.percentComplete).get()}\n status={computed(() => torrentStatusEffective(torrent.status)).get()}\n showPercentLabel={computed(\n () =>\n SettingStore.floodSettings.torrentListViewSize === 'condensed' &&\n SettingStore.floodSettings.torrentListShowProgressPercent,\n ).get()}\n />\n );\n default:\n return <span>{torrent[column]}</span>;\n }\n },\n);\n\ninterface TorrentListCellProps {\n hash: string;\n column: TorrentListColumn;\n content?: FC<TorrentListCellContentProps>;\n className?: string;\n classNameOverride?: boolean;\n width?: number;\n showIcon?: boolean;\n}\n\nconst TorrentListCell: FC<TorrentListCellProps> = observer(\n ({\n hash,\n content: TorrentListCellContent = DefaultTorrentListCellContent,\n column,\n className,\n classNameOverride = false,\n width,\n showIcon = false,\n }: TorrentListCellProps) => {\n const icon = showIcon ? ICONS[column] : null;\n\n return (\n <div\n className={\n classNameOverride\n ? className\n : classnames(\n 'torrent__detail',\n `torrent__detail--${column}`,\n className,\n css({pointerEvents: 'none', userSelect: 'none'}),\n )\n }\n role=\"cell\"\n style={{width: `${width}px`}}\n >\n {icon}\n {TorrentListCellContent ? (\n <TorrentListCellContent torrent={TorrentStore.torrents[hash]} column={column} />\n ) : (\n <DetailNotAvailable />\n )}\n </div>\n );\n },\n);\n\nexport default TorrentListCell;\n","import {CSSProperties, forwardRef, KeyboardEvent, MouseEvent, ReactElement, TouchEvent} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport SettingStore from '../../stores/SettingStore';\nimport TorrentListCell from './TorrentListCell';\nimport TorrentListColumns from '../../constants/TorrentListColumns';\n\ninterface TorrentListRowCondensedProps {\n className: string;\n style: CSSProperties;\n hash: string;\n handleClick: (hash: string, event: MouseEvent) => void;\n handleDoubleClick: (hash: string) => void;\n handleRightClick: (hash: string, event: MouseEvent) => void;\n handleTouchStart: (event: TouchEvent) => void;\n handleTouchEnd: (event: TouchEvent) => void;\n handleKeyPress: (event: KeyboardEvent) => void;\n 'data-testid'?: string;\n 'data-torrent-status'?: string;\n 'data-torrent-name'?: string;\n 'data-is-selected'?: boolean;\n 'data-view-size'?: string;\n}\n\nconst TorrentListRowCondensed = observer(\n forwardRef<HTMLDivElement, TorrentListRowCondensedProps>(\n (\n {\n className,\n style,\n hash,\n handleClick,\n handleDoubleClick,\n handleRightClick,\n handleTouchStart,\n handleTouchEnd,\n handleKeyPress,\n ...dataAttributes\n }: TorrentListRowCondensedProps,\n ref,\n ) => {\n const torrentListColumns = SettingStore.floodSettings.torrentListColumns.reduce(\n (accumulator: Array<ReactElement>, {id, visible}) => {\n if (TorrentListColumns[id] == null) {\n return accumulator;\n }\n\n if (!visible) {\n return accumulator;\n }\n\n accumulator.push(\n <TorrentListCell\n className=\"table__cell\"\n key={id}\n hash={hash}\n column={id}\n width={SettingStore.floodSettings.torrentListColumnWidths[id]}\n />,\n );\n\n return accumulator;\n },\n [],\n );\n\n return (\n <div\n className={className}\n role=\"row\"\n style={style}\n tabIndex={0}\n onClick={(e) => handleClick(hash, e)}\n onContextMenu={(e) => handleRightClick(hash, e)}\n onDoubleClick={() => handleDoubleClick(hash)}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onKeyPress={handleKeyPress}\n ref={ref}\n {...dataAttributes}\n >\n {torrentListColumns}\n </div>\n );\n },\n ),\n);\n\nexport default TorrentListRowCondensed;\n","import {CSSProperties, FC, forwardRef, KeyboardEvent, MouseEvent, ReactElement, TouchEvent} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLingui} from '@lingui/react';\n\nimport {css} from '@client/styled-system/css';\nimport SettingStore from '@client/stores/SettingStore';\nimport TorrentListColumns from '@client/constants/TorrentListColumns';\n\nimport Size from '../general/Size';\nimport TorrentListCell from './TorrentListCell';\n\nimport type {TorrentListCellContentProps} from './TorrentListCell';\n\ninterface TorrentListRowExpandedProps {\n className: string;\n style: CSSProperties;\n hash: string;\n handleClick: (hash: string, event: KeyboardEvent | MouseEvent) => void;\n handleDoubleClick: (hash: string) => void;\n handleRightClick: (hash: string, event: KeyboardEvent | MouseEvent) => void;\n handleTouchStart: (event: TouchEvent) => void;\n handleTouchEnd: (event: TouchEvent) => void;\n handleKeyPress: (event: KeyboardEvent) => void;\n 'data-testid'?: string;\n 'data-torrent-status'?: string;\n 'data-torrent-name'?: string;\n 'data-is-selected'?: boolean;\n 'data-view-size'?: string;\n}\n\nconst TorrentListCellPercentageNumber: FC<TorrentListCellContentProps> = observer(\n ({torrent}: TorrentListCellContentProps) => {\n const {i18n} = useLingui();\n return (\n <span>\n {i18n.number(torrent.percentComplete, {maximumFractionDigits: 1})}\n <em className=\"unit\">%</em>\n &nbsp;&mdash;&nbsp;\n <Size value={torrent.downTotal} />\n </span>\n );\n },\n);\n\nconst TorrentListRowExpanded = observer(\n forwardRef<HTMLDivElement, TorrentListRowExpandedProps>(\n (\n {\n className,\n style,\n hash,\n handleClick,\n handleDoubleClick,\n handleRightClick,\n handleTouchStart,\n handleTouchEnd,\n handleKeyPress,\n ...dataAttributes\n }: TorrentListRowExpandedProps,\n ref,\n ) => {\n const columns = SettingStore.floodSettings.torrentListColumns;\n\n const primarySection: Array<ReactElement> = [\n <TorrentListCell\n key=\"name\"\n hash={hash}\n column=\"name\"\n className=\"torrent__details__section torrent__details__section--primary\"\n />,\n ];\n const secondarySection: Array<ReactElement> = [\n <TorrentListCell key=\"eta\" hash={hash} column=\"eta\" showIcon />,\n <TorrentListCell key=\"downRate\" hash={hash} column=\"downRate\" showIcon />,\n <TorrentListCell key=\"upRate\" hash={hash} column=\"upRate\" showIcon />,\n ];\n const tertiarySection: Array<ReactElement> = [\n <TorrentListCell\n key=\"percentComplete\"\n hash={hash}\n column=\"percentComplete\"\n content={TorrentListCellPercentageNumber}\n showIcon\n />,\n ];\n const quaternarySection: Array<ReactElement> = [\n <TorrentListCell\n key=\"percentBar\"\n hash={hash}\n column=\"percentComplete\"\n className=\"torrent__details__section torrent__details__section--quaternary\"\n classNameOverride\n />,\n ];\n\n // Using a for loop to maximize performance.\n for (let index = 0; index < columns.length; index += 1) {\n const {id, visible} = columns[index];\n\n if (TorrentListColumns[id] != null && visible) {\n switch (id) {\n case 'name':\n break;\n case 'downRate':\n case 'upRate':\n case 'eta':\n break;\n case 'downTotal':\n case 'percentComplete':\n break;\n default:\n tertiarySection.push(<TorrentListCell key={id} hash={hash} column={id} showIcon />);\n break;\n }\n }\n }\n\n return (\n <div\n className={className}\n role=\"row\"\n style={style}\n tabIndex={0}\n onClick={(e) => handleClick(hash, e)}\n onContextMenu={(e) => handleRightClick(hash, e)}\n onDoubleClick={() => handleDoubleClick(hash)}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onKeyPress={handleKeyPress}\n ref={ref}\n {...dataAttributes}\n >\n <div className={css({alignItems: 'center', display: 'flex'})}>\n {primarySection}\n <div className=\"torrent__details__section torrent__details__section--secondary\">{secondarySection}</div>\n </div>\n <div className=\"torrent__details__section torrent__details__section--tertiary\">{tertiarySection}</div>\n {quaternarySection}\n </div>\n );\n },\n ),\n);\n\nexport default TorrentListRowExpanded;\n","import classnames from 'classnames';\nimport {computed} from 'mobx';\nimport {CSSProperties, FC, KeyboardEvent, MouseEvent, TouchEvent, useRef, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {useLongPress} from 'react-use';\n\nimport {defaultFloodSettings} from '@shared/schema/FloodSettings';\n\nimport SettingStore from '@client/stores/SettingStore';\nimport {torrentStatusClasses} from '@client/util/torrentStatus';\nimport TorrentStore from '@client/stores/TorrentStore';\nimport UIStore from '@client/stores/UIStore';\n\nimport {getContextMenuItems} from './TorrentListContextMenu';\nimport TorrentListRowCondensed from './TorrentListRowCondensed';\nimport TorrentListRowExpanded from './TorrentListRowExpanded';\n\nconst displayContextMenu = (hash: string, event: KeyboardEvent | MouseEvent | TouchEvent) => {\n if (event.cancelable === true) {\n event.preventDefault();\n }\n\n const mouseClientX = (event as unknown as MouseEvent).clientX;\n const mouseClientY = (event as unknown as MouseEvent).clientY;\n const touchClientX = (event as unknown as TouchEvent).touches?.[0].clientX;\n const touchClientY = (event as unknown as TouchEvent).touches?.[0].clientY;\n\n if (!TorrentStore.selectedTorrents.includes(hash)) {\n TorrentStore.setSelectedTorrents({hash, event});\n }\n\n const {torrentContextMenuActions = defaultFloodSettings.torrentContextMenuActions} = SettingStore.floodSettings;\n const torrent = TorrentStore.torrents[hash];\n\n UIStore.setActiveContextMenu({\n id: 'torrent-list-item',\n clickPosition: {\n x: mouseClientX || touchClientX || 0,\n y: mouseClientY || touchClientY || 0,\n },\n items: getContextMenuItems(torrent).filter((item) => {\n if (item.type === 'separator') {\n return true;\n }\n\n return torrentContextMenuActions.some((action) => action.id === item.action && action.visible === true);\n }),\n });\n};\n\nconst displayTorrentDetails = (hash: string) => UIStore.setActiveModal({id: 'torrent-details', hash});\n\nconst selectTorrent = (hash: string, event: KeyboardEvent | MouseEvent | TouchEvent) =>\n TorrentStore.setSelectedTorrents({hash, event});\n\nconst onKeyPress = (hash: string, e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter' || e.key === 'ContextMenu') {\n e.preventDefault();\n if (TorrentStore.selectedTorrents.includes(hash)) {\n if (e.key === 'Enter') {\n displayTorrentDetails(hash);\n } else if (e.key === 'ContextMenu') {\n displayContextMenu(hash, e);\n }\n } else {\n selectTorrent(hash, e);\n }\n }\n};\n\ninterface TorrentListRowProps {\n hash: string;\n style: CSSProperties;\n}\n\nconst TorrentListRow: FC<TorrentListRowProps> = observer(({hash, style}: TorrentListRowProps) => {\n const [rowLocation, setRowLocation] = useState<number>(0);\n const shouldDisplayTorrentDetails = useRef<boolean>(false);\n const rowRef = useRef<HTMLDivElement>(null);\n\n const isCondensed = SettingStore.floodSettings.torrentListViewSize === 'condensed';\n const isSelected = computed(() => TorrentStore.selectedTorrents.includes(hash)).get();\n\n const {status, upRate, downRate} = TorrentStore.torrents?.[hash] || {};\n const torrentClasses = torrentStatusClasses(\n {status, upRate, downRate},\n classnames({\n 'torrent--is-selected': isSelected,\n 'torrent--is-condensed': isCondensed,\n 'torrent--is-expanded': !isCondensed,\n }),\n 'torrent',\n );\n\n const {onTouchStart, onTouchEnd} = useLongPress((e) => {\n const curRowLocation = rowRef.current?.getBoundingClientRect().top;\n if (e != null && curRowLocation != null && Math.abs(curRowLocation - rowLocation) < 25) {\n displayContextMenu(hash, e as unknown as TouchEvent);\n }\n });\n\n const onTouchStartHooked = (e: TouchEvent) => {\n if (!TorrentStore.selectedTorrents.includes(hash)) {\n selectTorrent(hash, e);\n }\n\n if (shouldDisplayTorrentDetails.current) {\n displayTorrentDetails(hash);\n } else {\n shouldDisplayTorrentDetails.current = true;\n setTimeout(() => {\n shouldDisplayTorrentDetails.current = false;\n }, 200);\n }\n\n setRowLocation(rowRef.current?.getBoundingClientRect().top || 0);\n\n onTouchStart(e);\n };\n\n const torrent = TorrentStore.torrents?.[hash];\n const torrentTestId = `torrent-${hash}`;\n const torrentStatus = status?.join('-') || 'unknown';\n\n if (isCondensed) {\n return (\n <TorrentListRowCondensed\n className={torrentClasses}\n ref={rowRef}\n style={style}\n hash={hash}\n handleClick={selectTorrent}\n handleDoubleClick={displayTorrentDetails}\n handleRightClick={displayContextMenu}\n handleTouchStart={onTouchStartHooked}\n handleTouchEnd={onTouchEnd}\n handleKeyPress={(e) => onKeyPress(hash, e)}\n data-testid={torrentTestId}\n data-torrent-status={torrentStatus}\n data-torrent-name={torrent?.name}\n data-is-selected={isSelected}\n data-view-size=\"condensed\"\n />\n );\n }\n\n return (\n <TorrentListRowExpanded\n className={torrentClasses}\n ref={rowRef}\n style={style}\n hash={hash}\n handleClick={selectTorrent}\n handleDoubleClick={displayTorrentDetails}\n handleRightClick={displayContextMenu}\n handleTouchStart={onTouchStartHooked}\n handleTouchEnd={onTouchEnd}\n handleKeyPress={(e) => onKeyPress(hash, e)}\n data-testid={torrentTestId}\n data-torrent-status={torrentStatus}\n data-torrent-name={torrent?.name}\n data-is-selected={isSelected}\n data-view-size=\"expanded\"\n />\n );\n});\n\nexport default TorrentListRow;\n","import {FC, KeyboardEvent, ReactNode, useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {reaction} from 'mobx';\nimport {Trans} from '@lingui/react';\nimport {useEvent} from 'react-use';\n\nimport type {FixedSizeList, ListChildComponentProps} from 'react-window';\n\nimport {Button} from '@client/ui';\nimport {Files} from '@client/ui/icons';\nimport ClientStatusStore from '@client/stores/ClientStatusStore';\nimport SettingActions from '@client/actions/SettingActions';\nimport SettingStore from '@client/stores/SettingStore';\nimport TorrentFilterStore from '@client/stores/TorrentFilterStore';\nimport TorrentStore from '@client/stores/TorrentStore';\nimport SortDirections from '@client/constants/SortDirections';\nimport UIStore from '@client/stores/UIStore';\n\nimport type {TorrentListColumn} from '@client/constants/TorrentListColumns';\n\nimport {defaultFloodSettings} from '@shared/schema/FloodSettings';\n\nimport ContextMenuMountPoint from '../general/ContextMenuMountPoint';\nimport ListViewport from '../general/ListViewport';\nimport TableHeading from './TableHeading';\nimport TorrentListDropzone from './TorrentListDropzone';\nimport TorrentListRow from './TorrentListRow';\n\nconst TorrentListRowRenderer: FC<ListChildComponentProps> = observer(({index, style}) => (\n <TorrentListRow hash={TorrentStore.filteredTorrents[index].hash} style={style} />\n));\n\nconst TorrentList: FC = observer(() => {\n const listHeaderRef = useRef<HTMLDivElement>(null);\n const listViewportRef = useRef<FixedSizeList>(null);\n const listViewportOuterRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const dispose = reaction(\n () => TorrentFilterStore.filterTrigger,\n () => {\n if (listViewportRef.current != null) {\n listViewportRef.current.scrollTo(0);\n }\n },\n );\n\n return dispose;\n }, []);\n\n useEvent('keydown', (e: KeyboardEvent) => {\n const {ctrlKey, key, metaKey, repeat, target} = e;\n\n const tagName = (target as HTMLElement)?.tagName?.toUpperCase();\n if (tagName === 'INPUT' || tagName === 'TEXTAREA') {\n return;\n }\n\n if (repeat) {\n return;\n }\n\n if ((metaKey || ctrlKey) && key === 'a') {\n e.preventDefault();\n TorrentStore.selectAllTorrents();\n }\n\n if ((metaKey || ctrlKey) && key === 'v') {\n (async () => {\n const text = await navigator?.clipboard?.readText();\n const isMagnetLink = text?.startsWith('magnet:?');\n const isTorrentLink = text?.startsWith('http') && text?.endsWith('.torrent');\n if (isMagnetLink || isTorrentLink) {\n e.preventDefault();\n UIStore.setActiveModal({id: 'add-torrents', tab: 'by-url', urls: [{id: 0, value: text}]});\n }\n })();\n }\n });\n\n const torrents = TorrentStore.filteredTorrents;\n const {torrentListViewSize = 'condensed'} = SettingStore.floodSettings;\n\n const isCondensed = torrentListViewSize === 'condensed';\n const isListEmpty = torrents == null || torrents.length === 0;\n\n let content: ReactNode = null;\n let torrentListHeading: ReactNode = null;\n if (!ClientStatusStore.isConnected) {\n content = (\n <div className=\"torrents__alert__wrapper\">\n <div className=\"torrents__alert\">\n <Trans id=\"torrents.list.cannot.connect\" />\n </div>\n </div>\n );\n } else if (isListEmpty || torrents == null) {\n content = (\n <div className=\"torrents__alert__wrapper\">\n <div className=\"torrents__alert\">\n <Trans id=\"torrents.list.no.torrents\" />\n </div>\n {TorrentFilterStore.isFilterActive ? (\n <div className=\"torrents__alert__action\">\n <Button\n onClick={() => {\n TorrentFilterStore.clearAllFilters();\n }}\n priority=\"tertiary\"\n >\n <Trans id=\"torrents.list.clear.filters\" />\n </Button>\n </div>\n ) : null}\n </div>\n );\n } else {\n if (isCondensed) {\n torrentListHeading = (\n <TableHeading\n onCellFocus={() => {\n if (listViewportOuterRef.current != null && listHeaderRef.current != null) {\n listViewportOuterRef.current.scrollLeft = listHeaderRef.current.scrollLeft;\n }\n }}\n onCellClick={(property: TorrentListColumn) => {\n const currentSort = SettingStore.floodSettings.sortTorrents;\n\n let nextDirection = SortDirections[property] ?? 'asc';\n\n if (currentSort.property === property) {\n nextDirection = currentSort.direction === 'asc' ? 'desc' : 'asc';\n }\n\n const sortBy = {\n property,\n direction: nextDirection,\n };\n\n SettingActions.saveSetting('sortTorrents', sortBy);\n }}\n onWidthsChange={(column: TorrentListColumn, width: number) => {\n const {torrentListColumnWidths = defaultFloodSettings.torrentListColumnWidths} = SettingStore.floodSettings;\n\n SettingActions.saveSetting('torrentListColumnWidths', {\n ...torrentListColumnWidths,\n [column]: width,\n });\n }}\n ref={listHeaderRef}\n />\n );\n }\n\n // itemSize must sync with styles &--is-condensed and &--is-expanded\n content = (\n <ListViewport\n className=\"torrent__list__viewport\"\n itemCount={torrents.length}\n itemKey={(index) => TorrentStore.filteredTorrents[index].hash}\n itemRenderer={TorrentListRowRenderer}\n itemSize={isCondensed ? 30 : 70}\n ref={listViewportRef}\n outerRef={(ref) => {\n const viewportDiv = ref;\n if (viewportDiv != null && viewportDiv.onscroll == null) {\n viewportDiv.onscroll = () => {\n if (listHeaderRef.current != null) {\n listHeaderRef.current.scrollLeft = viewportDiv.scrollLeft;\n }\n };\n }\n listViewportOuterRef.current = viewportDiv;\n }}\n />\n );\n }\n\n return (\n <TorrentListDropzone>\n <div className=\"torrent__list__wrapper\" role=\"table\">\n <ContextMenuMountPoint id=\"torrent-list-item\" />\n {torrentListHeading}\n {content}\n </div>\n <div className=\"dropzone__overlay\">\n <div className=\"dropzone__copy\">\n <div className=\"dropzone__icon\">\n <Files />\n </div>\n <Trans id=\"torrents.list.drop\" />\n </div>\n </div>\n </TorrentListDropzone>\n );\n});\n\nexport default TorrentList;\n","/**\n * Loads OverlayScrollbars CSS into the third-party layer\n *\n * This workaround is necessary due to a known css-loader bug:\n * https://github.com/webpack-contrib/css-loader/issues/1532\n *\n * The issue: css-loader ignores @layer definitions when @import statements\n * appear later in the same file. Wrapping an @import with @layer like:\n * @layer third-party { @import 'overlayscrollbars/overlayscrollbars.css'; }\n * does NOT work - the CSS either doesn't load or loads without the layer.\n *\n * Our solution: Use raw-loader to import the CSS as text, then manually\n * inject it into the DOM wrapped in the correct @layer.\n */\n\n// @ts-expect-error - webpack loader syntax not recognized by TypeScript\nimport overlayScrollbarsCSS from '!raw-loader!overlayscrollbars/styles/overlayscrollbars.css';\n\n// Only inject if we successfully loaded the CSS\nif (typeof overlayScrollbarsCSS === 'string' && typeof document !== 'undefined') {\n const styleElement = document.createElement('style');\n styleElement.textContent = `@layer third-party { ${overlayScrollbarsCSS} }`;\n styleElement.setAttribute('data-layer', 'third-party');\n document.head.appendChild(styleElement);\n}\n","import {FC, lazy, useEffect} from 'react';\n\nimport ActionBar from '@client/components/torrent-list/ActionBar';\nimport ApplicationContent from '@client/components/layout/ApplicationContent';\nimport ApplicationPanel from '@client/components/layout/ApplicationPanel';\nimport ApplicationView from '@client/components/layout/ApplicationView';\nimport FloodActions from '@client/actions/FloodActions';\nimport Sidebar from '@client/components/sidebar/Sidebar';\nimport TorrentList from '@client/components/torrent-list/TorrentList';\n\n// Load OverlayScrollbars CSS into the third-party layer\nimport '@client/util/loadOverlayScrollbars';\n\nconst Alerts = lazy(() => import('@client/components/alerts/Alerts'));\nconst Modals = lazy(() => import('@client/components/modals/Modals'));\n\nconst Overview: FC = () => {\n useEffect(() => {\n FloodActions.startActivityStream();\n }, []);\n\n return (\n <ApplicationView>\n <Sidebar />\n <ApplicationContent>\n <ApplicationPanel modifier=\"torrent-list\" className=\"view--torrent-list\">\n <ActionBar />\n <TorrentList />\n </ApplicationPanel>\n <Modals />\n <Alerts />\n </ApplicationContent>\n </ApplicationView>\n );\n};\n\nexport default Overview;\n","import {FC} from 'react';\n\nimport ApplicationView from '@client/components/layout/ApplicationView';\nimport AuthForm from '@client/components/auth/AuthForm';\n\nconst LoginView: FC = () => (\n <ApplicationView modifier=\"auth-form\">\n <AuthForm mode=\"login\" />\n </ApplicationView>\n);\n\nexport default LoginView;\n","import classnames from 'classnames';\n\nimport type {TorrentProperties} from '@shared/types/Torrent';\n\nexport const torrentStatusClasses = (\n {status, downRate, upRate}: Pick<TorrentProperties, 'status' | 'downRate' | 'upRate'>,\n ...classes: Array<string>\n): string =>\n classnames(classes, {\n 'torrent--has-error': status.includes('error'),\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-inactive': status.includes('inactive'),\n });\n\nexport const torrentStatusEffective = (status: TorrentProperties['status']): TorrentProperties['status'][number] => {\n let result: TorrentProperties['status'][number] = 'stopped';\n\n ['error', 'checking', 'stopped', 'downloading', 'seeding'].some((state) => {\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 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","import {FC} from 'react';\n\nimport AuthForm from '@client/components/auth/AuthForm';\nimport ApplicationView from '@client/components/layout/ApplicationView';\n\nconst LoginView: FC = () => (\n <ApplicationView modifier=\"auth-form\">\n <AuthForm mode=\"register\" />\n </ApplicationView>\n);\n\nexport default LoginView;\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","import classnames from 'classnames';\nimport {FC, ReactNode} from 'react';\n\ninterface ApplicationViewProps {\n children: ReactNode;\n modifier?: string;\n}\n\nconst ApplicationView: FC<ApplicationViewProps> = ({children, modifier}: ApplicationViewProps) => {\n const classes = classnames('application__view', {\n [`application__view--${modifier}`]: modifier != null,\n });\n\n return <div className={classes}>{children}</div>;\n};\n\nexport default ApplicationView;\n","import {FC} from 'react';\nimport {useLingui} from '@lingui/react';\n\nimport {compute, getTranslationString} from '../../util/size';\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) ? '—' : i18n.number(computed.value)}\n <em className=\"unit\">{translatedUnit}</em>\n </span>\n );\n};\n\nexport default Size;\n","import {FC, useRef, useState} from 'react';\nimport {useLingui} from '@lingui/react';\nimport {useNavigate} from 'react-router';\n\nimport {\n Button,\n Form,\n FormHandle,\n FormError,\n FormRow,\n Panel,\n PanelContent,\n PanelHeader,\n PanelFooter,\n Textbox,\n} from '@client/ui';\nimport AuthActions from '@client/actions/AuthActions';\n\nimport {AccessLevel} from '@shared/schema/constants/Auth';\n\nimport type {Credentials} from '@shared/schema/Auth';\nimport type {ClientConnectionSettings} from '@shared/schema/ClientConnectionSettings';\n\nimport ClientConnectionSettingsForm from '../general/connection-settings/ClientConnectionSettingsForm';\n\ntype LoginFormData = Pick<Credentials, 'username' | 'password'>;\ntype RegisterFormData = Pick<Credentials, 'username' | 'password'>;\n\ninterface AuthFormProps {\n mode: 'login' | 'register';\n}\n\nconst AuthForm: FC<AuthFormProps> = ({mode}: AuthFormProps) => {\n const {i18n} = useLingui();\n const formRef = useRef<FormHandle>(null);\n const clientConnectionSettingsRef = useRef<ClientConnectionSettings | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | {id: string} | undefined>(undefined);\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n const navigate = useNavigate();\n\n const isLoginMode = mode === 'login';\n\n return (\n <div className=\"application__entry-barrier\">\n <Panel spacing=\"large\">\n <Form\n onSubmit={(submission) => {\n submission.event.preventDefault();\n\n setIsSubmitting(true);\n\n const formData = submission.formData as Partial<LoginFormData> | Partial<RegisterFormData>;\n\n if (formData.username == null || formData.username === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.username.empty'});\n return;\n }\n\n if (formData.password == null || formData.password === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.password.empty'});\n return;\n }\n\n if (isLoginMode) {\n const credentials = formData as LoginFormData;\n\n AuthActions.authenticate({\n username: credentials.username,\n password: credentials.password,\n })\n .then(() => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n })\n .catch((error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n navigate('/login', {replace: true});\n });\n } else {\n const config = formData as RegisterFormData;\n\n if (clientConnectionSettingsRef.current == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n const connectionSettings = clientConnectionSettingsRef.current;\n if (connectionSettings == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n AuthActions.register({\n username: config.username,\n password: config.password,\n client: connectionSettings,\n level: AccessLevel.ADMINISTRATOR,\n }).then(\n () => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n },\n (error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n },\n );\n }\n }}\n ref={formRef}\n >\n <PanelHeader>\n <h1>{isLoginMode ? i18n._('auth.login') : i18n._('auth.create.an.account')}</h1>\n </PanelHeader>\n <PanelContent>\n <p className=\"copy--lead\">\n {isLoginMode ? i18n._('auth.login.intro') : i18n._('auth.create.an.account.intro')}\n </p>\n {errorMessage != null ? (\n <FormRow>\n <FormError isLoading={isSubmitting}>\n {typeof errorMessage === 'string' ? errorMessage : i18n._(errorMessage)}\n </FormError>\n </FormRow>\n ) : null}\n <FormRow>\n <Textbox placeholder={i18n._('auth.username')} id=\"username\" autoComplete=\"username\" />\n </FormRow>\n <FormRow>\n <Textbox\n placeholder={i18n._('auth.password')}\n id=\"password\"\n type=\"password\"\n autoComplete={isLoginMode ? 'current-password' : 'new-password'}\n />\n </FormRow>\n </PanelContent>\n {isLoginMode ? null : (\n <PanelContent hasBorder>\n <ClientConnectionSettingsForm\n onSettingsChange={(settings) => {\n clientConnectionSettingsRef.current = settings;\n }}\n />\n </PanelContent>\n )}\n <PanelFooter hasBorder>\n <FormRow justify=\"end\">\n <Button\n priority=\"tertiary\"\n onClick={() => {\n if (formRef.current != null) {\n formRef.current.resetForm();\n }\n }}\n >\n {i18n._('auth.input.clear')}\n </Button>\n <Button isLoading={isSubmitting} type=\"submit\">\n {isLoginMode ? i18n._('auth.log.in') : i18n._('auth.create.account')}\n </Button>\n </FormRow>\n </PanelFooter>\n </Form>\n </Panel>\n </div>\n );\n};\n\nexport default AuthForm;\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.MutableRefObject<() => 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"],"names":["memo","status","_jsx","Error","Spinner","Start","Stop","observer","percent","showPercentLabel","i18n","useLingui","clampedPercent","Math","min","max","percentLabel","number","maximumFractionDigits","minimumFractionDigits","_jsxs","className","classnames","children","TorrentStatusIcon","style","width","Action","clickHandler","icon","label","slug","noTip","classes","Tooltip","content","onClick","position","wrapperClassName","suppress","dateAdded","dateFinished","dateActive","downRate","downTotal","upRate","upTotal","DropdownButton","isFocusHandled","role","type","css","height","textAlign","_focusVisible","outline","baseClassName","dropdownWrapperClass","dropdownButtonClass","dropdownClickRef","direction","header","matchButtonWidth","menuItems","noWrap","trigger","handleItemSelect","onOpen","id","useRef","uniqueId","isOpen","UIStore","activeDropdownMenu","current","dropdownWrapperClassName","closeDropdown","useCallback","window","removeEventListener","setActiveDropdownMenu","useKeyPressEvent","openDropdown","addEventListener","handleDropdownClick","event","stopPropagation","contentElement","headerElement","listElement","map","items","index","item","itemIndex","selectable","selected","disabled","undefined","displayName","CSSTransition","classNames","timeout","enter","exit","TransitionGroup","SORT_PROPERTIES","props","selectedProperty","onSortChange","Trans","TorrentListColumns","sortProp","isSelected","directionIndicator","_","property","Dropdown","selection","nextDirection","SortDirections","sortTorrents","sortBy","torrentListViewSize","SettingStore","floodSettings","Menu","view","document","getElementsByClassName","classList","toggle","SortDropdown","newSortBy","SettingActions","saveSetting","TorrentActions","startTorrents","hashes","TorrentStore","selectedTorrents","stopTorrents","Add","setActiveModal","Remove","ApplicationContent","modifier","DiskUsageTooltipItem","value","Size","disks","DiskUsageStore","mountPoints","diskMap","reduce","disksByTarget","disk","target","diskNodes","filter","d","used","avail","size","styles","cursor","lodash","round","ProgressBar","length","title","FeedsButton","tooltipRef","dismissTooltip","ref","Feed","focusStyle","_focus","WebkitTapHighlightColor","SidebarFilter","name","_name","isActive","count","handleClick","nameSpanRef","createRef","overflowed","setOverflowed","useState","useEffect","scrollWidth","clientWidth","useRefTextOverflowed","expanded","setExpanded","expanderClassNames","display","Badge","buildLocationFilterTree","location","containedCount","onlyChild","separator","fullPath","includes","directoryName","TorrentFilterStore","setLocationFilters","locationFilter","containedSize","taxonomy","locationTree","filterElements","NOTIFICATIONS_PER_PAGE","fetchNotifications","paginationStart","FloodActions","limit","start","NotificationTopToolbar","notificationTotal","countStart","countEnd","NotificationItem","notification","date","Date","ts","year","month","day","hour","minute","data","NotificationBottomToolbar","onPrevClick","onClearClick","onNextClick","olderTo","newerFrom","ChevronLeft","ChevronRight","notificationsListRef","isLoading","setIsLoading","setPaginationStart","prevHeight","setPrevHeight","hasNotification","notifications","notificationCount","NotificationStore","total","finally","contentClassName","LoadingIndicatorDots","minHeight","newPaginationStart","clientHeight","clearNotifications","interactive","NotificationIcon","inputRef","searchFilter","isSearchActive","sidebar__item","search","setSearchFilter","blur","Close","Search","placeholder","onChange","SettingsButton","Settings","SidebarActions","HumanReadableSpeed","bytes","isSpeed","precision","getSpeedList","speedLimits","throttleGlobalDownSpeed","throttleGlobalUpSpeed","heading","currentThrottle","download","upload","speeds","insertCurrentThrottle","insertionPoint","sortedIndex","splice","unshift","speedListOptions","clientSettings","ClientActions","Limits","Expando","Chevron","transform","All","DownloadSmall","UploadSmall","Completed","Active","Inactive","setStatusFilters","statusCounts","statusFilter","statusSizes","expandoClick","tags","Object","keys","tagCounts","slice","sort","a","b","localeCompare","tag","setTagFilters","tagFilter","tagSizes","ThemeSwitchButton","ConfigStore","isPreferDark","setUserPreferDark","ThemeSwitch","trackers","trackerCounts","tracker","setTrackerFilters","trackerFilter","trackerSizes","icons","Download","infinity","InfinityIcon","Upload","inspectorPoint","getCurrentTransferRate","options","transferSummary","TransferDataStore","throttles","transferTotals","transferRates","secondaryDataClasses","ClientStatusStore","isConnected","timestampClasses","showHoverDuration","timestamp","Duration","suffix","trunc","now","TransferRateGraphGradient","x1","y1","x2","y2","offset","getSpeedAtHoverPoint","history","hoverPoint","upperSpeed","ceil","lowerSpeed","floor","handlerRefs","onHover","onMouseOut","isHovered","setIsHovered","historicalData","xScale","scaleLinear","domain","range","yScale","dataPoint","handleMouseMove","mouseX","invert","handleMouseOut","handleMouseOver","timestamps","interpolation","curveMonotoneX","TRANSFER_DIRECTIONS","fill","area","x","_dataPoint","y0","curve","line","y","r","opacity","graphInspectorPoint","setGraphInspectorPoint","sidebarWidth","setSidebarWidth","rateGraphHandlerRefs","Measure","onResize","contentRect","measureRef","onMouseMove","nativeEvent","clientX","onMouseOver","onFocus","onBlur","TransferRateDetails","TransferRateGraph","Sidebar","OverlayScrollbarsComponent","scrollbars","autoHide","clickScroll","dragScroll","theme","overflow","flexDirection","SpeedLimitDropdown","NotificationsButton","LogoutButton","TransferData","SearchBox","StatusFilters","TagFilters","TrackerFilters","LocationFilters","DiskUsage","flexGrow","activeContextMenu","triggerCoordinates","clickPosition","dismissContextMenu","ContextMenu","onOverlayClick","onOverlayRightClick","e","preventDefault","isIn","menuItemContent","menuItemClasses","labelAction","labelSecondary","dismissMenu","stopImmediatePropagation","onContextMenu","action","Overflow","forwardRef","onScroll","osRef","scrollbarRef","viewport","osInstance","elements","passive","ListViewport","itemCount","itemKey","itemRenderer","itemSize","outerRef","windowHeight","useWindowSize","FixedSizeList","outerElementType","isSmallScreen","overscanCount","pointerDownStyles","onCellClick","onCellFocus","onWidthsChange","isPointerDown","setIsPointerDown","focusedCell","focusedCellWidth","lastPointerX","tableHeading","useEnsuredForwardedRef","resizeLine","handlePointerMove","widthDelta","nextCellWidth","getBoundingClientRect","top","handlePointerUp","removeGlobalStyle","torrentListColumns","accumulator","visible","labelID","handle","torrentListColumnWidths","onPointerDown","addGlobalStyle","isSortActive","push","handleFileDrop","files","processedFiles","forEach","file","reader","FileReader","onload","result","split","tab","readAsDataURL","TorrentListDropzone","getRootProps","isDragActive","useDropzone","onDrop","noClick","noKeyboard","evt","getLastSelectedTorrent","InlineTorrentPropertyCheckbox","torrents","Checkmark","getContextMenuItems","torrent","changePriorityFuncRef","TorrentContextMenuActions","stop","remove","checkHash","reannounce","setTaxonomy","move","setTrackers","torrentDetails","hash","downloadContents","link","createElement","href","baseURI","body","appendChild","click","removeChild","downloadMetainfo","join","generateMagnet","setInitialSeeding","isInitialSeeding","setSequential","isSequential","setPriority","priority","PriorityMeter","level","maxLevel","priorityType","showLabel","clickHandled","ICONS","eta","Clock","sizeBytes","DiskFlat","DownloadThick","directory","FolderClosedSolid","Hash","Calendar","dateCreated","CalendarCreated","CalendarFinished","isPrivate","Lock","message","TrackerMessage","percentComplete","peers","Peers","ratio","Ratio","seeds","Seeds","trackerURIs","Radar","UploadThick","BooleanCell","CheckmarkThick","DateCell","ETACell","PeerCell","peersConnected","totalPeers","values","connected","of","RatioCell","TagsCell","TrackersCell","DefaultTorrentListCellContent","column","seedsConnected","seedsTotal","peersTotal","computed","get","torrentStatusEffective","torrentListShowProgressPercent","TorrentListCellContent","classNameOverride","showIcon","pointerEvents","userSelect","DetailNotAvailable","handleDoubleClick","handleRightClick","handleTouchStart","handleTouchEnd","handleKeyPress","dataAttributes","TorrentListCell","tabIndex","onDoubleClick","onTouchStart","onTouchEnd","onKeyPress","TorrentListCellPercentageNumber","columns","primarySection","secondarySection","tertiarySection","quaternarySection","alignItems","displayContextMenu","cancelable","mouseClientX","mouseClientY","clientY","touchClientX","touches","touchClientY","setSelectedTorrents","torrentContextMenuActions","defaultFloodSettings","setActiveContextMenu","some","displayTorrentDetails","selectTorrent","key","rowLocation","setRowLocation","shouldDisplayTorrentDetails","rowRef","isCondensed","torrentClasses","torrentStatusClasses","useLongPress","curRowLocation","abs","onTouchStartHooked","setTimeout","torrentTestId","torrentStatus","TorrentListRowCondensed","TorrentListRowExpanded","TorrentListRowRenderer","TorrentListRow","filteredTorrents","listHeaderRef","listViewportRef","listViewportOuterRef","reaction","filterTrigger","scrollTo","useEvent","ctrlKey","metaKey","repeat","tagName","toUpperCase","selectAllTorrents","text","navigator","clipboard","readText","isMagnetLink","startsWith","isTorrentLink","endsWith","urls","isListEmpty","torrentListHeading","isFilterActive","Button","clearAllFilters","TableHeading","scrollLeft","currentSort","viewportDiv","onscroll","ContextMenuMountPoint","Files","overlayScrollbarsCSS","styleElement","textContent","setAttribute","head","Alerts","lazy","Modals","Overview","startActivityStream","ApplicationView","ApplicationPanel","ActionBar","TorrentList","LoginView","AuthForm","mode","state","suffixElement","duration","cumSeconds","years","weeks","days","hours","minutes","seconds","timeRemaining","secondsToDuration","emitRequestSentAlert","AlertStore","add","emitTorrentAddedAlert","emitFailedToAddTorrentAlert","addTorrentsByUrls","axios","post","then","addTorrentsByFiles","createTorrent","responseType","concat","deleteTorrents","fetchMediainfo","cancelToken","res","fetchTorrentContents","fetchTorrentPeers","fetchTorrentTrackers","getTorrentContentsDataPermalink","indices","protocol","host","moveTorrents","async","patch","setFilePriority","setTags","handleSetTaxonomySuccess","compute","translatedUnit","getTranslationString","unit","baseUnit","Number","isNaN","formRef","clientConnectionSettingsRef","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","navigate","useNavigate","isLoginMode","Panel","spacing","Form","onSubmit","submission","formData","username","password","credentials","AuthActions","authenticate","replace","catch","error","config","connectionSettings","register","client","AccessLevel","ADMINISTRATOR","PanelHeader","PanelContent","FormRow","FormError","Textbox","autoComplete","hasBorder","ClientConnectionSettingsForm","onSettingsChange","settings","PanelFooter","justify","resetForm","priorityLevel","setPriorityLevel","changePriority","newLevel","labelElement","priorityLabelElement","PriorityLevels","levelElement"],"ignoreList":[],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(globalThis.webpackChunk_jesec_flood=globalThis.webpackChunk_jesec_flood||[]).push([[703],{233(t,e,s){t.exports=s.p+"static/media/mz.facb4ea3.png"},240(t,e,s){t.exports=s.p+"static/media/ec.349d9bd7.png"},357(t,e,s){t.exports=s.p+"static/media/pa.b28a9059.png"},524(t,e,s){t.exports=s.p+"static/media/km.7bbed3e9.png"},679(t,e,s){t.exports=s.p+"static/media/bi.4923e3a3.png"},1078(t,e,s){t.exports=s.p+"static/media/so.b455e3bf.png"},1206(t,e,s){t.exports=s.p+"static/media/kg.2c47c2af.png"},1429(t,e,s){t.exports=s.p+"static/media/cd.a5bfda53.png"},1530(t,e,s){t.exports=s.p+"static/media/hn.64ee6aad.png"},2111(t,e,s){t.exports=s.p+"static/media/cn.e6a26073.png"},2514(t,e,s){t.exports=s.p+"static/media/bd.516278fc.png"},2616(t,e,s){t.exports=s.p+"static/media/sa.859049c8.png"},2627(t,e,s){t.exports=s.p+"static/media/ad.1b24595d.png"},3095(t,e,s){t.exports=s.p+"static/media/cf.de7d5d92.png"},3650(t,e,s){t.exports=s.p+"static/media/my.916a8392.png"},3781(t,e,s){t.exports=s.p+"static/media/dm.f452e6cd.png"},3792(t,e,s){t.exports=s.p+"static/media/bf.50bfcb31.png"},4243(t,e,s){t.exports=s.p+"static/media/ls.901ddb71.png"},4250(t,e,s){t.exports=s.p+"static/media/sc.3293efde.png"},4961(t,e,s){t.exports=s.p+"static/media/zw.a6809447.png"},5032(t,e,s){t.exports=s.p+"static/media/pt.1f82dc04.png"},5725(t,e,s){t.exports=s.p+"static/media/az.63afef5b.png"},6182(t,e,s){s.r(e),s.d(e,{default:()=>x});var a=s(2618),p=s(6488),i=s(3443),c=s(6942),n=s.n(c),d=s(9161),r=s(7550),o=s(942),l=s(4848);const m=(0,i.PA)(t=>{const{id:e}=t,{count:s,type:a}=r.A.alerts[e]||{};if(null==e||null==s||null==a)return null;const p=n()("alert",{"is-success":"success"===a,"is-error":"error"===a});let i=(0,l.jsx)(o.Ol,{});return"error"===a&&(i=(0,l.jsx)(o.qz,{})),(0,l.jsxs)("li",{className:p,children:[i,(0,l.jsx)("span",{className:"alert__content",children:(0,l.jsx)(d.x6,{id:e,values:{count:s,countElement:(0,l.jsx)("span",{className:"alert__count",children:s})}})})]})}),x=(0,i.PA)(()=>{const{sortedAlerts:t}=r.A;return(0,l.jsx)(a.A,{children:null!=t&&t.length>0?(0,l.jsx)(p.A,{classNames:"alerts__list",timeout:{enter:250,exit:250},children:(0,l.jsx)("ul",{className:"alerts__list",children:t.map(t=>(0,l.jsx)(m,{id:t.id},t.id))},"alerts-list")}):null})})},6336(t,e,s){t.exports=s.p+"static/media/nr.7527cc38.png"},6571(t,e,s){t.exports=s.p+"static/media/jm.20330ef4.png"},7066(t,e,s){t.exports=s.p+"static/media/uy.a943f85e.png"},7256(t,e,s){t.exports=s.p+"static/media/nz.738be05b.png"},7559(t,e,s){t.exports=s.p+"static/media/gb.e00065bf.png"},7941(t,e,s){t.exports=s.p+"static/media/st.5ae44155.png"},8052(t,e,s){t.exports=s.p+"static/media/gy.a4f62b6c.png"},8579(t,e,s){t.exports=s.p+"static/media/il.cd1d1faf.png"},9160(t,e,s){t.exports=s.p+"static/media/bn.077671e2.png"},9332(t,e,s){t.exports=s.p+"static/media/br.ec051f0c.png"},9923(t,e,s){t.exports=s.p+"static/media/sr.5adc1c00.png"},9985(t,e,s){t.exports=s.p+"static/media/kh.4732c810.png"}}]);
2
- //# sourceMappingURL=flag0.390f4d80.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/flag0.390f4d80.chunk.js","mappings":"q+CAYA,MAkCA,GAlC8BA,EAAAA,EAAAA,IAAUC,IACtC,MAAM,GAACC,GAAMD,GACP,MAACE,EAAK,KAAEC,GAAQC,EAAAA,EAAWC,OAAOJ,IAAO,CAAC,EAEhD,GAAU,MAANA,GAAuB,MAATC,GAAyB,MAARC,EACjC,OAAO,KAGT,MAAMG,EAAeC,IAAW,QAAS,CACvC,aAAuB,YAATJ,EACd,WAAqB,UAATA,IAGd,IAAIK,GAAOC,EAAAA,EAAAA,KAACC,EAAAA,GAAe,IAK3B,MAJa,UAATP,IACFK,GAAOC,EAAAA,EAAAA,KAACE,EAAAA,GAAiB,MAIzBC,EAAAA,EAAAA,MAAA,MAAIC,UAAWP,EAAaQ,SAAA,CACzBN,GACDC,EAAAA,EAAAA,KAAA,QAAMI,UAAU,iBAAgBC,UAC9BL,EAAAA,EAAAA,KAACM,EAAAA,GAAK,CACJd,GAAIA,EACJe,OAAQ,CACNd,QACAe,cAAcR,EAAAA,EAAAA,KAAA,QAAMI,UAAU,eAAcC,SAAEZ,cCb1D,GAlBmBH,EAAAA,EAAAA,IAAS,KAC1B,MAAM,aAACmB,GAAgBd,EAAAA,EAEvB,OACEK,EAAAA,EAAAA,KAACU,EAAAA,EAAe,CAAAL,SACG,MAAhBI,GAAwBA,EAAaE,OAAS,GAC7CX,EAAAA,EAAAA,KAACY,EAAAA,EAAa,CAACC,WAAW,eAAeC,QAAS,CAACC,MAAO,IAAKC,KAAM,KAAKX,UACxEL,EAAAA,EAAAA,KAAA,MAAII,UAAU,eAAcC,SACzBI,EAAaQ,IAAKC,IACjBlB,EAAAA,EAAAA,KAACmB,EAAK,CAAgB3B,GAAI0B,EAAM1B,IAApB0B,EAAM1B,MAFW,iBAMjC,Q","sources":["client/src/javascript/components/alerts/Alert.tsx","client/src/javascript/components/alerts/Alerts.tsx"],"sourcesContent":["import {FC} from 'react';\nimport classnames from 'classnames';\nimport {observer} from 'mobx-react-lite';\nimport {Trans} from '@lingui/react';\n\nimport AlertStore from '@client/stores/AlertStore';\nimport {CircleCheckmark, CircleExclamation} from '@client/ui/icons';\n\ninterface AlertProps {\n id: string;\n}\n\nconst Alert: FC<AlertProps> = observer((props: AlertProps) => {\n const {id} = props;\n const {count, type} = AlertStore.alerts[id] || {};\n\n if (id == null || count == null || type == null) {\n return null;\n }\n\n const alertClasses = classnames('alert', {\n 'is-success': type === 'success',\n 'is-error': type === 'error',\n });\n\n let icon = <CircleCheckmark />;\n if (type === 'error') {\n icon = <CircleExclamation />;\n }\n\n return (\n <li className={alertClasses}>\n {icon}\n <span className=\"alert__content\">\n <Trans\n id={id}\n values={{\n count,\n countElement: <span className=\"alert__count\">{count}</span>,\n }}\n />\n </span>\n </li>\n );\n});\n\nexport default Alert;\n","import {CSSTransition, TransitionGroup} from 'react-transition-group';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport Alert from './Alert';\nimport AlertStore from '../../stores/AlertStore';\n\nconst Alerts: FC = observer(() => {\n const {sortedAlerts} = AlertStore;\n\n return (\n <TransitionGroup>\n {sortedAlerts != null && sortedAlerts.length > 0 ? (\n <CSSTransition classNames=\"alerts__list\" timeout={{enter: 250, exit: 250}}>\n <ul className=\"alerts__list\" key=\"alerts-list\">\n {sortedAlerts.map((alert) => (\n <Alert key={alert.id} id={alert.id} />\n ))}\n </ul>\n </CSSTransition>\n ) : null}\n </TransitionGroup>\n );\n});\n\nexport default Alerts;\n"],"names":["observer","props","id","count","type","AlertStore","alerts","alertClasses","classnames","icon","_jsx","CircleCheckmark","CircleExclamation","_jsxs","className","children","Trans","values","countElement","sortedAlerts","TransitionGroup","length","CSSTransition","classNames","timeout","enter","exit","map","alert","Alert"],"ignoreList":[],"sourceRoot":""}
@@ -1 +0,0 @@
1
- "use strict";(globalThis.webpackChunk_jesec_flood=globalThis.webpackChunk_jesec_flood||[]).push([[894],{697(t,p,a){t.exports=a.p+"static/media/bg.d9346b96.png"},891(t,p,a){t.exports=a.p+"static/media/lk.6fa85802.png"},1310(t,p,a){t.exports=a.p+"static/media/bh.f06d5914.png"},1376(t,p,a){t.exports=a.p+"static/media/es.2a6eaee4.png"},1491(t,p,a){t.exports=a.p+"static/media/va.a29e1b53.png"},1843(t,p,a){t.exports=a.p+"static/media/cr.c895e035.png"},1866(t,p,a){t.exports=a.p+"static/media/ae.4dd8f55e.png"},2042(t,p,a){t.exports=a.p+"static/media/lb.7a7c15a9.png"},2115(t,p,a){t.exports=a.p+"static/media/dk.da382fe2.png"},2197(t,p,a){t.exports=a.p+"static/media/sd.19c94faa.png"},2339(t,p,a){t.exports=a.p+"static/media/pg.380115db.png"},2508(t,p,a){t.exports=a.p+"static/media/tl.5edd8ea7.png"},2764(t,p,a){t.exports=a.p+"static/media/mw.960cd4fb.png"},2765(t,p,a){t.exports=a.p+"static/media/mn.dc1daa04.png"},2794(t,p,a){t.exports=a.p+"static/media/vu.48b64cf3.png"},2832(t,p,a){t.exports=a.p+"static/media/us.8523c31d.png"},2985(t,p,a){t.exports=a.p+"static/media/ch.445f47a1.png"},3159(t,p,a){t.exports=a.p+"static/media/sv.43aa6cdf.png"},3173(t,p,a){t.exports=a.p+"static/media/lu.c9872bc1.png"},3504(t,p,a){t.exports=a.p+"static/media/cy.b31f43a9.png"},3593(t,p,a){t.exports=a.p+"static/media/hu.bb30f05d.png"},3643(t,p,a){t.exports=a.p+"static/media/be.08ec4a8d.png"},3777(t,p,a){t.exports=a.p+"static/media/bo.8fb15fc6.png"},3799(t,p,a){t.exports=a.p+"static/media/za.090a856f.png"},3828(t,p,a){t.exports=a.p+"static/media/vn.7d2eff1b.png"},3936(t,p,a){t.exports=a.p+"static/media/gm.81cd9f75.png"},4076(t,p,a){t.exports=a.p+"static/media/lt.9209ace3.png"},4155(t,p,a){t.exports=a.p+"static/media/mx.39b78eb2.png"},4650(t,p,a){t.exports=a.p+"static/media/tj.d20c5570.png"},4901(t,p,a){t.exports=a.p+"static/media/ar.7e57ef92.png"},4986(t,p,a){t.exports=a.p+"static/media/ma.ce5f697b.png"},5073(t,p,a){t.exports=a.p+"static/media/gt.9d81c52e.png"},5544(t,p,a){t.exports=a.p+"static/media/th.683600c7.png"},5596(t,p,a){t.exports=a.p+"static/media/cu.e486c055.png"},5666(t,p,a){t.exports=a.p+"static/media/am.c84ee0cf.png"},5681(t,p,a){t.exports=a.p+"static/media/mr.7cbca6d0.png"},5827(t,p,a){t.exports=a.p+"static/media/sb.4ad27b27.png"},6583(t,p,a){t.exports=a.p+"static/media/gr.26f3ac0b.png"},6585(t,p,a){t.exports=a.p+"static/media/rw.e8aecba0.png"},6770(t,p,a){t.exports=a.p+"static/media/bt.4217b804.png"},6825(t,p,a){t.exports=a.p+"static/media/iq.a9b670ab.png"},6887(t,p,a){t.exports=a.p+"static/media/by.d247fe16.png"},6916(t,p,a){t.exports=a.p+"static/media/eg.ccbf3f45.png"},7198(t,p,a){t.exports=a.p+"static/media/mu.d93db6c7.png"},7304(t,p,a){t.exports=a.p+"static/media/ca.25743e11.png"},7415(t,p,a){t.exports=a.p+"static/media/hk.56555c3f.png"},7568(t,p,a){t.exports=a.p+"static/media/ao.a7c9214e.png"},7887(t,p,a){t.exports=a.p+"static/media/pk.094f9517.png"},7904(t,p,a){t.exports=a.p+"static/media/fj.7724d800.png"},8109(t,p,a){t.exports=a.p+"static/media/sl.4b174b1c.png"},8177(t,p,a){t.exports=a.p+"static/media/uz.25552673.png"},8247(t,p,a){t.exports=a.p+"static/media/cv.a9585acf.png"},8421(t,p,a){t.exports=a.p+"static/media/tm.15960215.png"},8476(t,p,a){t.exports=a.p+"static/media/gq.e8ad58be.png"},8635(t,p,a){t.exports=a.p+"static/media/na.472666a9.png"},8754(t,p,a){t.exports=a.p+"static/media/ye.311a0e50.png"},8915(t,p,a){t.exports=a.p+"static/media/ni.7140131c.png"},8999(t,p,a){t.exports=a.p+"static/media/do.c6bd7637.png"},9084(t,p,a){t.exports=a.p+"static/media/ga.77ed474c.png"},9298(t,p,a){t.exports=a.p+"static/media/ie.b4dd1f19.png"},9534(t,p,a){t.exports=a.p+"static/media/nl.4c04aa96.png"},9659(t,p,a){t.exports=a.p+"static/media/fi.331f70fd.png"},9672(t,p,a){t.exports=a.p+"static/media/om.b25e0a17.png"},9732(t,p,a){t.exports=a.p+"static/media/ke.ab2e43b8.png"},9875(t,p,a){t.exports=a.p+"static/media/kz.ea47ef79.png"},9883(t,p,a){t.exports=a.p+"static/media/ru.a9b948c1.png"},9950(t,p,a){t.exports=a.p+"static/media/cg.a47b626b.png"}}]);