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/ai/llm/ui/web/components/AiChatDialog.tsx","../src/common/ai/llm/ui/web/components/AiConfigPage.tsx"],"names":["React","useMemo","useState","useEffect"],"mappings":"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","file":"chunk-IJIQUMAK.mjs","sourcesContent":["'use client';\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '../../../../../components/Button';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../../../../../components/Dialog';\nimport { cn } from '../../../../../utils/cn';\nimport { useAiChat } from '../../../hooks/useAiChat';\nimport type { AiChatDialogProps } from '../../types';\n\ntype WebAiChatDialogProps = AiChatDialogProps & {\n className?: string;\n contentClassName?: string;\n};\n\nexport const AiChatDialog: React.FC<WebAiChatDialogProps> = ({\n open,\n onOpenChange,\n client,\n title = 'AI 对话',\n placeholder = '输入你想咨询的问题...',\n systemPrompt,\n template,\n templateVariables,\n initialMessages,\n requestOptions,\n onResponse,\n onError,\n className,\n contentClassName,\n}) => {\n const { messages, sendMessage, isLoading, error } = useAiChat({\n client,\n systemPrompt,\n template,\n initialMessages,\n });\n const [input, setInput] = useState('');\n const listRef = useRef<HTMLDivElement>(null);\n\n const hasMessages = messages.length > 0;\n const helperText = useMemo(() => {\n return template ? '模板已启用,支持 {{input}} 变量。' : '直接输入即可开始对话。';\n }, [template]);\n\n useEffect(() => {\n if (!listRef.current) return;\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }, [messages, open, isLoading]);\n\n const handleSend = async () => {\n const content = input.trim();\n if (!content || isLoading) return;\n setInput('');\n try {\n const response = await sendMessage(content, {\n ...requestOptions,\n template,\n variables: templateVariables,\n });\n onResponse?.(response);\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n onError?.(nextError);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n handleSend();\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={cn(\n 'max-w-3xl border border-slate-200 bg-white p-0',\n contentClassName\n )}\n >\n <div className={cn('flex flex-col', className)}>\n <DialogHeader className=\"border-b border-slate-100 px-6 py-4\">\n <DialogTitle className=\"text-base font-semibold text-slate-900\">{title}</DialogTitle>\n </DialogHeader>\n\n <div className=\"flex flex-1 flex-col gap-4 px-6 py-4\">\n <div\n ref={listRef}\n className=\"max-h-[60vh] min-h-[240px] overflow-y-auto rounded-xl border border-slate-100 bg-slate-50/60 p-4\"\n >\n {!hasMessages && (\n <div className=\"flex h-full flex-col items-center justify-center gap-2 text-sm text-slate-400\">\n <span>暂无对话内容</span>\n <span>输入消息开始体验 AI 对话。</span>\n </div>\n )}\n <div className=\"flex flex-col gap-3\">\n {messages.map((message, index) => {\n const isUser = message.role === 'user';\n return (\n <div\n key={`${message.role}-${index}`}\n className={cn(\n 'max-w-[85%] whitespace-pre-wrap rounded-2xl px-4 py-2 text-sm leading-relaxed',\n isUser\n ? 'ml-auto bg-slate-900 text-white'\n : 'mr-auto border border-slate-200 bg-white text-slate-800'\n )}\n >\n {message.content}\n </div>\n );\n })}\n {isLoading && (\n <div className=\"mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-500\">\n AI 正在思考...\n </div>\n )}\n </div>\n </div>\n\n <div className=\"rounded-xl border border-slate-100 bg-white p-4 shadow-sm\">\n <textarea\n value={input}\n onChange={(event) => setInput(event.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"min-h-[96px] w-full resize-none rounded-lg border border-slate-200 px-3 py-2 text-sm text-slate-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n <div className=\"mt-3 flex flex-wrap items-center justify-between gap-3\">\n <span className=\"text-xs text-slate-400\">{helperText}</span>\n <Button onClick={handleSend} disabled={!input.trim() || isLoading}>\n {isLoading ? '发送中...' : '发送'}\n </Button>\n </div>\n {error && (\n <div className=\"mt-2 rounded-md border border-rose-200 bg-rose-50 px-3 py-2 text-xs text-rose-600\">\n {error.message || '对话出错,请重试。'}\n </div>\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","'use client';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Button } from '../../../../../components/Button';\nimport { Input } from '../../../../../components/Input';\nimport { cn } from '../../../../../utils/cn';\nimport type { AiConfigPageProps, AiUiConfig } from '../../types';\n\nconst DEFAULT_AI_CONFIG: AiUiConfig = {\n apiKey: '',\n baseUrl: 'https://api.openai.com/v1',\n model: 'gpt-3.5-turbo',\n systemPrompt: '',\n template: '{{input}}',\n temperature: 0.7,\n topP: 1,\n maxTokens: 1024,\n};\n\nconst mergeConfig = (\n base: AiUiConfig,\n overrides?: Partial<AiUiConfig>,\n stored?: Partial<AiUiConfig>\n): AiUiConfig => {\n return {\n ...base,\n ...(overrides ?? {}),\n ...(stored ?? {}),\n };\n};\n\nexport const AiConfigPage: React.FC<AiConfigPageProps> = ({\n storageKey = 'sa2kit-ai-config',\n initialConfig,\n title = 'AI 配置',\n description = '配置 API Key、模型与提示词模板,用于 AI 对话能力。',\n onSave,\n onChange,\n}) => {\n const baseConfig = useMemo(\n () => mergeConfig(DEFAULT_AI_CONFIG, initialConfig),\n [initialConfig]\n );\n const [config, setConfig] = useState<AiUiConfig>(baseConfig);\n const [status, setStatus] = useState<{ type: 'success' | 'error'; text: string } | null>(null);\n const [showApiKey, setShowApiKey] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n if (!storageKey) {\n return;\n }\n const storedRaw = localStorage.getItem(storageKey);\n if (!storedRaw) {\n return;\n }\n try {\n const stored = JSON.parse(storedRaw) as Partial<AiUiConfig>;\n setConfig(mergeConfig(DEFAULT_AI_CONFIG, initialConfig, stored));\n } catch (error) {\n console.warn('[AiConfigPage] Failed to parse stored config:', error);\n }\n }, [storageKey, initialConfig]);\n\n const updateConfig = (updates: Partial<AiUiConfig>) => {\n setConfig((prev) => {\n const next = { ...prev, ...updates };\n onChange?.(next);\n return next;\n });\n };\n\n const updateNumber = (key: keyof AiUiConfig, value: string) => {\n const nextValue = Number(value);\n if (Number.isNaN(nextValue)) {\n return;\n }\n updateConfig({ [key]: nextValue } as Partial<AiUiConfig>);\n };\n\n const saveConfig = () => {\n if (typeof window !== 'undefined' && storageKey) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(config));\n } catch (error) {\n setStatus({ type: 'error', text: '保存失败,请检查浏览器存储权限。' });\n return;\n }\n }\n setStatus({ type: 'success', text: '已保存配置。' });\n onSave?.(config);\n };\n\n const resetConfig = () => {\n const next = mergeConfig(DEFAULT_AI_CONFIG, initialConfig);\n setConfig(next);\n onChange?.(next);\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n setStatus({ type: 'success', text: '已恢复默认配置。' });\n };\n\n return (\n <div className=\"w-full rounded-2xl border border-slate-200 bg-white p-6 shadow-sm\">\n <div className=\"flex flex-col gap-2 border-b border-slate-100 pb-4\">\n <h2 className=\"text-xl font-semibold text-slate-900\">{title}</h2>\n <p className=\"text-sm text-slate-500\">{description}</p>\n </div>\n\n <div className=\"mt-6 grid gap-6\">\n <section className=\"rounded-xl border border-slate-100 bg-slate-50/60 p-4\">\n <h3 className=\"text-sm font-semibold text-slate-700\">API 信息</h3>\n <div className=\"mt-4 grid gap-4\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Base URL</label>\n <Input\n value={config.baseUrl}\n onChange={(event) => updateConfig({ baseUrl: event.target.value })}\n placeholder=\"https://api.openai.com/v1\"\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">API Key</label>\n <div className=\"mt-2 flex gap-2\">\n <Input\n value={config.apiKey}\n onChange={(event) => updateConfig({ apiKey: event.target.value })}\n placeholder=\"sk-...\"\n type={showApiKey ? 'text' : 'password'}\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setShowApiKey((prev) => !prev)}\n >\n {showApiKey ? '隐藏' : '显示'}\n </Button>\n </div>\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">模型</label>\n <Input\n value={config.model}\n onChange={(event) => updateConfig({ model: event.target.value })}\n placeholder=\"gpt-3.5-turbo\"\n className=\"mt-2\"\n />\n </div>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-slate-100 bg-white p-4 shadow-sm\">\n <h3 className=\"text-sm font-semibold text-slate-700\">提示词与上下文</h3>\n <div className=\"mt-4 grid gap-4\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">系统提示词</label>\n <textarea\n value={config.systemPrompt}\n onChange={(event) => updateConfig({ systemPrompt: event.target.value })}\n placeholder=\"你是一个专业的 AI 助手...\"\n className=\"mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">提示词模板</label>\n <textarea\n value={config.template}\n onChange={(event) => updateConfig({ template: event.target.value })}\n placeholder=\"请回答:{{input}}\"\n className=\"mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n <p className=\"mt-2 text-xs text-slate-400\">\n 支持变量插入:<code className=\"rounded bg-slate-100 px-1\">{\"{{input}}\"}</code>\n </p>\n </div>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-slate-100 bg-slate-50/60 p-4\">\n <h3 className=\"text-sm font-semibold text-slate-700\">模型参数</h3>\n <div className=\"mt-4 grid gap-4 md:grid-cols-3\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Temperature</label>\n <Input\n type=\"number\"\n value={config.temperature}\n onChange={(event) => updateNumber('temperature', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Top P</label>\n <Input\n type=\"number\"\n value={config.topP}\n onChange={(event) => updateNumber('topP', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Max Tokens</label>\n <Input\n type=\"number\"\n value={config.maxTokens}\n onChange={(event) => updateNumber('maxTokens', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n </div>\n </section>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button onClick={saveConfig}>保存配置</Button>\n <Button variant=\"outline\" onClick={resetConfig}>\n 恢复默认\n </Button>\n {status && (\n <span\n className={cn(\n 'text-xs',\n status.type === 'success' ? 'text-emerald-600' : 'text-rose-600'\n )}\n >\n {status.text}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
import '
|
|
1
|
+
import { __export } from './chunk-MAI35PU6.mjs';
|
|
2
2
|
import React2, { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
4
|
import { Grid, RefreshCw, Maximize2, Scissors, AlertCircle, Image as Image$1, CheckCircle2, XCircle, Loader2, Download } from 'lucide-react';
|
|
5
5
|
import JSZip from 'jszip';
|
|
6
6
|
|
|
7
|
-
// src/imageCrop/
|
|
7
|
+
// src/common/imageCrop/index.ts
|
|
8
|
+
var imageCrop_exports = {};
|
|
9
|
+
__export(imageCrop_exports, {
|
|
10
|
+
GridControls: () => GridControls,
|
|
11
|
+
ImageGridCropper: () => ImageGridCropper,
|
|
12
|
+
calculateTotalSize: () => calculateTotalSize,
|
|
13
|
+
constrainOffset: () => constrainOffset,
|
|
14
|
+
cropGridCell: () => cropGridCell,
|
|
15
|
+
cropMultipleCells: () => cropMultipleCells,
|
|
16
|
+
downloadAsZip: () => downloadAsZip,
|
|
17
|
+
downloadBlob: () => downloadBlob,
|
|
18
|
+
downloadMultipleFiles: () => downloadMultipleFiles,
|
|
19
|
+
formatFileSize: () => formatFileSize,
|
|
20
|
+
generateCellPreview: () => generateCellPreview,
|
|
21
|
+
loadImageFromFile: () => loadImageFromFile,
|
|
22
|
+
validateCropArea: () => validateCropArea
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// src/common/imageCrop/utils/cropUtils.ts
|
|
8
26
|
async function loadImageFromFile(file) {
|
|
9
27
|
return new Promise((resolve, reject) => {
|
|
10
28
|
const reader = new FileReader();
|
|
@@ -294,7 +312,7 @@ var GridControls = ({
|
|
|
294
312
|
))), /* @__PURE__ */ React2.createElement("div", { className: "pt-3 border-t border-gray-200 dark:border-gray-700" }, /* @__PURE__ */ React2.createElement("div", { className: "grid grid-cols-2 gap-4 text-sm text-gray-600 dark:text-gray-400" }, /* @__PURE__ */ React2.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ React2.createElement("span", null, "\u603B\u5355\u5143\u683C\u6570:"), /* @__PURE__ */ React2.createElement("span", { className: "font-medium text-gray-900 dark:text-gray-100" }, config.rows * config.columns)), /* @__PURE__ */ React2.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ React2.createElement("span", null, "\u603B\u5C3A\u5BF8:"), /* @__PURE__ */ React2.createElement("span", { className: "font-medium text-gray-900 dark:text-gray-100" }, config.cellWidth * config.columns, " \xD7 ", config.cellHeight * config.rows)))));
|
|
295
313
|
};
|
|
296
314
|
|
|
297
|
-
// src/imageCrop/components/ImageGridCropper.tsx
|
|
315
|
+
// src/common/imageCrop/components/ImageGridCropper.tsx
|
|
298
316
|
var ImageGridCropper = ({
|
|
299
317
|
config = {},
|
|
300
318
|
onExportSuccess,
|
|
@@ -536,6 +554,6 @@ var ImageGridCropper = ({
|
|
|
536
554
|
)));
|
|
537
555
|
};
|
|
538
556
|
|
|
539
|
-
export { GridControls, ImageGridCropper, calculateTotalSize, constrainOffset, cropGridCell, cropMultipleCells, downloadAsZip, downloadBlob, downloadMultipleFiles, formatFileSize, generateCellPreview, loadImageFromFile, validateCropArea };
|
|
540
|
-
//# sourceMappingURL=
|
|
541
|
-
//# sourceMappingURL=
|
|
557
|
+
export { GridControls, ImageGridCropper, calculateTotalSize, constrainOffset, cropGridCell, cropMultipleCells, downloadAsZip, downloadBlob, downloadMultipleFiles, formatFileSize, generateCellPreview, imageCrop_exports, loadImageFromFile, validateCropArea };
|
|
558
|
+
//# sourceMappingURL=chunk-KEZFTDZT.mjs.map
|
|
559
|
+
//# sourceMappingURL=chunk-KEZFTDZT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/imageCrop/index.ts","../src/common/imageCrop/utils/cropUtils.ts","../src/common/imageCrop/utils/downloadUtils.ts","../src/common/imageCrop/components/GridControls.tsx","../src/common/imageCrop/components/ImageGridCropper.tsx"],"names":["blob","React","ImageIcon"],"mappings":"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","file":"chunk-KEZFTDZT.mjs","sourcesContent":["/**\n * 图片网格裁剪工具模块\n * Image Grid Cropper Module\n * \n * 提供网格式图片裁剪功能,支持自定义行列数和单元格尺寸\n * 可以裁剪固定大小的图片并导出为压缩包\n * \n * @package sa2kit/imageCrop\n */\n\n// ============= 组件导出 =============\nexport * from './components';\n\n// ============= 类型导出 =============\nexport type {\n GridConfig,\n GridCell,\n CropResult,\n ImageInfo,\n CropOptions,\n ExportOptions,\n ImageGridCropperConfig,\n} from './types';\n\n// ============= 工具函数导出 =============\nexport {\n // 裁剪工具\n loadImageFromFile,\n cropGridCell,\n cropMultipleCells,\n generateCellPreview,\n validateCropArea,\n constrainOffset,\n \n // 下载工具\n downloadAsZip,\n downloadBlob,\n downloadMultipleFiles,\n calculateTotalSize,\n formatFileSize,\n} from './utils';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * 图片裁剪工具函数\n * Image Cropping Utilities\n */\n\nimport type { GridCell, ImageInfo, CropResult, CropOptions } from '../types';\n\n/**\n * 从文件加载图片\n */\nexport async function loadImageFromFile(file: File): Promise<ImageInfo> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n \n reader.onload = (e) => {\n const dataUrl = e.target?.result as string;\n const img = new Image();\n \n img.onload = () => {\n resolve({\n width: img.naturalWidth,\n height: img.naturalHeight,\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n image: img,\n file,\n });\n };\n \n img.onerror = () => {\n reject(new Error('图片加载失败'));\n };\n \n img.src = dataUrl;\n };\n \n reader.onerror = () => {\n reject(new Error('文件读取失败'));\n };\n \n reader.readAsDataURL(file);\n });\n}\n\n/**\n * 裁剪单个网格单元格\n */\nexport async function cropGridCell(\n imageInfo: ImageInfo,\n cell: GridCell,\n cellWidth: number,\n cellHeight: number,\n options: CropOptions = {}\n): Promise<CropResult> {\n const {\n format = 'image/png',\n quality = 0.92,\n filenamePrefix = 'crop',\n } = options;\n\n if (!imageInfo.image) {\n throw new Error('图片资源未加载');\n }\n\n // 创建离屏canvas\n const canvas = document.createElement('canvas');\n canvas.width = cellWidth;\n canvas.height = cellHeight;\n \n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Canvas context 创建失败');\n }\n\n // 计算源图片裁剪区域\n const sourceX = cell.offsetX;\n const sourceY = cell.offsetY;\n const sourceWidth = cellWidth;\n const sourceHeight = cellHeight;\n\n // 绘制裁剪区域\n ctx.drawImage(\n imageInfo.image,\n sourceX,\n sourceY,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n cellWidth,\n cellHeight\n );\n\n // 转换为Blob\n const blob = await new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error('图片转换失败'));\n }\n },\n format,\n quality\n );\n });\n\n // 生成文件名\n const extension = format.split('/')[1] || 'png';\n const filename = (filenamePrefix) + '_r' + (cell.row) + '_c' + (cell.column) + '.' + (extension);\n\n return {\n blob,\n dataUrl: canvas.toDataURL(format, quality),\n index: cell.row * 1000 + cell.column, // 简单的索引生成\n row: cell.row,\n column: cell.column,\n cell,\n filename,\n };\n}\n\n/**\n * 批量裁剪多个网格单元格\n */\nexport async function cropMultipleCells(\n imageInfo: ImageInfo,\n cells: GridCell[],\n cellWidth: number,\n cellHeight: number,\n options: CropOptions = {},\n onProgress?: (current: number, total: number) => void\n): Promise<CropResult[]> {\n const results: CropResult[] = [];\n \n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i];\n if (!cell || !cell.selected) continue;\n \n try {\n const result = await cropGridCell(imageInfo, cell, cellWidth, cellHeight, options);\n results.push(result);\n \n if (onProgress) {\n onProgress(i + 1, cells.length);\n }\n } catch (error) {\n console.error('裁剪单元格 (' + (cell.row) + ', ' + (cell.column) + ') 失败:', error);\n }\n }\n \n return results;\n}\n\n/**\n * 生成网格单元格预览\n */\nexport async function generateCellPreview(\n imageInfo: ImageInfo,\n cell: GridCell,\n cellWidth: number,\n cellHeight: number,\n previewSize: number = 100\n): Promise<string> {\n const canvas = document.createElement('canvas');\n const scale = Math.min(previewSize / cellWidth, previewSize / cellHeight);\n \n canvas.width = cellWidth * scale;\n canvas.height = cellHeight * scale;\n \n const ctx = canvas.getContext('2d');\n if (!ctx || !imageInfo.image) {\n throw new Error('Canvas context 创建失败或图片未加载');\n }\n\n ctx.drawImage(\n imageInfo.image,\n cell.offsetX,\n cell.offsetY,\n cellWidth,\n cellHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n\n return canvas.toDataURL('image/png');\n}\n\n/**\n * 验证裁剪区域是否在图片范围内\n */\nexport function validateCropArea(\n imageWidth: number,\n imageHeight: number,\n offsetX: number,\n offsetY: number,\n cropWidth: number,\n cropHeight: number\n): boolean {\n return (\n offsetX >= 0 &&\n offsetY >= 0 &&\n offsetX + cropWidth <= imageWidth &&\n offsetY + cropHeight <= imageHeight\n );\n}\n\n/**\n * 自动调整偏移量以保持在图片范围内\n */\nexport function constrainOffset(\n imageWidth: number,\n imageHeight: number,\n offsetX: number,\n offsetY: number,\n cropWidth: number,\n cropHeight: number\n): { offsetX: number; offsetY: number } {\n const constrainedX = Math.max(0, Math.min(offsetX, imageWidth - cropWidth));\n const constrainedY = Math.max(0, Math.min(offsetY, imageHeight - cropHeight));\n \n return {\n offsetX: constrainedX,\n offsetY: constrainedY,\n };\n}\n\n\n\n\n\n\n","/**\n * 下载工具函数\n * Download Utilities\n */\n\nimport JSZip from 'jszip';\nimport type { CropResult } from '../types';\n\n/**\n * 创建ZIP压缩包并下载\n */\nexport async function downloadAsZip(\n results: CropResult[],\n zipFilename: string = 'cropped_images.zip'\n): Promise<void> {\n if (results.length === 0) {\n throw new Error('没有可下载的图片');\n }\n\n const zip = new JSZip();\n \n // 添加所有裁剪结果到ZIP\n results.forEach((result, idx) => {\n const filename = result.filename || 'crop_' + (idx) + '.png';\n zip.file(filename, result.blob);\n });\n\n // 生成ZIP文件\n const zipBlob = await zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: {\n level: 6,\n },\n });\n\n // 触发下载\n downloadBlob(zipBlob, zipFilename);\n}\n\n/**\n * 下载单个Blob文件\n */\nexport function downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n \n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n \n // 释放URL对象\n setTimeout(() => {\n URL.revokeObjectURL(url);\n }, 100);\n}\n\n/**\n * 批量下载多个文件(不压缩)\n */\nexport async function downloadMultipleFiles(\n results: CropResult[],\n delay: number = 100\n): Promise<void> {\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n if (!result) continue;\n \n const filename = result.filename || 'crop_' + (i) + '.png';\n downloadBlob(result.blob, filename);\n \n // 添加延迟避免浏览器阻止多个下载\n if (i < results.length - 1) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n}\n\n/**\n * 计算压缩包大小\n */\nexport function calculateTotalSize(results: CropResult[]): number {\n return results.reduce((total, result) => total + result.blob.size, 0);\n}\n\n/**\n * 格式化文件大小\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n \n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return ((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + (sizes[i]);\n}\n\n\n\n\n\n\n","/**\n * 网格控制组件\n * Grid Controls Component\n */\n\n'use client';\n\nimport React from 'react';\nimport { Grid, Maximize2, RefreshCw } from 'lucide-react';\nimport type { GridConfig } from '../types';\n\nexport interface GridControlsProps {\n /** 网格配置 */\n config: GridConfig;\n /** 配置变更回调 */\n onChange: (config: GridConfig) => void;\n /** 是否禁用 */\n disabled?: boolean;\n /** 最大行列数 */\n maxRows?: number;\n maxColumns?: number;\n /** 最大最小单元格尺寸 */\n maxCellSize?: number;\n minCellSize?: number;\n /** 是否显示重置按钮 */\n showReset?: boolean;\n /** 重置回调 */\n onReset?: () => void;\n}\n\nexport const GridControls: React.FC<GridControlsProps> = ({\n config,\n onChange,\n disabled = false,\n maxRows = 20,\n maxColumns = 20,\n maxCellSize = 2000,\n minCellSize = 10,\n showReset = true,\n onReset,\n}) => {\n const handleChange = (field: keyof GridConfig, value: number) => {\n // 确保值在有效范围内\n let constrainedValue = value;\n \n if (field === 'rows') {\n constrainedValue = Math.max(1, Math.min(maxRows, value));\n } else if (field === 'columns') {\n constrainedValue = Math.max(1, Math.min(maxColumns, value));\n } else if (field === 'cellWidth' || field === 'cellHeight') {\n constrainedValue = Math.max(minCellSize, Math.min(maxCellSize, value));\n }\n \n onChange({\n ...config,\n [field]: constrainedValue,\n });\n };\n\n return (\n <div className=\"space-y-4 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\">\n {/* 标题 */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Grid className=\"w-5 h-5 text-blue-500\" />\n <h3 className=\"text-lg font-semibold text-gray-800 dark:text-gray-200\">\n 网格设置\n </h3>\n </div>\n \n {showReset && (\n <button\n onClick={onReset}\n disabled={disabled}\n className=\"flex items-center gap-1 px-3 py-1.5 text-sm text-gray-600 dark:text-gray-400 hover:text-blue-500 dark:hover:text-blue-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title=\"重置为默认值\"\n >\n <RefreshCw className=\"w-4 h-4\" />\n 重置\n </button>\n )}\n </div>\n\n {/* 网格行列控制 */}\n <div className=\"grid grid-cols-2 gap-4\">\n {/* 行数 */}\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n 行数\n </label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min={1}\n max={maxRows}\n value={config.rows}\n onChange={(e) => handleChange('rows', parseInt(e.target.value) || 1)}\n disabled={disabled}\n className=\"flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n <input\n type=\"range\"\n min={1}\n max={maxRows}\n value={config.rows}\n onChange={(e) => handleChange('rows', parseInt(e.target.value))}\n disabled={disabled}\n className=\"flex-1 h-2 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n </div>\n </div>\n\n {/* 列数 */}\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n 列数\n </label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min={1}\n max={maxColumns}\n value={config.columns}\n onChange={(e) => handleChange('columns', parseInt(e.target.value) || 1)}\n disabled={disabled}\n className=\"flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n <input\n type=\"range\"\n min={1}\n max={maxColumns}\n value={config.columns}\n onChange={(e) => handleChange('columns', parseInt(e.target.value))}\n disabled={disabled}\n className=\"flex-1 h-2 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n </div>\n </div>\n </div>\n\n {/* 单元格尺寸控制 */}\n <div className=\"grid grid-cols-2 gap-4\">\n {/* 单元格宽度 */}\n <div className=\"space-y-2\">\n <label className=\"flex items-center gap-2 text-sm font-medium text-gray-700 dark:text-gray-300\">\n <Maximize2 className=\"w-4 h-4\" />\n 单元格宽度 (px)\n </label>\n <input\n type=\"number\"\n min={minCellSize}\n max={maxCellSize}\n value={config.cellWidth}\n onChange={(e) => handleChange('cellWidth', parseInt(e.target.value) || minCellSize)}\n disabled={disabled}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n </div>\n\n {/* 单元格高度 */}\n <div className=\"space-y-2\">\n <label className=\"flex items-center gap-2 text-sm font-medium text-gray-700 dark:text-gray-300\">\n <Maximize2 className=\"w-4 h-4\" />\n 单元格高度 (px)\n </label>\n <input\n type=\"number\"\n min={minCellSize}\n max={maxCellSize}\n value={config.cellHeight}\n onChange={(e) => handleChange('cellHeight', parseInt(e.target.value) || minCellSize)}\n disabled={disabled}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n </div>\n </div>\n\n {/* 统计信息 */}\n <div className=\"pt-3 border-t border-gray-200 dark:border-gray-700\">\n <div className=\"grid grid-cols-2 gap-4 text-sm text-gray-600 dark:text-gray-400\">\n <div className=\"flex justify-between\">\n <span>总单元格数:</span>\n <span className=\"font-medium text-gray-900 dark:text-gray-100\">\n {config.rows * config.columns}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span>总尺寸:</span>\n <span className=\"font-medium text-gray-900 dark:text-gray-100\">\n {config.cellWidth * config.columns} × {config.cellHeight * config.rows}\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GridControls;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * 图片网格裁剪器主组件\n * Image Grid Cropper Main Component\n */\n\n'use client';\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { clsx } from 'clsx';\nimport {\n Download,\n Scissors,\n CheckCircle2,\n XCircle,\n Loader2,\n Image as ImageIcon,\n AlertCircle,\n Move,\n} from 'lucide-react';\n\nimport type {\n GridConfig,\n GridCell,\n ImageInfo,\n CropResult,\n ExportOptions,\n ImageGridCropperConfig,\n} from '../types';\nimport {\n loadImageFromFile,\n cropMultipleCells,\n constrainOffset,\n validateCropArea,\n} from '../utils/cropUtils';\nimport { downloadAsZip, formatFileSize, calculateTotalSize } from '../utils/downloadUtils';\nimport { GridControls } from './GridControls';\n\n// ============= 主组件属性 =============\n\nexport interface ImageGridCropperProps {\n /** 初始配置 */\n config?: ImageGridCropperConfig;\n /** 导出成功回调 */\n onExportSuccess?: (results: CropResult[]) => void;\n /** 导出失败回调 */\n onExportError?: (error: string) => void;\n /** 自定义样式类名 */\n className?: string;\n}\n\n// ============= 主组件 =============\n\nexport const ImageGridCropper: React.FC<ImageGridCropperProps> = ({\n config = {},\n onExportSuccess,\n onExportError,\n className = '',\n}) => {\n // ============= 配置 =============\n const {\n defaultRows = 3,\n defaultColumns = 3,\n defaultCellWidth = 256,\n defaultCellHeight = 256,\n maxRows = 20,\n maxColumns = 20,\n maxCellSize = 2000,\n minCellSize = 10,\n } = config;\n\n // ============= 状态管理 =============\n const [imageInfo, setImageInfo] = useState<ImageInfo | null>(null);\n const [gridConfig, setGridConfig] = useState<GridConfig>({\n rows: defaultRows,\n columns: defaultColumns,\n cellWidth: defaultCellWidth,\n cellHeight: defaultCellHeight,\n });\n const [gridCells, setGridCells] = useState<GridCell[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const [progress, setProgress] = useState({ current: 0, total: 0 });\n const [error, setError] = useState<string | null>(null);\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // ============= 生成网格单元格 =============\n const generateGridCells = useCallback(() => {\n const cells: GridCell[] = [];\n const { rows, columns, cellWidth, cellHeight } = gridConfig;\n\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n const offsetX = col * cellWidth;\n const offsetY = row * cellHeight;\n\n cells.push({\n id: 'cell_' + (row) + '_' + (col),\n row,\n column: col,\n x: offsetX,\n y: offsetY,\n offsetX,\n offsetY,\n width: cellWidth,\n height: cellHeight,\n selected: true, // 默认全选\n });\n }\n }\n\n setGridCells(cells);\n }, [gridConfig]);\n\n // ============= 图片加载 =============\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n // 验证文件类型\n if (!file.type.startsWith('image/')) {\n setError('请选择图片文件');\n return;\n }\n\n try {\n setError(null);\n setIsProcessing(true);\n\n const info = await loadImageFromFile(file);\n setImageInfo(info);\n generateGridCells();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '图片加载失败';\n setError(errorMsg);\n onExportError?.(errorMsg);\n } finally {\n setIsProcessing(false);\n }\n\n // 清空input以允许重复选择同一文件\n event.target.value = '';\n };\n\n // ============= 绘制预览 =============\n const drawPreview = useCallback(() => {\n if (!imageInfo || !canvasRef.current) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n // 设置canvas尺寸\n const maxWidth = 800;\n const maxHeight = 600;\n const scale = Math.min(\n maxWidth / imageInfo.width,\n maxHeight / imageInfo.height,\n 1\n );\n\n canvas.width = imageInfo.width * scale;\n canvas.height = imageInfo.height * scale;\n\n if (!imageInfo.image) return;\n\n // 绘制图片\n ctx.drawImage(imageInfo.image, 0, 0, canvas.width, canvas.height);\n\n // 绘制网格线\n ctx.strokeStyle = 'rgba(59, 130, 246, 0.6)'; // 蓝色\n ctx.lineWidth = 2;\n\n const { cellWidth, cellHeight } = gridConfig;\n\n gridCells.forEach((cell) => {\n const x = cell.offsetX * scale;\n const y = cell.offsetY * scale;\n const w = cellWidth * scale;\n const h = cellHeight * scale;\n\n // 绘制边框\n if (cell.selected) {\n ctx.strokeStyle = 'rgba(34, 197, 94, 0.8)'; // 绿色表示选中\n } else {\n ctx.strokeStyle = 'rgba(156, 163, 175, 0.5)'; // 灰色表示未选中\n }\n \n ctx.strokeRect(x, y, w, h);\n\n // 绘制单元格编号\n ctx.fillStyle = cell.selected ? 'rgba(34, 197, 94, 0.9)' : 'rgba(156, 163, 175, 0.7)';\n ctx.font = '12px sans-serif';\n ctx.fillText('R' + (cell.row) + 'C' + (cell.column), x + 5, y + 15);\n });\n }, [imageInfo, gridConfig, gridCells]);\n\n // ============= 单元格选择切换 =============\n const toggleCellSelection = (cellId: string) => {\n setGridCells((prev) =>\n prev.map((cell) =>\n cell.id === cellId ? { ...cell, selected: !cell.selected } : cell\n )\n );\n };\n\n // ============= 全选/取消全选 =============\n const toggleSelectAll = () => {\n const allSelected = gridCells.every((cell) => cell.selected);\n setGridCells((prev) =>\n prev.map((cell) => ({ ...cell, selected: !allSelected }))\n );\n };\n\n // ============= 调整单元格偏移 =============\n const adjustCellOffset = (cellId: string, deltaX: number, deltaY: number) => {\n if (!imageInfo) return;\n\n setGridCells((prev) =>\n prev.map((cell) => {\n if (cell.id !== cellId) return cell;\n\n const newOffsetX = cell.offsetX + deltaX;\n const newOffsetY = cell.offsetY + deltaY;\n\n const constrained = constrainOffset(\n imageInfo.width,\n imageInfo.height,\n newOffsetX,\n newOffsetY,\n gridConfig.cellWidth,\n gridConfig.cellHeight\n );\n\n return {\n ...cell,\n offsetX: constrained.offsetX,\n offsetY: constrained.offsetY,\n };\n })\n );\n };\n\n // ============= 导出裁剪图片 =============\n const handleExport = async (options: ExportOptions = {}) => {\n if (!imageInfo) {\n setError('请先上传图片');\n return;\n }\n\n const selectedCells = gridCells.filter((cell) => cell.selected);\n if (selectedCells.length === 0) {\n setError('请至少选择一个单元格');\n return;\n }\n\n try {\n setError(null);\n setIsProcessing(true);\n setProgress({ current: 0, total: selectedCells.length });\n\n const results = await cropMultipleCells(\n imageInfo,\n selectedCells,\n gridConfig.cellWidth,\n gridConfig.cellHeight,\n options.cropOptions,\n (current, total) => setProgress({ current, total })\n );\n\n if (results.length === 0) {\n throw new Error('没有成功裁剪的图片');\n }\n\n // 下载为ZIP\n const zipFilename = options.zipFilename || 'cropped_' + (Date.now()) + '.zip';\n await downloadAsZip(results, zipFilename);\n\n onExportSuccess?.(results);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '导出失败';\n setError(errorMsg);\n onExportError?.(errorMsg);\n } finally {\n setIsProcessing(false);\n setProgress({ current: 0, total: 0 });\n }\n };\n\n // ============= 重置配置 =============\n const handleReset = () => {\n setGridConfig({\n rows: defaultRows,\n columns: defaultColumns,\n cellWidth: defaultCellWidth,\n cellHeight: defaultCellHeight,\n });\n };\n\n // ============= 效果 =============\n useEffect(() => {\n if (imageInfo) {\n generateGridCells();\n }\n }, [imageInfo, generateGridCells]);\n\n useEffect(() => {\n drawPreview();\n }, [drawPreview]);\n\n // ============= 渲染 =============\n const selectedCount = gridCells.filter((cell) => cell.selected).length;\n\n return (\n <div className={clsx('w-full space-y-6', className)}>\n {/* 头部 */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Scissors className=\"w-7 h-7 text-blue-500\" />\n <div>\n <h2 className=\"text-2xl font-bold text-gray-800 dark:text-gray-200\">\n 网格式图片裁剪工具\n </h2>\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n 上传图片,设置网格,裁剪并导出\n </p>\n </div>\n </div>\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"flex items-center gap-2 p-4 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg\">\n <AlertCircle className=\"w-5 h-5 text-red-500\" />\n <p className=\"text-sm text-red-700 dark:text-red-400\">{error}</p>\n </div>\n )}\n\n {/* 上传区域 */}\n <div className=\"space-y-4\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n 上传图片\n </label>\n <div\n className=\"border-2 border-dashed border-gray-300 dark:border-gray-600 rounded-lg p-8 text-center cursor-pointer hover:border-blue-400 dark:hover:border-blue-500 transition-colors\"\n onClick={() => fileInputRef.current?.click()}\n >\n <ImageIcon className=\"w-12 h-12 mx-auto mb-4 text-gray-400\" />\n <p className=\"text-gray-600 dark:text-gray-400 mb-2\">\n 点击选择图片或拖拽文件到这里\n </p>\n <p className=\"text-sm text-gray-500\">支持 PNG, JPG, WEBP 等格式</p>\n {imageInfo && imageInfo.file && (\n <p className=\"mt-4 text-sm text-green-600 dark:text-green-400\">\n ✓ 已上传: {imageInfo.file.name} ({imageInfo.width} × {imageInfo.height})\n </p>\n )}\n </div>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n {/* 网格配置 */}\n {imageInfo && (\n <GridControls\n config={gridConfig}\n onChange={setGridConfig}\n disabled={isProcessing}\n maxRows={maxRows}\n maxColumns={maxColumns}\n maxCellSize={maxCellSize}\n minCellSize={minCellSize}\n onReset={handleReset}\n />\n )}\n\n {/* 预览区域 */}\n {imageInfo && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold text-gray-800 dark:text-gray-200\">\n 预览与调整\n </h3>\n <button\n onClick={toggleSelectAll}\n className=\"px-4 py-2 text-sm text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 rounded-md transition-colors\"\n >\n {gridCells.every((cell) => cell.selected) ? '取消全选' : '全选'}\n </button>\n </div>\n\n <div className=\"border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 p-4\">\n <canvas\n ref={canvasRef}\n className=\"max-w-full mx-auto border border-gray-300 dark:border-gray-600\"\n />\n </div>\n\n {/* 单元格列表 */}\n <div className=\"space-y-2\">\n <h4 className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n 单元格列表 ({selectedCount}/{gridCells.length} 已选中)\n </h4>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2 max-h-64 overflow-y-auto\">\n {gridCells.map((cell) => (\n <div\n key={cell.id}\n className={clsx('p-3 rounded border', cell.selected\n ? 'border-green-500 bg-green-50 dark:bg-green-900/20'\n : 'border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800', 'cursor-pointer transition-colors')}\n onClick={() => toggleCellSelection(cell.id)}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n R{cell.row} C{cell.column}\n </span>\n {cell.selected ? (\n <CheckCircle2 className=\"w-4 h-4 text-green-500\" />\n ) : (\n <XCircle className=\"w-4 h-4 text-gray-400\" />\n )}\n </div>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>X: {cell.offsetX}px</p>\n <p>Y: {cell.offsetY}px</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* 导出按钮 */}\n {imageInfo && (\n <div className=\"flex items-center justify-between p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-200 dark:border-blue-800\">\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\n <p className=\"font-medium\">准备导出 {selectedCount} 个裁剪图片</p>\n {isProcessing && (\n <p className=\"text-xs text-gray-600 dark:text-gray-400 mt-1\">\n 进度: {progress.current}/{progress.total}\n </p>\n )}\n </div>\n <button\n onClick={() => handleExport()}\n disabled={isProcessing || selectedCount === 0}\n className=\"flex items-center gap-2 px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isProcessing ? (\n <>\n <Loader2 className=\"w-5 h-5 animate-spin\" />\n 处理中...\n </>\n ) : (\n <>\n <Download className=\"w-5 h-5\" />\n 导出为 ZIP\n </>\n )}\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default ImageGridCropper;\n\n\n\n\n\n\n"]}
|
|
@@ -8,7 +8,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
8
8
|
|
|
9
9
|
var useSWR__default = /*#__PURE__*/_interopDefault(useSWR);
|
|
10
10
|
|
|
11
|
-
// src/config/index.ts
|
|
11
|
+
// src/common/config/index.ts
|
|
12
12
|
var config_exports = {};
|
|
13
13
|
chunkNSBPE2FW_js.__export(config_exports, {
|
|
14
14
|
createUseConfigs: () => createUseConfigs,
|
|
@@ -140,5 +140,5 @@ exports.config_exports = config_exports;
|
|
|
140
140
|
exports.createUseConfigs = createUseConfigs;
|
|
141
141
|
exports.invalidateAllConfigs = invalidateAllConfigs;
|
|
142
142
|
exports.prefetchConfigs = prefetchConfigs;
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
143
|
+
//# sourceMappingURL=chunk-KHOVC2KL.js.map
|
|
144
|
+
//# sourceMappingURL=chunk-KHOVC2KL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/config/index.ts","../src/common/config/hooks/useConfigs.ts"],"names":["__export","useSWR","useCallback","error","mutate"],"mappings":"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","file":"chunk-KHOVC2KL.js","sourcesContent":["/**\n * Config 配置管理模块\n *\n * 提供配置缓存和管理相关的 Hooks\n *\n * 依赖:swr\n */\n\n// 类型定义\nexport type {\n ConfigItem,\n AllConfigs,\n UseConfigsOptions,\n} from './types';\n\n// Hooks\nexport {\n createUseConfigs,\n prefetchConfigs,\n invalidateAllConfigs,\n} from './hooks';\n\n","'use client';\n\n/**\n * 配置缓存优化 Hook\n *\n * 使用 SWR 实现智能缓存和自动重新验证\n * 支持多平台:Web、React Native、小程序\n *\n * 优点:\n * 1. 自动缓存,减少网络请求\n * 2. 自动重新验证(可配置)\n * 3. 乐观更新\n * 4. 错误重试\n * 5. 防抖和去重\n */\n\nimport { default as useSWR, mutate } from 'swr';\nimport { useCallback } from 'react';\nimport type { AllConfigs, UseConfigsOptions, ConfigItem } from '../types';\n\nexport type { AllConfigs, UseConfigsOptions, ConfigItem };\n\n/**\n * 创建 useConfigs Hook\n */\nexport function createUseConfigs(options: UseConfigsOptions) {\n const {\n apiBaseUrl = '',\n getAuthToken,\n onUnauthorized,\n dedupingInterval = 60000,\n revalidateOnFocus = false,\n } = options;\n\n // Fetcher 函数\n const fetcher = async (url: string) => {\n const token = await getAuthToken();\n\n const res = await fetch((apiBaseUrl) + (url), {\n headers: {\n Authorization: 'Bearer ' + (token),\n 'Content-Type': 'application/json',\n },\n credentials: 'include',\n });\n\n if (!res.ok) {\n if (res.status === 401) {\n onUnauthorized?.();\n throw new Error('Unauthorized');\n }\n throw new Error('Failed to fetch configs');\n }\n\n const data = await res.json();\n return data.data as AllConfigs;\n };\n\n // 返回 Hook 函数\n return function useConfigs() {\n const {\n data,\n error,\n mutate: mutateConfigs,\n } = useSWR<AllConfigs>('/api/admin/config', fetcher, {\n // 配置选项\n revalidateOnFocus,\n revalidateOnReconnect: true, // 网络重连时重新验证\n dedupingInterval, // 缓存去重时间\n errorRetryCount: 3, // 错误重试3次\n errorRetryInterval: 5000, // 重试间隔5秒\n shouldRetryOnError: true, // 启用错误重试\n\n // 成功时的回调\n onSuccess: (_data: AllConfigs) => {\n console.log('✅ Configs loaded from cache or network');\n },\n\n // 错误时的回调\n onError: (err: Error) => {\n console.error('❌ Failed to load configs:', err);\n },\n });\n\n // 更新配置(乐观更新)\n const updateConfigs = useCallback(\n async (category: string, updates: Record<string, any>) => {\n const token = await getAuthToken();\n\n // 乐观更新:立即更新本地缓存\n mutateConfigs(\n (current: AllConfigs | undefined) => {\n if (!current) return current;\n return {\n ...current,\n [category]: {\n ...current[category],\n ...Object.entries(updates).reduce((acc, [key, value]) => {\n acc[key] = {\n ...current[category]?.[key],\n value,\n };\n return acc;\n }, {} as any),\n },\n };\n },\n false // 不立即重新验证\n );\n\n try {\n // 发送到服务器\n const res = await fetch((apiBaseUrl) + '/api/admin/config/' + (category), {\n method: 'POST',\n headers: {\n Authorization: 'Bearer ' + (token),\n 'Content-Type': 'application/json',\n },\n credentials: 'include',\n body: JSON.stringify({ configs: updates }),\n });\n\n if (!res.ok) throw new Error('Update failed');\n\n // 更新成功,重新验证缓存\n mutateConfigs();\n\n return { success: true };\n } catch (error) {\n // 更新失败,回滚\n mutateConfigs(); // 从服务器重新获取\n throw error;\n }\n },\n [mutateConfigs, getAuthToken, apiBaseUrl]\n );\n\n // 手动刷新\n const refresh = useCallback(() => {\n mutateConfigs();\n }, [mutateConfigs]);\n\n return {\n configs: data,\n isLoading: !error && !data,\n isError: !!error,\n error,\n updateConfigs,\n refresh,\n };\n };\n}\n\n/**\n * 预加载配置\n */\nexport function prefetchConfigs(apiBaseUrl: string = '') {\n mutate((apiBaseUrl) + '/api/admin/config');\n}\n\n/**\n * 全局缓存失效\n */\nexport function invalidateAllConfigs(apiBaseUrl: string = '') {\n mutate(\n (key: any) => typeof key === 'string' && key.startsWith((apiBaseUrl) + '/api/admin/config'),\n undefined,\n { revalidate: true }\n );\n}\n\n"]}
|