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,541 +0,0 @@
1
- import { useAiChat } from './chunk-V7EVKD5G.mjs';
2
- import { cn } from './chunk-3NHAT7D4.mjs';
3
- import * as React6 from 'react';
4
- import React6__default, { useState, useRef, useMemo, useEffect } from 'react';
5
- import { cva } from 'class-variance-authority';
6
- import { X } from 'lucide-react';
7
- import { createPortal } from 'react-dom';
8
-
9
- var buttonVariants = cva(
10
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
11
- {
12
- variants: {
13
- variant: {
14
- default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
15
- destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16
- outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
17
- secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
18
- ghost: "hover:bg-accent hover:text-accent-foreground",
19
- link: "text-primary underline-offset-4 hover:underline"
20
- },
21
- size: {
22
- default: "h-9 px-4 py-2",
23
- sm: "h-8 rounded-md px-3 text-xs",
24
- lg: "h-10 rounded-md px-8",
25
- icon: "h-9 w-9"
26
- }
27
- },
28
- defaultVariants: {
29
- variant: "default",
30
- size: "default"
31
- }
32
- }
33
- );
34
- var Button = React6.forwardRef(
35
- ({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
36
- if (asChild && React6.isValidElement(children)) {
37
- const childProps = children.props;
38
- return React6.cloneElement(children, {
39
- ...props,
40
- className: cn(buttonVariants({ variant, size, className }), childProps.className)
41
- });
42
- }
43
- return /* @__PURE__ */ React6.createElement(
44
- "button",
45
- {
46
- className: cn(buttonVariants({ variant, size, className })),
47
- ref,
48
- ...props
49
- },
50
- children
51
- );
52
- }
53
- );
54
- Button.displayName = "Button";
55
- function useControllableState({
56
- value,
57
- defaultValue,
58
- onChange
59
- }) {
60
- const [internal, setInternal] = React6.useState(defaultValue);
61
- const isControlled = value !== void 0;
62
- const state = isControlled ? value : internal;
63
- const setState = React6.useCallback(
64
- (next) => {
65
- if (!isControlled) setInternal(next);
66
- onChange?.(next);
67
- },
68
- [isControlled, onChange]
69
- );
70
- return [state, setState];
71
- }
72
- function Portal({
73
- children,
74
- container
75
- }) {
76
- const [mounted, setMounted] = React6.useState(false);
77
- React6.useEffect(() => {
78
- setMounted(true);
79
- }, []);
80
- if (!mounted) return null;
81
- return createPortal(children, container ?? document.body);
82
- }
83
- function useOnClickOutside(refs, handler, enabled) {
84
- React6.useEffect(() => {
85
- if (!enabled) return;
86
- const listener = (event) => {
87
- const target = event.target;
88
- const clickedInside = refs.some((ref) => {
89
- const el = ref.current;
90
- return el && el.contains(target);
91
- });
92
- if (!clickedInside) {
93
- handler(event);
94
- }
95
- };
96
- document.addEventListener("mousedown", listener);
97
- document.addEventListener("touchstart", listener);
98
- return () => {
99
- document.removeEventListener("mousedown", listener);
100
- document.removeEventListener("touchstart", listener);
101
- };
102
- }, [refs, handler, enabled]);
103
- }
104
- function mergeRefs(...refs) {
105
- return (value) => {
106
- refs.forEach((ref) => {
107
- if (!ref) return;
108
- if (typeof ref === "function") {
109
- ref(value);
110
- } else {
111
- ref.current = value;
112
- }
113
- });
114
- };
115
- }
116
-
117
- // src/components/Dialog.tsx
118
- var DialogContext = React6.createContext(null);
119
- var Dialog = ({ open, defaultOpen = false, onOpenChange, children }) => {
120
- const [isOpen, setIsOpen] = useControllableState({
121
- value: open,
122
- defaultValue: defaultOpen,
123
- onChange: onOpenChange
124
- });
125
- const triggerRef = React6.useRef(null);
126
- const contentRef = React6.useRef(null);
127
- return /* @__PURE__ */ React6.createElement(DialogContext.Provider, { value: { open: isOpen, setOpen: setIsOpen, triggerRef, contentRef } }, children);
128
- };
129
- var DialogTrigger = React6.forwardRef(
130
- ({ children, onClick, ...props }, ref) => {
131
- const ctx = React6.useContext(DialogContext);
132
- if (!ctx) return null;
133
- const mergedRef = mergeRefs(ctx.triggerRef, ref);
134
- const handleClick = (e) => {
135
- ctx.setOpen(true);
136
- onClick?.(e);
137
- };
138
- return /* @__PURE__ */ React6.createElement("button", { ref: mergedRef, type: "button", onClick: handleClick, ...props }, children);
139
- }
140
- );
141
- DialogTrigger.displayName = "DialogTrigger";
142
- var DialogPortal = ({ children }) => {
143
- const ctx = React6.useContext(DialogContext);
144
- if (!ctx?.open) return null;
145
- return /* @__PURE__ */ React6.createElement(Portal, null, children);
146
- };
147
- var DialogClose = React6.forwardRef(({ onClick, ...props }, ref) => {
148
- const ctx = React6.useContext(DialogContext);
149
- return /* @__PURE__ */ React6.createElement(
150
- "button",
151
- {
152
- ref,
153
- type: "button",
154
- onClick: (e) => {
155
- ctx?.setOpen(false);
156
- onClick?.(e);
157
- },
158
- ...props
159
- }
160
- );
161
- });
162
- DialogClose.displayName = "DialogClose";
163
- var DialogOverlay = React6.forwardRef(({ className, ...props }, ref) => {
164
- const ctx = React6.useContext(DialogContext);
165
- if (!ctx?.open) return null;
166
- return /* @__PURE__ */ React6.createElement(
167
- "div",
168
- {
169
- ref,
170
- className: cn("fixed inset-0 z-[9999] bg-black/80", className),
171
- ...props
172
- }
173
- );
174
- });
175
- DialogOverlay.displayName = "DialogOverlay";
176
- var DialogContent = React6.forwardRef(
177
- ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {
178
- const ctx = React6.useContext(DialogContext);
179
- const open = !!ctx?.open;
180
- useOnClickOutside(
181
- [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],
182
- (evt) => {
183
- onPointerDownOutside?.(evt);
184
- if (!evt.defaultPrevented) {
185
- ctx?.setOpen(false);
186
- }
187
- },
188
- open
189
- );
190
- React6.useEffect(() => {
191
- if (!open) return;
192
- const onKey = (e) => {
193
- if (e.key !== "Escape") return;
194
- onEscapeKeyDown?.(e);
195
- if (!e.defaultPrevented) {
196
- ctx?.setOpen(false);
197
- }
198
- };
199
- document.addEventListener("keydown", onKey);
200
- return () => document.removeEventListener("keydown", onKey);
201
- }, [ctx, onEscapeKeyDown, open]);
202
- if (!ctx || !open) return null;
203
- return /* @__PURE__ */ React6.createElement(DialogPortal, null, /* @__PURE__ */ React6.createElement(DialogOverlay, { className: overlayClassName }), /* @__PURE__ */ React6.createElement(
204
- "div",
205
- {
206
- ref: mergeRefs(ctx.contentRef, ref),
207
- className: cn(
208
- "fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg",
209
- className
210
- ),
211
- ...props
212
- },
213
- children,
214
- showCloseButton ? /* @__PURE__ */ React6.createElement(DialogClose, { className: "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100" }, /* @__PURE__ */ React6.createElement(X, { className: "h-4 w-4" }), /* @__PURE__ */ React6.createElement("span", { className: "sr-only" }, "Close")) : null
215
- ));
216
- }
217
- );
218
- DialogContent.displayName = "DialogContent";
219
- var DialogHeader = ({
220
- className,
221
- ...props
222
- }) => /* @__PURE__ */ React6.createElement(
223
- "div",
224
- {
225
- className: cn(
226
- "flex flex-col space-y-1.5 text-center sm:text-left",
227
- className
228
- ),
229
- ...props
230
- }
231
- );
232
- DialogHeader.displayName = "DialogHeader";
233
- var DialogTitle = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
234
- "h2",
235
- {
236
- ref,
237
- className: cn(
238
- "text-lg font-semibold leading-none tracking-tight",
239
- className
240
- ),
241
- ...props
242
- }
243
- ));
244
- DialogTitle.displayName = "DialogTitle";
245
- var DialogDescription = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
246
- "p",
247
- {
248
- ref,
249
- className: cn("text-sm text-muted-foreground", className),
250
- ...props
251
- }
252
- ));
253
- DialogDescription.displayName = "DialogDescription";
254
-
255
- // src/ai/llm/ui/web/components/AiChatDialog.tsx
256
- var AiChatDialog = ({
257
- open,
258
- onOpenChange,
259
- client,
260
- title = "AI \u5BF9\u8BDD",
261
- placeholder = "\u8F93\u5165\u4F60\u60F3\u54A8\u8BE2\u7684\u95EE\u9898...",
262
- systemPrompt,
263
- template,
264
- templateVariables,
265
- initialMessages,
266
- requestOptions,
267
- onResponse,
268
- onError,
269
- className,
270
- contentClassName
271
- }) => {
272
- const { messages, sendMessage, isLoading, error } = useAiChat({
273
- client,
274
- systemPrompt,
275
- template,
276
- initialMessages
277
- });
278
- const [input, setInput] = useState("");
279
- const listRef = useRef(null);
280
- const hasMessages = messages.length > 0;
281
- const helperText = useMemo(() => {
282
- return template ? "\u6A21\u677F\u5DF2\u542F\u7528\uFF0C\u652F\u6301 {{input}} \u53D8\u91CF\u3002" : "\u76F4\u63A5\u8F93\u5165\u5373\u53EF\u5F00\u59CB\u5BF9\u8BDD\u3002";
283
- }, [template]);
284
- useEffect(() => {
285
- if (!listRef.current) return;
286
- listRef.current.scrollTop = listRef.current.scrollHeight;
287
- }, [messages, open, isLoading]);
288
- const handleSend = async () => {
289
- const content = input.trim();
290
- if (!content || isLoading) return;
291
- setInput("");
292
- try {
293
- const response = await sendMessage(content, {
294
- ...requestOptions,
295
- template,
296
- variables: templateVariables
297
- });
298
- onResponse?.(response);
299
- } catch (err) {
300
- const nextError = err instanceof Error ? err : new Error(String(err));
301
- onError?.(nextError);
302
- }
303
- };
304
- const handleKeyDown = (event) => {
305
- if (event.key === "Enter" && !event.shiftKey) {
306
- event.preventDefault();
307
- handleSend();
308
- }
309
- };
310
- return /* @__PURE__ */ React6__default.createElement(Dialog, { open, onOpenChange }, /* @__PURE__ */ React6__default.createElement(
311
- DialogContent,
312
- {
313
- className: cn(
314
- "max-w-3xl border border-slate-200 bg-white p-0",
315
- contentClassName
316
- )
317
- },
318
- /* @__PURE__ */ React6__default.createElement("div", { className: cn("flex flex-col", className) }, /* @__PURE__ */ React6__default.createElement(DialogHeader, { className: "border-b border-slate-100 px-6 py-4" }, /* @__PURE__ */ React6__default.createElement(DialogTitle, { className: "text-base font-semibold text-slate-900" }, title)), /* @__PURE__ */ React6__default.createElement("div", { className: "flex flex-1 flex-col gap-4 px-6 py-4" }, /* @__PURE__ */ React6__default.createElement(
319
- "div",
320
- {
321
- ref: listRef,
322
- className: "max-h-[60vh] min-h-[240px] overflow-y-auto rounded-xl border border-slate-100 bg-slate-50/60 p-4"
323
- },
324
- !hasMessages && /* @__PURE__ */ React6__default.createElement("div", { className: "flex h-full flex-col items-center justify-center gap-2 text-sm text-slate-400" }, /* @__PURE__ */ React6__default.createElement("span", null, "\u6682\u65E0\u5BF9\u8BDD\u5185\u5BB9"), /* @__PURE__ */ React6__default.createElement("span", null, "\u8F93\u5165\u6D88\u606F\u5F00\u59CB\u4F53\u9A8C AI \u5BF9\u8BDD\u3002")),
325
- /* @__PURE__ */ React6__default.createElement("div", { className: "flex flex-col gap-3" }, messages.map((message, index) => {
326
- const isUser = message.role === "user";
327
- return /* @__PURE__ */ React6__default.createElement(
328
- "div",
329
- {
330
- key: `${message.role}-${index}`,
331
- className: cn(
332
- "max-w-[85%] whitespace-pre-wrap rounded-2xl px-4 py-2 text-sm leading-relaxed",
333
- isUser ? "ml-auto bg-slate-900 text-white" : "mr-auto border border-slate-200 bg-white text-slate-800"
334
- )
335
- },
336
- message.content
337
- );
338
- }), isLoading && /* @__PURE__ */ React6__default.createElement("div", { className: "mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-500" }, "AI \u6B63\u5728\u601D\u8003..."))
339
- ), /* @__PURE__ */ React6__default.createElement("div", { className: "rounded-xl border border-slate-100 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React6__default.createElement(
340
- "textarea",
341
- {
342
- value: input,
343
- onChange: (event) => setInput(event.target.value),
344
- onKeyDown: handleKeyDown,
345
- placeholder,
346
- className: "min-h-[96px] w-full resize-none rounded-lg border border-slate-200 px-3 py-2 text-sm text-slate-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300"
347
- }
348
- ), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-3 flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React6__default.createElement("span", { className: "text-xs text-slate-400" }, helperText), /* @__PURE__ */ React6__default.createElement(Button, { onClick: handleSend, disabled: !input.trim() || isLoading }, isLoading ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001")), error && /* @__PURE__ */ React6__default.createElement("div", { className: "mt-2 rounded-md border border-rose-200 bg-rose-50 px-3 py-2 text-xs text-rose-600" }, error.message || "\u5BF9\u8BDD\u51FA\u9519\uFF0C\u8BF7\u91CD\u8BD5\u3002"))))
349
- ));
350
- };
351
- var Input = React6.forwardRef(
352
- ({ className, type, ...props }, ref) => {
353
- return /* @__PURE__ */ React6.createElement(
354
- "input",
355
- {
356
- type,
357
- className: cn(
358
- "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
359
- className
360
- ),
361
- ref,
362
- ...props
363
- }
364
- );
365
- }
366
- );
367
- Input.displayName = "Input";
368
-
369
- // src/ai/llm/ui/web/components/AiConfigPage.tsx
370
- var DEFAULT_AI_CONFIG = {
371
- apiKey: "",
372
- baseUrl: "https://api.openai.com/v1",
373
- model: "gpt-3.5-turbo",
374
- systemPrompt: "",
375
- template: "{{input}}",
376
- temperature: 0.7,
377
- topP: 1,
378
- maxTokens: 1024
379
- };
380
- var mergeConfig = (base, overrides, stored) => {
381
- return {
382
- ...base,
383
- ...overrides ?? {},
384
- ...stored ?? {}
385
- };
386
- };
387
- var AiConfigPage = ({
388
- storageKey = "sa2kit-ai-config",
389
- initialConfig,
390
- title = "AI \u914D\u7F6E",
391
- description = "\u914D\u7F6E API Key\u3001\u6A21\u578B\u4E0E\u63D0\u793A\u8BCD\u6A21\u677F\uFF0C\u7528\u4E8E AI \u5BF9\u8BDD\u80FD\u529B\u3002",
392
- onSave,
393
- onChange
394
- }) => {
395
- const baseConfig = useMemo(
396
- () => mergeConfig(DEFAULT_AI_CONFIG, initialConfig),
397
- [initialConfig]
398
- );
399
- const [config, setConfig] = useState(baseConfig);
400
- const [status, setStatus] = useState(null);
401
- const [showApiKey, setShowApiKey] = useState(false);
402
- useEffect(() => {
403
- if (typeof window === "undefined") {
404
- return;
405
- }
406
- if (!storageKey) {
407
- return;
408
- }
409
- const storedRaw = localStorage.getItem(storageKey);
410
- if (!storedRaw) {
411
- return;
412
- }
413
- try {
414
- const stored = JSON.parse(storedRaw);
415
- setConfig(mergeConfig(DEFAULT_AI_CONFIG, initialConfig, stored));
416
- } catch (error) {
417
- console.warn("[AiConfigPage] Failed to parse stored config:", error);
418
- }
419
- }, [storageKey, initialConfig]);
420
- const updateConfig = (updates) => {
421
- setConfig((prev) => {
422
- const next = { ...prev, ...updates };
423
- onChange?.(next);
424
- return next;
425
- });
426
- };
427
- const updateNumber = (key, value) => {
428
- const nextValue = Number(value);
429
- if (Number.isNaN(nextValue)) {
430
- return;
431
- }
432
- updateConfig({ [key]: nextValue });
433
- };
434
- const saveConfig = () => {
435
- if (typeof window !== "undefined" && storageKey) {
436
- try {
437
- localStorage.setItem(storageKey, JSON.stringify(config));
438
- } catch (error) {
439
- setStatus({ type: "error", text: "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6D4F\u89C8\u5668\u5B58\u50A8\u6743\u9650\u3002" });
440
- return;
441
- }
442
- }
443
- setStatus({ type: "success", text: "\u5DF2\u4FDD\u5B58\u914D\u7F6E\u3002" });
444
- onSave?.(config);
445
- };
446
- const resetConfig = () => {
447
- const next = mergeConfig(DEFAULT_AI_CONFIG, initialConfig);
448
- setConfig(next);
449
- onChange?.(next);
450
- if (typeof window !== "undefined" && storageKey) {
451
- localStorage.removeItem(storageKey);
452
- }
453
- setStatus({ type: "success", text: "\u5DF2\u6062\u590D\u9ED8\u8BA4\u914D\u7F6E\u3002" });
454
- };
455
- return /* @__PURE__ */ React6__default.createElement("div", { className: "w-full rounded-2xl border border-slate-200 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React6__default.createElement("div", { className: "flex flex-col gap-2 border-b border-slate-100 pb-4" }, /* @__PURE__ */ React6__default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, title), /* @__PURE__ */ React6__default.createElement("p", { className: "text-sm text-slate-500" }, description)), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-6 grid gap-6" }, /* @__PURE__ */ React6__default.createElement("section", { className: "rounded-xl border border-slate-100 bg-slate-50/60 p-4" }, /* @__PURE__ */ React6__default.createElement("h3", { className: "text-sm font-semibold text-slate-700" }, "API \u4FE1\u606F"), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-4 grid gap-4" }, /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "Base URL"), /* @__PURE__ */ React6__default.createElement(
456
- Input,
457
- {
458
- value: config.baseUrl,
459
- onChange: (event) => updateConfig({ baseUrl: event.target.value }),
460
- placeholder: "https://api.openai.com/v1",
461
- className: "mt-2"
462
- }
463
- )), /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "API Key"), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-2 flex gap-2" }, /* @__PURE__ */ React6__default.createElement(
464
- Input,
465
- {
466
- value: config.apiKey,
467
- onChange: (event) => updateConfig({ apiKey: event.target.value }),
468
- placeholder: "sk-...",
469
- type: showApiKey ? "text" : "password"
470
- }
471
- ), /* @__PURE__ */ React6__default.createElement(
472
- Button,
473
- {
474
- type: "button",
475
- variant: "outline",
476
- onClick: () => setShowApiKey((prev) => !prev)
477
- },
478
- showApiKey ? "\u9690\u85CF" : "\u663E\u793A"
479
- ))), /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "\u6A21\u578B"), /* @__PURE__ */ React6__default.createElement(
480
- Input,
481
- {
482
- value: config.model,
483
- onChange: (event) => updateConfig({ model: event.target.value }),
484
- placeholder: "gpt-3.5-turbo",
485
- className: "mt-2"
486
- }
487
- )))), /* @__PURE__ */ React6__default.createElement("section", { className: "rounded-xl border border-slate-100 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React6__default.createElement("h3", { className: "text-sm font-semibold text-slate-700" }, "\u63D0\u793A\u8BCD\u4E0E\u4E0A\u4E0B\u6587"), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-4 grid gap-4" }, /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "\u7CFB\u7EDF\u63D0\u793A\u8BCD"), /* @__PURE__ */ React6__default.createElement(
488
- "textarea",
489
- {
490
- value: config.systemPrompt,
491
- onChange: (event) => updateConfig({ systemPrompt: event.target.value }),
492
- placeholder: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684 AI \u52A9\u624B...",
493
- className: "mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300"
494
- }
495
- )), /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "\u63D0\u793A\u8BCD\u6A21\u677F"), /* @__PURE__ */ React6__default.createElement(
496
- "textarea",
497
- {
498
- value: config.template,
499
- onChange: (event) => updateConfig({ template: event.target.value }),
500
- placeholder: "\u8BF7\u56DE\u7B54\uFF1A{{input}}",
501
- className: "mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300"
502
- }
503
- ), /* @__PURE__ */ React6__default.createElement("p", { className: "mt-2 text-xs text-slate-400" }, "\u652F\u6301\u53D8\u91CF\u63D2\u5165\uFF1A", /* @__PURE__ */ React6__default.createElement("code", { className: "rounded bg-slate-100 px-1" }, "{{input}}"))))), /* @__PURE__ */ React6__default.createElement("section", { className: "rounded-xl border border-slate-100 bg-slate-50/60 p-4" }, /* @__PURE__ */ React6__default.createElement("h3", { className: "text-sm font-semibold text-slate-700" }, "\u6A21\u578B\u53C2\u6570"), /* @__PURE__ */ React6__default.createElement("div", { className: "mt-4 grid gap-4 md:grid-cols-3" }, /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "Temperature"), /* @__PURE__ */ React6__default.createElement(
504
- Input,
505
- {
506
- type: "number",
507
- value: config.temperature,
508
- onChange: (event) => updateNumber("temperature", event.target.value),
509
- className: "mt-2"
510
- }
511
- )), /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "Top P"), /* @__PURE__ */ React6__default.createElement(
512
- Input,
513
- {
514
- type: "number",
515
- value: config.topP,
516
- onChange: (event) => updateNumber("topP", event.target.value),
517
- className: "mt-2"
518
- }
519
- )), /* @__PURE__ */ React6__default.createElement("div", null, /* @__PURE__ */ React6__default.createElement("label", { className: "text-xs font-medium text-slate-500" }, "Max Tokens"), /* @__PURE__ */ React6__default.createElement(
520
- Input,
521
- {
522
- type: "number",
523
- value: config.maxTokens,
524
- onChange: (event) => updateNumber("maxTokens", event.target.value),
525
- className: "mt-2"
526
- }
527
- )))), /* @__PURE__ */ React6__default.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React6__default.createElement(Button, { onClick: saveConfig }, "\u4FDD\u5B58\u914D\u7F6E"), /* @__PURE__ */ React6__default.createElement(Button, { variant: "outline", onClick: resetConfig }, "\u6062\u590D\u9ED8\u8BA4"), status && /* @__PURE__ */ React6__default.createElement(
528
- "span",
529
- {
530
- className: cn(
531
- "text-xs",
532
- status.type === "success" ? "text-emerald-600" : "text-rose-600"
533
- )
534
- },
535
- status.text
536
- ))));
537
- };
538
-
539
- export { AiChatDialog, AiConfigPage };
540
- //# sourceMappingURL=chunk-FHIE5MTC.mjs.map
541
- //# sourceMappingURL=chunk-FHIE5MTC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Button.tsx","../src/components/internal/ui-core.tsx","../src/components/Dialog.tsx","../src/ai/llm/ui/web/components/AiChatDialog.tsx","../src/components/Input.tsx","../src/ai/llm/ui/web/components/AiConfigPage.tsx"],"names":["React","React2","React3","useState","useRef","useEffect","React5","useMemo"],"mappings":"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","file":"chunk-FHIE5MTC.mjs","sourcesContent":["import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { className?: string }\n return React.cloneElement(children, {\n ...(props as object),\n className: cn(buttonVariants({ variant, size, className }), childProps.className),\n })\n }\n\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}) {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n return [state, setState] as const;\n}\n\nexport function Portal({\n children,\n container,\n}: {\n children: React.ReactNode;\n container?: Element | null;\n}) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return createPortal(children, container ?? document.body);\n}\n\nexport function useOnClickOutside(\n refs: Array<React.RefObject<HTMLElement | null>>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled: boolean\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n const clickedInside = refs.some((ref) => {\n const el = ref.current;\n return el && el.contains(target);\n });\n if (!clickedInside) {\n handler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [refs, handler, enabled]);\n}\n\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DialogContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\ninterface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(true)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nDialogTrigger.displayName = \"DialogTrigger\"\n\nconst DialogPortal = ({ children }: { children: React.ReactNode }) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return <Portal>{children}</Portal>\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={(e) => {\n ctx?.setOpen(false)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return (\n <div\n ref={ref}\n className={cn(\"fixed inset-0 z-[9999] bg-black/80\", className)}\n {...(props as any)}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nexport interface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n onPointerDownOutside?: (event: PointerEvent) => void\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n showCloseButton?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n const open = !!ctx?.open\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n (evt) => {\n onPointerDownOutside?.(evt as PointerEvent)\n if (!(evt as Event).defaultPrevented) {\n ctx?.setOpen(false)\n }\n },\n open\n )\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return\n onEscapeKeyDown?.(e)\n if (!e.defaultPrevented) {\n ctx?.setOpen(false)\n }\n }\n document.addEventListener(\"keydown\", onKey)\n return () => document.removeEventListener(\"keydown\", onKey)\n }, [ctx, onEscapeKeyDown, open])\n\n if (!ctx || !open) return null\n\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg\",\n className\n )}\n {...(props as any)}\n >\n {children}\n {showCloseButton ? (\n <DialogClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n ) : null}\n </div>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...(props as any)}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","'use client';\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '../../../../../components/Button';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../../../../../components/Dialog';\nimport { cn } from '../../../../../utils/cn';\nimport { useAiChat } from '../../../hooks/useAiChat';\nimport type { AiChatDialogProps } from '../../types';\n\ntype WebAiChatDialogProps = AiChatDialogProps & {\n className?: string;\n contentClassName?: string;\n};\n\nexport const AiChatDialog: React.FC<WebAiChatDialogProps> = ({\n open,\n onOpenChange,\n client,\n title = 'AI 对话',\n placeholder = '输入你想咨询的问题...',\n systemPrompt,\n template,\n templateVariables,\n initialMessages,\n requestOptions,\n onResponse,\n onError,\n className,\n contentClassName,\n}) => {\n const { messages, sendMessage, isLoading, error } = useAiChat({\n client,\n systemPrompt,\n template,\n initialMessages,\n });\n const [input, setInput] = useState('');\n const listRef = useRef<HTMLDivElement>(null);\n\n const hasMessages = messages.length > 0;\n const helperText = useMemo(() => {\n return template ? '模板已启用,支持 {{input}} 变量。' : '直接输入即可开始对话。';\n }, [template]);\n\n useEffect(() => {\n if (!listRef.current) return;\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }, [messages, open, isLoading]);\n\n const handleSend = async () => {\n const content = input.trim();\n if (!content || isLoading) return;\n setInput('');\n try {\n const response = await sendMessage(content, {\n ...requestOptions,\n template,\n variables: templateVariables,\n });\n onResponse?.(response);\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n onError?.(nextError);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n handleSend();\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={cn(\n 'max-w-3xl border border-slate-200 bg-white p-0',\n contentClassName\n )}\n >\n <div className={cn('flex flex-col', className)}>\n <DialogHeader className=\"border-b border-slate-100 px-6 py-4\">\n <DialogTitle className=\"text-base font-semibold text-slate-900\">{title}</DialogTitle>\n </DialogHeader>\n\n <div className=\"flex flex-1 flex-col gap-4 px-6 py-4\">\n <div\n ref={listRef}\n className=\"max-h-[60vh] min-h-[240px] overflow-y-auto rounded-xl border border-slate-100 bg-slate-50/60 p-4\"\n >\n {!hasMessages && (\n <div className=\"flex h-full flex-col items-center justify-center gap-2 text-sm text-slate-400\">\n <span>暂无对话内容</span>\n <span>输入消息开始体验 AI 对话。</span>\n </div>\n )}\n <div className=\"flex flex-col gap-3\">\n {messages.map((message, index) => {\n const isUser = message.role === 'user';\n return (\n <div\n key={`${message.role}-${index}`}\n className={cn(\n 'max-w-[85%] whitespace-pre-wrap rounded-2xl px-4 py-2 text-sm leading-relaxed',\n isUser\n ? 'ml-auto bg-slate-900 text-white'\n : 'mr-auto border border-slate-200 bg-white text-slate-800'\n )}\n >\n {message.content}\n </div>\n );\n })}\n {isLoading && (\n <div className=\"mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-500\">\n AI 正在思考...\n </div>\n )}\n </div>\n </div>\n\n <div className=\"rounded-xl border border-slate-100 bg-white p-4 shadow-sm\">\n <textarea\n value={input}\n onChange={(event) => setInput(event.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"min-h-[96px] w-full resize-none rounded-lg border border-slate-200 px-3 py-2 text-sm text-slate-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n <div className=\"mt-3 flex flex-wrap items-center justify-between gap-3\">\n <span className=\"text-xs text-slate-400\">{helperText}</span>\n <Button onClick={handleSend} disabled={!input.trim() || isLoading}>\n {isLoading ? '发送中...' : '发送'}\n </Button>\n </div>\n {error && (\n <div className=\"mt-2 rounded-md border border-rose-200 bg-rose-50 px-3 py-2 text-xs text-rose-600\">\n {error.message || '对话出错,请重试。'}\n </div>\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","'use client';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Button } from '../../../../../components/Button';\nimport { Input } from '../../../../../components/Input';\nimport { cn } from '../../../../../utils/cn';\nimport type { AiConfigPageProps, AiUiConfig } from '../../types';\n\nconst DEFAULT_AI_CONFIG: AiUiConfig = {\n apiKey: '',\n baseUrl: 'https://api.openai.com/v1',\n model: 'gpt-3.5-turbo',\n systemPrompt: '',\n template: '{{input}}',\n temperature: 0.7,\n topP: 1,\n maxTokens: 1024,\n};\n\nconst mergeConfig = (\n base: AiUiConfig,\n overrides?: Partial<AiUiConfig>,\n stored?: Partial<AiUiConfig>\n): AiUiConfig => {\n return {\n ...base,\n ...(overrides ?? {}),\n ...(stored ?? {}),\n };\n};\n\nexport const AiConfigPage: React.FC<AiConfigPageProps> = ({\n storageKey = 'sa2kit-ai-config',\n initialConfig,\n title = 'AI 配置',\n description = '配置 API Key、模型与提示词模板,用于 AI 对话能力。',\n onSave,\n onChange,\n}) => {\n const baseConfig = useMemo(\n () => mergeConfig(DEFAULT_AI_CONFIG, initialConfig),\n [initialConfig]\n );\n const [config, setConfig] = useState<AiUiConfig>(baseConfig);\n const [status, setStatus] = useState<{ type: 'success' | 'error'; text: string } | null>(null);\n const [showApiKey, setShowApiKey] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n if (!storageKey) {\n return;\n }\n const storedRaw = localStorage.getItem(storageKey);\n if (!storedRaw) {\n return;\n }\n try {\n const stored = JSON.parse(storedRaw) as Partial<AiUiConfig>;\n setConfig(mergeConfig(DEFAULT_AI_CONFIG, initialConfig, stored));\n } catch (error) {\n console.warn('[AiConfigPage] Failed to parse stored config:', error);\n }\n }, [storageKey, initialConfig]);\n\n const updateConfig = (updates: Partial<AiUiConfig>) => {\n setConfig((prev) => {\n const next = { ...prev, ...updates };\n onChange?.(next);\n return next;\n });\n };\n\n const updateNumber = (key: keyof AiUiConfig, value: string) => {\n const nextValue = Number(value);\n if (Number.isNaN(nextValue)) {\n return;\n }\n updateConfig({ [key]: nextValue } as Partial<AiUiConfig>);\n };\n\n const saveConfig = () => {\n if (typeof window !== 'undefined' && storageKey) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(config));\n } catch (error) {\n setStatus({ type: 'error', text: '保存失败,请检查浏览器存储权限。' });\n return;\n }\n }\n setStatus({ type: 'success', text: '已保存配置。' });\n onSave?.(config);\n };\n\n const resetConfig = () => {\n const next = mergeConfig(DEFAULT_AI_CONFIG, initialConfig);\n setConfig(next);\n onChange?.(next);\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n setStatus({ type: 'success', text: '已恢复默认配置。' });\n };\n\n return (\n <div className=\"w-full rounded-2xl border border-slate-200 bg-white p-6 shadow-sm\">\n <div className=\"flex flex-col gap-2 border-b border-slate-100 pb-4\">\n <h2 className=\"text-xl font-semibold text-slate-900\">{title}</h2>\n <p className=\"text-sm text-slate-500\">{description}</p>\n </div>\n\n <div className=\"mt-6 grid gap-6\">\n <section className=\"rounded-xl border border-slate-100 bg-slate-50/60 p-4\">\n <h3 className=\"text-sm font-semibold text-slate-700\">API 信息</h3>\n <div className=\"mt-4 grid gap-4\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Base URL</label>\n <Input\n value={config.baseUrl}\n onChange={(event) => updateConfig({ baseUrl: event.target.value })}\n placeholder=\"https://api.openai.com/v1\"\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">API Key</label>\n <div className=\"mt-2 flex gap-2\">\n <Input\n value={config.apiKey}\n onChange={(event) => updateConfig({ apiKey: event.target.value })}\n placeholder=\"sk-...\"\n type={showApiKey ? 'text' : 'password'}\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setShowApiKey((prev) => !prev)}\n >\n {showApiKey ? '隐藏' : '显示'}\n </Button>\n </div>\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">模型</label>\n <Input\n value={config.model}\n onChange={(event) => updateConfig({ model: event.target.value })}\n placeholder=\"gpt-3.5-turbo\"\n className=\"mt-2\"\n />\n </div>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-slate-100 bg-white p-4 shadow-sm\">\n <h3 className=\"text-sm font-semibold text-slate-700\">提示词与上下文</h3>\n <div className=\"mt-4 grid gap-4\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">系统提示词</label>\n <textarea\n value={config.systemPrompt}\n onChange={(event) => updateConfig({ systemPrompt: event.target.value })}\n placeholder=\"你是一个专业的 AI 助手...\"\n className=\"mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">提示词模板</label>\n <textarea\n value={config.template}\n onChange={(event) => updateConfig({ template: event.target.value })}\n placeholder=\"请回答:{{input}}\"\n className=\"mt-2 min-h-[96px] w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300\"\n />\n <p className=\"mt-2 text-xs text-slate-400\">\n 支持变量插入:<code className=\"rounded bg-slate-100 px-1\">{\"{{input}}\"}</code>\n </p>\n </div>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-slate-100 bg-slate-50/60 p-4\">\n <h3 className=\"text-sm font-semibold text-slate-700\">模型参数</h3>\n <div className=\"mt-4 grid gap-4 md:grid-cols-3\">\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Temperature</label>\n <Input\n type=\"number\"\n value={config.temperature}\n onChange={(event) => updateNumber('temperature', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Top P</label>\n <Input\n type=\"number\"\n value={config.topP}\n onChange={(event) => updateNumber('topP', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-slate-500\">Max Tokens</label>\n <Input\n type=\"number\"\n value={config.maxTokens}\n onChange={(event) => updateNumber('maxTokens', event.target.value)}\n className=\"mt-2\"\n />\n </div>\n </div>\n </section>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button onClick={saveConfig}>保存配置</Button>\n <Button variant=\"outline\" onClick={resetConfig}>\n 恢复默认\n </Button>\n {status && (\n <span\n className={cn(\n 'text-xs',\n status.type === 'success' ? 'text-emerald-600' : 'text-rose-600'\n )}\n >\n {status.text}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n};\n"]}