sa2kit 3.0.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 (980) hide show
  1. package/README.md +5 -5
  2. package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
  3. package/dist/AliyunOSSProvider-7IOT5U6M.js.map +1 -0
  4. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
  5. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs.map +1 -0
  6. package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
  7. package/dist/LocalStorageProvider-KJKRCKBS.js.map +1 -0
  8. package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
  9. package/dist/LocalStorageProvider-O22465NY.mjs.map +1 -0
  10. package/dist/chunk-2234T4A6.js +303 -0
  11. package/dist/chunk-2234T4A6.js.map +1 -0
  12. package/dist/chunk-36KGNXKW.js +16 -0
  13. package/dist/chunk-36KGNXKW.js.map +1 -0
  14. package/dist/chunk-375C7WL7.js +2695 -0
  15. package/dist/chunk-375C7WL7.js.map +1 -0
  16. package/dist/chunk-3J24Z4MB.js +991 -0
  17. package/dist/chunk-3J24Z4MB.js.map +1 -0
  18. package/dist/chunk-3QCATFQV.js +43 -0
  19. package/dist/chunk-3QCATFQV.js.map +1 -0
  20. package/dist/chunk-3R6JHA6D.js +120 -0
  21. package/dist/chunk-3R6JHA6D.js.map +1 -0
  22. package/dist/chunk-4OXKHV7J.js +43 -0
  23. package/dist/chunk-4OXKHV7J.js.map +1 -0
  24. package/dist/chunk-4PJM4752.js +4 -0
  25. package/dist/chunk-4PJM4752.js.map +1 -0
  26. package/dist/chunk-65JRVC3F.mjs +54 -0
  27. package/dist/chunk-65JRVC3F.mjs.map +1 -0
  28. package/dist/chunk-6HL54I2B.js +336 -0
  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-6YLCRWKM.mjs +8 -0
  33. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  34. package/dist/chunk-7CRU2Y5X.mjs +152 -0
  35. package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
  36. package/dist/chunk-7PMT4L4I.js +324 -0
  37. package/dist/chunk-7PMT4L4I.js.map +1 -0
  38. package/dist/chunk-7VVZHFEM.js +88 -0
  39. package/dist/chunk-7VVZHFEM.js.map +1 -0
  40. package/dist/chunk-AWHGIKTQ.js +56 -0
  41. package/dist/chunk-AWHGIKTQ.js.map +1 -0
  42. package/dist/chunk-B3GYF6TY.js +37 -0
  43. package/dist/chunk-B3GYF6TY.js.map +1 -0
  44. package/dist/chunk-BDBJFOXM.mjs +14 -0
  45. package/dist/chunk-BDBJFOXM.mjs.map +1 -0
  46. package/dist/chunk-BTW3SWQN.mjs +25 -0
  47. package/dist/chunk-BTW3SWQN.mjs.map +1 -0
  48. package/dist/chunk-CHYSSZ4E.mjs +734 -0
  49. package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
  50. package/dist/chunk-DO6QYAZV.mjs +298 -0
  51. package/dist/chunk-DO6QYAZV.mjs.map +1 -0
  52. package/dist/chunk-DTR53LQO.mjs +781 -0
  53. package/dist/chunk-DTR53LQO.mjs.map +1 -0
  54. package/dist/chunk-EI2S4XDG.mjs +89 -0
  55. package/dist/chunk-EI2S4XDG.mjs.map +1 -0
  56. package/dist/chunk-EOZHUI46.js +93 -0
  57. package/dist/chunk-EOZHUI46.js.map +1 -0
  58. package/dist/chunk-F2BZIU67.js +184 -0
  59. package/dist/chunk-F2BZIU67.js.map +1 -0
  60. package/dist/chunk-F2TEJSCP.js +756 -0
  61. package/dist/chunk-F2TEJSCP.js.map +1 -0
  62. package/dist/chunk-FCLS5R24.js +148 -0
  63. package/dist/chunk-FCLS5R24.js.map +1 -0
  64. package/dist/chunk-FUA6ZGMI.mjs +376 -0
  65. package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
  66. package/dist/chunk-FY2X3LYR.mjs +3 -0
  67. package/dist/chunk-FY2X3LYR.mjs.map +1 -0
  68. package/dist/chunk-GS4SAW25.mjs +116 -0
  69. package/dist/chunk-GS4SAW25.mjs.map +1 -0
  70. package/dist/chunk-H56ICWUO.js +321 -0
  71. package/dist/chunk-H56ICWUO.js.map +1 -0
  72. package/dist/chunk-HG34SGMN.mjs +546 -0
  73. package/dist/chunk-HG34SGMN.mjs.map +1 -0
  74. package/dist/chunk-HL4H2HF6.js +279 -0
  75. package/dist/chunk-HL4H2HF6.js.map +1 -0
  76. package/dist/chunk-IJIQUMAK.mjs +272 -0
  77. package/dist/chunk-IJIQUMAK.mjs.map +1 -0
  78. package/dist/chunk-KEZFTDZT.mjs +559 -0
  79. package/dist/chunk-KEZFTDZT.mjs.map +1 -0
  80. package/dist/chunk-KHOVC2KL.js +144 -0
  81. package/dist/chunk-KHOVC2KL.js.map +1 -0
  82. package/dist/chunk-KRBSTLKC.js +6154 -0
  83. package/dist/chunk-KRBSTLKC.js.map +1 -0
  84. package/dist/chunk-KVYHCGRY.js +2011 -0
  85. package/dist/chunk-KVYHCGRY.js.map +1 -0
  86. package/dist/chunk-LZ5YTMMP.mjs +41 -0
  87. package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
  88. package/dist/chunk-MJ6XJGAL.js +1551 -0
  89. package/dist/chunk-MJ6XJGAL.js.map +1 -0
  90. package/dist/chunk-MKLXCV4Z.mjs +1510 -0
  91. package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
  92. package/dist/chunk-MMDSZIXD.mjs +286 -0
  93. package/dist/chunk-MMDSZIXD.mjs.map +1 -0
  94. package/dist/chunk-N2O3OX5Y.mjs +243 -0
  95. package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
  96. package/dist/chunk-O6NNSPWD.mjs +35 -0
  97. package/dist/chunk-O6NNSPWD.mjs.map +1 -0
  98. package/dist/chunk-OIRZXSYM.js +80 -0
  99. package/dist/chunk-OIRZXSYM.js.map +1 -0
  100. package/dist/chunk-P7JQRNBJ.mjs +76 -0
  101. package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
  102. package/dist/chunk-PA4ELVGI.js +20 -0
  103. package/dist/chunk-PA4ELVGI.js.map +1 -0
  104. package/dist/chunk-PLIG5257.mjs +2613 -0
  105. package/dist/chunk-PLIG5257.mjs.map +1 -0
  106. package/dist/chunk-QIF4MG5V.mjs +283 -0
  107. package/dist/chunk-QIF4MG5V.mjs.map +1 -0
  108. package/dist/chunk-RHECN4E2.mjs +6077 -0
  109. package/dist/chunk-RHECN4E2.mjs.map +1 -0
  110. package/dist/chunk-RHHTZTIN.mjs +314 -0
  111. package/dist/chunk-RHHTZTIN.mjs.map +1 -0
  112. package/dist/chunk-RRQ2X26Z.js +106 -0
  113. package/dist/chunk-RRQ2X26Z.js.map +1 -0
  114. package/dist/chunk-RST2T54Y.js +836 -0
  115. package/dist/chunk-RST2T54Y.js.map +1 -0
  116. package/dist/chunk-RVNQI6BI.js +249 -0
  117. package/dist/chunk-RVNQI6BI.js.map +1 -0
  118. package/dist/chunk-S3K4LTRI.mjs +226 -0
  119. package/dist/chunk-S3K4LTRI.mjs.map +1 -0
  120. package/dist/chunk-SWZ5XNF6.js +158 -0
  121. package/dist/chunk-SWZ5XNF6.js.map +1 -0
  122. package/dist/chunk-TNJ6LYX7.mjs +18 -0
  123. package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
  124. package/dist/chunk-U7HNBCBS.js +207 -0
  125. package/dist/chunk-U7HNBCBS.js.map +1 -0
  126. package/dist/chunk-UJS3YSD3.mjs +37 -0
  127. package/dist/chunk-UJS3YSD3.mjs.map +1 -0
  128. package/dist/chunk-UJUWDF7M.mjs +336 -0
  129. package/dist/chunk-UJUWDF7M.mjs.map +1 -0
  130. package/dist/chunk-UR5NENGE.js +78 -0
  131. package/dist/chunk-UR5NENGE.js.map +1 -0
  132. package/dist/chunk-V7HGBDCB.mjs +135 -0
  133. package/dist/chunk-V7HGBDCB.mjs.map +1 -0
  134. package/dist/chunk-V7RLIZMN.js +90 -0
  135. package/dist/chunk-V7RLIZMN.js.map +1 -0
  136. package/dist/chunk-VCKXK6V5.js +345 -0
  137. package/dist/chunk-VCKXK6V5.js.map +1 -0
  138. package/dist/chunk-VIEXDTNF.mjs +100 -0
  139. package/dist/chunk-VIEXDTNF.mjs.map +1 -0
  140. package/dist/chunk-VN2DULIA.js +579 -0
  141. package/dist/chunk-VN2DULIA.js.map +1 -0
  142. package/dist/chunk-VNWMRUY6.js +168 -0
  143. package/dist/chunk-VNWMRUY6.js.map +1 -0
  144. package/dist/chunk-VYK4M2D6.mjs +177 -0
  145. package/dist/chunk-VYK4M2D6.mjs.map +1 -0
  146. package/dist/chunk-WB4H6ZUW.mjs +86 -0
  147. package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
  148. package/dist/chunk-WM3AEJ2E.mjs +981 -0
  149. package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
  150. package/dist/chunk-X5GINUGI.mjs +162 -0
  151. package/dist/chunk-X5GINUGI.mjs.map +1 -0
  152. package/dist/chunk-XB7GUEHZ.mjs +82 -0
  153. package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
  154. package/dist/chunk-XE5RGZ3B.js +242 -0
  155. package/dist/chunk-XE5RGZ3B.js.map +1 -0
  156. package/dist/chunk-XNTIMVSL.mjs +193 -0
  157. package/dist/chunk-XNTIMVSL.mjs.map +1 -0
  158. package/dist/chunk-Y7WHUKJF.js +387 -0
  159. package/dist/chunk-Y7WHUKJF.js.map +1 -0
  160. package/dist/chunk-YIRPPMCN.mjs +1916 -0
  161. package/dist/chunk-YIRPPMCN.mjs.map +1 -0
  162. package/dist/chunk-YTGUIRRH.js +10 -0
  163. package/dist/chunk-YTGUIRRH.js.map +1 -0
  164. package/dist/chunk-Z2SNB5LJ.js +28 -0
  165. package/dist/chunk-Z2SNB5LJ.js.map +1 -0
  166. package/dist/chunk-ZOP7YIVX.js +552 -0
  167. package/dist/chunk-ZOP7YIVX.js.map +1 -0
  168. package/dist/chunk-ZUZLWHH5.mjs +146 -0
  169. package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
  170. package/dist/common/ai/llm/core/index.d.mts +70 -0
  171. package/dist/common/ai/llm/core/index.d.ts +70 -0
  172. package/dist/common/ai/llm/core/index.js +54 -0
  173. package/dist/common/ai/llm/core/index.mjs +5 -0
  174. package/dist/common/ai/llm/electron/index.d.mts +6 -0
  175. package/dist/common/ai/llm/electron/index.d.ts +6 -0
  176. package/dist/common/ai/llm/electron/index.js +67 -0
  177. package/dist/common/ai/llm/electron/index.mjs +10 -0
  178. package/dist/common/ai/llm/index.d.mts +3 -0
  179. package/dist/common/ai/llm/index.d.ts +3 -0
  180. package/dist/common/ai/llm/index.js +54 -0
  181. package/dist/common/ai/llm/index.mjs +5 -0
  182. package/dist/common/ai/llm/miniapp/index.d.mts +6 -0
  183. package/dist/common/ai/llm/miniapp/index.d.ts +6 -0
  184. package/dist/common/ai/llm/miniapp/index.js +59 -0
  185. package/dist/common/ai/llm/miniapp/index.mjs +6 -0
  186. package/dist/common/ai/llm/rn/index.d.mts +6 -0
  187. package/dist/common/ai/llm/rn/index.d.ts +6 -0
  188. package/dist/common/ai/llm/rn/index.js +59 -0
  189. package/dist/common/ai/llm/rn/index.mjs +6 -0
  190. package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
  191. package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
  192. package/dist/common/ai/llm/ui/electron/index.js +22 -0
  193. package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
  194. package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
  195. package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
  196. package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
  197. package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
  198. package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
  199. package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
  200. package/dist/common/ai/llm/ui/rn/index.js +14 -0
  201. package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
  202. package/dist/common/ai/llm/ui/web/index.d.mts +15 -0
  203. package/dist/common/ai/llm/ui/web/index.d.ts +15 -0
  204. package/dist/common/ai/llm/ui/web/index.js +21 -0
  205. package/dist/common/ai/llm/ui/web/index.mjs +8 -0
  206. package/dist/common/ai/llm/web/index.d.mts +6 -0
  207. package/dist/common/ai/llm/web/index.d.ts +6 -0
  208. package/dist/common/ai/llm/web/index.js +66 -0
  209. package/dist/common/ai/llm/web/index.mjs +9 -0
  210. package/dist/common/analytics/index.d.mts +2 -0
  211. package/dist/common/analytics/index.d.ts +2 -0
  212. package/dist/common/analytics/index.js +314 -0
  213. package/dist/common/analytics/index.mjs +5 -0
  214. package/dist/common/analytics/server/index.js +529 -0
  215. package/dist/common/analytics/server/index.js.map +1 -0
  216. package/dist/common/analytics/server/index.mjs +525 -0
  217. package/dist/common/analytics/server/index.mjs.map +1 -0
  218. package/dist/common/api/index.d.mts +3 -0
  219. package/dist/common/api/index.d.ts +3 -0
  220. package/dist/common/api/index.js +21 -0
  221. package/dist/common/api/index.mjs +4 -0
  222. package/dist/common/auth/client/index.d.mts +1 -31
  223. package/dist/common/auth/client/index.d.ts +1 -31
  224. package/dist/common/auth/client/index.js +2 -15
  225. package/dist/common/auth/client/index.mjs +1 -2
  226. package/dist/common/auth/components/index.d.mts +5 -239
  227. package/dist/common/auth/components/index.d.ts +5 -239
  228. package/dist/common/auth/components/index.js +878 -49
  229. package/dist/common/auth/components/index.js.map +1 -1
  230. package/dist/common/auth/components/index.mjs +871 -5
  231. package/dist/common/auth/components/index.mjs.map +1 -1
  232. package/dist/common/auth/hooks/index.d.mts +2 -29
  233. package/dist/common/auth/hooks/index.d.ts +2 -29
  234. package/dist/common/auth/hooks/index.js +2 -11
  235. package/dist/common/auth/hooks/index.mjs +1 -2
  236. package/dist/common/auth/index.d.mts +5 -9
  237. package/dist/common/auth/index.d.ts +5 -9
  238. package/dist/common/auth/index.js +5 -26
  239. package/dist/common/auth/index.mjs +3 -4
  240. package/dist/common/auth/rn/index.d.mts +1 -17
  241. package/dist/common/auth/rn/index.d.ts +1 -17
  242. package/dist/common/auth/rn/index.js +2 -34
  243. package/dist/common/auth/rn/index.js.map +1 -1
  244. package/dist/common/auth/rn/index.mjs +2 -31
  245. package/dist/common/auth/rn/index.mjs.map +1 -1
  246. package/dist/common/auth/server/index.d.mts +81 -2
  247. package/dist/common/auth/server/index.d.ts +81 -2
  248. package/dist/common/auth/server/index.js +128 -37
  249. package/dist/common/auth/server/index.js.map +1 -1
  250. package/dist/common/auth/server/index.mjs +124 -1
  251. package/dist/common/auth/server/index.mjs.map +1 -1
  252. package/dist/common/auth/services/index.js +12 -9
  253. package/dist/common/auth/services/index.js.map +1 -1
  254. package/dist/common/auth/services/index.mjs +10 -1
  255. package/dist/common/auth/services/index.mjs.map +1 -1
  256. package/dist/common/components/index.d.mts +4 -0
  257. package/dist/common/components/index.d.ts +4 -0
  258. package/dist/common/components/index.js +414 -0
  259. package/dist/common/components/index.mjs +9 -0
  260. package/dist/common/config/index.d.mts +1 -0
  261. package/dist/common/config/index.d.ts +1 -0
  262. package/dist/common/config/index.js +21 -0
  263. package/dist/common/config/index.mjs +4 -0
  264. package/dist/common/config/server/index.js +1177 -0
  265. package/dist/common/config/server/index.js.map +1 -0
  266. package/dist/common/config/server/index.mjs +1138 -0
  267. package/dist/common/config/server/index.mjs.map +1 -0
  268. package/dist/common/export/index.d.mts +2 -2
  269. package/dist/common/export/index.d.ts +2 -2
  270. package/dist/common/export/index.js +67 -67
  271. package/dist/common/export/index.mjs +3 -3
  272. package/dist/common/export/server/index.d.mts +2 -2
  273. package/dist/common/export/server/index.d.ts +2 -2
  274. package/dist/common/export/server/index.js +76 -48
  275. package/dist/common/export/server/index.mjs +3 -3
  276. package/dist/common/file/index.d.mts +2 -2
  277. package/dist/common/file/index.d.ts +2 -2
  278. package/dist/common/file/index.js +27 -27
  279. package/dist/common/file/index.mjs +5 -5
  280. package/dist/common/file/server/index.d.mts +2 -2
  281. package/dist/common/file/server/index.d.ts +2 -2
  282. package/dist/common/file/server/index.js +58 -50
  283. package/dist/common/file/server/index.mjs +8 -8
  284. package/dist/common/i18n/index.d.mts +2 -0
  285. package/dist/common/i18n/index.d.ts +2 -0
  286. package/dist/common/i18n/index.js +73 -0
  287. package/dist/common/i18n/index.mjs +4 -0
  288. package/dist/common/imageCrop/index.d.mts +2 -0
  289. package/dist/common/imageCrop/index.d.ts +2 -0
  290. package/dist/common/imageCrop/index.js +61 -0
  291. package/dist/common/imageCrop/index.mjs +4 -0
  292. package/dist/common/index.d.mts +17 -20
  293. package/dist/common/index.d.ts +17 -20
  294. package/dist/common/index.js +76 -70
  295. package/dist/common/index.mjs +27 -29
  296. package/dist/common/logger/index.d.mts +1 -1
  297. package/dist/common/logger/index.d.ts +1 -1
  298. package/dist/common/logger/index.js +6 -7
  299. package/dist/common/logger/index.mjs +1 -2
  300. package/dist/common/ossFile/index.d.mts +61 -0
  301. package/dist/common/ossFile/index.d.ts +61 -0
  302. package/dist/common/ossFile/index.js +96 -0
  303. package/dist/common/ossFile/index.mjs +7 -0
  304. package/dist/common/ossFile/server/index.d.mts +94 -0
  305. package/dist/common/ossFile/server/index.d.ts +94 -0
  306. package/dist/common/ossFile/server/index.js +221 -0
  307. package/dist/common/ossFile/server/index.mjs +12 -0
  308. package/dist/common/platform/index.js +8 -8
  309. package/dist/common/platform/index.mjs +4 -4
  310. package/dist/common/request/index.d.mts +1 -1
  311. package/dist/common/request/index.d.ts +1 -1
  312. package/dist/common/request/index.js +5 -7
  313. package/dist/common/request/index.mjs +2 -4
  314. package/dist/common/storage/index.d.mts +1 -1
  315. package/dist/common/storage/index.d.ts +1 -1
  316. package/dist/common/storage/index.js +17 -17
  317. package/dist/common/storage/index.mjs +5 -5
  318. package/dist/common/universalExport/index.d.mts +232 -0
  319. package/dist/common/universalExport/index.d.ts +232 -0
  320. package/dist/common/universalExport/index.js +178 -0
  321. package/dist/common/universalExport/index.mjs +5 -0
  322. package/dist/common/universalExport/server/index.d.mts +1189 -0
  323. package/dist/common/universalExport/server/index.d.ts +1189 -0
  324. package/dist/common/universalExport/server/index.js +151 -0
  325. package/dist/common/universalExport/server/index.mjs +6 -0
  326. package/dist/common/universalFile/index.d.mts +409 -0
  327. package/dist/common/universalFile/index.d.ts +409 -0
  328. package/dist/common/universalFile/index.js +1742 -0
  329. package/dist/common/universalFile/index.js.map +1 -0
  330. package/dist/common/universalFile/index.mjs +1497 -0
  331. package/dist/common/universalFile/index.mjs.map +1 -0
  332. package/dist/common/universalFile/server/index.d.mts +1064 -0
  333. package/dist/common/universalFile/server/index.d.ts +1064 -0
  334. package/dist/common/universalFile/server/index.js +311 -0
  335. package/dist/common/universalFile/server/index.mjs +10 -0
  336. package/dist/common/utils/index.d.mts +1 -1
  337. package/dist/common/utils/index.d.ts +1 -1
  338. package/dist/common/utils/index.js +11 -12
  339. package/dist/common/utils/index.mjs +2 -3
  340. package/dist/index-BRLygK4h.d.ts +67 -0
  341. package/dist/index-BWNK5mH2.d.ts +76 -0
  342. package/dist/index-Bd7cKF1j.d.mts +50 -0
  343. package/dist/index-BiCK6gg6.d.mts +210 -0
  344. package/dist/index-BiCK6gg6.d.ts +210 -0
  345. package/dist/index-C-P2yBTH.d.mts +76 -0
  346. package/dist/index-CT4K2z-O.d.ts +81 -0
  347. package/dist/index-D6RJTGce.d.mts +81 -0
  348. package/dist/index-DA7L9JlE.d.mts +159 -0
  349. package/dist/index-DRQxtCDw.d.ts +50 -0
  350. package/dist/index-DXVph21C.d.mts +201 -0
  351. package/dist/index-DXVph21C.d.ts +201 -0
  352. package/dist/index-DzyK789B.d.mts +67 -0
  353. package/dist/index-FVJZCEtm.d.mts +145 -0
  354. package/dist/index-FVJZCEtm.d.ts +145 -0
  355. package/dist/index-nD9vPCZT.d.ts +159 -0
  356. package/dist/index-nOmIv2BG.d.mts +559 -0
  357. package/dist/index-nOmIv2BG.d.ts +559 -0
  358. package/dist/path-Bzc7hj1N.d.ts +45 -0
  359. package/dist/path-DN_65vhO.d.mts +45 -0
  360. package/dist/utils-Dm3O1rAa.d.mts +366 -0
  361. package/dist/utils-Dm3O1rAa.d.ts +366 -0
  362. package/package.json +293 -348
  363. package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
  364. package/dist/AliyunOSSProvider-4GRL2FJB.js.map +0 -1
  365. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
  366. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs.map +0 -1
  367. package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
  368. package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
  369. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  370. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  371. package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
  372. package/dist/LocalStorageProvider-J5RHV37G.mjs.map +0 -1
  373. package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
  374. package/dist/LocalStorageProvider-PFA2DMIJ.js.map +0 -1
  375. package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
  376. package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
  377. package/dist/ai/llm/core/index.d.mts +0 -70
  378. package/dist/ai/llm/core/index.d.ts +0 -70
  379. package/dist/ai/llm/core/index.js +0 -54
  380. package/dist/ai/llm/core/index.mjs +0 -5
  381. package/dist/ai/llm/electron/index.d.mts +0 -6
  382. package/dist/ai/llm/electron/index.d.ts +0 -6
  383. package/dist/ai/llm/electron/index.js +0 -66
  384. package/dist/ai/llm/electron/index.mjs +0 -9
  385. package/dist/ai/llm/index.d.mts +0 -3
  386. package/dist/ai/llm/index.d.ts +0 -3
  387. package/dist/ai/llm/index.js +0 -54
  388. package/dist/ai/llm/index.mjs +0 -5
  389. package/dist/ai/llm/miniapp/index.d.mts +0 -6
  390. package/dist/ai/llm/miniapp/index.d.ts +0 -6
  391. package/dist/ai/llm/miniapp/index.js +0 -59
  392. package/dist/ai/llm/miniapp/index.mjs +0 -6
  393. package/dist/ai/llm/rn/index.d.mts +0 -6
  394. package/dist/ai/llm/rn/index.d.ts +0 -6
  395. package/dist/ai/llm/rn/index.js +0 -59
  396. package/dist/ai/llm/rn/index.mjs +0 -6
  397. package/dist/ai/llm/ui/electron/index.d.mts +0 -5
  398. package/dist/ai/llm/ui/electron/index.d.ts +0 -5
  399. package/dist/ai/llm/ui/electron/index.js +0 -21
  400. package/dist/ai/llm/ui/electron/index.mjs +0 -8
  401. package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
  402. package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
  403. package/dist/ai/llm/ui/miniapp/index.js +0 -14
  404. package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
  405. package/dist/ai/llm/ui/rn/index.d.mts +0 -9
  406. package/dist/ai/llm/ui/rn/index.d.ts +0 -9
  407. package/dist/ai/llm/ui/rn/index.js +0 -14
  408. package/dist/ai/llm/ui/rn/index.mjs +0 -5
  409. package/dist/ai/llm/ui/web/index.d.mts +0 -15
  410. package/dist/ai/llm/ui/web/index.d.ts +0 -15
  411. package/dist/ai/llm/ui/web/index.js +0 -20
  412. package/dist/ai/llm/ui/web/index.mjs +0 -7
  413. package/dist/ai/llm/web/index.d.mts +0 -6
  414. package/dist/ai/llm/web/index.d.ts +0 -6
  415. package/dist/ai/llm/web/index.js +0 -65
  416. package/dist/ai/llm/web/index.mjs +0 -8
  417. package/dist/analytics/index.d.mts +0 -2
  418. package/dist/analytics/index.d.ts +0 -2
  419. package/dist/analytics/index.js +0 -314
  420. package/dist/analytics/index.mjs +0 -5
  421. package/dist/analytics/server/index.js +0 -529
  422. package/dist/analytics/server/index.js.map +0 -1
  423. package/dist/analytics/server/index.mjs +0 -525
  424. package/dist/analytics/server/index.mjs.map +0 -1
  425. package/dist/api/index.d.mts +0 -3
  426. package/dist/api/index.d.ts +0 -3
  427. package/dist/api/index.js +0 -21
  428. package/dist/api/index.mjs +0 -4
  429. package/dist/audioDetection/index.d.mts +0 -449
  430. package/dist/audioDetection/index.d.ts +0 -449
  431. package/dist/audioDetection/index.js +0 -1244
  432. package/dist/audioDetection/index.js.map +0 -1
  433. package/dist/audioDetection/index.mjs +0 -1227
  434. package/dist/audioDetection/index.mjs.map +0 -1
  435. package/dist/auth/client/index.d.mts +0 -13
  436. package/dist/auth/client/index.d.ts +0 -13
  437. package/dist/auth/client/index.js +0 -26
  438. package/dist/auth/client/index.mjs +0 -5
  439. package/dist/auth/components/index.d.mts +0 -10
  440. package/dist/auth/components/index.d.ts +0 -10
  441. package/dist/auth/components/index.js +0 -70
  442. package/dist/auth/components/index.mjs +0 -9
  443. package/dist/auth/hooks/index.d.mts +0 -13
  444. package/dist/auth/hooks/index.d.ts +0 -13
  445. package/dist/auth/hooks/index.js +0 -28
  446. package/dist/auth/hooks/index.mjs +0 -7
  447. package/dist/auth/index.d.mts +0 -21
  448. package/dist/auth/index.d.ts +0 -21
  449. package/dist/auth/index.js +0 -112
  450. package/dist/auth/index.mjs +0 -11
  451. package/dist/auth/rn/index.d.mts +0 -3133
  452. package/dist/auth/rn/index.d.ts +0 -3133
  453. package/dist/auth/rn/index.js +0 -684
  454. package/dist/auth/rn/index.js.map +0 -1
  455. package/dist/auth/rn/index.mjs +0 -663
  456. package/dist/auth/rn/index.mjs.map +0 -1
  457. package/dist/auth/schema/index.d.mts +0 -4
  458. package/dist/auth/schema/index.d.ts +0 -4
  459. package/dist/auth/schema/index.js +0 -49
  460. package/dist/auth/schema/index.mjs +0 -4
  461. package/dist/auth/services/index.d.mts +0 -1
  462. package/dist/auth/services/index.d.ts +0 -1
  463. package/dist/auth/services/index.js +0 -17
  464. package/dist/auth/services/index.mjs +0 -4
  465. package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
  466. package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
  467. package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
  468. package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
  469. package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
  470. package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
  471. package/dist/business/index.d.mts +0 -2
  472. package/dist/business/index.d.ts +0 -2
  473. package/dist/business/index.js +0 -581
  474. package/dist/business/index.js.map +0 -1
  475. package/dist/business/index.mjs +0 -575
  476. package/dist/business/index.mjs.map +0 -1
  477. package/dist/calendar/index.d.mts +0 -1325
  478. package/dist/calendar/index.d.ts +0 -1325
  479. package/dist/calendar/index.js +0 -5964
  480. package/dist/calendar/index.js.map +0 -1
  481. package/dist/calendar/index.mjs +0 -5878
  482. package/dist/calendar/index.mjs.map +0 -1
  483. package/dist/calendar/routes/index.d.mts +0 -191
  484. package/dist/calendar/routes/index.d.ts +0 -191
  485. package/dist/calendar/routes/index.js +0 -844
  486. package/dist/calendar/routes/index.js.map +0 -1
  487. package/dist/calendar/routes/index.mjs +0 -826
  488. package/dist/calendar/routes/index.mjs.map +0 -1
  489. package/dist/chunk-25OFOKNF.js +0 -171
  490. package/dist/chunk-25OFOKNF.js.map +0 -1
  491. package/dist/chunk-2Y7BKFKZ.js +0 -37
  492. package/dist/chunk-2Y7BKFKZ.js.map +0 -1
  493. package/dist/chunk-3DXPQ4YV.mjs +0 -165
  494. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  495. package/dist/chunk-3FRAIS4T.mjs +0 -35
  496. package/dist/chunk-3FRAIS4T.mjs.map +0 -1
  497. package/dist/chunk-3NHAT7D4.mjs +0 -361
  498. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  499. package/dist/chunk-3Z43XGA4.mjs +0 -54
  500. package/dist/chunk-3Z43XGA4.mjs.map +0 -1
  501. package/dist/chunk-4FDUURSD.js +0 -22
  502. package/dist/chunk-4FDUURSD.js.map +0 -1
  503. package/dist/chunk-4WBCWJSN.js +0 -836
  504. package/dist/chunk-4WBCWJSN.js.map +0 -1
  505. package/dist/chunk-5GBDDXYL.mjs +0 -23
  506. package/dist/chunk-5GBDDXYL.mjs.map +0 -1
  507. package/dist/chunk-5USIS3UM.js +0 -4
  508. package/dist/chunk-5USIS3UM.js.map +0 -1
  509. package/dist/chunk-7E3J7VAD.mjs +0 -3
  510. package/dist/chunk-7E3J7VAD.mjs.map +0 -1
  511. package/dist/chunk-ACUFEDVQ.js +0 -345
  512. package/dist/chunk-ACUFEDVQ.js.map +0 -1
  513. package/dist/chunk-AQPU2AXH.js +0 -756
  514. package/dist/chunk-AQPU2AXH.js.map +0 -1
  515. package/dist/chunk-ATUCZXJY.js +0 -80
  516. package/dist/chunk-ATUCZXJY.js.map +0 -1
  517. package/dist/chunk-B3CZ3HXJ.mjs +0 -126
  518. package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
  519. package/dist/chunk-BCE6RUZV.js +0 -2695
  520. package/dist/chunk-BCE6RUZV.js.map +0 -1
  521. package/dist/chunk-BIHYZA67.mjs +0 -2613
  522. package/dist/chunk-BIHYZA67.mjs.map +0 -1
  523. package/dist/chunk-C6KV7VTZ.mjs +0 -152
  524. package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
  525. package/dist/chunk-CAYOQDBR.js +0 -78
  526. package/dist/chunk-CAYOQDBR.js.map +0 -1
  527. package/dist/chunk-CIVO4R6N.mjs +0 -37
  528. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  529. package/dist/chunk-CX2GHCAI.mjs +0 -217
  530. package/dist/chunk-CX2GHCAI.mjs.map +0 -1
  531. package/dist/chunk-DIF5VRL3.mjs +0 -73
  532. package/dist/chunk-DIF5VRL3.mjs.map +0 -1
  533. package/dist/chunk-FCEBAWN6.js +0 -18
  534. package/dist/chunk-FCEBAWN6.js.map +0 -1
  535. package/dist/chunk-FHIE5MTC.mjs +0 -541
  536. package/dist/chunk-FHIE5MTC.mjs.map +0 -1
  537. package/dist/chunk-FHLTPXAR.js +0 -56
  538. package/dist/chunk-FHLTPXAR.js.map +0 -1
  539. package/dist/chunk-FIUBFREP.mjs +0 -298
  540. package/dist/chunk-FIUBFREP.mjs.map +0 -1
  541. package/dist/chunk-FOQEQWX5.js +0 -4
  542. package/dist/chunk-FOQEQWX5.js.map +0 -1
  543. package/dist/chunk-FXQOXLDE.js +0 -120
  544. package/dist/chunk-FXQOXLDE.js.map +0 -1
  545. package/dist/chunk-G4NFB2QA.mjs +0 -212
  546. package/dist/chunk-G4NFB2QA.mjs.map +0 -1
  547. package/dist/chunk-G5HJGXGC.mjs +0 -39
  548. package/dist/chunk-G5HJGXGC.mjs.map +0 -1
  549. package/dist/chunk-G6HXNQ2U.mjs +0 -336
  550. package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
  551. package/dist/chunk-G6NSKJMH.js +0 -106
  552. package/dist/chunk-G6NSKJMH.js.map +0 -1
  553. package/dist/chunk-G7UBMCUT.mjs +0 -41
  554. package/dist/chunk-G7UBMCUT.mjs.map +0 -1
  555. package/dist/chunk-GQZHGSRR.js +0 -44
  556. package/dist/chunk-GQZHGSRR.js.map +0 -1
  557. package/dist/chunk-GS7XLKET.js +0 -41
  558. package/dist/chunk-GS7XLKET.js.map +0 -1
  559. package/dist/chunk-GWNBVGDT.mjs +0 -1232
  560. package/dist/chunk-GWNBVGDT.mjs.map +0 -1
  561. package/dist/chunk-HDMIOOZY.mjs +0 -546
  562. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  563. package/dist/chunk-HJ6MH7J7.js +0 -552
  564. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  565. package/dist/chunk-HJZHQW5R.mjs +0 -146
  566. package/dist/chunk-HJZHQW5R.mjs.map +0 -1
  567. package/dist/chunk-I5ZPEDNR.mjs +0 -734
  568. package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
  569. package/dist/chunk-IBWDBBX5.mjs +0 -16
  570. package/dist/chunk-IBWDBBX5.mjs.map +0 -1
  571. package/dist/chunk-J77KR2EV.mjs +0 -193
  572. package/dist/chunk-J77KR2EV.mjs.map +0 -1
  573. package/dist/chunk-KH6RQ4J5.js +0 -28
  574. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  575. package/dist/chunk-KQ643L7Z.js +0 -144
  576. package/dist/chunk-KQ643L7Z.js.map +0 -1
  577. package/dist/chunk-LFB5EIIM.mjs +0 -31
  578. package/dist/chunk-LFB5EIIM.mjs.map +0 -1
  579. package/dist/chunk-LHJKLUM7.mjs +0 -18
  580. package/dist/chunk-LHJKLUM7.mjs.map +0 -1
  581. package/dist/chunk-MBANGIG3.mjs +0 -781
  582. package/dist/chunk-MBANGIG3.mjs.map +0 -1
  583. package/dist/chunk-MWSAH7ZG.mjs +0 -42
  584. package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
  585. package/dist/chunk-MZOGYD4N.mjs +0 -186
  586. package/dist/chunk-MZOGYD4N.mjs.map +0 -1
  587. package/dist/chunk-NCRP2YHY.mjs +0 -1598
  588. package/dist/chunk-NCRP2YHY.mjs.map +0 -1
  589. package/dist/chunk-NDGHXVGS.js +0 -25
  590. package/dist/chunk-NDGHXVGS.js.map +0 -1
  591. package/dist/chunk-NDPO5OMC.js +0 -563
  592. package/dist/chunk-NDPO5OMC.js.map +0 -1
  593. package/dist/chunk-PBI7FKMB.js +0 -43
  594. package/dist/chunk-PBI7FKMB.js.map +0 -1
  595. package/dist/chunk-Q5EDCKQA.js +0 -336
  596. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  597. package/dist/chunk-Q5VFBPMG.mjs +0 -76
  598. package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
  599. package/dist/chunk-QDUBO567.js +0 -1148
  600. package/dist/chunk-QDUBO567.js.map +0 -1
  601. package/dist/chunk-QP5N3ER6.js +0 -18
  602. package/dist/chunk-QP5N3ER6.js.map +0 -1
  603. package/dist/chunk-QXAOXBVB.mjs +0 -135
  604. package/dist/chunk-QXAOXBVB.mjs.map +0 -1
  605. package/dist/chunk-R2DXTE2L.js +0 -249
  606. package/dist/chunk-R2DXTE2L.js.map +0 -1
  607. package/dist/chunk-RJP2BRJD.mjs +0 -6077
  608. package/dist/chunk-RJP2BRJD.mjs.map +0 -1
  609. package/dist/chunk-RTD2WHQQ.mjs +0 -16
  610. package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
  611. package/dist/chunk-RWCD2CAD.mjs +0 -1132
  612. package/dist/chunk-RWCD2CAD.mjs.map +0 -1
  613. package/dist/chunk-S37OK2QG.js +0 -216
  614. package/dist/chunk-S37OK2QG.js.map +0 -1
  615. package/dist/chunk-S3PUP7N4.js +0 -20
  616. package/dist/chunk-S3PUP7N4.js.map +0 -1
  617. package/dist/chunk-S6YSGVWD.js +0 -224
  618. package/dist/chunk-S6YSGVWD.js.map +0 -1
  619. package/dist/chunk-S732H246.js +0 -6154
  620. package/dist/chunk-S732H246.js.map +0 -1
  621. package/dist/chunk-SFDJNKWC.js +0 -22
  622. package/dist/chunk-SFDJNKWC.js.map +0 -1
  623. package/dist/chunk-SKFEJPMJ.mjs +0 -226
  624. package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
  625. package/dist/chunk-SLKOEYFH.js +0 -303
  626. package/dist/chunk-SLKOEYFH.js.map +0 -1
  627. package/dist/chunk-TC5YU6A4.mjs +0 -243
  628. package/dist/chunk-TC5YU6A4.mjs.map +0 -1
  629. package/dist/chunk-TXMX6PZR.js +0 -190
  630. package/dist/chunk-TXMX6PZR.js.map +0 -1
  631. package/dist/chunk-UCOE6SET.js +0 -148
  632. package/dist/chunk-UCOE6SET.js.map +0 -1
  633. package/dist/chunk-UIYKZ73N.js +0 -36
  634. package/dist/chunk-UIYKZ73N.js.map +0 -1
  635. package/dist/chunk-V7EVKD5G.mjs +0 -116
  636. package/dist/chunk-V7EVKD5G.mjs.map +0 -1
  637. package/dist/chunk-VHN7PF5I.js +0 -20
  638. package/dist/chunk-VHN7PF5I.js.map +0 -1
  639. package/dist/chunk-VMTEDX5H.js +0 -1275
  640. package/dist/chunk-VMTEDX5H.js.map +0 -1
  641. package/dist/chunk-VRN76M56.mjs +0 -3
  642. package/dist/chunk-VRN76M56.mjs.map +0 -1
  643. package/dist/chunk-VXFUXZN5.mjs +0 -20
  644. package/dist/chunk-VXFUXZN5.mjs.map +0 -1
  645. package/dist/chunk-WEEXCPSE.mjs +0 -86
  646. package/dist/chunk-WEEXCPSE.mjs.map +0 -1
  647. package/dist/chunk-WW4GE6CZ.js +0 -1647
  648. package/dist/chunk-WW4GE6CZ.js.map +0 -1
  649. package/dist/chunk-WZDTNDYR.js +0 -207
  650. package/dist/chunk-WZDTNDYR.js.map +0 -1
  651. package/dist/chunk-XBZIS3MV.mjs +0 -13
  652. package/dist/chunk-XBZIS3MV.mjs.map +0 -1
  653. package/dist/chunk-XFOZ56FB.mjs +0 -20
  654. package/dist/chunk-XFOZ56FB.mjs.map +0 -1
  655. package/dist/chunk-XJ7ZAGC5.js +0 -88
  656. package/dist/chunk-XJ7ZAGC5.js.map +0 -1
  657. package/dist/chunk-XUS5ACKR.mjs +0 -100
  658. package/dist/chunk-XUS5ACKR.mjs.map +0 -1
  659. package/dist/chunk-YOTQG4NP.mjs +0 -314
  660. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  661. package/dist/chunk-Z23HAXHL.js +0 -136
  662. package/dist/chunk-Z23HAXHL.js.map +0 -1
  663. package/dist/chunk-ZGVB35L2.mjs +0 -25
  664. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  665. package/dist/chunk-ZLYPALF3.js +0 -242
  666. package/dist/chunk-ZLYPALF3.js.map +0 -1
  667. package/dist/chunk-ZM2SZJTZ.js +0 -158
  668. package/dist/chunk-ZM2SZJTZ.js.map +0 -1
  669. package/dist/chunk-ZRAW3HXA.js +0 -43
  670. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  671. package/dist/chunk-ZWQJSZEY.js +0 -371
  672. package/dist/chunk-ZWQJSZEY.js.map +0 -1
  673. package/dist/components/index.d.mts +0 -405
  674. package/dist/components/index.d.ts +0 -405
  675. package/dist/components/index.js +0 -2516
  676. package/dist/components/index.js.map +0 -1
  677. package/dist/components/index.mjs +0 -2396
  678. package/dist/components/index.mjs.map +0 -1
  679. package/dist/config/index.d.mts +0 -1
  680. package/dist/config/index.d.ts +0 -1
  681. package/dist/config/index.js +0 -21
  682. package/dist/config/index.mjs +0 -4
  683. package/dist/config/server/index.js +0 -1177
  684. package/dist/config/server/index.js.map +0 -1
  685. package/dist/config/server/index.mjs +0 -1138
  686. package/dist/config/server/index.mjs.map +0 -1
  687. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  688. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  689. package/dist/festivalCard/index.d.mts +0 -76
  690. package/dist/festivalCard/index.d.ts +0 -76
  691. package/dist/festivalCard/index.js +0 -1492
  692. package/dist/festivalCard/index.js.map +0 -1
  693. package/dist/festivalCard/index.mjs +0 -1475
  694. package/dist/festivalCard/index.mjs.map +0 -1
  695. package/dist/festivalCard/routes/index.d.mts +0 -42
  696. package/dist/festivalCard/routes/index.d.ts +0 -42
  697. package/dist/festivalCard/routes/index.js +0 -361
  698. package/dist/festivalCard/routes/index.js.map +0 -1
  699. package/dist/festivalCard/routes/index.mjs +0 -356
  700. package/dist/festivalCard/routes/index.mjs.map +0 -1
  701. package/dist/festivalCard/server/index.d.mts +0 -120
  702. package/dist/festivalCard/server/index.d.ts +0 -120
  703. package/dist/festivalCard/server/index.js +0 -272
  704. package/dist/festivalCard/server/index.js.map +0 -1
  705. package/dist/festivalCard/server/index.mjs +0 -265
  706. package/dist/festivalCard/server/index.mjs.map +0 -1
  707. package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
  708. package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
  709. package/dist/i18n/index.d.mts +0 -2
  710. package/dist/i18n/index.d.ts +0 -2
  711. package/dist/i18n/index.js +0 -73
  712. package/dist/i18n/index.mjs +0 -4
  713. package/dist/imageCrop/index.d.mts +0 -165
  714. package/dist/imageCrop/index.d.ts +0 -165
  715. package/dist/imageCrop/index.js +0 -560
  716. package/dist/imageCrop/index.js.map +0 -1
  717. package/dist/imageCrop/index.mjs +0 -541
  718. package/dist/imageCrop/index.mjs.map +0 -1
  719. package/dist/index-2G9Dxjvt.d.ts +0 -81
  720. package/dist/index-BcjDRcKp.d.mts +0 -40
  721. package/dist/index-Bjem5rWn.d.mts +0 -17
  722. package/dist/index-BlpXrrTy.d.ts +0 -40
  723. package/dist/index-C5U-2hJq.d.ts +0 -23
  724. package/dist/index-CYuUB8aF.d.mts +0 -67
  725. package/dist/index-CifSBBP2.d.ts +0 -17
  726. package/dist/index-D0K4ehme.d.mts +0 -20
  727. package/dist/index-DLnfKN-a.d.mts +0 -23
  728. package/dist/index-DSel44Ke.d.mts +0 -93
  729. package/dist/index-DSel44Ke.d.ts +0 -93
  730. package/dist/index-DZ5iJtNO.d.mts +0 -102
  731. package/dist/index-DZ5iJtNO.d.ts +0 -102
  732. package/dist/index-Da7qdkgW.d.ts +0 -20
  733. package/dist/index-DrPcMJPc.d.mts +0 -250
  734. package/dist/index-DrPcMJPc.d.ts +0 -250
  735. package/dist/index-WrR57hKT.d.ts +0 -67
  736. package/dist/index-oLUvfqT8.d.ts +0 -20
  737. package/dist/index-pe38RDgC.d.mts +0 -20
  738. package/dist/index-qcOvRVuN.d.mts +0 -81
  739. package/dist/index.d.mts +0 -11590
  740. package/dist/index.d.ts +0 -11590
  741. package/dist/index.js +0 -17679
  742. package/dist/index.js.map +0 -1
  743. package/dist/index.mjs +0 -17403
  744. package/dist/index.mjs.map +0 -1
  745. package/dist/logger/index.d.mts +0 -125
  746. package/dist/logger/index.d.ts +0 -125
  747. package/dist/logger/index.js +0 -29
  748. package/dist/logger/index.mjs +0 -4
  749. package/dist/mikuContest/ui/web/index.d.mts +0 -2
  750. package/dist/mikuContest/ui/web/index.d.ts +0 -2
  751. package/dist/mikuContest/ui/web/index.js +0 -353
  752. package/dist/mikuContest/ui/web/index.js.map +0 -1
  753. package/dist/mikuContest/ui/web/index.mjs +0 -343
  754. package/dist/mikuContest/ui/web/index.mjs.map +0 -1
  755. package/dist/mikuFireworks3D/index.d.mts +0 -268
  756. package/dist/mikuFireworks3D/index.d.ts +0 -268
  757. package/dist/mikuFireworks3D/index.js +0 -1267
  758. package/dist/mikuFireworks3D/index.js.map +0 -1
  759. package/dist/mikuFireworks3D/index.mjs +0 -1228
  760. package/dist/mikuFireworks3D/index.mjs.map +0 -1
  761. package/dist/mikuFusionGame/index.d.mts +0 -117
  762. package/dist/mikuFusionGame/index.d.ts +0 -117
  763. package/dist/mikuFusionGame/index.js +0 -1208
  764. package/dist/mikuFusionGame/index.js.map +0 -1
  765. package/dist/mikuFusionGame/index.mjs +0 -1195
  766. package/dist/mikuFusionGame/index.mjs.map +0 -1
  767. package/dist/mmd/admin/index.d.mts +0 -487
  768. package/dist/mmd/admin/index.d.ts +0 -487
  769. package/dist/mmd/admin/index.js +0 -1058
  770. package/dist/mmd/admin/index.js.map +0 -1
  771. package/dist/mmd/admin/index.mjs +0 -1027
  772. package/dist/mmd/admin/index.mjs.map +0 -1
  773. package/dist/mmd/index.d.mts +0 -2467
  774. package/dist/mmd/index.d.ts +0 -2467
  775. package/dist/mmd/index.js +0 -10119
  776. package/dist/mmd/index.js.map +0 -1
  777. package/dist/mmd/index.mjs +0 -10028
  778. package/dist/mmd/index.mjs.map +0 -1
  779. package/dist/mmd/server/index.d.mts +0 -139
  780. package/dist/mmd/server/index.d.ts +0 -139
  781. package/dist/mmd/server/index.js +0 -424
  782. package/dist/mmd/server/index.js.map +0 -1
  783. package/dist/mmd/server/index.mjs +0 -404
  784. package/dist/mmd/server/index.mjs.map +0 -1
  785. package/dist/music/index.d.mts +0 -74
  786. package/dist/music/index.d.ts +0 -74
  787. package/dist/music/index.js +0 -830
  788. package/dist/music/index.js.map +0 -1
  789. package/dist/music/index.mjs +0 -809
  790. package/dist/music/index.mjs.map +0 -1
  791. package/dist/music/server/index.d.mts +0 -1
  792. package/dist/music/server/index.d.ts +0 -1
  793. package/dist/music/server/index.js +0 -194
  794. package/dist/music/server/index.js.map +0 -1
  795. package/dist/music/server/index.mjs +0 -182
  796. package/dist/music/server/index.mjs.map +0 -1
  797. package/dist/navigation/index.d.mts +0 -93
  798. package/dist/navigation/index.d.ts +0 -93
  799. package/dist/navigation/index.js +0 -453
  800. package/dist/navigation/index.js.map +0 -1
  801. package/dist/navigation/index.mjs +0 -443
  802. package/dist/navigation/index.mjs.map +0 -1
  803. package/dist/ossFile/index.d.mts +0 -61
  804. package/dist/ossFile/index.d.ts +0 -61
  805. package/dist/ossFile/index.js +0 -96
  806. package/dist/ossFile/index.js.map +0 -1
  807. package/dist/ossFile/index.mjs +0 -7
  808. package/dist/ossFile/index.mjs.map +0 -1
  809. package/dist/ossFile/server/index.d.mts +0 -94
  810. package/dist/ossFile/server/index.d.ts +0 -94
  811. package/dist/ossFile/server/index.js +0 -213
  812. package/dist/ossFile/server/index.js.map +0 -1
  813. package/dist/ossFile/server/index.mjs +0 -12
  814. package/dist/ossFile/server/index.mjs.map +0 -1
  815. package/dist/path-DkaHQSyW.d.mts +0 -41
  816. package/dist/path-qjVnH8qU.d.ts +0 -41
  817. package/dist/portfolio/index.d.mts +0 -66
  818. package/dist/portfolio/index.d.ts +0 -66
  819. package/dist/portfolio/index.js +0 -736
  820. package/dist/portfolio/index.js.map +0 -1
  821. package/dist/portfolio/index.mjs +0 -724
  822. package/dist/portfolio/index.mjs.map +0 -1
  823. package/dist/qqbot/server/index.d.mts +0 -216
  824. package/dist/qqbot/server/index.d.ts +0 -216
  825. package/dist/qqbot/server/index.js +0 -394
  826. package/dist/qqbot/server/index.js.map +0 -1
  827. package/dist/qqbot/server/index.mjs +0 -385
  828. package/dist/qqbot/server/index.mjs.map +0 -1
  829. package/dist/qqbot/ui/web/index.d.mts +0 -10
  830. package/dist/qqbot/ui/web/index.d.ts +0 -10
  831. package/dist/qqbot/ui/web/index.js +0 -105
  832. package/dist/qqbot/ui/web/index.js.map +0 -1
  833. package/dist/qqbot/ui/web/index.mjs +0 -99
  834. package/dist/qqbot/ui/web/index.mjs.map +0 -1
  835. package/dist/request/index.d.mts +0 -59
  836. package/dist/request/index.d.ts +0 -59
  837. package/dist/request/index.js +0 -23
  838. package/dist/request/index.js.map +0 -1
  839. package/dist/request/index.mjs +0 -6
  840. package/dist/request/index.mjs.map +0 -1
  841. package/dist/screenReceiver/index.d.mts +0 -86
  842. package/dist/screenReceiver/index.d.ts +0 -86
  843. package/dist/screenReceiver/index.js +0 -281
  844. package/dist/screenReceiver/index.js.map +0 -1
  845. package/dist/screenReceiver/index.mjs +0 -273
  846. package/dist/screenReceiver/index.mjs.map +0 -1
  847. package/dist/session-BCXvGCnm.d.mts +0 -81
  848. package/dist/session-BCXvGCnm.d.ts +0 -81
  849. package/dist/storage/index.d.mts +0 -136
  850. package/dist/storage/index.d.ts +0 -136
  851. package/dist/storage/index.js +0 -48
  852. package/dist/storage/index.js.map +0 -1
  853. package/dist/storage/index.mjs +0 -7
  854. package/dist/storage/index.mjs.map +0 -1
  855. package/dist/testYourself/admin/index.d.mts +0 -58
  856. package/dist/testYourself/admin/index.d.ts +0 -58
  857. package/dist/testYourself/admin/index.js +0 -1009
  858. package/dist/testYourself/admin/index.js.map +0 -1
  859. package/dist/testYourself/admin/index.mjs +0 -1002
  860. package/dist/testYourself/admin/index.mjs.map +0 -1
  861. package/dist/testYourself/index.d.mts +0 -53
  862. package/dist/testYourself/index.d.ts +0 -53
  863. package/dist/testYourself/index.js +0 -2551
  864. package/dist/testYourself/index.js.map +0 -1
  865. package/dist/testYourself/index.mjs +0 -2531
  866. package/dist/testYourself/index.mjs.map +0 -1
  867. package/dist/testYourself/server/index.d.mts +0 -1029
  868. package/dist/testYourself/server/index.d.ts +0 -1029
  869. package/dist/testYourself/server/index.js +0 -825
  870. package/dist/testYourself/server/index.js.map +0 -1
  871. package/dist/testYourself/server/index.mjs +0 -816
  872. package/dist/testYourself/server/index.mjs.map +0 -1
  873. package/dist/types-3ujSNAXb.d.mts +0 -286
  874. package/dist/types-3ujSNAXb.d.ts +0 -286
  875. package/dist/types-B6B210gX.d.mts +0 -270
  876. package/dist/types-B6B210gX.d.ts +0 -270
  877. package/dist/types-Bdnte5EN.d.mts +0 -292
  878. package/dist/types-C_W_CoUD.d.ts +0 -99
  879. package/dist/types-Cs0CLvrH.d.mts +0 -70
  880. package/dist/types-Cs0CLvrH.d.ts +0 -70
  881. package/dist/types-DCRvasyH.d.mts +0 -99
  882. package/dist/types-HorDyIRv.d.mts +0 -303
  883. package/dist/types-HorDyIRv.d.ts +0 -303
  884. package/dist/types-_rFX1atk.d.ts +0 -292
  885. package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
  886. package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
  887. package/dist/universalExport/index.d.mts +0 -312
  888. package/dist/universalExport/index.d.ts +0 -312
  889. package/dist/universalExport/index.js +0 -178
  890. package/dist/universalExport/index.js.map +0 -1
  891. package/dist/universalExport/index.mjs +0 -5
  892. package/dist/universalExport/index.mjs.map +0 -1
  893. package/dist/universalExport/server/index.d.mts +0 -1270
  894. package/dist/universalExport/server/index.d.ts +0 -1270
  895. package/dist/universalExport/server/index.js +0 -123
  896. package/dist/universalExport/server/index.js.map +0 -1
  897. package/dist/universalExport/server/index.mjs +0 -6
  898. package/dist/universalExport/server/index.mjs.map +0 -1
  899. package/dist/universalFile/index.d.mts +0 -409
  900. package/dist/universalFile/index.d.ts +0 -409
  901. package/dist/universalFile/index.js +0 -1742
  902. package/dist/universalFile/index.js.map +0 -1
  903. package/dist/universalFile/index.mjs +0 -1497
  904. package/dist/universalFile/index.mjs.map +0 -1
  905. package/dist/universalFile/server/index.d.mts +0 -1064
  906. package/dist/universalFile/server/index.d.ts +0 -1064
  907. package/dist/universalFile/server/index.js +0 -311
  908. package/dist/universalFile/server/index.js.map +0 -1
  909. package/dist/universalFile/server/index.mjs +0 -10
  910. package/dist/universalFile/server/index.mjs.map +0 -1
  911. package/dist/utils/index.d.mts +0 -192
  912. package/dist/utils/index.d.ts +0 -192
  913. package/dist/utils/index.js +0 -46
  914. package/dist/utils/index.js.map +0 -1
  915. package/dist/utils/index.mjs +0 -5
  916. package/dist/utils/index.mjs.map +0 -1
  917. package/dist/vocaloidBooth/index.d.mts +0 -64
  918. package/dist/vocaloidBooth/index.d.ts +0 -64
  919. package/dist/vocaloidBooth/index.js +0 -376
  920. package/dist/vocaloidBooth/index.js.map +0 -1
  921. package/dist/vocaloidBooth/index.mjs +0 -362
  922. package/dist/vocaloidBooth/index.mjs.map +0 -1
  923. package/dist/vocaloidBooth/server/index.d.mts +0 -111
  924. package/dist/vocaloidBooth/server/index.d.ts +0 -111
  925. package/dist/vocaloidBooth/server/index.js +0 -247
  926. package/dist/vocaloidBooth/server/index.js.map +0 -1
  927. package/dist/vocaloidBooth/server/index.mjs +0 -237
  928. package/dist/vocaloidBooth/server/index.mjs.map +0 -1
  929. package/dist/vocaloidBooth/web/index.d.mts +0 -3
  930. package/dist/vocaloidBooth/web/index.d.ts +0 -3
  931. package/dist/vocaloidBooth/web/index.js +0 -376
  932. package/dist/vocaloidBooth/web/index.js.map +0 -1
  933. package/dist/vocaloidBooth/web/index.mjs +0 -362
  934. package/dist/vocaloidBooth/web/index.mjs.map +0 -1
  935. /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
  936. /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
  937. /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
  938. /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
  939. /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
  940. /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
  941. /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
  942. /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
  943. /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
  944. /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
  945. /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
  946. /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
  947. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
  948. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
  949. /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
  950. /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
  951. /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
  952. /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
  953. /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
  954. /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
  955. /package/dist/{analytics → common/analytics}/index.js.map +0 -0
  956. /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
  957. /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
  958. /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
  959. /package/dist/{api → common/api}/index.js.map +0 -0
  960. /package/dist/{api → common/api}/index.mjs.map +0 -0
  961. /package/dist/{auth/client → common/components}/index.js.map +0 -0
  962. /package/dist/{auth/client → common/components}/index.mjs.map +0 -0
  963. /package/dist/{auth/components → common/config}/index.js.map +0 -0
  964. /package/dist/{auth/components → common/config}/index.mjs.map +0 -0
  965. /package/dist/{config → common/config}/server/index.d.mts +0 -0
  966. /package/dist/{config → common/config}/server/index.d.ts +0 -0
  967. /package/dist/{auth/hooks → common/i18n}/index.js.map +0 -0
  968. /package/dist/{auth/hooks → common/i18n}/index.mjs.map +0 -0
  969. /package/dist/{auth → common/imageCrop}/index.js.map +0 -0
  970. /package/dist/{auth → common/imageCrop}/index.mjs.map +0 -0
  971. /package/dist/{auth/schema → common/ossFile}/index.js.map +0 -0
  972. /package/dist/{auth/schema → common/ossFile}/index.mjs.map +0 -0
  973. /package/dist/{auth/services → common/ossFile/server}/index.js.map +0 -0
  974. /package/dist/{auth/services → common/ossFile/server}/index.mjs.map +0 -0
  975. /package/dist/{config → common/universalExport}/index.js.map +0 -0
  976. /package/dist/{config → common/universalExport}/index.mjs.map +0 -0
  977. /package/dist/{i18n → common/universalExport/server}/index.js.map +0 -0
  978. /package/dist/{i18n → common/universalExport/server}/index.mjs.map +0 -0
  979. /package/dist/{logger → common/universalFile/server}/index.js.map +0 -0
  980. /package/dist/{logger → common/universalFile/server}/index.mjs.map +0 -0
