sa2kit 1.6.29 → 1.6.31

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 (237) hide show
  1. package/dist/AliyunOSSProvider-P6TOVKMM.mjs +6 -0
  2. package/dist/{AliyunOSSProvider-I7I5YGLB.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
  3. package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
  4. package/dist/{AliyunOSSProvider-L7JWMKS4.js.map → AliyunOSSProvider-Z5BRBCG6.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-FVLLHBHO.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
  11. package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
  12. package/dist/{LocalStorageProvider-NBNHHWLY.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-DW2ZTOCV.js → chunk-5A7ERLKK.js} +105 -106
  68. package/dist/chunk-5A7ERLKK.js.map +1 -0
  69. package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
  70. package/dist/chunk-5YQ62BKX.mjs.map +1 -0
  71. package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
  72. package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
  73. package/dist/{chunk-WSNM4EU5.mjs → chunk-77M5AQG3.mjs} +37 -41
  74. package/dist/chunk-77M5AQG3.mjs.map +1 -0
  75. package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
  76. package/dist/chunk-7VRT55ZD.js.map +1 -0
  77. package/dist/{chunk-LX4XX6W7.js → chunk-C54W2CMK.js} +16 -16
  78. package/dist/chunk-C54W2CMK.js.map +1 -0
  79. package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
  80. package/dist/chunk-EB4NR623.mjs.map +1 -0
  81. package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
  82. package/dist/chunk-GBPLX42J.js.map +1 -0
  83. package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
  84. package/dist/chunk-HDEOCX2L.mjs.map +1 -0
  85. package/dist/{chunk-LFG6FPM5.mjs → chunk-KIP2CERU.mjs} +37 -38
  86. package/dist/chunk-KIP2CERU.mjs.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-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
  90. package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
  91. package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
  92. package/dist/chunk-NJ2SNXBJ.js.map +1 -0
  93. package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
  94. package/dist/chunk-PE5EAHZK.mjs.map +1 -0
  95. package/dist/{chunk-TKCYPDWU.js → chunk-Q5EDCKQA.js} +27 -29
  96. package/dist/chunk-Q5EDCKQA.js.map +1 -0
  97. package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
  98. package/dist/chunk-RBKGYWME.js.map +1 -0
  99. package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
  100. package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
  101. package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
  102. package/dist/chunk-TDCDEBGP.js.map +1 -0
  103. package/dist/{chunk-T5OZHYVM.mjs → chunk-TVROG2Q4.mjs} +15 -15
  104. package/dist/chunk-TVROG2Q4.mjs.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-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
  108. package/dist/chunk-UL6XJGUZ.js.map +1 -0
  109. package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
  110. package/dist/chunk-WA67GZSZ.js.map +1 -0
  111. package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
  112. package/dist/chunk-WEEXCPSE.mjs.map +1 -0
  113. package/dist/{chunk-5GCHAXY5.js → chunk-X3UU7JHT.js} +38 -42
  114. package/dist/chunk-X3UU7JHT.js.map +1 -0
  115. package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
  116. package/dist/chunk-XJ7ZAGC5.js.map +1 -0
  117. package/dist/{chunk-GSTLV3MB.mjs → chunk-YOTQG4NP.mjs} +26 -28
  118. package/dist/chunk-YOTQG4NP.mjs.map +1 -0
  119. package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
  120. package/dist/chunk-Z36R3P62.mjs.map +1 -0
  121. package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
  122. package/dist/chunk-ZWQJSZEY.js.map +1 -0
  123. package/dist/config/index.js +6 -6
  124. package/dist/config/index.js.map +1 -1
  125. package/dist/config/index.mjs +6 -6
  126. package/dist/config/index.mjs.map +1 -1
  127. package/dist/config/server/index.js +37 -37
  128. package/dist/config/server/index.js.map +1 -1
  129. package/dist/config/server/index.mjs +37 -37
  130. package/dist/config/server/index.mjs.map +1 -1
  131. package/dist/i18n/index.d.mts +2 -2
  132. package/dist/i18n/index.d.ts +2 -2
  133. package/dist/i18n/index.js +16 -17
  134. package/dist/i18n/index.js.map +1 -1
  135. package/dist/i18n/index.mjs +16 -17
  136. package/dist/i18n/index.mjs.map +1 -1
  137. package/dist/imageCrop/index.js +11 -10
  138. package/dist/imageCrop/index.js.map +1 -1
  139. package/dist/imageCrop/index.mjs +11 -10
  140. package/dist/imageCrop/index.mjs.map +1 -1
  141. package/dist/index.js +221 -246
  142. package/dist/index.js.map +1 -1
  143. package/dist/index.mjs +79 -104
  144. package/dist/index.mjs.map +1 -1
  145. package/dist/logger/index.js +6 -6
  146. package/dist/logger/index.mjs +1 -1
  147. package/dist/mmd/admin/index.js +11 -10
  148. package/dist/mmd/admin/index.js.map +1 -1
  149. package/dist/mmd/admin/index.mjs +11 -10
  150. package/dist/mmd/admin/index.mjs.map +1 -1
  151. package/dist/mmd/index.js +223 -241
  152. package/dist/mmd/index.js.map +1 -1
  153. package/dist/mmd/index.mjs +220 -238
  154. package/dist/mmd/index.mjs.map +1 -1
  155. package/dist/mmd/server/index.js +6 -6
  156. package/dist/mmd/server/index.js.map +1 -1
  157. package/dist/mmd/server/index.mjs +6 -6
  158. package/dist/mmd/server/index.mjs.map +1 -1
  159. package/dist/music/index.js +16 -16
  160. package/dist/music/index.mjs +2 -2
  161. package/dist/music/server/index.js +8 -8
  162. package/dist/music/server/index.mjs +1 -1
  163. package/dist/request/index.js +2 -2
  164. package/dist/request/index.js.map +1 -1
  165. package/dist/request/index.mjs +2 -2
  166. package/dist/request/index.mjs.map +1 -1
  167. package/dist/storage/index.js +11 -11
  168. package/dist/storage/index.mjs +2 -2
  169. package/dist/testYourself/admin/index.js +3 -3
  170. package/dist/testYourself/admin/index.mjs +1 -1
  171. package/dist/testYourself/index.js +22 -22
  172. package/dist/testYourself/index.js.map +1 -1
  173. package/dist/testYourself/index.mjs +14 -14
  174. package/dist/testYourself/index.mjs.map +1 -1
  175. package/dist/testYourself/server/index.js +4 -4
  176. package/dist/testYourself/server/index.mjs +1 -1
  177. package/dist/universalExport/index.d.mts +3 -3
  178. package/dist/universalExport/index.d.ts +3 -3
  179. package/dist/universalExport/index.js +48 -47
  180. package/dist/universalExport/index.js.map +1 -1
  181. package/dist/universalExport/index.mjs +48 -47
  182. package/dist/universalExport/index.mjs.map +1 -1
  183. package/dist/universalExport/server/index.js +29 -29
  184. package/dist/universalExport/server/index.js.map +1 -1
  185. package/dist/universalExport/server/index.mjs +28 -28
  186. package/dist/universalExport/server/index.mjs.map +1 -1
  187. package/dist/universalFile/index.d.mts +3 -3
  188. package/dist/universalFile/index.d.ts +3 -3
  189. package/dist/universalFile/index.js +73 -72
  190. package/dist/universalFile/index.js.map +1 -1
  191. package/dist/universalFile/index.mjs +73 -72
  192. package/dist/universalFile/index.mjs.map +1 -1
  193. package/dist/universalFile/server/index.js +258 -260
  194. package/dist/universalFile/server/index.js.map +1 -1
  195. package/dist/universalFile/server/index.mjs +244 -246
  196. package/dist/universalFile/server/index.mjs.map +1 -1
  197. package/dist/utils/index.js +11 -11
  198. package/dist/utils/index.mjs +2 -2
  199. package/package.json +1 -1
  200. package/dist/AliyunOSSProvider-I7I5YGLB.mjs +0 -6
  201. package/dist/AliyunOSSProvider-L7JWMKS4.js +0 -15
  202. package/dist/ConfigService-7MEZXKJ5.js +0 -21
  203. package/dist/ConfigService-BV57YYFW.mjs +0 -4
  204. package/dist/LocalStorageProvider-FVLLHBHO.mjs +0 -6
  205. package/dist/LocalStorageProvider-NBNHHWLY.js +0 -15
  206. package/dist/PMXParser-L6IWHL4I.mjs +0 -4
  207. package/dist/PMXParser-YBS3B6HM.js +0 -13
  208. package/dist/chunk-3BGPZN4X.mjs.map +0 -1
  209. package/dist/chunk-3WOAPLEG.mjs.map +0 -1
  210. package/dist/chunk-5GCHAXY5.js.map +0 -1
  211. package/dist/chunk-6PRFP5EG.js.map +0 -1
  212. package/dist/chunk-6YKMCPQI.mjs.map +0 -1
  213. package/dist/chunk-7Z5LLJ3A.js.map +0 -1
  214. package/dist/chunk-A3UP56MS.js.map +0 -1
  215. package/dist/chunk-CD77U7LZ.js.map +0 -1
  216. package/dist/chunk-CLKKZSPZ.js.map +0 -1
  217. package/dist/chunk-CNTILN5J.mjs.map +0 -1
  218. package/dist/chunk-DUHZ7VZP.js.map +0 -1
  219. package/dist/chunk-DW2ZTOCV.js.map +0 -1
  220. package/dist/chunk-E7RGBAYJ.js.map +0 -1
  221. package/dist/chunk-GSTLV3MB.mjs.map +0 -1
  222. package/dist/chunk-JZXJQMVE.js.map +0 -1
  223. package/dist/chunk-KQGP6BTS.mjs.map +0 -1
  224. package/dist/chunk-LFG6FPM5.mjs.map +0 -1
  225. package/dist/chunk-LX4XX6W7.js.map +0 -1
  226. package/dist/chunk-MW4BCIZC.mjs.map +0 -1
  227. package/dist/chunk-OCR5DS4C.mjs.map +0 -1
  228. package/dist/chunk-OLHGZXN3.mjs.map +0 -1
  229. package/dist/chunk-QAT2RWAO.mjs.map +0 -1
  230. package/dist/chunk-QU5OT4DF.js.map +0 -1
  231. package/dist/chunk-T5OZHYVM.mjs.map +0 -1
  232. package/dist/chunk-TFQF2HDO.mjs.map +0 -1
  233. package/dist/chunk-TKCYPDWU.js.map +0 -1
  234. package/dist/chunk-TOC5FSHP.js.map +0 -1
  235. package/dist/chunk-UOFTHYIH.js.map +0 -1
  236. package/dist/chunk-VRTRSEEH.mjs.map +0 -1
  237. package/dist/chunk-WSNM4EU5.mjs.map +0 -1
@@ -116,7 +116,7 @@ declare const API_BASE_PATH = "/api/universal-file";
116
116
  /** API端点 */
117
117
  declare const API_ENDPOINTS: {
118
118
  /** 上传文件 */
119
- readonly UPLOAD: "/api/universal-file/upload";
119
+ readonly UPLOAD: string;
120
120
  /** 获取文件URL */
121
121
  readonly GET_URL: (fileId: string) => string;
122
122
  /** 获取文件元数据 */
@@ -124,9 +124,9 @@ declare const API_ENDPOINTS: {
124
124
  /** 删除文件 */
125
125
  readonly DELETE: (fileId: string) => string;
126
126
  /** 查询文件列表 */
127
- readonly QUERY: "/api/universal-file/files";
127
+ readonly QUERY: string;
128
128
  /** 批量删除 */
129
- readonly BATCH_DELETE: "/api/universal-file/files/batch-delete";
129
+ readonly BATCH_DELETE: string;
130
130
  /** 获取上传进度 */
131
131
  readonly GET_PROGRESS: (fileId: string) => string;
132
132
  };
@@ -116,7 +116,7 @@ declare const API_BASE_PATH = "/api/universal-file";
116
116
  /** API端点 */
117
117
  declare const API_ENDPOINTS: {
118
118
  /** 上传文件 */
119
- readonly UPLOAD: "/api/universal-file/upload";
119
+ readonly UPLOAD: string;
120
120
  /** 获取文件URL */
121
121
  readonly GET_URL: (fileId: string) => string;
122
122
  /** 获取文件元数据 */
@@ -124,9 +124,9 @@ declare const API_ENDPOINTS: {
124
124
  /** 删除文件 */
125
125
  readonly DELETE: (fileId: string) => string;
126
126
  /** 查询文件列表 */
127
- readonly QUERY: "/api/universal-file/files";
127
+ readonly QUERY: string;
128
128
  /** 批量删除 */
129
- readonly BATCH_DELETE: "/api/universal-file/files/batch-delete";
129
+ readonly BATCH_DELETE: string;
130
130
  /** 获取上传进度 */
131
131
  readonly GET_PROGRESS: (fileId: string) => string;
132
132
  };
@@ -3,6 +3,7 @@
3
3
  var chunkZRAW3HXA_js = require('../chunk-ZRAW3HXA.js');
4
4
  require('../chunk-DGUM43GV.js');
5
5
  var React2 = require('react');
6
+ var clsx = require('clsx');
6
7
  var lucideReact = require('lucide-react');
7
8
 
8
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -65,19 +66,19 @@ var DOCUMENT_EXTENSIONS = [
65
66
  var API_BASE_PATH = "/api/universal-file";
66
67
  var API_ENDPOINTS = {
67
68
  /** 上传文件 */
68
- UPLOAD: `${API_BASE_PATH}/upload`,
69
+ UPLOAD: API_BASE_PATH + "/upload",
69
70
  /** 获取文件URL */
70
- GET_URL: (fileId) => `${API_BASE_PATH}/files/${fileId}/url`,
71
+ GET_URL: (fileId) => API_BASE_PATH + "/files/" + fileId + "/url",
71
72
  /** 获取文件元数据 */
72
- GET_METADATA: (fileId) => `${API_BASE_PATH}/files/${fileId}`,
73
+ GET_METADATA: (fileId) => API_BASE_PATH + "/files/" + fileId,
73
74
  /** 删除文件 */
74
- DELETE: (fileId) => `${API_BASE_PATH}/files/${fileId}`,
75
+ DELETE: (fileId) => API_BASE_PATH + "/files/" + fileId,
75
76
  /** 查询文件列表 */
76
- QUERY: `${API_BASE_PATH}/files`,
77
+ QUERY: API_BASE_PATH + "/files",
77
78
  /** 批量删除 */
78
- BATCH_DELETE: `${API_BASE_PATH}/files/batch-delete`,
79
+ BATCH_DELETE: API_BASE_PATH + "/files/batch-delete",
79
80
  /** 获取上传进度 */
80
- GET_PROGRESS: (fileId) => `${API_BASE_PATH}/upload/${fileId}/progress`
81
+ GET_PROGRESS: (fileId) => API_BASE_PATH + "/upload/" + fileId + "/progress"
81
82
  };
82
83
  var ERROR_CODES = {
83
84
  /** 文件上传错误 */
@@ -116,7 +117,7 @@ function formatFileSize(bytes) {
116
117
  const units = ["B", "KB", "MB", "GB", "TB"];
117
118
  const k = 1024;
118
119
  const i = Math.floor(Math.log(bytes) / Math.log(k));
119
- return `${(bytes / Math.pow(k, i)).toFixed(2)} ${units[i]}`;
120
+ return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
120
121
  }
121
122
  function parseFileSize(sizeStr) {
122
123
  const match = sizeStr.match(/^(\d+(?:\.\d+)?)\s*([KMGT]?B)$/i);
@@ -204,7 +205,7 @@ function sanitizeFileName(fileName) {
204
205
  }
205
206
  function generateUniqueFileName(originalName, fileId) {
206
207
  const ext = getFileExtension(originalName);
207
- return `${fileId}${ext}`;
208
+ return fileId + ext;
208
209
  }
209
210
  function generateStoragePath(moduleId, fileName, options) {
210
211
  const parts = [];
@@ -241,7 +242,7 @@ function validateFileSize(file, maxSize) {
241
242
  if (file.size > maxSize) {
242
243
  return {
243
244
  valid: false,
244
- error: `\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: ${formatFileSize(file.size)} > ${formatFileSize(maxSize)}`
245
+ error: "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: " + formatFileSize(file.size) + " > " + formatFileSize(maxSize)
245
246
  };
246
247
  }
247
248
  return { valid: true };
@@ -251,7 +252,7 @@ function validateFileType(file, allowedTypes) {
251
252
  if (!isMimeTypeSupported(mimeType, allowedTypes)) {
252
253
  return {
253
254
  valid: false,
254
- error: `\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: ${mimeType}`
255
+ error: "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + mimeType
255
256
  };
256
257
  }
257
258
  return { valid: true };
@@ -290,7 +291,7 @@ function buildQueryString(params) {
290
291
  }
291
292
  });
292
293
  const queryString = searchParams.toString();
293
- return queryString ? `?${queryString}` : "";
294
+ return queryString ? "?" + queryString : "";
294
295
  }
295
296
  function parseQueryString(url) {
296
297
  const params = {};
@@ -387,7 +388,7 @@ var UniversalFileClient = class {
387
388
  * 上传文件
388
389
  */
389
390
  async uploadFile(fileInfo, onProgress) {
390
- const url = `${this.config.baseUrl}${API_ENDPOINTS.UPLOAD}`;
391
+ const url = this.config.baseUrl + API_ENDPOINTS.UPLOAD;
391
392
  const startTime = Date.now();
392
393
  const formData = new FormData();
393
394
  formData.append("file", fileInfo.file);
@@ -470,7 +471,7 @@ var UniversalFileClient = class {
470
471
  }
471
472
  } else {
472
473
  console.error("\u274C [UniversalFileClient] \u4E0A\u4F20\u5931\u8D25:", xhr.status, xhr.statusText, xhr.responseText);
473
- reject(new Error(`\u4E0A\u4F20\u5931\u8D25: ${xhr.statusText}`));
474
+ reject(new Error("\u4E0A\u4F20\u5931\u8D25: " + xhr.statusText));
474
475
  }
475
476
  });
476
477
  xhr.addEventListener("error", (event) => {
@@ -514,7 +515,7 @@ var UniversalFileClient = class {
514
515
  } catch (error) {
515
516
  throw createFileError(
516
517
  ERROR_CODES.FILE_UPLOAD_ERROR,
517
- `\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: ${formatErrorMessage(error)}`,
518
+ "\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: " + formatErrorMessage(error),
518
519
  { fileInfo, originalError: error }
519
520
  );
520
521
  }
@@ -524,21 +525,21 @@ var UniversalFileClient = class {
524
525
  * 获取文件访问URL
525
526
  */
526
527
  async getFileUrl(fileId, expiresIn) {
527
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_URL(fileId)}${expiresIn ? `?expiresIn=${expiresIn}` : ""}`;
528
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_URL(fileId) + (expiresIn ? `?expiresIn=${expiresIn}` : "");
528
529
  try {
529
530
  const response = await this.fetchWithTimeout(url, {
530
531
  method: "GET",
531
532
  headers: this.getHeaders()
532
533
  });
533
534
  if (!response.ok) {
534
- throw new Error(`\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: ${response.statusText}`);
535
+ throw new Error("\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + response.statusText);
535
536
  }
536
537
  const data = await response.json();
537
538
  return data.url;
538
539
  } catch (error) {
539
540
  throw createFileError(
540
541
  ERROR_CODES.NETWORK_ERROR,
541
- `\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: ${formatErrorMessage(error)}`,
542
+ "\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + formatErrorMessage(error),
542
543
  { fileId, expiresIn, originalError: error }
543
544
  );
544
545
  }
@@ -547,7 +548,7 @@ var UniversalFileClient = class {
547
548
  * 获取文件元数据
548
549
  */
549
550
  async getFileMetadata(fileId) {
550
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_METADATA(fileId)}`;
551
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_METADATA(fileId);
551
552
  try {
552
553
  const response = await this.fetchWithTimeout(url, {
553
554
  method: "GET",
@@ -557,14 +558,14 @@ var UniversalFileClient = class {
557
558
  if (response.status === 404) {
558
559
  throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
559
560
  }
560
- throw new Error(`\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: ${response.statusText}`);
561
+ throw new Error("\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + response.statusText);
561
562
  }
562
563
  const data = await response.json();
563
564
  return this.transformFileMetadataFromAPI(data.file);
564
565
  } catch (error) {
565
566
  throw createFileError(
566
567
  ERROR_CODES.NETWORK_ERROR,
567
- `\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: ${formatErrorMessage(error)}`,
568
+ "\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + formatErrorMessage(error),
568
569
  { fileId, originalError: error }
569
570
  );
570
571
  }
@@ -589,7 +590,7 @@ var UniversalFileClient = class {
589
590
  page: options.page,
590
591
  pageSize: options.pageSize
591
592
  });
592
- const url = `${this.config.baseUrl}${API_ENDPOINTS.QUERY}${queryString}`;
593
+ const url = this.config.baseUrl + API_ENDPOINTS.QUERY + queryString;
593
594
  try {
594
595
  const response = await this.fetchWithTimeout(url, {
595
596
  method: "GET",
@@ -597,7 +598,7 @@ var UniversalFileClient = class {
597
598
  });
598
599
  if (!response.ok) {
599
600
  console.error("\u274C [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25:", response.status, response.statusText);
600
- throw new Error(`\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: ${response.statusText}`);
601
+ throw new Error("\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + response.statusText);
601
602
  }
602
603
  const data = await response.json();
603
604
  console.log("\u{1F4E5} [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u54CD\u5E94:", {
@@ -629,7 +630,7 @@ var UniversalFileClient = class {
629
630
  } catch (error) {
630
631
  throw createFileError(
631
632
  ERROR_CODES.NETWORK_ERROR,
632
- `\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: ${formatErrorMessage(error)}`,
633
+ "\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + formatErrorMessage(error),
633
634
  { options, originalError: error }
634
635
  );
635
636
  }
@@ -639,7 +640,7 @@ var UniversalFileClient = class {
639
640
  * 删除文件
640
641
  */
641
642
  async deleteFile(fileId) {
642
- const url = `${this.config.baseUrl}${API_ENDPOINTS.DELETE(fileId)}`;
643
+ const url = this.config.baseUrl + API_ENDPOINTS.DELETE(fileId);
643
644
  try {
644
645
  const response = await this.fetchWithTimeout(url, {
645
646
  method: "DELETE",
@@ -649,12 +650,12 @@ var UniversalFileClient = class {
649
650
  if (response.status === 404) {
650
651
  throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
651
652
  }
652
- throw new Error(`\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${response.statusText}`);
653
+ throw new Error("\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
653
654
  }
654
655
  } catch (error) {
655
656
  throw createFileError(
656
657
  ERROR_CODES.NETWORK_ERROR,
657
- `\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${formatErrorMessage(error)}`,
658
+ "\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
658
659
  { fileId, originalError: error }
659
660
  );
660
661
  }
@@ -663,7 +664,7 @@ var UniversalFileClient = class {
663
664
  * 批量删除文件
664
665
  */
665
666
  async batchDeleteFiles(fileIds) {
666
- const url = `${this.config.baseUrl}${API_ENDPOINTS.BATCH_DELETE}`;
667
+ const url = this.config.baseUrl + API_ENDPOINTS.BATCH_DELETE;
667
668
  try {
668
669
  const response = await this.fetchWithTimeout(url, {
669
670
  method: "POST",
@@ -674,14 +675,14 @@ var UniversalFileClient = class {
674
675
  body: JSON.stringify({ fileIds })
675
676
  });
676
677
  if (!response.ok) {
677
- throw new Error(`\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${response.statusText}`);
678
+ throw new Error("\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
678
679
  }
679
680
  const data = await response.json();
680
681
  return data.result;
681
682
  } catch (error) {
682
683
  throw createFileError(
683
684
  ERROR_CODES.NETWORK_ERROR,
684
- `\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: ${formatErrorMessage(error)}`,
685
+ "\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
685
686
  { fileIds, originalError: error }
686
687
  );
687
688
  }
@@ -691,21 +692,21 @@ var UniversalFileClient = class {
691
692
  * 获取上传进度
692
693
  */
693
694
  async getUploadProgress(fileId) {
694
- const url = `${this.config.baseUrl}${API_ENDPOINTS.GET_PROGRESS(fileId)}`;
695
+ const url = this.config.baseUrl + API_ENDPOINTS.GET_PROGRESS(fileId);
695
696
  try {
696
697
  const response = await this.fetchWithTimeout(url, {
697
698
  method: "GET",
698
699
  headers: this.getHeaders()
699
700
  });
700
701
  if (!response.ok) {
701
- throw new Error(`\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: ${response.statusText}`);
702
+ throw new Error("\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + response.statusText);
702
703
  }
703
704
  const data = await response.json();
704
705
  return data.progress;
705
706
  } catch (error) {
706
707
  throw createFileError(
707
708
  ERROR_CODES.NETWORK_ERROR,
708
- `\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: ${formatErrorMessage(error)}`,
709
+ "\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + formatErrorMessage(error),
709
710
  { fileId, originalError: error }
710
711
  );
711
712
  }
@@ -806,16 +807,16 @@ var FileUploader = ({
806
807
  };
807
808
  const validateFile2 = (file) => {
808
809
  if (file.size > maxFileSize * 1024 * 1024) {
809
- return `\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 ${maxFileSize}MB`;
810
+ return "\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 " + maxFileSize + "MB";
810
811
  }
811
812
  if (acceptedTypes.length > 0 && !acceptedTypes.includes(file.type)) {
812
- return `\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: ${file.type}`;
813
+ return "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + file.type;
813
814
  }
814
815
  return null;
815
816
  };
816
817
  const uploadFile = React2.useCallback(
817
818
  async (file) => {
818
- const fileId = `upload_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
819
+ const fileId = "upload_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
819
820
  const error = validateFile2(file);
820
821
  if (error) {
821
822
  onUploadError?.(error);
@@ -887,7 +888,7 @@ var FileUploader = ({
887
888
  (files) => {
888
889
  const fileArray = Array.from(files);
889
890
  if (completedFiles.length + uploadingFiles.length + fileArray.length > maxFiles) {
890
- onUploadError?.(`\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ${maxFiles} \u4E2A\u6587\u4EF6`);
891
+ onUploadError?.("\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 " + maxFiles + " \u4E2A\u6587\u4EF6");
891
892
  return;
892
893
  }
893
894
  fileArray.forEach(uploadFile);
@@ -940,7 +941,7 @@ var FileUploader = ({
940
941
  case "pending":
941
942
  return "\u51C6\u5907\u4E2D...";
942
943
  case "uploading":
943
- return `\u4E0A\u4F20\u4E2D ${progress.progress.toFixed(1)}%`;
944
+ return "\u4E0A\u4F20\u4E2D " + progress.progress.toFixed(1) + "%";
944
945
  case "processing":
945
946
  return "\u5904\u7406\u4E2D...";
946
947
  case "completed":
@@ -951,16 +952,16 @@ var FileUploader = ({
951
952
  return "\u672A\u77E5\u72B6\u6001";
952
953
  }
953
954
  };
954
- const containerClasses = `
955
- border-2 border-dashed rounded-lg transition-all duration-200
956
- ${isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600"}
957
- ${disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer"}
958
- ${className}
959
- `;
960
- const uploadAreaClasses = `
961
- p-6 text-center
962
- ${mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"}
963
- `;
955
+ const containerClasses = clsx.clsx(
956
+ "border-2 border-dashed rounded-lg transition-all duration-200",
957
+ isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600",
958
+ disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer",
959
+ className
960
+ );
961
+ const uploadAreaClasses = clsx.clsx(
962
+ "p-6 text-center",
963
+ mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"
964
+ );
964
965
  return /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-full space-y-4" }, /* @__PURE__ */ React2__default.default.createElement(
965
966
  "div",
966
967
  {
@@ -973,7 +974,7 @@ var FileUploader = ({
973
974
  /* @__PURE__ */ React2__default.default.createElement("div", { className: uploadAreaClasses }, /* @__PURE__ */ React2__default.default.createElement(
974
975
  lucideReact.Upload,
975
976
  {
976
- className: `mx-auto mb-4 text-gray-400 ${mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12"}`
977
+ className: clsx.clsx("mx-auto mb-4 text-gray-400", mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12")
977
978
  }
978
979
  ), mode === "compact" ? /* @__PURE__ */ React2__default.default.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__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-700 dark:text-gray-300 mb-2" }, "\u4E0A\u4F20\u6587\u4EF6"), /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "text-sm text-gray-500 space-y-1" }, acceptedTypes.length > 0 && /* @__PURE__ */ React2__default.default.createElement("p", null, "\u652F\u6301\u683C\u5F0F: ", acceptedTypes.join(", ")), /* @__PURE__ */ React2__default.default.createElement("p", null, "\u6700\u5927\u5927\u5C0F: ", maxFileSize, "MB | \u6700\u591A\u6587\u4EF6: ", maxFiles, "\u4E2A")))),
979
980
  /* @__PURE__ */ React2__default.default.createElement(
@@ -999,7 +1000,7 @@ var FileUploader = ({
999
1000
  "div",
1000
1001
  {
1001
1002
  className: "bg-blue-500 h-2 rounded-full transition-all duration-300",
1002
- style: { width: `${uploadingFile.progress.progress}%` }
1003
+ style: { width: uploadingFile.progress.progress + "%" }
1003
1004
  }
1004
1005
  )), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-xs text-gray-500" }, formatProgress(uploadingFile.progress)))),
1005
1006
  /* @__PURE__ */ React2__default.default.createElement(
@@ -1171,7 +1172,7 @@ var UniversalFileManager = ({
1171
1172
  });
1172
1173
  }, [onFileSelect, state.files]);
1173
1174
  const handleDeleteFiles = React2.useCallback(async (fileIds) => {
1174
- if (!window.confirm(`\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 ${fileIds.length} \u4E2A\u6587\u4EF6\u5417\uFF1F`)) {
1175
+ if (!window.confirm("\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + fileIds.length + " \u4E2A\u6587\u4EF6\u5417\uFF1F")) {
1175
1176
  return;
1176
1177
  }
1177
1178
  setState((prev) => ({ ...prev, loading: true }));
@@ -1283,7 +1284,7 @@ var UniversalFileManager = ({
1283
1284
  "div",
1284
1285
  {
1285
1286
  key: file.id,
1286
- 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"}`,
1287
+ className: clsx.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"),
1287
1288
  onClick: () => handleFileSelect(file.id, !isSelected)
1288
1289
  },
1289
1290
  allowBatch && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-2 left-2" }, /* @__PURE__ */ React2__default.default.createElement(
@@ -1444,7 +1445,7 @@ var UniversalFileManager = ({
1444
1445
  key: action.key,
1445
1446
  onClick: () => action.onClick(selectedFileList),
1446
1447
  disabled: isDisabled,
1447
- 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"}`
1448
+ className: clsx.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")
1448
1449
  },
1449
1450
  action.icon && /* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-1" }, action.icon),
1450
1451
  action.label
@@ -1452,7 +1453,7 @@ var UniversalFileManager = ({
1452
1453
  }))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2__default.default.createElement(
1453
1454
  "select",
1454
1455
  {
1455
- value: `${state.sortBy}-${state.sortOrder}`,
1456
+ value: state.sortBy + "-" + state.sortOrder,
1456
1457
  onChange: (e) => {
1457
1458
  const [sortBy, sortOrder] = e.target.value.split("-");
1458
1459
  setState((prev) => ({ ...prev, sortBy, sortOrder }));
@@ -1496,7 +1497,7 @@ var UniversalFileManager = ({
1496
1497
  {
1497
1498
  key: pageNum,
1498
1499
  onClick: () => handlePageChange(pageNum),
1499
- className: `px-3 py-1 text-sm border rounded ${pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50"}`
1500
+ className: clsx.clsx("px-3 py-1 text-sm border rounded", pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50")
1500
1501
  },
1501
1502
  pageNum
1502
1503
  )), /* @__PURE__ */ React2__default.default.createElement(
@@ -1523,7 +1524,7 @@ var UniversalFileManager = ({
1523
1524
  className: "mt-2 text-blue-600 hover:text-blue-800"
1524
1525
  },
1525
1526
  "\u70B9\u51FB\u4E0A\u4F20\u7B2C\u4E00\u4E2A\u6587\u4EF6"
1526
- ))) : /* @__PURE__ */ React2__default.default.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__default.default.createElement(
1527
+ ))) : /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement(
1527
1528
  FilePreviewModal,
1528
1529
  {
1529
1530
  file: state.previewFile,
@@ -1551,7 +1552,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1551
1552
  return /* @__PURE__ */ React2__default.default.createElement(
1552
1553
  "img",
1553
1554
  {
1554
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1555
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1555
1556
  alt: file.originalName,
1556
1557
  className: "max-w-full max-h-full object-contain"
1557
1558
  }
@@ -1561,7 +1562,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1561
1562
  return /* @__PURE__ */ React2__default.default.createElement(
1562
1563
  "video",
1563
1564
  {
1564
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1565
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1565
1566
  controls: true,
1566
1567
  className: "max-w-full max-h-full"
1567
1568
  },
@@ -1572,7 +1573,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1572
1573
  return /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-6xl" }, "\u{1F3B5}"), /* @__PURE__ */ React2__default.default.createElement(
1573
1574
  "audio",
1574
1575
  {
1575
- src: file.cdnUrl || `/api/files/${file.id}/download`,
1576
+ src: file.cdnUrl || "/api/files/" + file.id + "/download",
1576
1577
  controls: true,
1577
1578
  className: "w-full max-w-md"
1578
1579
  },
@@ -1583,7 +1584,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1583
1584
  return /* @__PURE__ */ React2__default.default.createElement(
1584
1585
  "iframe",
1585
1586
  {
1586
- src: `${file.cdnUrl || `/api/files/${file.id}/download`}#toolbar=0`,
1587
+ src: (file.cdnUrl || "/api/files/" + file.id + "/download") + "#toolbar=0",
1587
1588
  className: "w-full h-full min-h-96",
1588
1589
  title: file.originalName
1589
1590
  }
@@ -1592,7 +1593,7 @@ var FilePreviewModal = ({ file, onClose }) => {
1592
1593
  return /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center justify-center h-64 text-gray-500" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-4xl mb-4" }, "\u{1F4C4}"), /* @__PURE__ */ React2__default.default.createElement("p", null, "\u6B64\u6587\u4EF6\u7C7B\u578B\u6682\u4E0D\u652F\u6301\u9884\u89C8"), /* @__PURE__ */ React2__default.default.createElement(
1593
1594
  "a",
1594
1595
  {
1595
- href: file.cdnUrl || `/api/files/${file.id}/download`,
1596
+ href: file.cdnUrl || "/api/files/" + file.id + "/download",
1596
1597
  download: file.originalName,
1597
1598
  className: "mt-4 px-4 py-2 text-blue-600 border border-blue-300 rounded hover:bg-blue-50"
1598
1599
  },
@@ -1731,7 +1732,7 @@ var FolderManager = ({
1731
1732
  }));
1732
1733
  }, []);
1733
1734
  const deleteFolder = React2.useCallback(async (folderId, folderName) => {
1734
- 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`)) {
1735
+ 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')) {
1735
1736
  return;
1736
1737
  }
1737
1738
  if (!onFolderDelete) return;
@@ -1790,8 +1791,8 @@ var FolderManager = ({
1790
1791
  return /* @__PURE__ */ React2__default.default.createElement("div", { key: folder.id, className: "select-none" }, /* @__PURE__ */ React2__default.default.createElement(
1791
1792
  "div",
1792
1793
  {
1793
- 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"}`,
1794
- style: { paddingLeft: `${level * 16 + 8}px` },
1794
+ className: clsx.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"),
1795
+ style: { paddingLeft: level * 16 + 8 + "px" },
1795
1796
  onClick: () => selectFolder(folder.id),
1796
1797
  onContextMenu: (e) => handleContextMenu(e, folder.id),
1797
1798
  onDragOver: allowDrag ? (e) => handleDragOver(e, folder.id) : void 0,
@@ -1807,7 +1808,7 @@ var FolderManager = ({
1807
1808
  },
1808
1809
  className: "mr-1 p-1 hover:bg-gray-200 rounded"
1809
1810
  },
1810
- /* @__PURE__ */ React2__default.default.createElement("span", { className: `text-xs transition-transform ${isExpanded ? "rotate-90" : ""}` }, "\u25B6")
1811
+ /* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.clsx("text-xs transition-transform", isExpanded ? "rotate-90" : "") }, "\u25B6")
1811
1812
  ),
1812
1813
  /* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2 text-yellow-600" }, isExpanded ? "\u{1F4C2}" : "\u{1F4C1}"),
1813
1814
  /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1 flex items-center justify-between" }, isEditing ? /* @__PURE__ */ React2__default.default.createElement(
@@ -1833,7 +1834,7 @@ var FolderManager = ({
1833
1834
  "div",
1834
1835
  {
1835
1836
  className: "flex items-center py-1 px-2 ml-4",
1836
- style: { paddingLeft: `${(level + 1) * 16 + 8}px` }
1837
+ style: { paddingLeft: (level + 1) * 16 + 8 + "px" }
1837
1838
  },
1838
1839
  /* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2 text-yellow-600" }, "\u{1F4C1}"),
1839
1840
  /* @__PURE__ */ React2__default.default.createElement(
@@ -2022,7 +2023,7 @@ var FileShareModal = ({
2022
2023
  try {
2023
2024
  const expiresAt = getExpiresAt();
2024
2025
  const mockShareInfo = {
2025
- shareUrl: `${window.location.origin}/share/${generateShareCode()}`,
2026
+ shareUrl: window.location.origin + "/share/" + generateShareCode(),
2026
2027
  password: shareOptions.requirePassword ? shareOptions.password : void 0,
2027
2028
  expiresAt,
2028
2029
  permission: shareOptions.permission,
@@ -2061,7 +2062,7 @@ var FileShareModal = ({
2061
2062
  if (files.length === 1 && files[0]) {
2062
2063
  return files[0].originalName;
2063
2064
  }
2064
- return `${files.length} \u4E2A\u6587\u4EF6`;
2065
+ return files.length + " \u4E2A\u6587\u4EF6";
2065
2066
  }, [files]);
2066
2067
  const renderShareSettings = () => {
2067
2068
  if (shareInfo) return null;
@@ -2215,10 +2216,10 @@ var FileShareModal = ({
2215
2216
  {
2216
2217
  onClick: () => {
2217
2218
  const shareText = [
2218
- `\u6587\u4EF6\u5206\u4EAB\uFF1A${formatFileList()}`,
2219
- `\u94FE\u63A5\uFF1A${shareInfo.shareUrl}`,
2220
- shareInfo.password ? `\u5BC6\u7801\uFF1A${shareInfo.password}` : "",
2221
- shareInfo.expiresAt ? `\u8FC7\u671F\u65F6\u95F4\uFF1A${shareInfo.expiresAt.toLocaleString()}` : "\u6C38\u4E0D\u8FC7\u671F"
2219
+ "\u6587\u4EF6\u5206\u4EAB\uFF1A" + formatFileList(),
2220
+ "\u94FE\u63A5\uFF1A" + shareInfo.shareUrl,
2221
+ shareInfo.password ? "\u5BC6\u7801\uFF1A" + shareInfo.password : "",
2222
+ shareInfo.expiresAt ? "\u8FC7\u671F\u65F6\u95F4\uFF1A" + shareInfo.expiresAt.toLocaleString() : "\u6C38\u4E0D\u8FC7\u671F"
2222
2223
  ].filter(Boolean).join("\n");
2223
2224
  copyToClipboard(shareText);
2224
2225
  },