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.
Files changed (712) hide show
  1. package/README.md +5 -5
  2. package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
  3. package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
  4. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
  5. package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
  6. package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
  7. package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
  8. package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
  9. package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
  10. package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
  11. package/dist/chunk-2234T4A6.js.map +1 -0
  12. package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
  13. package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
  14. package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
  15. package/dist/chunk-375C7WL7.js.map +1 -0
  16. package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
  17. package/dist/chunk-3J24Z4MB.js.map +1 -0
  18. package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
  19. package/dist/chunk-3QCATFQV.js.map +1 -0
  20. package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
  21. package/dist/chunk-3R6JHA6D.js.map +1 -0
  22. package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
  23. package/dist/chunk-4OXKHV7J.js.map +1 -0
  24. package/dist/chunk-4PJM4752.js +4 -0
  25. package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
  26. package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
  27. package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
  28. package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
  29. package/dist/chunk-6HL54I2B.js.map +1 -0
  30. package/dist/chunk-6V2MIQPF.mjs +77 -0
  31. package/dist/chunk-6V2MIQPF.mjs.map +1 -0
  32. package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
  33. package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
  34. package/dist/chunk-7PMT4L4I.js +324 -0
  35. package/dist/chunk-7PMT4L4I.js.map +1 -0
  36. package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
  37. package/dist/chunk-7VVZHFEM.js.map +1 -0
  38. package/dist/chunk-AWHGIKTQ.js +56 -0
  39. package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
  40. package/dist/chunk-B3GYF6TY.js +37 -0
  41. package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
  42. package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
  43. package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
  44. package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
  45. package/dist/chunk-BTW3SWQN.mjs.map +1 -0
  46. package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
  47. package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
  48. package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
  49. package/dist/chunk-DO6QYAZV.mjs.map +1 -0
  50. package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
  51. package/dist/chunk-DTR53LQO.mjs.map +1 -0
  52. package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
  53. package/dist/chunk-EI2S4XDG.mjs.map +1 -0
  54. package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
  55. package/dist/chunk-EOZHUI46.js.map +1 -0
  56. package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
  57. package/dist/chunk-F2BZIU67.js.map +1 -0
  58. package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
  59. package/dist/chunk-F2TEJSCP.js.map +1 -0
  60. package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
  61. package/dist/chunk-FCLS5R24.js.map +1 -0
  62. package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
  63. package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
  64. package/dist/chunk-FY2X3LYR.mjs +3 -0
  65. package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
  66. package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
  67. package/dist/chunk-GS4SAW25.mjs.map +1 -0
  68. package/dist/chunk-H56ICWUO.js +321 -0
  69. package/dist/chunk-H56ICWUO.js.map +1 -0
  70. package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
  71. package/dist/chunk-HG34SGMN.mjs.map +1 -0
  72. package/dist/chunk-HL4H2HF6.js +279 -0
  73. package/dist/chunk-HL4H2HF6.js.map +1 -0
  74. package/dist/chunk-IJIQUMAK.mjs +272 -0
  75. package/dist/chunk-IJIQUMAK.mjs.map +1 -0
  76. package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
  77. package/dist/chunk-KEZFTDZT.mjs.map +1 -0
  78. package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
  79. package/dist/chunk-KHOVC2KL.js.map +1 -0
  80. package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
  81. package/dist/chunk-KRBSTLKC.js.map +1 -0
  82. package/dist/chunk-KVYHCGRY.js +2011 -0
  83. package/dist/chunk-KVYHCGRY.js.map +1 -0
  84. package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
  85. package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
  86. package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
  87. package/dist/chunk-MJ6XJGAL.js.map +1 -0
  88. package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
  89. package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
  90. package/dist/chunk-MMDSZIXD.mjs +286 -0
  91. package/dist/chunk-MMDSZIXD.mjs.map +1 -0
  92. package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
  93. package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
  94. package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
  95. package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
  96. package/dist/chunk-OIRZXSYM.js +80 -0
  97. package/dist/chunk-OIRZXSYM.js.map +1 -0
  98. package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
  99. package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
  100. package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
  101. package/dist/chunk-PLIG5257.mjs.map +1 -0
  102. package/dist/chunk-QIF4MG5V.mjs +283 -0
  103. package/dist/chunk-QIF4MG5V.mjs.map +1 -0
  104. package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
  105. package/dist/chunk-RHECN4E2.mjs.map +1 -0
  106. package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
  107. package/dist/chunk-RHHTZTIN.mjs.map +1 -0
  108. package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
  109. package/dist/chunk-RRQ2X26Z.js.map +1 -0
  110. package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
  111. package/dist/chunk-RST2T54Y.js.map +1 -0
  112. package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
  113. package/dist/chunk-RVNQI6BI.js.map +1 -0
  114. package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
  115. package/dist/chunk-S3K4LTRI.mjs.map +1 -0
  116. package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
  117. package/dist/chunk-SWZ5XNF6.js.map +1 -0
  118. package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
  119. package/dist/chunk-U7HNBCBS.js.map +1 -0
  120. package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
  121. package/dist/chunk-UJS3YSD3.mjs.map +1 -0
  122. package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
  123. package/dist/chunk-UJUWDF7M.mjs.map +1 -0
  124. package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
  125. package/dist/chunk-UR5NENGE.js.map +1 -0
  126. package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
  127. package/dist/chunk-V7HGBDCB.mjs.map +1 -0
  128. package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
  129. package/dist/chunk-V7RLIZMN.js.map +1 -0
  130. package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
  131. package/dist/chunk-VCKXK6V5.js.map +1 -0
  132. package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
  133. package/dist/chunk-VIEXDTNF.mjs.map +1 -0
  134. package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
  135. package/dist/chunk-VN2DULIA.js.map +1 -0
  136. package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
  137. package/dist/chunk-VNWMRUY6.js.map +1 -0
  138. package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
  139. package/dist/chunk-VYK4M2D6.mjs.map +1 -0
  140. package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
  141. package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
  142. package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
  143. package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
  144. package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
  145. package/dist/chunk-X5GINUGI.mjs.map +1 -0
  146. package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
  147. package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
  148. package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
  149. package/dist/chunk-XE5RGZ3B.js.map +1 -0
  150. package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
  151. package/dist/chunk-XNTIMVSL.mjs.map +1 -0
  152. package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
  153. package/dist/chunk-Y7WHUKJF.js.map +1 -0
  154. package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
  155. package/dist/chunk-YIRPPMCN.mjs.map +1 -0
  156. package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
  157. package/dist/chunk-Z2SNB5LJ.js.map +1 -0
  158. package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
  159. package/dist/chunk-ZOP7YIVX.js.map +1 -0
  160. package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
  161. package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
  162. package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
  163. package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
  164. package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
  165. package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
  166. package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
  167. package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
  168. package/dist/common/ai/llm/electron/index.js +67 -0
  169. package/dist/common/ai/llm/electron/index.mjs +10 -0
  170. package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
  171. package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
  172. package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
  173. package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
  174. package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
  175. package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
  176. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
  177. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
  178. package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
  179. package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
  180. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
  181. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
  182. package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
  183. package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
  184. package/dist/common/ai/llm/ui/electron/index.js +22 -0
  185. package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
  186. package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
  187. package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
  188. package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
  189. package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
  190. package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
  191. package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
  192. package/dist/common/ai/llm/ui/rn/index.js +14 -0
  193. package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
  194. package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
  195. package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
  196. package/dist/common/ai/llm/ui/web/index.js +21 -0
  197. package/dist/common/ai/llm/ui/web/index.mjs +8 -0
  198. package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
  199. package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
  200. package/dist/common/ai/llm/web/index.js +66 -0
  201. package/dist/common/ai/llm/web/index.mjs +9 -0
  202. package/dist/{analytics → common/analytics}/index.d.mts +1 -1
  203. package/dist/{analytics → common/analytics}/index.d.ts +1 -1
  204. package/dist/{analytics → common/analytics}/index.js +79 -79
  205. package/dist/{analytics → common/analytics}/index.mjs +3 -3
  206. package/dist/{analytics → common/analytics}/server/index.js +2 -2
  207. package/dist/common/analytics/server/index.js.map +1 -0
  208. package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
  209. package/dist/common/analytics/server/index.mjs.map +1 -0
  210. package/dist/{api → common/api}/index.d.mts +3 -3
  211. package/dist/{api → common/api}/index.d.ts +3 -3
  212. package/dist/common/api/index.js +21 -0
  213. package/dist/common/api/index.mjs +4 -0
  214. package/dist/common/auth/components/index.d.mts +9 -9
  215. package/dist/common/auth/components/index.d.ts +9 -9
  216. package/dist/common/auth/index.js +6 -6
  217. package/dist/common/auth/index.mjs +2 -2
  218. package/dist/common/auth/react/index.d.mts +3 -3
  219. package/dist/common/auth/react/index.d.ts +3 -3
  220. package/dist/common/auth/rn/index.d.mts +2 -2
  221. package/dist/common/auth/rn/index.d.ts +2 -2
  222. package/dist/common/auth/rn/index.js +2 -2
  223. package/dist/common/auth/rn/index.js.map +1 -1
  224. package/dist/common/auth/rn/index.mjs +1 -1
  225. package/dist/common/auth/rn/index.mjs.map +1 -1
  226. package/dist/common/components/index.d.mts +4 -0
  227. package/dist/common/components/index.d.ts +4 -0
  228. package/dist/common/components/index.js +414 -0
  229. package/dist/common/components/index.mjs +9 -0
  230. package/dist/{config → common/config}/index.d.mts +1 -1
  231. package/dist/{config → common/config}/index.d.ts +1 -1
  232. package/dist/common/config/index.js +21 -0
  233. package/dist/common/config/index.mjs +4 -0
  234. package/dist/{config → common/config}/server/index.js +5 -5
  235. package/dist/common/config/server/index.js.map +1 -0
  236. package/dist/{config → common/config}/server/index.mjs +5 -5
  237. package/dist/common/config/server/index.mjs.map +1 -0
  238. package/dist/common/export/index.d.mts +2 -2
  239. package/dist/common/export/index.d.ts +2 -2
  240. package/dist/common/export/index.js +67 -67
  241. package/dist/common/export/index.mjs +3 -3
  242. package/dist/common/export/server/index.d.mts +2 -2
  243. package/dist/common/export/server/index.d.ts +2 -2
  244. package/dist/common/export/server/index.js +76 -48
  245. package/dist/common/export/server/index.mjs +3 -3
  246. package/dist/common/file/index.d.mts +2 -2
  247. package/dist/common/file/index.d.ts +2 -2
  248. package/dist/common/file/index.js +27 -27
  249. package/dist/common/file/index.mjs +5 -5
  250. package/dist/common/file/server/index.d.mts +2 -2
  251. package/dist/common/file/server/index.d.ts +2 -2
  252. package/dist/common/file/server/index.js +58 -50
  253. package/dist/common/file/server/index.mjs +8 -8
  254. package/dist/{i18n → common/i18n}/index.d.mts +1 -1
  255. package/dist/{i18n → common/i18n}/index.d.ts +1 -1
  256. package/dist/{i18n → common/i18n}/index.js +18 -18
  257. package/dist/{i18n → common/i18n}/index.mjs +2 -2
  258. package/dist/common/imageCrop/index.d.mts +2 -0
  259. package/dist/common/imageCrop/index.d.ts +2 -0
  260. package/dist/common/imageCrop/index.js +61 -0
  261. package/dist/common/imageCrop/index.mjs +4 -0
  262. package/dist/common/index.d.mts +16 -16
  263. package/dist/common/index.d.ts +16 -16
  264. package/dist/common/index.js +75 -67
  265. package/dist/common/index.mjs +26 -26
  266. package/dist/common/logger/index.d.mts +1 -1
  267. package/dist/common/logger/index.d.ts +1 -1
  268. package/dist/common/logger/index.js +6 -7
  269. package/dist/common/logger/index.mjs +1 -2
  270. package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
  271. package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
  272. package/dist/{ossFile → common/ossFile}/index.js +26 -26
  273. package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
  274. package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
  275. package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
  276. package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
  277. package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
  278. package/dist/common/platform/index.js +8 -8
  279. package/dist/common/platform/index.mjs +4 -4
  280. package/dist/common/request/index.d.mts +1 -1
  281. package/dist/common/request/index.d.ts +1 -1
  282. package/dist/common/request/index.js +5 -6
  283. package/dist/common/request/index.mjs +2 -3
  284. package/dist/common/storage/index.d.mts +1 -1
  285. package/dist/common/storage/index.d.ts +1 -1
  286. package/dist/common/storage/index.js +17 -17
  287. package/dist/common/storage/index.mjs +5 -5
  288. package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
  289. package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
  290. package/dist/{universalExport → common/universalExport}/index.js +67 -67
  291. package/dist/common/universalExport/index.mjs +5 -0
  292. package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
  293. package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
  294. package/dist/common/universalExport/server/index.js +151 -0
  295. package/dist/common/universalExport/server/index.mjs +6 -0
  296. package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
  297. package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
  298. package/dist/{universalFile → common/universalFile}/index.js +63 -63
  299. package/dist/common/universalFile/index.js.map +1 -0
  300. package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
  301. package/dist/common/universalFile/index.mjs.map +1 -0
  302. package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
  303. package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
  304. package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
  305. package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
  306. package/dist/common/utils/index.d.mts +1 -1
  307. package/dist/common/utils/index.d.ts +1 -1
  308. package/dist/common/utils/index.js +11 -12
  309. package/dist/common/utils/index.mjs +2 -3
  310. package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
  311. package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
  312. package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
  313. package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
  314. package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
  315. package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
  316. package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
  317. package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
  318. package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
  319. package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
  320. package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
  321. package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
  322. package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
  323. package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
  324. package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
  325. package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
  326. package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
  327. package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
  328. package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
  329. package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
  330. package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
  331. package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
  332. package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
  333. package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
  334. package/package.json +292 -312
  335. package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
  336. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
  337. package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
  338. package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
  339. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  340. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  341. package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
  342. package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
  343. package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
  344. package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
  345. package/dist/ai/llm/electron/index.js +0 -66
  346. package/dist/ai/llm/electron/index.mjs +0 -9
  347. package/dist/ai/llm/ui/electron/index.d.mts +0 -5
  348. package/dist/ai/llm/ui/electron/index.d.ts +0 -5
  349. package/dist/ai/llm/ui/electron/index.js +0 -21
  350. package/dist/ai/llm/ui/electron/index.mjs +0 -8
  351. package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
  352. package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
  353. package/dist/ai/llm/ui/miniapp/index.js +0 -14
  354. package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
  355. package/dist/ai/llm/ui/rn/index.d.mts +0 -9
  356. package/dist/ai/llm/ui/rn/index.d.ts +0 -9
  357. package/dist/ai/llm/ui/rn/index.js +0 -14
  358. package/dist/ai/llm/ui/rn/index.mjs +0 -5
  359. package/dist/ai/llm/ui/web/index.js +0 -20
  360. package/dist/ai/llm/ui/web/index.mjs +0 -7
  361. package/dist/ai/llm/web/index.js +0 -65
  362. package/dist/ai/llm/web/index.mjs +0 -8
  363. package/dist/analytics/server/index.js.map +0 -1
  364. package/dist/analytics/server/index.mjs.map +0 -1
  365. package/dist/api/index.js +0 -21
  366. package/dist/api/index.mjs +0 -4
  367. package/dist/audioDetection/index.d.mts +0 -449
  368. package/dist/audioDetection/index.d.ts +0 -449
  369. package/dist/audioDetection/index.js +0 -1244
  370. package/dist/audioDetection/index.js.map +0 -1
  371. package/dist/audioDetection/index.mjs +0 -1227
  372. package/dist/audioDetection/index.mjs.map +0 -1
  373. package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
  374. package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
  375. package/dist/business/index.d.mts +0 -2
  376. package/dist/business/index.d.ts +0 -2
  377. package/dist/business/index.js +0 -581
  378. package/dist/business/index.js.map +0 -1
  379. package/dist/business/index.mjs +0 -575
  380. package/dist/business/index.mjs.map +0 -1
  381. package/dist/calendar/index.d.mts +0 -1325
  382. package/dist/calendar/index.d.ts +0 -1325
  383. package/dist/calendar/index.js +0 -5964
  384. package/dist/calendar/index.js.map +0 -1
  385. package/dist/calendar/index.mjs +0 -5878
  386. package/dist/calendar/index.mjs.map +0 -1
  387. package/dist/calendar/routes/index.d.mts +0 -191
  388. package/dist/calendar/routes/index.d.ts +0 -191
  389. package/dist/calendar/routes/index.js +0 -844
  390. package/dist/calendar/routes/index.js.map +0 -1
  391. package/dist/calendar/routes/index.mjs +0 -826
  392. package/dist/calendar/routes/index.mjs.map +0 -1
  393. package/dist/chunk-25OFOKNF.js.map +0 -1
  394. package/dist/chunk-2Y7BKFKZ.js +0 -37
  395. package/dist/chunk-3CSCIRQY.js +0 -17
  396. package/dist/chunk-3CSCIRQY.js.map +0 -1
  397. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  398. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  399. package/dist/chunk-4FDUURSD.js +0 -22
  400. package/dist/chunk-4FDUURSD.js.map +0 -1
  401. package/dist/chunk-4OOANEJV.mjs.map +0 -1
  402. package/dist/chunk-4WBCWJSN.js.map +0 -1
  403. package/dist/chunk-5GBDDXYL.mjs +0 -23
  404. package/dist/chunk-5GBDDXYL.mjs.map +0 -1
  405. package/dist/chunk-5USIS3UM.js +0 -4
  406. package/dist/chunk-6PMXAK7F.js.map +0 -1
  407. package/dist/chunk-7B5SI4OF.mjs +0 -15
  408. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  409. package/dist/chunk-ACUFEDVQ.js.map +0 -1
  410. package/dist/chunk-AQPU2AXH.js.map +0 -1
  411. package/dist/chunk-ATUCZXJY.js.map +0 -1
  412. package/dist/chunk-BCE6RUZV.js.map +0 -1
  413. package/dist/chunk-BIHYZA67.mjs.map +0 -1
  414. package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
  415. package/dist/chunk-CAYOQDBR.js.map +0 -1
  416. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  417. package/dist/chunk-CX2GHCAI.mjs.map +0 -1
  418. package/dist/chunk-DIF5VRL3.mjs.map +0 -1
  419. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  420. package/dist/chunk-FCEBAWN6.js +0 -18
  421. package/dist/chunk-FCEBAWN6.js.map +0 -1
  422. package/dist/chunk-FHIE5MTC.mjs +0 -541
  423. package/dist/chunk-FHIE5MTC.mjs.map +0 -1
  424. package/dist/chunk-FHLTPXAR.js +0 -56
  425. package/dist/chunk-FIUBFREP.mjs.map +0 -1
  426. package/dist/chunk-FXQOXLDE.js.map +0 -1
  427. package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
  428. package/dist/chunk-G6NSKJMH.js.map +0 -1
  429. package/dist/chunk-G7UBMCUT.mjs.map +0 -1
  430. package/dist/chunk-GSNGCENJ.js.map +0 -1
  431. package/dist/chunk-GWNBVGDT.mjs.map +0 -1
  432. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  433. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  434. package/dist/chunk-HJZHQW5R.mjs.map +0 -1
  435. package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
  436. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  437. package/dist/chunk-KQ643L7Z.js.map +0 -1
  438. package/dist/chunk-LFB5EIIM.mjs +0 -31
  439. package/dist/chunk-LFB5EIIM.mjs.map +0 -1
  440. package/dist/chunk-MBANGIG3.mjs.map +0 -1
  441. package/dist/chunk-NCRP2YHY.mjs.map +0 -1
  442. package/dist/chunk-NDGHXVGS.js +0 -25
  443. package/dist/chunk-NDGHXVGS.js.map +0 -1
  444. package/dist/chunk-NDPO5OMC.js +0 -563
  445. package/dist/chunk-NDPO5OMC.js.map +0 -1
  446. package/dist/chunk-PBI7FKMB.js.map +0 -1
  447. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  448. package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
  449. package/dist/chunk-QSKLQX6H.js.map +0 -1
  450. package/dist/chunk-QXAOXBVB.mjs.map +0 -1
  451. package/dist/chunk-R2DXTE2L.js.map +0 -1
  452. package/dist/chunk-RTD2WHQQ.mjs +0 -16
  453. package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
  454. package/dist/chunk-S6YSGVWD.js.map +0 -1
  455. package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
  456. package/dist/chunk-SLKOEYFH.js.map +0 -1
  457. package/dist/chunk-TC5YU6A4.mjs.map +0 -1
  458. package/dist/chunk-UCOE6SET.js.map +0 -1
  459. package/dist/chunk-UIYKZ73N.js +0 -36
  460. package/dist/chunk-UIYKZ73N.js.map +0 -1
  461. package/dist/chunk-V7EVKD5G.mjs.map +0 -1
  462. package/dist/chunk-VMTEDX5H.js.map +0 -1
  463. package/dist/chunk-VRN76M56.mjs +0 -3
  464. package/dist/chunk-VXFUXZN5.mjs +0 -20
  465. package/dist/chunk-VXFUXZN5.mjs.map +0 -1
  466. package/dist/chunk-WEEXCPSE.mjs.map +0 -1
  467. package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
  468. package/dist/chunk-WW4GE6CZ.js.map +0 -1
  469. package/dist/chunk-XJ7ZAGC5.js.map +0 -1
  470. package/dist/chunk-XUS5ACKR.mjs.map +0 -1
  471. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  472. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  473. package/dist/chunk-ZLYPALF3.js.map +0 -1
  474. package/dist/chunk-ZM2SZJTZ.js.map +0 -1
  475. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  476. package/dist/chunk-ZWQJSZEY.js.map +0 -1
  477. package/dist/components/index.js +0 -2516
  478. package/dist/components/index.js.map +0 -1
  479. package/dist/components/index.mjs.map +0 -1
  480. package/dist/config/index.js +0 -21
  481. package/dist/config/index.mjs +0 -4
  482. package/dist/config/server/index.js.map +0 -1
  483. package/dist/config/server/index.mjs.map +0 -1
  484. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  485. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  486. package/dist/festivalCard/index.d.mts +0 -76
  487. package/dist/festivalCard/index.d.ts +0 -76
  488. package/dist/festivalCard/index.js +0 -1492
  489. package/dist/festivalCard/index.js.map +0 -1
  490. package/dist/festivalCard/index.mjs +0 -1475
  491. package/dist/festivalCard/index.mjs.map +0 -1
  492. package/dist/festivalCard/routes/index.d.mts +0 -42
  493. package/dist/festivalCard/routes/index.d.ts +0 -42
  494. package/dist/festivalCard/routes/index.js +0 -361
  495. package/dist/festivalCard/routes/index.js.map +0 -1
  496. package/dist/festivalCard/routes/index.mjs +0 -356
  497. package/dist/festivalCard/routes/index.mjs.map +0 -1
  498. package/dist/festivalCard/server/index.d.mts +0 -120
  499. package/dist/festivalCard/server/index.d.ts +0 -120
  500. package/dist/festivalCard/server/index.js +0 -272
  501. package/dist/festivalCard/server/index.js.map +0 -1
  502. package/dist/festivalCard/server/index.mjs +0 -265
  503. package/dist/festivalCard/server/index.mjs.map +0 -1
  504. package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
  505. package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
  506. package/dist/imageCrop/index.js.map +0 -1
  507. package/dist/imageCrop/index.mjs.map +0 -1
  508. package/dist/index-Bjem5rWn.d.mts +0 -17
  509. package/dist/index-C5U-2hJq.d.ts +0 -23
  510. package/dist/index-CifSBBP2.d.ts +0 -17
  511. package/dist/index-D0K4ehme.d.mts +0 -20
  512. package/dist/index-DLnfKN-a.d.mts +0 -23
  513. package/dist/index-DSel44Ke.d.mts +0 -93
  514. package/dist/index-DSel44Ke.d.ts +0 -93
  515. package/dist/index-DZ5iJtNO.d.mts +0 -102
  516. package/dist/index-DZ5iJtNO.d.ts +0 -102
  517. package/dist/index-Da7qdkgW.d.ts +0 -20
  518. package/dist/index-DrPcMJPc.d.mts +0 -250
  519. package/dist/index-DrPcMJPc.d.ts +0 -250
  520. package/dist/index-oLUvfqT8.d.ts +0 -20
  521. package/dist/index-pe38RDgC.d.mts +0 -20
  522. package/dist/index.d.mts +0 -11611
  523. package/dist/index.d.ts +0 -11611
  524. package/dist/index.js +0 -17230
  525. package/dist/index.js.map +0 -1
  526. package/dist/index.mjs +0 -16954
  527. package/dist/index.mjs.map +0 -1
  528. package/dist/logger/index.js +0 -29
  529. package/dist/logger/index.mjs +0 -4
  530. package/dist/mikuContest/ui/web/index.d.mts +0 -2
  531. package/dist/mikuContest/ui/web/index.d.ts +0 -2
  532. package/dist/mikuContest/ui/web/index.js +0 -353
  533. package/dist/mikuContest/ui/web/index.js.map +0 -1
  534. package/dist/mikuContest/ui/web/index.mjs +0 -343
  535. package/dist/mikuContest/ui/web/index.mjs.map +0 -1
  536. package/dist/mikuFireworks3D/index.d.mts +0 -268
  537. package/dist/mikuFireworks3D/index.d.ts +0 -268
  538. package/dist/mikuFireworks3D/index.js +0 -1267
  539. package/dist/mikuFireworks3D/index.js.map +0 -1
  540. package/dist/mikuFireworks3D/index.mjs +0 -1228
  541. package/dist/mikuFireworks3D/index.mjs.map +0 -1
  542. package/dist/mikuFusionGame/index.d.mts +0 -117
  543. package/dist/mikuFusionGame/index.d.ts +0 -117
  544. package/dist/mikuFusionGame/index.js +0 -1208
  545. package/dist/mikuFusionGame/index.js.map +0 -1
  546. package/dist/mikuFusionGame/index.mjs +0 -1195
  547. package/dist/mikuFusionGame/index.mjs.map +0 -1
  548. package/dist/mmd/admin/index.d.mts +0 -487
  549. package/dist/mmd/admin/index.d.ts +0 -487
  550. package/dist/mmd/admin/index.js +0 -1058
  551. package/dist/mmd/admin/index.js.map +0 -1
  552. package/dist/mmd/admin/index.mjs +0 -1027
  553. package/dist/mmd/admin/index.mjs.map +0 -1
  554. package/dist/mmd/index.d.mts +0 -2467
  555. package/dist/mmd/index.d.ts +0 -2467
  556. package/dist/mmd/index.js +0 -10119
  557. package/dist/mmd/index.js.map +0 -1
  558. package/dist/mmd/index.mjs +0 -10028
  559. package/dist/mmd/index.mjs.map +0 -1
  560. package/dist/mmd/server/index.d.mts +0 -139
  561. package/dist/mmd/server/index.d.ts +0 -139
  562. package/dist/mmd/server/index.js +0 -424
  563. package/dist/mmd/server/index.js.map +0 -1
  564. package/dist/mmd/server/index.mjs +0 -404
  565. package/dist/mmd/server/index.mjs.map +0 -1
  566. package/dist/music/index.d.mts +0 -74
  567. package/dist/music/index.d.ts +0 -74
  568. package/dist/music/index.js +0 -830
  569. package/dist/music/index.js.map +0 -1
  570. package/dist/music/index.mjs +0 -809
  571. package/dist/music/index.mjs.map +0 -1
  572. package/dist/music/server/index.d.mts +0 -1
  573. package/dist/music/server/index.d.ts +0 -1
  574. package/dist/music/server/index.js +0 -194
  575. package/dist/music/server/index.js.map +0 -1
  576. package/dist/music/server/index.mjs +0 -182
  577. package/dist/music/server/index.mjs.map +0 -1
  578. package/dist/navigation/index.d.mts +0 -93
  579. package/dist/navigation/index.d.ts +0 -93
  580. package/dist/navigation/index.js +0 -453
  581. package/dist/navigation/index.js.map +0 -1
  582. package/dist/navigation/index.mjs +0 -443
  583. package/dist/navigation/index.mjs.map +0 -1
  584. package/dist/portfolio/index.d.mts +0 -66
  585. package/dist/portfolio/index.d.ts +0 -66
  586. package/dist/portfolio/index.js +0 -736
  587. package/dist/portfolio/index.js.map +0 -1
  588. package/dist/portfolio/index.mjs +0 -724
  589. package/dist/portfolio/index.mjs.map +0 -1
  590. package/dist/qqbot/server/index.d.mts +0 -216
  591. package/dist/qqbot/server/index.d.ts +0 -216
  592. package/dist/qqbot/server/index.js +0 -394
  593. package/dist/qqbot/server/index.js.map +0 -1
  594. package/dist/qqbot/server/index.mjs +0 -385
  595. package/dist/qqbot/server/index.mjs.map +0 -1
  596. package/dist/qqbot/ui/web/index.d.mts +0 -10
  597. package/dist/qqbot/ui/web/index.d.ts +0 -10
  598. package/dist/qqbot/ui/web/index.js +0 -105
  599. package/dist/qqbot/ui/web/index.js.map +0 -1
  600. package/dist/qqbot/ui/web/index.mjs +0 -99
  601. package/dist/qqbot/ui/web/index.mjs.map +0 -1
  602. package/dist/request/index.js +0 -22
  603. package/dist/request/index.mjs +0 -5
  604. package/dist/screenReceiver/index.d.mts +0 -86
  605. package/dist/screenReceiver/index.d.ts +0 -86
  606. package/dist/screenReceiver/index.js +0 -281
  607. package/dist/screenReceiver/index.js.map +0 -1
  608. package/dist/screenReceiver/index.mjs +0 -273
  609. package/dist/screenReceiver/index.mjs.map +0 -1
  610. package/dist/storage/index.js +0 -48
  611. package/dist/storage/index.mjs +0 -7
  612. package/dist/testYourself/admin/index.d.mts +0 -58
  613. package/dist/testYourself/admin/index.d.ts +0 -58
  614. package/dist/testYourself/admin/index.js +0 -1009
  615. package/dist/testYourself/admin/index.js.map +0 -1
  616. package/dist/testYourself/admin/index.mjs +0 -1002
  617. package/dist/testYourself/admin/index.mjs.map +0 -1
  618. package/dist/testYourself/index.d.mts +0 -53
  619. package/dist/testYourself/index.d.ts +0 -53
  620. package/dist/testYourself/index.js +0 -2551
  621. package/dist/testYourself/index.js.map +0 -1
  622. package/dist/testYourself/index.mjs +0 -2531
  623. package/dist/testYourself/index.mjs.map +0 -1
  624. package/dist/testYourself/server/index.d.mts +0 -1029
  625. package/dist/testYourself/server/index.d.ts +0 -1029
  626. package/dist/testYourself/server/index.js +0 -825
  627. package/dist/testYourself/server/index.js.map +0 -1
  628. package/dist/testYourself/server/index.mjs +0 -816
  629. package/dist/testYourself/server/index.mjs.map +0 -1
  630. package/dist/types-B6B210gX.d.mts +0 -270
  631. package/dist/types-B6B210gX.d.ts +0 -270
  632. package/dist/types-Bdnte5EN.d.mts +0 -292
  633. package/dist/types-Cs0CLvrH.d.mts +0 -70
  634. package/dist/types-Cs0CLvrH.d.ts +0 -70
  635. package/dist/types-HorDyIRv.d.mts +0 -303
  636. package/dist/types-HorDyIRv.d.ts +0 -303
  637. package/dist/types-_rFX1atk.d.ts +0 -292
  638. package/dist/universalExport/index.mjs +0 -5
  639. package/dist/universalExport/server/index.js +0 -123
  640. package/dist/universalExport/server/index.mjs +0 -6
  641. package/dist/universalFile/index.js.map +0 -1
  642. package/dist/universalFile/index.mjs.map +0 -1
  643. package/dist/universalFile/server/index.js.map +0 -1
  644. package/dist/universalFile/server/index.mjs.map +0 -1
  645. package/dist/utils/index.js +0 -46
  646. package/dist/utils/index.js.map +0 -1
  647. package/dist/utils/index.mjs +0 -5
  648. package/dist/utils/index.mjs.map +0 -1
  649. package/dist/vocaloidBooth/index.d.mts +0 -64
  650. package/dist/vocaloidBooth/index.d.ts +0 -64
  651. package/dist/vocaloidBooth/index.js +0 -376
  652. package/dist/vocaloidBooth/index.js.map +0 -1
  653. package/dist/vocaloidBooth/index.mjs +0 -362
  654. package/dist/vocaloidBooth/index.mjs.map +0 -1
  655. package/dist/vocaloidBooth/server/index.d.mts +0 -111
  656. package/dist/vocaloidBooth/server/index.d.ts +0 -111
  657. package/dist/vocaloidBooth/server/index.js +0 -247
  658. package/dist/vocaloidBooth/server/index.js.map +0 -1
  659. package/dist/vocaloidBooth/server/index.mjs +0 -237
  660. package/dist/vocaloidBooth/server/index.mjs.map +0 -1
  661. package/dist/vocaloidBooth/web/index.d.mts +0 -3
  662. package/dist/vocaloidBooth/web/index.d.ts +0 -3
  663. package/dist/vocaloidBooth/web/index.js +0 -376
  664. package/dist/vocaloidBooth/web/index.js.map +0 -1
  665. package/dist/vocaloidBooth/web/index.mjs +0 -362
  666. package/dist/vocaloidBooth/web/index.mjs.map +0 -1
  667. /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
  668. /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
  669. /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
  670. /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
  671. /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
  672. /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
  673. /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
  674. /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
  675. /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
  676. /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
  677. /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
  678. /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
  679. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
  680. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
  681. /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
  682. /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
  683. /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
  684. /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
  685. /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
  686. /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
  687. /package/dist/{analytics → common/analytics}/index.js.map +0 -0
  688. /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
  689. /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
  690. /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
  691. /package/dist/{api → common/api}/index.js.map +0 -0
  692. /package/dist/{api → common/api}/index.mjs.map +0 -0
  693. /package/dist/{config → common/components}/index.js.map +0 -0
  694. /package/dist/{config → common/components}/index.mjs.map +0 -0
  695. /package/dist/{i18n → common/config}/index.js.map +0 -0
  696. /package/dist/{i18n → common/config}/index.mjs.map +0 -0
  697. /package/dist/{config → common/config}/server/index.d.mts +0 -0
  698. /package/dist/{config → common/config}/server/index.d.ts +0 -0
  699. /package/dist/{logger → common/i18n}/index.js.map +0 -0
  700. /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
  701. /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
  702. /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
  703. /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
  704. /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
  705. /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
  706. /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
  707. /package/dist/{storage → common/universalExport}/index.js.map +0 -0
  708. /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
  709. /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
  710. /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
  711. /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
  712. /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
