sa2kit 1.6.30 → 1.6.32

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 (251) hide show
  1. package/dist/AliyunOSSProvider-4W47OFEK.mjs +6 -0
  2. package/dist/{AliyunOSSProvider-KJYRIZES.mjs.map → AliyunOSSProvider-4W47OFEK.mjs.map} +1 -1
  3. package/dist/AliyunOSSProvider-HCNGDJL7.js +15 -0
  4. package/dist/{AliyunOSSProvider-FWAKUB2T.js.map → AliyunOSSProvider-HCNGDJL7.js.map} +1 -1
  5. package/dist/ConfigService-3DIC6C3Q.js +21 -0
  6. package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
  7. package/dist/ConfigService-V6ZK273Z.mjs +4 -0
  8. package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
  9. package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
  10. package/dist/{LocalStorageProvider-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
  11. package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
  12. package/dist/{LocalStorageProvider-XSRCUXOU.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
  13. package/dist/PMXParser-2VTA737I.js +13 -0
  14. package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
  15. package/dist/PMXParser-RNVQL76A.mjs +4 -0
  16. package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
  17. package/dist/analytics/index.js +46 -45
  18. package/dist/analytics/index.js.map +1 -1
  19. package/dist/analytics/index.mjs +45 -44
  20. package/dist/analytics/index.mjs.map +1 -1
  21. package/dist/analytics/server/index.js +4 -4
  22. package/dist/analytics/server/index.js.map +1 -1
  23. package/dist/analytics/server/index.mjs +4 -4
  24. package/dist/analytics/server/index.mjs.map +1 -1
  25. package/dist/api/index.js +5 -5
  26. package/dist/api/index.js.map +1 -1
  27. package/dist/api/index.mjs +5 -5
  28. package/dist/api/index.mjs.map +1 -1
  29. package/dist/audioDetection/index.js +17 -16
  30. package/dist/audioDetection/index.js.map +1 -1
  31. package/dist/audioDetection/index.mjs +17 -16
  32. package/dist/audioDetection/index.mjs.map +1 -1
  33. package/dist/auth/client/index.js +4 -4
  34. package/dist/auth/client/index.mjs +1 -1
  35. package/dist/auth/components/index.js +3 -3
  36. package/dist/auth/components/index.js.map +1 -1
  37. package/dist/auth/components/index.mjs +3 -3
  38. package/dist/auth/components/index.mjs.map +1 -1
  39. package/dist/auth/index.js +29 -29
  40. package/dist/auth/index.mjs +5 -5
  41. package/dist/auth/middleware/index.js +3 -3
  42. package/dist/auth/middleware/index.mjs +2 -2
  43. package/dist/auth/routes/index.js +14 -14
  44. package/dist/auth/routes/index.mjs +2 -2
  45. package/dist/auth/services/index.js +7 -7
  46. package/dist/auth/services/index.mjs +1 -1
  47. package/dist/calendar/index.js +146 -182
  48. package/dist/calendar/index.js.map +1 -1
  49. package/dist/calendar/index.mjs +139 -175
  50. package/dist/calendar/index.mjs.map +1 -1
  51. package/dist/calendar/routes/index.js +1 -1
  52. package/dist/calendar/routes/index.js.map +1 -1
  53. package/dist/calendar/routes/index.mjs +1 -1
  54. package/dist/calendar/routes/index.mjs.map +1 -1
  55. package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
  56. package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
  57. package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
  58. package/dist/chunk-25OFOKNF.js.map +1 -0
  59. package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
  60. package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
  61. package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
  62. package/dist/chunk-3NHAT7D4.mjs.map +1 -0
  63. package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
  64. package/dist/chunk-4HC6M7FK.mjs.map +1 -0
  65. package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
  66. package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
  67. package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
  68. package/dist/chunk-5YQ62BKX.mjs.map +1 -0
  69. package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
  70. package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
  71. package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
  72. package/dist/chunk-7VRT55ZD.js.map +1 -0
  73. package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
  74. package/dist/chunk-EB4NR623.mjs.map +1 -0
  75. package/dist/chunk-EI27JKND.mjs +1988 -0
  76. package/dist/chunk-EI27JKND.mjs.map +1 -0
  77. package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
  78. package/dist/chunk-GBPLX42J.js.map +1 -0
  79. package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
  80. package/dist/chunk-HDEOCX2L.mjs.map +1 -0
  81. package/dist/{chunk-TV3VKRJK.mjs → chunk-HDMIOOZY.mjs} +38 -68
  82. package/dist/chunk-HDMIOOZY.mjs.map +1 -0
  83. package/dist/{chunk-OPPF3326.js → chunk-HJ6MH7J7.js} +39 -69
  84. package/dist/chunk-HJ6MH7J7.js.map +1 -0
  85. package/dist/chunk-KO73EBUT.js +80 -0
  86. package/dist/chunk-KO73EBUT.js.map +1 -0
  87. package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
  88. package/dist/chunk-KZKIH4AS.mjs.map +1 -0
  89. package/dist/{chunk-LX4XX6W7.js → chunk-L47ZOYHL.js} +15 -89
  90. package/dist/chunk-L47ZOYHL.js.map +1 -0
  91. package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
  92. package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
  93. package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
  94. package/dist/chunk-NJ2SNXBJ.js.map +1 -0
  95. package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
  96. package/dist/chunk-PE5EAHZK.mjs.map +1 -0
  97. package/dist/{chunk-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
  98. package/dist/chunk-Q5EDCKQA.js.map +1 -0
  99. package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
  100. package/dist/chunk-RBKGYWME.js.map +1 -0
  101. package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
  102. package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
  103. package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
  104. package/dist/chunk-TDCDEBGP.js.map +1 -0
  105. package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
  106. package/dist/chunk-UIFFDRTE.js.map +1 -0
  107. package/dist/{chunk-T5OZHYVM.mjs → chunk-UKT3PLON.mjs} +13 -85
  108. package/dist/chunk-UKT3PLON.mjs.map +1 -0
  109. package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
  110. package/dist/chunk-UL6XJGUZ.js.map +1 -0
  111. package/dist/chunk-VVWQTO4Y.mjs +77 -0
  112. package/dist/chunk-VVWQTO4Y.mjs.map +1 -0
  113. package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
  114. package/dist/chunk-WA67GZSZ.js.map +1 -0
  115. package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
  116. package/dist/chunk-WEEXCPSE.mjs.map +1 -0
  117. package/dist/chunk-XGBE4SUV.js +2093 -0
  118. package/dist/chunk-XGBE4SUV.js.map +1 -0
  119. package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
  120. package/dist/chunk-XJ7ZAGC5.js.map +1 -0
  121. package/dist/{chunk-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
  122. package/dist/chunk-YOTQG4NP.mjs.map +1 -0
  123. package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
  124. package/dist/chunk-Z36R3P62.mjs.map +1 -0
  125. package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
  126. package/dist/chunk-ZWQJSZEY.js.map +1 -0
  127. package/dist/config/index.js +6 -6
  128. package/dist/config/index.js.map +1 -1
  129. package/dist/config/index.mjs +6 -6
  130. package/dist/config/index.mjs.map +1 -1
  131. package/dist/config/server/index.js +37 -37
  132. package/dist/config/server/index.js.map +1 -1
  133. package/dist/config/server/index.mjs +37 -37
  134. package/dist/config/server/index.mjs.map +1 -1
  135. package/dist/i18n/index.d.mts +2 -2
  136. package/dist/i18n/index.d.ts +2 -2
  137. package/dist/i18n/index.js +16 -17
  138. package/dist/i18n/index.js.map +1 -1
  139. package/dist/i18n/index.mjs +16 -17
  140. package/dist/i18n/index.mjs.map +1 -1
  141. package/dist/imageCrop/index.js +11 -10
  142. package/dist/imageCrop/index.js.map +1 -1
  143. package/dist/imageCrop/index.mjs +11 -10
  144. package/dist/imageCrop/index.mjs.map +1 -1
  145. package/dist/index.d.mts +185 -100
  146. package/dist/index.d.ts +185 -100
  147. package/dist/index.js +225 -249
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +80 -104
  150. package/dist/index.mjs.map +1 -1
  151. package/dist/logger/index.js +6 -6
  152. package/dist/logger/index.mjs +1 -1
  153. package/dist/mikuFusionGame/index.d.mts +112 -0
  154. package/dist/mikuFusionGame/index.d.ts +112 -0
  155. package/dist/mikuFusionGame/index.js +680 -0
  156. package/dist/mikuFusionGame/index.js.map +1 -0
  157. package/dist/mikuFusionGame/index.mjs +667 -0
  158. package/dist/mikuFusionGame/index.mjs.map +1 -0
  159. package/dist/mmd/admin/index.js +11 -10
  160. package/dist/mmd/admin/index.js.map +1 -1
  161. package/dist/mmd/admin/index.mjs +11 -10
  162. package/dist/mmd/admin/index.mjs.map +1 -1
  163. package/dist/mmd/index.js +223 -241
  164. package/dist/mmd/index.js.map +1 -1
  165. package/dist/mmd/index.mjs +220 -238
  166. package/dist/mmd/index.mjs.map +1 -1
  167. package/dist/mmd/server/index.js +6 -6
  168. package/dist/mmd/server/index.js.map +1 -1
  169. package/dist/mmd/server/index.mjs +6 -6
  170. package/dist/mmd/server/index.mjs.map +1 -1
  171. package/dist/music/index.js +16 -16
  172. package/dist/music/index.mjs +2 -2
  173. package/dist/music/server/index.js +8 -8
  174. package/dist/music/server/index.mjs +1 -1
  175. package/dist/request/index.js +2 -2
  176. package/dist/request/index.js.map +1 -1
  177. package/dist/request/index.mjs +2 -2
  178. package/dist/request/index.mjs.map +1 -1
  179. package/dist/storage/index.js +15 -14
  180. package/dist/storage/index.mjs +3 -2
  181. package/dist/testYourself/admin/index.js +3 -3
  182. package/dist/testYourself/admin/index.mjs +1 -1
  183. package/dist/testYourself/index.js +22 -22
  184. package/dist/testYourself/index.js.map +1 -1
  185. package/dist/testYourself/index.mjs +14 -14
  186. package/dist/testYourself/index.mjs.map +1 -1
  187. package/dist/testYourself/server/index.js +4 -4
  188. package/dist/testYourself/server/index.mjs +1 -1
  189. package/dist/universalExport/index.d.mts +3 -3
  190. package/dist/universalExport/index.d.ts +3 -3
  191. package/dist/universalExport/index.js +48 -47
  192. package/dist/universalExport/index.js.map +1 -1
  193. package/dist/universalExport/index.mjs +48 -47
  194. package/dist/universalExport/index.mjs.map +1 -1
  195. package/dist/universalExport/server/index.js +29 -29
  196. package/dist/universalExport/server/index.js.map +1 -1
  197. package/dist/universalExport/server/index.mjs +28 -28
  198. package/dist/universalExport/server/index.mjs.map +1 -1
  199. package/dist/universalFile/index.d.mts +3 -3
  200. package/dist/universalFile/index.d.ts +3 -3
  201. package/dist/universalFile/index.js +73 -72
  202. package/dist/universalFile/index.js.map +1 -1
  203. package/dist/universalFile/index.mjs +73 -72
  204. package/dist/universalFile/index.mjs.map +1 -1
  205. package/dist/universalFile/server/index.js +258 -260
  206. package/dist/universalFile/server/index.js.map +1 -1
  207. package/dist/universalFile/server/index.mjs +244 -246
  208. package/dist/universalFile/server/index.mjs.map +1 -1
  209. package/dist/utils/index.js +11 -11
  210. package/dist/utils/index.mjs +2 -2
  211. package/package.json +25 -31
  212. package/dist/AliyunOSSProvider-FWAKUB2T.js +0 -15
  213. package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
  214. package/dist/ConfigService-7MEZXKJ5.js +0 -21
  215. package/dist/ConfigService-BV57YYFW.mjs +0 -4
  216. package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
  217. package/dist/LocalStorageProvider-XSRCUXOU.js +0 -15
  218. package/dist/PMXParser-L6IWHL4I.mjs +0 -4
  219. package/dist/PMXParser-YBS3B6HM.js +0 -13
  220. package/dist/chunk-3BGPZN4X.mjs.map +0 -1
  221. package/dist/chunk-3WOAPLEG.mjs.map +0 -1
  222. package/dist/chunk-6PRFP5EG.js.map +0 -1
  223. package/dist/chunk-6YKMCPQI.mjs.map +0 -1
  224. package/dist/chunk-7Z5LLJ3A.js.map +0 -1
  225. package/dist/chunk-A3UP56MS.js.map +0 -1
  226. package/dist/chunk-CD77U7LZ.js.map +0 -1
  227. package/dist/chunk-CLKKZSPZ.js.map +0 -1
  228. package/dist/chunk-CNTILN5J.mjs.map +0 -1
  229. package/dist/chunk-DUHZ7VZP.js.map +0 -1
  230. package/dist/chunk-DW2ZTOCV.js +0 -1727
  231. package/dist/chunk-DW2ZTOCV.js.map +0 -1
  232. package/dist/chunk-E7RGBAYJ.js.map +0 -1
  233. package/dist/chunk-JZXJQMVE.js.map +0 -1
  234. package/dist/chunk-KQGP6BTS.mjs.map +0 -1
  235. package/dist/chunk-LFG6FPM5.mjs +0 -1597
  236. package/dist/chunk-LFG6FPM5.mjs.map +0 -1
  237. package/dist/chunk-LX4XX6W7.js.map +0 -1
  238. package/dist/chunk-LZHMNOED.js.map +0 -1
  239. package/dist/chunk-MW4BCIZC.mjs.map +0 -1
  240. package/dist/chunk-OCR5DS4C.mjs.map +0 -1
  241. package/dist/chunk-OLHGZXN3.mjs.map +0 -1
  242. package/dist/chunk-OPPF3326.js.map +0 -1
  243. package/dist/chunk-QAT2RWAO.mjs.map +0 -1
  244. package/dist/chunk-QU5OT4DF.js.map +0 -1
  245. package/dist/chunk-T5OZHYVM.mjs.map +0 -1
  246. package/dist/chunk-TFQF2HDO.mjs.map +0 -1
  247. package/dist/chunk-TOC5FSHP.js.map +0 -1
  248. package/dist/chunk-TV3VKRJK.mjs.map +0 -1
  249. package/dist/chunk-UOFTHYIH.js.map +0 -1
  250. package/dist/chunk-VRTRSEEH.mjs.map +0 -1
  251. package/dist/chunk-ZI25QCHD.mjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  export { CDNProviderError, FileProcessingError, FileServiceError, FileUploadError, StorageProviderError } from '../chunk-CIVO4R6N.mjs';
2
2
  import '../chunk-BJTO5JO5.mjs';
3
3
  import React2, { useState, useRef, useCallback, useEffect } from 'react';
4
+ import { clsx } from 'clsx';
4
5
  import { Upload, AlertCircle, CheckCircle2, Loader2, X, Image, Film, Music, FileText } from 'lucide-react';
5
6
 
6
7
  // src/universalFile/constants.ts
@@ -59,19 +60,19 @@ var DOCUMENT_EXTENSIONS = [
59
60
  var API_BASE_PATH = "/api/universal-file";
60
61
  var API_ENDPOINTS = {
61
62
  /** 上传文件 */
62
- UPLOAD: `${API_BASE_PATH}/upload`,
63
+ UPLOAD: API_BASE_PATH + "/upload",
63
64
  /** 获取文件URL */
64
- GET_URL: (fileId) => `${API_BASE_PATH}/files/${fileId}/url`,
65
+ GET_URL: (fileId) => API_BASE_PATH + "/files/" + fileId + "/url",
65
66
  /** 获取文件元数据 */
66
- GET_METADATA: (fileId) => `${API_BASE_PATH}/files/${fileId}`,
67
+ GET_METADATA: (fileId) => API_BASE_PATH + "/files/" + fileId,
67
68
  /** 删除文件 */
68
- DELETE: (fileId) => `${API_BASE_PATH}/files/${fileId}`,
69
+ DELETE: (fileId) => API_BASE_PATH + "/files/" + fileId,
69
70
  /** 查询文件列表 */
70
- QUERY: `${API_BASE_PATH}/files`,
71
+ QUERY: API_BASE_PATH + "/files",
71
72
  /** 批量删除 */
72
- BATCH_DELETE: `${API_BASE_PATH}/files/batch-delete`,
73
+ BATCH_DELETE: API_BASE_PATH + "/files/batch-delete",
73
74
  /** 获取上传进度 */
74
- GET_PROGRESS: (fileId) => `${API_BASE_PATH}/upload/${fileId}/progress`
75
+ GET_PROGRESS: (fileId) => API_BASE_PATH + "/upload/" + fileId + "/progress"
75
76
  };
76
77
  var ERROR_CODES = {
77
78
  /** 文件上传错误 */
@@ -110,7 +111,7 @@ function formatFileSize(bytes) {
110
111
  const units = ["B", "KB", "MB", "GB", "TB"];
111
112
  const k = 1024;
112
113
  const i = Math.floor(Math.log(bytes) / Math.log(k));
113
- return `${(bytes / Math.pow(k, i)).toFixed(2)} ${units[i]}`;
114
+ return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
114
115
  }
115
116
  function parseFileSize(sizeStr) {
116
117
  const match = sizeStr.match(/^(\d+(?:\.\d+)?)\s*([KMGT]?B)$/i);
@@ -198,7 +199,7 @@ function sanitizeFileName(fileName) {
198
199
  }
199
200
  function generateUniqueFileName(originalName, fileId) {
200
201
  const ext = getFileExtension(originalName);
201
- return `${fileId}${ext}`;
202
+ return fileId + ext;
202
203
  }
203
204
  function generateStoragePath(moduleId, fileName, options) {
204
205
  const parts = [];
@@ -235,7 +236,7 @@ function validateFileSize(file, maxSize) {
235
236
  if (file.size > maxSize) {
236
237
  return {
237
238
  valid: false,
238
- error: `\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: ${formatFileSize(file.size)} > ${formatFileSize(maxSize)}`
239
+ error: "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: " + formatFileSize(file.size) + " > " + formatFileSize(maxSize)
239
240
  };
240
241
  }
241
242
  return { valid: true };
@@ -245,7 +246,7 @@ function validateFileType(file, allowedTypes) {
245
246
  if (!isMimeTypeSupported(mimeType, allowedTypes)) {
246
247
  return {
247
248
  valid: false,
248
- error: `\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: ${mimeType}`
249
+ error: "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + mimeType
249
250
  };
250
251
  }
251
252
  return { valid: true };
@@ -284,7 +285,7 @@ function buildQueryString(params) {
284
285
  }
285
286
  });
286
287
  const queryString = searchParams.toString();
287
- return queryString ? `?${queryString}` : "";
288
+ return queryString ? "?" + queryString : "";
288
289
  }
289
290
  function parseQueryString(url) {
290
291
  const params = {};
@@ -381,7 +382,7 @@ var UniversalFileClient = class {
381
382
  * 上传文件
382
383
  */
383
384
  async uploadFile(fileInfo, onProgress) {
384
- const url = `${this.config.baseUrl}${API_ENDPOINTS.UPLOAD}`;
385
+ const url = this.config.baseUrl + API_ENDPOINTS.UPLOAD;
385
386
  const startTime = Date.now();
386
387
  const formData = new FormData();
387
388
  formData.append("file", fileInfo.file);
@@ -464,7 +465,7 @@ var UniversalFileClient = class {
464
465
  }
465
466
  } else {
466
467
  console.error("\u274C [UniversalFileClient] \u4E0A\u4F20\u5931\u8D25:", xhr.status, xhr.statusText, xhr.responseText);
467
- reject(new Error(`\u4E0A\u4F20\u5931\u8D25: ${xhr.statusText}`));
468
+ reject(new Error("\u4E0A\u4F20\u5931\u8D25: " + xhr.statusText));
468
469
  }
469
470
  });
470
471
  xhr.addEventListener("error", (event) => {
@@ -508,7 +509,7 @@ var UniversalFileClient = class {
508
509
  } catch (error) {
509
510
  throw createFileError(
510
511
  ERROR_CODES.FILE_UPLOAD_ERROR,
511
- `\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: ${formatErrorMessage(error)}`,
512
+ "\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: " + formatErrorMessage(error),
512
513
  { fileInfo, originalError: error }
513
514
  );
514
515
  }
@@ -518,21 +519,21 @@ var UniversalFileClient = class {
518
519
  * 获取文件访问URL
519
520
  */
520
521
  async getFileUrl(fileId, expiresIn) {
521
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_URL(fileId)}${expiresIn ? `?expiresIn=${expiresIn}` : ""}`;
522
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_URL(fileId) + (expiresIn ? `?expiresIn=${expiresIn}` : "");
522
523
  try {
523
524
  const response = await this.fetchWithTimeout(url, {
524
525
  method: "GET",
525
526
  headers: this.getHeaders()
526
527
  });
527
528
  if (!response.ok) {
528
- throw new Error(`\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: ${response.statusText}`);
529
+ throw new Error("\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + response.statusText);
529
530
  }
530
531
  const data = await response.json();
531
532
  return data.url;
532
533
  } catch (error) {
533
534
  throw createFileError(
534
535
  ERROR_CODES.NETWORK_ERROR,
535
- `\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: ${formatErrorMessage(error)}`,
536
+ "\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + formatErrorMessage(error),
536
537
  { fileId, expiresIn, originalError: error }
537
538
  );
538
539
  }
@@ -541,7 +542,7 @@ var UniversalFileClient = class {
541
542
  * 获取文件元数据
542
543
  */
543
544
  async getFileMetadata(fileId) {
544
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_METADATA(fileId)}`;
545
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_METADATA(fileId);
545
546
  try {
546
547
  const response = await this.fetchWithTimeout(url, {
547
548
  method: "GET",
@@ -551,14 +552,14 @@ var UniversalFileClient = class {
551
552
  if (response.status === 404) {
552
553
  throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
553
554
  }
554
- throw new Error(`\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: ${response.statusText}`);
555
+ throw new Error("\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + response.statusText);
555
556
  }
556
557
  const data = await response.json();
557
558
  return this.transformFileMetadataFromAPI(data.file);
558
559
  } catch (error) {
559
560
  throw createFileError(
560
561
  ERROR_CODES.NETWORK_ERROR,
561
- `\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: ${formatErrorMessage(error)}`,
562
+ "\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + formatErrorMessage(error),
562
563
  { fileId, originalError: error }
563
564
  );
564
565
  }
@@ -583,7 +584,7 @@ var UniversalFileClient = class {
583
584
  page: options.page,
584
585
  pageSize: options.pageSize
585
586
  });
586
- const url = `${this.config.baseUrl}${API_ENDPOINTS.QUERY}${queryString}`;
587
+ const url = this.config.baseUrl + API_ENDPOINTS.QUERY + queryString;
587
588
  try {
588
589
  const response = await this.fetchWithTimeout(url, {
589
590
  method: "GET",
@@ -591,7 +592,7 @@ var UniversalFileClient = class {
591
592
  });
592
593
  if (!response.ok) {
593
594
  console.error("\u274C [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25:", response.status, response.statusText);
594
- throw new Error(`\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: ${response.statusText}`);
595
+ throw new Error("\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + response.statusText);
595
596
  }
596
597
  const data = await response.json();
597
598
  console.log("\u{1F4E5} [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u54CD\u5E94:", {
@@ -623,7 +624,7 @@ var UniversalFileClient = class {
623
624
  } catch (error) {
624
625
  throw createFileError(
625
626
  ERROR_CODES.NETWORK_ERROR,
626
- `\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: ${formatErrorMessage(error)}`,
627
+ "\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + formatErrorMessage(error),
627
628
  { options, originalError: error }
628
629
  );
629
630
  }
@@ -633,7 +634,7 @@ var UniversalFileClient = class {
633
634
  * 删除文件
634
635
  */
635
636
  async deleteFile(fileId) {
636
- const url = `${this.config.baseUrl}${API_ENDPOINTS.DELETE(fileId)}`;
637
+ const url = this.config.baseUrl + API_ENDPOINTS.DELETE(fileId);
637
638
  try {
638
639
  const response = await this.fetchWithTimeout(url, {
639
640
  method: "DELETE",
@@ -643,12 +644,12 @@ var UniversalFileClient = class {
643
644
  if (response.status === 404) {
644
645
  throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
645
646
  }
646
- throw new Error(`\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${response.statusText}`);
647
+ throw new Error("\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
647
648
  }
648
649
  } catch (error) {
649
650
  throw createFileError(
650
651
  ERROR_CODES.NETWORK_ERROR,
651
- `\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${formatErrorMessage(error)}`,
652
+ "\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
652
653
  { fileId, originalError: error }
653
654
  );
654
655
  }
@@ -657,7 +658,7 @@ var UniversalFileClient = class {
657
658
  * 批量删除文件
658
659
  */
659
660
  async batchDeleteFiles(fileIds) {
660
- const url = `${this.config.baseUrl}${API_ENDPOINTS.BATCH_DELETE}`;
661
+ const url = this.config.baseUrl + API_ENDPOINTS.BATCH_DELETE;
661
662
  try {
662
663
  const response = await this.fetchWithTimeout(url, {
663
664
  method: "POST",
@@ -668,14 +669,14 @@ var UniversalFileClient = class {
668
669
  body: JSON.stringify({ fileIds })
669
670
  });
670
671
  if (!response.ok) {
671
- throw new Error(`\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${response.statusText}`);
672
+ throw new Error("\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
672
673
  }
673
674
  const data = await response.json();
674
675
  return data.result;
675
676
  } catch (error) {
676
677
  throw createFileError(
677
678
  ERROR_CODES.NETWORK_ERROR,
678
- `\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${formatErrorMessage(error)}`,
679
+ "\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
679
680
  { fileIds, originalError: error }
680
681
  );
681
682
  }
@@ -685,21 +686,21 @@ var UniversalFileClient = class {
685
686
  * 获取上传进度
686
687
  */
687
688
  async getUploadProgress(fileId) {
688
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_PROGRESS(fileId)}`;
689
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_PROGRESS(fileId);
689
690
  try {
690
691
  const response = await this.fetchWithTimeout(url, {
691
692
  method: "GET",
692
693
  headers: this.getHeaders()
693
694
  });
694
695
  if (!response.ok) {
695
- throw new Error(`\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: ${response.statusText}`);
696
+ throw new Error("\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + response.statusText);
696
697
  }
697
698
  const data = await response.json();
698
699
  return data.progress;
699
700
  } catch (error) {
700
701
  throw createFileError(
701
702
  ERROR_CODES.NETWORK_ERROR,
702
- `\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: ${formatErrorMessage(error)}`,
703
+ "\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + formatErrorMessage(error),
703
704
  { fileId, originalError: error }
704
705
  );
705
706
  }
@@ -800,16 +801,16 @@ var FileUploader = ({
800
801
  };
801
802
  const validateFile2 = (file) => {
802
803
  if (file.size > maxFileSize * 1024 * 1024) {
803
- return `\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 ${maxFileSize}MB`;
804
+ return "\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 " + maxFileSize + "MB";
804
805
  }
805
806
  if (acceptedTypes.length > 0 && !acceptedTypes.includes(file.type)) {
806
- return `\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: ${file.type}`;
807
+ return "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + file.type;
807
808
  }
808
809
  return null;
809
810
  };
810
811
  const uploadFile = useCallback(
811
812
  async (file) => {
812
- const fileId = `upload_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
813
+ const fileId = "upload_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
813
814
  const error = validateFile2(file);
814
815
  if (error) {
815
816
  onUploadError?.(error);
@@ -881,7 +882,7 @@ var FileUploader = ({
881
882
  (files) => {
882
883
  const fileArray = Array.from(files);
883
884
  if (completedFiles.length + uploadingFiles.length + fileArray.length > maxFiles) {
884
- onUploadError?.(`\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ${maxFiles} \u4E2A\u6587\u4EF6`);
885
+ onUploadError?.("\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 " + maxFiles + " \u4E2A\u6587\u4EF6");
885
886
  return;
886
887
  }
887
888
  fileArray.forEach(uploadFile);
@@ -934,7 +935,7 @@ var FileUploader = ({
934
935
  case "pending":
935
936
  return "\u51C6\u5907\u4E2D...";
936
937
  case "uploading":
937
- return `\u4E0A\u4F20\u4E2D ${progress.progress.toFixed(1)}%`;
938
+ return "\u4E0A\u4F20\u4E2D " + progress.progress.toFixed(1) + "%";
938
939
  case "processing":
939
940
  return "\u5904\u7406\u4E2D...";
940
941
  case "completed":
@@ -945,16 +946,16 @@ var FileUploader = ({
945
946
  return "\u672A\u77E5\u72B6\u6001";
946
947
  }
947
948
  };
948
- const containerClasses = `
949
- border-2 border-dashed rounded-lg transition-all duration-200
950
- ${isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600"}
951
- ${disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer"}
952
- ${className}
953
- `;
954
- const uploadAreaClasses = `
955
- p-6 text-center
956
- ${mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"}
957
- `;
949
+ const containerClasses = clsx(
950
+ "border-2 border-dashed rounded-lg transition-all duration-200",
951
+ isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600",
952
+ disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer",
953
+ className
954
+ );
955
+ const uploadAreaClasses = clsx(
956
+ "p-6 text-center",
957
+ mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"
958
+ );
958
959
  return /* @__PURE__ */ React2.createElement("div", { className: "w-full space-y-4" }, /* @__PURE__ */ React2.createElement(
959
960
  "div",
960
961
  {
@@ -967,7 +968,7 @@ var FileUploader = ({
967
968
  /* @__PURE__ */ React2.createElement("div", { className: uploadAreaClasses }, /* @__PURE__ */ React2.createElement(
968
969
  Upload,
969
970
  {
970
- className: `mx-auto mb-4 text-gray-400 ${mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12"}`
971
+ className: clsx("mx-auto mb-4 text-gray-400", mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12")
971
972
  }
972
973
  ), mode === "compact" ? /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-gray-600 dark:text-gray-400" }, "\u70B9\u51FB\u4E0A\u4F20\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u8FD9\u91CC") : /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-700 dark:text-gray-300 mb-2" }, "\u4E0A\u4F20\u6587\u4EF6"), /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 dark:text-gray-400 mb-2" }, "\u70B9\u51FB\u9009\u62E9\u6587\u4EF6\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u8FD9\u91CC"), mode === "detailed" && /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-500 space-y-1" }, acceptedTypes.length > 0 && /* @__PURE__ */ React2.createElement("p", null, "\u652F\u6301\u683C\u5F0F: ", acceptedTypes.join(", ")), /* @__PURE__ */ React2.createElement("p", null, "\u6700\u5927\u5927\u5C0F: ", maxFileSize, "MB | \u6700\u591A\u6587\u4EF6: ", maxFiles, "\u4E2A")))),
973
974
  /* @__PURE__ */ React2.createElement(
@@ -993,7 +994,7 @@ var FileUploader = ({
993
994
  "div",
994
995
  {
995
996
  className: "bg-blue-500 h-2 rounded-full transition-all duration-300",
996
- style: { width: `${uploadingFile.progress.progress}%` }
997
+ style: { width: uploadingFile.progress.progress + "%" }
997
998
  }
998
999
  )), /* @__PURE__ */ React2.createElement("p", { className: "text-xs text-gray-500" }, formatProgress(uploadingFile.progress)))),
999
1000
  /* @__PURE__ */ React2.createElement(
@@ -1165,7 +1166,7 @@ var UniversalFileManager = ({
1165
1166
  });
1166
1167
  }, [onFileSelect, state.files]);
1167
1168
  const handleDeleteFiles = useCallback(async (fileIds) => {
1168
- if (!window.confirm(`\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 ${fileIds.length} \u4E2A\u6587\u4EF6\u5417\uFF1F`)) {
1169
+ if (!window.confirm("\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + fileIds.length + " \u4E2A\u6587\u4EF6\u5417\uFF1F")) {
1169
1170
  return;
1170
1171
  }
1171
1172
  setState((prev) => ({ ...prev, loading: true }));
@@ -1277,7 +1278,7 @@ var UniversalFileManager = ({
1277
1278
  "div",
1278
1279
  {
1279
1280
  key: file.id,
1280
- className: `relative border rounded-lg p-4 cursor-pointer transition-all duration-200 hover:shadow-md ${isSelected ? "border-blue-500 bg-blue-50" : "border-gray-200 hover:border-gray-300"}`,
1281
+ className: clsx("relative border rounded-lg p-4 cursor-pointer transition-all duration-200 hover:shadow-md", isSelected ? "border-blue-500 bg-blue-50" : "border-gray-200 hover:border-gray-300"),
1281
1282
  onClick: () => handleFileSelect(file.id, !isSelected)
1282
1283
  },
1283
1284
  allowBatch && /* @__PURE__ */ React2.createElement("div", { className: "absolute top-2 left-2" }, /* @__PURE__ */ React2.createElement(
@@ -1438,7 +1439,7 @@ var UniversalFileManager = ({
1438
1439
  key: action.key,
1439
1440
  onClick: () => action.onClick(selectedFileList),
1440
1441
  disabled: isDisabled,
1441
- className: `px-3 py-1 text-sm border rounded ${isDisabled ? "text-gray-400 border-gray-200 cursor-not-allowed" : "text-blue-600 border-blue-300 hover:bg-blue-50"}`
1442
+ className: clsx("px-3 py-1 text-sm border rounded", isDisabled ? "text-gray-400 border-gray-200 cursor-not-allowed" : "text-blue-600 border-blue-300 hover:bg-blue-50")
1442
1443
  },
1443
1444
  action.icon && /* @__PURE__ */ React2.createElement("span", { className: "mr-1" }, action.icon),
1444
1445
  action.label
@@ -1446,7 +1447,7 @@ var UniversalFileManager = ({
1446
1447
  }))), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2.createElement(
1447
1448
  "select",
1448
1449
  {
1449
- value: `${state.sortBy}-${state.sortOrder}`,
1450
+ value: state.sortBy + "-" + state.sortOrder,
1450
1451
  onChange: (e) => {
1451
1452
  const [sortBy, sortOrder] = e.target.value.split("-");
1452
1453
  setState((prev) => ({ ...prev, sortBy, sortOrder }));
@@ -1490,7 +1491,7 @@ var UniversalFileManager = ({
1490
1491
  {
1491
1492
  key: pageNum,
1492
1493
  onClick: () => handlePageChange(pageNum),
1493
- className: `px-3 py-1 text-sm border rounded ${pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50"}`
1494
+ className: clsx("px-3 py-1 text-sm border rounded", pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50")
1494
1495
  },
1495
1496
  pageNum
1496
1497
  )), /* @__PURE__ */ React2.createElement(
@@ -1517,7 +1518,7 @@ var UniversalFileManager = ({
1517
1518
  className: "mt-2 text-blue-600 hover:text-blue-800"
1518
1519
  },
1519
1520
  "\u70B9\u51FB\u4E0A\u4F20\u7B2C\u4E00\u4E2A\u6587\u4EF6"
1520
- ))) : /* @__PURE__ */ React2.createElement("div", { className: `grid gap-4 ${mode === "grid" ? "grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6" : "grid-cols-1"}` }, state.files.map(renderFileItem))), renderPagination(), state.previewFile && showPreview && /* @__PURE__ */ React2.createElement(
1521
+ ))) : /* @__PURE__ */ React2.createElement("div", { className: clsx("grid gap-4", mode === "grid" ? "grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6" : "grid-cols-1") }, state.files.map(renderFileItem))), renderPagination(), state.previewFile && showPreview && /* @__PURE__ */ React2.createElement(
1521
1522
  FilePreviewModal,
1522
1523
  {
1523
1524
  file: state.previewFile,
@@ -1545,7 +1546,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1545
1546
  return /* @__PURE__ */ React2.createElement(
1546
1547
  "img",
1547
1548
  {
1548
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1549
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1549
1550
  alt: file.originalName,
1550
1551
  className: "max-w-full max-h-full object-contain"
1551
1552
  }
@@ -1555,7 +1556,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1555
1556
  return /* @__PURE__ */ React2.createElement(
1556
1557
  "video",
1557
1558
  {
1558
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1559
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1559
1560
  controls: true,
1560
1561
  className: "max-w-full max-h-full"
1561
1562
  },
@@ -1566,7 +1567,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1566
1567
  return /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center space-y-4" }, /* @__PURE__ */ React2.createElement("div", { className: "text-6xl" }, "\u{1F3B5}"), /* @__PURE__ */ React2.createElement(
1567
1568
  "audio",
1568
1569
  {
1569
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1570
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1570
1571
  controls: true,
1571
1572
  className: "w-full max-w-md"
1572
1573
  },
@@ -1577,7 +1578,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1577
1578
  return /* @__PURE__ */ React2.createElement(
1578
1579
  "iframe",
1579
1580
  {
1580
- src: `${file.cdnUrl || `/api/files/${file.id}/download`}#toolbar=0`,
1581
+ src: (file.cdnUrl || "/api/files/" + file.id + "/download") + "#toolbar=0",
1581
1582
  className: "w-full h-full min-h-96",
1582
1583
  title: file.originalName
1583
1584
  }
@@ -1586,7 +1587,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1586
1587
  return /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center justify-center h-64 text-gray-500" }, /* @__PURE__ */ React2.createElement("div", { className: "text-4xl mb-4" }, "\u{1F4C4}"), /* @__PURE__ */ React2.createElement("p", null, "\u6B64\u6587\u4EF6\u7C7B\u578B\u6682\u4E0D\u652F\u6301\u9884\u89C8"), /* @__PURE__ */ React2.createElement(
1587
1588
  "a",
1588
1589
  {
1589
- href: file.cdnUrl || `/api/files/${file.id}/download`,
1590
+ href: file.cdnUrl || "/api/files/" + file.id + "/download",
1590
1591
  download: file.originalName,
1591
1592
  className: "mt-4 px-4 py-2 text-blue-600 border border-blue-300 rounded hover:bg-blue-50"
1592
1593
  },
@@ -1725,7 +1726,7 @@ var FolderManager = ({
1725
1726
  }));
1726
1727
  }, []);
1727
1728
  const deleteFolder = useCallback(async (folderId, folderName) => {
1728
- if (!window.confirm(`\u786E\u5B9A\u8981\u5220\u9664\u6587\u4EF6\u5939"${folderName}"\u5417\uFF1F\u6B64\u64CD\u4F5C\u5C06\u5220\u9664\u6587\u4EF6\u5939\u5185\u7684\u6240\u6709\u6587\u4EF6\u3002`)) {
1729
+ if (!window.confirm('\u786E\u5B9A\u8981\u5220\u9664\u6587\u4EF6\u5939"' + folderName + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u5C06\u5220\u9664\u6587\u4EF6\u5939\u5185\u7684\u6240\u6709\u6587\u4EF6\u3002')) {
1729
1730
  return;
1730
1731
  }
1731
1732
  if (!onFolderDelete) return;
@@ -1784,8 +1785,8 @@ var FolderManager = ({
1784
1785
  return /* @__PURE__ */ React2.createElement("div", { key: folder.id, className: "select-none" }, /* @__PURE__ */ React2.createElement(
1785
1786
  "div",
1786
1787
  {
1787
- className: `flex items-center py-1 px-2 rounded-md cursor-pointer transition-colors ${isSelected ? "bg-blue-100 text-blue-800" : isDragOver ? "bg-green-100" : "hover:bg-gray-100"}`,
1788
- style: { paddingLeft: `${level * 16 + 8}px` },
1788
+ className: clsx("flex items-center py-1 px-2 rounded-md cursor-pointer transition-colors", isSelected ? "bg-blue-100 text-blue-800" : isDragOver ? "bg-green-100" : "hover:bg-gray-100"),
1789
+ style: { paddingLeft: level * 16 + 8 + "px" },
1789
1790
  onClick: () => selectFolder(folder.id),
1790
1791
  onContextMenu: (e) => handleContextMenu(e, folder.id),
1791
1792
  onDragOver: allowDrag ? (e) => handleDragOver(e, folder.id) : void 0,
@@ -1801,7 +1802,7 @@ var FolderManager = ({
1801
1802
  },
1802
1803
  className: "mr-1 p-1 hover:bg-gray-200 rounded"
1803
1804
  },
1804
- /* @__PURE__ */ React2.createElement("span", { className: `text-xs transition-transform ${isExpanded ? "rotate-90" : ""}` }, "\u25B6")
1805
+ /* @__PURE__ */ React2.createElement("span", { className: clsx("text-xs transition-transform", isExpanded ? "rotate-90" : "") }, "\u25B6")
1805
1806
  ),
1806
1807
  /* @__PURE__ */ React2.createElement("span", { className: "mr-2 text-yellow-600" }, isExpanded ? "\u{1F4C2}" : "\u{1F4C1}"),
1807
1808
  /* @__PURE__ */ React2.createElement("div", { className: "flex-1 flex items-center justify-between" }, isEditing ? /* @__PURE__ */ React2.createElement(
@@ -1827,7 +1828,7 @@ var FolderManager = ({
1827
1828
  "div",
1828
1829
  {
1829
1830
  className: "flex items-center py-1 px-2 ml-4",
1830
- style: { paddingLeft: `${(level + 1) * 16 + 8}px` }
1831
+ style: { paddingLeft: (level + 1) * 16 + 8 + "px" }
1831
1832
  },
1832
1833
  /* @__PURE__ */ React2.createElement("span", { className: "mr-2 text-yellow-600" }, "\u{1F4C1}"),
1833
1834
  /* @__PURE__ */ React2.createElement(
@@ -2016,7 +2017,7 @@ var FileShareModal = ({
2016
2017
  try {
2017
2018
  const expiresAt = getExpiresAt();
2018
2019
  const mockShareInfo = {
2019
- shareUrl: `${window.location.origin}/share/${generateShareCode()}`,
2020
+ shareUrl: window.location.origin + "/share/" + generateShareCode(),
2020
2021
  password: shareOptions.requirePassword ? shareOptions.password : void 0,
2021
2022
  expiresAt,
2022
2023
  permission: shareOptions.permission,
@@ -2055,7 +2056,7 @@ var FileShareModal = ({
2055
2056
  if (files.length === 1 && files[0]) {
2056
2057
  return files[0].originalName;
2057
2058
  }
2058
- return `${files.length} \u4E2A\u6587\u4EF6`;
2059
+ return files.length + " \u4E2A\u6587\u4EF6";
2059
2060
  }, [files]);
2060
2061
  const renderShareSettings = () => {
2061
2062
  if (shareInfo) return null;
@@ -2209,10 +2210,10 @@ var FileShareModal = ({
2209
2210
  {
2210
2211
  onClick: () => {
2211
2212
  const shareText = [
2212
- `\u6587\u4EF6\u5206\u4EAB\uFF1A${formatFileList()}`,
2213
- `\u94FE\u63A5\uFF1A${shareInfo.shareUrl}`,
2214
- shareInfo.password ? `\u5BC6\u7801\uFF1A${shareInfo.password}` : "",
2215
- shareInfo.expiresAt ? `\u8FC7\u671F\u65F6\u95F4\uFF1A${shareInfo.expiresAt.toLocaleString()}` : "\u6C38\u4E0D\u8FC7\u671F"
2213
+ "\u6587\u4EF6\u5206\u4EAB\uFF1A" + formatFileList(),
2214
+ "\u94FE\u63A5\uFF1A" + shareInfo.shareUrl,
2215
+ shareInfo.password ? "\u5BC6\u7801\uFF1A" + shareInfo.password : "",
2216
+ shareInfo.expiresAt ? "\u8FC7\u671F\u65F6\u95F4\uFF1A" + shareInfo.expiresAt.toLocaleString() : "\u6C38\u4E0D\u8FC7\u671F"
2216
2217
  ].filter(Boolean).join("\n");
2217
2218
  copyToClipboard(shareText);
2218
2219
  },