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 +0,0 @@
1
- {"version":3,"sources":["../../../src/mmd/admin/types.ts","../../../src/mmd/admin/components/MmdResourceSelector.tsx","../../../src/mmd/admin/components/MmdPlaylistEditor.tsx","../../../src/mmd/admin/components/MmdAdminPanel.tsx","../../../src/mmd/admin/utils.ts","../../../src/mmd/server/drizzle-schema.ts"],"names":["useState","React","Film","FileText","Music","useCallback","useEffect","JSZip","Upload","CheckCircle2","X","Loader2","AlertTriangle","Search","clsx","index","Save","Settings","ChevronUp","ChevronDown","Plus","GripVertical","Trash2","List","Database","BarChart3","pgTable","uuid","varchar","text","boolean","integer","json","timestamp","relations"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * MMD 后台管理类型定义\n * \n * 这个文件定义了MMD后台管理系统的所有TypeScript类型\n * 包括前端组件使用的类型和后端API的类型\n * \n * @package sa2kit/mmd/admin\n */\n\nimport type { FileMetadata } from '../../universalFile/types';\nimport type { \n MMDResources, \n MMDPlaylistNode, \n MMDPlaylistConfig,\n MMDResourceItem,\n ResourceOption \n} from '../types';\n\n// ============= 数据库映射类型 =============\n\n/**\n * 播放列表配置(数据库格式)\n */\nexport interface MmdPlaylistDB {\n id: string;\n name: string;\n description?: string;\n loop: boolean;\n preloadStrategy: 'none' | 'next' | 'all';\n autoPlay: boolean;\n thumbnailFileId?: string;\n status: 'draft' | 'published' | 'archived';\n sortOrder: number;\n config?: Record<string, any>;\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n deletedAt?: Date;\n}\n\n/**\n * 播放节点配置(数据库格式)\n */\nexport interface MmdPlaylistNodeDB {\n id: string;\n playlistId: string;\n name: string;\n description?: string;\n loop: boolean;\n duration?: number;\n thumbnailFileId?: string;\n sortOrder: number;\n modelFileId: string;\n motionFileId?: string;\n cameraFileId?: string;\n audioFileId?: string;\n stageModelFileId?: string;\n additionalMotionFileIds?: string[];\n config?: Record<string, any>;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * 资源选项配置(数据库格式)\n */\nexport interface MmdResourceOptionDB {\n id: string;\n name: string;\n description?: string;\n resourceType: 'model' | 'motion' | 'camera' | 'audio' | 'stage';\n fileId: string;\n thumbnailFileId?: string;\n tags?: string[];\n sortOrder: number;\n isActive: boolean;\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * 预设项配置(数据库格式)\n */\nexport interface MmdPresetItemDB {\n id: string;\n name: string;\n description?: string;\n thumbnailFileId?: string;\n modelFileId: string;\n motionFileId?: string;\n cameraFileId?: string;\n audioFileId?: string;\n stageModelFileId?: string;\n additionalMotionFileIds?: string[];\n sortOrder: number;\n isActive: boolean;\n tags?: string[];\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n}\n\n// ============= 前端展示类型 =============\n\n/**\n * 播放列表配置(包含文件URL映射)\n */\nexport interface MmdPlaylistWithFiles extends Omit<MmdPlaylistDB, 'thumbnailFileId'> {\n thumbnailUrl?: string;\n nodes: MmdPlaylistNodeWithFiles[];\n}\n\n/**\n * 播放节点配置(包含文件URL映射)\n */\nexport interface MmdPlaylistNodeWithFiles extends Omit<\n MmdPlaylistNodeDB,\n 'modelFileId' | 'motionFileId' | 'cameraFileId' | 'audioFileId' | 'stageModelFileId' | 'thumbnailFileId' | 'additionalMotionFileIds'\n> {\n thumbnailUrl?: string;\n modelUrl: string;\n motionUrl?: string;\n cameraUrl?: string;\n audioUrl?: string;\n stageModelUrl?: string;\n additionalMotionUrls?: string[];\n}\n\n/**\n * 资源选项配置(包含文件URL映射)\n */\nexport interface MmdResourceOptionWithFile extends Omit<MmdResourceOptionDB, 'fileId' | 'thumbnailFileId'> {\n fileUrl: string;\n thumbnailUrl?: string;\n fileMetadata?: Partial<FileMetadata>;\n}\n\n/**\n * 预设项配置(包含文件URL映射)\n */\nexport interface MmdPresetItemWithFiles extends Omit<\n MmdPresetItemDB,\n 'modelFileId' | 'motionFileId' | 'cameraFileId' | 'audioFileId' | 'stageModelFileId' | 'thumbnailFileId' | 'additionalMotionFileIds'\n> {\n thumbnailUrl?: string;\n modelUrl: string;\n motionUrl?: string;\n cameraUrl?: string;\n audioUrl?: string;\n stageModelUrl?: string;\n additionalMotionUrls?: string[];\n}\n\n// ============= API 请求/响应类型 =============\n\n/**\n * 创建播放列表请求\n */\nexport interface CreatePlaylistRequest {\n name: string;\n description?: string;\n loop?: boolean;\n preloadStrategy?: 'none' | 'next' | 'all';\n autoPlay?: boolean;\n thumbnailFileId?: string;\n config?: Record<string, any>;\n}\n\n/**\n * 更新播放列表请求\n */\nexport interface UpdatePlaylistRequest extends Partial<CreatePlaylistRequest> {\n status?: 'draft' | 'published' | 'archived';\n sortOrder?: number;\n}\n\n/**\n * 创建播放节点请求\n */\nexport interface CreatePlaylistNodeRequest {\n playlistId: string;\n name: string;\n description?: string;\n loop?: boolean;\n duration?: number;\n thumbnailFileId?: string;\n sortOrder?: number;\n modelFileId: string;\n motionFileId?: string;\n cameraFileId?: string;\n audioFileId?: string;\n stageModelFileId?: string;\n additionalMotionFileIds?: string[];\n config?: Record<string, any>;\n}\n\n/**\n * 更新播放节点请求\n */\nexport interface UpdatePlaylistNodeRequest extends Partial<Omit<CreatePlaylistNodeRequest, 'playlistId'>> {}\n\n/**\n * 创建资源选项请求\n */\nexport interface CreateResourceOptionRequest {\n name: string;\n description?: string;\n resourceType: 'model' | 'motion' | 'camera' | 'audio' | 'stage';\n fileId: string;\n thumbnailFileId?: string;\n tags?: string[];\n sortOrder?: number;\n}\n\n/**\n * 更新资源选项请求\n */\nexport interface UpdateResourceOptionRequest extends Partial<CreateResourceOptionRequest> {\n isActive?: boolean;\n}\n\n/**\n * 创建预设项请求\n */\nexport interface CreatePresetItemRequest {\n name: string;\n description?: string;\n thumbnailFileId?: string;\n modelFileId: string;\n motionFileId?: string;\n cameraFileId?: string;\n audioFileId?: string;\n stageModelFileId?: string;\n additionalMotionFileIds?: string[];\n tags?: string[];\n sortOrder?: number;\n}\n\n/**\n * 更新预设项请求\n */\nexport interface UpdatePresetItemRequest extends Partial<CreatePresetItemRequest> {\n isActive?: boolean;\n}\n\n/**\n * 分页查询参数\n */\nexport interface PaginationQuery {\n page?: number;\n pageSize?: number;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * 播放列表查询参数\n */\nexport interface PlaylistQuery extends PaginationQuery {\n status?: 'draft' | 'published' | 'archived';\n createdBy?: string;\n search?: string;\n}\n\n/**\n * 资源选项查询参数\n */\nexport interface ResourceOptionQuery extends PaginationQuery {\n resourceType?: 'model' | 'motion' | 'camera' | 'audio' | 'stage';\n tags?: string[];\n isActive?: boolean;\n search?: string;\n}\n\n/**\n * 预设项查询参数\n */\nexport interface PresetItemQuery extends PaginationQuery {\n tags?: string[];\n isActive?: boolean;\n search?: string;\n}\n\n/**\n * 分页响应\n */\nexport interface PaginationResponse<T> {\n items: T[];\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n}\n\n// ============= 转换辅助类型 =============\n\n/**\n * 文件ID到URL的映射\n */\nexport interface FileIdToUrlMap {\n [fileId: string]: string;\n}\n\n/**\n * 批量文件URL查询响应\n */\nexport interface BatchFileUrlsResponse {\n fileUrls: FileIdToUrlMap;\n missingFileIds: string[];\n}\n\n/**\n * MMD资源文件上传配置\n */\nexport interface MmdFileUploadConfig {\n /** 模块ID(用于文件分类) */\n moduleId: 'mmd-models' | 'mmd-motions' | 'mmd-cameras' | 'mmd-audios' | 'mmd-stages' | 'mmd-thumbnails';\n /** 允许的文件类型 */\n acceptedTypes: string[];\n /** 最大文件大小(MB) */\n maxFileSize: number;\n /** 文件描述 */\n description: string;\n /** 额外提示 */\n hint?: string;\n}\n\n/**\n * MMD资源类型配置映射\n */\nexport const MMD_RESOURCE_TYPE_CONFIGS: Record<string, MmdFileUploadConfig> = {\n model: {\n moduleId: 'mmd-models',\n acceptedTypes: ['.zip'],\n maxFileSize: 150,\n description: 'MMD模型压缩包 (ZIP)',\n hint: '请上传包含 PMX/贴图等完整目录的 ZIP 压缩包,保持原始文件结构',\n },\n motion: {\n moduleId: 'mmd-motions',\n acceptedTypes: ['.vmd'],\n maxFileSize: 20,\n description: 'MMD动作文件',\n },\n camera: {\n moduleId: 'mmd-cameras',\n acceptedTypes: ['.vmd'],\n maxFileSize: 10,\n description: 'MMD相机动画文件',\n },\n audio: {\n moduleId: 'mmd-audios',\n acceptedTypes: ['.mp3', '.wav', '.ogg', '.m4a'],\n maxFileSize: 20,\n description: '音频文件',\n },\n stage: {\n moduleId: 'mmd-stages',\n acceptedTypes: ['.zip'],\n maxFileSize: 200,\n description: '舞台/场景压缩包 (ZIP)',\n hint: '需将舞台模型与依赖贴图一起打包 ZIP,并保持目录结构',\n },\n thumbnail: {\n moduleId: 'mmd-thumbnails',\n acceptedTypes: ['.jpg', '.jpeg', '.png', '.webp'],\n maxFileSize: 5,\n description: '缩略图',\n },\n};\n\n// ============= 组件属性类型 =============\n\n/**\n * MMD后台管理器组件属性\n */\nexport interface MmdAdminPanelProps {\n /** UniversalFile服务实例(用于文件上传) */\n fileService: any; // UniversalFileService\n /** 当前用户ID */\n userId: string;\n /** API基础路径 */\n apiBaseUrl?: string;\n /** 是否显示高级选项 */\n showAdvancedOptions?: boolean;\n /** 自定义样式类名 */\n className?: string;\n}\n\n/**\n * 播放列表编辑器组件属性\n */\nexport interface PlaylistEditorProps {\n /** 播放列表ID(编辑模式)或 undefined(创建模式) */\n playlistId?: string;\n /** UniversalFile服务实例 */\n fileService: any;\n /** 当前用户ID */\n userId: string;\n /** 保存回调 */\n onSave?: (playlist: MmdPlaylistWithFiles) => void;\n /** 取消回调 */\n onCancel?: () => void;\n}\n\n/**\n * 资源选择器组件属性\n */\nexport interface ResourceSelectorProps {\n /** 资源类型 */\n resourceType: 'model' | 'motion' | 'camera' | 'audio' | 'stage';\n /** UniversalFile服务实例 */\n fileService: any;\n /** 当前用户ID */\n userId: string;\n /** 当前选中的文件ID */\n value?: string;\n /** 选择回调 */\n onChange: (fileId: string, fileUrl: string) => void;\n /** 是否必填 */\n required?: boolean;\n}\n\n// ============= 数据转换函数类型 =============\n\n/**\n * 播放列表转换为前端格式\n */\nexport type PlaylistToFrontendConverter = (\n playlist: MmdPlaylistDB,\n nodes: MmdPlaylistNodeDB[],\n fileUrls: FileIdToUrlMap\n) => MmdPlaylistWithFiles;\n\n/**\n * 播放列表转换为MMD组件格式\n */\nexport type PlaylistToMmdConfigConverter = (\n playlist: MmdPlaylistWithFiles\n) => MMDPlaylistConfig;\n\n/**\n * 资源选项转换为前端格式\n */\nexport type ResourceOptionToFrontendConverter = (\n option: MmdResourceOptionDB,\n fileUrls: FileIdToUrlMap\n) => MmdResourceOptionWithFile;\n\n/**\n * 预设项转换为前端格式\n */\nexport type PresetItemToFrontendConverter = (\n item: MmdPresetItemDB,\n fileUrls: FileIdToUrlMap\n) => MmdPresetItemWithFiles;\n\n/**\n * 预设项转换为MMD资源格式\n */\nexport type PresetItemToMmdResourceConverter = (\n item: MmdPresetItemWithFiles\n) => MMDResourceItem;\n\n","/**\n * MMD 资源选择器组件\n * \n * 集成 UniversalFile 文件上传组件,支持:\n * - 文件上传到OSS\n * - 文件列表浏览\n * - 文件选择\n * - 文件预览\n * \n * @package sa2kit/mmd/admin\n */\n\n'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport JSZip from 'jszip';\nimport { clsx } from 'clsx';\nimport {\n Upload,\n FileText,\n Image as ImageIcon,\n Film,\n Music,\n CheckCircle2,\n Search,\n Loader2,\n X,\n AlertTriangle,\n} from 'lucide-react';\n\nimport { MMD_RESOURCE_TYPE_CONFIGS } from '../types';\nimport type { ResourceSelectorProps, MmdResourceOptionDB } from '../types';\nimport type { FileMetadata } from '../../../universalFile/types';\n\n/**\n * MMD资源选择器\n */\nexport const MmdResourceSelector: React.FC<ResourceSelectorProps> = ({\n resourceType,\n fileService,\n userId,\n value,\n onChange,\n required = false,\n}) => {\n const [selectedFileId, setSelectedFileId] = useState<string | undefined>(value);\n const [selectedFile, setSelectedFile] = useState<FileMetadata | null>(null);\n const [files, setFiles] = useState<FileMetadata[]>([]);\n const [loading, setLoading] = useState(false);\n const [uploading, setUploading] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [showUploader, setShowUploader] = useState(false);\n const [zipValidationError, setZipValidationError] = useState<string | null>(null);\n\n // 从配置获取资源类型信息\n const config = MMD_RESOURCE_TYPE_CONFIGS[resourceType];\n\n // 防御性检查(理论上不会发生,因为 resourceType 为受控枚举)\n if (!config) {\n return (\n <div className=\"p-4 bg-red-50 text-red-600 rounded-lg\">\n 未找到资源类型配置:{resourceType}\n </div>\n );\n }\n\n // 获取文件图标\n const getFileIcon = () => {\n switch (resourceType) {\n case 'model':\n case 'stage':\n return <Film className=\"w-5 h-5\" />;\n case 'motion':\n case 'camera':\n return <FileText className=\"w-5 h-5\" />;\n case 'audio':\n return <Music className=\"w-5 h-5\" />;\n default:\n return <FileText className=\"w-5 h-5\" />;\n }\n };\n\n // 加载文件列表\n const loadFiles = useCallback(async () => {\n if (!fileService || !config) return;\n\n setLoading(true);\n try {\n const result = await fileService.queryFiles({\n moduleId: config.moduleId,\n pageSize: 50,\n page: 1,\n sortBy: 'uploadTime',\n sortOrder: 'desc',\n });\n\n setFiles(result.items || []);\n } catch (error) {\n console.error('加载文件列表失败:', error);\n } finally {\n setLoading(false);\n }\n }, [fileService, config]);\n\n // 初始加载\n useEffect(() => {\n loadFiles();\n }, [loadFiles]);\n\n // 加载选中的文件信息\n useEffect(() => {\n if (selectedFileId && fileService) {\n fileService\n .getFileMetadata(selectedFileId)\n .then((file: FileMetadata) => setSelectedFile(file))\n .catch((error: any) => console.error('加载文件信息失败:', error));\n } else {\n setSelectedFile(null);\n }\n }, [selectedFileId, fileService]);\n\n // 处理文件选择\n const handleFileSelect = (file: FileMetadata) => {\n setSelectedFileId(file.id);\n setSelectedFile(file);\n \n // 获取文件URL并回调\n fileService\n .getFileUrl(file.id)\n .then((url: string) => onChange(file.id, url))\n .catch((error: any) => console.error('获取文件URL失败:', error));\n };\n\n const validateZipContents = async (buffer: ArrayBuffer, type: 'model' | 'stage') => {\n const zip = await JSZip.loadAsync(buffer);\n const entries = Object.keys(zip.files);\n\n if (!entries.length) {\n throw new Error('压缩包为空,请检查文件内容');\n }\n\n const hasModel =\n entries.some((name) => /\\.[pP][mM][xX]$/.test(name)) ||\n (type === 'stage' && entries.some((name) => /\\.[pP][mM][dD]$/.test(name)));\n\n const hasAssets = entries.some((name) =>\n /\\.(png|jpg|jpeg|bmp|tga|dds|spa|sph)$/i.test(name),\n );\n\n if (!hasModel) {\n throw new Error(type === 'stage' ? '压缩包中未找到 PMX/PMD 舞台模型文件' : '压缩包中未找到 PMX 模型文件');\n }\n\n if (!hasAssets) {\n throw new Error('压缩包中未发现贴图文件,请确认是否包含 texture 目录');\n }\n };\n\n // 处理文件上传\n const handleFileUpload = async (file: File) => {\n if (!fileService) return;\n\n setUploading(true);\n setZipValidationError(null);\n try {\n if (resourceType === 'model' || resourceType === 'stage') {\n const arrayBuffer = await file.arrayBuffer();\n await validateZipContents(arrayBuffer, resourceType);\n }\n\n const fileMetadata = await fileService.uploadFile({\n file,\n moduleId: config.moduleId,\n businessId: userId,\n permission: 'public',\n });\n\n // 刷新文件列表\n await loadFiles();\n\n // 自动选择刚上传的文件\n handleFileSelect(fileMetadata);\n setShowUploader(false);\n } catch (error) {\n console.error('文件上传失败:', error);\n const message = error instanceof Error ? error.message : '未知错误';\n setZipValidationError(message);\n alert('上传失败: ' + (message));\n } finally {\n setUploading(false);\n }\n };\n\n // 过滤文件列表\n const filteredFiles = files.filter((file) =>\n file.originalName.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n return (\n <div className=\"space-y-4\">\n {/* 标题和上传按钮 */}\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm font-medium text-gray-700 dark:text-gray-300\">\n {getFileIcon()}\n {config.description}\n {required && <span className=\"text-red-500\">*</span>}\n </label>\n <button\n onClick={() => setShowUploader(!showUploader)}\n className=\"px-3 py-1 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-2\"\n >\n <Upload className=\"w-4 h-4\" />\n 上传新文件\n </button>\n </div>\n\n {/* 当前选中的文件 */}\n {selectedFile && (\n <div className=\"p-3 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <CheckCircle2 className=\"w-5 h-5 text-green-600 dark:text-green-400\" />\n <div>\n <div className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {selectedFile.originalName}\n </div>\n <div className=\"text-xs text-gray-500 dark:text-gray-400\">\n {(selectedFile.size / 1024 / 1024).toFixed(2)} MB\n </div>\n </div>\n </div>\n <button\n onClick={() => {\n setSelectedFileId(undefined);\n setSelectedFile(null);\n onChange('', '');\n }}\n className=\"p-1 hover:bg-white/50 dark:hover:bg-black/20 rounded transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n\n {/* 文件上传区域 */}\n {showUploader && (\n <div className=\"p-4 bg-gray-50 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\n <div className=\"text-sm text-gray-600 dark:text-gray-400 mb-3 space-y-1\">\n <p>支持的文件类型: {config.acceptedTypes.join(', ')}</p>\n <p>最大文件大小: {config.maxFileSize}MB</p>\n {config.hint && (\n <p className=\"text-xs text-amber-600 dark:text-amber-400\">{config.hint}</p>\n )}\n </div>\n \n <input\n type=\"file\"\n accept={config.acceptedTypes.join(',')}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) {\n // 验证文件大小\n if (file.size > config.maxFileSize * 1024 * 1024) {\n alert('文件大小超过限制(最大 ' + (config.maxFileSize) + 'MB)');\n return;\n }\n handleFileUpload(file);\n }\n }}\n disabled={uploading}\n className=\"w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100 disabled:opacity-50\"\n />\n\n {uploading && (\n <div className=\"mt-3 flex items-center gap-2 text-sm text-blue-600\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n 上传中...\n </div>\n )}\n {zipValidationError && (\n <div className=\"mt-3 flex items-center gap-2 text-sm text-amber-600 dark:text-amber-400\">\n <AlertTriangle className=\"w-4 h-4\" />\n {zipValidationError}\n </div>\n )}\n </div>\n )}\n\n {/* 搜索框 */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input\n type=\"text\"\n placeholder=\"搜索文件...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n\n {/* 文件列表 */}\n <div className=\"max-h-96 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-lg divide-y divide-gray-200 dark:divide-gray-700\">\n {loading ? (\n <div className=\"p-8 text-center text-gray-500\">\n <Loader2 className=\"w-6 h-6 animate-spin mx-auto mb-2\" />\n 加载中...\n </div>\n ) : filteredFiles.length === 0 ? (\n <div className=\"p-8 text-center text-gray-500\">\n {searchTerm ? '没有找到匹配的文件' : '暂无文件,请上传'}\n </div>\n ) : (\n filteredFiles.map((file) => (\n <button\n key={file.id}\n onClick={() => handleFileSelect(file)}\n className={clsx('w-full p-3 text-left hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors', selectedFileId === file.id ? 'bg-blue-50 dark:bg-blue-900/20' : '')}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium text-gray-900 dark:text-white truncate\">\n {file.originalName}\n </div>\n <div className=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5\">\n {(file.size / 1024 / 1024).toFixed(2)} MB •{' '}\n {new Date(file.uploadTime).toLocaleDateString()}\n </div>\n </div>\n {selectedFileId === file.id && (\n <CheckCircle2 className=\"w-5 h-5 text-blue-600 dark:text-blue-400 flex-shrink-0 ml-2\" />\n )}\n </div>\n </button>\n ))\n )}\n </div>\n\n {/* 提示信息 */}\n {required && !selectedFileId && (\n <div className=\"text-sm text-red-600 dark:text-red-400\">\n 请选择一个{config.description}\n </div>\n )}\n </div>\n );\n};\n\n","/**\n * MMD 播放列表编辑器组件\n * \n * 功能:\n * - 创建/编辑播放列表\n * - 添加/删除/排序播放节点\n * - 为每个节点配置资源(模型、动作、音频等)\n * - 预览配置\n * \n * @package sa2kit/mmd/admin\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport {\n Plus,\n Trash2,\n Save,\n X,\n GripVertical,\n Settings,\n Eye,\n ChevronDown,\n ChevronUp,\n} from 'lucide-react';\n\nimport { MmdResourceSelector } from './MmdResourceSelector';\nimport type { PlaylistEditorProps, MmdPlaylistNodeDB } from '../types';\n\ninterface NodeFormData {\n id?: string;\n name: string;\n description?: string;\n loop: boolean;\n duration?: number;\n sortOrder: number;\n thumbnailFileId?: string;\n modelFileId: string;\n motionFileId?: string;\n cameraFileId?: string;\n audioFileId?: string;\n stageModelFileId?: string;\n additionalMotionFileIds?: string[];\n}\n\n/**\n * 播放列表编辑器\n */\nexport const MmdPlaylistEditor: React.FC<PlaylistEditorProps> = ({\n playlistId,\n fileService,\n userId,\n onSave,\n onCancel,\n}) => {\n // 播放列表基本信息\n const [playlistName, setPlaylistName] = useState('');\n const [playlistDescription, setPlaylistDescription] = useState('');\n const [loop, setLoop] = useState(false);\n const [autoPlay, setAutoPlay] = useState(false);\n const [preloadStrategy, setPreloadStrategy] = useState<'none' | 'next' | 'all'>('none');\n \n // 节点列表\n const [nodes, setNodes] = useState<NodeFormData[]>([]);\n const [expandedNodes, setExpandedNodes] = useState<Set<number>>(new Set([0]));\n \n // UI 状态\n const [saving, setSaving] = useState(false);\n const [showAdvanced, setShowAdvanced] = useState(false);\n\n // 添加新节点\n const addNode = () => {\n const newNode: NodeFormData = {\n name: '节点 ' + (nodes.length + 1),\n description: '',\n loop: false,\n sortOrder: nodes.length,\n modelFileId: '',\n };\n \n setNodes([...nodes, newNode]);\n setExpandedNodes(new Set([...expandedNodes, nodes.length]));\n };\n\n // 删除节点\n const removeNode = (index: number) => {\n const newNodes = nodes.filter((_, i) => i !== index);\n // 重新排序\n newNodes.forEach((node, i) => {\n node.sortOrder = i;\n });\n setNodes(newNodes);\n \n // 更新展开状态\n const newExpanded = new Set<number>();\n expandedNodes.forEach((i) => {\n if (i < index) newExpanded.add(i);\n else if (i > index) newExpanded.add(i - 1);\n });\n setExpandedNodes(newExpanded);\n };\n\n // 移动节点\n const moveNode = (index: number, direction: 'up' | 'down') => {\n const newNodes = [...nodes];\n const targetIndex = direction === 'up' ? index - 1 : index + 1;\n \n if (targetIndex < 0 || targetIndex >= newNodes.length) return;\n if (!newNodes[index] || !newNodes[targetIndex]) return;\n \n // 交换位置\n [newNodes[index], newNodes[targetIndex]] = [newNodes[targetIndex]!, newNodes[index]!];\n \n // 更新 sortOrder\n newNodes.forEach((node, i) => {\n node.sortOrder = i;\n });\n \n setNodes(newNodes);\n \n // 更新展开状态\n const newExpanded = new Set<number>();\n expandedNodes.forEach((i) => {\n if (i === index) newExpanded.add(targetIndex);\n else if (i === targetIndex) newExpanded.add(index);\n else newExpanded.add(i);\n });\n setExpandedNodes(newExpanded);\n };\n\n // 切换节点展开/折叠\n const toggleNode = (index: number) => {\n const newExpanded = new Set(expandedNodes);\n if (newExpanded.has(index)) {\n newExpanded.delete(index);\n } else {\n newExpanded.add(index);\n }\n setExpandedNodes(newExpanded);\n };\n\n // 更新节点\n const updateNode = (index: number, updates: Partial<NodeFormData>) => {\n const newNodes = [...nodes];\n if (!newNodes[index]) return;\n newNodes[index] = { ...newNodes[index]!, ...updates };\n setNodes(newNodes);\n };\n\n // 验证表单\n const validateForm = (): boolean => {\n if (!playlistName.trim()) {\n alert('请输入播放列表名称');\n return false;\n }\n \n if (nodes.length === 0) {\n alert('请至少添加一个播放节点');\n return false;\n }\n \n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node || !node.name?.trim()) {\n alert('节点 ' + (i + 1) + ': 请输入节点名称');\n return false;\n }\n if (!node.modelFileId) {\n alert('节点 ' + (i + 1) + ': 请选择模型文件');\n return false;\n }\n }\n \n return true;\n };\n\n // 保存\n const handleSave = async () => {\n if (!validateForm()) return;\n \n setSaving(true);\n try {\n // 这里应该调用API保存数据\n // TODO: 实现API调用\n console.log('保存播放列表:', {\n name: playlistName,\n description: playlistDescription,\n loop,\n autoPlay,\n preloadStrategy,\n nodes,\n });\n \n alert('保存成功!');\n onSave?.(null as any); // 实际应该返回保存后的数据\n } catch (error) {\n console.error('保存失败:', error);\n alert('保存失败: ' + (error instanceof Error ? error.message : '未知错误'));\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <div className=\"max-w-6xl mx-auto p-6 bg-white dark:bg-gray-900 rounded-lg shadow-lg\">\n {/* 标题栏 */}\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {playlistId ? '编辑播放列表' : '创建播放列表'}\n </h2>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={handleSave}\n disabled={saving}\n className=\"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors disabled:opacity-50 flex items-center gap-2\"\n >\n <Save className=\"w-4 h-4\" />\n {saving ? '保存中...' : '保存'}\n </button>\n <button\n onClick={onCancel}\n className=\"px-4 py-2 bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-lg hover:bg-gray-300 dark:hover:bg-gray-600 transition-colors flex items-center gap-2\"\n >\n <X className=\"w-4 h-4\" />\n 取消\n </button>\n </div>\n </div>\n\n {/* 基本信息 */}\n <div className=\"space-y-4 mb-8 p-6 bg-gray-50 dark:bg-gray-800 rounded-lg\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white mb-4\">\n 基本信息\n </h3>\n \n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 播放列表名称 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={playlistName}\n onChange={(e) => setPlaylistName(e.target.value)}\n placeholder=\"输入播放列表名称...\"\n className=\"w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-900 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 描述\n </label>\n <textarea\n value={playlistDescription}\n onChange={(e) => setPlaylistDescription(e.target.value)}\n placeholder=\"输入描述信息...\"\n rows={3}\n className=\"w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-900 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n\n <div className=\"flex items-center gap-6\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={loop}\n onChange={(e) => setLoop(e.target.checked)}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">列表循环</span>\n </label>\n\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={autoPlay}\n onChange={(e) => setAutoPlay(e.target.checked)}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">自动播放</span>\n </label>\n </div>\n\n {/* 高级选项 */}\n <button\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"flex items-center gap-2 text-sm text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300\"\n >\n <Settings className=\"w-4 h-4\" />\n 高级选项\n {showAdvanced ? <ChevronUp className=\"w-4 h-4\" /> : <ChevronDown className=\"w-4 h-4\" />}\n </button>\n\n {showAdvanced && (\n <div className=\"space-y-4 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 预加载策略\n </label>\n <select\n value={preloadStrategy}\n onChange={(e) => setPreloadStrategy(e.target.value as any)}\n className=\"w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-900 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n >\n <option value=\"none\">不预加载</option>\n <option value=\"next\">预加载下一个</option>\n <option value=\"all\">预加载全部</option>\n </select>\n </div>\n </div>\n )}\n </div>\n\n {/* 播放节点列表 */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n 播放节点 ({nodes.length})\n </h3>\n <button\n onClick={addNode}\n className=\"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors flex items-center gap-2\"\n >\n <Plus className=\"w-4 h-4\" />\n 添加节点\n </button>\n </div>\n\n {nodes.length === 0 ? (\n <div className=\"p-8 text-center text-gray-500 border-2 border-dashed border-gray-300 dark:border-gray-700 rounded-lg\">\n 暂无节点,请点击\"添加节点\"按钮开始\n </div>\n ) : (\n nodes.map((node, index) => (\n <div\n key={index}\n className=\"border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden\"\n >\n {/* 节点头部 */}\n <div className=\"flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-800\">\n <button\n className=\"cursor-move text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\n title=\"拖拽排序\"\n >\n <GripVertical className=\"w-5 h-5\" />\n </button>\n\n <button\n onClick={() => toggleNode(index)}\n className=\"flex-1 flex items-center justify-between text-left\"\n >\n <span className=\"font-medium text-gray-900 dark:text-white\">\n {index + 1}. {node.name || '未命名节点'}\n </span>\n {expandedNodes.has(index) ? (\n <ChevronUp className=\"w-5 h-5 text-gray-400\" />\n ) : (\n <ChevronDown className=\"w-5 h-5 text-gray-400\" />\n )}\n </button>\n\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => moveNode(index, 'up')}\n disabled={index === 0}\n className=\"p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 disabled:opacity-30\"\n title=\"上移\"\n >\n <ChevronUp className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => moveNode(index, 'down')}\n disabled={index === nodes.length - 1}\n className=\"p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 disabled:opacity-30\"\n title=\"下移\"\n >\n <ChevronDown className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => removeNode(index)}\n className=\"p-1 text-red-400 hover:text-red-600 dark:hover:text-red-300\"\n title=\"删除\"\n >\n <Trash2 className=\"w-5 h-5\" />\n </button>\n </div>\n </div>\n\n {/* 节点内容 */}\n {expandedNodes.has(index) && (\n <div className=\"p-6 space-y-6 bg-white dark:bg-gray-900\">\n {/* 基本信息 */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 节点名称 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={node.name}\n onChange={(e) => updateNode(index, { name: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 时长(秒)\n </label>\n <input\n type=\"number\"\n value={node.duration || ''}\n onChange={(e) => updateNode(index, { duration: parseInt(e.target.value) || undefined })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 描述\n </label>\n <textarea\n value={node.description || ''}\n onChange={(e) => updateNode(index, { description: e.target.value })}\n rows={2}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={node.loop}\n onChange={(e) => updateNode(index, { loop: e.target.checked })}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">单曲循环</span>\n </label>\n\n {/* 资源选择器 */}\n <div className=\"grid grid-cols-1 gap-6 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <MmdResourceSelector\n resourceType=\"model\"\n fileService={fileService}\n userId={userId}\n value={node.modelFileId}\n onChange={(fileId) => updateNode(index, { modelFileId: fileId })}\n required\n />\n\n <MmdResourceSelector\n resourceType=\"motion\"\n fileService={fileService}\n userId={userId}\n value={node.motionFileId}\n onChange={(fileId) => updateNode(index, { motionFileId: fileId })}\n />\n\n <MmdResourceSelector\n resourceType=\"audio\"\n fileService={fileService}\n userId={userId}\n value={node.audioFileId}\n onChange={(fileId) => updateNode(index, { audioFileId: fileId })}\n />\n </div>\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n );\n};\n\n","/**\n * MMD 后台管理面板 - 主入口组件\n * \n * 功能:\n * - 播放列表管理(列表、创建、编辑、删除)\n * - 预设项管理\n * - 资源选项管理\n * - 统计信息展示\n * \n * @package sa2kit/mmd/admin\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport {\n List,\n Plus,\n Settings,\n Database,\n BarChart3,\n} from 'lucide-react';\n\nimport { MmdPlaylistEditor } from './MmdPlaylistEditor';\nimport type { MmdAdminPanelProps } from '../types';\n\ntype TabType = 'playlists' | 'presets' | 'resources' | 'stats';\n\n/**\n * MMD后台管理面板\n */\nexport const MmdAdminPanel: React.FC<MmdAdminPanelProps> = ({\n fileService,\n userId,\n apiBaseUrl = '/api/mmd',\n showAdvancedOptions = true,\n className = '',\n}) => {\n const [activeTab, setActiveTab] = useState<TabType>('playlists');\n const [showEditor, setShowEditor] = useState(false);\n const [editingPlaylistId, setEditingPlaylistId] = useState<string | undefined>();\n\n // 标签页配置\n const tabs = [\n { id: 'playlists' as const, label: '播放列表', icon: List },\n { id: 'presets' as const, label: '预设项', icon: Database },\n { id: 'resources' as const, label: '资源管理', icon: Settings },\n ...(showAdvancedOptions ? [{ id: 'stats' as const, label: '统计', icon: BarChart3 }] : []),\n ];\n\n // 创建新播放列表\n const handleCreatePlaylist = () => {\n setEditingPlaylistId(undefined);\n setShowEditor(true);\n };\n\n // 编辑播放列表\n const handleEditPlaylist = (playlistId: string) => {\n setEditingPlaylistId(playlistId);\n setShowEditor(true);\n };\n\n // 关闭编辑器\n const handleCloseEditor = () => {\n setShowEditor(false);\n setEditingPlaylistId(undefined);\n };\n\n // 保存成功\n const handleSaveSuccess = (playlist: any) => {\n console.log('保存成功:', playlist);\n handleCloseEditor();\n // 刷新列表...\n };\n\n if (showEditor) {\n return (\n <MmdPlaylistEditor\n playlistId={editingPlaylistId}\n fileService={fileService}\n userId={userId}\n onSave={handleSaveSuccess}\n onCancel={handleCloseEditor}\n />\n );\n }\n\n return (\n <div className={clsx('min-h-screen bg-gray-50 dark:bg-gray-900', className)}>\n {/* 头部 */}\n <div className=\"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex items-center justify-between h-16\">\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n MMD 后台管理\n </h1>\n \n {activeTab === 'playlists' && (\n <button\n onClick={handleCreatePlaylist}\n className=\"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-2\"\n >\n <Plus className=\"w-4 h-4\" />\n 创建播放列表\n </button>\n )}\n </div>\n\n {/* 标签导航 */}\n <div className=\"flex space-x-8\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={clsx('flex items-center gap-2 px-1 py-4 border-b-2 font-medium text-sm transition-colors', activeTab === tab.id\n ? 'border-blue-600 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300')}\n >\n <Icon className=\"w-4 h-4\" />\n {tab.label}\n </button>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* 主内容区 */}\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {activeTab === 'playlists' && (\n <div className=\"space-y-4\">\n <div className=\"text-center py-12 text-gray-500\">\n <List className=\"w-12 h-12 mx-auto mb-4 opacity-50\" />\n <p>播放列表管理功能开发中...</p>\n <p className=\"text-sm mt-2\">点击右上角\"创建播放列表\"按钮开始</p>\n </div>\n </div>\n )}\n\n {activeTab === 'presets' && (\n <div className=\"text-center py-12 text-gray-500\">\n <Database className=\"w-12 h-12 mx-auto mb-4 opacity-50\" />\n <p>预设项管理功能开发中...</p>\n </div>\n )}\n\n {activeTab === 'resources' && (\n <div className=\"text-center py-12 text-gray-500\">\n <Settings className=\"w-12 h-12 mx-auto mb-4 opacity-50\" />\n <p>资源管理功能开发中...</p>\n </div>\n )}\n\n {activeTab === 'stats' && (\n <div className=\"text-center py-12 text-gray-500\">\n <BarChart3 className=\"w-12 h-12 mx-auto mb-4 opacity-50\" />\n <p>统计功能开发中...</p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n","/**\n * MMD 后台管理数据转换工具\n * \n * 提供数据库格式和前端格式之间的转换函数\n * 以及文件ID到URL的映射功能\n * \n * @package sa2kit/mmd/admin\n */\n\nimport type {\n MmdPlaylistDB,\n MmdPlaylistNodeDB,\n MmdResourceOptionDB,\n MmdPresetItemDB,\n MmdPlaylistWithFiles,\n MmdPlaylistNodeWithFiles,\n MmdResourceOptionWithFile,\n MmdPresetItemWithFiles,\n FileIdToUrlMap,\n} from './types';\n\nimport type {\n MMDResources,\n MMDPlaylistConfig,\n MMDPlaylistNode,\n MMDResourceItem,\n ResourceOption,\n MMDResourceOptions,\n} from '../types';\n\n// ============= 文件URL映射 =============\n\n/**\n * 从数据库记录中提取所有文件ID\n */\nexport function extractFileIdsFromPlaylist(\n playlist: MmdPlaylistDB,\n nodes: MmdPlaylistNodeDB[]\n): string[] {\n const fileIds = new Set<string>();\n\n // 播放列表缩略图\n if (playlist.thumbnailFileId) {\n fileIds.add(playlist.thumbnailFileId);\n }\n\n // 节点文件\n for (const node of nodes) {\n if (node.thumbnailFileId) fileIds.add(node.thumbnailFileId);\n if (node.modelFileId) fileIds.add(node.modelFileId);\n if (node.motionFileId) fileIds.add(node.motionFileId);\n if (node.cameraFileId) fileIds.add(node.cameraFileId);\n if (node.audioFileId) fileIds.add(node.audioFileId);\n if (node.stageModelFileId) fileIds.add(node.stageModelFileId);\n if (node.additionalMotionFileIds) {\n node.additionalMotionFileIds.forEach((id) => fileIds.add(id));\n }\n }\n\n return Array.from(fileIds);\n}\n\n/**\n * 从资源选项中提取文件ID\n */\nexport function extractFileIdsFromResourceOptions(\n options: MmdResourceOptionDB[]\n): string[] {\n const fileIds = new Set<string>();\n\n for (const option of options) {\n fileIds.add(option.fileId);\n if (option.thumbnailFileId) {\n fileIds.add(option.thumbnailFileId);\n }\n }\n\n return Array.from(fileIds);\n}\n\n/**\n * 从预设项中提取文件ID\n */\nexport function extractFileIdsFromPresetItem(item: MmdPresetItemDB): string[] {\n const fileIds = new Set<string>();\n\n if (item.thumbnailFileId) fileIds.add(item.thumbnailFileId);\n if (item.modelFileId) fileIds.add(item.modelFileId);\n if (item.motionFileId) fileIds.add(item.motionFileId);\n if (item.cameraFileId) fileIds.add(item.cameraFileId);\n if (item.audioFileId) fileIds.add(item.audioFileId);\n if (item.stageModelFileId) fileIds.add(item.stageModelFileId);\n if (item.additionalMotionFileIds) {\n item.additionalMotionFileIds.forEach((id) => fileIds.add(id));\n }\n\n return Array.from(fileIds);\n}\n\n// ============= 数据库 -> 前端格式转换 =============\n\n/**\n * 转换播放节点(数据库 -> 前端格式)\n */\nexport function convertPlaylistNodeToFrontend(\n node: MmdPlaylistNodeDB,\n fileUrls: FileIdToUrlMap\n): MmdPlaylistNodeWithFiles {\n return {\n id: node.id,\n playlistId: node.playlistId,\n name: node.name,\n description: node.description,\n loop: node.loop,\n duration: node.duration,\n sortOrder: node.sortOrder,\n config: node.config,\n createdAt: node.createdAt,\n updatedAt: node.updatedAt,\n // URL 映射\n thumbnailUrl: node.thumbnailFileId ? fileUrls[node.thumbnailFileId] : undefined,\n modelUrl: fileUrls[node.modelFileId] || '',\n motionUrl: node.motionFileId ? fileUrls[node.motionFileId] : undefined,\n cameraUrl: node.cameraFileId ? fileUrls[node.cameraFileId] : undefined,\n audioUrl: node.audioFileId ? fileUrls[node.audioFileId] : undefined,\n stageModelUrl: node.stageModelFileId ? fileUrls[node.stageModelFileId] : undefined,\n additionalMotionUrls: node.additionalMotionFileIds\n ?.map((id) => fileUrls[id])\n .filter((url): url is string => Boolean(url)),\n };\n}\n\n/**\n * 转换播放列表(数据库 -> 前端格式)\n */\nexport function convertPlaylistToFrontend(\n playlist: MmdPlaylistDB,\n nodes: MmdPlaylistNodeDB[],\n fileUrls: FileIdToUrlMap\n): MmdPlaylistWithFiles {\n return {\n id: playlist.id,\n name: playlist.name,\n description: playlist.description,\n loop: playlist.loop,\n preloadStrategy: playlist.preloadStrategy,\n autoPlay: playlist.autoPlay,\n status: playlist.status,\n sortOrder: playlist.sortOrder,\n config: playlist.config,\n createdBy: playlist.createdBy,\n createdAt: playlist.createdAt,\n updatedAt: playlist.updatedAt,\n deletedAt: playlist.deletedAt,\n // URL 映射\n thumbnailUrl: playlist.thumbnailFileId ? fileUrls[playlist.thumbnailFileId] : undefined,\n // 转换节点\n nodes: nodes\n .sort((a, b) => a.sortOrder - b.sortOrder)\n .map((node) => convertPlaylistNodeToFrontend(node, fileUrls)),\n };\n}\n\n/**\n * 转换资源选项(数据库 -> 前端格式)\n */\nexport function convertResourceOptionToFrontend(\n option: MmdResourceOptionDB,\n fileUrls: FileIdToUrlMap\n): MmdResourceOptionWithFile {\n return {\n id: option.id,\n name: option.name,\n description: option.description,\n resourceType: option.resourceType,\n tags: option.tags,\n sortOrder: option.sortOrder,\n isActive: option.isActive,\n createdBy: option.createdBy,\n createdAt: option.createdAt,\n updatedAt: option.updatedAt,\n // URL 映射\n fileUrl: fileUrls[option.fileId] || '',\n thumbnailUrl: option.thumbnailFileId ? fileUrls[option.thumbnailFileId] : undefined,\n };\n}\n\n/**\n * 转换预设项(数据库 -> 前端格式)\n */\nexport function convertPresetItemToFrontend(\n item: MmdPresetItemDB,\n fileUrls: FileIdToUrlMap\n): MmdPresetItemWithFiles {\n return {\n id: item.id,\n name: item.name,\n description: item.description,\n sortOrder: item.sortOrder,\n isActive: item.isActive,\n tags: item.tags,\n createdBy: item.createdBy,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n // URL 映射\n thumbnailUrl: item.thumbnailFileId ? fileUrls[item.thumbnailFileId] : undefined,\n modelUrl: fileUrls[item.modelFileId] || '',\n motionUrl: item.motionFileId ? fileUrls[item.motionFileId] : undefined,\n cameraUrl: item.cameraFileId ? fileUrls[item.cameraFileId] : undefined,\n audioUrl: item.audioFileId ? fileUrls[item.audioFileId] : undefined,\n stageModelUrl: item.stageModelFileId ? fileUrls[item.stageModelFileId] : undefined,\n additionalMotionUrls: item.additionalMotionFileIds\n ?.map((id) => fileUrls[id])\n .filter((url): url is string => Boolean(url)),\n };\n}\n\n// ============= 前端格式 -> MMD组件格式转换 =============\n\n/**\n * 转换播放节点(前端格式 -> MMD组件格式)\n */\nexport function convertNodeToMmdFormat(node: MmdPlaylistNodeWithFiles): MMDPlaylistNode {\n return {\n id: node.id,\n name: node.name,\n loop: node.loop,\n duration: node.duration,\n thumbnail: node.thumbnailUrl,\n resources: {\n modelPath: node.modelUrl,\n motionPath: node.motionUrl,\n cameraPath: node.cameraUrl,\n audioPath: node.audioUrl,\n stageModelPath: node.stageModelUrl,\n additionalMotions: node.additionalMotionUrls,\n },\n };\n}\n\n/**\n * 转换播放列表(前端格式 -> MMD组件格式)\n */\nexport function convertPlaylistToMmdConfig(\n playlist: MmdPlaylistWithFiles\n): MMDPlaylistConfig {\n return {\n id: playlist.id,\n name: playlist.name,\n nodes: playlist.nodes.map(convertNodeToMmdFormat),\n loop: playlist.loop,\n preload: playlist.preloadStrategy,\n autoPlay: playlist.autoPlay,\n };\n}\n\n/**\n * 转换预设项(前端格式 -> MMD资源项格式)\n */\nexport function convertPresetItemToMmdResource(\n item: MmdPresetItemWithFiles\n): MMDResourceItem {\n return {\n id: item.id,\n name: item.name,\n thumbnail: item.thumbnailUrl,\n description: item.description,\n resources: {\n modelPath: item.modelUrl,\n motionPath: item.motionUrl,\n cameraPath: item.cameraUrl,\n audioPath: item.audioUrl,\n stageModelPath: item.stageModelUrl,\n additionalMotions: item.additionalMotionUrls,\n },\n };\n}\n\n/**\n * 转换资源选项列表(前端格式 -> MMD资源选项格式)\n */\nexport function convertResourceOptionsToMmdFormat(\n options: MmdResourceOptionWithFile[]\n): MMDResourceOptions {\n const grouped = {\n models: [] as ResourceOption[],\n motions: [] as ResourceOption[],\n cameras: [] as ResourceOption[],\n audios: [] as ResourceOption[],\n stages: [] as ResourceOption[],\n };\n\n for (const option of options) {\n const resourceOption: ResourceOption = {\n id: option.id,\n name: option.name,\n path: option.fileUrl,\n thumbnail: option.thumbnailUrl,\n };\n\n switch (option.resourceType) {\n case 'model':\n grouped.models.push(resourceOption);\n break;\n case 'motion':\n grouped.motions.push(resourceOption);\n break;\n case 'camera':\n grouped.cameras!.push(resourceOption);\n break;\n case 'audio':\n grouped.audios!.push(resourceOption);\n break;\n case 'stage':\n grouped.stages!.push(resourceOption);\n break;\n }\n }\n\n return grouped;\n}\n\n// ============= 辅助函数 =============\n\n/**\n * 验证文件URL映射是否完整\n */\nexport function validateFileUrls(\n requiredFileIds: string[],\n fileUrls: FileIdToUrlMap\n): { valid: boolean; missingIds: string[] } {\n const missingIds = requiredFileIds.filter((id) => !fileUrls[id]);\n \n return {\n valid: missingIds.length === 0,\n missingIds,\n };\n}\n\n/**\n * 生成默认文件URL映射(用于开发/测试)\n */\nexport function generateMockFileUrls(fileIds: string[]): FileIdToUrlMap {\n const urls: FileIdToUrlMap = {};\n \n for (const id of fileIds) {\n urls[id] = '/mock/files/' + (id);\n }\n \n return urls;\n}\n\n/**\n * 合并多个文件URL映射\n */\nexport function mergeFileUrlMaps(...maps: FileIdToUrlMap[]): FileIdToUrlMap {\n return Object.assign({}, ...maps);\n}\n\n/**\n * 从MMDResources提取文件路径(用于编辑时反向映射)\n */\nexport function extractPathsFromMmdResources(resources: MMDResources): string[] {\n const paths: string[] = [resources.modelPath];\n \n if (resources.motionPath) paths.push(resources.motionPath);\n if (resources.cameraPath) paths.push(resources.cameraPath);\n if (resources.audioPath) paths.push(resources.audioPath);\n \n if (resources.stageModelPath) {\n if (Array.isArray(resources.stageModelPath)) {\n paths.push(...resources.stageModelPath);\n } else {\n paths.push(resources.stageModelPath);\n }\n }\n \n if (resources.additionalMotions) paths.push(...resources.additionalMotions);\n \n return paths;\n}\n\n","/**\n * MMD 后台管理数据库表结构定义 (PostgreSQL)\n * \n * 功能:\n * - 管理MMD播放列表配置\n * - 管理MMD播放节点\n * - 文件关联管理(与 universalFile 集成)\n * - 支持多种资源类型的映射\n * \n * 设计原则:\n * - 与 universalFile 的 file_metadata 表无缝集成\n * - 支持文件ID到OSS URL的映射\n * - 保持数据结构灵活性,便于扩展\n * \n * @package sa2kit/mmd/server\n */\n\nimport { relations } from 'drizzle-orm';\nimport {\n serial,\n text,\n timestamp,\n pgTable,\n json,\n integer,\n boolean,\n varchar,\n index,\n uuid,\n} from 'drizzle-orm/pg-core';\n\n/**\n * MMD播放列表表 (mmd_playlists)\n * \n * 管理MMD播放列表的基础信息\n */\nexport const mmdPlaylists = pgTable(\n 'mmd_playlists',\n {\n /** 主键ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n /** 播放列表名称 */\n name: varchar('name', { length: 255 }).notNull(),\n\n /** 播放列表描述 */\n description: text('description'),\n\n /** 是否启用列表循环 */\n loop: boolean('loop').notNull().default(false),\n\n /** 预加载策略: none, next, all */\n preloadStrategy: varchar('preload_strategy', { length: 20 }).notNull().default('none'),\n\n /** 是否自动播放 */\n autoPlay: boolean('auto_play').notNull().default(false),\n\n /** 播放列表缩略图文件ID (关联 file_metadata.id) */\n thumbnailFileId: uuid('thumbnail_file_id'),\n\n /** 播放列表状态: draft, published, archived */\n status: varchar('status', { length: 20 }).notNull().default('draft'),\n\n /** 显示顺序 */\n sortOrder: integer('sort_order').notNull().default(0),\n\n /** 额外配置(JSON格式,存储舞台配置等) */\n config: json('config'),\n\n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n\n /** 删除时间(软删除) */\n deletedAt: timestamp('deleted_at'),\n },\n (table) => ({\n /** 按状态查询的索引 */\n statusIndex: index('mmd_playlists_status_idx').on(table.status),\n\n /** 按创建者查询的索引 */\n createdByIndex: index('mmd_playlists_created_by_idx').on(table.createdBy),\n\n /** 按删除状态查询的索引 */\n deletedAtIndex: index('mmd_playlists_deleted_at_idx').on(table.deletedAt),\n\n /** 按排序查询的索引 */\n sortOrderIndex: index('mmd_playlists_sort_order_idx').on(table.sortOrder),\n })\n);\n\n/**\n * MMD播放节点表 (mmd_playlist_nodes)\n * \n * 管理播放列表中的每个播放节点\n */\nexport const mmdPlaylistNodes = pgTable(\n 'mmd_playlist_nodes',\n {\n /** 主键ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n /** 所属播放列表ID */\n playlistId: uuid('playlist_id')\n .references(() => mmdPlaylists.id, { onDelete: 'cascade' })\n .notNull(),\n\n /** 节点名称 */\n name: varchar('name', { length: 255 }).notNull(),\n\n /** 节点描述 */\n description: text('description'),\n\n /** 是否启用节点循环 */\n loop: boolean('loop').notNull().default(false),\n\n /** 预计时长(秒) */\n duration: integer('duration'),\n\n /** 节点缩略图文件ID */\n thumbnailFileId: uuid('thumbnail_file_id'),\n\n /** 显示顺序 */\n sortOrder: integer('sort_order').notNull().default(0),\n\n /** 模型文件ID (关联 file_metadata.id) */\n modelFileId: uuid('model_file_id').notNull(),\n\n /** 动作文件ID */\n motionFileId: uuid('motion_file_id'),\n\n /** 相机动画文件ID */\n cameraFileId: uuid('camera_file_id'),\n\n /** 音频文件ID */\n audioFileId: uuid('audio_file_id'),\n\n /** 舞台模型文件ID */\n stageModelFileId: uuid('stage_model_file_id'),\n\n /** 附加动作文件ID列表(JSON数组) */\n additionalMotionFileIds: json('additional_motion_file_ids').$type<string[]>(),\n\n /** 额外配置(JSON格式) */\n config: json('config'),\n\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n },\n (table) => ({\n /** 按播放列表查询的索引 */\n playlistIndex: index('mmd_playlist_nodes_playlist_idx').on(table.playlistId),\n\n /** 按排序查询的索引 */\n sortOrderIndex: index('mmd_playlist_nodes_sort_order_idx').on(table.sortOrder),\n\n /** 按模型文件查询的索引 */\n modelFileIndex: index('mmd_playlist_nodes_model_file_idx').on(table.modelFileId),\n\n /** 组合索引:播放列表+排序 */\n playlistSortIndex: index('mmd_playlist_nodes_playlist_sort_idx').on(\n table.playlistId,\n table.sortOrder\n ),\n })\n);\n\n/**\n * MMD资源选项表 (mmd_resource_options)\n * \n * 管理可选的MMD资源(用于自由组合模式)\n */\nexport const mmdResourceOptions = pgTable(\n 'mmd_resource_options',\n {\n /** 主键ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n /** 资源名称 */\n name: varchar('name', { length: 255 }).notNull(),\n\n /** 资源描述 */\n description: text('description'),\n\n /** 资源类型: model, motion, camera, audio, stage */\n resourceType: varchar('resource_type', { length: 20 }).notNull(),\n\n /** 文件ID (关联 file_metadata.id) */\n fileId: uuid('file_id').notNull(),\n\n /** 缩略图文件ID */\n thumbnailFileId: uuid('thumbnail_file_id'),\n\n /** 资源标签(JSON数组,用于分类和筛选) */\n tags: json('tags').$type<string[]>(),\n\n /** 显示顺序 */\n sortOrder: integer('sort_order').notNull().default(0),\n\n /** 是否启用 */\n isActive: boolean('is_active').notNull().default(true),\n\n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n },\n (table) => ({\n /** 按资源类型查询的索引 */\n resourceTypeIndex: index('mmd_resource_options_resource_type_idx').on(table.resourceType),\n\n /** 按文件ID查询的索引 */\n fileIdIndex: index('mmd_resource_options_file_id_idx').on(table.fileId),\n\n /** 按活跃状态查询的索引 */\n isActiveIndex: index('mmd_resource_options_is_active_idx').on(table.isActive),\n\n /** 按创建者查询的索引 */\n createdByIndex: index('mmd_resource_options_created_by_idx').on(table.createdBy),\n\n /** 组合索引:资源类型+活跃状态+排序 */\n typeActiveSortIndex: index('mmd_resource_options_type_active_sort_idx').on(\n table.resourceType,\n table.isActive,\n table.sortOrder\n ),\n })\n);\n\n/**\n * MMD预设列表项表 (mmd_preset_items)\n * \n * 管理预设的MMD资源组合(用于列表模式)\n */\nexport const mmdPresetItems = pgTable(\n 'mmd_preset_items',\n {\n /** 主键ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n /** 预设名称 */\n name: varchar('name', { length: 255 }).notNull(),\n\n /** 预设描述 */\n description: text('description'),\n\n /** 缩略图文件ID */\n thumbnailFileId: uuid('thumbnail_file_id'),\n\n /** 模型文件ID */\n modelFileId: uuid('model_file_id').notNull(),\n\n /** 动作文件ID */\n motionFileId: uuid('motion_file_id'),\n\n /** 相机动画文件ID */\n cameraFileId: uuid('camera_file_id'),\n\n /** 音频文件ID */\n audioFileId: uuid('audio_file_id'),\n\n /** 舞台模型文件ID */\n stageModelFileId: uuid('stage_model_file_id'),\n\n /** 附加动作文件ID列表(JSON数组) */\n additionalMotionFileIds: json('additional_motion_file_ids').$type<string[]>(),\n\n /** 显示顺序 */\n sortOrder: integer('sort_order').notNull().default(0),\n\n /** 是否启用 */\n isActive: boolean('is_active').notNull().default(true),\n\n /** 预设标签(JSON数组) */\n tags: json('tags').$type<string[]>(),\n\n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n },\n (table) => ({\n /** 按活跃状态查询的索引 */\n isActiveIndex: index('mmd_preset_items_is_active_idx').on(table.isActive),\n\n /** 按排序查询的索引 */\n sortOrderIndex: index('mmd_preset_items_sort_order_idx').on(table.sortOrder),\n\n /** 按创建者查询的索引 */\n createdByIndex: index('mmd_preset_items_created_by_idx').on(table.createdBy),\n\n /** 按模型文件查询的索引 */\n modelFileIndex: index('mmd_preset_items_model_file_idx').on(table.modelFileId),\n })\n);\n\n// ========== 关系定义 ==========\n\nexport const mmdPlaylistsRelations = relations(mmdPlaylists, ({ many }) => ({\n nodes: many(mmdPlaylistNodes),\n}));\n\nexport const mmdPlaylistNodesRelations = relations(mmdPlaylistNodes, ({ one }) => ({\n playlist: one(mmdPlaylists, {\n fields: [mmdPlaylistNodes.playlistId],\n references: [mmdPlaylists.id],\n }),\n}));\n\n// ========== 导出类型 ==========\n\nexport type MmdPlaylist = typeof mmdPlaylists.$inferSelect;\nexport type NewMmdPlaylist = typeof mmdPlaylists.$inferInsert;\n\nexport type MmdPlaylistNode = typeof mmdPlaylistNodes.$inferSelect;\nexport type NewMmdPlaylistNode = typeof mmdPlaylistNodes.$inferInsert;\n\nexport type MmdResourceOption = typeof mmdResourceOptions.$inferSelect;\nexport type NewMmdResourceOption = typeof mmdResourceOptions.$inferInsert;\n\nexport type MmdPresetItem = typeof mmdPresetItems.$inferSelect;\nexport type NewMmdPresetItem = typeof mmdPresetItems.$inferInsert;\n\n"]}