@@ -1,2613 +0,0 @@
1
- import { WebStorageAdapter } from './chunk-WEEXCPSE.mjs';
2
- import { __export } from './chunk-MAI35PU6.mjs';
3
- import React5, { useEffect, useCallback, useRef, useState } from 'react';
4
- import { clsx } from 'clsx';
5
-
6
- // src/analytics/index.ts
7
- var analytics_exports = {};
8
- __export(analytics_exports, {
9
- ANALYTICS_VERSION: () => ANALYTICS_VERSION,
10
- Analytics: () => Analytics,
11
- AnalyticsDashboard: () => AnalyticsDashboard,
12
- BarChart: () => BarChart,
13
- CatchError: () => CatchError,
14
- DesktopDeviceAdapter: () => DesktopDeviceAdapter,
15
- DesktopEventStorageAdapter: () => DesktopEventStorageAdapter,
16
- DesktopNetworkAdapter: () => DesktopNetworkAdapter,
17
- DesktopStorageAdapter: () => DesktopStorageAdapter,
18
- EventList: () => EventList,
19
- EventPriority: () => EventPriority,
20
- EventQueue: () => EventQueue,
21
- EventType: () => EventType,
22
- FilterPanel: () => FilterPanel,
23
- MiniappDeviceAdapter: () => MiniappDeviceAdapter,
24
- MiniappEventStorageAdapter: () => MiniappEventStorageAdapter,
25
- MiniappNetworkAdapter: () => MiniappNetworkAdapter,
26
- MiniappStorageAdapter: () => MiniappStorageAdapter,
27
- MobileDeviceAdapter: () => MobileDeviceAdapter,
28
- MobileEventStorageAdapter: () => MobileEventStorageAdapter,
29
- MobileNetworkAdapter: () => MobileNetworkAdapter,
30
- MobileStorageAdapter: () => MobileStorageAdapter,
31
- PieChart: () => PieChart,
32
- StatCard: () => StatCard,
33
- Track: () => Track,
34
- TrackClick: () => TrackClick,
35
- TrackPerformance: () => TrackPerformance,
36
- Uploader: () => Uploader,
37
- WebDeviceAdapter: () => WebDeviceAdapter,
38
- WebEventStorageAdapter: () => WebEventStorageAdapter,
39
- WebNetworkAdapter: () => WebNetworkAdapter,
40
- clearAnalyticsRegistry: () => clearAnalyticsRegistry,
41
- createAnalytics: () => createAnalytics,
42
- createDesktopConfig: () => createDesktopConfig,
43
- createMiniappConfig: () => createMiniappConfig,
44
- createMobileConfig: () => createMobileConfig,
45
- createWebConfig: () => createWebConfig,
46
- debounce: () => debounce,
47
- deepClone: () => deepClone,
48
- formatEvent: () => formatEvent,
49
- formatTimestamp: () => formatTimestamp,
50
- generateUniqueId: () => generateUniqueId,
51
- getAllInstanceKeys: () => getAllInstanceKeys,
52
- getAnalyticsInstance: () => getAnalyticsInstance,
53
- getBatchSize: () => getBatchSize,
54
- getCurrentPageTitle: () => getCurrentPageTitle,
55
- getCurrentPageUrl: () => getCurrentPageUrl,
56
- getEventSize: () => getEventSize,
57
- getGlobalAnalytics: () => getGlobalAnalytics,
58
- getPageDuration: () => getPageDuration,
59
- getReferrer: () => getReferrer,
60
- getRegisteredAnalytics: () => getRegisteredAnalytics,
61
- isAnalyticsInitialized: () => isAnalyticsInitialized,
62
- isDevelopment: () => isDevelopment,
63
- isMobile: () => isMobile,
64
- mergeEventProperties: () => mergeEventProperties,
65
- registerAnalytics: () => registerAnalytics,
66
- resetAllAnalytics: () => resetAllAnalytics,
67
- resetAnalytics: () => resetAnalytics,
68
- safeParse: () => safeParse,
69
- safeStringify: () => safeStringify,
70
- sanitizeEvent: () => sanitizeEvent,
71
- setGlobalAnalytics: () => setGlobalAnalytics,
72
- throttle: () => throttle,
73
- unregisterAnalytics: () => unregisterAnalytics,
74
- useAnalytics: () => useAnalytics,
75
- useAutoTracking: () => useAutoTracking,
76
- useErrorTracking: () => useErrorTracking,
77
- usePageDuration: () => usePageDuration,
78
- usePageView: () => usePageView,
79
- usePerformanceTracking: () => usePerformanceTracking,
80
- useTrackClick: () => useTrackClick,
81
- useTrackEvent: () => useTrackEvent,
82
- validateEvent: () => validateEvent,
83
- validateEvents: () => validateEvents,
84
- webAdapter: () => webAdapter
85
- });
86
-
87
- // src/analytics/types.ts
88
- var EventType = /* @__PURE__ */ ((EventType2) => {
89
- EventType2["PAGE_VIEW"] = "page_view";
90
- EventType2["PAGE_LEAVE"] = "page_leave";
91
- EventType2["CLICK"] = "click";
92
- EventType2["SCROLL"] = "scroll";
93
- EventType2["INPUT"] = "input";
94
- EventType2["SUBMIT"] = "submit";
95
- EventType2["LOGIN"] = "login";
96
- EventType2["LOGOUT"] = "logout";
97
- EventType2["REGISTER"] = "register";
98
- EventType2["SEARCH"] = "search";
99
- EventType2["SHARE"] = "share";
100
- EventType2["PERFORMANCE"] = "performance";
101
- EventType2["ERROR"] = "error";
102
- EventType2["API_CALL"] = "api_call";
103
- EventType2["CUSTOM"] = "custom";
104
- return EventType2;
105
- })(EventType || {});
106
- var EventPriority = /* @__PURE__ */ ((EventPriority2) => {
107
- EventPriority2[EventPriority2["LOW"] = 0] = "LOW";
108
- EventPriority2[EventPriority2["NORMAL"] = 1] = "NORMAL";
109
- EventPriority2[EventPriority2["HIGH"] = 2] = "HIGH";
110
- EventPriority2[EventPriority2["CRITICAL"] = 3] = "CRITICAL";
111
- return EventPriority2;
112
- })(EventPriority || {});
113
-
114
- // src/analytics/core/EventQueue.ts
115
- var EventQueue = class {
116
- constructor(maxSize = 100) {
117
- this.queue = [];
118
- this.maxSize = maxSize;
119
- }
120
- /**
121
- * 添加事件到队列
122
- */
123
- enqueue(event) {
124
- if (this.queue.length >= this.maxSize) {
125
- this.removeLowestPriorityEvent();
126
- }
127
- this.queue.push(event);
128
- this.queue.sort((a, b) => b.priority - a.priority);
129
- }
130
- /**
131
- * 批量添加事件
132
- */
133
- enqueueBatch(events) {
134
- events.forEach((event) => this.enqueue(event));
135
- }
136
- /**
137
- * 获取指定数量的事件
138
- */
139
- dequeue(count) {
140
- return this.queue.splice(0, count);
141
- }
142
- /**
143
- * 获取所有事件
144
- */
145
- dequeueAll() {
146
- const events = [...this.queue];
147
- this.queue = [];
148
- return events;
149
- }
150
- /**
151
- * 获取高优先级事件
152
- */
153
- getHighPriorityEvents() {
154
- const highPriorityEvents = this.queue.filter(
155
- (event) => event.priority >= 2
156
- // HIGH 和 CRITICAL
157
- );
158
- this.queue = this.queue.filter((event) => event.priority < 2);
159
- return highPriorityEvents;
160
- }
161
- /**
162
- * 查看队列长度
163
- */
164
- size() {
165
- return this.queue.length;
166
- }
167
- /**
168
- * 队列是否为空
169
- */
170
- isEmpty() {
171
- return this.queue.length === 0;
172
- }
173
- /**
174
- * 队列是否已满
175
- */
176
- isFull() {
177
- return this.queue.length >= this.maxSize;
178
- }
179
- /**
180
- * 清空队列
181
- */
182
- clear() {
183
- this.queue = [];
184
- }
185
- /**
186
- * 移除最低优先级的事件
187
- */
188
- removeLowestPriorityEvent() {
189
- if (this.queue.length === 0) return;
190
- let lowestPriorityIndex = 0;
191
- let lowestPriority = this.queue[0]?.priority ?? 0;
192
- for (let i = 1; i < this.queue.length; i++) {
193
- const currentPriority = this.queue[i]?.priority ?? 0;
194
- if (currentPriority < lowestPriority) {
195
- lowestPriority = currentPriority;
196
- lowestPriorityIndex = i;
197
- }
198
- }
199
- this.queue.splice(lowestPriorityIndex, 1);
200
- }
201
- /**
202
- * 获取队列快照(不移除事件)
203
- */
204
- snapshot() {
205
- return [...this.queue];
206
- }
207
- };
208
-
209
- // src/analytics/core/Uploader.ts
210
- var Uploader = class {
211
- constructor(config) {
212
- this.uploading = false;
213
- this.retryQueue = /* @__PURE__ */ new Map();
214
- this.config = config;
215
- }
216
- /**
217
- * 上传事件
218
- */
219
- async upload(events) {
220
- if (events.length === 0) return true;
221
- const isOnline = await this.config.networkAdapter.isOnline();
222
- if (!isOnline) {
223
- await this.saveToLocal(events);
224
- return false;
225
- }
226
- try {
227
- this.uploading = true;
228
- const response = await this.config.networkAdapter.upload(this.config.endpoint, events);
229
- if (response.success) {
230
- this.config.onSuccess?.(events);
231
- return true;
232
- } else {
233
- throw new Error(response.message || "Upload failed");
234
- }
235
- } catch (error) {
236
- const err = error instanceof Error ? error : new Error(String(error));
237
- this.config.onError?.(err, events);
238
- await this.addToRetryQueue(events);
239
- return false;
240
- } finally {
241
- this.uploading = false;
242
- }
243
- }
244
- /**
245
- * 批量上传
246
- */
247
- async uploadBatch(events) {
248
- const batches = this.splitIntoBatches(events, this.config.batchSize);
249
- const results = await Promise.all(batches.map((batch) => this.upload(batch)));
250
- return results.every((result) => result);
251
- }
252
- /**
253
- * 重试失败的上传
254
- */
255
- async retryFailedUploads() {
256
- if (this.uploading || this.retryQueue.size === 0) return;
257
- const isOnline = await this.config.networkAdapter.isOnline();
258
- if (!isOnline) return;
259
- const entries = Array.from(this.retryQueue.entries());
260
- for (const [key, item] of entries) {
261
- if (item.retryCount >= this.config.retryTimes) {
262
- await this.saveToLocal(item.events);
263
- this.retryQueue.delete(key);
264
- continue;
265
- }
266
- await this.delay(this.config.retryInterval * (item.retryCount + 1));
267
- const success = await this.upload(item.events);
268
- if (success) {
269
- this.retryQueue.delete(key);
270
- } else {
271
- item.retryCount++;
272
- }
273
- }
274
- }
275
- /**
276
- * 上传本地缓存的事件
277
- */
278
- async uploadCachedEvents() {
279
- try {
280
- const cachedEvents = await this.config.storageAdapter.getEvents();
281
- if (cachedEvents.length > 0) {
282
- const success = await this.uploadBatch(cachedEvents);
283
- if (success) {
284
- await this.config.storageAdapter.clearEvents();
285
- }
286
- }
287
- } catch (error) {
288
- console.error("Failed to upload cached events:", error);
289
- }
290
- }
291
- /**
292
- * 保存事件到本地存储
293
- */
294
- async saveToLocal(events) {
295
- try {
296
- const existingEvents = await this.config.storageAdapter.getEvents();
297
- const allEvents = [...existingEvents, ...events];
298
- await this.config.storageAdapter.saveEvents(allEvents);
299
- } catch (error) {
300
- console.error("Failed to save events to local storage:", error);
301
- }
302
- }
303
- /**
304
- * 添加到重试队列
305
- */
306
- async addToRetryQueue(events) {
307
- const key = Date.now() + "_" + Math.random();
308
- this.retryQueue.set(key, {
309
- events,
310
- retryCount: 0
311
- });
312
- }
313
- /**
314
- * 分割成批次
315
- */
316
- splitIntoBatches(events, batchSize) {
317
- const batches = [];
318
- for (let i = 0; i < events.length; i += batchSize) {
319
- batches.push(events.slice(i, i + batchSize));
320
- }
321
- return batches;
322
- }
323
- /**
324
- * 延迟函数
325
- */
326
- delay(ms) {
327
- return new Promise((resolve) => setTimeout(resolve, ms));
328
- }
329
- /**
330
- * 是否正在上传
331
- */
332
- isUploading() {
333
- return this.uploading;
334
- }
335
- /**
336
- * 获取重试队列大小
337
- */
338
- getRetryQueueSize() {
339
- return this.retryQueue.size;
340
- }
341
- /**
342
- * 清空重试队列
343
- */
344
- clearRetryQueue() {
345
- this.retryQueue.clear();
346
- }
347
- };
348
-
349
- // src/analytics/core/Analytics.ts
350
- var SDK_VERSION = "1.0.0";
351
- var Analytics = class {
352
- constructor(config, storageAdapter, networkAdapter, deviceAdapter) {
353
- this.sessionId = "";
354
- this.deviceId = "";
355
- this.deviceInfo = null;
356
- this.initialized = false;
357
- this.batchTimer = null;
358
- if (config.adapter) {
359
- this.storageAdapter = config.adapter.storage;
360
- this.networkAdapter = config.adapter.network;
361
- this.deviceAdapter = config.adapter.device;
362
- } else if (storageAdapter && networkAdapter && deviceAdapter) {
363
- this.storageAdapter = storageAdapter;
364
- this.networkAdapter = networkAdapter;
365
- this.deviceAdapter = deviceAdapter;
366
- } else {
367
- throw new Error("Analytics initialization failed: adapter is required");
368
- }
369
- const serverUrl = config.serverUrl || config.endpoint || "/api/analytics/events";
370
- const platform = config.platform || "web";
371
- this.config = {
372
- ...config,
373
- appId: config.appId,
374
- appVersion: config.appVersion || "1.0.0",
375
- platform,
376
- endpoint: serverUrl,
377
- batchSize: config.batchSize ?? 10,
378
- batchInterval: config.batchInterval ?? 5e3,
379
- maxQueueSize: config.maxQueueSize ?? 100,
380
- retryTimes: config.retryTimes ?? 3,
381
- retryInterval: config.retryInterval ?? 1e3,
382
- enableAutoPageView: config.enableAutoPageView ?? true,
383
- enableAutoClick: config.enableAutoClick ?? false,
384
- enableAutoError: config.enableAutoError ?? true,
385
- enableAutoPerformance: config.enableAutoPerformance ?? true,
386
- debug: config.debug ?? false,
387
- ignoreUrls: config.ignoreUrls ?? [],
388
- ignoreErrors: config.ignoreErrors ?? [],
389
- beforeSend: config.beforeSend
390
- };
391
- this.eventQueue = new EventQueue(this.config.maxQueueSize);
392
- this.uploader = new Uploader({
393
- endpoint: this.config.endpoint,
394
- batchSize: this.config.batchSize,
395
- retryTimes: this.config.retryTimes,
396
- retryInterval: this.config.retryInterval,
397
- networkAdapter: this.networkAdapter,
398
- storageAdapter: this.storageAdapter,
399
- onSuccess: (events) => this.onUploadSuccess(events),
400
- onError: (error, events) => this.onUploadError(error, events)
401
- });
402
- this.init().catch((error) => {
403
- console.error("Failed to initialize Analytics:", error);
404
- });
405
- }
406
- /**
407
- * 初始化
408
- */
409
- async init() {
410
- if (this.initialized) {
411
- this.log("Analytics already initialized");
412
- return;
413
- }
414
- try {
415
- await this.initDeviceInfo();
416
- await this.initSession();
417
- await this.uploader.uploadCachedEvents();
418
- this.startBatchTimer();
419
- if (typeof window !== "undefined") {
420
- window.addEventListener("analytics-debug-changed", ((e) => {
421
- this.log("Debug mode changed: " + (e.detail.enabled ? "enabled" : "disabled"));
422
- }));
423
- }
424
- this.initialized = true;
425
- this.log("Analytics initialized successfully");
426
- } catch (error) {
427
- console.error("Failed to initialize analytics:", error);
428
- throw error;
429
- }
430
- }
431
- /**
432
- * 追踪事件(简化版本,支持两种调用方式)
433
- */
434
- track(eventNameOrType, propertiesOrName, maybeProperties, priority = 1 /* NORMAL */) {
435
- if (!this.initialized) {
436
- console.warn("Analytics not initialized yet, queuing event...");
437
- setTimeout(
438
- () => this.track(eventNameOrType, propertiesOrName, maybeProperties, priority),
439
- 100
440
- );
441
- return;
442
- }
443
- let eventType;
444
- let eventName;
445
- let properties;
446
- if (typeof propertiesOrName === "string") {
447
- eventType = eventNameOrType;
448
- eventName = propertiesOrName;
449
- properties = maybeProperties;
450
- } else {
451
- eventType = "custom" /* CUSTOM */;
452
- eventName = eventNameOrType;
453
- properties = propertiesOrName;
454
- }
455
- const event = this.createEvent(eventType, eventName, properties, priority);
456
- const processedEvent = this.config.beforeSend?.(event) ?? event;
457
- if (!processedEvent) {
458
- this.log("Event filtered by beforeSend hook", event);
459
- return;
460
- }
461
- this.eventQueue.enqueue(processedEvent);
462
- this.log("Event tracked", processedEvent);
463
- if (priority >= 2 /* HIGH */) {
464
- this.flushHighPriority();
465
- }
466
- if (this.eventQueue.isFull()) {
467
- this.flush();
468
- }
469
- }
470
- /**
471
- * 追踪页面浏览
472
- */
473
- trackPageView(pageUrl, pageTitle, properties) {
474
- this.track(
475
- "page_view" /* PAGE_VIEW */,
476
- "page_view",
477
- {
478
- page_url: pageUrl,
479
- page_title: pageTitle,
480
- ...properties
481
- },
482
- 1 /* NORMAL */
483
- );
484
- }
485
- /**
486
- * 追踪点击事件
487
- */
488
- trackClick(elementInfo, properties) {
489
- this.track(
490
- "click" /* CLICK */,
491
- "click",
492
- {
493
- ...elementInfo,
494
- ...properties
495
- },
496
- 0 /* LOW */
497
- );
498
- }
499
- /**
500
- * 追踪错误
501
- */
502
- trackError(errorMessage, errorStack, errorType, properties) {
503
- this.track(
504
- "error" /* ERROR */,
505
- "error",
506
- {
507
- error_message: errorMessage,
508
- error_stack: errorStack,
509
- error_type: errorType,
510
- ...properties
511
- },
512
- 2 /* HIGH */
513
- );
514
- }
515
- /**
516
- * 追踪性能指标
517
- */
518
- trackPerformance(metricName, metricValue, metricUnit, properties) {
519
- this.track(
520
- "performance" /* PERFORMANCE */,
521
- "performance",
522
- {
523
- metric_name: metricName,
524
- metric_value: metricValue,
525
- metric_unit: metricUnit,
526
- ...properties
527
- },
528
- 0 /* LOW */
529
- );
530
- }
531
- /**
532
- * 追踪 API 调用
533
- */
534
- trackApiCall(apiUrl, apiMethod, apiStatus, duration, success, properties) {
535
- this.track(
536
- "api_call" /* API_CALL */,
537
- "api_call",
538
- {
539
- api_url: apiUrl,
540
- api_method: apiMethod,
541
- api_status: apiStatus,
542
- duration,
543
- success,
544
- ...properties
545
- },
546
- 1 /* NORMAL */
547
- );
548
- }
549
- /**
550
- * 设置用户ID
551
- */
552
- setUserId(userId) {
553
- this.config.userId = userId;
554
- this.log("User ID set", userId);
555
- }
556
- /**
557
- * 设置用户信息(包括用户ID和其他属性)
558
- */
559
- setUser(userInfo) {
560
- const { userId, ...otherProps } = userInfo;
561
- this.config.userId = userId;
562
- this.config.customProperties = {
563
- ...this.config.customProperties,
564
- ...otherProps
565
- };
566
- this.log("User info set", userInfo);
567
- }
568
- /**
569
- * 设置自定义属性
570
- */
571
- setCustomProperties(properties) {
572
- this.config.customProperties = {
573
- ...this.config.customProperties,
574
- ...properties
575
- };
576
- this.log("Custom properties set", properties);
577
- }
578
- /**
579
- * 立即上传所有事件
580
- */
581
- async flush() {
582
- if (this.eventQueue.isEmpty()) {
583
- return;
584
- }
585
- const events = this.eventQueue.dequeueAll();
586
- await this.uploader.upload(events);
587
- }
588
- /**
589
- * 立即上传高优先级事件
590
- */
591
- async flushHighPriority() {
592
- const highPriorityEvents = this.eventQueue.getHighPriorityEvents();
593
- if (highPriorityEvents.length > 0) {
594
- await this.uploader.upload(highPriorityEvents);
595
- }
596
- }
597
- /**
598
- * 销毁实例
599
- */
600
- async destroy() {
601
- if (this.batchTimer) {
602
- clearInterval(this.batchTimer);
603
- this.batchTimer = null;
604
- }
605
- await this.flush();
606
- this.initialized = false;
607
- this.log("Analytics destroyed");
608
- }
609
- /**
610
- * 创建事件对象
611
- */
612
- createEvent(eventType, eventName, properties, priority = 1 /* NORMAL */) {
613
- let pageUrl;
614
- let pageTitle;
615
- let referrer;
616
- if (typeof window !== "undefined") {
617
- pageUrl = window.location.href;
618
- pageTitle = document.title;
619
- referrer = document.referrer || void 0;
620
- }
621
- return {
622
- event_id: this.generateEventId(),
623
- event_type: eventType,
624
- event_name: eventName,
625
- timestamp: Date.now(),
626
- priority,
627
- user_id: this.config.userId,
628
- session_id: this.sessionId,
629
- device_id: this.deviceId,
630
- page_url: pageUrl,
631
- page_title: pageTitle,
632
- referrer,
633
- properties: {
634
- ...this.config.customProperties,
635
- ...properties
636
- },
637
- platform: this.getPlatform(),
638
- app_version: this.config.appVersion,
639
- sdk_version: SDK_VERSION
640
- };
641
- }
642
- /**
643
- * 初始化设备信息
644
- */
645
- async initDeviceInfo() {
646
- try {
647
- let cachedDeviceInfo = await this.storageAdapter.getDeviceInfo();
648
- if (!cachedDeviceInfo) {
649
- this.deviceInfo = await this.deviceAdapter.getDeviceInfo();
650
- this.deviceId = await this.deviceAdapter.generateDeviceId();
651
- await this.storageAdapter.saveDeviceInfo(this.deviceInfo);
652
- } else {
653
- this.deviceInfo = cachedDeviceInfo;
654
- this.deviceId = cachedDeviceInfo.device_id;
655
- }
656
- } catch (error) {
657
- console.error("Failed to init device info:", error);
658
- this.deviceId = "temp_" + Date.now() + "_" + Math.random();
659
- }
660
- }
661
- /**
662
- * 初始化会话
663
- */
664
- async initSession() {
665
- try {
666
- const cachedSessionId = await this.storageAdapter.getSessionId();
667
- if (cachedSessionId) {
668
- this.sessionId = cachedSessionId;
669
- } else {
670
- this.sessionId = this.generateSessionId();
671
- await this.storageAdapter.saveSessionId(this.sessionId);
672
- }
673
- } catch (error) {
674
- console.error("Failed to init session:", error);
675
- this.sessionId = this.generateSessionId();
676
- }
677
- }
678
- /**
679
- * 启动批量上传定时器
680
- */
681
- startBatchTimer() {
682
- this.batchTimer = setInterval(() => {
683
- if (!this.eventQueue.isEmpty()) {
684
- this.flush();
685
- }
686
- this.uploader.retryFailedUploads();
687
- }, this.config.batchInterval);
688
- }
689
- /**
690
- * 上传成功回调
691
- */
692
- onUploadSuccess(events) {
693
- this.log("Events uploaded successfully", events);
694
- }
695
- /**
696
- * 上传失败回调
697
- */
698
- onUploadError(error, events) {
699
- this.log("Failed to upload events", { error, events });
700
- }
701
- /**
702
- * 生成事件ID
703
- */
704
- generateEventId() {
705
- return Date.now() + "_" + Math.random().toString(36).substring(2, 15);
706
- }
707
- /**
708
- * 生成会话ID
709
- */
710
- generateSessionId() {
711
- return "session_" + Date.now() + "_" + Math.random().toString(36).substring(2, 15);
712
- }
713
- /**
714
- * 获取平台标识
715
- */
716
- getPlatform() {
717
- return this.config.platform || "unknown";
718
- }
719
- /**
720
- * 日志输出
721
- */
722
- log(message, data) {
723
- const dynamicDebug = typeof window !== "undefined" ? localStorage.getItem("analytics-debug") === "true" : false;
724
- if (this.config.debug || dynamicDebug) {
725
- console.log("[Analytics] " + message, data ?? "");
726
- }
727
- }
728
- /**
729
- * 获取队列状态
730
- */
731
- getQueueStatus() {
732
- return {
733
- size: this.eventQueue.size(),
734
- isFull: this.eventQueue.isFull(),
735
- isEmpty: this.eventQueue.isEmpty()
736
- };
737
- }
738
- /**
739
- * 获取初始化状态
740
- */
741
- isInitialized() {
742
- return this.initialized;
743
- }
744
- };
745
-
746
- // src/analytics/registry.ts
747
- var DEFAULT_ID = "default";
748
- var registry = /* @__PURE__ */ new Map();
749
- function registerAnalytics(analytics, id = DEFAULT_ID) {
750
- registry.set(id, analytics);
751
- }
752
- function getRegisteredAnalytics(id = DEFAULT_ID) {
753
- return registry.get(id) ?? null;
754
- }
755
- function unregisterAnalytics(id = DEFAULT_ID) {
756
- registry.delete(id);
757
- }
758
- function clearAnalyticsRegistry() {
759
- registry.clear();
760
- }
761
- function setGlobalAnalytics(analytics) {
762
- registerAnalytics(analytics);
763
- }
764
- function getGlobalAnalytics() {
765
- return getRegisteredAnalytics();
766
- }
767
-
768
- // src/analytics/client/presets.ts
769
- function createWebConfig(appId, options = {}) {
770
- return {
771
- appId,
772
- appVersion: options.appVersion || "1.0.0",
773
- endpoint: options.endpoint || "/api/analytics/events",
774
- platform: "web",
775
- enableAutoPageView: options.enableAutoPageView ?? true,
776
- debug: options.debug ?? (typeof process !== "undefined" && process.env?.NODE_ENV === "development")
777
- // adapter 需要由调用者提供
778
- };
779
- }
780
- function createMobileConfig(appId, options = {}) {
781
- return {
782
- appId,
783
- appVersion: options.appVersion || "1.0.0",
784
- endpoint: options.endpoint || "/api/analytics/events",
785
- platform: "mobile",
786
- enableAutoPageView: false,
787
- debug: options.debug ?? false
788
- // adapter 需要由调用者提供
789
- };
790
- }
791
- function createMiniappConfig(appId, options = {}) {
792
- return {
793
- appId,
794
- appVersion: options.appVersion || "1.0.0",
795
- endpoint: options.endpoint || "/api/analytics/events",
796
- platform: "miniapp",
797
- enableAutoPageView: true,
798
- debug: options.debug ?? false
799
- // adapter 需要由调用者提供
800
- };
801
- }
802
- function createDesktopConfig(appId, options = {}) {
803
- return {
804
- appId,
805
- appVersion: options.appVersion || "1.0.0",
806
- endpoint: options.endpoint || "/api/analytics/events",
807
- platform: "desktop",
808
- enableAutoPageView: false,
809
- debug: options.debug ?? false
810
- // adapter 需要由调用者提供
811
- };
812
- }
813
-
814
- // src/analytics/client/singleton.ts
815
- var instances = /* @__PURE__ */ new Map();
816
- function createAnalytics(instanceKey, config) {
817
- if (!instances.has(instanceKey)) {
818
- instances.set(instanceKey, new Analytics(config));
819
- }
820
- return instances.get(instanceKey);
821
- }
822
- function getAnalyticsInstance(instanceKey) {
823
- return instances.get(instanceKey) || null;
824
- }
825
- function resetAnalytics(instanceKey) {
826
- instances.delete(instanceKey);
827
- }
828
- function resetAllAnalytics() {
829
- instances.clear();
830
- }
831
- function isAnalyticsInitialized(instanceKey) {
832
- return instances.has(instanceKey);
833
- }
834
- function getAllInstanceKeys() {
835
- return Array.from(instances.keys());
836
- }
837
-
838
- // src/analytics/utils/helpers.ts
839
- function throttle(func, wait) {
840
- let timeout = null;
841
- let previous = 0;
842
- return function(...args) {
843
- const now = Date.now();
844
- const remaining = wait - (now - previous);
845
- if (remaining <= 0 || remaining > wait) {
846
- if (timeout) {
847
- clearTimeout(timeout);
848
- timeout = null;
849
- }
850
- previous = now;
851
- func.apply(this, args);
852
- } else if (!timeout) {
853
- timeout = setTimeout(() => {
854
- previous = Date.now();
855
- timeout = null;
856
- func.apply(this, args);
857
- }, remaining);
858
- }
859
- };
860
- }
861
- function debounce(func, wait) {
862
- let timeout = null;
863
- return function(...args) {
864
- if (timeout) {
865
- clearTimeout(timeout);
866
- }
867
- timeout = setTimeout(() => {
868
- func.apply(this, args);
869
- }, wait);
870
- };
871
- }
872
- function formatEvent(event) {
873
- return JSON.stringify(event, null, 2);
874
- }
875
- function validateEvent(event) {
876
- if (!event.event_id || !event.event_type || !event.event_name) {
877
- return false;
878
- }
879
- if (!event.timestamp || event.timestamp <= 0) {
880
- return false;
881
- }
882
- if (!event.session_id || !event.device_id) {
883
- return false;
884
- }
885
- return true;
886
- }
887
- function validateEvents(events) {
888
- const valid = [];
889
- const invalid = [];
890
- events.forEach((event) => {
891
- if (validateEvent(event)) {
892
- valid.push(event);
893
- } else {
894
- invalid.push(event);
895
- }
896
- });
897
- return { valid, invalid };
898
- }
899
- function getEventSize(event) {
900
- return new Blob([JSON.stringify(event)]).size;
901
- }
902
- function getBatchSize(events) {
903
- return events.reduce((total, event) => total + getEventSize(event), 0);
904
- }
905
- function sanitizeEvent(event, sensitiveKeys = ["password", "token", "secret", "key"]) {
906
- const sanitized = { ...event };
907
- if (sanitized.properties) {
908
- const cleanProperties = { ...sanitized.properties };
909
- sensitiveKeys.forEach((key) => {
910
- if (key in cleanProperties) {
911
- cleanProperties[key] = "***";
912
- }
913
- });
914
- sanitized.properties = cleanProperties;
915
- }
916
- return sanitized;
917
- }
918
- function mergeEventProperties(baseProperties, ...additionalProperties) {
919
- return Object.assign({}, baseProperties, ...additionalProperties);
920
- }
921
- function generateUniqueId(prefix = "") {
922
- const timestamp = Date.now();
923
- const random = Math.random().toString(36).substring(2, 15);
924
- return prefix ? prefix + "_" + timestamp + "_" + random : timestamp + "_" + random;
925
- }
926
- function isMobile() {
927
- if (typeof navigator === "undefined") return false;
928
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
929
- }
930
- function isDevelopment() {
931
- return process.env.NODE_ENV === "development";
932
- }
933
- function formatTimestamp(timestamp, format = "datetime") {
934
- const date = new Date(timestamp);
935
- switch (format) {
936
- case "date":
937
- return date.toLocaleDateString();
938
- case "time":
939
- return date.toLocaleTimeString();
940
- case "datetime":
941
- default:
942
- return date.toLocaleString();
943
- }
944
- }
945
- function deepClone(obj) {
946
- return JSON.parse(JSON.stringify(obj));
947
- }
948
- function safeStringify(obj, fallback = "{}") {
949
- try {
950
- return JSON.stringify(obj);
951
- } catch (error) {
952
- console.error("Failed to stringify object:", error);
953
- return fallback;
954
- }
955
- }
956
- function safeParse(json, fallback) {
957
- try {
958
- return JSON.parse(json);
959
- } catch (error) {
960
- console.error("Failed to parse JSON:", error);
961
- return fallback;
962
- }
963
- }
964
- function getPageDuration(startTime) {
965
- return Date.now() - startTime;
966
- }
967
- function getCurrentPageUrl() {
968
- if (typeof window !== "undefined") {
969
- return window.location.href;
970
- }
971
- return "";
972
- }
973
- function getCurrentPageTitle() {
974
- if (typeof document !== "undefined") {
975
- return document.title;
976
- }
977
- return "";
978
- }
979
- function getReferrer() {
980
- if (typeof document !== "undefined") {
981
- return document.referrer;
982
- }
983
- return "";
984
- }
985
-
986
- // src/analytics/utils/decorators.ts
987
- function Track(eventName, priority = 1 /* NORMAL */) {
988
- return function(_target, propertyKey, descriptor) {
989
- const originalMethod = descriptor.value;
990
- descriptor.value = async function(...args) {
991
- const analytics = getAnalyticsInstance2(this);
992
- const finalEventName = eventName || propertyKey;
993
- const startTime = Date.now();
994
- try {
995
- const result = await originalMethod.apply(this, args);
996
- analytics?.track(
997
- "custom" /* CUSTOM */,
998
- finalEventName,
999
- {
1000
- success: true,
1001
- duration: Date.now() - startTime,
1002
- args: JSON.stringify(args)
1003
- },
1004
- priority
1005
- );
1006
- return result;
1007
- } catch (error) {
1008
- analytics?.track(
1009
- "error" /* ERROR */,
1010
- finalEventName + "_error",
1011
- {
1012
- success: false,
1013
- duration: Date.now() - startTime,
1014
- error: error instanceof Error ? error.message : String(error)
1015
- },
1016
- 2 /* HIGH */
1017
- );
1018
- throw error;
1019
- }
1020
- };
1021
- return descriptor;
1022
- };
1023
- }
1024
- function TrackClick(eventName) {
1025
- return function(_target, propertyKey, descriptor) {
1026
- const originalMethod = descriptor.value;
1027
- descriptor.value = function(...args) {
1028
- const analytics = getAnalyticsInstance2(this);
1029
- const finalEventName = eventName || propertyKey;
1030
- analytics?.track(
1031
- "click" /* CLICK */,
1032
- finalEventName,
1033
- {
1034
- args: JSON.stringify(args)
1035
- },
1036
- 0 /* LOW */
1037
- );
1038
- return originalMethod.apply(this, args);
1039
- };
1040
- return descriptor;
1041
- };
1042
- }
1043
- function TrackPerformance(metricName) {
1044
- return function(_target, propertyKey, descriptor) {
1045
- const originalMethod = descriptor.value;
1046
- descriptor.value = async function(...args) {
1047
- const analytics = getAnalyticsInstance2(this);
1048
- const finalMetricName = metricName || propertyKey;
1049
- const startTime = performance.now();
1050
- try {
1051
- const result = await originalMethod.apply(this, args);
1052
- const duration = performance.now() - startTime;
1053
- analytics?.trackPerformance(finalMetricName, duration, "ms", {
1054
- success: true
1055
- });
1056
- return result;
1057
- } catch (error) {
1058
- const duration = performance.now() - startTime;
1059
- analytics?.trackPerformance(finalMetricName, duration, "ms", {
1060
- success: false,
1061
- error: error instanceof Error ? error.message : String(error)
1062
- });
1063
- throw error;
1064
- }
1065
- };
1066
- return descriptor;
1067
- };
1068
- }
1069
- function CatchError(_eventName) {
1070
- return function(_target, propertyKey, descriptor) {
1071
- const originalMethod = descriptor.value;
1072
- descriptor.value = async function(...args) {
1073
- try {
1074
- return await originalMethod.apply(this, args);
1075
- } catch (error) {
1076
- const analytics = getAnalyticsInstance2(this);
1077
- analytics?.trackError(
1078
- error instanceof Error ? error.message : String(error),
1079
- error instanceof Error ? error.stack : void 0,
1080
- error instanceof Error ? error.name : "Error",
1081
- {
1082
- method: propertyKey,
1083
- args: JSON.stringify(args)
1084
- }
1085
- );
1086
- throw error;
1087
- }
1088
- };
1089
- return descriptor;
1090
- };
1091
- }
1092
- function getAnalyticsInstance2(instance) {
1093
- if (instance.analytics) {
1094
- return instance.analytics;
1095
- }
1096
- if (instance._analytics) {
1097
- return instance._analytics;
1098
- }
1099
- return getRegisteredAnalytics();
1100
- }
1101
- function useAnalytics(analytics) {
1102
- return analytics;
1103
- }
1104
- function usePageView(analytics, pageUrl, pageTitle) {
1105
- useEffect(() => {
1106
- if (!analytics) return;
1107
- const url = pageUrl || (typeof window !== "undefined" ? window.location.href : "");
1108
- const title = pageTitle || (typeof document !== "undefined" ? document.title : "");
1109
- analytics.trackPageView(url, title);
1110
- }, [analytics, pageUrl, pageTitle]);
1111
- }
1112
- function useTrackEvent(analytics) {
1113
- return useCallback(
1114
- (eventType, eventName, properties, priority) => {
1115
- if (analytics) {
1116
- analytics.track(eventType, eventName, properties, priority);
1117
- }
1118
- },
1119
- [analytics]
1120
- );
1121
- }
1122
- function useTrackClick(analytics) {
1123
- return useCallback(
1124
- (elementInfo) => {
1125
- if (analytics) {
1126
- analytics.trackClick(elementInfo);
1127
- }
1128
- },
1129
- [analytics]
1130
- );
1131
- }
1132
- function usePageDuration(analytics) {
1133
- const startTimeRef = useRef(Date.now());
1134
- useEffect(() => {
1135
- startTimeRef.current = Date.now();
1136
- return () => {
1137
- if (analytics) {
1138
- const duration = Date.now() - startTimeRef.current;
1139
- analytics.track(
1140
- "page_leave" /* PAGE_LEAVE */,
1141
- "page_leave",
1142
- {
1143
- duration,
1144
- page_url: typeof window !== "undefined" ? window.location.href : ""
1145
- },
1146
- 1 /* NORMAL */
1147
- );
1148
- }
1149
- };
1150
- }, [analytics]);
1151
- }
1152
- function usePerformanceTracking(analytics) {
1153
- useEffect(() => {
1154
- if (!analytics || typeof window === "undefined") return;
1155
- if ("performance" in window && "timing" in window.performance) {
1156
- const timing = window.performance.timing;
1157
- const loadTime = timing.loadEventEnd - timing.navigationStart;
1158
- const domReadyTime = timing.domContentLoadedEventEnd - timing.navigationStart;
1159
- const firstPaintTime = timing.responseStart - timing.navigationStart;
1160
- analytics.trackPerformance("page_load_time", loadTime, "ms");
1161
- analytics.trackPerformance("dom_ready_time", domReadyTime, "ms");
1162
- analytics.trackPerformance("first_paint_time", firstPaintTime, "ms");
1163
- }
1164
- if ("PerformanceObserver" in window) {
1165
- const observer = new PerformanceObserver((list) => {
1166
- list.getEntries().forEach((entry) => {
1167
- if (entry.entryType === "resource") {
1168
- analytics.trackPerformance("resource_load_time", entry.duration, "ms", {
1169
- resource_name: entry.name
1170
- });
1171
- }
1172
- });
1173
- });
1174
- observer.observe({ entryTypes: ["resource"] });
1175
- return () => observer.disconnect();
1176
- }
1177
- return void 0;
1178
- }, [analytics]);
1179
- }
1180
- function useErrorTracking(analytics) {
1181
- useEffect(() => {
1182
- if (!analytics || typeof window === "undefined") return;
1183
- const handleError = (event) => {
1184
- analytics.trackError(event.message, event.error?.stack, event.error?.name, {
1185
- filename: event.filename,
1186
- lineno: event.lineno,
1187
- colno: event.colno
1188
- });
1189
- };
1190
- const handleUnhandledRejection = (event) => {
1191
- analytics.trackError("Unhandled Promise Rejection", void 0, "PromiseRejection", {
1192
- reason: String(event.reason)
1193
- });
1194
- };
1195
- window.addEventListener("error", handleError);
1196
- window.addEventListener("unhandledrejection", handleUnhandledRejection);
1197
- return () => {
1198
- window.removeEventListener("error", handleError);
1199
- window.removeEventListener("unhandledrejection", handleUnhandledRejection);
1200
- };
1201
- }, [analytics]);
1202
- }
1203
- function useAutoTracking(analytics, options = {}) {
1204
- const {
1205
- trackPageView = true,
1206
- trackPageDuration = true,
1207
- trackPerformance = true,
1208
- trackErrors = true
1209
- } = options;
1210
- useEffect(() => {
1211
- if (trackPageView && analytics) {
1212
- const url = typeof window !== "undefined" ? window.location.href : "";
1213
- const title = typeof document !== "undefined" ? document.title : "";
1214
- analytics.trackPageView(url, title);
1215
- }
1216
- }, [analytics, trackPageView]);
1217
- const startTimeRef = useRef(Date.now());
1218
- useEffect(() => {
1219
- if (!trackPageDuration || !analytics) return;
1220
- startTimeRef.current = Date.now();
1221
- return () => {
1222
- const duration = Date.now() - startTimeRef.current;
1223
- analytics.track(
1224
- "page_leave" /* PAGE_LEAVE */,
1225
- "page_leave",
1226
- {
1227
- duration,
1228
- page_url: typeof window !== "undefined" ? window.location.href : ""
1229
- },
1230
- 1 /* NORMAL */
1231
- );
1232
- };
1233
- }, [analytics, trackPageDuration]);
1234
- useEffect(() => {
1235
- if (!trackPerformance || !analytics || typeof window === "undefined") return;
1236
- const handleLoad = () => {
1237
- if ("performance" in window && "timing" in window.performance) {
1238
- const timing = window.performance.timing;
1239
- const loadTime = timing.loadEventEnd - timing.navigationStart;
1240
- analytics.trackPerformance("page_load_time", loadTime, "ms");
1241
- }
1242
- };
1243
- window.addEventListener("load", handleLoad);
1244
- return () => window.removeEventListener("load", handleLoad);
1245
- }, [analytics, trackPerformance]);
1246
- useEffect(() => {
1247
- if (!trackErrors || !analytics || typeof window === "undefined") return;
1248
- const handleError = (event) => {
1249
- analytics.trackError(event.message, event.error?.stack, event.error?.name);
1250
- };
1251
- window.addEventListener("error", handleError);
1252
- return () => window.removeEventListener("error", handleError);
1253
- }, [analytics, trackErrors]);
1254
- }
1255
-
1256
- // src/analytics/adapters/web.ts
1257
- var WebEventStorageAdapter = class {
1258
- constructor() {
1259
- this.storage = new WebStorageAdapter();
1260
- this.EVENTS_KEY = "analytics:events";
1261
- this.DEVICE_INFO_KEY = "analytics:device_info";
1262
- this.SESSION_ID_KEY = "analytics:session_id";
1263
- }
1264
- async saveEvents(events) {
1265
- try {
1266
- await this.storage.setItem(this.EVENTS_KEY, JSON.stringify(events));
1267
- } catch (error) {
1268
- console.error("Failed to save events:", error);
1269
- }
1270
- }
1271
- async getEvents() {
1272
- try {
1273
- const data = await this.storage.getItem(this.EVENTS_KEY);
1274
- return data ? JSON.parse(data) : [];
1275
- } catch (error) {
1276
- console.error("Failed to get events:", error);
1277
- return [];
1278
- }
1279
- }
1280
- async clearEvents() {
1281
- try {
1282
- await this.storage.removeItem(this.EVENTS_KEY);
1283
- } catch (error) {
1284
- console.error("Failed to clear events:", error);
1285
- }
1286
- }
1287
- async saveDeviceInfo(info) {
1288
- try {
1289
- await this.storage.setItem(this.DEVICE_INFO_KEY, JSON.stringify(info));
1290
- } catch (error) {
1291
- console.error("Failed to save device info:", error);
1292
- }
1293
- }
1294
- async getDeviceInfo() {
1295
- try {
1296
- const data = await this.storage.getItem(this.DEVICE_INFO_KEY);
1297
- return data ? JSON.parse(data) : null;
1298
- } catch (error) {
1299
- console.error("Failed to get device info:", error);
1300
- return null;
1301
- }
1302
- }
1303
- async saveSessionId(sessionId) {
1304
- try {
1305
- if (typeof window !== "undefined" && typeof sessionStorage !== "undefined") {
1306
- sessionStorage.setItem(this.SESSION_ID_KEY, sessionId);
1307
- }
1308
- } catch (error) {
1309
- console.error("Failed to save session ID:", error);
1310
- }
1311
- }
1312
- async getSessionId() {
1313
- try {
1314
- if (typeof window !== "undefined" && typeof sessionStorage !== "undefined") {
1315
- return sessionStorage.getItem(this.SESSION_ID_KEY);
1316
- }
1317
- return null;
1318
- } catch (error) {
1319
- console.error("Failed to get session ID:", error);
1320
- return null;
1321
- }
1322
- }
1323
- };
1324
- var WebNetworkAdapter = class {
1325
- async upload(url, events) {
1326
- try {
1327
- const response = await fetch(url, {
1328
- method: "POST",
1329
- headers: {
1330
- "Content-Type": "application/json"
1331
- },
1332
- body: JSON.stringify({
1333
- events,
1334
- timestamp: Date.now()
1335
- }),
1336
- // 使用 keepalive 确保页面关闭时也能发送
1337
- keepalive: true
1338
- });
1339
- if (response.ok) {
1340
- const data = await response.json();
1341
- return {
1342
- success: true,
1343
- message: data.message,
1344
- code: response.status
1345
- };
1346
- } else {
1347
- return {
1348
- success: false,
1349
- message: "HTTP " + response.status,
1350
- code: response.status
1351
- };
1352
- }
1353
- } catch (error) {
1354
- return {
1355
- success: false,
1356
- message: error instanceof Error ? error.message : "Network error",
1357
- code: 0
1358
- };
1359
- }
1360
- }
1361
- async isOnline() {
1362
- if (typeof navigator !== "undefined" && "onLine" in navigator) {
1363
- return navigator.onLine;
1364
- }
1365
- return true;
1366
- }
1367
- };
1368
- var WebDeviceAdapter = class {
1369
- async getDeviceInfo() {
1370
- return {
1371
- device_id: await this.generateDeviceId(),
1372
- os_name: this.getOSName(),
1373
- os_version: this.getOSVersion(),
1374
- screen_width: typeof window !== "undefined" ? window.screen.width : 0,
1375
- screen_height: typeof window !== "undefined" ? window.screen.height : 0,
1376
- language: typeof navigator !== "undefined" ? navigator.language : "en",
1377
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
1378
- device_model: this.getBrowserName(),
1379
- device_brand: this.getBrowserVersion()
1380
- };
1381
- }
1382
- async generateDeviceId() {
1383
- if (typeof window !== "undefined") {
1384
- let deviceId = localStorage.getItem("analytics:device_id");
1385
- if (!deviceId) {
1386
- deviceId = "web_" + Date.now() + "_" + Math.random().toString(36).substring(2, 15);
1387
- localStorage.setItem("analytics:device_id", deviceId);
1388
- }
1389
- return deviceId;
1390
- }
1391
- return "web_" + Date.now() + "_" + Math.random().toString(36).substring(2, 15);
1392
- }
1393
- getOSName() {
1394
- if (typeof navigator === "undefined") return "unknown";
1395
- const userAgent = navigator.userAgent;
1396
- if (userAgent.indexOf("Win") !== -1) return "Windows";
1397
- if (userAgent.indexOf("Mac") !== -1) return "MacOS";
1398
- if (userAgent.indexOf("Linux") !== -1) return "Linux";
1399
- if (userAgent.indexOf("Android") !== -1) return "Android";
1400
- if (userAgent.indexOf("iOS") !== -1) return "iOS";
1401
- return "unknown";
1402
- }
1403
- getOSVersion() {
1404
- if (typeof navigator === "undefined") return "unknown";
1405
- const userAgent = navigator.userAgent;
1406
- const match = userAgent.match(/\(([^)]+)\)/);
1407
- return match && match[1] ? match[1] : "unknown";
1408
- }
1409
- getBrowserName() {
1410
- if (typeof navigator === "undefined") return "unknown";
1411
- const userAgent = navigator.userAgent;
1412
- if (userAgent.indexOf("Chrome") !== -1) return "Chrome";
1413
- if (userAgent.indexOf("Safari") !== -1) return "Safari";
1414
- if (userAgent.indexOf("Firefox") !== -1) return "Firefox";
1415
- if (userAgent.indexOf("Edge") !== -1) return "Edge";
1416
- return "unknown";
1417
- }
1418
- getBrowserVersion() {
1419
- if (typeof navigator === "undefined") return "unknown";
1420
- const userAgent = navigator.userAgent;
1421
- const match = userAgent.match(/(Chrome|Safari|Firefox|Edge)\/(\d+)/);
1422
- return match && match[2] ? match[2] : "unknown";
1423
- }
1424
- };
1425
- var webAdapter = {
1426
- storage: new WebEventStorageAdapter(),
1427
- network: new WebNetworkAdapter(),
1428
- device: new WebDeviceAdapter()
1429
- };
1430
-
1431
- // src/analytics/adapters/mobile.ts
1432
- var MobileEventStorageAdapter = class {
1433
- // 需要注入具体的存储实现
1434
- constructor(storage) {
1435
- this.storage = storage;
1436
- this.EVENTS_KEY = "@analytics:events";
1437
- this.DEVICE_INFO_KEY = "@analytics:device_info";
1438
- this.SESSION_ID_KEY = "@analytics:session_id";
1439
- }
1440
- async saveEvents(events) {
1441
- try {
1442
- await this.storage.setItem(this.EVENTS_KEY, JSON.stringify(events));
1443
- } catch (error) {
1444
- console.error("Failed to save events:", error);
1445
- }
1446
- }
1447
- async getEvents() {
1448
- try {
1449
- const data = await this.storage.getItem(this.EVENTS_KEY);
1450
- return data ? JSON.parse(data) : [];
1451
- } catch (error) {
1452
- console.error("Failed to get events:", error);
1453
- return [];
1454
- }
1455
- }
1456
- async clearEvents() {
1457
- try {
1458
- await this.storage.removeItem(this.EVENTS_KEY);
1459
- } catch (error) {
1460
- console.error("Failed to clear events:", error);
1461
- }
1462
- }
1463
- async saveDeviceInfo(info) {
1464
- try {
1465
- await this.storage.setItem(this.DEVICE_INFO_KEY, JSON.stringify(info));
1466
- } catch (error) {
1467
- console.error("Failed to save device info:", error);
1468
- }
1469
- }
1470
- async getDeviceInfo() {
1471
- try {
1472
- const data = await this.storage.getItem(this.DEVICE_INFO_KEY);
1473
- return data ? JSON.parse(data) : null;
1474
- } catch (error) {
1475
- console.error("Failed to get device info:", error);
1476
- return null;
1477
- }
1478
- }
1479
- async saveSessionId(sessionId) {
1480
- try {
1481
- await this.storage.setItem(this.SESSION_ID_KEY, sessionId);
1482
- } catch (error) {
1483
- console.error("Failed to save session ID:", error);
1484
- }
1485
- }
1486
- async getSessionId() {
1487
- try {
1488
- return await this.storage.getItem(this.SESSION_ID_KEY);
1489
- } catch (error) {
1490
- console.error("Failed to get session ID:", error);
1491
- return null;
1492
- }
1493
- }
1494
- };
1495
- var MobileNetworkAdapter = class {
1496
- // 需要注入网络检查函数
1497
- constructor(netInfo) {
1498
- this.netInfo = netInfo;
1499
- }
1500
- async upload(url, events) {
1501
- try {
1502
- const response = await fetch(url, {
1503
- method: "POST",
1504
- headers: {
1505
- "Content-Type": "application/json"
1506
- },
1507
- body: JSON.stringify({
1508
- events,
1509
- timestamp: Date.now()
1510
- })
1511
- });
1512
- if (response.ok) {
1513
- const data = await response.json();
1514
- return {
1515
- success: true,
1516
- message: data.message,
1517
- code: response.status
1518
- };
1519
- } else {
1520
- return {
1521
- success: false,
1522
- message: "HTTP " + response.status,
1523
- code: response.status
1524
- };
1525
- }
1526
- } catch (error) {
1527
- return {
1528
- success: false,
1529
- message: error instanceof Error ? error.message : "Network error",
1530
- code: 0
1531
- };
1532
- }
1533
- }
1534
- async isOnline() {
1535
- try {
1536
- if (this.netInfo) {
1537
- const state = await this.netInfo.fetch();
1538
- return state.isConnected ?? false;
1539
- }
1540
- return true;
1541
- } catch (error) {
1542
- return true;
1543
- }
1544
- }
1545
- };
1546
- var MobileDeviceAdapter = class {
1547
- // 需要注入设备信息获取函数
1548
- constructor(deviceInfoModule) {
1549
- this.deviceInfoModule = deviceInfoModule;
1550
- }
1551
- async getDeviceInfo() {
1552
- try {
1553
- const info = this.deviceInfoModule;
1554
- return {
1555
- device_id: info ? await info.getUniqueId() : await this.generateDeviceId(),
1556
- device_model: info ? await info.getModel() : "unknown",
1557
- device_brand: info ? await info.getBrand() : "unknown",
1558
- os_name: info ? await info.getSystemName() : "unknown",
1559
- os_version: info ? await info.getSystemVersion() : "unknown",
1560
- screen_width: typeof window !== "undefined" ? window.screen.width : 0,
1561
- screen_height: typeof window !== "undefined" ? window.screen.height : 0,
1562
- language: typeof navigator !== "undefined" ? navigator.language : "en",
1563
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
1564
- };
1565
- } catch (error) {
1566
- console.error("Failed to get device info:", error);
1567
- return this.getDefaultDeviceInfo();
1568
- }
1569
- }
1570
- async generateDeviceId() {
1571
- const timestamp = Date.now();
1572
- const random = Math.random().toString(36).substring(2, 15);
1573
- return "mobile_" + timestamp + "_" + random;
1574
- }
1575
- getDefaultDeviceInfo() {
1576
- return {
1577
- device_id: "mobile_" + Date.now(),
1578
- os_name: "unknown",
1579
- os_version: "unknown",
1580
- screen_width: 0,
1581
- screen_height: 0,
1582
- language: "en",
1583
- timezone: "UTC"
1584
- };
1585
- }
1586
- };
1587
- var MobileStorageAdapter = MobileEventStorageAdapter;
1588
-
1589
- // src/analytics/adapters/miniapp.ts
1590
- var MiniappEventStorageAdapter = class {
1591
- // 需要注入 Taro 的存储 API
1592
- constructor(storage) {
1593
- this.storage = storage;
1594
- this.EVENTS_KEY = "analytics_events";
1595
- this.DEVICE_INFO_KEY = "analytics_device_info";
1596
- this.SESSION_ID_KEY = "analytics_session_id";
1597
- }
1598
- async saveEvents(events) {
1599
- try {
1600
- if (this.storage) {
1601
- this.storage.setStorageSync(this.EVENTS_KEY, events);
1602
- }
1603
- } catch (error) {
1604
- console.error("Failed to save events:", error);
1605
- }
1606
- }
1607
- async getEvents() {
1608
- try {
1609
- if (this.storage) {
1610
- const data = this.storage.getStorageSync(this.EVENTS_KEY);
1611
- return data || [];
1612
- }
1613
- return [];
1614
- } catch (error) {
1615
- console.error("Failed to get events:", error);
1616
- return [];
1617
- }
1618
- }
1619
- async clearEvents() {
1620
- try {
1621
- if (this.storage) {
1622
- this.storage.removeStorageSync(this.EVENTS_KEY);
1623
- }
1624
- } catch (error) {
1625
- console.error("Failed to clear events:", error);
1626
- }
1627
- }
1628
- async saveDeviceInfo(info) {
1629
- try {
1630
- if (this.storage) {
1631
- this.storage.setStorageSync(this.DEVICE_INFO_KEY, info);
1632
- }
1633
- } catch (error) {
1634
- console.error("Failed to save device info:", error);
1635
- }
1636
- }
1637
- async getDeviceInfo() {
1638
- try {
1639
- if (this.storage) {
1640
- return this.storage.getStorageSync(this.DEVICE_INFO_KEY) || null;
1641
- }
1642
- return null;
1643
- } catch (error) {
1644
- console.error("Failed to get device info:", error);
1645
- return null;
1646
- }
1647
- }
1648
- async saveSessionId(sessionId) {
1649
- try {
1650
- if (this.storage) {
1651
- this.storage.setStorageSync(this.SESSION_ID_KEY, sessionId);
1652
- }
1653
- } catch (error) {
1654
- console.error("Failed to save session ID:", error);
1655
- }
1656
- }
1657
- async getSessionId() {
1658
- try {
1659
- if (this.storage) {
1660
- return this.storage.getStorageSync(this.SESSION_ID_KEY) || null;
1661
- }
1662
- return null;
1663
- } catch (error) {
1664
- console.error("Failed to get session ID:", error);
1665
- return null;
1666
- }
1667
- }
1668
- };
1669
- var MiniappNetworkAdapter = class {
1670
- // 需要注入 Taro 的网络 API
1671
- constructor(request, netInfo) {
1672
- this.request = request;
1673
- this.netInfo = netInfo;
1674
- }
1675
- async upload(url, events) {
1676
- try {
1677
- if (!this.request) {
1678
- throw new Error("Request module not provided");
1679
- }
1680
- const response = await this.request.request({
1681
- url,
1682
- method: "POST",
1683
- data: {
1684
- events,
1685
- timestamp: Date.now()
1686
- },
1687
- header: {
1688
- "Content-Type": "application/json"
1689
- }
1690
- });
1691
- if (response.statusCode === 200) {
1692
- return {
1693
- success: true,
1694
- message: response.data.message,
1695
- code: response.statusCode
1696
- };
1697
- } else {
1698
- return {
1699
- success: false,
1700
- message: "HTTP " + response.statusCode,
1701
- code: response.statusCode
1702
- };
1703
- }
1704
- } catch (error) {
1705
- return {
1706
- success: false,
1707
- message: error instanceof Error ? error.message : "Network error",
1708
- code: 0
1709
- };
1710
- }
1711
- }
1712
- async isOnline() {
1713
- try {
1714
- if (this.netInfo) {
1715
- const { networkType } = await this.netInfo.getNetworkType();
1716
- return networkType !== "none";
1717
- }
1718
- return true;
1719
- } catch (error) {
1720
- return true;
1721
- }
1722
- }
1723
- };
1724
- var MiniappDeviceAdapter = class {
1725
- // 需要注入 Taro 的系统信息 API
1726
- constructor(systemInfo) {
1727
- this.systemInfo = systemInfo;
1728
- }
1729
- async getDeviceInfo() {
1730
- try {
1731
- if (this.systemInfo) {
1732
- const info = this.systemInfo.getSystemInfoSync();
1733
- return {
1734
- device_id: await this.generateDeviceId(),
1735
- device_model: info.model || "unknown",
1736
- device_brand: info.brand || "unknown",
1737
- os_name: info.platform || "unknown",
1738
- os_version: info.system || "unknown",
1739
- screen_width: info.screenWidth || 0,
1740
- screen_height: info.screenHeight || 0,
1741
- language: info.language || "zh_CN",
1742
- timezone: "Asia/Shanghai",
1743
- network_type: info.networkType
1744
- };
1745
- }
1746
- return this.getDefaultDeviceInfo();
1747
- } catch (error) {
1748
- console.error("Failed to get device info:", error);
1749
- return this.getDefaultDeviceInfo();
1750
- }
1751
- }
1752
- async generateDeviceId() {
1753
- const timestamp = Date.now();
1754
- const random = Math.random().toString(36).substring(2, 15);
1755
- return "miniapp_" + timestamp + "_" + random;
1756
- }
1757
- getDefaultDeviceInfo() {
1758
- return {
1759
- device_id: "miniapp_" + Date.now(),
1760
- os_name: "wechat",
1761
- os_version: "unknown",
1762
- screen_width: 0,
1763
- screen_height: 0,
1764
- language: "zh_CN",
1765
- timezone: "Asia/Shanghai"
1766
- };
1767
- }
1768
- };
1769
- var MiniappStorageAdapter = MiniappEventStorageAdapter;
1770
-
1771
- // src/analytics/adapters/desktop.ts
1772
- var DesktopEventStorageAdapter = class {
1773
- constructor() {
1774
- this.EVENTS_KEY = "analytics:events";
1775
- this.DEVICE_INFO_KEY = "analytics:device_info";
1776
- this.SESSION_ID_KEY = "analytics:session_id";
1777
- }
1778
- async saveEvents(events) {
1779
- try {
1780
- if (typeof window !== "undefined") {
1781
- localStorage.setItem(this.EVENTS_KEY, JSON.stringify(events));
1782
- }
1783
- } catch (error) {
1784
- console.error("Failed to save events:", error);
1785
- }
1786
- }
1787
- async getEvents() {
1788
- try {
1789
- if (typeof window !== "undefined") {
1790
- const data = localStorage.getItem(this.EVENTS_KEY);
1791
- return data ? JSON.parse(data) : [];
1792
- }
1793
- return [];
1794
- } catch (error) {
1795
- console.error("Failed to get events:", error);
1796
- return [];
1797
- }
1798
- }
1799
- async clearEvents() {
1800
- try {
1801
- if (typeof window !== "undefined") {
1802
- localStorage.removeItem(this.EVENTS_KEY);
1803
- }
1804
- } catch (error) {
1805
- console.error("Failed to clear events:", error);
1806
- }
1807
- }
1808
- async saveDeviceInfo(info) {
1809
- try {
1810
- if (typeof window !== "undefined") {
1811
- localStorage.setItem(this.DEVICE_INFO_KEY, JSON.stringify(info));
1812
- }
1813
- } catch (error) {
1814
- console.error("Failed to save device info:", error);
1815
- }
1816
- }
1817
- async getDeviceInfo() {
1818
- try {
1819
- if (typeof window !== "undefined") {
1820
- const data = localStorage.getItem(this.DEVICE_INFO_KEY);
1821
- return data ? JSON.parse(data) : null;
1822
- }
1823
- return null;
1824
- } catch (error) {
1825
- console.error("Failed to get device info:", error);
1826
- return null;
1827
- }
1828
- }
1829
- async saveSessionId(sessionId) {
1830
- try {
1831
- if (typeof window !== "undefined") {
1832
- localStorage.setItem(this.SESSION_ID_KEY, sessionId);
1833
- }
1834
- } catch (error) {
1835
- console.error("Failed to save session ID:", error);
1836
- }
1837
- }
1838
- async getSessionId() {
1839
- try {
1840
- if (typeof window !== "undefined") {
1841
- return localStorage.getItem(this.SESSION_ID_KEY);
1842
- }
1843
- return null;
1844
- } catch (error) {
1845
- console.error("Failed to get session ID:", error);
1846
- return null;
1847
- }
1848
- }
1849
- };
1850
- var DesktopNetworkAdapter = class {
1851
- async upload(url, events) {
1852
- try {
1853
- const response = await fetch(url, {
1854
- method: "POST",
1855
- headers: {
1856
- "Content-Type": "application/json"
1857
- },
1858
- body: JSON.stringify({
1859
- events,
1860
- timestamp: Date.now()
1861
- })
1862
- });
1863
- if (response.ok) {
1864
- const data = await response.json();
1865
- return {
1866
- success: true,
1867
- message: data.message,
1868
- code: response.status
1869
- };
1870
- } else {
1871
- return {
1872
- success: false,
1873
- message: "HTTP " + response.status,
1874
- code: response.status
1875
- };
1876
- }
1877
- } catch (error) {
1878
- return {
1879
- success: false,
1880
- message: error instanceof Error ? error.message : "Network error",
1881
- code: 0
1882
- };
1883
- }
1884
- }
1885
- async isOnline() {
1886
- if (typeof navigator !== "undefined" && "onLine" in navigator) {
1887
- return navigator.onLine;
1888
- }
1889
- return true;
1890
- }
1891
- };
1892
- var DesktopDeviceAdapter = class {
1893
- async getDeviceInfo() {
1894
- return {
1895
- device_id: await this.generateDeviceId(),
1896
- os_name: this.getOSName(),
1897
- os_version: this.getOSVersion(),
1898
- screen_width: typeof window !== "undefined" ? window.screen.width : 0,
1899
- screen_height: typeof window !== "undefined" ? window.screen.height : 0,
1900
- language: typeof navigator !== "undefined" ? navigator.language : "en",
1901
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
1902
- device_model: "Desktop",
1903
- device_brand: "Electron"
1904
- };
1905
- }
1906
- async generateDeviceId() {
1907
- if (typeof window !== "undefined") {
1908
- let deviceId = localStorage.getItem("analytics:device_id");
1909
- if (!deviceId) {
1910
- deviceId = "desktop_" + Date.now() + "_" + Math.random().toString(36).substring(2, 15);
1911
- localStorage.setItem("analytics:device_id", deviceId);
1912
- }
1913
- return deviceId;
1914
- }
1915
- return "desktop_" + Date.now() + "_" + Math.random().toString(36).substring(2, 15);
1916
- }
1917
- getOSName() {
1918
- if (typeof navigator === "undefined") return "unknown";
1919
- const platform = navigator.platform.toLowerCase();
1920
- if (platform.indexOf("win") !== -1) return "Windows";
1921
- if (platform.indexOf("mac") !== -1) return "MacOS";
1922
- if (platform.indexOf("linux") !== -1) return "Linux";
1923
- return "unknown";
1924
- }
1925
- getOSVersion() {
1926
- if (typeof navigator === "undefined") return "unknown";
1927
- return navigator.userAgent;
1928
- }
1929
- };
1930
- var DesktopStorageAdapter = DesktopEventStorageAdapter;
1931
- var StatCard = ({
1932
- title,
1933
- value,
1934
- subtitle,
1935
- icon,
1936
- trend,
1937
- className = ""
1938
- }) => {
1939
- return /* @__PURE__ */ React5.createElement(
1940
- "div",
1941
- {
1942
- className: clsx("bg-white rounded-lg shadow-sm p-6 border border-gray-200 hover:shadow-md transition-shadow", className)
1943
- },
1944
- /* @__PURE__ */ React5.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React5.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-medium text-gray-600 mb-1" }, title), /* @__PURE__ */ React5.createElement("p", { className: "text-3xl font-bold text-gray-900" }, value.toLocaleString()), subtitle && /* @__PURE__ */ React5.createElement("p", { className: "text-sm text-gray-500 mt-2" }, subtitle), trend && /* @__PURE__ */ React5.createElement("div", { className: "flex items-center mt-2" }, /* @__PURE__ */ React5.createElement(
1945
- "span",
1946
- {
1947
- className: clsx("text-sm font-medium", trend.isPositive ? "text-green-600" : "text-red-600")
1948
- },
1949
- trend.isPositive ? "\u2191" : "\u2193",
1950
- " ",
1951
- Math.abs(trend.value),
1952
- "%"
1953
- ), /* @__PURE__ */ React5.createElement("span", { className: "text-sm text-gray-500 ml-2" }, "vs \u4E0A\u5468"))), icon && /* @__PURE__ */ React5.createElement("div", { className: "flex-shrink-0 bg-gradient-to-br from-purple-500 to-indigo-600 rounded-lg p-3" }, /* @__PURE__ */ React5.createElement("div", { className: "text-white text-2xl" }, icon)))
1954
- );
1955
- };
1956
- var EventList = ({
1957
- events,
1958
- loading = false,
1959
- onEventClick,
1960
- className = ""
1961
- }) => {
1962
- if (loading) {
1963
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm p-6", className) }, /* @__PURE__ */ React5.createElement("div", { className: "animate-pulse space-y-4" }, [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ React5.createElement("div", { key: i, className: "h-16 bg-gray-200 rounded" }))));
1964
- }
1965
- if (events.length === 0) {
1966
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm p-12 text-center", className) }, /* @__PURE__ */ React5.createElement("div", { className: "text-gray-400 text-5xl mb-4" }, "\u{1F4CA}"), /* @__PURE__ */ React5.createElement("p", { className: "text-gray-600 text-lg font-medium" }, "\u6682\u65E0\u6570\u636E"), /* @__PURE__ */ React5.createElement("p", { className: "text-gray-500 text-sm mt-2" }, "\u5C1D\u8BD5\u8C03\u6574\u7B5B\u9009\u6761\u4EF6"));
1967
- }
1968
- const getPlatformColor = (platform) => {
1969
- const colors = {
1970
- web: "bg-blue-100 text-blue-800",
1971
- mobile: "bg-green-100 text-green-800",
1972
- miniapp: "bg-purple-100 text-purple-800",
1973
- desktop: "bg-gray-100 text-gray-800"
1974
- };
1975
- return colors[platform] || "bg-gray-100 text-gray-800";
1976
- };
1977
- const getEventTypeColor = (eventType) => {
1978
- const colors = {
1979
- page_view: "bg-indigo-100 text-indigo-800",
1980
- click: "bg-amber-100 text-amber-800",
1981
- error: "bg-red-100 text-red-800",
1982
- performance: "bg-cyan-100 text-cyan-800",
1983
- api_call: "bg-emerald-100 text-emerald-800"
1984
- };
1985
- return colors[eventType] || "bg-gray-100 text-gray-800";
1986
- };
1987
- const formatTimestamp2 = (timestamp) => {
1988
- const date = new Date(timestamp);
1989
- const now = /* @__PURE__ */ new Date();
1990
- const diff = now.getTime() - date.getTime();
1991
- const minutes = Math.floor(diff / 6e4);
1992
- const hours = Math.floor(minutes / 60);
1993
- const days = Math.floor(hours / 24);
1994
- if (minutes < 1) return "\u521A\u521A";
1995
- if (minutes < 60) return minutes + "\u5206\u949F\u524D";
1996
- if (hours < 24) return hours + "\u5C0F\u65F6\u524D";
1997
- if (days < 7) return days + "\u5929\u524D";
1998
- return date.toLocaleDateString("zh-CN");
1999
- };
2000
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm overflow-hidden", className) }, /* @__PURE__ */ React5.createElement("div", { className: "overflow-x-auto" }, /* @__PURE__ */ React5.createElement("table", { className: "min-w-full divide-y divide-gray-200" }, /* @__PURE__ */ React5.createElement("thead", { className: "bg-gray-50" }, /* @__PURE__ */ React5.createElement("tr", null, /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u4E8B\u4EF6"), /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5E73\u53F0"), /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u9875\u9762"), /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u7528\u6237"), /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u65F6\u95F4"), /* @__PURE__ */ React5.createElement("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u64CD\u4F5C"))), /* @__PURE__ */ React5.createElement("tbody", { className: "bg-white divide-y divide-gray-200" }, events.map((event) => /* @__PURE__ */ React5.createElement(
2001
- "tr",
2002
- {
2003
- key: event.id,
2004
- className: "hover:bg-gray-50 cursor-pointer transition-colors",
2005
- onClick: () => onEventClick?.(event)
2006
- },
2007
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4 whitespace-nowrap" }, /* @__PURE__ */ React5.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React5.createElement(
2008
- "span",
2009
- {
2010
- className: clsx("inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium", getEventTypeColor(
2011
- event.eventType
2012
- ), "w-fit mb-1")
2013
- },
2014
- event.eventType
2015
- ), /* @__PURE__ */ React5.createElement("span", { className: "text-sm text-gray-900" }, event.eventName))),
2016
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4 whitespace-nowrap" }, /* @__PURE__ */ React5.createElement(
2017
- "span",
2018
- {
2019
- className: clsx("inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium", getPlatformColor(
2020
- event.platform
2021
- ))
2022
- },
2023
- event.platform
2024
- )),
2025
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4" }, /* @__PURE__ */ React5.createElement("div", { className: "text-sm text-gray-900 max-w-xs truncate" }, event.pageUrl || "-"), event.pageTitle && /* @__PURE__ */ React5.createElement("div", { className: "text-xs text-gray-500 max-w-xs truncate" }, event.pageTitle)),
2026
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4 whitespace-nowrap" }, /* @__PURE__ */ React5.createElement("div", { className: "text-sm text-gray-900" }, event.userId || "\u6E38\u5BA2"), /* @__PURE__ */ React5.createElement("div", { className: "text-xs text-gray-500" }, event.deviceId.slice(0, 8), "...")),
2027
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4 whitespace-nowrap" }, /* @__PURE__ */ React5.createElement("div", { className: "text-sm text-gray-900" }, formatTimestamp2(event.timestamp)), /* @__PURE__ */ React5.createElement("div", { className: "text-xs text-gray-500" }, new Date(event.timestamp).toLocaleTimeString("zh-CN"))),
2028
- /* @__PURE__ */ React5.createElement("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm font-medium" }, /* @__PURE__ */ React5.createElement(
2029
- "button",
2030
- {
2031
- onClick: (e) => {
2032
- e.stopPropagation();
2033
- onEventClick?.(event);
2034
- },
2035
- className: "text-indigo-600 hover:text-indigo-900"
2036
- },
2037
- "\u8BE6\u60C5"
2038
- ))
2039
- ))))));
2040
- };
2041
- var FilterPanel = ({
2042
- onFilterChange,
2043
- initialFilters = {},
2044
- className = ""
2045
- }) => {
2046
- const [filters, setFilters] = useState(initialFilters);
2047
- const handleDatePreset = (preset) => {
2048
- const now = /* @__PURE__ */ new Date();
2049
- let startDate = /* @__PURE__ */ new Date();
2050
- switch (preset) {
2051
- case "today":
2052
- startDate.setHours(0, 0, 0, 0);
2053
- break;
2054
- case "yesterday":
2055
- startDate.setDate(now.getDate() - 1);
2056
- startDate.setHours(0, 0, 0, 0);
2057
- now.setDate(now.getDate() - 1);
2058
- now.setHours(23, 59, 59, 999);
2059
- break;
2060
- case "week":
2061
- startDate.setDate(now.getDate() - 7);
2062
- break;
2063
- case "month":
2064
- startDate.setMonth(now.getMonth() - 1);
2065
- break;
2066
- default:
2067
- return;
2068
- }
2069
- const newFilters = {
2070
- ...filters,
2071
- dateRange: {
2072
- startDate: startDate.toISOString(),
2073
- endDate: now.toISOString()
2074
- }
2075
- };
2076
- setFilters(newFilters);
2077
- onFilterChange(newFilters);
2078
- };
2079
- const handleFilterChange = (key, value) => {
2080
- const newFilters = {
2081
- ...filters,
2082
- [key]: value || void 0
2083
- };
2084
- setFilters(newFilters);
2085
- onFilterChange(newFilters);
2086
- };
2087
- const handleReset = () => {
2088
- const emptyFilters = {};
2089
- setFilters(emptyFilters);
2090
- onFilterChange(emptyFilters);
2091
- };
2092
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-xl shadow-sm border border-gray-200", className) }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between mb-4 p-4 bg-gradient-to-r from-gray-50 to-gray-100 -m-6 mb-4 rounded-t-xl border-b border-gray-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React5.createElement(
2093
- "svg",
2094
- {
2095
- className: "w-5 h-5 text-indigo-600",
2096
- fill: "none",
2097
- stroke: "currentColor",
2098
- viewBox: "0 0 24 24"
2099
- },
2100
- /* @__PURE__ */ React5.createElement(
2101
- "path",
2102
- {
2103
- strokeLinecap: "round",
2104
- strokeLinejoin: "round",
2105
- strokeWidth: 2,
2106
- d: "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"
2107
- }
2108
- )
2109
- ), /* @__PURE__ */ React5.createElement("h3", { className: "text-sm font-semibold text-gray-900" }, "\u7B5B\u9009\u6761\u4EF6")), /* @__PURE__ */ React5.createElement(
2110
- "button",
2111
- {
2112
- onClick: handleReset,
2113
- className: "text-xs px-3 py-1 text-gray-600 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg transition-colors"
2114
- },
2115
- "\u91CD\u7F6E"
2116
- )), /* @__PURE__ */ React5.createElement("div", { className: "p-4 space-y-4" }, /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-semibold text-gray-700 mb-2" }, "\u65F6\u95F4\u8303\u56F4"), /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-2 gap-2" }, [
2117
- { label: "\u4ECA\u5929", value: "today" },
2118
- { label: "\u6628\u5929", value: "yesterday" },
2119
- { label: "7\u5929", value: "week" },
2120
- { label: "30\u5929", value: "month" }
2121
- ].map((preset) => /* @__PURE__ */ React5.createElement(
2122
- "button",
2123
- {
2124
- key: preset.value,
2125
- onClick: () => handleDatePreset(preset.value),
2126
- className: "px-3 py-1.5 text-xs font-medium border border-gray-300 rounded-lg hover:bg-indigo-50 hover:border-indigo-500 hover:text-indigo-700 transition-colors"
2127
- },
2128
- preset.label
2129
- )))), /* @__PURE__ */ React5.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-medium text-gray-700 mb-1.5" }, "\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React5.createElement(
2130
- "input",
2131
- {
2132
- type: "datetime-local",
2133
- value: filters.dateRange?.startDate ? new Date(filters.dateRange.startDate).toISOString().slice(0, 16) : "",
2134
- onChange: (e) => handleFilterChange("dateRange", {
2135
- ...filters.dateRange,
2136
- startDate: e.target.value ? new Date(e.target.value).toISOString() : void 0
2137
- }),
2138
- className: "w-full px-2 py-1.5 text-xs border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
2139
- }
2140
- )), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-medium text-gray-700 mb-1.5" }, "\u7ED3\u675F\u65F6\u95F4"), /* @__PURE__ */ React5.createElement(
2141
- "input",
2142
- {
2143
- type: "datetime-local",
2144
- value: filters.dateRange?.endDate ? new Date(filters.dateRange.endDate).toISOString().slice(0, 16) : "",
2145
- onChange: (e) => handleFilterChange("dateRange", {
2146
- ...filters.dateRange,
2147
- endDate: e.target.value ? new Date(e.target.value).toISOString() : void 0
2148
- }),
2149
- className: "w-full px-2 py-1.5 text-xs border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
2150
- }
2151
- ))), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-semibold text-gray-700 mb-2" }, "\u4E8B\u4EF6\u7C7B\u578B"), /* @__PURE__ */ React5.createElement(
2152
- "select",
2153
- {
2154
- value: filters.eventType || "",
2155
- onChange: (e) => handleFilterChange("eventType", e.target.value),
2156
- className: "w-full px-2 py-1.5 text-xs border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
2157
- },
2158
- /* @__PURE__ */ React5.createElement("option", { value: "" }, "\u5168\u90E8"),
2159
- /* @__PURE__ */ React5.createElement("option", { value: "page_view" }, "\u9875\u9762\u6D4F\u89C8"),
2160
- /* @__PURE__ */ React5.createElement("option", { value: "click" }, "\u70B9\u51FB"),
2161
- /* @__PURE__ */ React5.createElement("option", { value: "search" }, "\u641C\u7D22"),
2162
- /* @__PURE__ */ React5.createElement("option", { value: "login" }, "\u767B\u5F55"),
2163
- /* @__PURE__ */ React5.createElement("option", { value: "logout" }, "\u767B\u51FA"),
2164
- /* @__PURE__ */ React5.createElement("option", { value: "error" }, "\u9519\u8BEF"),
2165
- /* @__PURE__ */ React5.createElement("option", { value: "performance" }, "\u6027\u80FD"),
2166
- /* @__PURE__ */ React5.createElement("option", { value: "api_call" }, "API \u8C03\u7528"),
2167
- /* @__PURE__ */ React5.createElement("option", { value: "custom" }, "\u81EA\u5B9A\u4E49")
2168
- )), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-semibold text-gray-700 mb-2" }, "\u5E73\u53F0"), /* @__PURE__ */ React5.createElement(
2169
- "select",
2170
- {
2171
- value: filters.platform || "",
2172
- onChange: (e) => handleFilterChange("platform", e.target.value),
2173
- className: "w-full px-2 py-1.5 text-xs border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
2174
- },
2175
- /* @__PURE__ */ React5.createElement("option", { value: "" }, "\u5168\u90E8"),
2176
- /* @__PURE__ */ React5.createElement("option", { value: "web" }, "Web"),
2177
- /* @__PURE__ */ React5.createElement("option", { value: "mobile" }, "Mobile"),
2178
- /* @__PURE__ */ React5.createElement("option", { value: "miniapp" }, "\u5C0F\u7A0B\u5E8F"),
2179
- /* @__PURE__ */ React5.createElement("option", { value: "desktop" }, "Desktop")
2180
- )), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("label", { className: "block text-xs font-semibold text-gray-700 mb-2" }, "\u7528\u6237ID"), /* @__PURE__ */ React5.createElement(
2181
- "input",
2182
- {
2183
- type: "text",
2184
- value: filters.userId || "",
2185
- onChange: (e) => handleFilterChange("userId", e.target.value),
2186
- placeholder: "\u8F93\u5165\u7528\u6237ID",
2187
- className: "w-full px-2 py-1.5 text-xs border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 placeholder:text-gray-400"
2188
- }
2189
- ))), /* @__PURE__ */ React5.createElement("div", { className: "px-4 py-3 bg-gray-50 -mx-6 -mb-6 mt-4 rounded-b-xl border-t border-gray-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React5.createElement(
2190
- "div",
2191
- {
2192
- className: clsx("w-2 h-2 rounded-full", Object.keys(filters).length > 0 ? "bg-green-500" : "bg-gray-300")
2193
- }
2194
- ), /* @__PURE__ */ React5.createElement("p", { className: "text-xs text-gray-600" }, Object.keys(filters).length === 0 ? "\u672A\u5E94\u7528\u7B5B\u9009" : Object.keys(filters).length + " \u4E2A\u7B5B\u9009"))));
2195
- };
2196
- var PieChart = ({ data, title, className = "" }) => {
2197
- const total = data.reduce((sum, item) => sum + item.value, 0);
2198
- const colors = [
2199
- "bg-blue-500",
2200
- "bg-green-500",
2201
- "bg-purple-500",
2202
- "bg-yellow-500",
2203
- "bg-pink-500",
2204
- "bg-indigo-500",
2205
- "bg-red-500",
2206
- "bg-cyan-500"
2207
- ];
2208
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm p-6", className) }, title && /* @__PURE__ */ React5.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4" }, title), /* @__PURE__ */ React5.createElement("div", { className: "space-y-3" }, data.map((item, index) => {
2209
- const percentage = total > 0 ? (item.value / total * 100).toFixed(1) : 0;
2210
- return /* @__PURE__ */ React5.createElement("div", { key: index }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between text-sm mb-1" }, /* @__PURE__ */ React5.createElement("span", { className: "text-gray-700 font-medium" }, item.name), /* @__PURE__ */ React5.createElement("span", { className: "text-gray-600" }, item.value.toLocaleString(), " (", percentage, "%)")), /* @__PURE__ */ React5.createElement("div", { className: "w-full bg-gray-200 rounded-full h-2" }, /* @__PURE__ */ React5.createElement(
2211
- "div",
2212
- {
2213
- className: clsx("h-2 rounded-full", colors[index % colors.length]),
2214
- style: { width: percentage + "%" }
2215
- }
2216
- )));
2217
- })));
2218
- };
2219
- var BarChart = ({ data, title, className = "" }) => {
2220
- const maxValue = Math.max(...data.map((item) => item.value), 1);
2221
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm p-6", className) }, title && /* @__PURE__ */ React5.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4" }, title), /* @__PURE__ */ React5.createElement("div", { className: "space-y-4" }, data.map((item, index) => {
2222
- const percentage = item.value / maxValue * 100;
2223
- return /* @__PURE__ */ React5.createElement("div", { key: index, className: "flex items-center gap-4" }, /* @__PURE__ */ React5.createElement("div", { className: "w-32 text-sm text-gray-700 font-medium truncate" }, item.name), /* @__PURE__ */ React5.createElement("div", { className: "flex-1 flex items-center gap-2" }, /* @__PURE__ */ React5.createElement("div", { className: "flex-1 bg-gray-200 rounded-full h-8 relative overflow-hidden" }, /* @__PURE__ */ React5.createElement(
2224
- "div",
2225
- {
2226
- className: "h-full bg-gradient-to-r from-indigo-500 to-purple-600 flex items-center justify-end px-3",
2227
- style: { width: percentage + "%", minWidth: "40px" }
2228
- },
2229
- /* @__PURE__ */ React5.createElement("span", { className: "text-xs text-white font-semibold" }, item.value.toLocaleString())
2230
- ))));
2231
- })));
2232
- };
2233
- var AnalyticsDashboard = ({
2234
- apiBaseUrl = "/api/analytics",
2235
- className = ""
2236
- }) => {
2237
- const [stats, setStats] = useState(null);
2238
- const [events, setEvents] = useState([]);
2239
- const [filters, setFilters] = useState({});
2240
- const [loading, setLoading] = useState(true);
2241
- const [selectedEvent, setSelectedEvent] = useState(null);
2242
- const [currentPage, setCurrentPage] = useState(1);
2243
- const [totalEvents, setTotalEvents] = useState(0);
2244
- const pageSize = 20;
2245
- const loadStats = async () => {
2246
- try {
2247
- const params = new URLSearchParams();
2248
- if (filters.dateRange?.startDate) {
2249
- params.append("startDate", filters.dateRange.startDate);
2250
- }
2251
- if (filters.dateRange?.endDate) {
2252
- params.append("endDate", filters.dateRange.endDate);
2253
- }
2254
- if (filters.platform) {
2255
- params.append("platform", filters.platform);
2256
- }
2257
- const response = await fetch(apiBaseUrl + "/stats?" + params);
2258
- const data = await response.json();
2259
- if (data.success) {
2260
- setStats(data.data);
2261
- }
2262
- } catch (error) {
2263
- console.error("Failed to load stats:", error);
2264
- }
2265
- };
2266
- const loadEvents = async () => {
2267
- try {
2268
- setLoading(true);
2269
- const params = new URLSearchParams();
2270
- if (filters.dateRange?.startDate) {
2271
- params.append("startDate", filters.dateRange.startDate);
2272
- }
2273
- if (filters.dateRange?.endDate) {
2274
- params.append("endDate", filters.dateRange.endDate);
2275
- }
2276
- if (filters.eventType) {
2277
- params.append("eventType", filters.eventType);
2278
- }
2279
- if (filters.platform) {
2280
- params.append("platform", filters.platform);
2281
- }
2282
- if (filters.userId) {
2283
- params.append("userId", filters.userId);
2284
- }
2285
- params.append("limit", pageSize.toString());
2286
- params.append("offset", ((currentPage - 1) * pageSize).toString());
2287
- params.append("orderBy", "timestamp");
2288
- params.append("orderDirection", "desc");
2289
- const response = await fetch(apiBaseUrl + "/query?" + params);
2290
- const data = await response.json();
2291
- if (data.success) {
2292
- setEvents(data.data);
2293
- setTotalEvents(data.total);
2294
- }
2295
- } catch (error) {
2296
- console.error("Failed to load events:", error);
2297
- } finally {
2298
- setLoading(false);
2299
- }
2300
- };
2301
- useEffect(() => {
2302
- loadStats();
2303
- loadEvents();
2304
- }, [filters, currentPage]);
2305
- const handleFilterChange = (newFilters) => {
2306
- setFilters(newFilters);
2307
- setCurrentPage(1);
2308
- };
2309
- const handleEventClick = (event) => {
2310
- setSelectedEvent(event);
2311
- };
2312
- const closeEventDetail = () => {
2313
- setSelectedEvent(null);
2314
- };
2315
- const totalPages = Math.ceil(totalEvents / pageSize);
2316
- return /* @__PURE__ */ React5.createElement("div", { className: clsx("space-y-6", className) }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 text-sm text-gray-600" }, /* @__PURE__ */ React5.createElement(
2317
- "svg",
2318
- {
2319
- className: "w-5 h-5 text-indigo-600",
2320
- fill: "none",
2321
- stroke: "currentColor",
2322
- viewBox: "0 0 24 24"
2323
- },
2324
- /* @__PURE__ */ React5.createElement(
2325
- "path",
2326
- {
2327
- strokeLinecap: "round",
2328
- strokeLinejoin: "round",
2329
- strokeWidth: 2,
2330
- d: "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"
2331
- }
2332
- )
2333
- ), /* @__PURE__ */ React5.createElement("span", { className: "font-medium" }, "\u5B9E\u65F6\u6570\u636E\u76D1\u63A7")), totalEvents > 0 && /* @__PURE__ */ React5.createElement("span", { className: "text-xs px-2 py-1 bg-indigo-100 text-indigo-700 rounded-full font-medium" }, totalEvents.toLocaleString(), " \u6761\u8BB0\u5F55")), /* @__PURE__ */ React5.createElement(
2334
- "button",
2335
- {
2336
- onClick: () => {
2337
- loadStats();
2338
- loadEvents();
2339
- },
2340
- className: "flex items-center gap-2 px-4 py-2 text-sm bg-gradient-to-r from-indigo-600 to-purple-600 text-white rounded-lg hover:from-indigo-700 hover:to-purple-700 transition-all duration-200 shadow-sm hover:shadow-md"
2341
- },
2342
- /* @__PURE__ */ React5.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React5.createElement(
2343
- "path",
2344
- {
2345
- strokeLinecap: "round",
2346
- strokeLinejoin: "round",
2347
- strokeWidth: 2,
2348
- d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
2349
- }
2350
- )),
2351
- /* @__PURE__ */ React5.createElement("span", null, "\u5237\u65B0\u6570\u636E")
2352
- )), /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-12 gap-6" }, /* @__PURE__ */ React5.createElement("div", { className: "col-span-12 xl:col-span-3" }, /* @__PURE__ */ React5.createElement(FilterPanel, { onFilterChange: handleFilterChange, initialFilters: filters })), /* @__PURE__ */ React5.createElement("div", { className: "col-span-12 xl:col-span-9 space-y-6" }, loading && !stats ? /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4" }, [1, 2, 3, 4].map((i) => /* @__PURE__ */ React5.createElement(
2353
- "div",
2354
- {
2355
- key: i,
2356
- className: "bg-white rounded-xl shadow-sm border border-gray-200 p-6 animate-pulse"
2357
- },
2358
- /* @__PURE__ */ React5.createElement("div", { className: "h-4 bg-gray-200 rounded w-20 mb-3" }),
2359
- /* @__PURE__ */ React5.createElement("div", { className: "h-8 bg-gray-200 rounded w-24 mb-2" }),
2360
- /* @__PURE__ */ React5.createElement("div", { className: "h-3 bg-gray-200 rounded w-16" })
2361
- ))) : stats ? /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4 animate-fade-in" }, /* @__PURE__ */ React5.createElement(
2362
- StatCard,
2363
- {
2364
- title: "\u603B\u4E8B\u4EF6\u6570",
2365
- value: stats.totalEvents,
2366
- subtitle: "\u6240\u6709\u5E73\u53F0",
2367
- icon: "\u{1F4C8}",
2368
- className: "hover:scale-105 transition-transform duration-200"
2369
- }
2370
- ), /* @__PURE__ */ React5.createElement(
2371
- StatCard,
2372
- {
2373
- title: "\u72EC\u7ACB\u7528\u6237",
2374
- value: stats.uniqueUsers,
2375
- subtitle: "\u53BB\u91CD\u7EDF\u8BA1",
2376
- icon: "\u{1F465}",
2377
- className: "hover:scale-105 transition-transform duration-200"
2378
- }
2379
- ), /* @__PURE__ */ React5.createElement(
2380
- StatCard,
2381
- {
2382
- title: "\u4F1A\u8BDD\u6570",
2383
- value: stats.uniqueSessions,
2384
- subtitle: "\u7528\u6237\u4F1A\u8BDD",
2385
- icon: "\u{1F517}",
2386
- className: "hover:scale-105 transition-transform duration-200"
2387
- }
2388
- ), /* @__PURE__ */ React5.createElement(
2389
- StatCard,
2390
- {
2391
- title: "\u8BBE\u5907\u6570",
2392
- value: stats.uniqueDevices,
2393
- subtitle: "\u72EC\u7ACB\u8BBE\u5907",
2394
- icon: "\u{1F4F1}",
2395
- className: "hover:scale-105 transition-transform duration-200"
2396
- }
2397
- )) : null, stats && /* @__PURE__ */ React5.createElement("div", { className: "space-y-6 animate-fade-in" }, /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-1 xl:grid-cols-2 gap-6" }, /* @__PURE__ */ React5.createElement("div", { className: "transform hover:scale-[1.02] transition-transform duration-200" }, /* @__PURE__ */ React5.createElement(
2398
- PieChart,
2399
- {
2400
- title: "\u5E73\u53F0\u5206\u5E03",
2401
- data: stats.eventsByPlatform.map((item) => ({
2402
- name: item.platform,
2403
- value: item.count
2404
- }))
2405
- }
2406
- )), /* @__PURE__ */ React5.createElement("div", { className: "transform hover:scale-[1.02] transition-transform duration-200" }, /* @__PURE__ */ React5.createElement(
2407
- BarChart,
2408
- {
2409
- title: "\u4E8B\u4EF6\u7C7B\u578B Top 10",
2410
- data: stats.eventsByType.slice(0, 10).map((item) => ({
2411
- name: item.eventType,
2412
- value: item.count
2413
- }))
2414
- }
2415
- ))), stats.topPages.length > 0 && /* @__PURE__ */ React5.createElement("div", { className: "transform hover:scale-[1.02] transition-transform duration-200" }, /* @__PURE__ */ React5.createElement(
2416
- BarChart,
2417
- {
2418
- title: "\u70ED\u95E8\u9875\u9762 Top 10",
2419
- data: stats.topPages.slice(0, 10).map((item) => ({
2420
- name: item.pageUrl,
2421
- value: item.count
2422
- }))
2423
- }
2424
- ))), /* @__PURE__ */ React5.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React5.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex items-center gap-2" }, /* @__PURE__ */ React5.createElement(
2425
- "svg",
2426
- {
2427
- className: "w-5 h-5 text-indigo-600",
2428
- fill: "none",
2429
- stroke: "currentColor",
2430
- viewBox: "0 0 24 24"
2431
- },
2432
- /* @__PURE__ */ React5.createElement(
2433
- "path",
2434
- {
2435
- strokeLinecap: "round",
2436
- strokeLinejoin: "round",
2437
- strokeWidth: 2,
2438
- d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"
2439
- }
2440
- )
2441
- ), "\u4E8B\u4EF6\u8BB0\u5F55"), totalEvents > 0 && !loading && /* @__PURE__ */ React5.createElement("span", { className: "text-sm text-gray-500" }, "\u663E\u793A ", (currentPage - 1) * pageSize + 1, "-", Math.min(currentPage * pageSize, totalEvents), " / ", totalEvents.toLocaleString())), /* @__PURE__ */ React5.createElement("div", { className: "animate-fade-in" }, /* @__PURE__ */ React5.createElement(EventList, { events, loading, onEventClick: handleEventClick })), totalPages > 1 && /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between bg-gradient-to-r from-gray-50 to-gray-100 px-6 py-4 rounded-xl border border-gray-200" }, /* @__PURE__ */ React5.createElement("div", { className: "hidden sm:block text-sm text-gray-600" }, "\u7B2C ", /* @__PURE__ */ React5.createElement("span", { className: "font-semibold text-gray-900" }, currentPage), " \u9875\uFF0C\u5171", " ", /* @__PURE__ */ React5.createElement("span", { className: "font-semibold text-gray-900" }, totalPages), " \u9875"), /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React5.createElement(
2442
- "button",
2443
- {
2444
- onClick: () => setCurrentPage((p) => Math.max(1, p - 1)),
2445
- disabled: currentPage === 1,
2446
- className: "flex items-center gap-1 px-4 py-2 text-sm font-medium bg-white border border-gray-300 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50 hover:border-indigo-500 transition-all duration-200"
2447
- },
2448
- /* @__PURE__ */ React5.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React5.createElement(
2449
- "path",
2450
- {
2451
- strokeLinecap: "round",
2452
- strokeLinejoin: "round",
2453
- strokeWidth: 2,
2454
- d: "M15 19l-7-7 7-7"
2455
- }
2456
- )),
2457
- /* @__PURE__ */ React5.createElement("span", { className: "hidden sm:inline" }, "\u4E0A\u4E00\u9875")
2458
- ), /* @__PURE__ */ React5.createElement("div", { className: "sm:hidden px-4 py-2 text-sm text-gray-600" }, currentPage, " / ", totalPages), /* @__PURE__ */ React5.createElement(
2459
- "button",
2460
- {
2461
- onClick: () => setCurrentPage((p) => Math.min(totalPages, p + 1)),
2462
- disabled: currentPage === totalPages,
2463
- className: "flex items-center gap-1 px-4 py-2 text-sm font-medium bg-white border border-gray-300 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50 hover:border-indigo-500 transition-all duration-200"
2464
- },
2465
- /* @__PURE__ */ React5.createElement("span", { className: "hidden sm:inline" }, "\u4E0B\u4E00\u9875"),
2466
- /* @__PURE__ */ React5.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React5.createElement(
2467
- "path",
2468
- {
2469
- strokeLinecap: "round",
2470
- strokeLinejoin: "round",
2471
- strokeWidth: 2,
2472
- d: "M9 5l7 7-7 7"
2473
- }
2474
- ))
2475
- )))))), selectedEvent && /* @__PURE__ */ React5.createElement(
2476
- "div",
2477
- {
2478
- className: "fixed inset-0 bg-black bg-opacity-60 backdrop-blur-sm flex items-center justify-center z-[50] p-4 animate-fade-in",
2479
- onClick: closeEventDetail
2480
- },
2481
- /* @__PURE__ */ React5.createElement(
2482
- "div",
2483
- {
2484
- className: "bg-white rounded-2xl shadow-2xl max-w-3xl w-full max-h-[85vh] overflow-hidden animate-slide-up",
2485
- onClick: (e) => e.stopPropagation()
2486
- },
2487
- /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-r from-indigo-600 to-purple-600 px-6 py-4 flex items-center justify-between" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-3 text-white" }, /* @__PURE__ */ React5.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React5.createElement(
2488
- "path",
2489
- {
2490
- strokeLinecap: "round",
2491
- strokeLinejoin: "round",
2492
- strokeWidth: 2,
2493
- d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
2494
- }
2495
- )), /* @__PURE__ */ React5.createElement("h3", { className: "text-xl font-semibold" }, "\u4E8B\u4EF6\u8BE6\u60C5")), /* @__PURE__ */ React5.createElement(
2496
- "button",
2497
- {
2498
- onClick: closeEventDetail,
2499
- className: "text-white hover:bg-white hover:bg-opacity-20 rounded-full p-2 transition-all duration-200"
2500
- },
2501
- /* @__PURE__ */ React5.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React5.createElement(
2502
- "path",
2503
- {
2504
- strokeLinecap: "round",
2505
- strokeLinejoin: "round",
2506
- strokeWidth: 2,
2507
- d: "M6 18L18 6M6 6l12 12"
2508
- }
2509
- ))
2510
- )),
2511
- /* @__PURE__ */ React5.createElement("div", { className: "p-6 overflow-auto max-h-[calc(85vh-80px)]" }, /* @__PURE__ */ React5.createElement("div", { className: "space-y-5" }, /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-br from-blue-50 to-indigo-50 rounded-xl p-4 border border-blue-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ React5.createElement(
2512
- "svg",
2513
- {
2514
- className: "w-5 h-5 text-indigo-600",
2515
- fill: "none",
2516
- stroke: "currentColor",
2517
- viewBox: "0 0 24 24"
2518
- },
2519
- /* @__PURE__ */ React5.createElement(
2520
- "path",
2521
- {
2522
- strokeLinecap: "round",
2523
- strokeLinejoin: "round",
2524
- strokeWidth: 2,
2525
- d: "M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"
2526
- }
2527
- )
2528
- ), /* @__PURE__ */ React5.createElement("h4", { className: "font-semibold text-gray-900" }, "\u57FA\u7840\u4FE1\u606F")), /* @__PURE__ */ React5.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600" }, "\u4E8B\u4EF6ID"), /* @__PURE__ */ React5.createElement("code", { className: "text-xs bg-white px-2 py-1 rounded border border-blue-200 font-mono text-gray-800" }, selectedEvent.id.slice(0, 16), "...")), /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-2 gap-3 pt-2" }, /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u4E8B\u4EF6\u7C7B\u578B"), /* @__PURE__ */ React5.createElement("span", { className: "inline-flex items-center px-2.5 py-1 rounded-full text-xs font-medium bg-indigo-100 text-indigo-800" }, selectedEvent.eventType)), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u4E8B\u4EF6\u540D\u79F0"), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-medium text-gray-900 truncate" }, selectedEvent.eventName))))), /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React5.createElement("div", { className: "bg-gray-50 rounded-lg p-3 border border-gray-200" }, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u5E73\u53F0"), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-semibold text-gray-900" }, selectedEvent.platform)), /* @__PURE__ */ React5.createElement("div", { className: "bg-gray-50 rounded-lg p-3 border border-gray-200" }, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u5E94\u7528\u7248\u672C"), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-semibold text-gray-900" }, selectedEvent.appVersion))), /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-br from-purple-50 to-pink-50 rounded-xl p-4 border border-purple-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ React5.createElement(
2529
- "svg",
2530
- {
2531
- className: "w-5 h-5 text-purple-600",
2532
- fill: "none",
2533
- stroke: "currentColor",
2534
- viewBox: "0 0 24 24"
2535
- },
2536
- /* @__PURE__ */ React5.createElement(
2537
- "path",
2538
- {
2539
- strokeLinecap: "round",
2540
- strokeLinejoin: "round",
2541
- strokeWidth: 2,
2542
- d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
2543
- }
2544
- )
2545
- ), /* @__PURE__ */ React5.createElement("h4", { className: "font-semibold text-gray-900" }, "\u7528\u6237\u4FE1\u606F")), /* @__PURE__ */ React5.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u7528\u6237ID"), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-medium text-gray-900" }, selectedEvent.userId || /* @__PURE__ */ React5.createElement("span", { className: "text-gray-400" }, "\u6E38\u5BA2"))), /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u4F1A\u8BDDID"), /* @__PURE__ */ React5.createElement("code", { className: "text-xs bg-white px-2 py-1 rounded border border-purple-200 font-mono text-gray-800 block truncate" }, selectedEvent.sessionId.slice(0, 12), "..."))), /* @__PURE__ */ React5.createElement("div", { className: "mt-3 pt-3 border-t border-purple-200" }, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u8BBE\u5907ID"), /* @__PURE__ */ React5.createElement("code", { className: "text-xs bg-white px-2 py-1 rounded border border-purple-200 font-mono text-gray-800 block truncate" }, selectedEvent.deviceId))), (selectedEvent.pageUrl || selectedEvent.pageTitle) && /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-br from-green-50 to-emerald-50 rounded-xl p-4 border border-green-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ React5.createElement(
2546
- "svg",
2547
- {
2548
- className: "w-5 h-5 text-green-600",
2549
- fill: "none",
2550
- stroke: "currentColor",
2551
- viewBox: "0 0 24 24"
2552
- },
2553
- /* @__PURE__ */ React5.createElement(
2554
- "path",
2555
- {
2556
- strokeLinecap: "round",
2557
- strokeLinejoin: "round",
2558
- strokeWidth: 2,
2559
- d: "M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"
2560
- }
2561
- )
2562
- ), /* @__PURE__ */ React5.createElement("h4", { className: "font-semibold text-gray-900" }, "\u9875\u9762\u4FE1\u606F")), selectedEvent.pageTitle && /* @__PURE__ */ React5.createElement("div", { className: "mb-2" }, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u9875\u9762\u6807\u9898"), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-medium text-gray-900" }, selectedEvent.pageTitle)), selectedEvent.pageUrl && /* @__PURE__ */ React5.createElement("div", null, /* @__PURE__ */ React5.createElement("span", { className: "text-xs font-medium text-gray-600 block mb-1" }, "\u9875\u9762URL"), /* @__PURE__ */ React5.createElement("code", { className: "text-xs bg-white px-2 py-1 rounded border border-green-200 font-mono text-gray-800 block break-all" }, selectedEvent.pageUrl))), /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-br from-amber-50 to-yellow-50 rounded-xl p-4 border border-amber-200" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ React5.createElement(
2563
- "svg",
2564
- {
2565
- className: "w-5 h-5 text-amber-600",
2566
- fill: "none",
2567
- stroke: "currentColor",
2568
- viewBox: "0 0 24 24"
2569
- },
2570
- /* @__PURE__ */ React5.createElement(
2571
- "path",
2572
- {
2573
- strokeLinecap: "round",
2574
- strokeLinejoin: "round",
2575
- strokeWidth: 2,
2576
- d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
2577
- }
2578
- )
2579
- ), /* @__PURE__ */ React5.createElement("h4", { className: "font-semibold text-gray-900" }, "\u65F6\u95F4\u4FE1\u606F")), /* @__PURE__ */ React5.createElement("p", { className: "text-sm font-medium text-gray-900" }, new Date(selectedEvent.timestamp).toLocaleString("zh-CN", {
2580
- year: "numeric",
2581
- month: "long",
2582
- day: "numeric",
2583
- hour: "2-digit",
2584
- minute: "2-digit",
2585
- second: "2-digit"
2586
- }))), selectedEvent.properties && Object.keys(selectedEvent.properties).length > 0 && /* @__PURE__ */ React5.createElement("div", { className: "bg-gradient-to-br from-gray-50 to-slate-50 rounded-xl p-4 border border-gray-300" }, /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ React5.createElement(
2587
- "svg",
2588
- {
2589
- className: "w-5 h-5 text-gray-600",
2590
- fill: "none",
2591
- stroke: "currentColor",
2592
- viewBox: "0 0 24 24"
2593
- },
2594
- /* @__PURE__ */ React5.createElement(
2595
- "path",
2596
- {
2597
- strokeLinecap: "round",
2598
- strokeLinejoin: "round",
2599
- strokeWidth: 2,
2600
- d: "M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"
2601
- }
2602
- )
2603
- ), /* @__PURE__ */ React5.createElement("h4", { className: "font-semibold text-gray-900" }, "\u81EA\u5B9A\u4E49\u5C5E\u6027")), /* @__PURE__ */ React5.createElement("pre", { className: "text-xs bg-white p-4 rounded-lg border border-gray-200 overflow-auto max-h-48 font-mono text-gray-800" }, JSON.stringify(selectedEvent.properties, null, 2)))))
2604
- )
2605
- ));
2606
- };
2607
-
2608
- // src/analytics/index.ts
2609
- var ANALYTICS_VERSION = "1.0.0";
2610
-
2611
- export { ANALYTICS_VERSION, Analytics, AnalyticsDashboard, BarChart, CatchError, DesktopDeviceAdapter, DesktopEventStorageAdapter, DesktopNetworkAdapter, DesktopStorageAdapter, EventList, EventPriority, EventQueue, EventType, FilterPanel, MiniappDeviceAdapter, MiniappEventStorageAdapter, MiniappNetworkAdapter, MiniappStorageAdapter, MobileDeviceAdapter, MobileEventStorageAdapter, MobileNetworkAdapter, MobileStorageAdapter, PieChart, StatCard, Track, TrackClick, TrackPerformance, Uploader, WebDeviceAdapter, WebEventStorageAdapter, WebNetworkAdapter, analytics_exports, clearAnalyticsRegistry, createAnalytics, createDesktopConfig, createMiniappConfig, createMobileConfig, createWebConfig, debounce, deepClone, formatEvent, formatTimestamp, generateUniqueId, getAllInstanceKeys, getAnalyticsInstance, getBatchSize, getCurrentPageTitle, getCurrentPageUrl, getEventSize, getGlobalAnalytics, getPageDuration, getReferrer, getRegisteredAnalytics, isAnalyticsInitialized, isDevelopment, isMobile, mergeEventProperties, registerAnalytics, resetAllAnalytics, resetAnalytics, safeParse, safeStringify, sanitizeEvent, setGlobalAnalytics, throttle, unregisterAnalytics, useAnalytics, useAutoTracking, useErrorTracking, usePageDuration, usePageView, usePerformanceTracking, useTrackClick, useTrackEvent, validateEvent, validateEvents, webAdapter };
2612
- //# sourceMappingURL=chunk-BIHYZA67.mjs.map
2613
- //# sourceMappingURL=chunk-BIHYZA67.mjs.map