@@ -1,6 +1,17 @@
1
1
  'use strict';
2
2
 
3
- // src/request/adapters/miniapp-adapter.ts
3
+ var chunk3QCATFQV_js = require('./chunk-3QCATFQV.js');
4
+ var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
5
+
6
+ // src/common/request/index.ts
7
+ var request_exports = {};
8
+ chunkNSBPE2FW_js.__export(request_exports, {
9
+ MiniappRequestAdapter: () => MiniappRequestAdapter,
10
+ ReactNativeRequestAdapter: () => ReactNativeRequestAdapter,
11
+ WebRequestAdapter: () => chunk3QCATFQV_js.WebRequestAdapter
12
+ });
13
+
14
+ // src/common/request/adapters/miniapp-adapter.ts
4
15
  var MiniappRequestAdapter = class {
5
16
  constructor(taro) {
6
17
  if (!taro) {
@@ -39,7 +50,7 @@ var MiniappRequestAdapter = class {
39
50
  }
40
51
  };
41
52
 
42
- // src/request/adapters/react-native-adapter.ts
53
+ // src/common/request/adapters/react-native-adapter.ts
43
54
  var ReactNativeRequestAdapter = class {
44
55
  async request(config) {
45
56
  const { url, method = "GET", headers = {}, body, params } = config;
@@ -77,5 +88,6 @@ var ReactNativeRequestAdapter = class {
77
88
 
78
89
  exports.MiniappRequestAdapter = MiniappRequestAdapter;
79
90
  exports.ReactNativeRequestAdapter = ReactNativeRequestAdapter;
80
- //# sourceMappingURL=chunk-GSNGCENJ.js.map
81
- //# sourceMappingURL=chunk-GSNGCENJ.js.map
91
+ exports.request_exports = request_exports;
92
+ //# sourceMappingURL=chunk-EOZHUI46.js.map
93
+ //# sourceMappingURL=chunk-EOZHUI46.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/request/index.ts","../src/common/request/adapters/miniapp-adapter.ts","../src/common/request/adapters/react-native-adapter.ts"],"names":["__export","WebRequestAdapter"],"mappings":"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","file":"chunk-EOZHUI46.js","sourcesContent":["/**\n * @package sa2kit/common/request\n * 跨平台网络请求适配器\n */\nexport type { RequestAdapter, RequestConfig } from './types/types';\nexport * from './adapters';\n","import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.statusCode),\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n","import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * React Native 请求适配器(fetch,不携带 Cookie)\n * 与 WebRequestAdapter 的区别:RN 跨域场景下 credentials:include 无效且易误导\n */\nexport class ReactNativeRequestAdapter implements RequestAdapter {\n async request<T = unknown>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const qs = searchParams.toString();\n if (qs) {\n fullUrl += url.includes('?') ? `&${qs}` : `?${qs}`;\n }\n }\n\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = (await response.json()) as T & { error?: string };\n if (!response.ok) {\n return {\n success: false,\n error:\n (data as { error?: string }).error ??\n `请求失败 (${response.status})`,\n } as T;\n }\n return data;\n }\n}\n"]}
@@ -1,6 +1,18 @@
1
1
  'use strict';
2
2
 
3
- // src/logger/types.ts
3
+ var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
4
+
5
+ // src/common/logger/index.ts
6
+ var logger_exports = {};
7
+ chunkNSBPE2FW_js.__export(logger_exports, {
8
+ ConsoleLoggerAdapter: () => ConsoleLoggerAdapter,
9
+ LogLevel: () => LogLevel,
10
+ Logger: () => Logger,
11
+ createLogger: () => createLogger,
12
+ logger: () => logger
13
+ });
14
+
15
+ // src/common/logger/types.ts
4
16
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
5
17
  LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
6
18
  LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
@@ -10,7 +22,7 @@ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
10
22
  return LogLevel2;
11
23
  })(LogLevel || {});
12
24
 
13
- // src/logger/console-adapter.ts
25
+ // src/common/logger/console-adapter.ts
14
26
  var ConsoleLoggerAdapter = class {
15
27
  constructor() {
16
28
  this.colors = {
@@ -70,7 +82,7 @@ var ConsoleLoggerAdapter = class {
70
82
  }
71
83
  };
72
84
 
73
- // src/logger/Logger.ts
85
+ // src/common/logger/Logger.ts
74
86
  var Logger = class _Logger {
75
87
  constructor(config, context) {
76
88
  const isProduction = typeof process !== "undefined" ? process.env.NODE_ENV === "production" : false;
@@ -167,5 +179,6 @@ exports.LogLevel = LogLevel;
167
179
  exports.Logger = Logger;
168
180
  exports.createLogger = createLogger;
169
181
  exports.logger = logger;
170
- //# sourceMappingURL=chunk-25OFOKNF.js.map
171
- //# sourceMappingURL=chunk-25OFOKNF.js.map
182
+ exports.logger_exports = logger_exports;
183
+ //# sourceMappingURL=chunk-F2BZIU67.js.map
184
+ //# sourceMappingURL=chunk-F2BZIU67.js.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":["__export","LogLevel"],"mappings":"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","file":"chunk-F2BZIU67.js","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"]}
@@ -8,7 +8,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
8
 
9
9
  var React__default = /*#__PURE__*/_interopDefault(React);
10
10
 
11
- // src/i18n/index.ts
11
+ // src/common/i18n/index.ts
12
12
  var i18n_exports = {};
13
13
  chunkNSBPE2FW_js.__export(i18n_exports, {
14
14
  ElectronI18nAdapter: () => ElectronI18nAdapter,
@@ -29,7 +29,7 @@ chunkNSBPE2FW_js.__export(i18n_exports, {
29
29
  zhCN: () => zh_CN_default
30
30
  });
31
31
 
32
- // src/i18n/i18n.ts
32
+ // src/common/i18n/i18n.ts
33
33
  function defaultInterpolate(template, data) {
34
34
  return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
35
35
  return data[key]?.toString() ?? match;
@@ -167,7 +167,7 @@ function useLocale() {
167
167
  };
168
168
  }
169
169
 
170
- // src/i18n/locales/zh-CN.ts
170
+ // src/common/i18n/locales/zh-CN.ts
171
171
  var zh_CN_default = {
172
172
  // ==================== 应用信息 ====================
173
173
  app: {
@@ -287,7 +287,7 @@ var zh_CN_default = {
287
287
  }
288
288
  };
289
289
 
290
- // src/i18n/locales/en-US.ts
290
+ // src/common/i18n/locales/en-US.ts
291
291
  var en_US_default = {
292
292
  // ==================== App Information ====================
293
293
  app: {
@@ -407,7 +407,7 @@ var en_US_default = {
407
407
  }
408
408
  };
409
409
 
410
- // src/i18n/adapters/web.ts
410
+ // src/common/i18n/adapters/web.ts
411
411
  var WebI18nAdapter = class {
412
412
  constructor() {
413
413
  this.storageKey = "app_locale";
@@ -442,7 +442,7 @@ var WebI18nAdapter = class {
442
442
  }
443
443
  };
444
444
 
445
- // src/i18n/adapters/mobile.ts
445
+ // src/common/i18n/adapters/mobile.ts
446
446
  var ReactNativeI18nAdapter = class {
447
447
  constructor() {
448
448
  this.storageKey = "@app_locale";
@@ -495,7 +495,7 @@ var ReactNativeI18nAdapter = class {
495
495
  }
496
496
  };
497
497
 
498
- // src/i18n/adapters/miniapp.ts
498
+ // src/common/i18n/adapters/miniapp.ts
499
499
  var TaroI18nAdapter = class {
500
500
  constructor() {
501
501
  this.storageKey = "app_locale";
@@ -546,7 +546,7 @@ var TaroI18nAdapter = class {
546
546
  }
547
547
  };
548
548
 
549
- // src/i18n/adapters/desktop.ts
549
+ // src/common/i18n/adapters/desktop.ts
550
550
  var ElectronI18nAdapter = class {
551
551
  constructor() {
552
552
  this.storageKey = "app_locale";
@@ -752,5 +752,5 @@ exports.t = t;
752
752
  exports.useLocale = useLocale;
753
753
  exports.useTranslation = useTranslation;
754
754
  exports.zh_CN_default = zh_CN_default;
755
- //# sourceMappingURL=chunk-AQPU2AXH.js.map
756
- //# sourceMappingURL=chunk-AQPU2AXH.js.map
755
+ //# sourceMappingURL=chunk-F2TEJSCP.js.map
756
+ //# sourceMappingURL=chunk-F2TEJSCP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/i18n/index.ts","../src/common/i18n/i18n.ts","../src/common/i18n/hooks.ts","../src/common/i18n/locales/zh-CN.ts","../src/common/i18n/locales/en-US.ts","../src/common/i18n/adapters/web.ts","../src/common/i18n/adapters/mobile.ts","../src/common/i18n/adapters/miniapp.ts","../src/common/i18n/adapters/desktop.ts","../src/common/i18n/components/LanguageSwitcher.tsx"],"names":["__export","t","useState","useEffect","useCallback","useMemo","__require","React","clsx","useRef"],"mappings":"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","file":"chunk-F2TEJSCP.js","sourcesContent":["/**\n * i18n 国际化模块\n *\n * 提供完整的国际化解决方案,支持多语言切换、动态加载、React Hooks 和 UI 组件\n */\n\n// 核心功能\nexport { createI18n, initI18n, getI18n, t } from './i18n';\n\n// 类型定义\nexport type {\n Locale,\n TranslationKey,\n TranslationValue,\n Translations,\n LocaleResources,\n TranslateOptions,\n I18nConfig,\n I18nInstance,\n I18nAdapter,\n} from './types';\n\n// React Hooks\nexport { useTranslation, useLocale } from './hooks';\n\n// 示例翻译资源\nexport { default as zhCN } from './locales/zh-CN';\nexport { default as enUS } from './locales/en-US';\n\n// 平台适配器\nexport * from './adapters';\n\n// UI 组件(Tailwind CSS)\nexport * from './components';\n","/**\n * 轻量级 i18n 核心实现\n * 支持:翻译、插值、复数、嵌套键、类型安全\n */\n\nimport type {\n Locale,\n Translations,\n LocaleResources,\n TranslateOptions,\n I18nConfig,\n I18nInstance,\n} from './types';\n\n/**\n * 默认插值函数\n * 支持 {{key}} 格式的变量替换\n */\nfunction defaultInterpolate(template: string, data: Record<string, any>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return data[key]?.toString() ?? match;\n });\n}\n\n/**\n * 从嵌套对象中获取值\n * 支持 \"user.name\" 这样的路径\n */\nfunction getNestedValue(obj: any, path: string): any {\n const keys = path.split('.');\n let result = obj;\n\n for (const key of keys) {\n if (result && typeof result === 'object' && key in result) {\n result = result[key];\n } else {\n return undefined;\n }\n }\n\n return result;\n}\n\n/**\n * 创建 i18n 实例\n */\nexport function createI18n(config: I18nConfig): I18nInstance {\n let currentLocale: Locale = config.locale;\n const fallbackLocale: Locale = config.fallbackLocale || 'zh-CN';\n const resources: LocaleResources = config.resources || {};\n const interpolate = config.interpolate || defaultInterpolate;\n\n /**\n * 翻译函数\n * @param key 翻译键,支持嵌套 \"common.hello\"\n * @param options 选项\n */\n function t(key: string, options: TranslateOptions = {}): string {\n const { defaultValue, count, context = {} } = options;\n\n // 获取当前语言的翻译\n let translation = getNestedValue(resources[currentLocale], key);\n\n // 如果没有找到,尝试使用 fallback 语言\n if (translation === undefined && currentLocale !== fallbackLocale) {\n translation = getNestedValue(resources[fallbackLocale], key);\n }\n\n // 如果还是没有找到,使用默认值或键名\n if (translation === undefined) {\n return defaultValue || key;\n }\n\n // 如果不是字符串,返回 JSON 字符串\n if (typeof translation !== 'string') {\n return JSON.stringify(translation);\n }\n\n // 处理复数\n if (count !== undefined) {\n const pluralKey = count === 1 ? (key) + '_one' : (key) + '_other';\n const pluralTranslation = getNestedValue(resources[currentLocale], pluralKey);\n if (pluralTranslation && typeof pluralTranslation === 'string') {\n translation = pluralTranslation;\n }\n }\n\n // 插值\n const data = { ...context, count };\n return interpolate(translation, data);\n }\n\n /**\n * 设置当前语言\n */\n function setLocale(locale: Locale): void {\n currentLocale = locale;\n }\n\n /**\n * 添加翻译资源\n */\n function addResources(locale: Locale, newResources: Translations): void {\n if (!resources[locale]) {\n resources[locale] = {};\n }\n resources[locale] = {\n ...resources[locale],\n ...newResources,\n };\n }\n\n /**\n * 获取当前语言\n */\n function getLocale(): Locale {\n return currentLocale;\n }\n\n return {\n locale: currentLocale,\n t,\n setLocale,\n addResources,\n getLocale,\n };\n}\n\n/**\n * 全局 i18n 实例(可选)\n */\nlet globalI18n: I18nInstance | null = null;\n\n/**\n * 初始化全局 i18n\n */\nexport function initI18n(config: I18nConfig): I18nInstance {\n globalI18n = createI18n(config);\n return globalI18n;\n}\n\n/**\n * 获取全局 i18n 实例\n */\nexport function getI18n(): I18nInstance {\n if (!globalI18n) {\n throw new Error('i18n not initialized. Call initI18n() first.');\n }\n return globalI18n;\n}\n\n/**\n * 快捷翻译函数\n */\nexport function t(key: string, options?: TranslateOptions): string {\n return getI18n().t(key, options);\n}\n","/**\n * React hooks for i18n\n */\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { getI18n } from './i18n';\nimport type { Locale, TranslateOptions } from './types';\n\n/**\n * useTranslation Hook\n * React 组件中使用翻译\n * 支持 SSR 环境,在 i18n 未初始化时安全降级\n */\nexport function useTranslation() {\n const [locale, setLocaleState] = useState<Locale>('zh-CN');\n const [i18nInstance, setI18nInstance] = useState<any>(null);\n\n useEffect(() => {\n // 仅在客户端尝试获取 i18n 实例\n if (typeof window !== 'undefined') {\n try {\n const i18n = getI18n();\n setI18nInstance(i18n);\n setLocaleState(i18n.getLocale());\n } catch {\n // i18n 未初始化,保持 null\n console.warn('i18n not initialized. Some translations may not work.');\n }\n }\n }, []);\n\n // 翻译函数\n const t = useCallback(\n (key: string, options?: TranslateOptions): string => {\n if (i18nInstance) {\n return i18nInstance.t(key, options);\n }\n // 未初始化时返回 key 作为后备\n return key;\n },\n [i18nInstance]\n );\n\n // 切换语言\n const setLocale = useCallback(\n (newLocale: Locale) => {\n if (i18nInstance) {\n i18nInstance.setLocale(newLocale);\n setLocaleState(newLocale);\n } else {\n console.warn('i18n not initialized. Cannot change locale.');\n }\n },\n [i18nInstance]\n );\n\n return useMemo(\n () => ({\n t,\n locale,\n setLocale,\n }),\n [t, locale, setLocale]\n );\n}\n\n/**\n * useLocale Hook\n * 只获取和设置语言,不包含翻译函数\n */\nexport function useLocale() {\n const i18n = getI18n();\n const [locale, setLocaleState] = useState<Locale>(i18n.getLocale());\n\n const setLocale = useCallback((newLocale: Locale) => {\n i18n.setLocale(newLocale);\n setLocaleState(newLocale);\n }, []);\n\n return {\n locale,\n setLocale,\n };\n}\n","/**\n * 简体中文翻译\n */\n\nexport default {\n // ==================== 应用信息 ====================\n app: {\n name: 'LyricNote',\n fullName: 'LyricNote - 歌词笔记',\n icon: '🎵',\n description: '一个强大的歌词和笔记管理应用',\n author: 'LyricNote Team',\n copyright: '© ' + (new Date().getFullYear()) + ' LyricNote',\n version: '1.0.0',\n },\n\n // ==================== 应用标题 ====================\n titles: {\n main: '🎵 LyricNote',\n admin: 'LyricNote 管理后台',\n withVersion: 'LyricNote v1.0.0',\n welcome: '欢迎使用 LyricNote',\n about: '关于 LyricNote',\n },\n\n // ==================== 通用文案 ====================\n common: {\n hello: '你好',\n welcome: '欢迎',\n confirm: '确认',\n cancel: '取消',\n save: '保存',\n delete: '删除',\n edit: '编辑',\n back: '返回',\n next: '下一步',\n submit: '提交',\n finish: '完成',\n loading: '加载中...',\n success: '操作成功',\n error: '操作失败',\n retry: '重试',\n empty: '暂无数据',\n },\n\n // ==================== 导航菜单 ====================\n nav: {\n home: '首页',\n lyrics: '歌词',\n create: '创作',\n collection: '收藏',\n profile: '我的',\n settings: '设置',\n history: '历史',\n logout: '退出登录',\n },\n\n // ==================== 用户相关 ====================\n user: {\n login: '登录',\n register: '注册',\n username: '用户名',\n password: '密码',\n email: '邮箱',\n phone: '手机号',\n nickname: '昵称',\n },\n\n // ==================== 页面标题和描述 ====================\n pages: {\n home: {\n title: '首页',\n description: '一个强大的歌词和笔记管理应用',\n },\n profile: {\n title: '个人中心',\n description: '管理您的个人信息和偏好设置',\n },\n admin: {\n title: 'LyricNote 管理后台',\n description: '系统管理和数据统计',\n },\n login: {\n title: '登录',\n description: '登录到 LyricNote',\n },\n },\n\n // ==================== 表单验证 ====================\n validation: {\n required: '{{field}}不能为空',\n invalid_email: '邮箱格式不正确',\n password_too_short: '密码至少需要{{count}}个字符',\n password_weak: '密码强度不够',\n passwords_not_match: '两次密码不一致',\n },\n\n // ==================== 状态提示 ====================\n status: {\n loading: '加载中...',\n success: '操作成功',\n error: '操作失败',\n empty: '暂无数据',\n network_error: '网络错误,请稍后重试',\n },\n\n // ==================== 错误消息 ====================\n errors: {\n network: '网络错误,请稍后重试',\n server: '服务器错误',\n unauthorized: '未授权,请先登录',\n not_found: '未找到相关内容',\n unknown: '未知错误',\n },\n\n // ==================== 成功消息 ====================\n success: {\n saved: '保存成功',\n deleted: '删除成功',\n updated: '更新成功',\n created: '创建成功',\n },\n\n // ==================== 语言设置 ====================\n language: {\n label: '语言',\n zh_cn: '简体中文',\n zh_tw: '繁體中文',\n en_us: 'English',\n ja_jp: '日本語',\n },\n} as const;\n","/**\n * English translations\n */\n\nexport default {\n // ==================== App Information ====================\n app: {\n name: 'LyricNote',\n fullName: 'LyricNote - Lyrics & Notes',\n icon: '🎵',\n description: 'A powerful lyrics and notes management app',\n author: 'LyricNote Team',\n copyright: '© ' + (new Date().getFullYear()) + ' LyricNote',\n version: '1.0.0',\n },\n\n // ==================== App Titles ====================\n titles: {\n main: '🎵 LyricNote',\n admin: 'LyricNote Admin',\n withVersion: 'LyricNote v1.0.0',\n welcome: 'Welcome to LyricNote',\n about: 'About LyricNote',\n },\n\n // ==================== Common ====================\n common: {\n hello: 'Hello',\n welcome: 'Welcome',\n confirm: 'Confirm',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n back: 'Back',\n next: 'Next',\n submit: 'Submit',\n finish: 'Finish',\n loading: 'Loading...',\n success: 'Success',\n error: 'Error',\n retry: 'Retry',\n empty: 'No data',\n },\n\n // ==================== Navigation ====================\n nav: {\n home: 'Home',\n lyrics: 'Lyrics',\n create: 'Create',\n collection: 'Collection',\n profile: 'Profile',\n settings: 'Settings',\n history: 'History',\n logout: 'Logout',\n },\n\n // ==================== User ====================\n user: {\n login: 'Login',\n register: 'Register',\n username: 'Username',\n password: 'Password',\n email: 'Email',\n phone: 'Phone',\n nickname: 'Nickname',\n },\n\n // ==================== Pages ====================\n pages: {\n home: {\n title: 'Home',\n description: 'A powerful lyrics and notes management app',\n },\n profile: {\n title: 'Profile',\n description: 'Manage your personal information and preferences',\n },\n admin: {\n title: 'LyricNote Admin',\n description: 'System management and data statistics',\n },\n login: {\n title: 'Login',\n description: 'Login to LyricNote',\n },\n },\n\n // ==================== Form Validation ====================\n validation: {\n required: '{{field}} is required',\n invalid_email: 'Invalid email format',\n password_too_short: 'Password must be at least {{count}} characters',\n password_weak: 'Password is too weak',\n passwords_not_match: 'Passwords do not match',\n },\n\n // ==================== Status Messages ====================\n status: {\n loading: 'Loading...',\n success: 'Success',\n error: 'Error',\n empty: 'No data',\n network_error: 'Network error, please try again later',\n },\n\n // ==================== Error Messages ====================\n errors: {\n network: 'Network error, please try again later',\n server: 'Server error',\n unauthorized: 'Unauthorized, please login first',\n not_found: 'Not found',\n unknown: 'Unknown error',\n },\n\n // ==================== Success Messages ====================\n success: {\n saved: 'Saved successfully',\n deleted: 'Deleted successfully',\n updated: 'Updated successfully',\n created: 'Created successfully',\n },\n\n // ==================== Language Settings ====================\n language: {\n label: 'Language',\n zh_cn: '简体中文',\n zh_tw: '繁體中文',\n en_us: 'English',\n ja_jp: '日本語',\n },\n} as const;\n","/**\n * Web 平台适配器\n * 用于浏览器环境的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Web 平台适配器\n * 使用 localStorage 存储语言偏好\n */\nexport class WebI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n if (typeof navigator === 'undefined') return 'zh-CN';\n const browserLocale = navigator.language;\n return this.normalizeLocale(browserLocale);\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n if (typeof localStorage === 'undefined') return;\n localStorage.setItem(this.storageKey, locale);\n }\n\n async loadLocale(): Promise<Locale | null> {\n if (typeof localStorage === 'undefined') return null;\n const stored = localStorage.getItem(this.storageKey);\n return stored as Locale | null;\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n 'zh-TW': 'zh-TW',\n 'zh-HK': 'zh-TW',\n zh: 'zh-CN',\n 'en-US': 'en-US',\n 'en-GB': 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * React Native 平台适配器\n * 用于 React Native 应用的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * React Native 平台适配器\n * 使用 AsyncStorage 存储语言偏好\n *\n * 注意:需要安装 @react-native-async-storage/async-storage\n */\nexport class ReactNativeI18nAdapter implements I18nAdapter {\n private storageKey = '@app_locale';\n\n getSystemLocale(): Locale {\n // 需要导入 react-native 的 Platform 和 NativeModules\n try {\n // @ts-ignore - react-native 在运行时动态加载\n const { Platform, NativeModules } = require('react-native');\n const locale =\n Platform.OS === 'ios'\n ? NativeModules.SettingsManager.settings.AppleLocale ||\n NativeModules.SettingsManager.settings.AppleLanguages[0]\n : NativeModules.I18nManager.localeIdentifier;\n\n return this.normalizeLocale(locale);\n } catch {\n return 'zh-CN';\n }\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n try {\n // @ts-ignore - AsyncStorage 在运行时动态加载\n const AsyncStorage = require('@react-native-async-storage/async-storage').default;\n await AsyncStorage.setItem(this.storageKey, locale);\n } catch (error) {\n console.error('Failed to save locale:', error);\n }\n }\n\n async loadLocale(): Promise<Locale | null> {\n try {\n // @ts-ignore - AsyncStorage 在运行时动态加载\n const AsyncStorage = require('@react-native-async-storage/async-storage').default;\n const stored = await AsyncStorage.getItem(this.storageKey);\n return stored as Locale | null;\n } catch (error) {\n console.error('Failed to load locale:', error);\n return null;\n }\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n zh_CN: 'zh-CN',\n 'zh-Hans': 'zh-CN',\n zh_Hans_CN: 'zh-CN',\n 'zh-TW': 'zh-TW',\n zh_TW: 'zh-TW',\n 'zh-Hant': 'zh-TW',\n zh_Hant_TW: 'zh-TW',\n 'en-US': 'en-US',\n en_US: 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja_JP: 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * Taro (小程序) 平台适配器\n * 用于微信小程序、支付宝小程序等通过 Taro 开发的应用\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Taro (小程序) 平台适配器\n * 使用 Taro.storage API 存储语言偏好\n *\n * 注意:需要安装 @tarojs/taro\n */\nexport class TaroI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n const systemInfo = Taro.getSystemInfoSync();\n return this.normalizeLocale(systemInfo.language);\n } catch {\n return 'zh-CN';\n }\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n await Taro.setStorage({\n key: this.storageKey,\n data: locale,\n });\n } catch (error) {\n console.error('Failed to save locale:', error);\n }\n }\n\n async loadLocale(): Promise<Locale | null> {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n const res = await Taro.getStorage({\n key: this.storageKey,\n });\n return res.data as Locale | null;\n } catch (error) {\n return null;\n }\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n zh_CN: 'zh-CN',\n 'zh-CN': 'zh-CN',\n zh_TW: 'zh-TW',\n 'zh-TW': 'zh-TW',\n en: 'en-US',\n 'en-US': 'en-US',\n ja: 'ja-JP',\n 'ja-JP': 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * Electron 平台适配器\n * 用于 Electron 桌面应用的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Electron 平台适配器\n * 使用 localStorage 存储语言偏好\n *\n * 注意:Electron 渲染进程支持 Web API\n */\nexport class ElectronI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n if (typeof navigator === 'undefined') return 'zh-CN';\n const browserLocale = navigator.language;\n return this.normalizeLocale(browserLocale);\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n if (typeof localStorage === 'undefined') return;\n localStorage.setItem(this.storageKey, locale);\n }\n\n async loadLocale(): Promise<Locale | null> {\n if (typeof localStorage === 'undefined') return null;\n const stored = localStorage.getItem(this.storageKey);\n return stored as Locale | null;\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n 'zh-TW': 'zh-TW',\n 'zh-HK': 'zh-TW',\n zh: 'zh-CN',\n 'en-US': 'en-US',\n 'en-GB': 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","'use client';\n\n/**\n * 语言切换组件\n * 支持多种样式:按钮组、下拉菜单、图标按钮\n * 使用 Tailwind CSS 样式,支持暗色模式\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTranslation } from '../hooks';\nimport type { Locale } from '../types';\nimport { clsx } from 'clsx';\n\n// ==================== 类型定义 ====================\n\nexport interface LanguageSwitcherProps {\n variant?: 'buttons' | 'dropdown' | 'icon';\n className?: string;\n onLanguageChange?: (locale: Locale) => void;\n}\n\nexport interface LanguageOption {\n locale: Locale;\n label: string;\n flag: string;\n}\n\n// ==================== 语言选项配置 ====================\n\nconst LANGUAGE_OPTIONS: LanguageOption[] = [\n { locale: 'zh-CN', label: '简体中文', flag: '🇨🇳' },\n { locale: 'zh-TW', label: '繁體中文', flag: '🇹🇼' },\n { locale: 'en-US', label: 'English', flag: '🇺🇸' },\n { locale: 'ja-JP', label: '日本語', flag: '🇯🇵' },\n];\n\n// ==================== 按钮组样式 ====================\n\n/**\n * 按钮组语言切换器\n */\nexport function LanguageSwitcherButtons({\n className = '',\n onLanguageChange,\n}: LanguageSwitcherProps) {\n const { locale, setLocale } = useTranslation();\n\n const handleChange = (newLocale: Locale) => {\n setLocale(newLocale);\n onLanguageChange?.(newLocale);\n };\n\n return (\n <div\n className={clsx('inline-flex items-center gap-1 p-1 bg-gray-100 dark:bg-gray-800 rounded-lg', className)}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <button\n key={option.locale}\n onClick={() => handleChange(option.locale)}\n className={clsx(\n 'inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium transition-all duration-200',\n locale === option.locale\n ? 'bg-white dark:bg-gray-700 text-blue-600 dark:text-blue-400 shadow-sm'\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700/50'\n )}\n aria-label={option.label}\n >\n <span className=\"text-base leading-none\">{option.flag}</span>\n <span className=\"hidden sm:inline\">{option.label}</span>\n </button>\n ))}\n </div>\n );\n}\n\n// ==================== 下拉菜单样式 ====================\n\n/**\n * 下拉菜单语言切换器\n */\nexport function LanguageSwitcherDropdown({\n className = '',\n onLanguageChange,\n}: LanguageSwitcherProps) {\n const { locale, setLocale, t } = useTranslation();\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newLocale = e.target.value as Locale;\n setLocale(newLocale);\n onLanguageChange?.(newLocale);\n };\n\n return (\n <div className={clsx('inline-flex flex-col gap-2', className)}>\n <label\n htmlFor=\"language-select\"\n className=\"text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {t('language.label')}\n </label>\n <select\n id=\"language-select\"\n value={locale}\n onChange={handleChange}\n className=\"\n min-w-[160px] px-3 py-2 pr-8\n bg-white dark:bg-gray-800\n border border-gray-300 dark:border-gray-600\n rounded-lg text-sm\n text-gray-900 dark:text-gray-100\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n cursor-pointer\n appearance-none\n bg-[url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpolyline points=%276 9 12 15 18 9%27%3e%3c/polyline%3e%3c/svg%3e')]\n bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat\n \"\n aria-label={t('language.label')}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <option key={option.locale} value={option.locale}>\n {option.flag} {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\n// ==================== 图标按钮样式 ====================\n\n/**\n * 图标按钮语言切换器(带下拉菜单)\n */\nexport function LanguageSwitcherIcon({ className = '', onLanguageChange }: LanguageSwitcherProps) {\n const { locale, setLocale } = useTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentOption = LANGUAGE_OPTIONS.find((opt) => opt.locale === locale);\n\n const handleSelect = (newLocale: Locale) => {\n setLocale(newLocale);\n setIsOpen(false);\n onLanguageChange?.(newLocale);\n };\n\n // 点击外部关闭下拉菜单\n useEffect(() => {\n if (!isOpen) return;\n\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n return (\n <div className={clsx('relative', className)} ref={dropdownRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"\n inline-flex items-center gap-1.5 px-3 py-2\n bg-white dark:bg-gray-800\n border border-gray-300 dark:border-gray-600\n rounded-lg\n hover:bg-gray-50 dark:hover:bg-gray-700\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n transition-all duration-200\n \"\n aria-label=\"Switch Language\"\n >\n <span className=\"text-lg leading-none\">{currentOption?.flag}</span>\n <svg\n className={clsx('w-4 h-4 text-gray-600 dark:text-gray-400 transition-transform duration-200', isOpen ? 'rotate-180' : '')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isOpen && (\n <div\n className=\"\n absolute top-full right-0 mt-2 min-w-[180px]\n bg-white dark:bg-gray-800\n border border-gray-200 dark:border-gray-700\n rounded-lg shadow-lg\n py-1\n z-50\n animate-in fade-in slide-in-from-top-2 duration-200\n \"\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <button\n key={option.locale}\n onClick={() => handleSelect(option.locale)}\n className={clsx(\n 'w-full flex items-center gap-3 px-4 py-2.5 text-sm transition-colors duration-150',\n locale === option.locale\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700/50'\n )}\n >\n <span className=\"text-lg leading-none\">{option.flag}</span>\n <span className=\"flex-1 text-left\">{option.label}</span>\n {locale === option.locale && (\n <svg\n className=\"w-4 h-4 text-blue-600 dark:text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ==================== 主组件 ====================\n\n/**\n * 语言切换器主组件\n * 根据 variant 自动选择样式\n */\nexport function LanguageSwitcher({\n variant = 'icon',\n className,\n onLanguageChange,\n}: LanguageSwitcherProps) {\n switch (variant) {\n case 'buttons':\n return <LanguageSwitcherButtons className={className} onLanguageChange={onLanguageChange} />;\n case 'dropdown':\n return <LanguageSwitcherDropdown className={className} onLanguageChange={onLanguageChange} />;\n case 'icon':\n default:\n return <LanguageSwitcherIcon className={className} onLanguageChange={onLanguageChange} />;\n }\n}\n\n// ==================== 默认导出 ====================\n\nexport default LanguageSwitcher;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- // src/storage/adapters/electron-adapter.ts
3
+ // src/common/storage/adapters/electron-adapter.ts
4
4
  var hasLocalStorage = typeof window !== "undefined" && typeof window.localStorage !== "undefined";
5
5
  var ElectronStorageAdapter = class {
6
6
  constructor() {
@@ -144,5 +144,5 @@ var ElectronStorageAdapter = class {
144
144
  };
145
145
 
146
146
  exports.ElectronStorageAdapter = ElectronStorageAdapter;
147
- //# sourceMappingURL=chunk-UCOE6SET.js.map
148
- //# sourceMappingURL=chunk-UCOE6SET.js.map
147
+ //# sourceMappingURL=chunk-FCLS5R24.js.map
148
+ //# sourceMappingURL=chunk-FCLS5R24.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/storage/adapters/electron-adapter.ts"],"names":[],"mappings":"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","file":"chunk-FCLS5R24.js","sourcesContent":["/**\n * Electron 桌面端存储适配器\n *\n * Electron 渲染进程可以使用 localStorage(和 Web 相同)\n * 但我们提供专门的适配器以支持未来可能的主进程存储需求\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查 localStorage 是否可用(Electron 渲染进程)\n */\nconst hasLocalStorage = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class ElectronStorageAdapter 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 // 非 Electron 或无 localStorage 环境返回 null\n if (!hasLocalStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[ElectronStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非 Electron 或无 localStorage 环境静默忽略\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n this.notifyListeners(key, value);\n\n // 触发自定义事件(用于跨窗口同步)\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n this.notifyListeners(key, null);\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.clear();\n\n // 通知所有监听器\n this.listeners.forEach((listeners, key) => {\n listeners.forEach((listener) => {\n listener(key, null);\n });\n });\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key: '*', value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n /**\n * 添加存储变化监听器\n * 支持跨 Electron 窗口同步\n */\n addChangeListener(listener: (key: string, newValue: string | null) => void): () => void {\n // 添加到监听器集合\n const allListeners = this.listeners.get('*') || new Set();\n allListeners.add(listener);\n this.listeners.set('*', allListeners);\n\n // Storage 事件监听(同源窗口)\n const storageHandler = (e: StorageEvent) => {\n if (e.key) {\n listener(e.key, e.newValue);\n }\n };\n\n // 自定义事件监听(Electron 窗口间通信)\n const customHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { key, value } = customEvent.detail;\n if (key === '*') {\n // clear 操作\n this.listeners.forEach((_, k) => listener(k, null));\n } else {\n listener(key, value);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', storageHandler);\n window.addEventListener('electron-storage-change', customHandler);\n }\n\n // 返回清理函数\n return () => {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n window.removeEventListener('electron-storage-change', customHandler);\n }\n };\n }\n\n removeChangeListener(listener: (key: string, newValue: string | null) => void): void {\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n }\n }\n\n /**\n * 通知监听器\n */\n private notifyListeners(key: string, value: string | null): void {\n // 通知特定 key 的监听器\n const keyListeners = this.listeners.get(key);\n if (keyListeners) {\n keyListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n\n // 通知通配符监听器\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n }\n}\n\n"]}
@@ -1,8 +1,23 @@
1
- import { logger } from './chunk-3DXPQ4YV.mjs';
1
+ import { logger } from './chunk-VYK4M2D6.mjs';
2
+ import { __export } from './chunk-MAI35PU6.mjs';
2
3
  import { clsx } from 'clsx';
3
4
  import { twMerge } from 'tailwind-merge';
4
5
 
5
- // src/utils/time.ts
6
+ // src/common/utils/index.ts
7
+ var utils_exports = {};
8
+ __export(utils_exports, {
9
+ arrayUtils: () => arrayUtils,
10
+ cn: () => cn,
11
+ debugUtils: () => debugUtils,
12
+ errorUtils: () => errorUtils,
13
+ fileUtils: () => fileUtils,
14
+ formatTime: () => formatTime,
15
+ japaneseUtils: () => japaneseUtils,
16
+ stringUtils: () => stringUtils,
17
+ validators: () => validators
18
+ });
19
+
20
+ // src/common/utils/time.ts
6
21
  var formatTime = {
7
22
  /**
8
23
  * 将秒数转换为 MM:SS 格式
@@ -44,7 +59,7 @@ var formatTime = {
44
59
  }
45
60
  };
46
61
 
47
- // src/utils/japanese.ts
62
+ // src/common/utils/japanese.ts
48
63
  var japaneseUtils = {
49
64
  /**
50
65
  * 提取文本中的汉字
@@ -66,7 +81,7 @@ var japaneseUtils = {
66
81
  }
67
82
  };
68
83
 
69
- // src/utils/validators.ts
84
+ // src/common/utils/validators.ts
70
85
  var validators = {
71
86
  /**
72
87
  * 验证邮箱格式
@@ -129,7 +144,7 @@ var validators = {
129
144
  }
130
145
  };
131
146
 
132
- // src/utils/file.ts
147
+ // src/common/utils/file.ts
133
148
  var fileUtils = {
134
149
  /**
135
150
  * 格式化文件大小
@@ -166,7 +181,7 @@ var fileUtils = {
166
181
  }
167
182
  };
168
183
 
169
- // src/utils/array.ts
184
+ // src/common/utils/array.ts
170
185
  var arrayUtils = {
171
186
  /**
172
187
  * 数组去重
@@ -220,7 +235,7 @@ var arrayUtils = {
220
235
  }
221
236
  };
222
237
 
223
- // src/utils/string.ts
238
+ // src/common/utils/string.ts
224
239
  var stringUtils = {
225
240
  /**
226
241
  * 截断文本
@@ -261,7 +276,7 @@ var stringUtils = {
261
276
  }
262
277
  };
263
278
 
264
- // src/utils/debug.ts
279
+ // src/common/utils/debug.ts
265
280
  var debugUtils = {
266
281
  /**
267
282
  * 安全的 JSON 序列化
@@ -305,7 +320,7 @@ var debugUtils = {
305
320
  }
306
321
  };
307
322
 
308
- // src/utils/error.ts
323
+ // src/common/utils/error.ts
309
324
  var errorUtils = {
310
325
  /**
311
326
  * 创建标准化的错误对象
@@ -356,6 +371,6 @@ function cn(...inputs) {
356
371
  return twMerge(clsx(inputs));
357
372
  }
358
373
 
359
- export { arrayUtils, cn, debugUtils, errorUtils, fileUtils, formatTime, japaneseUtils, stringUtils, validators };
360
- //# sourceMappingURL=chunk-3NHAT7D4.mjs.map
361
- //# sourceMappingURL=chunk-3NHAT7D4.mjs.map
374
+ export { arrayUtils, cn, debugUtils, errorUtils, fileUtils, formatTime, japaneseUtils, stringUtils, utils_exports, validators };
375
+ //# sourceMappingURL=chunk-FUA6ZGMI.mjs.map
376
+ //# sourceMappingURL=chunk-FUA6ZGMI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/utils/index.ts","../src/common/utils/time.ts","../src/common/utils/japanese.ts","../src/common/utils/validators.ts","../src/common/utils/file.ts","../src/common/utils/array.ts","../src/common/utils/string.ts","../src/common/utils/debug.ts","../src/common/utils/error.ts","../src/common/utils/cn.ts"],"names":[],"mappings":"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","file":"chunk-FUA6ZGMI.mjs","sourcesContent":["/**\n * @package sa2kit/common/utils\n * 工具函数统一导出\n */\nexport { formatTime } from './time';\nexport { japaneseUtils } from './japanese';\nexport { validators } from './validators';\nexport { fileUtils } from './file';\nexport { arrayUtils } from './array';\nexport { stringUtils } from './string';\nexport { debugUtils } from './debug';\nexport { errorUtils } from './error';\nexport { cn } from './cn';\n","/**\n * 时间格式化工具\n */\n\nexport const formatTime = {\n /**\n * 将秒数转换为 MM:SS 格式\n */\n toMinutesSeconds(seconds: number): string {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 将秒数转换为 HH:MM:SS 格式\n */\n toHoursMinutesSeconds(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n\n if (hours > 0) {\n return hours + ':' + minutes.toString().padStart(2, '0') + ':' + remainingSeconds.toString().padStart(2, '0');\n }\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 格式化日期为用户友好的格式\n */\n formatDate(date: string | Date, locale = 'zh-CN'): string {\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) {\n return locale === 'zh-CN' ? '今天' : 'Today';\n } else if (diffDays === 1) {\n return locale === 'zh-CN' ? '昨天' : 'Yesterday';\n } else if (diffDays < 7) {\n return locale === 'zh-CN' ? diffDays + '天前' : diffDays + ' days ago';\n } else {\n return d.toLocaleDateString(locale);\n }\n },\n};\n\n","/**\n * 日语文本处理工具\n */\n\nexport const japaneseUtils = {\n /**\n * 提取文本中的汉字\n */\n extractKanji(text: string): string[] {\n return text.match(/[\\u4E00-\\u9FAF]/g) || [];\n },\n\n /**\n * 提取文本中的假名\n */\n extractKana(text: string): string[] {\n return text.match(/[\\u3040-\\u309F\\u30A0-\\u30FF]/g) || [];\n },\n\n /**\n * 清理文本,移除特殊字符但保留日语字符\n */\n cleanText(text: string): string {\n return text.replace(/[^\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FAF\\w\\s]/g, '');\n },\n};\n","/**\n * 验证工具\n */\n\nexport const validators = {\n /**\n * 验证邮箱格式\n */\n isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n },\n\n /**\n * 验证密码强度\n */\n isValidPassword(password: string): {\n isValid: boolean;\n errors: string[];\n } {\n const errors: string[] = [];\n\n if (password.length < 6) {\n errors.push('Password must be at least 6 characters');\n }\n\n if (password.length > 50) {\n errors.push('Password must not exceed 50 characters');\n }\n\n if (!/[a-zA-Z]/.test(password)) {\n errors.push('Password must contain at least one letter');\n }\n\n if (!/[0-9]/.test(password)) {\n errors.push('Password must contain at least one number');\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n /**\n * 验证用户名格式\n */\n isValidUsername(username: string): boolean {\n const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/;\n return usernameRegex.test(username);\n },\n\n /**\n * 验证文件大小\n */\n isValidFileSize(size: number, maxSize: number): boolean {\n return size > 0 && size <= maxSize;\n },\n\n /**\n * 验证文件类型\n */\n isValidFileType(type: string, supportedTypes: string[]): boolean {\n return supportedTypes.includes(type);\n },\n\n /**\n * 验证 URL 格式\n */\n isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n },\n};\n\n","/**\n * 文件处理工具\n */\n\nexport const fileUtils = {\n /**\n * 格式化文件大小\n */\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n },\n\n /**\n * 获取文件扩展名\n */\n getFileExtension(filename: string): string {\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2);\n },\n\n /**\n * 生成唯一文件名\n */\n generateUniqueFileName(originalName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 15);\n const extension = this.getFileExtension(originalName);\n const baseName = originalName.replace('.' + (extension), '');\n return extension ? (baseName) + '_' + (timestamp) + '_' + (random) + '.' + (extension) : (baseName) + '_' + (timestamp) + '_' + (random);\n },\n\n /**\n * 验证文件名是否有效\n */\n isValidFilename(filename: string): boolean {\n // 不允许包含特殊字符\n const invalidChars = /[<>:\"/\\\\|?*\\x00-\\x1F]/g;\n return !invalidChars.test(filename) && filename.length > 0 && filename.length <= 255;\n },\n};\n\n","/**\n * 数组和对象工具\n */\n\nexport const arrayUtils = {\n /**\n * 数组去重\n */\n unique<T>(array: T[]): T[] {\n return [...new Set(array)];\n },\n\n /**\n * 数组分组\n */\n groupBy<T>(array: T[], key: keyof T): Record<string, T[]> {\n return array.reduce(\n (groups, item) => {\n const groupKey = String(item[key]);\n const group = groups[groupKey] || [];\n group.push(item);\n groups[groupKey] = group;\n return groups;\n },\n {} as Record<string, T[]>\n );\n },\n\n /**\n * 数组分页\n */\n paginate<T>(\n array: T[],\n page: number,\n limit: number\n ): {\n data: T[];\n total: number;\n page: number;\n pages: number;\n hasNext: boolean;\n hasPrev: boolean;\n } {\n const total = array.length;\n const pages = Math.ceil(total / limit);\n const start = (page - 1) * limit;\n const end = start + limit;\n const data = array.slice(start, end);\n\n return {\n data,\n total,\n page,\n pages,\n hasNext: page < pages,\n hasPrev: page > 1,\n };\n },\n\n /**\n * 数组随机排序\n */\n shuffle<T>(array: T[]): T[] {\n const shuffled = [...array];\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [shuffled[i], shuffled[j]] = [shuffled[j]!, shuffled[i]!];\n }\n return shuffled;\n },\n};\n\n","/**\n * 字符串工具\n */\n\nexport const stringUtils = {\n /**\n * 截断文本\n */\n truncate(text: string, length: number, suffix = '...'): string {\n if (text.length <= length) return text;\n return text.substring(0, length - suffix.length) + suffix;\n },\n\n /**\n * 首字母大写\n */\n capitalize(text: string): string {\n if (!text) return '';\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n },\n\n /**\n * 驼峰转下划线\n */\n camelToSnake(text: string): string {\n return text.replace(/[A-Z]/g, (letter) => '_' + (letter.toLowerCase()));\n },\n\n /**\n * 下划线转驼峰\n */\n snakeToCamel(text: string): string {\n return text.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n },\n\n /**\n * 生成随机字符串\n */\n generateRandom(length: number): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n },\n};\n\n","/**\n * 调试工具\n */\n\nimport { logger } from '../logger';\nimport { fileUtils } from './file';\n\nexport const debugUtils = {\n /**\n * 安全的 JSON 序列化\n */\n safeStringify(obj: any): string {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (error) {\n return '[Circular Reference or Invalid JSON: ' + (error) + ']';\n }\n },\n\n /**\n * 性能计时器\n */\n createTimer(label?: string) {\n const start = typeof performance !== 'undefined' ? performance.now() : Date.now();\n return {\n end: () => {\n const end = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const duration = end - start;\n const message = (label || 'Timer') + ': ' + (duration.toFixed(2)) + 'ms';\n logger.info(message);\n return duration;\n },\n };\n },\n\n /**\n * 内存使用情况(仅在 Node.js 环境)\n */\n getMemoryUsage(): Record<string, string> | null {\n if (typeof process !== 'undefined' && process.memoryUsage) {\n const usage = process.memoryUsage();\n return {\n rss: fileUtils.formatFileSize(usage.rss),\n heapTotal: fileUtils.formatFileSize(usage.heapTotal),\n heapUsed: fileUtils.formatFileSize(usage.heapUsed),\n external: fileUtils.formatFileSize(usage.external),\n };\n }\n return null;\n },\n};\n\n","/**\n * 错误处理工具\n */\n\nexport const errorUtils = {\n /**\n * 创建标准化的错误对象\n */\n createError(\n code: string,\n message: string,\n details?: any\n ): Error & { code: string; details?: any } {\n const error = new Error(message) as Error & { code: string; details?: any };\n error.code = code;\n if (details) {\n error.details = details;\n }\n return error;\n },\n\n /**\n * 安全的错误信息提取\n */\n extractErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n return 'Unknown error';\n },\n\n /**\n * 错误重试机制\n */\n async retry<T>(fn: () => Promise<T>, maxAttempts = 3, delay = 1000): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === maxAttempts) {\n throw lastError;\n }\n\n // 指数退避延迟\n await new Promise((resolve) => setTimeout(resolve, delay * Math.pow(2, attempt - 1)));\n }\n }\n\n throw lastError!;\n },\n};\n\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-FY2X3LYR.mjs.map
3
+ //# sourceMappingURL=chunk-FY2X3LYR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-VRN76M56.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-FY2X3LYR.mjs"}
@@ -1,6 +1,6 @@
1
1
  import { useRef, useState, useCallback } from 'react';
2
2
 
3
- // src/ai/llm/prompt/variables.ts
3
+ // src/common/ai/llm/prompt/variables.ts
4
4
  var normalizePromptVariables = (variables = {}) => {
5
5
  const normalized = {};
6
6
  Object.entries(variables).forEach(([key, value]) => {
@@ -13,7 +13,7 @@ var normalizePromptVariables = (variables = {}) => {
13
13
  return normalized;
14
14
  };
15
15
 
16
- // src/ai/llm/prompt/template.ts
16
+ // src/common/ai/llm/prompt/template.ts
17
17
  var applyPromptTemplate = (template, variables = {}, options = {}) => {
18
18
  if (!template) {
19
19
  return "";
@@ -112,5 +112,5 @@ var useAiChat = (options) => {
112
112
  };
113
113
 
114
114
  export { applyPromptTemplate, normalizePromptVariables, useAiChat };
115
- //# sourceMappingURL=chunk-V7EVKD5G.mjs.map
116
- //# sourceMappingURL=chunk-V7EVKD5G.mjs.map
115
+ //# sourceMappingURL=chunk-GS4SAW25.mjs.map
116
+ //# sourceMappingURL=chunk-GS4SAW25.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/ai/llm/prompt/variables.ts","../src/common/ai/llm/prompt/template.ts","../src/common/ai/llm/hooks/useAiChat.ts"],"names":[],"mappings":"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","file":"chunk-GS4SAW25.mjs","sourcesContent":["export type PromptVariableValue = string | number | boolean | null | undefined;\n\nexport type PromptVariables = Record<string, PromptVariableValue>;\n\nexport const normalizePromptVariables = (\n variables: PromptVariables = {}\n): Record<string, string> => {\n const normalized: Record<string, string> = {};\n\n Object.entries(variables).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n normalized[key] = '';\n } else {\n normalized[key] = String(value);\n }\n });\n\n return normalized;\n};\n","import { normalizePromptVariables, PromptVariables } from './variables';\n\nexport interface PromptTemplateOptions {\n missingValue?: string;\n preserveUnknown?: boolean;\n}\n\nexport const applyPromptTemplate = (\n template: string,\n variables: PromptVariables = {},\n options: PromptTemplateOptions = {}\n): string => {\n if (!template) {\n return '';\n }\n\n const resolved = normalizePromptVariables(variables);\n const missingValue = options.missingValue ?? '';\n\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (_match, key: string) => {\n if (Object.prototype.hasOwnProperty.call(resolved, key)) {\n return resolved[key] ?? '';\n }\n\n return options.preserveUnknown ? `{{${key}}}` : missingValue;\n });\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { applyPromptTemplate } from '../prompt/template';\nimport type {\n AiChatInputOptions,\n AiChatResponse,\n AiChatStatus,\n AiClient,\n AiMessage,\n} from '../types';\n\nexport interface UseAiChatOptions {\n client: AiClient;\n systemPrompt?: string;\n template?: string;\n initialMessages?: AiMessage[];\n}\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const useAiChat = (options: UseAiChatOptions) => {\n const systemPromptRef = useRef(options.systemPrompt);\n const templateRef = useRef(options.template);\n const [messages, setMessages] = useState<AiMessage[]>(() =>\n buildBaseMessages(systemPromptRef.current, options.initialMessages)\n );\n const messagesRef = useRef(messages);\n const [status, setStatus] = useState<AiChatStatus>('idle');\n const [error, setError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<AiChatResponse | null>(null);\n\n const syncMessages = (nextMessages: AiMessage[]) => {\n messagesRef.current = nextMessages;\n setMessages(nextMessages);\n };\n\n const reset = useCallback(() => {\n syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));\n setStatus('idle');\n setError(null);\n setLastResponse(null);\n }, [options.initialMessages]);\n\n const setSystemPrompt = useCallback(\n (prompt?: string) => {\n systemPromptRef.current = prompt;\n reset();\n },\n [reset]\n );\n\n const sendMessage = useCallback(\n async (input: string, requestOptions: AiChatInputOptions = {}) => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? templateRef.current;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messagesRef.current, userMessage];\n syncMessages(nextMessages);\n setStatus('loading');\n setError(null);\n\n try {\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n const updatedMessages = [...nextMessages, assistantMessage];\n syncMessages(updatedMessages);\n setStatus('success');\n setLastResponse(response);\n return response;\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n setStatus('error');\n setError(nextError);\n throw nextError;\n }\n },\n [options.client]\n );\n\n return {\n status,\n isLoading: status === 'loading',\n error,\n messages,\n lastResponse,\n sendMessage,\n reset,\n setSystemPrompt,\n };\n};\n"]}