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/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":["__export","blob","JSZip","React","Grid","RefreshCw","Maximize2","useState","useRef","useCallback","useEffect","clsx","Scissors","AlertCircle","ImageIcon","CheckCircle2","XCircle","Loader2","Download"],"mappings":"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","file":"chunk-VN2DULIA.js","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"]}
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
3
|
+
var chunkOIRZXSYM_js = require('./chunk-OIRZXSYM.js');
|
|
4
|
+
var chunkUR5NENGE_js = require('./chunk-UR5NENGE.js');
|
|
5
|
+
var chunkFCLS5R24_js = require('./chunk-FCLS5R24.js');
|
|
6
|
+
var chunk7VVZHFEM_js = require('./chunk-7VVZHFEM.js');
|
|
7
|
+
var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
|
|
7
8
|
|
|
8
|
-
// src/storage/
|
|
9
|
+
// src/common/storage/index.ts
|
|
10
|
+
var storage_exports = {};
|
|
11
|
+
chunkNSBPE2FW_js.__export(storage_exports, {
|
|
12
|
+
ElectronStorageAdapter: () => chunkFCLS5R24_js.ElectronStorageAdapter,
|
|
13
|
+
MiniAppStorageAdapter: () => MiniAppStorageAdapter,
|
|
14
|
+
ReactNativeStorageAdapter: () => chunkUR5NENGE_js.ReactNativeStorageAdapter,
|
|
15
|
+
WebStorageAdapter: () => chunk7VVZHFEM_js.WebStorageAdapter,
|
|
16
|
+
useAsyncStorage: () => useAsyncStorage,
|
|
17
|
+
useElectronStorage: () => useElectronStorage,
|
|
18
|
+
useLocalStorage: () => chunkOIRZXSYM_js.useLocalStorage,
|
|
19
|
+
useStorage: () => chunkOIRZXSYM_js.useStorage,
|
|
20
|
+
useTaroStorage: () => useTaroStorage
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// src/common/storage/adapters/miniapp-adapter.ts
|
|
9
24
|
var Taro = null;
|
|
10
25
|
var taroLoadPromise = null;
|
|
11
26
|
var isMiniAppEnvironment = null;
|
|
@@ -125,100 +140,29 @@ var MiniAppStorageAdapter = class {
|
|
|
125
140
|
}
|
|
126
141
|
}
|
|
127
142
|
};
|
|
128
|
-
function useStorage(storage, key, defaultValue) {
|
|
129
|
-
const [value, setValue] = react.useState(defaultValue);
|
|
130
|
-
const [loading, setLoading] = react.useState(true);
|
|
131
|
-
react.useEffect(() => {
|
|
132
|
-
const loadValue = async () => {
|
|
133
|
-
try {
|
|
134
|
-
const stored = await storage.getItem(key);
|
|
135
|
-
if (stored !== null) {
|
|
136
|
-
setValue(JSON.parse(stored));
|
|
137
|
-
}
|
|
138
|
-
} catch (error) {
|
|
139
|
-
console.error('Error reading storage key "' + key + '":', error);
|
|
140
|
-
} finally {
|
|
141
|
-
setLoading(false);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
void loadValue();
|
|
145
|
-
}, [storage, key]);
|
|
146
|
-
const updateValue = react.useCallback(
|
|
147
|
-
async (newValue) => {
|
|
148
|
-
try {
|
|
149
|
-
setValue(newValue);
|
|
150
|
-
await storage.setItem(key, JSON.stringify(newValue));
|
|
151
|
-
if ("dispatchChange" in storage && typeof storage.dispatchChange === "function") {
|
|
152
|
-
storage.dispatchChange(key, JSON.stringify(newValue));
|
|
153
|
-
}
|
|
154
|
-
} catch (error) {
|
|
155
|
-
console.error('Error setting storage key "' + key + '":', error);
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
[storage, key]
|
|
159
|
-
);
|
|
160
|
-
const removeValue = react.useCallback(async () => {
|
|
161
|
-
try {
|
|
162
|
-
setValue(defaultValue);
|
|
163
|
-
await storage.removeItem(key);
|
|
164
|
-
if ("dispatchChange" in storage && typeof storage.dispatchChange === "function") {
|
|
165
|
-
storage.dispatchChange(key, null);
|
|
166
|
-
}
|
|
167
|
-
} catch (error) {
|
|
168
|
-
console.error('Error removing storage key "' + key + '":', error);
|
|
169
|
-
}
|
|
170
|
-
}, [storage, key, defaultValue]);
|
|
171
|
-
react.useEffect(() => {
|
|
172
|
-
if (!storage.addChangeListener) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
const cleanup = storage.addChangeListener((changedKey, newValue) => {
|
|
176
|
-
if (changedKey === key) {
|
|
177
|
-
try {
|
|
178
|
-
if (newValue === null) {
|
|
179
|
-
setValue(defaultValue);
|
|
180
|
-
} else {
|
|
181
|
-
setValue(JSON.parse(newValue));
|
|
182
|
-
}
|
|
183
|
-
} catch (error) {
|
|
184
|
-
console.error("Error parsing storage change event:", error);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
return cleanup;
|
|
189
|
-
}, [storage, key, defaultValue]);
|
|
190
|
-
return [value, updateValue, removeValue, loading];
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// src/storage/hooks/useLocalStorage.ts
|
|
194
|
-
var webStorage = new chunkXJ7ZAGC5_js.WebStorageAdapter();
|
|
195
|
-
function useLocalStorage(key, defaultValue) {
|
|
196
|
-
return useStorage(webStorage, key, defaultValue);
|
|
197
|
-
}
|
|
198
143
|
|
|
199
|
-
// src/storage/hooks/useAsyncStorage.ts
|
|
200
|
-
var asyncStorage = new
|
|
144
|
+
// src/common/storage/hooks/useAsyncStorage.ts
|
|
145
|
+
var asyncStorage = new chunkUR5NENGE_js.ReactNativeStorageAdapter();
|
|
201
146
|
function useAsyncStorage(key, defaultValue) {
|
|
202
|
-
return useStorage(asyncStorage, key, defaultValue);
|
|
147
|
+
return chunkOIRZXSYM_js.useStorage(asyncStorage, key, defaultValue);
|
|
203
148
|
}
|
|
204
149
|
|
|
205
|
-
// src/storage/hooks/useTaroStorage.ts
|
|
150
|
+
// src/common/storage/hooks/useTaroStorage.ts
|
|
206
151
|
var taroStorage = new MiniAppStorageAdapter();
|
|
207
152
|
function useTaroStorage(key, defaultValue) {
|
|
208
|
-
return useStorage(taroStorage, key, defaultValue);
|
|
153
|
+
return chunkOIRZXSYM_js.useStorage(taroStorage, key, defaultValue);
|
|
209
154
|
}
|
|
210
155
|
|
|
211
|
-
// src/storage/hooks/useElectronStorage.ts
|
|
212
|
-
var electronStorage = new
|
|
156
|
+
// src/common/storage/hooks/useElectronStorage.ts
|
|
157
|
+
var electronStorage = new chunkFCLS5R24_js.ElectronStorageAdapter();
|
|
213
158
|
function useElectronStorage(key, defaultValue) {
|
|
214
|
-
return useStorage(electronStorage, key, defaultValue);
|
|
159
|
+
return chunkOIRZXSYM_js.useStorage(electronStorage, key, defaultValue);
|
|
215
160
|
}
|
|
216
161
|
|
|
217
162
|
exports.MiniAppStorageAdapter = MiniAppStorageAdapter;
|
|
163
|
+
exports.storage_exports = storage_exports;
|
|
218
164
|
exports.useAsyncStorage = useAsyncStorage;
|
|
219
165
|
exports.useElectronStorage = useElectronStorage;
|
|
220
|
-
exports.useLocalStorage = useLocalStorage;
|
|
221
|
-
exports.useStorage = useStorage;
|
|
222
166
|
exports.useTaroStorage = useTaroStorage;
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
167
|
+
//# sourceMappingURL=chunk-VNWMRUY6.js.map
|
|
168
|
+
//# sourceMappingURL=chunk-VNWMRUY6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/storage/index.ts","../src/common/storage/adapters/miniapp-adapter.ts","../src/common/storage/hooks/useAsyncStorage.ts","../src/common/storage/hooks/useTaroStorage.ts","../src/common/storage/hooks/useElectronStorage.ts"],"names":["__export","ElectronStorageAdapter","ReactNativeStorageAdapter","WebStorageAdapter","useLocalStorage","useStorage"],"mappings":"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","file":"chunk-VNWMRUY6.js","sourcesContent":["/**\n * @package sa2kit/common/storage\n * 跨平台存储适配器与 Hooks\n */\nexport type { StorageAdapter, StorageChangeEvent } from './types';\nexport { WebStorageAdapter } from './adapters/web-adapter';\nexport { ReactNativeStorageAdapter } from './adapters/react-native-adapter';\nexport { MiniAppStorageAdapter } from './adapters/miniapp-adapter';\nexport { ElectronStorageAdapter } from './adapters/electron-adapter';\nexport * from './hooks';\n","/**\n * 小程序平台存储适配器 (wx.storage / Taro.storage)\n * 仅在小程序环境下加载和使用\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 延迟加载 Taro(仅在小程序环境)\nlet Taro: any = null;\nlet taroLoadPromise: Promise<void> | null = null;\nlet isMiniAppEnvironment: boolean | null = null;\n\n/**\n * 检测是否是小程序环境\n */\nfunction checkIsMiniApp(): boolean {\n if (isMiniAppEnvironment !== null) return isMiniAppEnvironment;\n\n // 服务端环境,不是小程序\n if (typeof window === 'undefined') {\n isMiniAppEnvironment = false;\n return false;\n }\n\n // 检测是否有小程序全局对象\n const globalObj = window as any;\n isMiniAppEnvironment = !!(\n globalObj.wx || // 微信小程序\n globalObj.my || // 支付宝小程序\n globalObj.swan || // 百度小程序\n globalObj.tt || // 抖音小程序\n globalObj.qq || // QQ 小程序\n globalObj.Taro // Taro 环境\n );\n\n return isMiniAppEnvironment;\n}\n\n/**\n * 加载 Taro(仅在小程序环境)\n */\nasync function loadTaro() {\n // 如果不是小程序环境,直接返回\n if (!checkIsMiniApp()) {\n return;\n }\n\n if (Taro) return;\n if (taroLoadPromise) return taroLoadPromise;\n\n taroLoadPromise = (async () => {\n try {\n // 使用动态导入,仅在小程序环境加载\n // 使用 Function 构造器来避免 TypeScript 在编译时解析模块\n const importTaro = new Function('return import(\"@tarojs/taro\")');\n const taroModule = await importTaro();\n Taro = taroModule.default || taroModule;\n } catch (e) {\n // Taro 不可用(非小程序环境或未安装)\n console.warn('[MiniAppStorage] Taro is not available. This is expected in non-MiniApp environments.');\n }\n })();\n\n return taroLoadPromise;\n}\n\nexport class MiniAppStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非小程序环境,直接返回 null\n if (!checkIsMiniApp()) {\n return null;\n }\n\n await loadTaro();\n if (!Taro) return null;\n\n try {\n const result = await Taro.getStorage({ key });\n return result.data;\n } catch (error: any) {\n // 如果 key 不存在,Taro 会抛出错误\n if (error.errMsg?.includes('data not found')) {\n return null;\n }\n console.error('[MiniAppStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.setStorage({ key, data: value });\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[MiniAppStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.removeStorage({ key });\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[MiniAppStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.clearStorage();\n } catch (error) {\n console.error('[MiniAppStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // 小程序没有原生的存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * React Native AsyncStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ReactNativeStorageAdapter } from '../adapters/react-native-adapter';\n\n// 创建单例适配器\nconst asyncStorage = new ReactNativeStorageAdapter();\n\n/**\n * React Native 的 AsyncStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useAsyncStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(asyncStorage, key, defaultValue);\n}\n\n","'use client';\n\n/**\n * 小程序 Taro Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { MiniAppStorageAdapter } from '../adapters/miniapp-adapter';\n\n// 创建单例适配器\nconst taroStorage = new MiniAppStorageAdapter();\n\n/**\n * 小程序的 Taro Storage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useTaroStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(taroStorage, key, defaultValue);\n}\n\n","'use client';\n\n/**\n * Electron 桌面端 Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ElectronStorageAdapter } from '../adapters/electron-adapter';\n\n// 创建单例适配器\nconst electronStorage = new ElectronStorageAdapter();\n\n/**\n * Electron 桌面端的 Storage Hook\n *\n * 在 Electron 渲染进程中使用 localStorage\n * 支持跨窗口同步\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n *\n * @example\n * ```tsx\n * const [token, setToken, removeToken] = useElectronStorage('auth-token', '')\n * ```\n */\nexport function useElectronStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(electronStorage, key, defaultValue);\n}\n\n"]}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
import { __export } from './chunk-MAI35PU6.mjs';
|
|
2
|
+
|
|
3
|
+
// src/common/logger/index.ts
|
|
4
|
+
var logger_exports = {};
|
|
5
|
+
__export(logger_exports, {
|
|
6
|
+
ConsoleLoggerAdapter: () => ConsoleLoggerAdapter,
|
|
7
|
+
LogLevel: () => LogLevel,
|
|
8
|
+
Logger: () => Logger,
|
|
9
|
+
createLogger: () => createLogger,
|
|
10
|
+
logger: () => logger
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
// src/common/logger/types.ts
|
|
2
14
|
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
3
15
|
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
4
16
|
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
@@ -8,7 +20,7 @@ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
|
8
20
|
return LogLevel2;
|
|
9
21
|
})(LogLevel || {});
|
|
10
22
|
|
|
11
|
-
// src/logger/console-adapter.ts
|
|
23
|
+
// src/common/logger/console-adapter.ts
|
|
12
24
|
var ConsoleLoggerAdapter = class {
|
|
13
25
|
constructor() {
|
|
14
26
|
this.colors = {
|
|
@@ -68,7 +80,7 @@ var ConsoleLoggerAdapter = class {
|
|
|
68
80
|
}
|
|
69
81
|
};
|
|
70
82
|
|
|
71
|
-
// src/logger/Logger.ts
|
|
83
|
+
// src/common/logger/Logger.ts
|
|
72
84
|
var Logger = class _Logger {
|
|
73
85
|
constructor(config, context) {
|
|
74
86
|
const isProduction = typeof process !== "undefined" ? process.env.NODE_ENV === "production" : false;
|
|
@@ -160,6 +172,6 @@ function createLogger(context, config) {
|
|
|
160
172
|
return new Logger(config, context);
|
|
161
173
|
}
|
|
162
174
|
|
|
163
|
-
export { ConsoleLoggerAdapter, LogLevel, Logger, createLogger, logger };
|
|
164
|
-
//# sourceMappingURL=chunk-
|
|
165
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
export { ConsoleLoggerAdapter, LogLevel, Logger, createLogger, logger, logger_exports };
|
|
176
|
+
//# sourceMappingURL=chunk-VYK4M2D6.mjs.map
|
|
177
|
+
//# sourceMappingURL=chunk-VYK4M2D6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/logger/index.ts","../src/common/logger/types.ts","../src/common/logger/console-adapter.ts","../src/common/logger/Logger.ts"],"names":["LogLevel"],"mappings":"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","file":"chunk-VYK4M2D6.mjs","sourcesContent":["/**\n * @package sa2kit/common/logger\n * 通用日志模块(2.0 common)\n */\nexport * from './types';\nexport * from './Logger';\nexport * from './console-adapter';\n","/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4, // 禁用所有日志\n}\n\n/**\n * 日志条目\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: any;\n context?: string;\n error?: Error;\n}\n\n/**\n * 日志适配器接口\n * 不同平台实现不同的日志输出方式\n */\nexport interface LoggerAdapter {\n /**\n * 输出日志\n */\n log(entry: LogEntry): void;\n\n /**\n * 批量输出日志(可选)\n */\n logBatch?(entries: LogEntry[]): void;\n}\n\n/**\n * 日志配置\n */\nexport interface LoggerConfig {\n /**\n * 最小日志级别\n * 只有大于等于此级别的日志才会输出\n */\n minLevel: LogLevel;\n\n /**\n * 是否启用时间戳\n */\n enableTimestamp?: boolean;\n\n /**\n * 是否启用上下文(模块名)\n */\n enableContext?: boolean;\n\n /**\n * 环境(development/production)\n */\n environment?: 'development' | 'production';\n\n /**\n * 自定义适配器\n */\n adapter?: LoggerAdapter;\n}\n\n","import type { LoggerAdapter, LogEntry, LogLevel } from './types';\n\n/**\n * 控制台日志适配器\n * 使用 console.info/warn/error 输出日志\n */\nexport class ConsoleLoggerAdapter implements LoggerAdapter {\n private readonly colors = {\n DEBUG: '\\x1b[36m', // Cyan\n INFO: '\\x1b[32m', // Green\n WARN: '\\x1b[33m', // Yellow\n ERROR: '\\x1b[31m', // Red\n RESET: '\\x1b[0m',\n };\n\n log(entry: LogEntry): void {\n const { level, message, timestamp, data, context, error } = entry;\n\n // 构建日志消息\n let logMessage = '';\n\n // 添加时间戳\n if (timestamp) {\n logMessage += '[' + (this.formatTimestamp(timestamp)) + '] ';\n }\n\n // 添加日志级别\n const levelName = this.getLevelName(level);\n logMessage += (levelName) + ': ';\n\n // 添加上下文\n if (context) {\n logMessage += '[' + (context) + '] ';\n }\n\n // 添加消息\n logMessage += message;\n\n // 根据日志级别选择输出方式\n switch (level) {\n case 0: // DEBUG\n console.debug(this.colorize(logMessage, 'DEBUG'), data || '');\n break;\n case 1: // INFO\n console.info(this.colorize(logMessage, 'INFO'), data || '');\n break;\n case 2: // WARN\n console.warn(this.colorize(logMessage, 'WARN'), data || '');\n break;\n case 3: // ERROR\n console.error(this.colorize(logMessage, 'ERROR'), data || '');\n if (error) {\n console.error(error);\n }\n break;\n }\n }\n\n private formatTimestamp(date: Date): string {\n return date.toISOString();\n }\n\n private getLevelName(level: LogLevel): string {\n const names = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'];\n return names[level] || 'UNKNOWN';\n }\n\n private colorize(message: string, level: keyof typeof this.colors): string {\n // 只在支持颜色的环境中使用颜色\n if (typeof process !== 'undefined' && process.stdout?.isTTY) {\n return (this.colors[level]) + (message) + (this.colors.RESET);\n }\n return message;\n }\n}\n\n","import type { LogLevel, LogEntry, LoggerConfig, LoggerAdapter } from './types';\nimport { ConsoleLoggerAdapter } from './console-adapter';\n\n/**\n * 统一日志管理类\n */\nexport class Logger {\n private config: Required<LoggerConfig>;\n private adapter: LoggerAdapter;\n private context?: string;\n\n constructor(config?: Partial<LoggerConfig>, context?: string) {\n const isProduction =\n typeof process !== 'undefined' ? process.env.NODE_ENV === 'production' : false;\n\n this.config = {\n minLevel: config?.minLevel ?? (isProduction ? 1 : 0), // INFO in prod, DEBUG in dev\n enableTimestamp: config?.enableTimestamp ?? true,\n enableContext: config?.enableContext ?? true,\n environment: config?.environment ?? (isProduction ? 'production' : 'development'),\n adapter: config?.adapter ?? new ConsoleLoggerAdapter(),\n };\n this.adapter = this.config.adapter;\n this.context = context;\n }\n\n /**\n * 创建带上下文的子 Logger\n */\n createChild(context: string): Logger {\n return new Logger(this.config, context);\n }\n\n /**\n * 调试日志\n */\n debug(message: string, data?: any): void {\n this.log(0, message, data); // LogLevel.DEBUG\n }\n\n /**\n * 信息日志\n */\n info(message: string, data?: any): void {\n this.log(1, message, data); // LogLevel.INFO\n }\n\n /**\n * 警告日志\n */\n warn(message: string, data?: any): void {\n this.log(2, message, data); // LogLevel.WARN\n }\n\n /**\n * 错误日志\n */\n error(message: string, error?: Error | any): void {\n this.log(\n 3, // LogLevel.ERROR\n message,\n error instanceof Error ? undefined : error,\n error instanceof Error ? error : undefined\n );\n }\n\n /**\n * 核心日志方法\n */\n private log(level: LogLevel, message: string, data?: any, error?: Error): void {\n // 检查日志级别\n if (level < this.config.minLevel) {\n return;\n }\n\n // 检查动态调试配置(仅在浏览器环境)\n if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n const loggerDebug = localStorage.getItem('logger-debug');\n // 如果明确设置为 false,则不输出(但 Error 级别始终输出)\n if (loggerDebug === 'false' && level < 3) {\n // level < ERROR\n return;\n }\n }\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: this.config.enableTimestamp ? new Date() : (undefined as any),\n data,\n context: this.config.enableContext ? this.context : undefined,\n error,\n };\n\n this.adapter.log(entry);\n }\n\n /**\n * 设置日志级别\n */\n setLevel(level: LogLevel): void {\n this.config.minLevel = level;\n }\n\n /**\n * 获取当前日志级别\n */\n getLevel(): LogLevel {\n return this.config.minLevel;\n }\n}\n\n/**\n * 默认全局 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带上下文的 Logger\n */\nexport function createLogger(context: string, config?: Partial<LoggerConfig>): Logger {\n return new Logger(config, context);\n}\n\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/storage/adapters/web-adapter.ts
|
|
1
|
+
// src/common/storage/adapters/web-adapter.ts
|
|
2
2
|
var isBrowser = typeof window !== "undefined" && typeof window.localStorage !== "undefined";
|
|
3
3
|
var WebStorageAdapter = class {
|
|
4
4
|
async getItem(key) {
|
|
@@ -82,5 +82,5 @@ var WebStorageAdapter = class {
|
|
|
82
82
|
};
|
|
83
83
|
|
|
84
84
|
export { WebStorageAdapter };
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-WB4H6ZUW.mjs.map
|
|
86
|
+
//# sourceMappingURL=chunk-WB4H6ZUW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/storage/adapters/web-adapter.ts"],"names":[],"mappings":";AASA,IAAM,YAAY,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,OAAO,YAAA,KAAiB,WAAA;AAE3E,IAAM,oBAAN,MAAkD;AAAA,EACvD,MAAM,QAAQ,GAAA,EAAqC;AAEjD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAA,GAAuC,GAAA,GAAO,IAAA,EAAM,KAAK,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AAEvD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAA,GAAuC,GAAA,GAAO,IAAA,EAAM,KAAK,CAAA;AACvE,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,GAAA,EAA4B;AAE3C,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAA,GAAwC,GAAA,GAAO,IAAA,EAAM,KAAK,CAAA;AACxE,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAE3B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,KAAA,EAAM;AAAA,IACrB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,kBAAkB,QAAA,EAAmE;AAEnF,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,MAAM;AAAA,MAAC,CAAA;AAAA,IAChB;AAGA,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAoB;AAC9C,MAAA,IAAI,EAAE,GAAA,EAAK;AACT,QAAA,QAAA,CAAS,CAAA,CAAE,GAAA,EAAK,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC5B;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAa;AACtC,MAAA,MAAM,WAAA,GAAc,CAAA;AACpB,MAAA,QAAA,CAAS,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,kBAAkB,CAAA;AACrD,IAAA,MAAA,CAAO,gBAAA,CAAiB,wBAAwB,iBAAiB,CAAA;AAGjE,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,kBAAkB,CAAA;AACxD,MAAA,MAAA,CAAO,mBAAA,CAAoB,wBAAwB,iBAAiB,CAAA;AAAA,IACtE,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,KAAa,KAAA,EAA4B;AAEtD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,aAAA;AAAA,MACL,IAAI,YAAY,sBAAA,EAAwB;AAAA,QACtC,MAAA,EAAQ,EAAE,GAAA,EAAK,KAAA;AAAM,OACtB;AAAA,KACH;AAAA,EACF;AACF","file":"chunk-WB4H6ZUW.mjs","sourcesContent":["/**\n * Web 平台存储适配器 (localStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查是否在浏览器环境中\n */\nconst isBrowser = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class WebStorageAdapter implements StorageAdapter {\n async getItem(key: string): Promise<string | null> {\n // SSR 环境下返回 null\n if (!isBrowser) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[WebStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.error('[WebStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.error('[WebStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.clear();\n } catch (error) {\n console.error('[WebStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // SSR 环境下返回空函数\n if (!isBrowser) {\n return () => {};\n }\n\n // 监听 storage 事件(跨标签页)\n const handleStorageEvent = (e: StorageEvent) => {\n if (e.key) {\n callback(e.key, e.newValue);\n }\n };\n\n // 监听自定义事件(同标签页)\n const handleCustomEvent = (e: Event) => {\n const customEvent = e as CustomEvent;\n callback(customEvent.detail.key, customEvent.detail.value);\n };\n\n window.addEventListener('storage', handleStorageEvent);\n window.addEventListener('local-storage-change', handleCustomEvent);\n\n // 返回清理函数\n return () => {\n window.removeEventListener('storage', handleStorageEvent);\n window.removeEventListener('local-storage-change', handleCustomEvent);\n };\n }\n\n /**\n * 触发自定义事件,通知同标签页的其他组件\n */\n dispatchChange(key: string, value: string | null): void {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent('local-storage-change', {\n detail: { key, value },\n })\n );\n }\n}\n\n"]}
|