sa2kit 3.1.0 → 3.2.0
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.
- package/README.md +5 -5
- package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
- package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
- package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
- package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
- package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
- package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
- package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
- package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
- package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
- package/dist/chunk-2234T4A6.js.map +1 -0
- package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
- package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
- package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
- package/dist/chunk-375C7WL7.js.map +1 -0
- package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
- package/dist/chunk-3J24Z4MB.js.map +1 -0
- package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
- package/dist/chunk-3QCATFQV.js.map +1 -0
- package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
- package/dist/chunk-3R6JHA6D.js.map +1 -0
- package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
- package/dist/chunk-4OXKHV7J.js.map +1 -0
- package/dist/chunk-4PJM4752.js +4 -0
- package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
- package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
- package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
- package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
- package/dist/chunk-6HL54I2B.js.map +1 -0
- package/dist/chunk-6V2MIQPF.mjs +77 -0
- package/dist/chunk-6V2MIQPF.mjs.map +1 -0
- package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
- package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
- package/dist/chunk-7PMT4L4I.js +324 -0
- package/dist/chunk-7PMT4L4I.js.map +1 -0
- package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
- package/dist/chunk-7VVZHFEM.js.map +1 -0
- package/dist/chunk-AWHGIKTQ.js +56 -0
- package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
- package/dist/chunk-B3GYF6TY.js +37 -0
- package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
- package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
- package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
- package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
- package/dist/chunk-BTW3SWQN.mjs.map +1 -0
- package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
- package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
- package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
- package/dist/chunk-DO6QYAZV.mjs.map +1 -0
- package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
- package/dist/chunk-DTR53LQO.mjs.map +1 -0
- package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
- package/dist/chunk-EI2S4XDG.mjs.map +1 -0
- package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
- package/dist/chunk-EOZHUI46.js.map +1 -0
- package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
- package/dist/chunk-F2BZIU67.js.map +1 -0
- package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
- package/dist/chunk-F2TEJSCP.js.map +1 -0
- package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
- package/dist/chunk-FCLS5R24.js.map +1 -0
- package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
- package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
- package/dist/chunk-FY2X3LYR.mjs +3 -0
- package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
- package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
- package/dist/chunk-GS4SAW25.mjs.map +1 -0
- package/dist/chunk-H56ICWUO.js +321 -0
- package/dist/chunk-H56ICWUO.js.map +1 -0
- package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
- package/dist/chunk-HG34SGMN.mjs.map +1 -0
- package/dist/chunk-HL4H2HF6.js +279 -0
- package/dist/chunk-HL4H2HF6.js.map +1 -0
- package/dist/chunk-IJIQUMAK.mjs +272 -0
- package/dist/chunk-IJIQUMAK.mjs.map +1 -0
- package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
- package/dist/chunk-KEZFTDZT.mjs.map +1 -0
- package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
- package/dist/chunk-KHOVC2KL.js.map +1 -0
- package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
- package/dist/chunk-KRBSTLKC.js.map +1 -0
- package/dist/chunk-KVYHCGRY.js +2011 -0
- package/dist/chunk-KVYHCGRY.js.map +1 -0
- package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
- package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
- package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
- package/dist/chunk-MJ6XJGAL.js.map +1 -0
- package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
- package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
- package/dist/chunk-MMDSZIXD.mjs +286 -0
- package/dist/chunk-MMDSZIXD.mjs.map +1 -0
- package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
- package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
- package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
- package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
- package/dist/chunk-OIRZXSYM.js +80 -0
- package/dist/chunk-OIRZXSYM.js.map +1 -0
- package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
- package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
- package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
- package/dist/chunk-PLIG5257.mjs.map +1 -0
- package/dist/chunk-QIF4MG5V.mjs +283 -0
- package/dist/chunk-QIF4MG5V.mjs.map +1 -0
- package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
- package/dist/chunk-RHECN4E2.mjs.map +1 -0
- package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
- package/dist/chunk-RHHTZTIN.mjs.map +1 -0
- package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
- package/dist/chunk-RRQ2X26Z.js.map +1 -0
- package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
- package/dist/chunk-RST2T54Y.js.map +1 -0
- package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
- package/dist/chunk-RVNQI6BI.js.map +1 -0
- package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
- package/dist/chunk-S3K4LTRI.mjs.map +1 -0
- package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
- package/dist/chunk-SWZ5XNF6.js.map +1 -0
- package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
- package/dist/chunk-U7HNBCBS.js.map +1 -0
- package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
- package/dist/chunk-UJS3YSD3.mjs.map +1 -0
- package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
- package/dist/chunk-UJUWDF7M.mjs.map +1 -0
- package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
- package/dist/chunk-UR5NENGE.js.map +1 -0
- package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
- package/dist/chunk-V7HGBDCB.mjs.map +1 -0
- package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
- package/dist/chunk-V7RLIZMN.js.map +1 -0
- package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
- package/dist/chunk-VCKXK6V5.js.map +1 -0
- package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
- package/dist/chunk-VIEXDTNF.mjs.map +1 -0
- package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
- package/dist/chunk-VN2DULIA.js.map +1 -0
- package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
- package/dist/chunk-VNWMRUY6.js.map +1 -0
- package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
- package/dist/chunk-VYK4M2D6.mjs.map +1 -0
- package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
- package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
- package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
- package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
- package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
- package/dist/chunk-X5GINUGI.mjs.map +1 -0
- package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
- package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
- package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
- package/dist/chunk-XE5RGZ3B.js.map +1 -0
- package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
- package/dist/chunk-XNTIMVSL.mjs.map +1 -0
- package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
- package/dist/chunk-Y7WHUKJF.js.map +1 -0
- package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
- package/dist/chunk-YIRPPMCN.mjs.map +1 -0
- package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
- package/dist/chunk-Z2SNB5LJ.js.map +1 -0
- package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
- package/dist/chunk-ZOP7YIVX.js.map +1 -0
- package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
- package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
- package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
- package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
- package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
- package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
- package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
- package/dist/common/ai/llm/electron/index.js +67 -0
- package/dist/common/ai/llm/electron/index.mjs +10 -0
- package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
- package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
- package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
- package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
- package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
- package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
- package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
- package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
- package/dist/common/ai/llm/ui/electron/index.js +22 -0
- package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
- package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
- package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/rn/index.js +14 -0
- package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
- package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
- package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
- package/dist/common/ai/llm/ui/web/index.js +21 -0
- package/dist/common/ai/llm/ui/web/index.mjs +8 -0
- package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
- package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
- package/dist/common/ai/llm/web/index.js +66 -0
- package/dist/common/ai/llm/web/index.mjs +9 -0
- package/dist/{analytics → common/analytics}/index.d.mts +1 -1
- package/dist/{analytics → common/analytics}/index.d.ts +1 -1
- package/dist/{analytics → common/analytics}/index.js +79 -79
- package/dist/{analytics → common/analytics}/index.mjs +3 -3
- package/dist/{analytics → common/analytics}/server/index.js +2 -2
- package/dist/common/analytics/server/index.js.map +1 -0
- package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
- package/dist/common/analytics/server/index.mjs.map +1 -0
- package/dist/{api → common/api}/index.d.mts +3 -3
- package/dist/{api → common/api}/index.d.ts +3 -3
- package/dist/common/api/index.js +21 -0
- package/dist/common/api/index.mjs +4 -0
- package/dist/common/auth/components/index.d.mts +9 -9
- package/dist/common/auth/components/index.d.ts +9 -9
- package/dist/common/auth/index.js +6 -6
- package/dist/common/auth/index.mjs +2 -2
- package/dist/common/auth/react/index.d.mts +3 -3
- package/dist/common/auth/react/index.d.ts +3 -3
- package/dist/common/auth/rn/index.d.mts +2 -2
- package/dist/common/auth/rn/index.d.ts +2 -2
- package/dist/common/auth/rn/index.js +2 -2
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +1 -1
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/components/index.d.mts +4 -0
- package/dist/common/components/index.d.ts +4 -0
- package/dist/common/components/index.js +414 -0
- package/dist/common/components/index.mjs +9 -0
- package/dist/{config → common/config}/index.d.mts +1 -1
- package/dist/{config → common/config}/index.d.ts +1 -1
- package/dist/common/config/index.js +21 -0
- package/dist/common/config/index.mjs +4 -0
- package/dist/{config → common/config}/server/index.js +5 -5
- package/dist/common/config/server/index.js.map +1 -0
- package/dist/{config → common/config}/server/index.mjs +5 -5
- package/dist/common/config/server/index.mjs.map +1 -0
- package/dist/common/export/index.d.mts +2 -2
- package/dist/common/export/index.d.ts +2 -2
- package/dist/common/export/index.js +67 -67
- package/dist/common/export/index.mjs +3 -3
- package/dist/common/export/server/index.d.mts +2 -2
- package/dist/common/export/server/index.d.ts +2 -2
- package/dist/common/export/server/index.js +76 -48
- package/dist/common/export/server/index.mjs +3 -3
- package/dist/common/file/index.d.mts +2 -2
- package/dist/common/file/index.d.ts +2 -2
- package/dist/common/file/index.js +27 -27
- package/dist/common/file/index.mjs +5 -5
- package/dist/common/file/server/index.d.mts +2 -2
- package/dist/common/file/server/index.d.ts +2 -2
- package/dist/common/file/server/index.js +58 -50
- package/dist/common/file/server/index.mjs +8 -8
- package/dist/{i18n → common/i18n}/index.d.mts +1 -1
- package/dist/{i18n → common/i18n}/index.d.ts +1 -1
- package/dist/{i18n → common/i18n}/index.js +18 -18
- package/dist/{i18n → common/i18n}/index.mjs +2 -2
- package/dist/common/imageCrop/index.d.mts +2 -0
- package/dist/common/imageCrop/index.d.ts +2 -0
- package/dist/common/imageCrop/index.js +61 -0
- package/dist/common/imageCrop/index.mjs +4 -0
- package/dist/common/index.d.mts +16 -16
- package/dist/common/index.d.ts +16 -16
- package/dist/common/index.js +75 -67
- package/dist/common/index.mjs +26 -26
- package/dist/common/logger/index.d.mts +1 -1
- package/dist/common/logger/index.d.ts +1 -1
- package/dist/common/logger/index.js +6 -7
- package/dist/common/logger/index.mjs +1 -2
- package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
- package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
- package/dist/{ossFile → common/ossFile}/index.js +26 -26
- package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
- package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
- package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
- package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
- package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
- package/dist/common/platform/index.js +8 -8
- package/dist/common/platform/index.mjs +4 -4
- package/dist/common/request/index.d.mts +1 -1
- package/dist/common/request/index.d.ts +1 -1
- package/dist/common/request/index.js +5 -6
- package/dist/common/request/index.mjs +2 -3
- package/dist/common/storage/index.d.mts +1 -1
- package/dist/common/storage/index.d.ts +1 -1
- package/dist/common/storage/index.js +17 -17
- package/dist/common/storage/index.mjs +5 -5
- package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
- package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
- package/dist/{universalExport → common/universalExport}/index.js +67 -67
- package/dist/common/universalExport/index.mjs +5 -0
- package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
- package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
- package/dist/common/universalExport/server/index.js +151 -0
- package/dist/common/universalExport/server/index.mjs +6 -0
- package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
- package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
- package/dist/{universalFile → common/universalFile}/index.js +63 -63
- package/dist/common/universalFile/index.js.map +1 -0
- package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
- package/dist/common/universalFile/index.mjs.map +1 -0
- package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
- package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
- package/dist/common/utils/index.d.mts +1 -1
- package/dist/common/utils/index.d.ts +1 -1
- package/dist/common/utils/index.js +11 -12
- package/dist/common/utils/index.mjs +2 -3
- package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
- package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
- package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
- package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
- package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
- package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
- package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
- package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
- package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
- package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
- package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
- package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
- package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
- package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
- package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
- package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
- package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
- package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
- package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
- package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
- package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
- package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
- package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
- package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
- package/package.json +292 -312
- package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
- package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
- package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
- package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
- package/dist/ConfigService-BxK06xP6.d.mts +0 -262
- package/dist/ConfigService-BxK06xP6.d.ts +0 -262
- package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
- package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
- package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
- package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
- package/dist/ai/llm/electron/index.js +0 -66
- package/dist/ai/llm/electron/index.mjs +0 -9
- package/dist/ai/llm/ui/electron/index.d.mts +0 -5
- package/dist/ai/llm/ui/electron/index.d.ts +0 -5
- package/dist/ai/llm/ui/electron/index.js +0 -21
- package/dist/ai/llm/ui/electron/index.mjs +0 -8
- package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
- package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
- package/dist/ai/llm/ui/miniapp/index.js +0 -14
- package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
- package/dist/ai/llm/ui/rn/index.d.mts +0 -9
- package/dist/ai/llm/ui/rn/index.d.ts +0 -9
- package/dist/ai/llm/ui/rn/index.js +0 -14
- package/dist/ai/llm/ui/rn/index.mjs +0 -5
- package/dist/ai/llm/ui/web/index.js +0 -20
- package/dist/ai/llm/ui/web/index.mjs +0 -7
- package/dist/ai/llm/web/index.js +0 -65
- package/dist/ai/llm/web/index.mjs +0 -8
- package/dist/analytics/server/index.js.map +0 -1
- package/dist/analytics/server/index.mjs.map +0 -1
- package/dist/api/index.js +0 -21
- package/dist/api/index.mjs +0 -4
- package/dist/audioDetection/index.d.mts +0 -449
- package/dist/audioDetection/index.d.ts +0 -449
- package/dist/audioDetection/index.js +0 -1244
- package/dist/audioDetection/index.js.map +0 -1
- package/dist/audioDetection/index.mjs +0 -1227
- package/dist/audioDetection/index.mjs.map +0 -1
- package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
- package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
- package/dist/business/index.d.mts +0 -2
- package/dist/business/index.d.ts +0 -2
- package/dist/business/index.js +0 -581
- package/dist/business/index.js.map +0 -1
- package/dist/business/index.mjs +0 -575
- package/dist/business/index.mjs.map +0 -1
- package/dist/calendar/index.d.mts +0 -1325
- package/dist/calendar/index.d.ts +0 -1325
- package/dist/calendar/index.js +0 -5964
- package/dist/calendar/index.js.map +0 -1
- package/dist/calendar/index.mjs +0 -5878
- package/dist/calendar/index.mjs.map +0 -1
- package/dist/calendar/routes/index.d.mts +0 -191
- package/dist/calendar/routes/index.d.ts +0 -191
- package/dist/calendar/routes/index.js +0 -844
- package/dist/calendar/routes/index.js.map +0 -1
- package/dist/calendar/routes/index.mjs +0 -826
- package/dist/calendar/routes/index.mjs.map +0 -1
- package/dist/chunk-25OFOKNF.js.map +0 -1
- package/dist/chunk-2Y7BKFKZ.js +0 -37
- package/dist/chunk-3CSCIRQY.js +0 -17
- package/dist/chunk-3CSCIRQY.js.map +0 -1
- package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
- package/dist/chunk-3NHAT7D4.mjs.map +0 -1
- package/dist/chunk-4FDUURSD.js +0 -22
- package/dist/chunk-4FDUURSD.js.map +0 -1
- package/dist/chunk-4OOANEJV.mjs.map +0 -1
- package/dist/chunk-4WBCWJSN.js.map +0 -1
- package/dist/chunk-5GBDDXYL.mjs +0 -23
- package/dist/chunk-5GBDDXYL.mjs.map +0 -1
- package/dist/chunk-5USIS3UM.js +0 -4
- package/dist/chunk-6PMXAK7F.js.map +0 -1
- package/dist/chunk-7B5SI4OF.mjs +0 -15
- package/dist/chunk-7B5SI4OF.mjs.map +0 -1
- package/dist/chunk-ACUFEDVQ.js.map +0 -1
- package/dist/chunk-AQPU2AXH.js.map +0 -1
- package/dist/chunk-ATUCZXJY.js.map +0 -1
- package/dist/chunk-BCE6RUZV.js.map +0 -1
- package/dist/chunk-BIHYZA67.mjs.map +0 -1
- package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
- package/dist/chunk-CAYOQDBR.js.map +0 -1
- package/dist/chunk-CIVO4R6N.mjs.map +0 -1
- package/dist/chunk-CX2GHCAI.mjs.map +0 -1
- package/dist/chunk-DIF5VRL3.mjs.map +0 -1
- package/dist/chunk-EQXPL7TN.mjs.map +0 -1
- package/dist/chunk-FCEBAWN6.js +0 -18
- package/dist/chunk-FCEBAWN6.js.map +0 -1
- package/dist/chunk-FHIE5MTC.mjs +0 -541
- package/dist/chunk-FHIE5MTC.mjs.map +0 -1
- package/dist/chunk-FHLTPXAR.js +0 -56
- package/dist/chunk-FIUBFREP.mjs.map +0 -1
- package/dist/chunk-FXQOXLDE.js.map +0 -1
- package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
- package/dist/chunk-G6NSKJMH.js.map +0 -1
- package/dist/chunk-G7UBMCUT.mjs.map +0 -1
- package/dist/chunk-GSNGCENJ.js.map +0 -1
- package/dist/chunk-GWNBVGDT.mjs.map +0 -1
- package/dist/chunk-HDMIOOZY.mjs.map +0 -1
- package/dist/chunk-HJ6MH7J7.js.map +0 -1
- package/dist/chunk-HJZHQW5R.mjs.map +0 -1
- package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
- package/dist/chunk-KH6RQ4J5.js.map +0 -1
- package/dist/chunk-KQ643L7Z.js.map +0 -1
- package/dist/chunk-LFB5EIIM.mjs +0 -31
- package/dist/chunk-LFB5EIIM.mjs.map +0 -1
- package/dist/chunk-MBANGIG3.mjs.map +0 -1
- package/dist/chunk-NCRP2YHY.mjs.map +0 -1
- package/dist/chunk-NDGHXVGS.js +0 -25
- package/dist/chunk-NDGHXVGS.js.map +0 -1
- package/dist/chunk-NDPO5OMC.js +0 -563
- package/dist/chunk-NDPO5OMC.js.map +0 -1
- package/dist/chunk-PBI7FKMB.js.map +0 -1
- package/dist/chunk-Q5EDCKQA.js.map +0 -1
- package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
- package/dist/chunk-QSKLQX6H.js.map +0 -1
- package/dist/chunk-QXAOXBVB.mjs.map +0 -1
- package/dist/chunk-R2DXTE2L.js.map +0 -1
- package/dist/chunk-RTD2WHQQ.mjs +0 -16
- package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
- package/dist/chunk-S6YSGVWD.js.map +0 -1
- package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
- package/dist/chunk-SLKOEYFH.js.map +0 -1
- package/dist/chunk-TC5YU6A4.mjs.map +0 -1
- package/dist/chunk-UCOE6SET.js.map +0 -1
- package/dist/chunk-UIYKZ73N.js +0 -36
- package/dist/chunk-UIYKZ73N.js.map +0 -1
- package/dist/chunk-V7EVKD5G.mjs.map +0 -1
- package/dist/chunk-VMTEDX5H.js.map +0 -1
- package/dist/chunk-VRN76M56.mjs +0 -3
- package/dist/chunk-VXFUXZN5.mjs +0 -20
- package/dist/chunk-VXFUXZN5.mjs.map +0 -1
- package/dist/chunk-WEEXCPSE.mjs.map +0 -1
- package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
- package/dist/chunk-WW4GE6CZ.js.map +0 -1
- package/dist/chunk-XJ7ZAGC5.js.map +0 -1
- package/dist/chunk-XUS5ACKR.mjs.map +0 -1
- package/dist/chunk-YOTQG4NP.mjs.map +0 -1
- package/dist/chunk-ZGVB35L2.mjs.map +0 -1
- package/dist/chunk-ZLYPALF3.js.map +0 -1
- package/dist/chunk-ZM2SZJTZ.js.map +0 -1
- package/dist/chunk-ZRAW3HXA.js.map +0 -1
- package/dist/chunk-ZWQJSZEY.js.map +0 -1
- package/dist/components/index.js +0 -2516
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs.map +0 -1
- package/dist/config/index.js +0 -21
- package/dist/config/index.mjs +0 -4
- package/dist/config/server/index.js.map +0 -1
- package/dist/config/server/index.mjs.map +0 -1
- package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
- package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
- package/dist/festivalCard/index.d.mts +0 -76
- package/dist/festivalCard/index.d.ts +0 -76
- package/dist/festivalCard/index.js +0 -1492
- package/dist/festivalCard/index.js.map +0 -1
- package/dist/festivalCard/index.mjs +0 -1475
- package/dist/festivalCard/index.mjs.map +0 -1
- package/dist/festivalCard/routes/index.d.mts +0 -42
- package/dist/festivalCard/routes/index.d.ts +0 -42
- package/dist/festivalCard/routes/index.js +0 -361
- package/dist/festivalCard/routes/index.js.map +0 -1
- package/dist/festivalCard/routes/index.mjs +0 -356
- package/dist/festivalCard/routes/index.mjs.map +0 -1
- package/dist/festivalCard/server/index.d.mts +0 -120
- package/dist/festivalCard/server/index.d.ts +0 -120
- package/dist/festivalCard/server/index.js +0 -272
- package/dist/festivalCard/server/index.js.map +0 -1
- package/dist/festivalCard/server/index.mjs +0 -265
- package/dist/festivalCard/server/index.mjs.map +0 -1
- package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
- package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
- package/dist/imageCrop/index.js.map +0 -1
- package/dist/imageCrop/index.mjs.map +0 -1
- package/dist/index-Bjem5rWn.d.mts +0 -17
- package/dist/index-C5U-2hJq.d.ts +0 -23
- package/dist/index-CifSBBP2.d.ts +0 -17
- package/dist/index-D0K4ehme.d.mts +0 -20
- package/dist/index-DLnfKN-a.d.mts +0 -23
- package/dist/index-DSel44Ke.d.mts +0 -93
- package/dist/index-DSel44Ke.d.ts +0 -93
- package/dist/index-DZ5iJtNO.d.mts +0 -102
- package/dist/index-DZ5iJtNO.d.ts +0 -102
- package/dist/index-Da7qdkgW.d.ts +0 -20
- package/dist/index-DrPcMJPc.d.mts +0 -250
- package/dist/index-DrPcMJPc.d.ts +0 -250
- package/dist/index-oLUvfqT8.d.ts +0 -20
- package/dist/index-pe38RDgC.d.mts +0 -20
- package/dist/index.d.mts +0 -11611
- package/dist/index.d.ts +0 -11611
- package/dist/index.js +0 -17230
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -16954
- package/dist/index.mjs.map +0 -1
- package/dist/logger/index.js +0 -29
- package/dist/logger/index.mjs +0 -4
- package/dist/mikuContest/ui/web/index.d.mts +0 -2
- package/dist/mikuContest/ui/web/index.d.ts +0 -2
- package/dist/mikuContest/ui/web/index.js +0 -353
- package/dist/mikuContest/ui/web/index.js.map +0 -1
- package/dist/mikuContest/ui/web/index.mjs +0 -343
- package/dist/mikuContest/ui/web/index.mjs.map +0 -1
- package/dist/mikuFireworks3D/index.d.mts +0 -268
- package/dist/mikuFireworks3D/index.d.ts +0 -268
- package/dist/mikuFireworks3D/index.js +0 -1267
- package/dist/mikuFireworks3D/index.js.map +0 -1
- package/dist/mikuFireworks3D/index.mjs +0 -1228
- package/dist/mikuFireworks3D/index.mjs.map +0 -1
- package/dist/mikuFusionGame/index.d.mts +0 -117
- package/dist/mikuFusionGame/index.d.ts +0 -117
- package/dist/mikuFusionGame/index.js +0 -1208
- package/dist/mikuFusionGame/index.js.map +0 -1
- package/dist/mikuFusionGame/index.mjs +0 -1195
- package/dist/mikuFusionGame/index.mjs.map +0 -1
- package/dist/mmd/admin/index.d.mts +0 -487
- package/dist/mmd/admin/index.d.ts +0 -487
- package/dist/mmd/admin/index.js +0 -1058
- package/dist/mmd/admin/index.js.map +0 -1
- package/dist/mmd/admin/index.mjs +0 -1027
- package/dist/mmd/admin/index.mjs.map +0 -1
- package/dist/mmd/index.d.mts +0 -2467
- package/dist/mmd/index.d.ts +0 -2467
- package/dist/mmd/index.js +0 -10119
- package/dist/mmd/index.js.map +0 -1
- package/dist/mmd/index.mjs +0 -10028
- package/dist/mmd/index.mjs.map +0 -1
- package/dist/mmd/server/index.d.mts +0 -139
- package/dist/mmd/server/index.d.ts +0 -139
- package/dist/mmd/server/index.js +0 -424
- package/dist/mmd/server/index.js.map +0 -1
- package/dist/mmd/server/index.mjs +0 -404
- package/dist/mmd/server/index.mjs.map +0 -1
- package/dist/music/index.d.mts +0 -74
- package/dist/music/index.d.ts +0 -74
- package/dist/music/index.js +0 -830
- package/dist/music/index.js.map +0 -1
- package/dist/music/index.mjs +0 -809
- package/dist/music/index.mjs.map +0 -1
- package/dist/music/server/index.d.mts +0 -1
- package/dist/music/server/index.d.ts +0 -1
- package/dist/music/server/index.js +0 -194
- package/dist/music/server/index.js.map +0 -1
- package/dist/music/server/index.mjs +0 -182
- package/dist/music/server/index.mjs.map +0 -1
- package/dist/navigation/index.d.mts +0 -93
- package/dist/navigation/index.d.ts +0 -93
- package/dist/navigation/index.js +0 -453
- package/dist/navigation/index.js.map +0 -1
- package/dist/navigation/index.mjs +0 -443
- package/dist/navigation/index.mjs.map +0 -1
- package/dist/portfolio/index.d.mts +0 -66
- package/dist/portfolio/index.d.ts +0 -66
- package/dist/portfolio/index.js +0 -736
- package/dist/portfolio/index.js.map +0 -1
- package/dist/portfolio/index.mjs +0 -724
- package/dist/portfolio/index.mjs.map +0 -1
- package/dist/qqbot/server/index.d.mts +0 -216
- package/dist/qqbot/server/index.d.ts +0 -216
- package/dist/qqbot/server/index.js +0 -394
- package/dist/qqbot/server/index.js.map +0 -1
- package/dist/qqbot/server/index.mjs +0 -385
- package/dist/qqbot/server/index.mjs.map +0 -1
- package/dist/qqbot/ui/web/index.d.mts +0 -10
- package/dist/qqbot/ui/web/index.d.ts +0 -10
- package/dist/qqbot/ui/web/index.js +0 -105
- package/dist/qqbot/ui/web/index.js.map +0 -1
- package/dist/qqbot/ui/web/index.mjs +0 -99
- package/dist/qqbot/ui/web/index.mjs.map +0 -1
- package/dist/request/index.js +0 -22
- package/dist/request/index.mjs +0 -5
- package/dist/screenReceiver/index.d.mts +0 -86
- package/dist/screenReceiver/index.d.ts +0 -86
- package/dist/screenReceiver/index.js +0 -281
- package/dist/screenReceiver/index.js.map +0 -1
- package/dist/screenReceiver/index.mjs +0 -273
- package/dist/screenReceiver/index.mjs.map +0 -1
- package/dist/storage/index.js +0 -48
- package/dist/storage/index.mjs +0 -7
- package/dist/testYourself/admin/index.d.mts +0 -58
- package/dist/testYourself/admin/index.d.ts +0 -58
- package/dist/testYourself/admin/index.js +0 -1009
- package/dist/testYourself/admin/index.js.map +0 -1
- package/dist/testYourself/admin/index.mjs +0 -1002
- package/dist/testYourself/admin/index.mjs.map +0 -1
- package/dist/testYourself/index.d.mts +0 -53
- package/dist/testYourself/index.d.ts +0 -53
- package/dist/testYourself/index.js +0 -2551
- package/dist/testYourself/index.js.map +0 -1
- package/dist/testYourself/index.mjs +0 -2531
- package/dist/testYourself/index.mjs.map +0 -1
- package/dist/testYourself/server/index.d.mts +0 -1029
- package/dist/testYourself/server/index.d.ts +0 -1029
- package/dist/testYourself/server/index.js +0 -825
- package/dist/testYourself/server/index.js.map +0 -1
- package/dist/testYourself/server/index.mjs +0 -816
- package/dist/testYourself/server/index.mjs.map +0 -1
- package/dist/types-B6B210gX.d.mts +0 -270
- package/dist/types-B6B210gX.d.ts +0 -270
- package/dist/types-Bdnte5EN.d.mts +0 -292
- package/dist/types-Cs0CLvrH.d.mts +0 -70
- package/dist/types-Cs0CLvrH.d.ts +0 -70
- package/dist/types-HorDyIRv.d.mts +0 -303
- package/dist/types-HorDyIRv.d.ts +0 -303
- package/dist/types-_rFX1atk.d.ts +0 -292
- package/dist/universalExport/index.mjs +0 -5
- package/dist/universalExport/server/index.js +0 -123
- package/dist/universalExport/server/index.mjs +0 -6
- package/dist/universalFile/index.js.map +0 -1
- package/dist/universalFile/index.mjs.map +0 -1
- package/dist/universalFile/server/index.js.map +0 -1
- package/dist/universalFile/server/index.mjs.map +0 -1
- package/dist/utils/index.js +0 -46
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/index.mjs +0 -5
- package/dist/utils/index.mjs.map +0 -1
- package/dist/vocaloidBooth/index.d.mts +0 -64
- package/dist/vocaloidBooth/index.d.ts +0 -64
- package/dist/vocaloidBooth/index.js +0 -376
- package/dist/vocaloidBooth/index.js.map +0 -1
- package/dist/vocaloidBooth/index.mjs +0 -362
- package/dist/vocaloidBooth/index.mjs.map +0 -1
- package/dist/vocaloidBooth/server/index.d.mts +0 -111
- package/dist/vocaloidBooth/server/index.d.ts +0 -111
- package/dist/vocaloidBooth/server/index.js +0 -247
- package/dist/vocaloidBooth/server/index.js.map +0 -1
- package/dist/vocaloidBooth/server/index.mjs +0 -237
- package/dist/vocaloidBooth/server/index.mjs.map +0 -1
- package/dist/vocaloidBooth/web/index.d.mts +0 -3
- package/dist/vocaloidBooth/web/index.d.ts +0 -3
- package/dist/vocaloidBooth/web/index.js +0 -376
- package/dist/vocaloidBooth/web/index.js.map +0 -1
- package/dist/vocaloidBooth/web/index.mjs +0 -362
- package/dist/vocaloidBooth/web/index.mjs.map +0 -1
- /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/index.js.map +0 -0
- /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
- /package/dist/{api → common/api}/index.js.map +0 -0
- /package/dist/{api → common/api}/index.mjs.map +0 -0
- /package/dist/{config → common/components}/index.js.map +0 -0
- /package/dist/{config → common/components}/index.mjs.map +0 -0
- /package/dist/{i18n → common/config}/index.js.map +0 -0
- /package/dist/{i18n → common/config}/index.mjs.map +0 -0
- /package/dist/{config → common/config}/server/index.d.mts +0 -0
- /package/dist/{config → common/config}/server/index.d.ts +0 -0
- /package/dist/{logger → common/i18n}/index.js.map +0 -0
- /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
- /package/dist/{storage → common/universalExport}/index.js.map +0 -0
- /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/universalFile/components/FileUploader.tsx","../../../src/common/universalFile/components/UniversalFileManager.tsx","../../../src/common/universalFile/components/FolderManager.tsx","../../../src/common/universalFile/components/FileShareModal.tsx"],"names":["useState","useRef","React","Image","Film","Music","FileText","validateFile","useCallback","error","formatFileSize","clsx","Upload","AlertCircle","CheckCircle2","Loader2","X","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 通用文件上传组件\n * Universal File Uploader Component\n *\n * 支持拖拽上传、进度显示、多文件上传等功能\n * 使用 Tailwind CSS 样式,支持暗色模式\n */\n\n'use client';\n\nimport React, { useState, useRef, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport {\n Upload,\n X,\n FileText,\n Image,\n Film,\n Music,\n AlertCircle,\n CheckCircle2,\n Loader2,\n} from 'lucide-react';\n\nimport type {\n FileMetadata,\n UploadProgress,\n UploadFileInfo,\n ProcessingOptions,\n} from '../types';\nimport type { UniversalFileService } from '../server/UniversalFileService';\n\n// ============= 类型定义 =============\n\nexport interface FileUploaderProps {\n /** 文件服务实例 */\n fileService: UniversalFileService;\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 允许的文件类型 */\n acceptedTypes?: string[];\n /** 最大文件大小(MB) */\n maxFileSize?: number;\n /** 最大文件数量 */\n maxFiles?: number;\n /** 是否支持多文件上传 */\n multiple?: boolean;\n /** 是否启用文件处理 */\n enableProcessing?: boolean;\n /** 默认处理选项 */\n defaultProcessingOptions?: ProcessingOptions;\n /** 上传成功回调 */\n onUploadSuccess?: (files: FileMetadata[]) => void;\n /** 上传失败回调 */\n onUploadError?: (error: string) => void;\n /** 上传进度回调 */\n onProgress?: (progress: UploadProgress[]) => void;\n /** 自定义样式类名 */\n className?: string;\n /** 是否禁用 */\n disabled?: boolean;\n /** 显示模式 */\n mode?: 'compact' | 'normal' | 'detailed';\n}\n\nexport interface UploadingFile {\n id: string;\n file: File;\n progress: UploadProgress;\n metadata?: FileMetadata;\n error?: string;\n}\n\n// ============= 主组件 =============\n\nexport const FileUploader: React.FC<FileUploaderProps> = ({\n fileService,\n moduleId,\n businessId,\n acceptedTypes = [],\n maxFileSize = 100, // 100MB\n maxFiles = 10,\n multiple = true,\n enableProcessing = false,\n defaultProcessingOptions,\n onUploadSuccess,\n onUploadError,\n onProgress,\n className = '',\n disabled = false,\n mode = 'normal',\n}) => {\n // ============= 状态管理 =============\n\n const [uploadingFiles, setUploadingFiles] = useState<UploadingFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const [completedFiles, setCompletedFiles] = useState<FileMetadata[]>([]);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // ============= 文件类型图标 =============\n\n const getFileIcon = (mimeType: string) => {\n if (mimeType.startsWith('image/')) return <Image className=\"w-5 h-5\" />;\n if (mimeType.startsWith('video/')) return <Film className=\"w-5 h-5\" />;\n if (mimeType.startsWith('audio/')) return <Music className=\"w-5 h-5\" />;\n return <FileText className=\"w-5 h-5\" />;\n };\n\n // ============= 文件验证 =============\n\n const validateFile = (file: File): string | null => {\n // 检查文件大小\n if (file.size > maxFileSize * 1024 * 1024) {\n return '文件大小不能超过 ' + (maxFileSize) + 'MB';\n }\n\n // 检查文件类型\n if (acceptedTypes.length > 0 && !acceptedTypes.includes(file.type)) {\n return '不支持的文件类型: ' + (file.type);\n }\n\n return null;\n };\n\n // ============= 文件上传逻辑 =============\n\n const uploadFile = useCallback(\n async (file: File): Promise<void> => {\n const fileId = 'upload_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n\n // 验证文件\n const error = validateFile(file);\n if (error) {\n onUploadError?.(error);\n return;\n }\n\n // 初始化上传进度\n const initialProgress: UploadProgress = {\n fileId,\n status: 'pending',\n progress: 0,\n uploadedBytes: 0,\n totalBytes: file.size,\n speed: 0,\n remainingTime: 0,\n };\n\n const uploadingFile: UploadingFile = {\n id: fileId,\n file,\n progress: initialProgress,\n };\n\n setUploadingFiles((prev) => [...prev, uploadingFile]);\n\n try {\n // 构建上传文件信息\n const uploadInfo: UploadFileInfo = {\n file,\n moduleId,\n businessId,\n permission: 'public',\n needsProcessing: enableProcessing,\n processingOptions: defaultProcessingOptions,\n };\n\n // 开始上传\n const result = await fileService.uploadFile(\n uploadInfo,\n undefined, // 使用默认存储类型\n (progress) => {\n setUploadingFiles((prev) =>\n prev.map((f) => (f.id === fileId ? { ...f, progress } : f))\n );\n\n // 调用外部进度回调\n const allProgress = uploadingFiles.map((f) => f.progress);\n onProgress?.(allProgress);\n }\n );\n\n // 上传成功,result直接是FileMetadata\n setUploadingFiles((prev) => prev.filter((f) => f.id !== fileId));\n setCompletedFiles((prev) => [...prev, result]);\n onUploadSuccess?.([result]);\n } catch (error) {\n console.error('文件上传失败:', error);\n\n const errorMessage = error instanceof Error ? error.message : '上传失败';\n\n setUploadingFiles((prev) =>\n prev.map((f) => (f.id === fileId ? { ...f, error: errorMessage } : f))\n );\n\n onUploadError?.(errorMessage);\n }\n },\n [\n fileService,\n moduleId,\n businessId,\n enableProcessing,\n defaultProcessingOptions,\n maxFileSize,\n acceptedTypes,\n onUploadSuccess,\n onUploadError,\n onProgress,\n uploadingFiles,\n ]\n );\n\n // ============= 文件选择处理 =============\n\n const handleFileSelect = useCallback(\n (files: FileList | File[]) => {\n const fileArray = Array.from(files);\n\n // 检查文件数量限制\n if (completedFiles.length + uploadingFiles.length + fileArray.length > maxFiles) {\n onUploadError?.('最多只能上传 ' + (maxFiles) + ' 个文件');\n return;\n }\n\n // 逐个上传文件\n fileArray.forEach(uploadFile);\n },\n [completedFiles.length, uploadingFiles.length, maxFiles, onUploadError, uploadFile]\n );\n\n // ============= 事件处理 =============\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files && files.length > 0) {\n handleFileSelect(files);\n }\n // 清空input值,允许重复选择同一文件\n event.target.value = '';\n };\n\n const handleDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setIsDragOver(true);\n };\n\n const handleDragLeave = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setIsDragOver(false);\n };\n\n const handleDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setIsDragOver(false);\n\n const files = event.dataTransfer.files;\n if (files.length > 0) {\n handleFileSelect(files);\n }\n };\n\n const handleClick = () => {\n if (!disabled) {\n fileInputRef.current?.click();\n }\n };\n\n const removeUploadingFile = (fileId: string) => {\n setUploadingFiles((prev) => prev.filter((f) => f.id !== fileId));\n };\n\n const removeCompletedFile = (fileId: string) => {\n setCompletedFiles((prev) => prev.filter((f) => f.id !== fileId));\n };\n\n // ============= 渲染辅助函数 =============\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n };\n\n const formatProgress = (progress: UploadProgress): string => {\n switch (progress.status) {\n case 'pending':\n return '准备中...';\n case 'uploading':\n return '上传中 ' + (progress.progress.toFixed(1)) + '%';\n case 'processing':\n return '处理中...';\n case 'completed':\n return '完成';\n case 'failed':\n return '失败';\n default:\n return '未知状态';\n }\n };\n\n // ============= 样式计算 =============\n\n const containerClasses = clsx(\n 'border-2 border-dashed rounded-lg transition-all duration-200',\n isDragOver\n ? 'border-blue-400 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600',\n disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-blue-400 cursor-pointer',\n className\n );\n\n const uploadAreaClasses = clsx(\n 'p-6 text-center',\n mode === 'compact' ? 'p-4' : mode === 'detailed' ? 'p-8' : 'p-6'\n );\n\n // ============= 渲染 =============\n\n return (\n <div className=\"w-full space-y-4\">\n {/* 文件上传区域 */}\n <div\n className={containerClasses}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n >\n <div className={uploadAreaClasses}>\n <Upload\n className={clsx('mx-auto mb-4 text-gray-400', mode === 'compact' ? 'w-8 h-8 mb-2' : 'w-12 h-12')}\n />\n\n {mode === 'compact' ? (\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">点击上传或拖拽文件到这里</p>\n ) : (\n <>\n <h3 className=\"text-lg font-semibold text-gray-700 dark:text-gray-300 mb-2\">\n 上传文件\n </h3>\n <p className=\"text-gray-600 dark:text-gray-400 mb-2\">点击选择文件或拖拽文件到这里</p>\n {mode === 'detailed' && (\n <div className=\"text-sm text-gray-500 space-y-1\">\n {acceptedTypes.length > 0 && <p>支持格式: {acceptedTypes.join(', ')}</p>}\n <p>\n 最大大小: {maxFileSize}MB | 最多文件: {maxFiles}个\n </p>\n </div>\n )}\n </>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple={multiple}\n accept={acceptedTypes.join(',')}\n onChange={handleInputChange}\n className=\"hidden\"\n disabled={disabled}\n />\n </div>\n\n {/* 上传进度列表 */}\n {uploadingFiles.length > 0 && (\n <div className=\"space-y-2\">\n <h4 className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n 上传中 ({uploadingFiles.length})\n </h4>\n\n {uploadingFiles.map((uploadingFile) => (\n <div\n key={uploadingFile.id}\n className=\"flex items-center space-x-3 p-3 bg-gray-50 dark:bg-gray-800 rounded-lg\"\n >\n {/* 文件图标 */}\n <div className=\"flex-shrink-0\">\n {uploadingFile.progress.status === 'failed' ? (\n <AlertCircle className=\"w-5 h-5 text-red-500\" />\n ) : uploadingFile.progress.status === 'completed' ? (\n <CheckCircle2 className=\"w-5 h-5 text-green-500\" />\n ) : (\n <Loader2 className=\"w-5 h-5 text-blue-500 animate-spin\" />\n )}\n </div>\n\n {/* 文件信息 */}\n <div className=\"flex-grow min-w-0\">\n <div className=\"flex items-center justify-between mb-1\">\n <p className=\"text-sm font-medium text-gray-700 dark:text-gray-300 truncate\">\n {uploadingFile.file.name}\n </p>\n <span className=\"text-xs text-gray-500\">\n {formatFileSize(uploadingFile.file.size)}\n </span>\n </div>\n\n {uploadingFile.error ? (\n <p className=\"text-xs text-red-500\">{uploadingFile.error}</p>\n ) : (\n <>\n <div className=\"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2 mb-1\">\n <div\n className=\"bg-blue-500 h-2 rounded-full transition-all duration-300\"\n style={{ width: (uploadingFile.progress.progress) + '%' }}\n />\n </div>\n <p className=\"text-xs text-gray-500\">\n {formatProgress(uploadingFile.progress)}\n </p>\n </>\n )}\n </div>\n\n {/* 移除按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n removeUploadingFile(uploadingFile.id);\n }}\n className=\"flex-shrink-0 p-1 text-gray-400 hover:text-red-500 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* 已完成文件列表 */}\n {completedFiles.length > 0 && (\n <div className=\"space-y-2\">\n <h4 className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n 已完成 ({completedFiles.length})\n </h4>\n\n {completedFiles.map((file) => (\n <div\n key={file.id}\n className=\"flex items-center space-x-3 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\"\n >\n {/* 文件图标 */}\n <div className=\"flex-shrink-0\">{getFileIcon(file.mimeType)}</div>\n\n {/* 文件信息 */}\n <div className=\"flex-grow min-w-0\">\n <div className=\"flex items-center justify-between mb-1\">\n <p className=\"text-sm font-medium text-gray-700 dark:text-gray-300 truncate\">\n {file.originalName}\n </p>\n <span className=\"text-xs text-gray-500\">{formatFileSize(file.size)}</span>\n </div>\n <p className=\"text-xs text-green-600 dark:text-green-400\">\n 上传成功 • {new Date(file.uploadTime).toLocaleTimeString()}\n </p>\n </div>\n\n {/* 移除按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n removeCompletedFile(file.id);\n }}\n className=\"flex-shrink-0 p-1 text-gray-400 hover:text-red-500 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* 统计信息 */}\n {mode === 'detailed' && (completedFiles.length > 0 || uploadingFiles.length > 0) && (\n <div className=\"flex justify-between items-center text-sm text-gray-500 pt-2 border-t border-gray-200 dark:border-gray-700\">\n <span>总计: {completedFiles.length + uploadingFiles.length} 文件</span>\n <span>\n 大小:{' '}\n {formatFileSize(\n [\n ...completedFiles.map((f) => f.size),\n ...uploadingFiles.map((f) => f.file.size),\n ].reduce((total, size) => total + size, 0)\n )}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport default FileUploader;\n\n","/**\n * 通用文件管理组件\n * 支持文件列表、预览、批量操作、搜索筛选等功能\n */\n\n'use client';\n\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { FileMetadata, FileQueryOptions, PaginatedResult, ProcessorType } from '../types';\nimport { clsx } from 'clsx';\n\n// 文件管理相关类型定义\nexport interface FileManagerProps {\n /** 模块ID,限制显示特定模块的文件 */\n moduleId?: string;\n /** 业务ID,限制显示特定业务的文件 */\n businessId?: string;\n /** 显示模式 */\n mode?: 'grid' | 'list' | 'table';\n /** 是否允许上传 */\n allowUpload?: boolean;\n /** 是否允许下载 */\n allowDownload?: boolean;\n /** 是否允许删除 */\n allowDelete?: boolean;\n /** 是否允许批量操作 */\n allowBatch?: boolean;\n /** 是否显示预览 */\n showPreview?: boolean;\n /** 是否显示搜索 */\n showSearch?: boolean;\n /** 是否显示筛选器 */\n showFilters?: boolean;\n /** 每页显示数量 */\n pageSize?: number;\n /** 自定义操作按钮 */\n customActions?: Array<{\n key: string;\n label: string;\n icon?: string;\n onClick: (files: FileMetadata[]) => void;\n disabled?: (files: FileMetadata[]) => boolean;\n }>;\n /** 文件选择回调 */\n onFileSelect?: (files: FileMetadata[]) => void;\n /** 上传完成回调 */\n onUploadComplete?: (files: FileMetadata[]) => void;\n}\n\nexport interface FileManagerState {\n files: FileMetadata[];\n selectedFiles: Set<string>;\n loading: boolean;\n uploading: boolean;\n error: string | null;\n searchQuery: string;\n filters: {\n mimeType: string;\n dateRange: { start: Date | null; end: Date | null };\n sizeRange: { min: number; max: number };\n };\n sortBy: keyof FileMetadata;\n sortOrder: 'asc' | 'desc';\n pagination: {\n page: number;\n pageSize: number;\n total: number;\n totalPages: number;\n };\n previewFile: FileMetadata | null;\n showUploadModal: boolean;\n}\n\nconst MIME_TYPE_CATEGORIES = {\n 'image': ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n 'video': ['video/mp4', 'video/avi', 'video/mov', 'video/webm'],\n 'audio': ['audio/mp3', 'audio/wav', 'audio/ogg', 'audio/aac'],\n 'document': ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n 'archive': ['application/zip', 'application/x-rar-compressed', 'application/x-7z-compressed']\n};\n\nexport const UniversalFileManager: React.FC<FileManagerProps> = ({\n moduleId,\n businessId,\n mode = 'grid',\n allowUpload = true,\n allowDownload = true,\n allowDelete = false,\n allowBatch = true,\n showPreview = true,\n showSearch = true,\n showFilters = true,\n pageSize = 20,\n customActions = [],\n onFileSelect,\n onUploadComplete\n}) => {\n const [state, setState] = useState<FileManagerState>({\n files: [],\n selectedFiles: new Set(),\n loading: false,\n uploading: false,\n error: null,\n searchQuery: '',\n filters: {\n mimeType: '',\n dateRange: { start: null, end: null },\n sizeRange: { min: 0, max: Number.MAX_SAFE_INTEGER }\n },\n sortBy: 'uploadTime',\n sortOrder: 'desc',\n pagination: {\n page: 1,\n pageSize,\n total: 0,\n totalPages: 0\n },\n previewFile: null,\n showUploadModal: false\n });\n\n // 加载文件列表\n const loadFiles = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n\n try {\n const queryOptions: FileQueryOptions = {\n moduleId,\n businessId,\n page: state.pagination.page,\n pageSize: state.pagination.pageSize,\n sortBy: state.sortBy,\n sortOrder: state.sortOrder\n };\n\n // 添加搜索查询\n if (state.searchQuery) {\n // 这里应该调用文件服务的搜索API\n // queryOptions.search = state.searchQuery;\n }\n\n // 添加筛选条件\n if (state.filters.mimeType) {\n queryOptions.mimeType = state.filters.mimeType;\n }\n if (state.filters.dateRange.start) {\n queryOptions.startTime = state.filters.dateRange.start;\n }\n if (state.filters.dateRange.end) {\n queryOptions.endTime = state.filters.dateRange.end;\n }\n\n // 这里应该调用实际的文件服务API\n // const result = await fileService.queryFiles(queryOptions);\n \n // 模拟API调用\n const mockResult: PaginatedResult<FileMetadata> = {\n items: [],\n total: 0,\n page: queryOptions.page || 1,\n pageSize: queryOptions.pageSize || 20,\n totalPages: 0,\n hasNext: false,\n hasPrev: false\n };\n\n setState(prev => ({\n ...prev,\n files: mockResult.items,\n pagination: {\n page: mockResult.page,\n pageSize: mockResult.pageSize,\n total: mockResult.total,\n totalPages: mockResult.totalPages\n },\n loading: false\n }));\n\n } catch (error) {\n console.error('加载文件列表失败:', error);\n setState(prev => ({\n ...prev,\n loading: false,\n error: error instanceof Error ? error.message : '加载文件列表失败'\n }));\n }\n }, [moduleId, businessId, state.searchQuery, state.filters, state.sortBy, state.sortOrder, state.pagination.page, state.pagination.pageSize]);\n\n // 初始加载\n useEffect(() => {\n loadFiles();\n }, [loadFiles]);\n\n // 文件选择处理\n const handleFileSelect = useCallback((fileId: string, selected: boolean) => {\n setState(prev => {\n const newSelectedFiles = new Set(prev.selectedFiles);\n if (selected) {\n newSelectedFiles.add(fileId);\n } else {\n newSelectedFiles.delete(fileId);\n }\n\n const selectedFileList = prev.files.filter(file => newSelectedFiles.has(file.id));\n \n if (onFileSelect) {\n onFileSelect(selectedFileList);\n }\n\n return {\n ...prev,\n selectedFiles: newSelectedFiles\n };\n });\n }, [onFileSelect, state.files]);\n\n // 全选/取消全选\n const handleSelectAll = useCallback((selected: boolean) => {\n setState(prev => {\n const newSelectedFiles = selected \n ? new Set(prev.files.map(file => file.id))\n : new Set<string>();\n\n const selectedFileList = selected ? prev.files : [];\n \n if (onFileSelect) {\n onFileSelect(selectedFileList);\n }\n\n return {\n ...prev,\n selectedFiles: newSelectedFiles\n };\n });\n }, [onFileSelect, state.files]);\n\n // 删除文件\n const handleDeleteFiles = useCallback(async (fileIds: string[]) => {\n if (!window.confirm('确定要删除选中的 ' + (fileIds.length) + ' 个文件吗?')) {\n return;\n }\n\n setState(prev => ({ ...prev, loading: true }));\n\n try {\n // 这里应该调用实际的删除API\n // await fileService.deleteFiles(fileIds);\n \n console.log('删除文件:', fileIds);\n \n // 重新加载文件列表\n await loadFiles();\n \n setState(prev => ({\n ...prev,\n selectedFiles: new Set(),\n loading: false\n }));\n\n } catch (error) {\n console.error('删除文件失败:', error);\n setState(prev => ({\n ...prev,\n loading: false,\n error: error instanceof Error ? error.message : '删除文件失败'\n }));\n }\n }, [loadFiles]);\n\n // 下载文件\n const handleDownloadFile = useCallback(async (file: FileMetadata) => {\n try {\n // 这里应该调用实际的下载API\n // const downloadUrl = await fileService.getDownloadUrl(file.id);\n // window.open(downloadUrl, '_blank');\n \n console.log('下载文件:', file.originalName);\n \n } catch (error) {\n console.error('下载文件失败:', error);\n setState(prev => ({\n ...prev,\n error: error instanceof Error ? error.message : '下载文件失败'\n }));\n }\n }, []);\n\n // 预览文件\n const handlePreviewFile = useCallback((file: FileMetadata) => {\n setState(prev => ({\n ...prev,\n previewFile: file\n }));\n }, []);\n\n // 关闭预览\n const handleClosePreview = useCallback(() => {\n setState(prev => ({\n ...prev,\n previewFile: null\n }));\n }, []);\n\n // 搜索处理\n const handleSearch = useCallback((query: string) => {\n setState(prev => ({\n ...prev,\n searchQuery: query,\n pagination: { ...prev.pagination, page: 1 }\n }));\n }, []);\n\n // 筛选处理\n const handleFilterChange = useCallback((filterType: string, value: any) => {\n setState(prev => ({\n ...prev,\n filters: {\n ...prev.filters,\n [filterType]: value\n },\n pagination: { ...prev.pagination, page: 1 }\n }));\n }, []);\n\n // 排序处理\n const handleSort = useCallback((field: keyof FileMetadata) => {\n setState(prev => ({\n ...prev,\n sortBy: field,\n sortOrder: prev.sortBy === field && prev.sortOrder === 'asc' ? 'desc' : 'asc',\n pagination: { ...prev.pagination, page: 1 }\n }));\n }, []);\n\n // 分页处理\n const handlePageChange = useCallback((page: number) => {\n setState(prev => ({\n ...prev,\n pagination: { ...prev.pagination, page }\n }));\n }, []);\n\n // 格式化文件大小\n const formatFileSize = useCallback((bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }, []);\n\n // 获取文件类型图标\n const getFileTypeIcon = useCallback((mimeType: string): string => {\n if (mimeType.startsWith('image/')) return '🖼️';\n if (mimeType.startsWith('video/')) return '🎬';\n if (mimeType.startsWith('audio/')) return '🎵';\n if (mimeType.includes('pdf')) return '📄';\n if (mimeType.includes('word')) return '📝';\n if (mimeType.includes('excel')) return '📊';\n if (mimeType.includes('powerpoint')) return '📊';\n if (mimeType.includes('zip') || mimeType.includes('rar')) return '📦';\n return '📁';\n }, []);\n\n // 获取文件类型标签\n const getFileTypeLabel = useCallback((mimeType: string): string => {\n for (const [category, types] of Object.entries(MIME_TYPE_CATEGORIES)) {\n if (types.some(type => mimeType.includes(type))) {\n return category;\n }\n }\n return 'other';\n }, []);\n\n // 判断文件是否可预览\n const isPreviewable = useCallback((file: FileMetadata): boolean => {\n return file.mimeType.startsWith('image/') || \n file.mimeType.startsWith('video/') || \n file.mimeType.startsWith('audio/') ||\n file.mimeType.includes('pdf');\n }, []);\n\n // 渲染文件项\n const renderFileItem = useCallback((file: FileMetadata) => {\n const isSelected = state.selectedFiles.has(file.id);\n const typeIcon = getFileTypeIcon(file.mimeType);\n const typeLabel = getFileTypeLabel(file.mimeType);\n \n return (\n <div\n key={file.id}\n 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')}\n onClick={() => handleFileSelect(file.id, !isSelected)}\n >\n {/* 选择复选框 */}\n {allowBatch && (\n <div className=\"absolute top-2 left-2\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => {\n e.stopPropagation();\n handleFileSelect(file.id, e.target.checked);\n }}\n className=\"w-4 h-4 text-blue-600 rounded border-gray-300 focus:ring-blue-500\"\n />\n </div>\n )}\n\n {/* 文件图标和信息 */}\n <div className=\"flex flex-col items-center space-y-2\">\n <div className=\"text-4xl\">{typeIcon}</div>\n \n <div className=\"text-center w-full\">\n <h3 className=\"font-medium text-sm text-gray-900 truncate\" title={file.originalName}>\n {file.originalName}\n </h3>\n <p className=\"text-xs text-gray-500 mt-1\">\n {formatFileSize(file.size)}\n </p>\n <p className=\"text-xs text-blue-600 capitalize\">\n {typeLabel}\n </p>\n <p className=\"text-xs text-gray-400\">\n {new Date(file.uploadTime).toLocaleDateString()}\n </p>\n </div>\n </div>\n\n {/* 操作按钮 */}\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <div className=\"flex space-x-1\">\n {showPreview && isPreviewable(file) && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handlePreviewFile(file);\n }}\n className=\"p-1 text-gray-600 hover:text-blue-600 hover:bg-white rounded\"\n title=\"预览\"\n >\n 👁️\n </button>\n )}\n \n {allowDownload && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDownloadFile(file);\n }}\n className=\"p-1 text-gray-600 hover:text-green-600 hover:bg-white rounded\"\n title=\"下载\"\n >\n ⬇️\n </button>\n )}\n \n {allowDelete && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteFiles([file.id]);\n }}\n className=\"p-1 text-gray-600 hover:text-red-600 hover:bg-white rounded\"\n title=\"删除\"\n >\n 🗑️\n </button>\n )}\n </div>\n </div>\n </div>\n );\n }, [\n state.selectedFiles,\n allowBatch,\n allowDownload,\n allowDelete,\n showPreview,\n handleFileSelect,\n handlePreviewFile,\n handleDownloadFile,\n handleDeleteFiles,\n getFileTypeIcon,\n getFileTypeLabel,\n formatFileSize,\n isPreviewable\n ]);\n\n // 渲染搜索栏\n const renderSearchBar = () => {\n if (!showSearch) return null;\n\n return (\n <div className=\"mb-6\">\n <div className=\"relative\">\n <input\n type=\"text\"\n placeholder=\"搜索文件名...\"\n value={state.searchQuery}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <span className=\"text-gray-400\">🔍</span>\n </div>\n </div>\n </div>\n );\n };\n\n // 渲染筛选器\n const renderFilters = () => {\n if (!showFilters) return null;\n\n return (\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <h3 className=\"text-sm font-medium text-gray-700 mb-3\">筛选器</h3>\n \n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n {/* 文件类型筛选 */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n 文件类型\n </label>\n <select\n value={state.filters.mimeType}\n onChange={(e) => handleFilterChange('mimeType', e.target.value)}\n className=\"w-full px-3 py-2 text-sm border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500\"\n >\n <option value=\"\">全部</option>\n <option value=\"image/\">图片</option>\n <option value=\"video/\">视频</option>\n <option value=\"audio/\">音频</option>\n <option value=\"application/pdf\">PDF</option>\n <option value=\"application/\">文档</option>\n </select>\n </div>\n\n {/* 日期范围筛选 */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n 上传时间\n </label>\n <div className=\"flex space-x-2\">\n <input\n type=\"date\"\n value={state.filters.dateRange.start?.toISOString().split('T')[0] || ''}\n onChange={(e) => handleFilterChange('dateRange', {\n ...state.filters.dateRange,\n start: e.target.value ? new Date(e.target.value) : null\n })}\n className=\"flex-1 px-2 py-1 text-xs border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500\"\n />\n <input\n type=\"date\"\n value={state.filters.dateRange.end?.toISOString().split('T')[0] || ''}\n onChange={(e) => handleFilterChange('dateRange', {\n ...state.filters.dateRange,\n end: e.target.value ? new Date(e.target.value) : null\n })}\n className=\"flex-1 px-2 py-1 text-xs border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n </div>\n\n {/* 清除筛选器 */}\n <div className=\"flex items-end\">\n <button\n onClick={() => setState(prev => ({\n ...prev,\n filters: {\n mimeType: '',\n dateRange: { start: null, end: null },\n sizeRange: { min: 0, max: Number.MAX_SAFE_INTEGER }\n }\n }))}\n className=\"px-3 py-2 text-sm text-gray-600 border border-gray-300 rounded-md hover:bg-gray-50\"\n >\n 清除筛选\n </button>\n </div>\n </div>\n </div>\n );\n };\n\n // 渲染工具栏\n const renderToolbar = () => {\n const selectedCount = state.selectedFiles.size;\n const hasSelection = selectedCount > 0;\n\n return (\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center space-x-4\">\n {/* 全选按钮 */}\n {allowBatch && state.files.length > 0 && (\n <label className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n checked={selectedCount === state.files.length && state.files.length > 0}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className=\"w-4 h-4 text-blue-600 rounded border-gray-300 focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700\">\n 全选 ({selectedCount}/{state.files.length})\n </span>\n </label>\n )}\n\n {/* 批量操作按钮 */}\n {hasSelection && (\n <div className=\"flex items-center space-x-2\">\n {allowDelete && (\n <button\n onClick={() => handleDeleteFiles(Array.from(state.selectedFiles))}\n className=\"px-3 py-1 text-sm text-red-600 border border-red-300 rounded hover:bg-red-50\"\n >\n 删除选中 ({selectedCount})\n </button>\n )}\n\n {/* 自定义操作 */}\n {customActions.map(action => {\n const selectedFileList = state.files.filter(file => state.selectedFiles.has(file.id));\n const isDisabled = action.disabled?.(selectedFileList) || false;\n \n return (\n <button\n key={action.key}\n onClick={() => action.onClick(selectedFileList)}\n disabled={isDisabled}\n className={clsx('px-3 py-1 text-sm border rounded', isDisabled\n ? 'text-gray-400 border-gray-200 cursor-not-allowed'\n : 'text-blue-600 border-blue-300 hover:bg-blue-50')}\n >\n {action.icon && <span className=\"mr-1\">{action.icon}</span>}\n {action.label}\n </button>\n );\n })}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center space-x-4\">\n {/* 排序选择 */}\n <select\n value={(state.sortBy) + '-' + (state.sortOrder)}\n onChange={(e) => {\n const [sortBy, sortOrder] = e.target.value.split('-') as [keyof FileMetadata, 'asc' | 'desc'];\n setState(prev => ({ ...prev, sortBy, sortOrder }));\n }}\n className=\"px-3 py-1 text-sm border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500\"\n >\n <option value=\"uploadTime-desc\">最新上传</option>\n <option value=\"uploadTime-asc\">最早上传</option>\n <option value=\"originalName-asc\">文件名 A-Z</option>\n <option value=\"originalName-desc\">文件名 Z-A</option>\n <option value=\"size-desc\">文件大小 大-小</option>\n <option value=\"size-asc\">文件大小 小-大</option>\n </select>\n\n {/* 上传按钮 */}\n {allowUpload && (\n <button\n onClick={() => setState(prev => ({ ...prev, showUploadModal: true }))}\n className=\"px-4 py-2 text-sm text-white bg-blue-600 rounded hover:bg-blue-700 focus:ring-2 focus:ring-blue-500\"\n >\n ⬆️ 上传文件\n </button>\n )}\n </div>\n </div>\n );\n };\n\n // 渲染分页\n const renderPagination = () => {\n if (state.pagination.totalPages <= 1) return null;\n\n const { page, totalPages } = state.pagination;\n const pages = [];\n \n // 计算显示的页码范围\n const startPage = Math.max(1, page - 2);\n const endPage = Math.min(totalPages, page + 2);\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n return (\n <div className=\"flex items-center justify-between mt-6\">\n <div className=\"text-sm text-gray-700\">\n 显示第 {(page - 1) * state.pagination.pageSize + 1} - {Math.min(page * state.pagination.pageSize, state.pagination.total)} 项,\n 共 {state.pagination.total} 项\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <button\n onClick={() => handlePageChange(page - 1)}\n disabled={page <= 1}\n className=\"px-3 py-1 text-sm border rounded disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50\"\n >\n 上一页\n </button>\n\n {pages.map(pageNum => (\n <button\n key={pageNum}\n onClick={() => handlePageChange(pageNum)}\n className={clsx('px-3 py-1 text-sm border rounded', pageNum === page\n ? 'bg-blue-600 text-white border-blue-600'\n : 'hover:bg-gray-50')}\n >\n {pageNum}\n </button>\n ))}\n\n <button\n onClick={() => handlePageChange(page + 1)}\n disabled={page >= totalPages}\n className=\"px-3 py-1 text-sm border rounded disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50\"\n >\n 下一页\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div className=\"w-full\">\n {/* 错误提示 */}\n {state.error && (\n <div className=\"mb-4 p-4 bg-red-50 border border-red-200 rounded-lg\">\n <p className=\"text-red-800\">{state.error}</p>\n <button\n onClick={() => setState(prev => ({ ...prev, error: null }))}\n className=\"mt-2 text-red-600 hover:text-red-800\"\n >\n 关闭\n </button>\n </div>\n )}\n\n {/* 搜索栏 */}\n {renderSearchBar()}\n\n {/* 筛选器 */}\n {renderFilters()}\n\n {/* 工具栏 */}\n {renderToolbar()}\n\n {/* 文件列表 */}\n <div className=\"min-h-96\">\n {state.loading ? (\n <div className=\"flex items-center justify-center h-32\">\n <div className=\"text-gray-500\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-2\"></div>\n <p>加载中...</p>\n </div>\n </div>\n ) : state.files.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <div className=\"text-center text-gray-500\">\n <p className=\"text-4xl mb-2\">📁</p>\n <p>暂无文件</p>\n {allowUpload && (\n <button\n onClick={() => setState(prev => ({ ...prev, showUploadModal: true }))}\n className=\"mt-2 text-blue-600 hover:text-blue-800\"\n >\n 点击上传第一个文件\n </button>\n )}\n </div>\n </div>\n ) : (\n <div className={clsx('grid gap-4', mode === 'grid' \n ? 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6'\n : 'grid-cols-1')}>\n {state.files.map(renderFileItem)}\n </div>\n )}\n </div>\n\n {/* 分页 */}\n {renderPagination()}\n\n {/* 文件预览模态框 */}\n {state.previewFile && showPreview && (\n <FilePreviewModal\n file={state.previewFile}\n onClose={handleClosePreview}\n />\n )}\n\n {/* 上传模态框 */}\n {state.showUploadModal && allowUpload && (\n <UploadModal\n moduleId={moduleId}\n businessId={businessId}\n onClose={() => setState(prev => ({ ...prev, showUploadModal: false }))}\n onUploadComplete={(files) => {\n setState(prev => ({ ...prev, showUploadModal: false }));\n if (onUploadComplete) {\n onUploadComplete(files);\n }\n loadFiles(); // 重新加载文件列表\n }}\n />\n )}\n </div>\n );\n};\n\n// 文件预览模态框组件\nexport interface FilePreviewModalProps {\n file: FileMetadata;\n onClose: () => void;\n}\n\nconst FilePreviewModal: React.FC<FilePreviewModalProps> = ({ file, onClose }) => {\n const renderPreviewContent = () => {\n if (file.mimeType.startsWith('image/')) {\n return (\n <img\n src={file.cdnUrl || '/api/files/' + (file.id) + '/download'}\n alt={file.originalName}\n className=\"max-w-full max-h-full object-contain\"\n />\n );\n }\n\n if (file.mimeType.startsWith('video/')) {\n return (\n <video\n src={file.cdnUrl || '/api/files/' + (file.id) + '/download'}\n controls\n className=\"max-w-full max-h-full\"\n >\n 您的浏览器不支持视频播放\n </video>\n );\n }\n\n if (file.mimeType.startsWith('audio/')) {\n return (\n <div className=\"flex flex-col items-center space-y-4\">\n <div className=\"text-6xl\">🎵</div>\n <audio\n src={file.cdnUrl || '/api/files/' + (file.id) + '/download'}\n controls\n className=\"w-full max-w-md\"\n >\n 您的浏览器不支持音频播放\n </audio>\n </div>\n );\n }\n\n if (file.mimeType.includes('pdf')) {\n return (\n <iframe\n src={(file.cdnUrl || '/api/files/'+ (file.id) + '/download') + '#toolbar=0'}\n className=\"w-full h-full min-h-96\"\n title={file.originalName}\n />\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center h-64 text-gray-500\">\n <div className=\"text-4xl mb-4\">📄</div>\n <p>此文件类型暂不支持预览</p>\n <a\n href={file.cdnUrl || '/api/files/' + (file.id) + '/download'}\n download={file.originalName}\n className=\"mt-4 px-4 py-2 text-blue-600 border border-blue-300 rounded hover:bg-blue-50\"\n >\n 下载文件\n </a>\n </div>\n );\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50\">\n <div className=\"bg-white rounded-lg max-w-4xl max-h-[90vh] overflow-hidden flex flex-col\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between p-4 border-b\">\n <h2 className=\"text-lg font-medium truncate\" title={file.originalName}>\n {file.originalName}\n </h2>\n <button\n onClick={onClose}\n className=\"p-2 text-gray-400 hover:text-gray-600 rounded-full hover:bg-gray-100\"\n >\n ✕\n </button>\n </div>\n\n {/* 预览内容 */}\n <div className=\"flex-1 p-4 overflow-auto flex items-center justify-center\">\n {renderPreviewContent()}\n </div>\n\n {/* 底部信息 */}\n <div className=\"p-4 border-t bg-gray-50 text-sm text-gray-600\">\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <span className=\"font-medium\">文件大小:</span>\n {(file.size / 1024 / 1024).toFixed(2)} MB\n </div>\n <div>\n <span className=\"font-medium\">上传时间:</span>\n {new Date(file.uploadTime).toLocaleString()}\n </div>\n <div>\n <span className=\"font-medium\">文件类型:</span>\n {file.mimeType}\n </div>\n <div>\n <span className=\"font-medium\">访问次数:</span>\n {file.accessCount}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n// 上传模态框组件\nexport interface UploadModalProps {\n moduleId?: string;\n businessId?: string;\n onClose: () => void;\n onUploadComplete: (files: FileMetadata[]) => void;\n}\n\nconst UploadModal: React.FC<UploadModalProps> = ({\n moduleId,\n businessId,\n onClose,\n onUploadComplete\n}) => {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50\">\n <div className=\"bg-white rounded-lg max-w-2xl w-full max-h-[80vh] overflow-hidden\">\n <div className=\"flex items-center justify-between p-4 border-b\">\n <h2 className=\"text-lg font-medium\">上传文件</h2>\n <button\n onClick={onClose}\n className=\"p-2 text-gray-400 hover:text-gray-600 rounded-full hover:bg-gray-100\"\n >\n ✕\n </button>\n </div>\n\n <div className=\"p-6\">\n <p className=\"text-gray-600 mb-4\">\n 这里将集成UniversalFileUploader组件\n </p>\n \n {/* 这里应该集成 UniversalFileUploader 组件 */}\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-8 text-center text-gray-500\">\n <div className=\"text-4xl mb-4\">📁</div>\n <p>拖拽文件到此处或点击选择文件</p>\n <input\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n // 模拟上传完成\n console.log('选择文件:', e.target.files);\n onUploadComplete([]);\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default UniversalFileManager; ","/**\n * 文件夹管理组件\n * 支持创建、重命名、删除文件夹,以及文件夹树形结构显示\n */\n\n'use client';\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { FileMetadata } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface FolderNode {\n /** 文件夹ID */\n id: string;\n /** 文件夹名称 */\n name: string;\n /** 父文件夹ID */\n parentId?: string;\n /** 子文件夹 */\n children: FolderNode[];\n /** 文件数量 */\n fileCount: number;\n /** 总大小 */\n totalSize: number;\n /** 创建时间 */\n createdAt: Date;\n /** 更新时间 */\n updatedAt: Date;\n /** 是否展开 */\n expanded?: boolean;\n}\n\nexport interface FolderManagerProps {\n /** 当前文件夹ID */\n currentFolderId?: string;\n /** 文件夹树数据 */\n folderTree: FolderNode[];\n /** 是否显示文件数量 */\n showFileCount?: boolean;\n /** 是否显示文件大小 */\n showSize?: boolean;\n /** 是否允许创建文件夹 */\n allowCreate?: boolean;\n /** 是否允许重命名 */\n allowRename?: boolean;\n /** 是否允许删除 */\n allowDelete?: boolean;\n /** 是否允许拖拽 */\n allowDrag?: boolean;\n /** 文件夹选择回调 */\n onFolderSelect?: (folderId: string) => void;\n /** 文件夹创建回调 */\n onFolderCreate?: (parentId: string | undefined, name: string) => Promise<FolderNode>;\n /** 文件夹重命名回调 */\n onFolderRename?: (folderId: string, newName: string) => Promise<void>;\n /** 文件夹删除回调 */\n onFolderDelete?: (folderId: string) => Promise<void>;\n /** 文件移动回调 */\n onFileMove?: (fileIds: string[], targetFolderId: string) => Promise<void>;\n}\n\ninterface FolderManagerState {\n expandedFolders: Set<string>;\n editingFolder: string | null;\n editingName: string;\n creatingFolder: string | null; // 正在创建子文件夹的父文件夹ID\n newFolderName: string;\n dragOverFolder: string | null;\n contextMenu: {\n folderId: string;\n x: number;\n y: number;\n } | null;\n}\n\nconst FolderManager: React.FC<FolderManagerProps> = ({\n currentFolderId,\n folderTree,\n showFileCount = true,\n showSize = true,\n allowCreate = true,\n allowRename = true,\n allowDelete = true,\n allowDrag = false,\n onFolderSelect,\n onFolderCreate,\n onFolderRename,\n onFolderDelete,\n onFileMove\n}) => {\n const [state, setState] = useState<FolderManagerState>({\n expandedFolders: new Set(currentFolderId ? [currentFolderId] : []),\n editingFolder: null,\n editingName: '',\n creatingFolder: null,\n newFolderName: '',\n dragOverFolder: null,\n contextMenu: null\n });\n\n // 切换文件夹展开状态\n const toggleFolder = useCallback((folderId: string) => {\n setState(prev => {\n const newExpanded = new Set(prev.expandedFolders);\n if (newExpanded.has(folderId)) {\n newExpanded.delete(folderId);\n } else {\n newExpanded.add(folderId);\n }\n return { ...prev, expandedFolders: newExpanded };\n });\n }, []);\n\n // 选择文件夹\n const selectFolder = useCallback((folderId: string) => {\n if (onFolderSelect) {\n onFolderSelect(folderId);\n }\n }, [onFolderSelect]);\n\n // 开始创建文件夹\n const startCreateFolder = useCallback((parentId?: string) => {\n setState(prev => ({\n ...prev,\n creatingFolder: parentId || null,\n newFolderName: '新建文件夹',\n contextMenu: null\n }));\n }, []);\n\n // 确认创建文件夹\n const confirmCreateFolder = useCallback(async () => {\n if (!state.newFolderName.trim() || !onFolderCreate) return;\n\n try {\n await onFolderCreate(state.creatingFolder || undefined, state.newFolderName.trim());\n setState(prev => ({\n ...prev,\n creatingFolder: null,\n newFolderName: ''\n }));\n } catch (error) {\n console.error('创建文件夹失败:', error);\n }\n }, [state.creatingFolder, state.newFolderName, onFolderCreate]);\n\n // 取消创建文件夹\n const cancelCreateFolder = useCallback(() => {\n setState(prev => ({\n ...prev,\n creatingFolder: null,\n newFolderName: ''\n }));\n }, []);\n\n // 开始重命名文件夹\n const startRenameFolder = useCallback((folderId: string, currentName: string) => {\n setState(prev => ({\n ...prev,\n editingFolder: folderId,\n editingName: currentName,\n contextMenu: null\n }));\n }, []);\n\n // 确认重命名文件夹\n const confirmRenameFolder = useCallback(async () => {\n if (!state.editingFolder || !state.editingName.trim() || !onFolderRename) return;\n\n try {\n await onFolderRename(state.editingFolder, state.editingName.trim());\n setState(prev => ({\n ...prev,\n editingFolder: null,\n editingName: ''\n }));\n } catch (error) {\n console.error('重命名文件夹失败:', error);\n }\n }, [state.editingFolder, state.editingName, onFolderRename]);\n\n // 取消重命名文件夹\n const cancelRenameFolder = useCallback(() => {\n setState(prev => ({\n ...prev,\n editingFolder: null,\n editingName: ''\n }));\n }, []);\n\n // 删除文件夹\n const deleteFolder = useCallback(async (folderId: string, folderName: string) => {\n if (!window.confirm('确定要删除文件夹\"' + (folderName) + '\"吗?此操作将删除文件夹内的所有文件。')) {\n return;\n }\n\n if (!onFolderDelete) return;\n\n try {\n await onFolderDelete(folderId);\n setState(prev => ({ ...prev, contextMenu: null }));\n } catch (error) {\n console.error('删除文件夹失败:', error);\n }\n }, [onFolderDelete]);\n\n // 右键菜单处理\n const handleContextMenu = useCallback((e: React.MouseEvent, folderId: string) => {\n e.preventDefault();\n setState(prev => ({\n ...prev,\n contextMenu: {\n folderId,\n x: e.clientX,\n y: e.clientY\n }\n }));\n }, []);\n\n // 关闭右键菜单\n const closeContextMenu = useCallback(() => {\n setState(prev => ({ ...prev, contextMenu: null }));\n }, []);\n\n // 拖拽处理\n const handleDragOver = useCallback((e: React.DragEvent, folderId: string) => {\n if (!allowDrag) return;\n e.preventDefault();\n setState(prev => ({ ...prev, dragOverFolder: folderId }));\n }, [allowDrag]);\n\n const handleDragLeave = useCallback(() => {\n setState(prev => ({ ...prev, dragOverFolder: null }));\n }, []);\n\n const handleDrop = useCallback(async (e: React.DragEvent, folderId: string) => {\n if (!allowDrag || !onFileMove) return;\n \n e.preventDefault();\n setState(prev => ({ ...prev, dragOverFolder: null }));\n\n try {\n const fileIds = JSON.parse(e.dataTransfer.getData('application/json'));\n await onFileMove(fileIds, folderId);\n } catch (error) {\n console.error('移动文件失败:', error);\n }\n }, [allowDrag, onFileMove]);\n\n // 格式化文件大小\n const formatSize = useCallback((bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }, []);\n\n // 渲染文件夹节点\n const renderFolderNode = useCallback((folder: FolderNode, level: number = 0) => {\n const isExpanded = state.expandedFolders.has(folder.id);\n const isSelected = currentFolderId === folder.id;\n const isEditing = state.editingFolder === folder.id;\n const isDragOver = state.dragOverFolder === folder.id;\n\n return (\n <div key={folder.id} className=\"select-none\">\n {/* 文件夹项 */}\n <div\n className={clsx('flex items-center py-1 px-2 rounded-md cursor-pointer transition-colors', isSelected \n ? 'bg-blue-100 text-blue-800' \n : isDragOver\n ? 'bg-green-100'\n : 'hover:bg-gray-100')}\n style={{ paddingLeft: (level * 16 + 8) + 'px' }}\n onClick={() => selectFolder(folder.id)}\n onContextMenu={(e) => handleContextMenu(e, folder.id)}\n onDragOver={allowDrag ? (e) => handleDragOver(e, folder.id) : undefined}\n onDragLeave={allowDrag ? handleDragLeave : undefined}\n onDrop={allowDrag ? (e) => handleDrop(e, folder.id) : undefined}\n >\n {/* 展开图标 */}\n {folder.children.length > 0 && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n toggleFolder(folder.id);\n }}\n className=\"mr-1 p-1 hover:bg-gray-200 rounded\"\n >\n <span className={clsx('text-xs transition-transform', isExpanded ? 'rotate-90' : '')}>\n ▶\n </span>\n </button>\n )}\n\n {/* 文件夹图标 */}\n <span className=\"mr-2 text-yellow-600\">\n {isExpanded ? '📂' : '📁'}\n </span>\n\n {/* 文件夹名称 */}\n <div className=\"flex-1 flex items-center justify-between\">\n {isEditing ? (\n <input\n type=\"text\"\n value={state.editingName}\n onChange={(e) => setState(prev => ({ ...prev, editingName: e.target.value }))}\n onBlur={confirmRenameFolder}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n confirmRenameFolder();\n } else if (e.key === 'Escape') {\n cancelRenameFolder();\n }\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"flex-1 px-1 py-0 text-sm border rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n autoFocus\n />\n ) : (\n <span className=\"text-sm truncate\">{folder.name}</span>\n )}\n\n {/* 文件信息 */}\n <div className=\"flex items-center space-x-2 text-xs text-gray-500 ml-2\">\n {showFileCount && (\n <span>{folder.fileCount} 项</span>\n )}\n {showSize && folder.totalSize > 0 && (\n <span>{formatSize(folder.totalSize)}</span>\n )}\n </div>\n </div>\n </div>\n\n {/* 创建新文件夹输入框 */}\n {state.creatingFolder === folder.id && (\n <div\n className=\"flex items-center py-1 px-2 ml-4\"\n style={{ paddingLeft: ((level + 1) * 16 + 8) + 'px' }}\n >\n <span className=\"mr-2 text-yellow-600\">📁</span>\n <input\n type=\"text\"\n value={state.newFolderName}\n onChange={(e) => setState(prev => ({ ...prev, newFolderName: e.target.value }))}\n onBlur={confirmCreateFolder}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n confirmCreateFolder();\n } else if (e.key === 'Escape') {\n cancelCreateFolder();\n }\n }}\n className=\"flex-1 px-1 py-0 text-sm border rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n autoFocus\n />\n </div>\n )}\n\n {/* 子文件夹 */}\n {isExpanded && folder.children.map(child => \n renderFolderNode(child, level + 1)\n )}\n </div>\n );\n }, [\n state.expandedFolders,\n state.editingFolder,\n state.editingName,\n state.creatingFolder,\n state.newFolderName,\n state.dragOverFolder,\n currentFolderId,\n allowDrag,\n showFileCount,\n showSize,\n selectFolder,\n toggleFolder,\n handleContextMenu,\n handleDragOver,\n handleDragLeave,\n handleDrop,\n confirmRenameFolder,\n cancelRenameFolder,\n confirmCreateFolder,\n cancelCreateFolder,\n formatSize\n ]);\n\n // 渲染右键菜单\n const renderContextMenu = () => {\n if (!state.contextMenu) return null;\n\n const folder = findFolderById(folderTree, state.contextMenu.folderId);\n if (!folder) return null;\n\n return (\n <div\n className=\"fixed bg-white border border-gray-200 rounded-md shadow-lg z-[50] py-1\"\n style={{\n left: state.contextMenu.x,\n top: state.contextMenu.y\n }}\n onClick={closeContextMenu}\n >\n {allowCreate && (\n <button\n onClick={() => startCreateFolder(folder.id)}\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-gray-100 flex items-center\"\n >\n <span className=\"mr-2\">📁</span>\n 新建子文件夹\n </button>\n )}\n \n {allowRename && (\n <button\n onClick={() => startRenameFolder(folder.id, folder.name)}\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-gray-100 flex items-center\"\n >\n <span className=\"mr-2\">✏️</span>\n 重命名\n </button>\n )}\n \n {allowDelete && (\n <button\n onClick={() => deleteFolder(folder.id, folder.name)}\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-gray-100 text-red-600 flex items-center\"\n >\n <span className=\"mr-2\">🗑️</span>\n 删除文件夹\n </button>\n )}\n </div>\n );\n };\n\n // 根据ID查找文件夹\n const findFolderById = (folders: FolderNode[], id: string): FolderNode | null => {\n for (const folder of folders) {\n if (folder.id === id) return folder;\n const found = findFolderById(folder.children, id);\n if (found) return found;\n }\n return null;\n };\n\n // 点击外部关闭菜单\n React.useEffect(() => {\n if (!state.contextMenu) return;\n\n const handleClickOutside = () => {\n closeContextMenu();\n };\n\n document.addEventListener('click', handleClickOutside);\n return () => document.removeEventListener('click', handleClickOutside);\n }, [state.contextMenu, closeContextMenu]);\n\n return (\n <div className=\"relative\">\n {/* 工具栏 */}\n <div className=\"flex items-center justify-between p-2 border-b bg-gray-50\">\n <h3 className=\"text-sm font-medium text-gray-700\">文件夹</h3>\n {allowCreate && (\n <button\n onClick={() => startCreateFolder()}\n className=\"px-2 py-1 text-xs text-blue-600 border border-blue-300 rounded hover:bg-blue-50\"\n title=\"新建文件夹\"\n >\n ➕\n </button>\n )}\n </div>\n\n {/* 文件夹树 */}\n <div className=\"p-2 max-h-96 overflow-y-auto\">\n {folderTree.length === 0 ? (\n <div className=\"text-center text-gray-500 py-8\">\n <div className=\"text-2xl mb-2\">📁</div>\n <p className=\"text-sm\">暂无文件夹</p>\n {allowCreate && (\n <button\n onClick={() => startCreateFolder()}\n className=\"mt-2 text-blue-600 hover:text-blue-800 text-sm\"\n >\n 创建第一个文件夹\n </button>\n )}\n </div>\n ) : (\n <div className=\"space-y-1\">\n {folderTree.map(folder => renderFolderNode(folder))}\n </div>\n )}\n\n {/* 根目录创建文件夹 */}\n {state.creatingFolder === null && (\n <div className=\"flex items-center py-1 px-2\">\n <span className=\"mr-2 text-yellow-600\">📁</span>\n <input\n type=\"text\"\n value={state.newFolderName}\n onChange={(e) => setState(prev => ({ ...prev, newFolderName: e.target.value }))}\n onBlur={confirmCreateFolder}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n confirmCreateFolder();\n } else if (e.key === 'Escape') {\n cancelCreateFolder();\n }\n }}\n className=\"flex-1 px-1 py-0 text-sm border rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n autoFocus\n />\n </div>\n )}\n </div>\n\n {/* 右键菜单 */}\n {renderContextMenu()}\n </div>\n );\n};\n\nexport default FolderManager; ","/**\n * 文件分享模态框组件\n * 支持生成分享链接、设置访问权限、过期时间等\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { FileMetadata } from '../types';\n\nexport interface FileShareModalProps {\n /** 要分享的文件 */\n files: FileMetadata[];\n /** 关闭回调 */\n onClose: () => void;\n /** 分享成功回调 */\n onShareSuccess?: (shareInfo: ShareInfo) => void;\n}\n\nexport interface ShareInfo {\n /** 分享链接 */\n shareUrl: string;\n /** 访问密码 */\n password?: string;\n /** 过期时间 */\n expiresAt?: Date;\n /** 访问权限 */\n permission: 'view' | 'download';\n /** 分享代码 */\n shareCode: string;\n}\n\ninterface ShareOptions {\n /** 过期时间类型 */\n expireType: 'never' | '1hour' | '1day' | '7days' | '30days' | 'custom';\n /** 自定义过期时间 */\n customExpireTime?: Date;\n /** 是否需要密码 */\n requirePassword: boolean;\n /** 访问密码 */\n password: string;\n /** 访问权限 */\n permission: 'view' | 'download';\n /** 允许的下载次数 */\n downloadLimit?: number;\n}\n\nconst FileShareModal: React.FC<FileShareModalProps> = ({\n files,\n onClose,\n onShareSuccess\n}) => {\n const [shareOptions, setShareOptions] = useState<ShareOptions>({\n expireType: '7days',\n requirePassword: false,\n password: '',\n permission: 'view',\n downloadLimit: undefined\n });\n\n const [loading, setLoading] = useState(false);\n const [shareInfo, setShareInfo] = useState<ShareInfo | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n // 生成随机密码\n const generatePassword = useCallback(() => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let password = '';\n for (let i = 0; i < 6; i++) {\n password += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n setShareOptions(prev => ({ ...prev, password }));\n }, []);\n\n // 计算过期时间\n const getExpiresAt = useCallback((): Date | undefined => {\n const now = new Date();\n switch (shareOptions.expireType) {\n case 'never':\n return undefined;\n case '1hour':\n return new Date(now.getTime() + 60 * 60 * 1000);\n case '1day':\n return new Date(now.getTime() + 24 * 60 * 60 * 1000);\n case '7days':\n return new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);\n case '30days':\n return new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);\n case 'custom':\n return shareOptions.customExpireTime;\n default:\n return undefined;\n }\n }, [shareOptions.expireType, shareOptions.customExpireTime]);\n\n // 创建分享\n const handleCreateShare = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const expiresAt = getExpiresAt();\n \n // 这里应该调用实际的分享API\n // const shareResult = await fileService.createShare({\n // fileIds: files.map(f => f.id),\n // password: shareOptions.requirePassword ? shareOptions.password : undefined,\n // expiresAt,\n // permission: shareOptions.permission,\n // downloadLimit: shareOptions.downloadLimit\n // });\n\n // 模拟API调用\n const mockShareInfo: ShareInfo = {\n shareUrl: (window.location.origin) + '/share/' + (generateShareCode()),\n password: shareOptions.requirePassword ? shareOptions.password : undefined,\n expiresAt,\n permission: shareOptions.permission,\n shareCode: generateShareCode()\n };\n\n setShareInfo(mockShareInfo);\n \n if (onShareSuccess) {\n onShareSuccess(mockShareInfo);\n }\n\n } catch (error) {\n console.error('创建分享失败:', error);\n setError(error instanceof Error ? error.message : '创建分享失败');\n } finally {\n setLoading(false);\n }\n }, [files, shareOptions, getExpiresAt, onShareSuccess]);\n\n // 生成分享代码\n const generateShareCode = useCallback(() => {\n return Math.random().toString(36).substring(2, 10).toUpperCase();\n }, []);\n\n // 复制到剪贴板\n const copyToClipboard = useCallback(async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n // 这里可以显示复制成功提示\n console.log('复制成功');\n } catch (error) {\n console.error('复制失败:', error);\n // 备用方案\n const textArea = document.createElement('textarea');\n textArea.value = text;\n document.body.appendChild(textArea);\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n }\n }, []);\n\n // 格式化文件列表\n const formatFileList = useCallback(() => {\n if (files.length === 0) return '0 个文件';\n if (files.length === 1 && files[0]) {\n return files[0].originalName;\n }\n return (files.length) + ' 个文件';\n }, [files]);\n\n // 渲染分享设置\n const renderShareSettings = () => {\n if (shareInfo) return null;\n\n return (\n <div className=\"space-y-6\">\n {/* 文件信息 */}\n <div className=\"bg-gray-50 p-4 rounded-lg\">\n <h3 className=\"font-medium text-gray-900 mb-2\">要分享的文件</h3>\n <div className=\"space-y-2\">\n {files.map(file => (\n <div key={file.id} className=\"flex items-center justify-between text-sm\">\n <span className=\"text-gray-700 truncate\">{file.originalName}</span>\n <span className=\"text-gray-500 text-xs\">\n {(file.size / 1024 / 1024).toFixed(2)} MB\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* 过期时间设置 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n 过期时间\n </label>\n <select\n value={shareOptions.expireType}\n onChange={(e) => setShareOptions(prev => ({ \n ...prev, \n expireType: e.target.value as ShareOptions['expireType']\n }))}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500\"\n >\n <option value=\"never\">永不过期</option>\n <option value=\"1hour\">1小时后</option>\n <option value=\"1day\">1天后</option>\n <option value=\"7days\">7天后</option>\n <option value=\"30days\">30天后</option>\n <option value=\"custom\">自定义时间</option>\n </select>\n\n {shareOptions.expireType === 'custom' && (\n <div className=\"mt-2\">\n <input\n type=\"datetime-local\"\n value={shareOptions.customExpireTime?.toISOString().slice(0, 16) || ''}\n onChange={(e) => setShareOptions(prev => ({\n ...prev,\n customExpireTime: e.target.value ? new Date(e.target.value) : undefined\n }))}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500\"\n min={new Date().toISOString().slice(0, 16)}\n />\n </div>\n )}\n </div>\n\n {/* 访问权限 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n 访问权限\n </label>\n <div className=\"space-y-2\">\n <label className=\"flex items-center\">\n <input\n type=\"radio\"\n name=\"permission\"\n value=\"view\"\n checked={shareOptions.permission === 'view'}\n onChange={(e) => setShareOptions(prev => ({ \n ...prev, \n permission: e.target.value as 'view' | 'download'\n }))}\n className=\"mr-2\"\n />\n <span className=\"text-sm\">仅预览(不允许下载)</span>\n </label>\n <label className=\"flex items-center\">\n <input\n type=\"radio\"\n name=\"permission\"\n value=\"download\"\n checked={shareOptions.permission === 'download'}\n onChange={(e) => setShareOptions(prev => ({ \n ...prev, \n permission: e.target.value as 'view' | 'download'\n }))}\n className=\"mr-2\"\n />\n <span className=\"text-sm\">允许下载</span>\n </label>\n </div>\n </div>\n\n {/* 访问密码 */}\n <div>\n <label className=\"flex items-center mb-2\">\n <input\n type=\"checkbox\"\n checked={shareOptions.requirePassword}\n onChange={(e) => setShareOptions(prev => ({\n ...prev,\n requirePassword: e.target.checked,\n password: e.target.checked ? prev.password : ''\n }))}\n className=\"mr-2\"\n />\n <span className=\"text-sm font-medium text-gray-700\">设置访问密码</span>\n </label>\n\n {shareOptions.requirePassword && (\n <div className=\"flex space-x-2\">\n <input\n type=\"text\"\n value={shareOptions.password}\n onChange={(e) => setShareOptions(prev => ({ \n ...prev, \n password: e.target.value\n }))}\n placeholder=\"输入访问密码\"\n className=\"flex-1 px-3 py-2 border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500\"\n maxLength={20}\n />\n <button\n type=\"button\"\n onClick={generatePassword}\n className=\"px-3 py-2 text-sm text-blue-600 border border-blue-300 rounded-md hover:bg-blue-50\"\n >\n 随机生成\n </button>\n </div>\n )}\n </div>\n\n {/* 下载次数限制 */}\n {shareOptions.permission === 'download' && (\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n 下载次数限制\n </label>\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n checked={shareOptions.downloadLimit !== undefined}\n onChange={(e) => setShareOptions(prev => ({\n ...prev,\n downloadLimit: e.target.checked ? 10 : undefined\n }))}\n className=\"mr-2\"\n />\n <span className=\"text-sm text-gray-700\">限制下载次数</span>\n {shareOptions.downloadLimit !== undefined && (\n <input\n type=\"number\"\n value={shareOptions.downloadLimit}\n onChange={(e) => setShareOptions(prev => ({\n ...prev,\n downloadLimit: parseInt(e.target.value) || 1\n }))}\n min={1}\n max={1000}\n className=\"w-20 px-2 py-1 text-sm border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500\"\n />\n )}\n </div>\n </div>\n )}\n </div>\n );\n };\n\n // 渲染分享结果\n const renderShareResult = () => {\n if (!shareInfo) return null;\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-4xl mb-4\">✅</div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">\n 分享链接已创建\n </h3>\n <p className=\"text-sm text-gray-600\">\n {formatFileList()} 已成功创建分享链接\n </p>\n </div>\n\n {/* 分享链接 */}\n <div className=\"bg-gray-50 p-4 rounded-lg\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n 分享链接\n </label>\n <div className=\"flex space-x-2\">\n <input\n type=\"text\"\n value={shareInfo.shareUrl}\n readOnly\n className=\"flex-1 px-3 py-2 text-sm bg-white border border-gray-300 rounded-md\"\n />\n <button\n onClick={() => copyToClipboard(shareInfo.shareUrl)}\n className=\"px-3 py-2 text-sm text-blue-600 border border-blue-300 rounded-md hover:bg-blue-50\"\n >\n 复制链接\n </button>\n </div>\n </div>\n\n {/* 访问密码 */}\n {shareInfo.password && (\n <div className=\"bg-yellow-50 p-4 rounded-lg\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n 访问密码\n </label>\n <div className=\"flex space-x-2\">\n <input\n type=\"text\"\n value={shareInfo.password}\n readOnly\n className=\"flex-1 px-3 py-2 text-sm bg-white border border-gray-300 rounded-md\"\n />\n <button\n onClick={() => copyToClipboard(shareInfo.password!)}\n className=\"px-3 py-2 text-sm text-blue-600 border border-blue-300 rounded-md hover:bg-blue-50\"\n >\n 复制密码\n </button>\n </div>\n <p className=\"text-xs text-yellow-800 mt-2\">\n ⚠️ 请妥善保管访问密码,访问者需要此密码才能查看文件\n </p>\n </div>\n )}\n\n {/* 分享信息 */}\n <div className=\"bg-blue-50 p-4 rounded-lg\">\n <h4 className=\"text-sm font-medium text-blue-900 mb-2\">分享信息</h4>\n <div className=\"space-y-1 text-sm text-blue-800\">\n <div>\n <span className=\"font-medium\">权限:</span>\n {shareInfo.permission === 'view' ? '仅预览' : '允许下载'}\n </div>\n {shareInfo.expiresAt && (\n <div>\n <span className=\"font-medium\">过期时间:</span>\n {shareInfo.expiresAt.toLocaleString()}\n </div>\n )}\n <div>\n <span className=\"font-medium\">分享代码:</span>\n {shareInfo.shareCode}\n </div>\n </div>\n </div>\n\n {/* 复制完整信息 */}\n <div className=\"flex space-x-2\">\n <button\n onClick={() => {\n const shareText = [\n '文件分享:' + (formatFileList()),\n '链接:' + (shareInfo.shareUrl),\n shareInfo.password ? '密码:' + (shareInfo.password) : '',\n shareInfo.expiresAt ? '过期时间:' + (shareInfo.expiresAt.toLocaleString()) : '永不过期'\n ].filter(Boolean).join('\\n');\n \n copyToClipboard(shareText);\n }}\n className=\"flex-1 px-4 py-2 text-sm text-blue-600 border border-blue-300 rounded-md hover:bg-blue-50\"\n >\n 📋 复制完整信息\n </button>\n <button\n onClick={() => {\n // 生成二维码或其他分享方式\n console.log('其他分享方式');\n }}\n className=\"px-4 py-2 text-sm text-gray-600 border border-gray-300 rounded-md hover:bg-gray-50\"\n >\n 🔗 其他分享方式\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div className=\"fixed inset-0 z-[50] flex items-center justify-center bg-black bg-opacity-50\">\n <div className=\"bg-white rounded-lg max-w-md w-full max-h-[90vh] overflow-hidden\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between p-4 border-b\">\n <h2 className=\"text-lg font-medium\">\n {shareInfo ? '分享成功' : '创建分享链接'}\n </h2>\n <button\n onClick={onClose}\n className=\"p-2 text-gray-400 hover:text-gray-600 rounded-full hover:bg-gray-100\"\n >\n ✕\n </button>\n </div>\n\n {/* 内容 */}\n <div className=\"p-6 max-h-[calc(90vh-120px)] overflow-y-auto\">\n {/* 错误提示 */}\n {error && (\n <div className=\"mb-4 p-4 bg-red-50 border border-red-200 rounded-lg\">\n <p className=\"text-red-800 text-sm\">{error}</p>\n </div>\n )}\n\n {renderShareSettings()}\n {renderShareResult()}\n </div>\n\n {/* 底部按钮 */}\n {!shareInfo && (\n <div className=\"flex items-center justify-end space-x-2 p-4 border-t bg-gray-50\">\n <button\n onClick={onClose}\n className=\"px-4 py-2 text-sm text-gray-600 border border-gray-300 rounded-md hover:bg-gray-50\"\n >\n 取消\n </button>\n <button\n onClick={handleCreateShare}\n disabled={loading || (shareOptions.requirePassword && !shareOptions.password)}\n className=\"px-4 py-2 text-sm text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {loading ? (\n <span className=\"flex items-center\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2\"></div>\n 创建中...\n </span>\n ) : (\n '创建分享链接'\n )}\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default FileShareModal; "]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ALL_SUPPORTED_MIME_TYPES, API_BASE_PATH, API_ENDPOINTS, AUDIO_EXTENSIONS, AUDIO_MIME_TYPES, DEFAULT_CHUNK_SIZE, DEFAULT_MAX_AUDIO_SIZE, DEFAULT_MAX_DOCUMENT_SIZE, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_IMAGE_SIZE, DEFAULT_MAX_VIDEO_SIZE, DEFAULT_PAGE_SIZE, DEFAULT_REQUEST_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DOCUMENT_EXTENSIONS, DOCUMENT_MIME_TYPES, ERROR_CODES, IMAGE_EXTENSIONS, IMAGE_MIME_TYPES, UNIVERSAL_FILE_NAME, UNIVERSAL_FILE_VERSION, UniversalFileClient, VIDEO_EXTENSIONS, VIDEO_MIME_TYPES, buildQueryString, calculateProgress, calculateRemainingTime, calculateSpeed, createFileClient, createFileError, formatErrorMessage, formatFileSize, generateStoragePath, generateUniqueFileName, getFileCategory, getFileExtension, getMimeTypeFromFileName, isAudioFile, isDocumentFile, isImageFile, isMimeTypeSupported, isVideoFile, parseFileSize, parseQueryString, parseStoragePath, readFileAsArrayBuffer, readFileAsBase64, readFileAsText, sanitizeFileName, universalFileClient, validateFile, validateFileName, validateFileSize, validateFileType } from '
|
|
2
|
-
export { CDNProviderError, FileProcessingError, FileServiceError, FileUploadError, StorageProviderError } from '
|
|
3
|
-
import '
|
|
4
|
-
import '
|
|
1
|
+
export { ALL_SUPPORTED_MIME_TYPES, API_BASE_PATH, API_ENDPOINTS, AUDIO_EXTENSIONS, AUDIO_MIME_TYPES, DEFAULT_CHUNK_SIZE, DEFAULT_MAX_AUDIO_SIZE, DEFAULT_MAX_DOCUMENT_SIZE, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_IMAGE_SIZE, DEFAULT_MAX_VIDEO_SIZE, DEFAULT_PAGE_SIZE, DEFAULT_REQUEST_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DOCUMENT_EXTENSIONS, DOCUMENT_MIME_TYPES, ERROR_CODES, IMAGE_EXTENSIONS, IMAGE_MIME_TYPES, UNIVERSAL_FILE_NAME, UNIVERSAL_FILE_VERSION, UniversalFileClient, VIDEO_EXTENSIONS, VIDEO_MIME_TYPES, buildQueryString, calculateProgress, calculateRemainingTime, calculateSpeed, createFileClient, createFileError, formatErrorMessage, formatFileSize, generateStoragePath, generateUniqueFileName, getFileCategory, getFileExtension, getMimeTypeFromFileName, isAudioFile, isDocumentFile, isImageFile, isMimeTypeSupported, isVideoFile, parseFileSize, parseQueryString, parseStoragePath, readFileAsArrayBuffer, readFileAsBase64, readFileAsText, sanitizeFileName, universalFileClient, validateFile, validateFileName, validateFileSize, validateFileType } from '../../chunk-DTR53LQO.mjs';
|
|
2
|
+
export { CDNProviderError, FileProcessingError, FileServiceError, FileUploadError, StorageProviderError } from '../../chunk-UJS3YSD3.mjs';
|
|
3
|
+
import '../../chunk-VYK4M2D6.mjs';
|
|
4
|
+
import '../../chunk-MAI35PU6.mjs';
|
|
5
5
|
import React2, { useState, useRef, useCallback, useEffect } from 'react';
|
|
6
6
|
import { clsx } from 'clsx';
|
|
7
7
|
import { Upload, AlertCircle, CheckCircle2, Loader2, X, Image, Film, Music, FileText } from 'lucide-react';
|