sa2kit 1.6.43 → 1.6.45

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 (273) hide show
  1. package/dist/AliyunOSSProvider-2FARPAQD.js +15 -0
  2. package/dist/{AliyunOSSProvider-HCNGDJL7.js.map → AliyunOSSProvider-2FARPAQD.js.map} +1 -1
  3. package/dist/AliyunOSSProvider-UMVGVBDJ.mjs +9 -0
  4. package/dist/{AliyunOSSProvider-4W47OFEK.mjs.map → AliyunOSSProvider-UMVGVBDJ.mjs.map} +1 -1
  5. package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
  6. package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
  7. package/dist/ConfigService-QR67WYNK.mjs +4 -0
  8. package/dist/{ConfigService-V6ZK273Z.mjs.map → ConfigService-QR67WYNK.mjs.map} +1 -1
  9. package/dist/{ConfigService-3DIC6C3Q.js → ConfigService-UYC6ZTCM.js} +3 -3
  10. package/dist/{ConfigService-3DIC6C3Q.js.map → ConfigService-UYC6ZTCM.js.map} +1 -1
  11. package/dist/GenericOrderManager-e4WizpNf.d.mts +28 -0
  12. package/dist/GenericOrderManager-e4WizpNf.d.ts +28 -0
  13. package/dist/LocalStorageProvider-JQF5WK5H.js +15 -0
  14. package/dist/{LocalStorageProvider-PP7MA5OT.js.map → LocalStorageProvider-JQF5WK5H.js.map} +1 -1
  15. package/dist/LocalStorageProvider-PYOHETJV.mjs +9 -0
  16. package/dist/{LocalStorageProvider-3RVPCQB3.mjs.map → LocalStorageProvider-PYOHETJV.mjs.map} +1 -1
  17. package/dist/PMXParser-RLBDO7YK.mjs +4 -0
  18. package/dist/{PMXParser-RNVQL76A.mjs.map → PMXParser-RLBDO7YK.mjs.map} +1 -1
  19. package/dist/{PMXParser-2VTA737I.js → PMXParser-XHNO2KNI.js} +3 -3
  20. package/dist/{PMXParser-2VTA737I.js.map → PMXParser-XHNO2KNI.js.map} +1 -1
  21. package/dist/UniversalFileService-RBV6EN5J.js +15 -0
  22. package/dist/UniversalFileService-RBV6EN5J.js.map +1 -0
  23. package/dist/UniversalFileService-TNYKO6JN.mjs +9 -0
  24. package/dist/UniversalFileService-TNYKO6JN.mjs.map +1 -0
  25. package/dist/analytics/index.js +1 -1
  26. package/dist/analytics/index.mjs +1 -1
  27. package/dist/analytics/server/index.js +1 -1
  28. package/dist/analytics/server/index.mjs +1 -1
  29. package/dist/api/index.js +1 -1
  30. package/dist/api/index.mjs +1 -1
  31. package/dist/audioDetection/index.js +1 -1
  32. package/dist/audioDetection/index.mjs +1 -1
  33. package/dist/auth/client/index.js +1 -1
  34. package/dist/auth/client/index.mjs +1 -1
  35. package/dist/auth/components/index.js +1 -1
  36. package/dist/auth/components/index.mjs +1 -1
  37. package/dist/auth/hooks/index.js +1 -1
  38. package/dist/auth/hooks/index.mjs +1 -1
  39. package/dist/auth/index.js +1 -1
  40. package/dist/auth/index.mjs +1 -1
  41. package/dist/auth/middleware/index.js +1 -1
  42. package/dist/auth/middleware/index.mjs +1 -1
  43. package/dist/auth/routes/index.js +1 -1
  44. package/dist/auth/routes/index.mjs +1 -1
  45. package/dist/auth/schema/index.js +1 -1
  46. package/dist/auth/schema/index.mjs +1 -1
  47. package/dist/auth/services/index.js +1 -1
  48. package/dist/auth/services/index.mjs +1 -1
  49. package/dist/calendar/index.js +12 -12
  50. package/dist/calendar/index.mjs +5 -5
  51. package/dist/calendar/routes/index.js +1 -1
  52. package/dist/calendar/routes/index.mjs +1 -1
  53. package/dist/calendar/server.js +1 -1
  54. package/dist/calendar/server.mjs +1 -1
  55. package/dist/chunk-2PS5PIXV.mjs +443 -0
  56. package/dist/chunk-2PS5PIXV.mjs.map +1 -0
  57. package/dist/chunk-35CXIK5Y.js +277 -0
  58. package/dist/chunk-35CXIK5Y.js.map +1 -0
  59. package/dist/{chunk-GMIUSZXC.mjs → chunk-3JW4X3AC.mjs} +3 -3
  60. package/dist/{chunk-GMIUSZXC.mjs.map → chunk-3JW4X3AC.mjs.map} +1 -1
  61. package/dist/chunk-3M6T5KVD.js +453 -0
  62. package/dist/chunk-3M6T5KVD.js.map +1 -0
  63. package/dist/chunk-3TNR6IMC.js +168 -0
  64. package/dist/chunk-3TNR6IMC.js.map +1 -0
  65. package/dist/chunk-4NFOSCM6.js +34 -0
  66. package/dist/chunk-4NFOSCM6.js.map +1 -0
  67. package/dist/{chunk-3NHAT7D4.mjs → chunk-4VJQZSPU.mjs} +4 -3
  68. package/dist/chunk-4VJQZSPU.mjs.map +1 -0
  69. package/dist/{chunk-SCDDMIF6.js → chunk-4XXIBWCO.js} +66 -66
  70. package/dist/{chunk-SCDDMIF6.js.map → chunk-4XXIBWCO.js.map} +1 -1
  71. package/dist/chunk-6AHYPPUP.js +344 -0
  72. package/dist/chunk-6AHYPPUP.js.map +1 -0
  73. package/dist/{chunk-EGJPS7OL.mjs → chunk-6BJ76BYC.mjs} +3 -3
  74. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-6BJ76BYC.mjs.map} +1 -1
  75. package/dist/chunk-76V7EKBX.mjs +796 -0
  76. package/dist/chunk-76V7EKBX.mjs.map +1 -0
  77. package/dist/chunk-ACLOJXXE.js +195 -0
  78. package/dist/chunk-ACLOJXXE.js.map +1 -0
  79. package/dist/chunk-AEXPAH7Z.mjs +32 -0
  80. package/dist/chunk-AEXPAH7Z.mjs.map +1 -0
  81. package/dist/chunk-CFGX3EKK.js +560 -0
  82. package/dist/chunk-CFGX3EKK.js.map +1 -0
  83. package/dist/{chunk-435LATLS.mjs → chunk-CX5GPCCO.mjs} +3 -4
  84. package/dist/chunk-CX5GPCCO.mjs.map +1 -0
  85. package/dist/chunk-D2HXMGXS.js +46 -0
  86. package/dist/chunk-D2HXMGXS.js.map +1 -0
  87. package/dist/chunk-DM2GUVUH.js +1201 -0
  88. package/dist/chunk-DM2GUVUH.js.map +1 -0
  89. package/dist/{chunk-ZWQJSZEY.js → chunk-DVENFCQY.js} +5 -4
  90. package/dist/chunk-DVENFCQY.js.map +1 -0
  91. package/dist/chunk-EONPKLEJ.mjs +163 -0
  92. package/dist/chunk-EONPKLEJ.mjs.map +1 -0
  93. package/dist/{chunk-L47ZOYHL.js → chunk-EUIXQPPU.js} +4 -4
  94. package/dist/{chunk-L47ZOYHL.js.map → chunk-EUIXQPPU.js.map} +1 -1
  95. package/dist/{chunk-33YOJBQB.js → chunk-JOSNXSA6.js} +3 -4
  96. package/dist/chunk-JOSNXSA6.js.map +1 -0
  97. package/dist/chunk-K7WNCB4V.mjs +554 -0
  98. package/dist/chunk-K7WNCB4V.mjs.map +1 -0
  99. package/dist/chunk-L4ZYBFB2.mjs +44 -0
  100. package/dist/chunk-L4ZYBFB2.mjs.map +1 -0
  101. package/dist/chunk-M4HGHTIC.js +820 -0
  102. package/dist/chunk-M4HGHTIC.js.map +1 -0
  103. package/dist/{chunk-HHVDOIPV.js → chunk-MZKATHB7.js} +4 -4
  104. package/dist/{chunk-HHVDOIPV.js.map → chunk-MZKATHB7.js.map} +1 -1
  105. package/dist/{chunk-UKT3PLON.mjs → chunk-NXQVTAOP.mjs} +3 -3
  106. package/dist/{chunk-UKT3PLON.mjs.map → chunk-NXQVTAOP.mjs.map} +1 -1
  107. package/dist/chunk-OBIPI4GU.mjs +266 -0
  108. package/dist/chunk-OBIPI4GU.mjs.map +1 -0
  109. package/dist/chunk-PAX4S7QM.mjs +94 -0
  110. package/dist/chunk-PAX4S7QM.mjs.map +1 -0
  111. package/dist/chunk-PXWDQFWV.mjs +192 -0
  112. package/dist/chunk-PXWDQFWV.mjs.map +1 -0
  113. package/dist/chunk-QROLPPXP.mjs +5797 -0
  114. package/dist/chunk-QROLPPXP.mjs.map +1 -0
  115. package/dist/chunk-TGNUEULF.mjs +1158 -0
  116. package/dist/chunk-TGNUEULF.mjs.map +1 -0
  117. package/dist/chunk-VBQFVXOW.mjs +2772 -0
  118. package/dist/chunk-VBQFVXOW.mjs.map +1 -0
  119. package/dist/chunk-VLZ5N6XZ.js +5888 -0
  120. package/dist/chunk-VLZ5N6XZ.js.map +1 -0
  121. package/dist/chunk-VTGPHE4Z.mjs +322 -0
  122. package/dist/chunk-VTGPHE4Z.mjs.map +1 -0
  123. package/dist/chunk-WMJKH4XE.mjs +30 -0
  124. package/dist/{chunk-BJTO5JO5.mjs.map → chunk-WMJKH4XE.mjs.map} +1 -1
  125. package/dist/chunk-XYQMAF7H.js +96 -0
  126. package/dist/chunk-XYQMAF7H.js.map +1 -0
  127. package/dist/chunk-Z3G3IXEF.js +2814 -0
  128. package/dist/chunk-Z3G3IXEF.js.map +1 -0
  129. package/dist/chunk-Z6ZWNWWR.js +35 -0
  130. package/dist/{chunk-DGUM43GV.js.map → chunk-Z6ZWNWWR.js.map} +1 -1
  131. package/dist/components/index.d.mts +378 -0
  132. package/dist/components/index.d.ts +378 -0
  133. package/dist/components/index.js +414 -0
  134. package/dist/components/index.js.map +1 -0
  135. package/dist/components/index.mjs +9 -0
  136. package/dist/components/index.mjs.map +1 -0
  137. package/dist/config/index.js +1 -1
  138. package/dist/config/index.mjs +1 -1
  139. package/dist/config/server/index.js +1 -1
  140. package/dist/config/server/index.mjs +1 -1
  141. package/dist/fileService-O3W6YXCI.mjs +4 -0
  142. package/dist/fileService-O3W6YXCI.mjs.map +1 -0
  143. package/dist/fileService-YUDIYOAS.js +13 -0
  144. package/dist/fileService-YUDIYOAS.js.map +1 -0
  145. package/dist/i18n/index.js +7 -7
  146. package/dist/i18n/index.mjs +1 -1
  147. package/dist/imageCrop/index.js +1 -1
  148. package/dist/imageCrop/index.mjs +1 -1
  149. package/dist/index.d.mts +9 -580
  150. package/dist/index.d.ts +9 -580
  151. package/dist/index.js +313 -972
  152. package/dist/index.js.map +1 -1
  153. package/dist/index.mjs +104 -790
  154. package/dist/index.mjs.map +1 -1
  155. package/dist/logger/index.js +8 -8
  156. package/dist/logger/index.mjs +5 -2
  157. package/dist/mikuFireworks3D/index.js +17 -17
  158. package/dist/mikuFireworks3D/index.mjs +2 -2
  159. package/dist/mikuFireworks3D/server/index.js +1 -1
  160. package/dist/mikuFireworks3D/server/index.mjs +1 -1
  161. package/dist/mikuFusionGame/index.js +5 -5
  162. package/dist/mikuFusionGame/index.mjs +4 -4
  163. package/dist/mmd/admin/index.js +1 -1
  164. package/dist/mmd/admin/index.mjs +1 -1
  165. package/dist/mmd/index.js +2 -2
  166. package/dist/mmd/index.mjs +2 -2
  167. package/dist/mmd/server/index.js +1 -1
  168. package/dist/mmd/server/index.mjs +1 -1
  169. package/dist/music/index.js +1 -1
  170. package/dist/music/index.mjs +1 -1
  171. package/dist/music/server/index.js +1 -1
  172. package/dist/music/server/index.mjs +1 -1
  173. package/dist/navigation/index.d.mts +93 -0
  174. package/dist/navigation/index.d.ts +93 -0
  175. package/dist/navigation/index.js +29 -0
  176. package/dist/navigation/index.js.map +1 -0
  177. package/dist/navigation/index.mjs +4 -0
  178. package/dist/navigation/index.mjs.map +1 -0
  179. package/dist/popupConfig-BznThU1O.d.mts +330 -0
  180. package/dist/popupConfig-BznThU1O.d.ts +330 -0
  181. package/dist/portfolio/index.d.mts +57 -0
  182. package/dist/portfolio/index.d.ts +57 -0
  183. package/dist/portfolio/index.js +35 -0
  184. package/dist/portfolio/index.js.map +1 -0
  185. package/dist/portfolio/index.mjs +10 -0
  186. package/dist/portfolio/index.mjs.map +1 -0
  187. package/dist/request/index.js +1 -1
  188. package/dist/request/index.mjs +1 -1
  189. package/dist/showmasterpiece/index.d.mts +2524 -0
  190. package/dist/showmasterpiece/index.d.ts +2524 -0
  191. package/dist/showmasterpiece/index.js +9681 -0
  192. package/dist/showmasterpiece/index.js.map +1 -0
  193. package/dist/showmasterpiece/index.mjs +9631 -0
  194. package/dist/showmasterpiece/index.mjs.map +1 -0
  195. package/dist/showmasterpiece/migration/index.d.mts +120 -0
  196. package/dist/showmasterpiece/migration/index.d.ts +120 -0
  197. package/dist/showmasterpiece/migration/index.js +595 -0
  198. package/dist/showmasterpiece/migration/index.js.map +1 -0
  199. package/dist/showmasterpiece/migration/index.mjs +589 -0
  200. package/dist/showmasterpiece/migration/index.mjs.map +1 -0
  201. package/dist/showmasterpiece/scripts/index.d.mts +28 -0
  202. package/dist/showmasterpiece/scripts/index.d.ts +28 -0
  203. package/dist/showmasterpiece/scripts/index.js +327 -0
  204. package/dist/showmasterpiece/scripts/index.js.map +1 -0
  205. package/dist/showmasterpiece/scripts/index.mjs +325 -0
  206. package/dist/showmasterpiece/scripts/index.mjs.map +1 -0
  207. package/dist/showmasterpiece/server/index.d.mts +2698 -0
  208. package/dist/showmasterpiece/server/index.d.ts +2698 -0
  209. package/dist/showmasterpiece/server/index.js +179 -0
  210. package/dist/showmasterpiece/server/index.js.map +1 -0
  211. package/dist/showmasterpiece/server/index.mjs +6 -0
  212. package/dist/showmasterpiece/server/index.mjs.map +1 -0
  213. package/dist/storage/index.js +8 -8
  214. package/dist/storage/index.mjs +2 -2
  215. package/dist/testYourself/admin/index.js +1 -1
  216. package/dist/testYourself/admin/index.mjs +1 -1
  217. package/dist/testYourself/index.js +2 -2
  218. package/dist/testYourself/index.mjs +2 -2
  219. package/dist/testYourself/server/index.js +1 -1
  220. package/dist/testYourself/server/index.mjs +1 -1
  221. package/dist/universalExport/index.js +154 -1195
  222. package/dist/universalExport/index.js.map +1 -1
  223. package/dist/universalExport/index.mjs +2 -1157
  224. package/dist/universalExport/index.mjs.map +1 -1
  225. package/dist/universalExport/server/index.js +5 -3
  226. package/dist/universalExport/server/index.js.map +1 -1
  227. package/dist/universalExport/server/index.mjs +4 -2
  228. package/dist/universalExport/server/index.mjs.map +1 -1
  229. package/dist/universalFile/index.js +10 -7
  230. package/dist/universalFile/index.js.map +1 -1
  231. package/dist/universalFile/index.mjs +6 -2
  232. package/dist/universalFile/index.mjs.map +1 -1
  233. package/dist/universalFile/server/index.d.mts +592 -265
  234. package/dist/universalFile/server/index.d.ts +592 -265
  235. package/dist/universalFile/server/index.js +298 -5637
  236. package/dist/universalFile/server/index.js.map +1 -1
  237. package/dist/universalFile/server/index.mjs +8 -5559
  238. package/dist/universalFile/server/index.mjs.map +1 -1
  239. package/dist/utils/index.js +12 -12
  240. package/dist/utils/index.mjs +3 -3
  241. package/package.json +36 -1
  242. package/dist/AliyunOSSProvider-4W47OFEK.mjs +0 -6
  243. package/dist/AliyunOSSProvider-HCNGDJL7.js +0 -15
  244. package/dist/ConfigService-V6ZK273Z.mjs +0 -4
  245. package/dist/LocalStorageProvider-3RVPCQB3.mjs +0 -6
  246. package/dist/LocalStorageProvider-PP7MA5OT.js +0 -15
  247. package/dist/PMXParser-RNVQL76A.mjs +0 -4
  248. package/dist/chunk-25OFOKNF.js +0 -171
  249. package/dist/chunk-25OFOKNF.js.map +0 -1
  250. package/dist/chunk-33YOJBQB.js.map +0 -1
  251. package/dist/chunk-3DXPQ4YV.mjs +0 -165
  252. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  253. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  254. package/dist/chunk-435LATLS.mjs.map +0 -1
  255. package/dist/chunk-BJTO5JO5.mjs +0 -10
  256. package/dist/chunk-CIVO4R6N.mjs +0 -37
  257. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  258. package/dist/chunk-DGUM43GV.js +0 -12
  259. package/dist/chunk-HDMIOOZY.mjs +0 -546
  260. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  261. package/dist/chunk-HJ6MH7J7.js +0 -552
  262. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  263. package/dist/chunk-KH6RQ4J5.js +0 -28
  264. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  265. package/dist/chunk-Q5EDCKQA.js +0 -336
  266. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  267. package/dist/chunk-YOTQG4NP.mjs +0 -314
  268. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  269. package/dist/chunk-ZGVB35L2.mjs +0 -25
  270. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  271. package/dist/chunk-ZRAW3HXA.js +0 -43
  272. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  273. package/dist/chunk-ZWQJSZEY.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunk33YOJBQB_js = require('./chunk-33YOJBQB.js');
4
- var chunkSCDDMIF6_js = require('./chunk-SCDDMIF6.js');
5
- var chunkHHVDOIPV_js = require('./chunk-HHVDOIPV.js');
3
+ var chunk3M6T5KVD_js = require('./chunk-3M6T5KVD.js');
4
+ var chunk35CXIK5Y_js = require('./chunk-35CXIK5Y.js');
5
+ var chunkJOSNXSA6_js = require('./chunk-JOSNXSA6.js');
6
+ var chunk4XXIBWCO_js = require('./chunk-4XXIBWCO.js');
7
+ var chunkMZKATHB7_js = require('./chunk-MZKATHB7.js');
6
8
  require('./chunk-24HGREE6.js');
7
9
  require('./chunk-GBPLX42J.js');
8
10
  require('./chunk-6OWNMJKG.js');
@@ -10,43 +12,42 @@ require('./chunk-UL6XJGUZ.js');
10
12
  var chunk5QMBZP7S_js = require('./chunk-5QMBZP7S.js');
11
13
  require('./chunk-7VRT55ZD.js');
12
14
  require('./chunk-SVWQN2LR.js');
13
- var chunkZWQJSZEY_js = require('./chunk-ZWQJSZEY.js');
14
- var chunkL47ZOYHL_js = require('./chunk-L47ZOYHL.js');
15
+ var chunkDVENFCQY_js = require('./chunk-DVENFCQY.js');
16
+ var chunkEUIXQPPU_js = require('./chunk-EUIXQPPU.js');
15
17
  var chunkKO73EBUT_js = require('./chunk-KO73EBUT.js');
16
18
  require('./chunk-XJ7ZAGC5.js');
17
- var chunk25OFOKNF_js = require('./chunk-25OFOKNF.js');
18
- require('./chunk-DGUM43GV.js');
19
- var React12 = require('react');
19
+ var chunkACLOJXXE_js = require('./chunk-ACLOJXXE.js');
20
+ require('./chunk-Z6ZWNWWR.js');
21
+ var React3 = require('react');
20
22
  var tesseract_js = require('tesseract.js');
21
23
  var lucideReact = require('lucide-react');
22
24
  var clsx = require('clsx');
23
- var Link = require('next/link');
24
- var reactDom = require('react-dom');
25
25
  var core = require('@dnd-kit/core');
26
26
  var sortable = require('@dnd-kit/sortable');
27
27
  var utilities = require('@dnd-kit/utilities');
28
28
 
29
29
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
30
30
 
31
- var React12__default = /*#__PURE__*/_interopDefault(React12);
32
- var Link__default = /*#__PURE__*/_interopDefault(Link);
31
+ var React3__default = /*#__PURE__*/_interopDefault(React3);
33
32
 
33
+ // src/index.ts
34
+ chunkACLOJXXE_js.init_logger();
34
35
  var useOCR = (options = {}) => {
35
- const [state, setState] = React12.useState({
36
+ const [state, setState] = React3.useState({
36
37
  isProcessing: false,
37
38
  progress: 0,
38
39
  status: "idle",
39
40
  error: null,
40
41
  result: null
41
42
  });
42
- const workerRef = React12.useRef(null);
43
- const cleanup = React12.useCallback(async () => {
43
+ const workerRef = React3.useRef(null);
44
+ const cleanup = React3.useCallback(async () => {
44
45
  if (workerRef.current) {
45
46
  await workerRef.current.terminate();
46
47
  workerRef.current = null;
47
48
  }
48
49
  }, []);
49
- const recognize = React12.useCallback(
50
+ const recognize = React3.useCallback(
50
51
  async (image) => {
51
52
  setState((prev) => ({
52
53
  ...prev,
@@ -105,7 +106,7 @@ var useOCR = (options = {}) => {
105
106
  },
106
107
  [options]
107
108
  );
108
- React12.useEffect(() => {
109
+ React3.useEffect(() => {
109
110
  return () => {
110
111
  cleanup();
111
112
  };
@@ -121,8 +122,8 @@ var OCRScanner = ({
121
122
  className = "",
122
123
  language = "eng"
123
124
  }) => {
124
- const [imagePreview, setImagePreview] = React12.useState(null);
125
- const fileInputRef = React12.useRef(null);
125
+ const [imagePreview, setImagePreview] = React3.useState(null);
126
+ const fileInputRef = React3.useRef(null);
126
127
  const { recognize, isProcessing, progress, status, result, error } = useOCR({
127
128
  language
128
129
  });
@@ -158,43 +159,43 @@ var OCRScanner = ({
158
159
  handleFileChange(mockEvent);
159
160
  }
160
161
  };
161
- return /* @__PURE__ */ React12__default.default.createElement(
162
+ return /* @__PURE__ */ React3__default.default.createElement(
162
163
  "div",
163
164
  {
164
165
  className: clsx.clsx("p-6 border-2 border-dashed rounded-xl transition-all", isProcessing ? "border-blue-400 bg-blue-50/10" : "border-gray-200 hover:border-blue-400", className),
165
166
  onDragOver: handleDragOver,
166
167
  onDrop: handleDrop
167
168
  },
168
- !imagePreview ? /* @__PURE__ */ React12__default.default.createElement(
169
+ !imagePreview ? /* @__PURE__ */ React3__default.default.createElement(
169
170
  "div",
170
171
  {
171
172
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
172
173
  onClick: () => fileInputRef.current?.click()
173
174
  },
174
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Upload, { size: 32 })),
175
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u70B9\u51FB\u6216\u62D6\u62FD\u56FE\u7247\u8FDB\u884C OCR \u8BC6\u522B"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
176
- ) : /* @__PURE__ */ React12__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React12__default.default.createElement(
175
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Upload, { size: 32 })),
176
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u70B9\u51FB\u6216\u62D6\u62FD\u56FE\u7247\u8FDB\u884C OCR \u8BC6\u522B"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
177
+ ) : /* @__PURE__ */ React3__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React3__default.default.createElement(
177
178
  "img",
178
179
  {
179
180
  src: imagePreview,
180
181
  alt: "Preview",
181
182
  className: clsx.clsx("max-h-64 mx-auto object-contain transition-opacity", isProcessing ? "opacity-50" : "opacity-100")
182
183
  }
183
- ), !isProcessing && /* @__PURE__ */ React12__default.default.createElement(
184
+ ), !isProcessing && /* @__PURE__ */ React3__default.default.createElement(
184
185
  "button",
185
186
  {
186
187
  onClick: reset,
187
188
  className: "absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm"
188
189
  },
189
- /* @__PURE__ */ React12__default.default.createElement(lucideReact.X, { size: 18 })
190
- ), isProcessing && /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React12__default.default.createElement(
190
+ /* @__PURE__ */ React3__default.default.createElement(lucideReact.X, { size: 18 })
191
+ ), isProcessing && /* @__PURE__ */ React3__default.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React3__default.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React3__default.default.createElement(
191
192
  "div",
192
193
  {
193
194
  className: "bg-blue-500 h-full transition-all duration-300",
194
195
  style: { width: progress * 100 + "%" }
195
196
  }
196
- )), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xs font-medium text-blue-600 mt-2" }, status === "initializing" ? "\u6B63\u5728\u52A0\u8F7D\u5F15\u64CE..." : "\u8BC6\u522B\u4E2D " + Math.round(progress * 100) + "%"))), result && !isProcessing && /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React12__default.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u8BC6\u522B\u5931\u8D25: ", error.message)),
197
- /* @__PURE__ */ React12__default.default.createElement(
197
+ )), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-xs font-medium text-blue-600 mt-2" }, status === "initializing" ? "\u6B63\u5728\u52A0\u8F7D\u5F15\u64CE..." : "\u8BC6\u522B\u4E2D " + Math.round(progress * 100) + "%"))), result && !isProcessing && /* @__PURE__ */ React3__default.default.createElement("div", { className: "bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React3__default.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u8BC6\u522B\u5931\u8D25: ", error.message)),
198
+ /* @__PURE__ */ React3__default.default.createElement(
198
199
  "input",
199
200
  {
200
201
  type: "file",
@@ -208,7 +209,7 @@ var OCRScanner = ({
208
209
  );
209
210
  };
210
211
  var useBackgroundRemoval = (options = {}) => {
211
- const [state, setState] = React12.useState({
212
+ const [state, setState] = React3.useState({
212
213
  isProcessing: false,
213
214
  progress: 0,
214
215
  status: "idle",
@@ -216,7 +217,7 @@ var useBackgroundRemoval = (options = {}) => {
216
217
  resultBlob: null,
217
218
  resultUrl: null
218
219
  });
219
- const remove = React12.useCallback(async (image) => {
220
+ const remove = React3.useCallback(async (image) => {
220
221
  setState((prev) => ({
221
222
  ...prev,
222
223
  isProcessing: true,
@@ -295,12 +296,12 @@ var useBackgroundRemoval = (options = {}) => {
295
296
  throw err;
296
297
  }
297
298
  }, [options]);
298
- const cleanup = React12.useCallback(() => {
299
+ const cleanup = React3.useCallback(() => {
299
300
  if (state.resultUrl) {
300
301
  URL.revokeObjectURL(state.resultUrl);
301
302
  }
302
303
  }, [state.resultUrl]);
303
- React12.useEffect(() => {
304
+ React3.useEffect(() => {
304
305
  return () => cleanup();
305
306
  }, [cleanup]);
306
307
  return {
@@ -313,8 +314,8 @@ var BackgroundRemover = ({
313
314
  onResult,
314
315
  className = ""
315
316
  }) => {
316
- const [imagePreview, setImagePreview] = React12.useState(null);
317
- const fileInputRef = React12.useRef(null);
317
+ const [imagePreview, setImagePreview] = React3.useState(null);
318
+ const fileInputRef = React3.useRef(null);
318
319
  const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();
319
320
  const handleFileChange = async (e) => {
320
321
  const file = e.target.files?.[0];
@@ -342,37 +343,37 @@ var BackgroundRemover = ({
342
343
  a.download = "removed_background.png";
343
344
  a.click();
344
345
  };
345
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("p-6 border-2 border-dashed rounded-xl transition-all", isProcessing ? "border-purple-400 bg-purple-50/10" : "border-gray-200 hover:border-purple-400", className) }, !imagePreview ? /* @__PURE__ */ React12__default.default.createElement(
346
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("p-6 border-2 border-dashed rounded-xl transition-all", isProcessing ? "border-purple-400 bg-purple-50/10" : "border-gray-200 hover:border-purple-400", className) }, !imagePreview ? /* @__PURE__ */ React3__default.default.createElement(
346
347
  "div",
347
348
  {
348
349
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
349
350
  onClick: () => fileInputRef.current?.click()
350
351
  },
351
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Eraser, { size: 32 })),
352
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
353
- ) : /* @__PURE__ */ React12__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React12__default.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React12__default.default.createElement("img", { src: resultUrl, alt: "Result", className: "max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500" }) : /* @__PURE__ */ React12__default.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React12__default.default.createElement(React12__default.default.Fragment, null, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React12__default.default.createElement(
352
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Eraser, { size: 32 })),
353
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
354
+ ) : /* @__PURE__ */ React3__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React3__default.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React3__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React3__default.default.createElement("img", { src: resultUrl, alt: "Result", className: "max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500" }) : /* @__PURE__ */ React3__default.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React3__default.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React3__default.default.createElement(
354
355
  "div",
355
356
  {
356
357
  className: "bg-purple-500 h-full transition-all duration-300",
357
358
  style: { width: progress * 100 + "%" }
358
359
  }
359
- )), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React12__default.default.createElement(
360
+ )), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React3__default.default.createElement(
360
361
  "button",
361
362
  {
362
363
  onClick: reset,
363
364
  className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors"
364
365
  },
365
- /* @__PURE__ */ React12__default.default.createElement(lucideReact.X, { size: 16 }),
366
+ /* @__PURE__ */ React3__default.default.createElement(lucideReact.X, { size: 16 }),
366
367
  "\u91CD\u65B0\u5F00\u59CB"
367
- ), resultUrl && !isProcessing && /* @__PURE__ */ React12__default.default.createElement(
368
+ ), resultUrl && !isProcessing && /* @__PURE__ */ React3__default.default.createElement(
368
369
  "button",
369
370
  {
370
371
  onClick: downloadResult,
371
372
  className: "flex items-center gap-2 px-6 py-2 bg-purple-600 hover:bg-purple-700 text-white rounded-lg shadow-sm transition-all"
372
373
  },
373
- /* @__PURE__ */ React12__default.default.createElement(lucideReact.Download, { size: 16 }),
374
+ /* @__PURE__ */ React3__default.default.createElement(lucideReact.Download, { size: 16 }),
374
375
  "\u4E0B\u8F7D PNG"
375
- )), error && /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5904\u7406\u5931\u8D25: ", error.message)), /* @__PURE__ */ React12__default.default.createElement(
376
+ )), error && /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5904\u7406\u5931\u8D25: ", error.message)), /* @__PURE__ */ React3__default.default.createElement(
376
377
  "input",
377
378
  {
378
379
  type: "file",
@@ -385,14 +386,14 @@ var BackgroundRemover = ({
385
386
  ));
386
387
  };
387
388
  var useSentimentAnalysis = (options = {}) => {
388
- const [state, setState] = React12.useState({
389
+ const [state, setState] = React3.useState({
389
390
  isProcessing: false,
390
391
  status: "idle",
391
392
  error: null,
392
393
  result: null
393
394
  });
394
- const pipelineRef = React12.useRef(null);
395
- const analyze = React12.useCallback(async (text) => {
395
+ const pipelineRef = React3.useRef(null);
396
+ const analyze = React3.useCallback(async (text) => {
396
397
  setState((prev) => ({
397
398
  ...prev,
398
399
  isProcessing: true,
@@ -476,7 +477,7 @@ var SentimentAnalyzer = ({
476
477
  className = "",
477
478
  placeholder = "\u8F93\u5165\u4E00\u6BB5\u4E2D\u6587\u6216\u82F1\u6587\uFF0C\u5206\u6790\u5176\u60C5\u611F\u503E\u5411..."
478
479
  }) => {
479
- const [text, setText] = React12.useState("");
480
+ const [text, setText] = React3.useState("");
480
481
  const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();
481
482
  const handleAnalyze = async () => {
482
483
  if (!text.trim() || isProcessing) return;
@@ -491,11 +492,11 @@ var SentimentAnalyzer = ({
491
492
  if (!result) return null;
492
493
  switch (result.sentiment) {
493
494
  case "positive":
494
- return /* @__PURE__ */ React12__default.default.createElement(lucideReact.Smile, { className: "text-green-500", size: 24 });
495
+ return /* @__PURE__ */ React3__default.default.createElement(lucideReact.Smile, { className: "text-green-500", size: 24 });
495
496
  case "negative":
496
- return /* @__PURE__ */ React12__default.default.createElement(lucideReact.Frown, { className: "text-red-500", size: 24 });
497
+ return /* @__PURE__ */ React3__default.default.createElement(lucideReact.Frown, { className: "text-red-500", size: 24 });
497
498
  default:
498
- return /* @__PURE__ */ React12__default.default.createElement(lucideReact.Meh, { className: "text-yellow-500", size: 24 });
499
+ return /* @__PURE__ */ React3__default.default.createElement(lucideReact.Meh, { className: "text-yellow-500", size: 24 });
499
500
  }
500
501
  };
501
502
  const getSentimentColor = () => {
@@ -509,7 +510,7 @@ var SentimentAnalyzer = ({
509
510
  return "bg-yellow-50 border-yellow-200 text-yellow-700";
510
511
  }
511
512
  };
512
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm", className) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React12__default.default.createElement(
513
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm", className) }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React3__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React3__default.default.createElement(
513
514
  "textarea",
514
515
  {
515
516
  value: text,
@@ -518,25 +519,25 @@ var SentimentAnalyzer = ({
518
519
  className: "w-full h-32 p-4 bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all outline-none resize-none text-gray-800 dark:text-gray-200",
519
520
  disabled: isProcessing
520
521
  }
521
- ), /* @__PURE__ */ React12__default.default.createElement(
522
+ ), /* @__PURE__ */ React3__default.default.createElement(
522
523
  "button",
523
524
  {
524
525
  onClick: handleAnalyze,
525
526
  disabled: !text.trim() || isProcessing,
526
527
  className: "absolute bottom-3 right-3 p-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-md transition-colors shadow-sm"
527
528
  },
528
- isProcessing ? /* @__PURE__ */ React12__default.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React12__default.default.createElement(lucideReact.Send, { size: 18 })
529
- )), isProcessing && /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2", getSentimentColor()) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React12__default.default.createElement("div", null, /* @__PURE__ */ React12__default.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5206\u6790\u5931\u8D25: ", error.message));
529
+ isProcessing ? /* @__PURE__ */ React3__default.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React3__default.default.createElement(lucideReact.Send, { size: 18 })
530
+ )), isProcessing && /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2", getSentimentColor()) }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React3__default.default.createElement("div", null, /* @__PURE__ */ React3__default.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5206\u6790\u5931\u8D25: ", error.message));
530
531
  };
531
532
  var useTextGeneration = (options = {}) => {
532
- const [state, setState] = React12.useState({
533
+ const [state, setState] = React3.useState({
533
534
  isProcessing: false,
534
535
  status: "idle",
535
536
  error: null,
536
537
  result: null
537
538
  });
538
- const pipelineRef = React12.useRef(null);
539
- const generate = React12.useCallback(async (prompt) => {
539
+ const pipelineRef = React3.useRef(null);
540
+ const generate = React3.useCallback(async (prompt) => {
540
541
  console.log("[AI] Generating for prompt:", prompt);
541
542
  setState((prev) => ({
542
543
  ...prev,
@@ -618,11 +619,11 @@ var useTextGeneration = (options = {}) => {
618
619
  return { ...state, generate };
619
620
  };
620
621
  var SmartAssistant = ({ className = "" }) => {
621
- const [input, setInput] = React12.useState("");
622
- const [chatHistory, setChatHistory] = React12.useState([]);
623
- const scrollRef = React12.useRef(null);
622
+ const [input, setInput] = React3.useState("");
623
+ const [chatHistory, setChatHistory] = React3.useState([]);
624
+ const scrollRef = React3.useRef(null);
624
625
  const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();
625
- React12.useEffect(() => {
626
+ React3.useEffect(() => {
626
627
  if (scrollRef.current) {
627
628
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
628
629
  }
@@ -666,7 +667,7 @@ AI\u56DE\u5E94\uFF1A"`;
666
667
  setChatHistory((prev) => [...prev, { role: "assistant", content: "\uFF08\u672C\u5730\u6A21\u578B\u601D\u8003\u8FC7\u5EA6\uFF0C\u6682\u65F6\u4F11\u606F\u4E2D...\uFF09" }]);
667
668
  }
668
669
  };
669
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden", className) }, /* @__PURE__ */ React12__default.default.createElement("div", { ref: scrollRef, className: "flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50" }, chatHistory.length === 0 && /* @__PURE__ */ React12__default.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm italic text-center px-8 text-gray-400 font-sans" }, "\u4F60\u597D\uFF01\u6211\u662F 100% \u672C\u5730\u8FD0\u884C\u7684 AI\u3002", /* @__PURE__ */ React12__default.default.createElement("br", null), "\u4F60\u53EF\u4EE5\u548C\u6211\u804A\u804A\u5929\uFF0C\u6211\u4F1A\u5C1D\u8BD5\u7406\u89E3\u4F60\u7684\u610F\u601D\u3002")), chatHistory.map((msg, i) => /* @__PURE__ */ React12__default.default.createElement("div", { key: i, className: clsx.clsx("flex", msg.role === "user" ? "justify-end" : "justify-start", "animate-in fade-in slide-in-from-bottom-2") }, /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("flex gap-3 max-w-[85%]", msg.role === "user" ? "flex-row-reverse" : "") }, /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("p-2 rounded-lg h-fit", msg.role === "user" ? "bg-blue-100 text-blue-600" : "bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400") }, msg.role === "user" ? /* @__PURE__ */ React12__default.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React12__default.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("p-3 rounded-2xl shadow-sm text-sm", msg.role === "user" ? "bg-blue-600 text-white rounded-tr-none" : "bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed") }, msg.content)))), isGenerating && /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React12__default.default.createElement(
670
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden", className) }, /* @__PURE__ */ React3__default.default.createElement("div", { ref: scrollRef, className: "flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50" }, chatHistory.length === 0 && /* @__PURE__ */ React3__default.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-sm italic text-center px-8 text-gray-400 font-sans" }, "\u4F60\u597D\uFF01\u6211\u662F 100% \u672C\u5730\u8FD0\u884C\u7684 AI\u3002", /* @__PURE__ */ React3__default.default.createElement("br", null), "\u4F60\u53EF\u4EE5\u548C\u6211\u804A\u804A\u5929\uFF0C\u6211\u4F1A\u5C1D\u8BD5\u7406\u89E3\u4F60\u7684\u610F\u601D\u3002")), chatHistory.map((msg, i) => /* @__PURE__ */ React3__default.default.createElement("div", { key: i, className: clsx.clsx("flex", msg.role === "user" ? "justify-end" : "justify-start", "animate-in fade-in slide-in-from-bottom-2") }, /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("flex gap-3 max-w-[85%]", msg.role === "user" ? "flex-row-reverse" : "") }, /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("p-2 rounded-lg h-fit", msg.role === "user" ? "bg-blue-100 text-blue-600" : "bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400") }, msg.role === "user" ? /* @__PURE__ */ React3__default.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React3__default.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("p-3 rounded-2xl shadow-sm text-sm", msg.role === "user" ? "bg-blue-600 text-white rounded-tr-none" : "bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed") }, msg.content)))), isGenerating && /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React3__default.default.createElement(
670
671
  "input",
671
672
  {
672
673
  type: "text",
@@ -677,14 +678,14 @@ AI\u56DE\u5E94\uFF1A"`;
677
678
  className: "flex-1 bg-gray-50 dark:bg-gray-900 border-none rounded-full px-5 py-3 pr-12 text-sm focus:ring-2 focus:ring-blue-500 outline-none dark:text-white text-gray-800",
678
679
  disabled: isGenerating
679
680
  }
680
- ), /* @__PURE__ */ React12__default.default.createElement(
681
+ ), /* @__PURE__ */ React3__default.default.createElement(
681
682
  "button",
682
683
  {
683
684
  onClick: handleSend,
684
685
  disabled: !input.trim() || isGenerating,
685
686
  className: "absolute right-1 p-2.5 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-full transition-all shadow-md active:scale-95 flex items-center justify-center"
686
687
  },
687
- /* @__PURE__ */ React12__default.default.createElement(lucideReact.Send, { size: 18 })
688
+ /* @__PURE__ */ React3__default.default.createElement(lucideReact.Send, { size: 18 })
688
689
  ))));
689
690
  };
690
691
  var themeStyles = {
@@ -709,12 +710,12 @@ var ProfileModal = ({
709
710
  }) => {
710
711
  const renderSocialLinks = () => {
711
712
  if (!data.socialLinks || data.socialLinks.length === 0) return null;
712
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React12__default.default.createElement(
713
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React3__default.default.createElement(
713
714
  "a",
714
715
  {
715
716
  key: index,
716
717
  href: link.url,
717
- className: chunkZWQJSZEY_js.cn(
718
+ className: chunkDVENFCQY_js.cn(
718
719
  "w-8 h-8 flex items-center justify-center rounded-full no-underline transition-all hover:-translate-y-0.5",
719
720
  themeName === "dark" ? "bg-gray-800 text-gray-200 hover:bg-gray-700" : "bg-gray-100 text-gray-800 hover:bg-gray-200"
720
721
  ),
@@ -728,53 +729,53 @@ var ProfileModal = ({
728
729
  }
729
730
  }
730
731
  },
731
- link.icon ? /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-base" }, link.icon) : /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-[10px] font-semibold" }, link.type)
732
+ link.icon ? /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-base" }, link.icon) : /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-[10px] font-semibold" }, link.type)
732
733
  )));
733
734
  };
734
735
  const renderContacts = () => {
735
736
  if (!data.contacts || Object.keys(data.contacts).length === 0) return null;
736
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: chunkZWQJSZEY_js.cn(
737
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: chunkDVENFCQY_js.cn(
737
738
  "mt-4 border-t pt-4",
738
739
  themeName === "dark" ? "border-gray-800" : "border-gray-100"
739
- ) }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */ React12__default.default.createElement(
740
+ ) }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */ React3__default.default.createElement(
740
741
  "div",
741
742
  {
742
743
  key: index,
743
- className: chunkZWQJSZEY_js.cn(
744
+ className: chunkDVENFCQY_js.cn(
744
745
  "flex mb-2 cursor-pointer py-1.5 px-2 rounded transition-colors",
745
746
  themeName === "dark" ? "hover:bg-gray-800" : "hover:bg-gray-50"
746
747
  ),
747
748
  onClick: () => onContactClick && onContactClick(type, value)
748
749
  },
749
- /* @__PURE__ */ React12__default.default.createElement("span", { className: chunkZWQJSZEY_js.cn(
750
+ /* @__PURE__ */ React3__default.default.createElement("span", { className: chunkDVENFCQY_js.cn(
750
751
  "font-medium w-[70px] shrink-0",
751
752
  themeName === "dark" ? "text-gray-400" : "text-gray-500"
752
753
  ) }, type, ":"),
753
- /* @__PURE__ */ React12__default.default.createElement("span", { className: themeName === "dark" ? "text-gray-200" : "text-gray-800" }, value)
754
+ /* @__PURE__ */ React3__default.default.createElement("span", { className: themeName === "dark" ? "text-gray-200" : "text-gray-800" }, value)
754
755
  )));
755
756
  };
756
- return /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose() }, /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.DialogContent, { className: chunkZWQJSZEY_js.cn(
757
+ return /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose() }, /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.DialogContent, { className: chunkDVENFCQY_js.cn(
757
758
  "sm:max-w-[500px] p-0 overflow-hidden border-none shadow-2xl",
758
759
  themeStyles[themeName] || "",
759
760
  className
760
- ) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex gap-5 mb-5" }, showAvatar && /* @__PURE__ */ React12__default.default.createElement(
761
+ ) }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex gap-5 mb-5" }, showAvatar && /* @__PURE__ */ React3__default.default.createElement(
761
762
  "div",
762
763
  {
763
764
  className: "shrink-0",
764
765
  onClick: onAvatarClick,
765
766
  style: { cursor: onAvatarClick ? "pointer" : "default" }
766
767
  },
767
- /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.Avatar, { className: "border-2 border-primary/10 shadow-sm", style: { width: avatarSize, height: avatarSize } }, data.avatar && /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.AvatarImage, { src: data.avatar, alt: data.name, className: "object-cover" }), /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.AvatarFallback, { className: "text-xl" }, data.name.substring(0, 2).toUpperCase()))
768
- ), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, /* @__PURE__ */ React12__default.default.createElement("h2", { className: chunkZWQJSZEY_js.cn(
768
+ /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.Avatar, { className: "border-2 border-primary/10 shadow-sm", style: { width: avatarSize, height: avatarSize } }, data.avatar && /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.AvatarImage, { src: data.avatar, alt: data.name, className: "object-cover" }), /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.AvatarFallback, { className: "text-xl" }, data.name.substring(0, 2).toUpperCase()))
769
+ ), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, /* @__PURE__ */ React3__default.default.createElement("h2", { className: chunkDVENFCQY_js.cn(
769
770
  "text-2xl font-bold m-0 mb-1",
770
771
  themeName === "dark" ? "text-white" : "text-gray-900"
771
- ) }, data.name), data.title && /* @__PURE__ */ React12__default.default.createElement("div", { className: chunkZWQJSZEY_js.cn(
772
+ ) }, data.name), data.title && /* @__PURE__ */ React3__default.default.createElement("div", { className: chunkDVENFCQY_js.cn(
772
773
  "text-sm mb-2",
773
774
  themeName === "dark" ? "text-gray-400" : "text-gray-500"
774
- ) }, data.title), showSocial && renderSocialLinks())), showBio && data.bio && /* @__PURE__ */ React12__default.default.createElement("div", { className: chunkZWQJSZEY_js.cn(
775
+ ) }, data.title), showSocial && renderSocialLinks())), showBio && data.bio && /* @__PURE__ */ React3__default.default.createElement("div", { className: chunkDVENFCQY_js.cn(
775
776
  "mb-5 leading-relaxed text-sm",
776
777
  themeName === "dark" ? "text-gray-300" : "text-gray-600"
777
- ) }, /* @__PURE__ */ React12__default.default.createElement("p", null, data.bio)), showContacts && renderContacts(), data.customContent && /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-5" }, data.customContent))));
778
+ ) }, /* @__PURE__ */ React3__default.default.createElement("p", null, data.bio)), showContacts && renderContacts(), data.customContent && /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-5" }, data.customContent))));
778
779
  };
779
780
  var ProfileModal_default = ProfileModal;
780
781
  var BadgeList = ({
@@ -782,13 +783,13 @@ var BadgeList = ({
782
783
  className = ""
783
784
  }) => {
784
785
  if (!badges || badges.length === 0) return null;
785
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: chunkZWQJSZEY_js.cn("flex flex-wrap gap-2 mt-4", className) }, badges.map((badge, index) => /* @__PURE__ */ React12__default.default.createElement(
786
- chunkSCDDMIF6_js.Badge,
786
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: chunkDVENFCQY_js.cn("flex flex-wrap gap-2 mt-4", className) }, badges.map((badge, index) => /* @__PURE__ */ React3__default.default.createElement(
787
+ chunk4XXIBWCO_js.Badge,
787
788
  {
788
789
  key: index,
789
790
  variant: badge.type === "default" ? "default" : badge.type
790
791
  },
791
- badge.icon && /* @__PURE__ */ React12__default.default.createElement("span", { className: "mr-1" }, badge.icon),
792
+ badge.icon && /* @__PURE__ */ React3__default.default.createElement("span", { className: "mr-1" }, badge.icon),
792
793
  badge.label
793
794
  )));
794
795
  };
@@ -800,7 +801,7 @@ var Stat = ({
800
801
  icon,
801
802
  className = ""
802
803
  }) => {
803
- return /* @__PURE__ */ React.createElement("div", { className: chunkZWQJSZEY_js.cn("flex flex-col items-center flex-1 text-center", className) }, icon && /* @__PURE__ */ React.createElement("span", { className: "mb-2 text-2xl text-gray-400" }, icon), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-semibold text-gray-800" }, value), /* @__PURE__ */ React.createElement("div", { className: "text-xs text-gray-400 mt-1" }, label)));
804
+ return /* @__PURE__ */ React.createElement("div", { className: chunkDVENFCQY_js.cn("flex flex-col items-center flex-1 text-center", className) }, icon && /* @__PURE__ */ React.createElement("span", { className: "mb-2 text-2xl text-gray-400" }, icon), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-semibold text-gray-800" }, value), /* @__PURE__ */ React.createElement("div", { className: "text-xs text-gray-400 mt-1" }, label)));
804
805
  };
805
806
 
806
807
  // src/profile/internal/StatList.tsx
@@ -809,7 +810,7 @@ var StatList = ({
809
810
  className = ""
810
811
  }) => {
811
812
  if (!stats || stats.length === 0) return null;
812
- return /* @__PURE__ */ React.createElement("div", { className: chunkZWQJSZEY_js.cn("flex justify-between mt-4 pt-4 border-t border-gray-100", className) }, stats.map((stat, index) => /* @__PURE__ */ React.createElement(Stat, { key: index, ...stat })));
813
+ return /* @__PURE__ */ React.createElement("div", { className: chunkDVENFCQY_js.cn("flex justify-between mt-4 pt-4 border-t border-gray-100", className) }, stats.map((stat, index) => /* @__PURE__ */ React.createElement(Stat, { key: index, ...stat })));
813
814
  };
814
815
 
815
816
  // src/profile/ProfileButton.tsx
@@ -839,7 +840,7 @@ var exampleProfileData = {
839
840
  { label: "\u7C89\u4E1D", value: 1024 },
840
841
  { label: "\u8BC4\u5206", value: "4.9" }
841
842
  ],
842
- customContent: /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-5 border-t border-gray-100 pt-4" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-sm font-semibold mb-2" }, "\u4E13\u4E1A\u6280\u80FD"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm text-gray-600 leading-relaxed" }, "\u7CBE\u901AReact\u3001Vue\u3001Angular\u7B49\u524D\u7AEF\u6846\u67B6\uFF0C\u719F\u6089TypeScript\u3001JavaScript\u3001CSS3\u3001HTML5\u7B49\u524D\u7AEF\u6280\u672F\u3002 \u6709\u4E30\u5BCC\u7684\u5927\u578B\u9879\u76EE\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u80FD\u72EC\u7ACB\u8D1F\u8D23\u524D\u7AEF\u67B6\u6784\u8BBE\u8BA1\u3002"))
843
+ customContent: /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-5 border-t border-gray-100 pt-4" }, /* @__PURE__ */ React3__default.default.createElement("h3", { className: "text-sm font-semibold mb-2" }, "\u4E13\u4E1A\u6280\u80FD"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-sm text-gray-600 leading-relaxed" }, "\u7CBE\u901AReact\u3001Vue\u3001Angular\u7B49\u524D\u7AEF\u6846\u67B6\uFF0C\u719F\u6089TypeScript\u3001JavaScript\u3001CSS3\u3001HTML5\u7B49\u524D\u7AEF\u6280\u672F\u3002 \u6709\u4E30\u5BCC\u7684\u5927\u578B\u9879\u76EE\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u80FD\u72EC\u7ACB\u8D1F\u8D23\u524D\u7AEF\u67B6\u6784\u8BBE\u8BA1\u3002"))
843
844
  };
844
845
  var ProfileButton = ({
845
846
  data = exampleProfileData,
@@ -849,7 +850,7 @@ var ProfileButton = ({
849
850
  className = "",
850
851
  modalTheme = "light"
851
852
  }) => {
852
- const [isModalOpen, setIsModalOpen] = React12.useState(false);
853
+ const [isModalOpen, setIsModalOpen] = React3.useState(false);
853
854
  const openModal = () => setIsModalOpen(true);
854
855
  const closeModal = () => setIsModalOpen(false);
855
856
  const handleContactClick = (type, value) => {
@@ -859,8 +860,8 @@ var ProfileButton = ({
859
860
  window.open("tel:" + value);
860
861
  }
861
862
  };
862
- return /* @__PURE__ */ React12__default.default.createElement(React12__default.default.Fragment, null, /* @__PURE__ */ React12__default.default.createElement(
863
- chunkSCDDMIF6_js.Button,
863
+ return /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement(
864
+ chunk4XXIBWCO_js.Button,
864
865
  {
865
866
  variant,
866
867
  size,
@@ -868,7 +869,7 @@ var ProfileButton = ({
868
869
  className
869
870
  },
870
871
  buttonText
871
- ), /* @__PURE__ */ React12__default.default.createElement(
872
+ ), /* @__PURE__ */ React3__default.default.createElement(
872
873
  ProfileModal_default,
873
874
  {
874
875
  isOpen: isModalOpen,
@@ -879,8 +880,8 @@ var ProfileButton = ({
879
880
  onSocialLinkClick: (url) => window.open(url, "_blank")
880
881
  },
881
882
  data.customContent,
882
- data.badges && /* @__PURE__ */ React12__default.default.createElement(BadgeList, { badges: data.badges }),
883
- data.stats && /* @__PURE__ */ React12__default.default.createElement(StatList, { stats: data.stats })
883
+ data.badges && /* @__PURE__ */ React3__default.default.createElement(BadgeList, { badges: data.badges }),
884
+ data.stats && /* @__PURE__ */ React3__default.default.createElement(StatList, { stats: data.stats })
884
885
  ));
885
886
  };
886
887
  var AutoOpenModal = ({
@@ -890,8 +891,8 @@ var AutoOpenModal = ({
890
891
  themeName = "light",
891
892
  onClose
892
893
  }) => {
893
- const [isModalOpen, setIsModalOpen] = React12.useState(false);
894
- React12.useEffect(() => {
894
+ const [isModalOpen, setIsModalOpen] = React3.useState(false);
895
+ React3.useEffect(() => {
895
896
  const timer = setTimeout(() => {
896
897
  setIsModalOpen(true);
897
898
  }, delay);
@@ -910,7 +911,7 @@ var AutoOpenModal = ({
910
911
  window.open("tel:" + value);
911
912
  }
912
913
  };
913
- return /* @__PURE__ */ React12__default.default.createElement(
914
+ return /* @__PURE__ */ React3__default.default.createElement(
914
915
  ProfileModal_default,
915
916
  {
916
917
  isOpen: isModalOpen,
@@ -920,8 +921,8 @@ var AutoOpenModal = ({
920
921
  onContactClick: handleContactClick,
921
922
  onSocialLinkClick: (url) => window.open(url, "_blank")
922
923
  },
923
- data.badges && /* @__PURE__ */ React12__default.default.createElement(BadgeList, { badges: data.badges }),
924
- data.stats && /* @__PURE__ */ React12__default.default.createElement(StatList, { stats: data.stats })
924
+ data.badges && /* @__PURE__ */ React3__default.default.createElement(BadgeList, { badges: data.badges }),
925
+ data.stats && /* @__PURE__ */ React3__default.default.createElement(StatList, { stats: data.stats })
925
926
  );
926
927
  };
927
928
  var sizeMap = {
@@ -945,707 +946,17 @@ var EnhancedAvatar = ({
945
946
  }) => {
946
947
  const sizeClass = typeof size === "string" ? sizeMap[size] : "";
947
948
  const customSizeStyle = typeof size === "number" ? { width: size, height: size } : {};
948
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: chunkZWQJSZEY_js.cn("relative inline-block", className), onClick }, /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.Avatar, { className: chunkZWQJSZEY_js.cn(sizeClass, onClick && "cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all"), style: customSizeStyle }, src && /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.AvatarImage, { src, alt: name || "Avatar", className: "object-cover" }), /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.AvatarFallback, { className: "bg-primary/10 text-primary-foreground" }, name ? name.substring(0, 2).toUpperCase() : "??")), mood && /* @__PURE__ */ React12__default.default.createElement(
949
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: chunkDVENFCQY_js.cn("relative inline-block", className), onClick }, /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.Avatar, { className: chunkDVENFCQY_js.cn(sizeClass, onClick && "cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all"), style: customSizeStyle }, src && /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.AvatarImage, { src, alt: name || "Avatar", className: "object-cover" }), /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.AvatarFallback, { className: "bg-primary/10 text-primary-foreground" }, name ? name.substring(0, 2).toUpperCase() : "??")), mood && /* @__PURE__ */ React3__default.default.createElement(
949
950
  "div",
950
951
  {
951
- className: chunkZWQJSZEY_js.cn(
952
+ className: chunkDVENFCQY_js.cn(
952
953
  "absolute bottom-0 right-0 rounded-full border-2 border-white",
953
954
  moodColors[mood],
954
955
  typeof size === "number" ? size > 60 ? "h-4 w-4" : "h-3 w-3" : size === "large" ? "h-4 w-4" : "h-3 w-3"
955
956
  )
956
957
  }
957
- ), statusText && /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-xs text-muted-foreground" }, statusText)));
958
+ ), statusText && /* @__PURE__ */ React3__default.default.createElement("div", { className: "absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap" }, /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-xs text-muted-foreground" }, statusText)));
958
959
  };
959
- var About = ({
960
- timelineConfig,
961
- collisionBallsConfig
962
- }) => {
963
- return /* @__PURE__ */ React12__default.default.createElement("section", { id: "about", className: "py-16 bg-white" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React12__default.default.createElement("h2", { className: "text-3xl font-bold text-center mb-12" }, "\u5173\u4E8E\u6211"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-12" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u4E2A\u4EBA\u7ECF\u5386"), /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.Timeline, { items: timelineConfig.items })), /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u6280\u80FD\u5C55\u793A"), /* @__PURE__ */ React12__default.default.createElement("div", { style: { height: "400px", position: "relative" } }, /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.CollisionBalls, { collisionBallsConfig }))))));
964
- };
965
- var About_default = About;
966
- var Contact = () => {
967
- const [formData, setFormData] = React12.useState({
968
- name: "",
969
- email: "",
970
- message: ""
971
- });
972
- const [isSubmitting, setIsSubmitting] = React12.useState(false);
973
- const [submitStatus, setSubmitStatus] = React12.useState("idle");
974
- const handleChange = (e) => {
975
- const { name, value } = e.target;
976
- setFormData((prev) => ({
977
- ...prev,
978
- [name]: value
979
- }));
980
- };
981
- const handleSubmit = async (e) => {
982
- e.preventDefault();
983
- setIsSubmitting(true);
984
- setSubmitStatus("idle");
985
- try {
986
- await new Promise((resolve) => setTimeout(resolve, 1e3));
987
- setSubmitStatus("success");
988
- setFormData({ name: "", email: "", message: "" });
989
- } catch (error) {
990
- setSubmitStatus("error");
991
- } finally {
992
- setIsSubmitting(false);
993
- }
994
- };
995
- return /* @__PURE__ */ React12__default.default.createElement("section", { id: "contact", className: "py-16 bg-gray-50" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-center mb-12" }, /* @__PURE__ */ React12__default.default.createElement("h2", { className: "text-3xl font-bold text-gray-900 sm:text-4xl" }, "\u8054\u7CFB\u6211"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-4 text-lg text-gray-600" }, "\u6709\u4EFB\u4F55\u95EE\u9898\u6216\u5EFA\u8BAE\uFF1F\u8BF7\u968F\u65F6\u8054\u7CFB\u6211")), /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-xl p-6 sm:p-8" }, /* @__PURE__ */ React12__default.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-6" }, /* @__PURE__ */ React12__default.default.createElement("div", null, /* @__PURE__ */ React12__default.default.createElement("label", { htmlFor: "name", className: "block text-sm font-medium text-gray-700" }, "\u59D3\u540D"), /* @__PURE__ */ React12__default.default.createElement(
996
- "input",
997
- {
998
- type: "text",
999
- name: "name",
1000
- id: "name",
1001
- value: formData.name,
1002
- onChange: handleChange,
1003
- required: true,
1004
- className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
1005
- placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u59D3\u540D"
1006
- }
1007
- )), /* @__PURE__ */ React12__default.default.createElement("div", null, /* @__PURE__ */ React12__default.default.createElement("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700" }, "\u90AE\u7BB1"), /* @__PURE__ */ React12__default.default.createElement(
1008
- "input",
1009
- {
1010
- type: "email",
1011
- name: "email",
1012
- id: "email",
1013
- value: formData.email,
1014
- onChange: handleChange,
1015
- required: true,
1016
- className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
1017
- placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u90AE\u7BB1"
1018
- }
1019
- )), /* @__PURE__ */ React12__default.default.createElement("div", null, /* @__PURE__ */ React12__default.default.createElement("label", { htmlFor: "message", className: "block text-sm font-medium text-gray-700" }, "\u6D88\u606F"), /* @__PURE__ */ React12__default.default.createElement(
1020
- "textarea",
1021
- {
1022
- name: "message",
1023
- id: "message",
1024
- rows: 4,
1025
- value: formData.message,
1026
- onChange: handleChange,
1027
- required: true,
1028
- className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
1029
- placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u6D88\u606F"
1030
- }
1031
- )), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-end" }, /* @__PURE__ */ React12__default.default.createElement(
1032
- "button",
1033
- {
1034
- type: "submit",
1035
- disabled: isSubmitting,
1036
- className: clsx.clsx("inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white", isSubmitting ? "bg-blue-400 cursor-not-allowed" : "bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500")
1037
- },
1038
- isSubmitting ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001\u6D88\u606F"
1039
- )), submitStatus === "success" && /* @__PURE__ */ React12__default.default.createElement("div", { className: "rounded-md bg-green-50 p-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React12__default.default.createElement("svg", { className: "h-5 w-5 text-green-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm font-medium text-green-800" }, "\u6D88\u606F\u5DF2\u6210\u529F\u53D1\u9001\uFF01")))), submitStatus === "error" && /* @__PURE__ */ React12__default.default.createElement("div", { className: "rounded-md bg-red-50 p-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React12__default.default.createElement("svg", { className: "h-5 w-5 text-red-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm font-medium text-red-800" }, "\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5")))))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React12__default.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }))), /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u90AE\u7BB1"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "your.email@example.com")), /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React12__default.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" }))), /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u7535\u8BDD"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "+86 123 4567 8900")), /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React12__default.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" }), /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" }))), /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u5730\u5740"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "\u4E2D\u56FD\uFF0C\u5317\u4EAC")))));
1040
- };
1041
- var Contact_default = Contact;
1042
- var Home = ({ homeConfig, className }) => {
1043
- const { title, subtitle, buttons, imageSrc } = homeConfig;
1044
- const [displayText, setDisplayText] = React12.useState("");
1045
- const [currentIndex, setCurrentIndex] = React12.useState(0);
1046
- React12.useEffect(() => {
1047
- if (currentIndex < title.length) {
1048
- const timer = setTimeout(() => {
1049
- setDisplayText((prev) => prev + title[currentIndex]);
1050
- setCurrentIndex((prev) => prev + 1);
1051
- }, 150);
1052
- return () => clearTimeout(timer);
1053
- }
1054
- return () => {
1055
- setDisplayText("");
1056
- setCurrentIndex(0);
1057
- };
1058
- }, [currentIndex, title]);
1059
- return /* @__PURE__ */ React12__default.default.createElement(
1060
- "section",
1061
- {
1062
- id: "home",
1063
- className: chunkZWQJSZEY_js.cn("min-h-screen flex items-center justify-center py-16 bg-gradient-to-b from-white to-gray-50", className)
1064
- },
1065
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-col md:flex-row items-center gap-12" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex-1 text-center md:text-left" }, /* @__PURE__ */ React12__default.default.createElement("h1", { className: "text-4xl md:text-6xl font-bold mb-6 text-gray-900" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "inline-block" }, displayText), /* @__PURE__ */ React12__default.default.createElement("span", { className: "animate-pulse ml-1 text-blue-500" }, "|")), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xl md:text-2xl text-gray-600 mb-8" }, subtitle), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-wrap gap-4 justify-center md:justify-start" }, buttons.map((button) => /* @__PURE__ */ React12__default.default.createElement(
1066
- "a",
1067
- {
1068
- key: button.link,
1069
- href: button.link,
1070
- className: "px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-300 shadow-md hover:shadow-lg font-medium"
1071
- },
1072
- button.text
1073
- )))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative group" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute -inset-1 bg-gradient-to-r from-blue-600 to-purple-600 rounded-lg blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200" }), /* @__PURE__ */ React12__default.default.createElement(
1074
- "img",
1075
- {
1076
- src: imageSrc,
1077
- alt: "Profile",
1078
- className: "relative w-full max-w-md mx-auto rounded-lg shadow-xl transform hover:scale-[1.02] transition-transform duration-300 bg-white"
1079
- }
1080
- )))))
1081
- );
1082
- };
1083
- var Home_default = Home;
1084
- var ExperimentCard = ({
1085
- href,
1086
- title,
1087
- description,
1088
- tags,
1089
- category,
1090
- isCompleted,
1091
- updatedAt,
1092
- createdAt,
1093
- className
1094
- }) => {
1095
- const formatDate = (dateString) => {
1096
- if (!dateString) return "";
1097
- try {
1098
- const date = new Date(dateString);
1099
- return date.toLocaleDateString("zh-CN", {
1100
- year: "numeric",
1101
- month: "2-digit",
1102
- day: "2-digit"
1103
- });
1104
- } catch (e) {
1105
- return dateString;
1106
- }
1107
- };
1108
- return /* @__PURE__ */ React12__default.default.createElement(Link__default.default, { href, className: chunkZWQJSZEY_js.cn("block group", className) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-full h-full bg-white rounded-2xl overflow-hidden shadow-md hover:shadow-2xl transition-all duration-300 transform group-hover:-translate-y-1 border border-gray-100 hover:border-gray-200" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-start justify-between mb-4" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-xl font-semibold text-gray-900 flex-1 pr-4 leading-tight" }, title), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-col gap-2 flex-shrink-0" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: chunkZWQJSZEY_js.cn(
1109
- "px-3 py-1.5 text-xs font-medium rounded-full shadow-sm",
1110
- category === "utility" ? "bg-gradient-to-r from-green-50 to-green-100 text-green-700 border border-green-200" : "bg-gradient-to-r from-purple-50 to-purple-100 text-purple-700 border border-purple-200"
1111
- ) }, category === "utility" ? "\u{1F527} \u5B9E\u7528\u5DE5\u5177" : "\u{1F3AE} \u4F11\u95F2\u5A31\u4E50"), /* @__PURE__ */ React12__default.default.createElement("span", { className: chunkZWQJSZEY_js.cn(
1112
- "px-3 py-1.5 text-xs font-medium rounded-full shadow-sm border",
1113
- isCompleted ? "bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 border border-emerald-200" : "bg-gradient-to-r from-orange-50 to-orange-100 text-orange-700 border border-orange-200"
1114
- ) }, isCompleted ? "\u2705 \u5DF2\u5B8C\u6210" : "\u{1F6A7} \u8FDB\u884C\u4E2D"))), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-gray-600 mb-4" }, description), updatedAt && /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center gap-1 mb-3 text-xs text-gray-500" }, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u66F4\u65B0\u4E8E: ", formatDate(updatedAt)), createdAt && createdAt !== updatedAt && /* @__PURE__ */ React12__default.default.createElement("span", { className: "ml-2 text-gray-400" }, "\u521B\u5EFA\u4E8E: ", formatDate(createdAt))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, tags.map((tag) => /* @__PURE__ */ React12__default.default.createElement(
1115
- "span",
1116
- {
1117
- key: tag,
1118
- className: "px-3 py-1.5 text-xs font-medium bg-gradient-to-r from-gray-50 to-gray-100 text-gray-700 rounded-full border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200"
1119
- },
1120
- "#",
1121
- tag
1122
- ))))));
1123
- };
1124
- var ProjectCarousel = ({ projects, className }) => {
1125
- const [currentIndex, setCurrentIndex] = React12.useState(0);
1126
- const nextSlide = () => {
1127
- setCurrentIndex(
1128
- (prevIndex) => prevIndex === projects.length - 1 ? 0 : prevIndex + 1
1129
- );
1130
- };
1131
- const prevSlide = () => {
1132
- setCurrentIndex(
1133
- (prevIndex) => prevIndex === 0 ? projects.length - 1 : prevIndex - 1
1134
- );
1135
- };
1136
- return /* @__PURE__ */ React12__default.default.createElement("section", { id: "projects", className: chunkZWQJSZEY_js.cn("py-16 bg-gray-50", className) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React12__default.default.createElement("h2", { className: "text-3xl font-bold text-center mb-12 text-gray-900" }, "\u9879\u76EE\u5C55\u793A"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative max-w-4xl mx-auto" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "relative h-[400px] overflow-hidden rounded-lg shadow-xl" }, projects.map((project, index) => /* @__PURE__ */ React12__default.default.createElement(
1137
- "div",
1138
- {
1139
- key: project.id,
1140
- className: chunkZWQJSZEY_js.cn(
1141
- "absolute w-full h-full transition-all duration-500 transform",
1142
- index === currentIndex ? "translate-x-0 opacity-100" : index < currentIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0"
1143
- )
1144
- },
1145
- /* @__PURE__ */ React12__default.default.createElement(
1146
- ExperimentCard,
1147
- {
1148
- href: project.link || "#",
1149
- title: project.title,
1150
- description: project.description,
1151
- tags: project.tags,
1152
- category: "utility"
1153
- }
1154
- )
1155
- ))), /* @__PURE__ */ React12__default.default.createElement(
1156
- "button",
1157
- {
1158
- onClick: prevSlide,
1159
- className: "absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]"
1160
- },
1161
- /* @__PURE__ */ React12__default.default.createElement(
1162
- "svg",
1163
- {
1164
- className: "w-6 h-6 text-gray-600",
1165
- fill: "none",
1166
- stroke: "currentColor",
1167
- viewBox: "0 0 24 24"
1168
- },
1169
- /* @__PURE__ */ React12__default.default.createElement(
1170
- "path",
1171
- {
1172
- strokeLinecap: "round",
1173
- strokeLinejoin: "round",
1174
- strokeWidth: 2,
1175
- d: "M15 19l-7-7 7-7"
1176
- }
1177
- )
1178
- )
1179
- ), /* @__PURE__ */ React12__default.default.createElement(
1180
- "button",
1181
- {
1182
- onClick: nextSlide,
1183
- className: "absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]"
1184
- },
1185
- /* @__PURE__ */ React12__default.default.createElement(
1186
- "svg",
1187
- {
1188
- className: "w-6 h-6 text-gray-600",
1189
- fill: "none",
1190
- stroke: "currentColor",
1191
- viewBox: "0 0 24 24"
1192
- },
1193
- /* @__PURE__ */ React12__default.default.createElement(
1194
- "path",
1195
- {
1196
- strokeLinecap: "round",
1197
- strokeLinejoin: "round",
1198
- strokeWidth: 2,
1199
- d: "M9 5l7 7-7 7"
1200
- }
1201
- )
1202
- )
1203
- ), /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2 z-[10]" }, projects.map((_, index) => /* @__PURE__ */ React12__default.default.createElement(
1204
- "button",
1205
- {
1206
- key: index,
1207
- onClick: () => setCurrentIndex(index),
1208
- className: chunkZWQJSZEY_js.cn(
1209
- "w-2 h-2 rounded-full transition-all duration-300",
1210
- index === currentIndex ? "bg-blue-500 w-4" : "bg-gray-300"
1211
- )
1212
- }
1213
- ))))));
1214
- };
1215
- var NavigationItemComponent = ({
1216
- item,
1217
- direction,
1218
- isActive,
1219
- onClick
1220
- }) => {
1221
- const handleClick = (e) => {
1222
- e.preventDefault();
1223
- onClick(item);
1224
- };
1225
- const getItemClasses = () => {
1226
- const baseClasses = `
1227
- group relative flex items-center gap-3
1228
- transition-all duration-300 ease-in-out
1229
- focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50
1230
- rounded-lg
1231
- `;
1232
- const directionClasses = direction === "vertical" ? "px-4 py-3 w-full justify-start" : "px-3 py-2 justify-center";
1233
- const stateClasses = isActive ? "bg-blue-500 text-white shadow-lg" : item.isExternal ? "text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200" : "text-gray-700 hover:bg-blue-50 hover:text-blue-600";
1234
- return baseClasses + " " + directionClasses + " " + stateClasses;
1235
- };
1236
- return /* @__PURE__ */ React12__default.default.createElement(
1237
- "a",
1238
- {
1239
- href: item.href,
1240
- onClick: handleClick,
1241
- target: item.target,
1242
- rel: item.isExternal ? "noopener noreferrer" : void 0,
1243
- className: getItemClasses()
1244
- },
1245
- item.icon && /* @__PURE__ */ React12__default.default.createElement("span", { className: "flex-shrink-0" }, item.icon),
1246
- /* @__PURE__ */ React12__default.default.createElement("span", { className: clsx.clsx("font-medium", direction === "vertical" ? "text-sm" : "text-xs") }, item.label),
1247
- item.isExternal && /* @__PURE__ */ React12__default.default.createElement(
1248
- "svg",
1249
- {
1250
- className: "w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity",
1251
- fill: "none",
1252
- stroke: "currentColor",
1253
- viewBox: "0 0 24 24"
1254
- },
1255
- /* @__PURE__ */ React12__default.default.createElement(
1256
- "path",
1257
- {
1258
- strokeLinecap: "round",
1259
- strokeLinejoin: "round",
1260
- strokeWidth: 2,
1261
- d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
1262
- }
1263
- )
1264
- ),
1265
- direction === "vertical" && isActive && /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full" })
1266
- );
1267
- };
1268
- var NavigationItem_default = NavigationItemComponent;
1269
- var Navigation = ({
1270
- config,
1271
- isOpen,
1272
- activeItemId,
1273
- onItemClick,
1274
- className = ""
1275
- }) => {
1276
- const { direction, position, items, avatar, logo } = config;
1277
- const getContainerClasses = () => {
1278
- const baseClasses = `
1279
- fixed z-[90]
1280
- bg-white/95 backdrop-blur-lg
1281
- border border-gray-200/50
1282
- shadow-2xl
1283
- transition-all duration-500 ease-in-out
1284
- `;
1285
- if (direction === "vertical") {
1286
- const verticalClasses = "h-screen w-64 flex flex-col";
1287
- const positionClasses = position === "left" ? "left-0 top-0 " + (isOpen ? "translate-x-0" : "-translate-x-full") : "right-0 top-0 " + (isOpen ? "translate-x-0" : "translate-x-full");
1288
- return baseClasses + " " + verticalClasses + " " + positionClasses;
1289
- } else {
1290
- const horizontalClasses = "w-full h-16 flex items-center";
1291
- const positionClasses = position === "top" ? "top-0 left-0 right-0 " + (isOpen ? "translate-y-0" : "-translate-y-full") : "bottom-0 left-0 right-0 " + (isOpen ? "translate-y-0" : "translate-y-full");
1292
- return baseClasses + " " + horizontalClasses + " " + positionClasses;
1293
- }
1294
- };
1295
- const getContentClasses = () => {
1296
- if (direction === "vertical") {
1297
- return "flex flex-col h-full p-4";
1298
- } else {
1299
- return "flex items-center justify-between w-full px-6";
1300
- }
1301
- };
1302
- const getItemsListClasses = () => {
1303
- if (direction === "vertical") {
1304
- return "flex flex-col gap-2 flex-1 overflow-y-auto mt-4";
1305
- } else {
1306
- return "flex items-center gap-4";
1307
- }
1308
- };
1309
- const handleItemClick = (item) => {
1310
- if (item.isExternal) {
1311
- window.open(item.href, item.target || "_blank");
1312
- } else if (item.href.startsWith("#")) {
1313
- const element = document.getElementById(item.id);
1314
- if (element) {
1315
- element.scrollIntoView({ behavior: "smooth" });
1316
- }
1317
- } else {
1318
- window.location.href = item.href;
1319
- }
1320
- onItemClick?.(item);
1321
- };
1322
- if (!isOpen) return null;
1323
- return /* @__PURE__ */ React12__default.default.createElement("nav", { className: clsx.clsx(getContainerClasses(), className) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: getContentClasses() }, logo && /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React12__default.default.createElement(
1324
- "img",
1325
- {
1326
- src: logo.src,
1327
- alt: logo.alt || "Logo",
1328
- className: "h-8 w-auto"
1329
- }
1330
- )), direction === "vertical" && /* @__PURE__ */ React12__default.default.createElement("div", { className: "h-12 flex-shrink-0" }), /* @__PURE__ */ React12__default.default.createElement("div", { className: getItemsListClasses() }, items.map((item) => /* @__PURE__ */ React12__default.default.createElement(
1331
- NavigationItem_default,
1332
- {
1333
- key: item.id,
1334
- item,
1335
- direction,
1336
- isActive: activeItemId === item.id,
1337
- onClick: handleItemClick
1338
- }
1339
- ))), avatar && direction === "vertical" && /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center mt-auto pt-4" }, /* @__PURE__ */ React12__default.default.createElement(
1340
- "img",
1341
- {
1342
- src: avatar.src,
1343
- alt: avatar.alt || "Avatar",
1344
- className: "w-10 h-10 rounded-full border-2 border-gray-200"
1345
- }
1346
- )), avatar && direction === "horizontal" && /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React12__default.default.createElement(
1347
- "img",
1348
- {
1349
- src: avatar.src,
1350
- alt: avatar.alt || "Avatar",
1351
- className: "w-8 h-8 rounded-full border-2 border-gray-200"
1352
- }
1353
- ))));
1354
- };
1355
- var Navigation_default = Navigation;
1356
- var NavigationToggle = ({
1357
- isOpen,
1358
- onClick,
1359
- position
1360
- }) => {
1361
- const getPositionClasses = () => {
1362
- switch (position) {
1363
- case "top":
1364
- return "top-4 left-4";
1365
- case "bottom":
1366
- return "bottom-4 left-4";
1367
- case "left":
1368
- return "top-4 left-4";
1369
- case "right":
1370
- return "top-4 right-4";
1371
- default:
1372
- return "top-4 left-4";
1373
- }
1374
- };
1375
- return /* @__PURE__ */ React12__default.default.createElement(
1376
- "button",
1377
- {
1378
- onClick,
1379
- className: clsx.clsx(
1380
- "fixed",
1381
- getPositionClasses(),
1382
- "z-[100] p-3 rounded-xl bg-white/90 backdrop-blur-md shadow-lg hover:shadow-xl border border-gray-200/50 transition-all duration-300 ease-in-out hover:scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50"
1383
- ),
1384
- "aria-label": isOpen ? "\u5173\u95ED\u5BFC\u822A\u680F" : "\u6253\u5F00\u5BFC\u822A\u680F"
1385
- },
1386
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React12__default.default.createElement(
1387
- "span",
1388
- {
1389
- className: clsx.clsx(
1390
- "block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out",
1391
- isOpen ? "rotate-45 translate-y-0.5" : ""
1392
- )
1393
- }
1394
- ), /* @__PURE__ */ React12__default.default.createElement(
1395
- "span",
1396
- {
1397
- className: clsx.clsx(
1398
- "block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1",
1399
- isOpen ? "opacity-0 scale-0" : "opacity-100 scale-100"
1400
- )
1401
- }
1402
- ), /* @__PURE__ */ React12__default.default.createElement(
1403
- "span",
1404
- {
1405
- className: clsx.clsx(
1406
- "block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1",
1407
- isOpen ? "-rotate-45 -translate-y-2.5" : ""
1408
- )
1409
- }
1410
- ))
1411
- );
1412
- };
1413
- var NavigationToggle_default = NavigationToggle;
1414
- var FloatingMenu = ({
1415
- trigger,
1416
- menu,
1417
- initialPosition = { x: 20, y: 20 },
1418
- defaultOpen = false,
1419
- className = "",
1420
- menuClassName = "",
1421
- triggerClassName = "",
1422
- zIndex = 1e3
1423
- }) => {
1424
- const [position, setPosition] = React12.useState(initialPosition);
1425
- const [isMenuOpen, setIsMenuOpen] = React12.useState(defaultOpen);
1426
- const [menuDirection, setMenuDirection] = React12.useState("right");
1427
- const [isDragging, setIsDragging] = React12.useState(false);
1428
- const [dragOffset, setDragOffset] = React12.useState({ x: 0, y: 0 });
1429
- const containerRef = React12.useRef(null);
1430
- const [mounted, setMounted] = React12.useState(false);
1431
- const [hasDragged, setHasDragged] = React12.useState(false);
1432
- const dragTimerRef = React12.useRef(null);
1433
- const mouseDownPosRef = React12.useRef(null);
1434
- React12.useEffect(() => {
1435
- setMounted(true);
1436
- return () => setMounted(false);
1437
- }, []);
1438
- React12.useEffect(() => {
1439
- if (!mounted || !containerRef.current) return;
1440
- const updateMenuDirection = () => {
1441
- const rect = containerRef.current?.getBoundingClientRect();
1442
- if (!rect) return;
1443
- const windowWidth = window.innerWidth;
1444
- const middlePoint = windowWidth / 2;
1445
- setMenuDirection(rect.left < middlePoint ? "right" : "left");
1446
- };
1447
- updateMenuDirection();
1448
- window.addEventListener("resize", updateMenuDirection);
1449
- window.addEventListener("scroll", updateMenuDirection);
1450
- return () => {
1451
- window.removeEventListener("resize", updateMenuDirection);
1452
- window.removeEventListener("scroll", updateMenuDirection);
1453
- };
1454
- }, [mounted]);
1455
- const handleMouseDown = (e) => {
1456
- if (!containerRef.current) return;
1457
- e.stopPropagation();
1458
- mouseDownPosRef.current = { x: e.clientX, y: e.clientY };
1459
- const rect = containerRef.current.getBoundingClientRect();
1460
- setDragOffset({
1461
- x: e.clientX - rect.left,
1462
- y: e.clientY - rect.top
1463
- });
1464
- setHasDragged(false);
1465
- setIsDragging(true);
1466
- };
1467
- React12.useEffect(() => {
1468
- if (!isDragging) return;
1469
- const handleMouseMove = (e) => {
1470
- if (mouseDownPosRef.current) {
1471
- const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);
1472
- const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);
1473
- if (dx > 3 || dy > 3) {
1474
- setHasDragged(true);
1475
- }
1476
- }
1477
- const newX = e.clientX - dragOffset.x;
1478
- const newY = e.clientY - dragOffset.y;
1479
- const windowWidth = window.innerWidth;
1480
- const windowHeight = window.innerHeight;
1481
- setPosition({
1482
- x: Math.min(Math.max(newX, 0), windowWidth - 50),
1483
- y: Math.min(Math.max(newY, 0), windowHeight - 50)
1484
- });
1485
- };
1486
- const handleMouseUp = () => {
1487
- setIsDragging(false);
1488
- mouseDownPosRef.current = null;
1489
- if (dragTimerRef.current) {
1490
- window.clearTimeout(dragTimerRef.current);
1491
- }
1492
- dragTimerRef.current = window.setTimeout(() => {
1493
- setHasDragged(false);
1494
- }, 300);
1495
- };
1496
- document.addEventListener("mousemove", handleMouseMove);
1497
- document.addEventListener("mouseup", handleMouseUp);
1498
- return () => {
1499
- document.removeEventListener("mousemove", handleMouseMove);
1500
- document.removeEventListener("mouseup", handleMouseUp);
1501
- };
1502
- }, [isDragging, dragOffset]);
1503
- React12.useEffect(() => {
1504
- return () => {
1505
- if (dragTimerRef.current) {
1506
- window.clearTimeout(dragTimerRef.current);
1507
- }
1508
- };
1509
- }, []);
1510
- const toggleMenu = (e) => {
1511
- e.stopPropagation();
1512
- if (hasDragged) {
1513
- return;
1514
- }
1515
- setIsMenuOpen(!isMenuOpen);
1516
- };
1517
- React12.useEffect(() => {
1518
- if (!isMenuOpen) return;
1519
- const handleClickOutside = (e) => {
1520
- if (containerRef.current && !containerRef.current.contains(e.target)) {
1521
- setIsMenuOpen(false);
1522
- }
1523
- };
1524
- document.addEventListener("mousedown", handleClickOutside);
1525
- return () => {
1526
- document.removeEventListener("mousedown", handleClickOutside);
1527
- };
1528
- }, [isMenuOpen]);
1529
- React12.useEffect(() => {
1530
- if (!mounted) return;
1531
- const checkBoundaries = () => {
1532
- const windowWidth = window.innerWidth;
1533
- const windowHeight = window.innerHeight;
1534
- setPosition((prev) => {
1535
- const newX = Math.min(Math.max(prev.x, 0), windowWidth - 50);
1536
- const newY = Math.min(Math.max(prev.y, 0), windowHeight - 50);
1537
- if (newX !== prev.x || newY !== prev.y) {
1538
- return { x: newX, y: newY };
1539
- }
1540
- return prev;
1541
- });
1542
- };
1543
- window.addEventListener("resize", checkBoundaries);
1544
- return () => {
1545
- window.removeEventListener("resize", checkBoundaries);
1546
- };
1547
- }, [mounted]);
1548
- if (!mounted) return null;
1549
- return reactDom.createPortal(
1550
- /* @__PURE__ */ React12__default.default.createElement(
1551
- "div",
1552
- {
1553
- ref: containerRef,
1554
- className: clsx.clsx("fixed select-none box-border", className),
1555
- style: {
1556
- left: position.x + "px",
1557
- top: position.y + "px",
1558
- zIndex
1559
- }
1560
- },
1561
- /* @__PURE__ */ React12__default.default.createElement(
1562
- "div",
1563
- {
1564
- className: clsx.clsx(
1565
- "flex items-center justify-center w-12 h-12 md:w-12 md:h-12 bg-white rounded-full shadow-md hover:shadow-lg cursor-grab active:cursor-grabbing transition-all duration-200 hover:scale-105 active:scale-95",
1566
- triggerClassName
1567
- ),
1568
- onMouseDown: handleMouseDown,
1569
- onClick: toggleMenu
1570
- },
1571
- trigger
1572
- ),
1573
- isMenuOpen && /* @__PURE__ */ React12__default.default.createElement(
1574
- "div",
1575
- {
1576
- className: clsx.clsx(
1577
- "absolute top-0 bg-white rounded-lg shadow-xl p-3 min-w-[200px] md:min-w-[200px] max-w-[300px] z-[1000] transition-all duration-200",
1578
- isMenuOpen ? "opacity-100 scale-100" : "opacity-0 scale-95",
1579
- menuDirection === "left" ? "right-[calc(100%+10px)]" : "left-[calc(100%+10px)]",
1580
- menuClassName
1581
- ),
1582
- onClick: (e) => e.stopPropagation(),
1583
- onMouseDown: (e) => e.stopPropagation(),
1584
- onMouseUp: (e) => e.stopPropagation(),
1585
- onTouchStart: (e) => e.stopPropagation(),
1586
- onTouchMove: (e) => e.stopPropagation(),
1587
- onTouchEnd: (e) => e.stopPropagation(),
1588
- onPointerDown: (e) => e.stopPropagation(),
1589
- onPointerUp: (e) => e.stopPropagation()
1590
- },
1591
- menu
1592
- )
1593
- ),
1594
- document.body
1595
- );
1596
- };
1597
- var FloatingMenu_default = FloatingMenu;
1598
- var FloatingMenuExample = () => {
1599
- const [windowWidth, setWindowWidth] = React12.useState(0);
1600
- React12.useEffect(() => {
1601
- setWindowWidth(window.innerWidth);
1602
- const handleResize = () => setWindowWidth(window.innerWidth);
1603
- window.addEventListener("resize", handleResize);
1604
- return () => window.removeEventListener("resize", handleResize);
1605
- }, []);
1606
- const menuItems = [
1607
- { id: 1, label: "\u9996\u9875", icon: "\u{1F3E0}" },
1608
- { id: 2, label: "\u8BBE\u7F6E", icon: "\u2699\uFE0F" },
1609
- { id: 3, label: "\u6D88\u606F", icon: "\u{1F4E9}" },
1610
- { id: 4, label: "\u5E2E\u52A9", icon: "\u2753" },
1611
- { id: 5, label: "\u9000\u51FA", icon: "\u{1F6AA}" }
1612
- ];
1613
- const handleMenuItemClick = (id) => {
1614
- console.log("\u70B9\u51FB\u4E86\u83DC\u5355\u9879: " + id);
1615
- };
1616
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-full h-screen bg-gray-100 relative p-8" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "max-w-2xl mx-auto bg-white rounded-2xl shadow-sm p-8 mt-12" }, /* @__PURE__ */ React12__default.default.createElement("h1", { className: "text-3xl font-bold mb-4 text-gray-900" }, "\u60AC\u6D6E\u83DC\u5355\u793A\u4F8B"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-gray-600 leading-relaxed mb-6" }, "\u8FD9\u662F\u4E00\u4E2A\u53EF\u62D6\u62FD\u7684\u60AC\u6D6E\u83DC\u5355\u7EC4\u4EF6\u793A\u4F8B\u3002\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u62D6\u52A8\u4E0B\u65B9\u7684 ", /* @__PURE__ */ React12__default.default.createElement("span", { className: "font-bold text-blue-600" }, "\u84DD\u8272\u6309\u94AE"), " \u5230\u5904\u79FB\u52A8\u3002"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-blue-50 border-l-4 border-blue-500 p-4 mb-6" }, /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-sm text-blue-700" }, /* @__PURE__ */ React12__default.default.createElement("strong", null, "\u667A\u80FD\u5B9A\u4F4D\uFF1A"), " \u83DC\u5355\u4F1A\u6839\u636E\u6309\u94AE\u5728\u5C4F\u5E55\u4E0A\u7684\u4F4D\u7F6E\u81EA\u52A8\u8C03\u6574\u5F39\u51FA\u65B9\u5411\uFF08\u5411\u5DE6\u6216\u5411\u53F3\uFF09\u3002"))), /* @__PURE__ */ React12__default.default.createElement(
1617
- FloatingMenu_default,
1618
- {
1619
- trigger: /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-12 h-12 bg-blue-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-xl" }, "\u2795")),
1620
- menu: /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-48 bg-white rounded-xl shadow-xl border border-gray-100 overflow-hidden" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "px-4 py-3 border-b border-gray-100" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-sm font-bold text-gray-900" }, "\u5FEB\u6377\u83DC\u5355")), /* @__PURE__ */ React12__default.default.createElement("ul", { className: "py-1" }, menuItems.map((item) => /* @__PURE__ */ React12__default.default.createElement(
1621
- "li",
1622
- {
1623
- key: item.id,
1624
- className: "flex items-center gap-3 px-4 py-2.5 hover:bg-blue-50 text-gray-700 hover:text-blue-600 cursor-pointer transition-colors text-sm",
1625
- onClick: () => handleMenuItemClick(item.id)
1626
- },
1627
- /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-lg" }, item.icon),
1628
- /* @__PURE__ */ React12__default.default.createElement("span", { className: "font-medium" }, item.label)
1629
- )))),
1630
- initialPosition: { x: 100, y: 100 }
1631
- }
1632
- ), windowWidth > 0 && /* @__PURE__ */ React12__default.default.createElement(
1633
- FloatingMenu_default,
1634
- {
1635
- trigger: /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-12 h-12 bg-purple-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-xl" }, "\u{1F50D}")),
1636
- menu: /* @__PURE__ */ React12__default.default.createElement("div", { className: "w-64 bg-white rounded-xl shadow-xl border border-gray-100 p-4" }, /* @__PURE__ */ React12__default.default.createElement("h3", { className: "text-sm font-bold text-gray-900 mb-3" }, "\u5FEB\u901F\u641C\u7D22"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React12__default.default.createElement(
1637
- "input",
1638
- {
1639
- type: "text",
1640
- placeholder: "\u8F93\u5165\u5173\u952E\u5B57...",
1641
- className: "w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent outline-none"
1642
- }
1643
- ), /* @__PURE__ */ React12__default.default.createElement("button", { className: "w-full bg-purple-600 text-white py-2 rounded-lg text-sm font-medium hover:bg-purple-700 transition-colors" }, "\u641C\u7D22"))),
1644
- initialPosition: { x: windowWidth - 100, y: 100 }
1645
- }
1646
- ));
1647
- };
1648
- var FloatingMenuExample_default = FloatingMenuExample;
1649
960
 
1650
961
  // src/testField/utils/index.ts
1651
962
  function filterExperiments(experiments, config) {
@@ -1830,8 +1141,8 @@ var CategoryFilter = ({
1830
1141
  showCount: true
1831
1142
  }
1832
1143
  ];
1833
- return /* @__PURE__ */ React12__default.default.createElement(
1834
- chunkSCDDMIF6_js.FilterButtonGroup,
1144
+ return /* @__PURE__ */ React3__default.default.createElement(
1145
+ chunk4XXIBWCO_js.FilterButtonGroup,
1835
1146
  {
1836
1147
  label: "\u9879\u76EE\u7C7B\u522B",
1837
1148
  value: viewMode,
@@ -1882,8 +1193,8 @@ var CompletionFilterComponent = ({
1882
1193
  showCount: true
1883
1194
  }
1884
1195
  ];
1885
- return /* @__PURE__ */ React12__default.default.createElement(
1886
- chunkSCDDMIF6_js.FilterButtonGroup,
1196
+ return /* @__PURE__ */ React3__default.default.createElement(
1197
+ chunk4XXIBWCO_js.FilterButtonGroup,
1887
1198
  {
1888
1199
  label: "\u5B8C\u6210\u72B6\u6001",
1889
1200
  value: completionFilter,
@@ -1894,11 +1205,11 @@ var CompletionFilterComponent = ({
1894
1205
  );
1895
1206
  };
1896
1207
  var PageHeader = ({ counts, className }) => {
1897
- return /* @__PURE__ */ React12__default.default.createElement("div", { className }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React12__default.default.createElement(chunkSCDDMIF6_js.BackButton, null)), /* @__PURE__ */ React12__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React12__default.default.createElement("h1", { className: "text-3xl font-bold text-gray-900" }, "\u5B9E\u9A8C\u7530"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-2 text-sm text-gray-600" }, "\u5728\u8FD9\u91CC\uFF0C\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u5404\u79CD\u5B9E\u9A8C\u6027\u7684\u529F\u80FD\u548C\u9879\u76EE"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-4 flex flex-wrap gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React12__default.default.createElement("span", null, "\u603B\u8BA1: ", counts.all, " \u4E2A\u9879\u76EE"), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u5B9E\u7528\u5DE5\u5177: ", counts.utility, " \u4E2A"), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u4F11\u95F2\u5A31\u4E50: ", counts.leisure, " \u4E2A"), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u5DF2\u5B8C\u6210: ", counts.completed, " \u4E2A"))));
1208
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React3__default.default.createElement(chunk4XXIBWCO_js.BackButton, null)), /* @__PURE__ */ React3__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React3__default.default.createElement("h1", { className: "text-3xl font-bold text-gray-900" }, "\u5B9E\u9A8C\u7530"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "mt-2 text-sm text-gray-600" }, "\u5728\u8FD9\u91CC\uFF0C\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u5404\u79CD\u5B9E\u9A8C\u6027\u7684\u529F\u80FD\u548C\u9879\u76EE"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-4 flex flex-wrap gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React3__default.default.createElement("span", null, "\u603B\u8BA1: ", counts.all, " \u4E2A\u9879\u76EE"), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u5B9E\u7528\u5DE5\u5177: ", counts.utility, " \u4E2A"), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u4F11\u95F2\u5A31\u4E50: ", counts.leisure, " \u4E2A"), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u5DF2\u5B8C\u6210: ", counts.completed, " \u4E2A"))));
1898
1209
  };
1899
1210
  function defaultExperimentRenderer(item) {
1900
- return /* @__PURE__ */ React12__default.default.createElement(
1901
- ExperimentCard,
1211
+ return /* @__PURE__ */ React3__default.default.createElement(
1212
+ chunk35CXIK5Y_js.ExperimentCard,
1902
1213
  {
1903
1214
  href: item.path,
1904
1215
  title: item.title,
@@ -1919,8 +1230,8 @@ function ExperimentGrid({
1919
1230
  className = ""
1920
1231
  }) {
1921
1232
  const itemRenderer = renderItem || ((item) => defaultExperimentRenderer(item));
1922
- return /* @__PURE__ */ React12__default.default.createElement(
1923
- chunkSCDDMIF6_js.Grid,
1233
+ return /* @__PURE__ */ React3__default.default.createElement(
1234
+ chunk4XXIBWCO_js.Grid,
1924
1235
  {
1925
1236
  items,
1926
1237
  renderItem: itemRenderer,
@@ -1934,10 +1245,10 @@ function ExperimentItemGrid({
1934
1245
  experiments,
1935
1246
  ...props
1936
1247
  }) {
1937
- return /* @__PURE__ */ React12__default.default.createElement(ExperimentGrid, { items: experiments, ...props });
1248
+ return /* @__PURE__ */ React3__default.default.createElement(ExperimentGrid, { items: experiments, ...props });
1938
1249
  }
1939
1250
  var EmptyState = ({ searchQuery, onClearSearch, className }) => {
1940
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("text-center py-12", className) }, /* @__PURE__ */ React12__default.default.createElement(
1251
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("text-center py-12", className) }, /* @__PURE__ */ React3__default.default.createElement(
1941
1252
  "svg",
1942
1253
  {
1943
1254
  className: "mx-auto h-12 w-12 text-gray-400",
@@ -1945,7 +1256,7 @@ var EmptyState = ({ searchQuery, onClearSearch, className }) => {
1945
1256
  stroke: "currentColor",
1946
1257
  viewBox: "0 0 24 24"
1947
1258
  },
1948
- /* @__PURE__ */ React12__default.default.createElement(
1259
+ /* @__PURE__ */ React3__default.default.createElement(
1949
1260
  "path",
1950
1261
  {
1951
1262
  strokeLinecap: "round",
@@ -1954,7 +1265,7 @@ var EmptyState = ({ searchQuery, onClearSearch, className }) => {
1954
1265
  d: "M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.47.904-6.06 2.384"
1955
1266
  }
1956
1267
  )
1957
- ), /* @__PURE__ */ React12__default.default.createElement("h3", { className: "mt-2 text-sm font-medium text-gray-900" }, "\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u5B9E\u9A8C\u9879\u76EE"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, searchQuery ? "\u5C1D\u8BD5\u8C03\u6574\u641C\u7D22\u5173\u952E\u8BCD\u6216\u7B5B\u9009\u6761\u4EF6" : "\u5F53\u524D\u5206\u7C7B\u4E0B\u6682\u65E0\u5B9E\u9A8C\u9879\u76EE"), searchQuery && /* @__PURE__ */ React12__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React12__default.default.createElement(
1268
+ ), /* @__PURE__ */ React3__default.default.createElement("h3", { className: "mt-2 text-sm font-medium text-gray-900" }, "\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u5B9E\u9A8C\u9879\u76EE"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, searchQuery ? "\u5C1D\u8BD5\u8C03\u6574\u641C\u7D22\u5173\u952E\u8BCD\u6216\u7B5B\u9009\u6761\u4EF6" : "\u5F53\u524D\u5206\u7C7B\u4E0B\u6682\u65E0\u5B9E\u9A8C\u9879\u76EE"), searchQuery && /* @__PURE__ */ React3__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React3__default.default.createElement(
1958
1269
  "button",
1959
1270
  {
1960
1271
  onClick: onClearSearch,
@@ -1976,7 +1287,7 @@ var SortControl = ({
1976
1287
  { value: "category", label: "\u7C7B\u522B" },
1977
1288
  { value: "completion", label: "\u5B8C\u6210\u72B6\u6001" }
1978
1289
  ];
1979
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-2 sm:gap-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "text-sm font-medium text-gray-700" }, "\u6392\u5E8F\u65B9\u5F0F\uFF1A"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, sortOptions.map((option) => /* @__PURE__ */ React12__default.default.createElement(
1290
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-2 sm:gap-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "text-sm font-medium text-gray-700" }, "\u6392\u5E8F\u65B9\u5F0F\uFF1A"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, sortOptions.map((option) => /* @__PURE__ */ React3__default.default.createElement(
1980
1291
  "button",
1981
1292
  {
1982
1293
  key: option.value,
@@ -1984,30 +1295,30 @@ var SortControl = ({
1984
1295
  onClick: () => onSortByChange(option.value)
1985
1296
  },
1986
1297
  option.label
1987
- ))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "ml-auto flex items-center" }, /* @__PURE__ */ React12__default.default.createElement(
1298
+ ))), /* @__PURE__ */ React3__default.default.createElement("div", { className: "ml-auto flex items-center" }, /* @__PURE__ */ React3__default.default.createElement(
1988
1299
  "button",
1989
1300
  {
1990
1301
  className: "flex items-center gap-1 px-3 py-1.5 text-sm rounded-full bg-gray-100 hover:bg-gray-200",
1991
1302
  onClick: () => onSortOrderChange(sortOrder === "asc" ? "desc" : "asc")
1992
1303
  },
1993
- sortOrder === "asc" ? /* @__PURE__ */ React12__default.default.createElement(React12__default.default.Fragment, null, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12" })), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u5347\u5E8F")) : /* @__PURE__ */ React12__default.default.createElement(React12__default.default.Fragment, null, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4" })), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u964D\u5E8F"))
1304
+ sortOrder === "asc" ? /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12" })), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u5347\u5E8F")) : /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4" })), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u964D\u5E8F"))
1994
1305
  )));
1995
1306
  };
1996
1307
  var SortModeToggle = ({ sortMode, onSortModeChange }) => {
1997
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-3 bg-white p-4 rounded-lg shadow-sm border border-gray-100" }, /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-sm font-medium text-gray-700" }, "\u6392\u5E8F\u6A21\u5F0F\uFF1A"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex w-full sm:w-auto p-1 bg-gray-100 rounded-lg" }, /* @__PURE__ */ React12__default.default.createElement(
1308
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-3 bg-white p-4 rounded-lg shadow-sm border border-gray-100" }, /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-sm font-medium text-gray-700" }, "\u6392\u5E8F\u6A21\u5F0F\uFF1A"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex w-full sm:w-auto p-1 bg-gray-100 rounded-lg" }, /* @__PURE__ */ React3__default.default.createElement(
1998
1309
  "button",
1999
1310
  {
2000
1311
  className: clsx.clsx("flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors", sortMode === "auto" ? "bg-white text-blue-700 font-medium shadow-sm" : "text-gray-600 hover:bg-gray-200"),
2001
1312
  onClick: () => onSortModeChange("auto")
2002
1313
  },
2003
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center sm:justify-start space-x-1" }, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4" })), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u81EA\u52A8\u6392\u5E8F"))
2004
- ), /* @__PURE__ */ React12__default.default.createElement(
1314
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center justify-center sm:justify-start space-x-1" }, /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4" })), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u81EA\u52A8\u6392\u5E8F"))
1315
+ ), /* @__PURE__ */ React3__default.default.createElement(
2005
1316
  "button",
2006
1317
  {
2007
1318
  className: clsx.clsx("flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors", sortMode === "manual" ? "bg-white text-blue-700 font-medium shadow-sm" : "text-gray-600 hover:bg-gray-200"),
2008
1319
  onClick: () => onSortModeChange("manual")
2009
1320
  },
2010
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center sm:justify-start space-x-1" }, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 11.5V14m0-2.5v-6a1.5 1.5 0 113 0m-3 6a1.5 1.5 0 00-3 0v2a7.5 7.5 0 0015 0v-5a1.5 1.5 0 013 0m-6-3V11m0-5.5v-1a1.5 1.5 0 013 0v1m0 0V11m0-5.5a1.5 1.5 0 013 0v3m0 0V11" })), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u624B\u52A8\u6392\u5E8F"))
1321
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center justify-center sm:justify-start space-x-1" }, /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 11.5V14m0-2.5v-6a1.5 1.5 0 113 0m-3 6a1.5 1.5 0 00-3 0v2a7.5 7.5 0 0015 0v-5a1.5 1.5 0 013 0m-6-3V11m0-5.5v-1a1.5 1.5 0 013 0v1m0 0V11m0-5.5a1.5 1.5 0 013 0v3m0 0V11" })), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u624B\u52A8\u6392\u5E8F"))
2011
1322
  )));
2012
1323
  };
2013
1324
  var SortableExperimentItem = ({
@@ -2032,14 +1343,14 @@ var SortableExperimentItem = ({
2032
1343
  opacity: isDragging ? 0.8 : 1,
2033
1344
  position: "relative"
2034
1345
  };
2035
- return /* @__PURE__ */ React12__default.default.createElement(
1346
+ return /* @__PURE__ */ React3__default.default.createElement(
2036
1347
  "div",
2037
1348
  {
2038
1349
  ref: setNodeRef,
2039
1350
  style,
2040
1351
  className: "relative group"
2041
1352
  },
2042
- /* @__PURE__ */ React12__default.default.createElement(
1353
+ /* @__PURE__ */ React3__default.default.createElement(
2043
1354
  "div",
2044
1355
  {
2045
1356
  ...attributes,
@@ -2048,10 +1359,10 @@ var SortableExperimentItem = ({
2048
1359
  onClick: (e) => e.stopPropagation(),
2049
1360
  "aria-label": "\u62D6\u52A8\u6392\u5E8F"
2050
1361
  },
2051
- /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5 text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 8h16M4 16h16" })),
2052
- /* @__PURE__ */ React12__default.default.createElement("span", { className: "absolute top-full mt-1 left-1/2 transform -translate-x-1/2 text-xs bg-gray-800 text-white px-2 py-1 rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity" }, "\u62D6\u52A8\u6392\u5E8F")
1362
+ /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5 text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 8h16M4 16h16" })),
1363
+ /* @__PURE__ */ React3__default.default.createElement("span", { className: "absolute top-full mt-1 left-1/2 transform -translate-x-1/2 text-xs bg-gray-800 text-white px-2 py-1 rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity" }, "\u62D6\u52A8\u6392\u5E8F")
2053
1364
  ),
2054
- /* @__PURE__ */ React12__default.default.createElement("div", { className: "absolute right-2 top-2 flex flex-col gap-2 sm:hidden z-[10]" }, /* @__PURE__ */ React12__default.default.createElement(
1365
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: "absolute right-2 top-2 flex flex-col gap-2 sm:hidden z-[10]" }, /* @__PURE__ */ React3__default.default.createElement(
2055
1366
  "button",
2056
1367
  {
2057
1368
  onClick: (e) => {
@@ -2062,8 +1373,8 @@ var SortableExperimentItem = ({
2062
1373
  className: clsx.clsx("w-8 h-8 rounded-full flex items-center justify-center shadow-md", isFirst ? "bg-gray-200 cursor-not-allowed" : "bg-white/80 hover:bg-white active:bg-gray-100"),
2063
1374
  "aria-label": "\u5411\u4E0A\u79FB\u52A8"
2064
1375
  },
2065
- /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: clsx.clsx("h-5 w-5", isFirst ? "text-gray-400" : "text-gray-500"), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }))
2066
- ), /* @__PURE__ */ React12__default.default.createElement(
1376
+ /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: clsx.clsx("h-5 w-5", isFirst ? "text-gray-400" : "text-gray-500"), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }))
1377
+ ), /* @__PURE__ */ React3__default.default.createElement(
2067
1378
  "button",
2068
1379
  {
2069
1380
  onClick: (e) => {
@@ -2074,10 +1385,10 @@ var SortableExperimentItem = ({
2074
1385
  className: clsx.clsx("w-8 h-8 rounded-full flex items-center justify-center shadow-md", isLast ? "bg-gray-200 cursor-not-allowed" : "bg-white/80 hover:bg-white active:bg-gray-100"),
2075
1386
  "aria-label": "\u5411\u4E0B\u79FB\u52A8"
2076
1387
  },
2077
- /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: clsx.clsx("h-5 w-5", isLast ? "text-gray-400" : "text-gray-500"), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))
1388
+ /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: clsx.clsx("h-5 w-5", isLast ? "text-gray-400" : "text-gray-500"), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))
2078
1389
  )),
2079
- /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("transition-all", isDragging ? "scale-105 shadow-xl" : "") }, /* @__PURE__ */ React12__default.default.createElement(
2080
- ExperimentCard,
1390
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("transition-all", isDragging ? "scale-105 shadow-xl" : "") }, /* @__PURE__ */ React3__default.default.createElement(
1391
+ chunk35CXIK5Y_js.ExperimentCard,
2081
1392
  {
2082
1393
  href: item.path,
2083
1394
  title: item.title,
@@ -2098,8 +1409,8 @@ var DraggableExperimentGrid = ({
2098
1409
  onOrderChange,
2099
1410
  className = ""
2100
1411
  }) => {
2101
- const [items, setItems] = React12.useState(initialItems);
2102
- const [isDragging, setIsDragging] = React12.useState(false);
1412
+ const [items, setItems] = React3.useState(initialItems);
1413
+ const [isDragging, setIsDragging] = React3.useState(false);
2103
1414
  const sensors = core.useSensors(
2104
1415
  core.useSensor(core.PointerSensor, {
2105
1416
  activationConstraint: {
@@ -2155,10 +1466,10 @@ var DraggableExperimentGrid = ({
2155
1466
  });
2156
1467
  }
2157
1468
  };
2158
- React12__default.default.useEffect(() => {
1469
+ React3__default.default.useEffect(() => {
2159
1470
  setItems(initialItems);
2160
1471
  }, [initialItems]);
2161
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("relative", className) }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "mb-4 px-4 py-3 bg-blue-50 text-blue-700 rounded-lg border border-blue-200 text-sm" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-start sm:items-center" }, /* @__PURE__ */ React12__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5 mr-2 flex-shrink-0 mt-0.5 sm:mt-0", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React12__default.default.createElement("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" })), /* @__PURE__ */ React12__default.default.createElement("div", null, /* @__PURE__ */ React12__default.default.createElement("p", { className: "mb-1" }, "\u62D6\u62FD\u5361\u7247\u53EF\u4EE5\u81EA\u5B9A\u4E49\u6392\u5E8F\u3002\u70B9\u51FB\u5361\u7247\u53EF\u4EE5\u8BBF\u95EE\u5BF9\u5E94\u7684\u5B9E\u9A8C\u9879\u76EE\u3002"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xs text-blue-600 sm:hidden" }, "\u70B9\u51FB\u5361\u7247\u53F3\u4E0A\u89D2\u7684\u4E0A\u4E0B\u7BAD\u5934\u6309\u94AE\u8C03\u6574\u987A\u5E8F"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-xs text-blue-600 hidden sm:block" }, "\u957F\u6309\u5361\u7247\u53F3\u4E0A\u89D2\u7684\u62D6\u52A8\u56FE\u6807\u8FDB\u884C\u6392\u5E8F")))), /* @__PURE__ */ React12__default.default.createElement(
1472
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("relative", className) }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "mb-4 px-4 py-3 bg-blue-50 text-blue-700 rounded-lg border border-blue-200 text-sm" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-start sm:items-center" }, /* @__PURE__ */ React3__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5 mr-2 flex-shrink-0 mt-0.5 sm:mt-0", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React3__default.default.createElement("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" })), /* @__PURE__ */ React3__default.default.createElement("div", null, /* @__PURE__ */ React3__default.default.createElement("p", { className: "mb-1" }, "\u62D6\u62FD\u5361\u7247\u53EF\u4EE5\u81EA\u5B9A\u4E49\u6392\u5E8F\u3002\u70B9\u51FB\u5361\u7247\u53EF\u4EE5\u8BBF\u95EE\u5BF9\u5E94\u7684\u5B9E\u9A8C\u9879\u76EE\u3002"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-xs text-blue-600 sm:hidden" }, "\u70B9\u51FB\u5361\u7247\u53F3\u4E0A\u89D2\u7684\u4E0A\u4E0B\u7BAD\u5934\u6309\u94AE\u8C03\u6574\u987A\u5E8F"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-xs text-blue-600 hidden sm:block" }, "\u957F\u6309\u5361\u7247\u53F3\u4E0A\u89D2\u7684\u62D6\u52A8\u56FE\u6807\u8FDB\u884C\u6392\u5E8F")))), /* @__PURE__ */ React3__default.default.createElement(
2162
1473
  core.DndContext,
2163
1474
  {
2164
1475
  sensors,
@@ -2166,13 +1477,13 @@ var DraggableExperimentGrid = ({
2166
1477
  onDragStart: handleDragStart,
2167
1478
  onDragEnd: handleDragEnd
2168
1479
  },
2169
- /* @__PURE__ */ React12__default.default.createElement(
1480
+ /* @__PURE__ */ React3__default.default.createElement(
2170
1481
  sortable.SortableContext,
2171
1482
  {
2172
1483
  items: items.map((item) => item.id),
2173
1484
  strategy: sortable.rectSortingStrategy
2174
1485
  },
2175
- /* @__PURE__ */ React12__default.default.createElement("div", { className: clsx.clsx("grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6", isDragging ? "cursor-grabbing" : "") }, items.map((item, index) => /* @__PURE__ */ React12__default.default.createElement(
1486
+ /* @__PURE__ */ React3__default.default.createElement("div", { className: clsx.clsx("grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6", isDragging ? "cursor-grabbing" : "") }, items.map((item, index) => /* @__PURE__ */ React3__default.default.createElement(
2176
1487
  SortableExperimentItem,
2177
1488
  {
2178
1489
  key: item.id,
@@ -2199,7 +1510,7 @@ var PermissionGuard = ({
2199
1510
  return true;
2200
1511
  };
2201
1512
  if (!hasPermission()) {
2202
- return fallback || /* @__PURE__ */ React12__default.default.createElement("div", { className: "min-h-screen bg-gray-50 flex items-center justify-center" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "max-w-md w-full bg-white rounded-lg shadow-lg p-8 text-center" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.Shield, { className: "w-12 h-12 text-red-500" })), /* @__PURE__ */ React12__default.default.createElement("h2", { className: "text-xl font-semibold text-gray-900 mb-2" }, "\u9700\u8981\u767B\u5F55"), /* @__PURE__ */ React12__default.default.createElement("p", { className: "text-gray-600 mb-4" }, "\u8BF7\u5148\u767B\u5F55\u4EE5\u8BBF\u95EE\u5B9E\u9A8C\u7530\u529F\u80FD\u3002"), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-center text-sm text-gray-500 mb-4" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.AlertTriangle, { className: "w-4 h-4 mr-1" }), "\u5B9E\u9A8C\u7530\u5BF9\u6240\u6709\u6CE8\u518C\u7528\u6237\u5F00\u653E"), /* @__PURE__ */ React12__default.default.createElement(
1513
+ return fallback || /* @__PURE__ */ React3__default.default.createElement("div", { className: "min-h-screen bg-gray-50 flex items-center justify-center" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "max-w-md w-full bg-white rounded-lg shadow-lg p-8 text-center" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.Shield, { className: "w-12 h-12 text-red-500" })), /* @__PURE__ */ React3__default.default.createElement("h2", { className: "text-xl font-semibold text-gray-900 mb-2" }, "\u9700\u8981\u767B\u5F55"), /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-gray-600 mb-4" }, "\u8BF7\u5148\u767B\u5F55\u4EE5\u8BBF\u95EE\u5B9E\u9A8C\u7530\u529F\u80FD\u3002"), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center justify-center text-sm text-gray-500 mb-4" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.AlertTriangle, { className: "w-4 h-4 mr-1" }), "\u5B9E\u9A8C\u7530\u5BF9\u6240\u6709\u6CE8\u518C\u7528\u6237\u5F00\u653E"), /* @__PURE__ */ React3__default.default.createElement(
2203
1514
  "button",
2204
1515
  {
2205
1516
  onClick: () => window.history.back(),
@@ -2208,7 +1519,7 @@ var PermissionGuard = ({
2208
1519
  "\u8FD4\u56DE\u4E0A\u4E00\u9875"
2209
1520
  )));
2210
1521
  }
2211
- return /* @__PURE__ */ React12__default.default.createElement(React12__default.default.Fragment, null, children);
1522
+ return /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, children);
2212
1523
  };
2213
1524
  var UserInfoBar = ({ apiClient }) => {
2214
1525
  const { user, logout, isLoggedIn } = chunk5QMBZP7S_js.useAuth(apiClient);
@@ -2223,524 +1534,564 @@ var UserInfoBar = ({ apiClient }) => {
2223
1534
  if (!isLoggedIn || !user) {
2224
1535
  return null;
2225
1536
  }
2226
- return /* @__PURE__ */ React12__default.default.createElement("div", { className: "bg-white border-b border-gray-200 px-4 py-3" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.User, { className: "w-5 h-5 text-gray-600" }), /* @__PURE__ */ React12__default.default.createElement("span", { className: "text-sm font-medium text-gray-900" }, user.name || user.email || "\u7528\u6237"), user.role && /* @__PURE__ */ React12__default.default.createElement("span", { className: "inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800" }, user.role))), /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React12__default.default.createElement("div", { className: "flex items-center space-x-1 text-sm text-gray-500" }, /* @__PURE__ */ React12__default.default.createElement(lucideReact.FlaskConical, { className: "w-4 h-4" }), /* @__PURE__ */ React12__default.default.createElement("span", null, "\u5B9E\u9A8C\u7530")), /* @__PURE__ */ React12__default.default.createElement(
1537
+ return /* @__PURE__ */ React3__default.default.createElement("div", { className: "bg-white border-b border-gray-200 px-4 py-3" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.User, { className: "w-5 h-5 text-gray-600" }), /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-sm font-medium text-gray-900" }, user.name || user.email || "\u7528\u6237"), user.role && /* @__PURE__ */ React3__default.default.createElement("span", { className: "inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800" }, user.role))), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex items-center space-x-1 text-sm text-gray-500" }, /* @__PURE__ */ React3__default.default.createElement(lucideReact.FlaskConical, { className: "w-4 h-4" }), /* @__PURE__ */ React3__default.default.createElement("span", null, "\u5B9E\u9A8C\u7530")), /* @__PURE__ */ React3__default.default.createElement(
2227
1538
  "button",
2228
1539
  {
2229
1540
  onClick: handleLogout,
2230
1541
  className: "inline-flex items-center px-3 py-1.5 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500"
2231
1542
  },
2232
- /* @__PURE__ */ React12__default.default.createElement(lucideReact.LogOut, { className: "w-4 h-4 mr-1" }),
1543
+ /* @__PURE__ */ React3__default.default.createElement(lucideReact.LogOut, { className: "w-4 h-4 mr-1" }),
2233
1544
  "\u767B\u51FA"
2234
1545
  ))));
2235
1546
  };
2236
1547
 
1548
+ Object.defineProperty(exports, "FloatingMenu", {
1549
+ enumerable: true,
1550
+ get: function () { return chunk3M6T5KVD_js.FloatingMenu_default; }
1551
+ });
1552
+ Object.defineProperty(exports, "FloatingMenuExample", {
1553
+ enumerable: true,
1554
+ get: function () { return chunk3M6T5KVD_js.FloatingMenuExample_default; }
1555
+ });
1556
+ Object.defineProperty(exports, "Navigation", {
1557
+ enumerable: true,
1558
+ get: function () { return chunk3M6T5KVD_js.Navigation_default; }
1559
+ });
1560
+ Object.defineProperty(exports, "NavigationItem", {
1561
+ enumerable: true,
1562
+ get: function () { return chunk3M6T5KVD_js.NavigationItem_default; }
1563
+ });
1564
+ Object.defineProperty(exports, "NavigationToggle", {
1565
+ enumerable: true,
1566
+ get: function () { return chunk3M6T5KVD_js.NavigationToggle_default; }
1567
+ });
1568
+ Object.defineProperty(exports, "About", {
1569
+ enumerable: true,
1570
+ get: function () { return chunk35CXIK5Y_js.About_default; }
1571
+ });
1572
+ Object.defineProperty(exports, "Contact", {
1573
+ enumerable: true,
1574
+ get: function () { return chunk35CXIK5Y_js.Contact_default; }
1575
+ });
1576
+ Object.defineProperty(exports, "ExperimentCard", {
1577
+ enumerable: true,
1578
+ get: function () { return chunk35CXIK5Y_js.ExperimentCard; }
1579
+ });
1580
+ Object.defineProperty(exports, "Home", {
1581
+ enumerable: true,
1582
+ get: function () { return chunk35CXIK5Y_js.Home_default; }
1583
+ });
1584
+ Object.defineProperty(exports, "ProjectCarousel", {
1585
+ enumerable: true,
1586
+ get: function () { return chunk35CXIK5Y_js.ProjectCarousel; }
1587
+ });
2237
1588
  Object.defineProperty(exports, "DANMAKU_MAX_LENGTH", {
2238
1589
  enumerable: true,
2239
- get: function () { return chunk33YOJBQB_js.DANMAKU_MAX_LENGTH; }
1590
+ get: function () { return chunkJOSNXSA6_js.DANMAKU_MAX_LENGTH; }
2240
1591
  });
2241
1592
  Object.defineProperty(exports, "DANMAKU_TRACK_COUNT", {
2242
1593
  enumerable: true,
2243
- get: function () { return chunk33YOJBQB_js.DANMAKU_TRACK_COUNT; }
1594
+ get: function () { return chunkJOSNXSA6_js.DANMAKU_TRACK_COUNT; }
2244
1595
  });
2245
1596
  Object.defineProperty(exports, "DEFAULT_MAX_ACTIVE_FIREWORKS", {
2246
1597
  enumerable: true,
2247
- get: function () { return chunk33YOJBQB_js.DEFAULT_MAX_ACTIVE_FIREWORKS; }
1598
+ get: function () { return chunkJOSNXSA6_js.DEFAULT_MAX_ACTIVE_FIREWORKS; }
2248
1599
  });
2249
1600
  Object.defineProperty(exports, "DEFAULT_MAX_PARTICLES", {
2250
1601
  enumerable: true,
2251
- get: function () { return chunk33YOJBQB_js.DEFAULT_MAX_PARTICLES; }
1602
+ get: function () { return chunkJOSNXSA6_js.DEFAULT_MAX_PARTICLES; }
2252
1603
  });
2253
1604
  Object.defineProperty(exports, "DanmakuPanel", {
2254
1605
  enumerable: true,
2255
- get: function () { return chunk33YOJBQB_js.DanmakuPanel; }
1606
+ get: function () { return chunkJOSNXSA6_js.DanmakuPanel; }
2256
1607
  });
2257
1608
  Object.defineProperty(exports, "FIREWORK_KIND_LABELS", {
2258
1609
  enumerable: true,
2259
- get: function () { return chunk33YOJBQB_js.FIREWORK_KIND_LABELS; }
1610
+ get: function () { return chunkJOSNXSA6_js.FIREWORK_KIND_LABELS; }
2260
1611
  });
2261
1612
  Object.defineProperty(exports, "FireworksCanvas", {
2262
1613
  enumerable: true,
2263
- get: function () { return chunk33YOJBQB_js.FireworksCanvas; }
1614
+ get: function () { return chunkJOSNXSA6_js.FireworksCanvas; }
2264
1615
  });
2265
1616
  Object.defineProperty(exports, "FireworksControlPanel", {
2266
1617
  enumerable: true,
2267
- get: function () { return chunk33YOJBQB_js.FireworksControlPanel; }
1618
+ get: function () { return chunkJOSNXSA6_js.FireworksControlPanel; }
2268
1619
  });
2269
1620
  Object.defineProperty(exports, "MIKU_PALETTE", {
2270
1621
  enumerable: true,
2271
- get: function () { return chunk33YOJBQB_js.MIKU_PALETTE; }
1622
+ get: function () { return chunkJOSNXSA6_js.MIKU_PALETTE; }
2272
1623
  });
2273
1624
  Object.defineProperty(exports, "MikuFireworks3D", {
2274
1625
  enumerable: true,
2275
- get: function () { return chunk33YOJBQB_js.MikuFireworks3D; }
1626
+ get: function () { return chunkJOSNXSA6_js.MikuFireworks3D; }
2276
1627
  });
2277
1628
  Object.defineProperty(exports, "NORMAL_PALETTE", {
2278
1629
  enumerable: true,
2279
- get: function () { return chunk33YOJBQB_js.NORMAL_PALETTE; }
1630
+ get: function () { return chunkJOSNXSA6_js.NORMAL_PALETTE; }
2280
1631
  });
2281
1632
  Object.defineProperty(exports, "WebSocketTransport", {
2282
1633
  enumerable: true,
2283
- get: function () { return chunk33YOJBQB_js.WebSocketTransport; }
1634
+ get: function () { return chunkJOSNXSA6_js.WebSocketTransport; }
2284
1635
  });
2285
1636
  Object.defineProperty(exports, "useDanmakuController", {
2286
1637
  enumerable: true,
2287
- get: function () { return chunk33YOJBQB_js.useDanmakuController; }
1638
+ get: function () { return chunkJOSNXSA6_js.useDanmakuController; }
2288
1639
  });
2289
1640
  Object.defineProperty(exports, "useFireworksEngine", {
2290
1641
  enumerable: true,
2291
- get: function () { return chunk33YOJBQB_js.useFireworksEngine; }
1642
+ get: function () { return chunkJOSNXSA6_js.useFireworksEngine; }
2292
1643
  });
2293
1644
  Object.defineProperty(exports, "useFireworksRealtime", {
2294
1645
  enumerable: true,
2295
- get: function () { return chunk33YOJBQB_js.useFireworksRealtime; }
1646
+ get: function () { return chunkJOSNXSA6_js.useFireworksRealtime; }
2296
1647
  });
2297
1648
  Object.defineProperty(exports, "AlertDialog", {
2298
1649
  enumerable: true,
2299
- get: function () { return chunkSCDDMIF6_js.Dialog; }
1650
+ get: function () { return chunk4XXIBWCO_js.Dialog; }
2300
1651
  });
2301
1652
  Object.defineProperty(exports, "AlertDialogAction", {
2302
1653
  enumerable: true,
2303
- get: function () { return chunkSCDDMIF6_js.AlertDialogAction; }
1654
+ get: function () { return chunk4XXIBWCO_js.AlertDialogAction; }
2304
1655
  });
2305
1656
  Object.defineProperty(exports, "AlertDialogCancel", {
2306
1657
  enumerable: true,
2307
- get: function () { return chunkSCDDMIF6_js.AlertDialogCancel; }
1658
+ get: function () { return chunk4XXIBWCO_js.AlertDialogCancel; }
2308
1659
  });
2309
1660
  Object.defineProperty(exports, "AlertDialogContent", {
2310
1661
  enumerable: true,
2311
- get: function () { return chunkSCDDMIF6_js.AlertDialogContent; }
1662
+ get: function () { return chunk4XXIBWCO_js.AlertDialogContent; }
2312
1663
  });
2313
1664
  Object.defineProperty(exports, "AlertDialogDescription", {
2314
1665
  enumerable: true,
2315
- get: function () { return chunkSCDDMIF6_js.DialogDescription; }
1666
+ get: function () { return chunk4XXIBWCO_js.DialogDescription; }
2316
1667
  });
2317
1668
  Object.defineProperty(exports, "AlertDialogFooter", {
2318
1669
  enumerable: true,
2319
- get: function () { return chunkSCDDMIF6_js.DialogFooter; }
1670
+ get: function () { return chunk4XXIBWCO_js.DialogFooter; }
2320
1671
  });
2321
1672
  Object.defineProperty(exports, "AlertDialogHeader", {
2322
1673
  enumerable: true,
2323
- get: function () { return chunkSCDDMIF6_js.DialogHeader; }
1674
+ get: function () { return chunk4XXIBWCO_js.DialogHeader; }
2324
1675
  });
2325
1676
  Object.defineProperty(exports, "AlertDialogOverlay", {
2326
1677
  enumerable: true,
2327
- get: function () { return chunkSCDDMIF6_js.DialogOverlay; }
1678
+ get: function () { return chunk4XXIBWCO_js.DialogOverlay; }
2328
1679
  });
2329
1680
  Object.defineProperty(exports, "AlertDialogPortal", {
2330
1681
  enumerable: true,
2331
- get: function () { return chunkSCDDMIF6_js.DialogPortal; }
1682
+ get: function () { return chunk4XXIBWCO_js.DialogPortal; }
2332
1683
  });
2333
1684
  Object.defineProperty(exports, "AlertDialogTitle", {
2334
1685
  enumerable: true,
2335
- get: function () { return chunkSCDDMIF6_js.DialogTitle; }
1686
+ get: function () { return chunk4XXIBWCO_js.DialogTitle; }
2336
1687
  });
2337
1688
  Object.defineProperty(exports, "AlertDialogTrigger", {
2338
1689
  enumerable: true,
2339
- get: function () { return chunkSCDDMIF6_js.DialogTrigger; }
1690
+ get: function () { return chunk4XXIBWCO_js.DialogTrigger; }
2340
1691
  });
2341
1692
  Object.defineProperty(exports, "Avatar", {
2342
1693
  enumerable: true,
2343
- get: function () { return chunkSCDDMIF6_js.Avatar; }
1694
+ get: function () { return chunk4XXIBWCO_js.Avatar; }
2344
1695
  });
2345
1696
  Object.defineProperty(exports, "AvatarFallback", {
2346
1697
  enumerable: true,
2347
- get: function () { return chunkSCDDMIF6_js.AvatarFallback; }
1698
+ get: function () { return chunk4XXIBWCO_js.AvatarFallback; }
2348
1699
  });
2349
1700
  Object.defineProperty(exports, "AvatarImage", {
2350
1701
  enumerable: true,
2351
- get: function () { return chunkSCDDMIF6_js.AvatarImage; }
1702
+ get: function () { return chunk4XXIBWCO_js.AvatarImage; }
2352
1703
  });
2353
1704
  Object.defineProperty(exports, "BackButton", {
2354
1705
  enumerable: true,
2355
- get: function () { return chunkSCDDMIF6_js.BackButton; }
1706
+ get: function () { return chunk4XXIBWCO_js.BackButton; }
2356
1707
  });
2357
1708
  Object.defineProperty(exports, "Badge", {
2358
1709
  enumerable: true,
2359
- get: function () { return chunkSCDDMIF6_js.Badge; }
1710
+ get: function () { return chunk4XXIBWCO_js.Badge; }
2360
1711
  });
2361
1712
  Object.defineProperty(exports, "Button", {
2362
1713
  enumerable: true,
2363
- get: function () { return chunkSCDDMIF6_js.Button; }
1714
+ get: function () { return chunk4XXIBWCO_js.Button; }
2364
1715
  });
2365
1716
  Object.defineProperty(exports, "Card", {
2366
1717
  enumerable: true,
2367
- get: function () { return chunkSCDDMIF6_js.Card; }
1718
+ get: function () { return chunk4XXIBWCO_js.Card; }
2368
1719
  });
2369
1720
  Object.defineProperty(exports, "CardContent", {
2370
1721
  enumerable: true,
2371
- get: function () { return chunkSCDDMIF6_js.CardContent; }
1722
+ get: function () { return chunk4XXIBWCO_js.CardContent; }
2372
1723
  });
2373
1724
  Object.defineProperty(exports, "CardDescription", {
2374
1725
  enumerable: true,
2375
- get: function () { return chunkSCDDMIF6_js.CardDescription; }
1726
+ get: function () { return chunk4XXIBWCO_js.CardDescription; }
2376
1727
  });
2377
1728
  Object.defineProperty(exports, "CardFooter", {
2378
1729
  enumerable: true,
2379
- get: function () { return chunkSCDDMIF6_js.CardFooter; }
1730
+ get: function () { return chunk4XXIBWCO_js.CardFooter; }
2380
1731
  });
2381
1732
  Object.defineProperty(exports, "CardHeader", {
2382
1733
  enumerable: true,
2383
- get: function () { return chunkSCDDMIF6_js.CardHeader; }
1734
+ get: function () { return chunk4XXIBWCO_js.CardHeader; }
2384
1735
  });
2385
1736
  Object.defineProperty(exports, "CardTitle", {
2386
1737
  enumerable: true,
2387
- get: function () { return chunkSCDDMIF6_js.CardTitle; }
1738
+ get: function () { return chunk4XXIBWCO_js.CardTitle; }
2388
1739
  });
2389
1740
  Object.defineProperty(exports, "CollisionBalls", {
2390
1741
  enumerable: true,
2391
- get: function () { return chunkSCDDMIF6_js.CollisionBalls; }
1742
+ get: function () { return chunk4XXIBWCO_js.CollisionBalls; }
2392
1743
  });
2393
1744
  Object.defineProperty(exports, "ConfirmModal", {
2394
1745
  enumerable: true,
2395
- get: function () { return chunkSCDDMIF6_js.ConfirmModal; }
1746
+ get: function () { return chunk4XXIBWCO_js.ConfirmModal; }
2396
1747
  });
2397
1748
  Object.defineProperty(exports, "Dialog", {
2398
1749
  enumerable: true,
2399
- get: function () { return chunkSCDDMIF6_js.Dialog; }
1750
+ get: function () { return chunk4XXIBWCO_js.Dialog; }
2400
1751
  });
2401
1752
  Object.defineProperty(exports, "DialogClose", {
2402
1753
  enumerable: true,
2403
- get: function () { return chunkSCDDMIF6_js.DialogClose; }
1754
+ get: function () { return chunk4XXIBWCO_js.DialogClose; }
2404
1755
  });
2405
1756
  Object.defineProperty(exports, "DialogContent", {
2406
1757
  enumerable: true,
2407
- get: function () { return chunkSCDDMIF6_js.DialogContent; }
1758
+ get: function () { return chunk4XXIBWCO_js.DialogContent; }
2408
1759
  });
2409
1760
  Object.defineProperty(exports, "DialogDescription", {
2410
1761
  enumerable: true,
2411
- get: function () { return chunkSCDDMIF6_js.DialogDescription; }
1762
+ get: function () { return chunk4XXIBWCO_js.DialogDescription; }
2412
1763
  });
2413
1764
  Object.defineProperty(exports, "DialogFooter", {
2414
1765
  enumerable: true,
2415
- get: function () { return chunkSCDDMIF6_js.DialogFooter; }
1766
+ get: function () { return chunk4XXIBWCO_js.DialogFooter; }
2416
1767
  });
2417
1768
  Object.defineProperty(exports, "DialogHeader", {
2418
1769
  enumerable: true,
2419
- get: function () { return chunkSCDDMIF6_js.DialogHeader; }
1770
+ get: function () { return chunk4XXIBWCO_js.DialogHeader; }
2420
1771
  });
2421
1772
  Object.defineProperty(exports, "DialogOverlay", {
2422
1773
  enumerable: true,
2423
- get: function () { return chunkSCDDMIF6_js.DialogOverlay; }
1774
+ get: function () { return chunk4XXIBWCO_js.DialogOverlay; }
2424
1775
  });
2425
1776
  Object.defineProperty(exports, "DialogPortal", {
2426
1777
  enumerable: true,
2427
- get: function () { return chunkSCDDMIF6_js.DialogPortal; }
1778
+ get: function () { return chunk4XXIBWCO_js.DialogPortal; }
2428
1779
  });
2429
1780
  Object.defineProperty(exports, "DialogTitle", {
2430
1781
  enumerable: true,
2431
- get: function () { return chunkSCDDMIF6_js.DialogTitle; }
1782
+ get: function () { return chunk4XXIBWCO_js.DialogTitle; }
2432
1783
  });
2433
1784
  Object.defineProperty(exports, "DialogTrigger", {
2434
1785
  enumerable: true,
2435
- get: function () { return chunkSCDDMIF6_js.DialogTrigger; }
1786
+ get: function () { return chunk4XXIBWCO_js.DialogTrigger; }
2436
1787
  });
2437
1788
  Object.defineProperty(exports, "DropdownMenu", {
2438
1789
  enumerable: true,
2439
- get: function () { return chunkSCDDMIF6_js.DropdownMenu; }
1790
+ get: function () { return chunk4XXIBWCO_js.DropdownMenu; }
2440
1791
  });
2441
1792
  Object.defineProperty(exports, "DropdownMenuCheckboxItem", {
2442
1793
  enumerable: true,
2443
- get: function () { return chunkSCDDMIF6_js.DropdownMenuCheckboxItem; }
1794
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuCheckboxItem; }
2444
1795
  });
2445
1796
  Object.defineProperty(exports, "DropdownMenuContent", {
2446
1797
  enumerable: true,
2447
- get: function () { return chunkSCDDMIF6_js.DropdownMenuContent; }
1798
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuContent; }
2448
1799
  });
2449
1800
  Object.defineProperty(exports, "DropdownMenuGroup", {
2450
1801
  enumerable: true,
2451
- get: function () { return chunkSCDDMIF6_js.DropdownMenuGroup; }
1802
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuGroup; }
2452
1803
  });
2453
1804
  Object.defineProperty(exports, "DropdownMenuItem", {
2454
1805
  enumerable: true,
2455
- get: function () { return chunkSCDDMIF6_js.DropdownMenuItem; }
1806
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuItem; }
2456
1807
  });
2457
1808
  Object.defineProperty(exports, "DropdownMenuLabel", {
2458
1809
  enumerable: true,
2459
- get: function () { return chunkSCDDMIF6_js.DropdownMenuLabel; }
1810
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuLabel; }
2460
1811
  });
2461
1812
  Object.defineProperty(exports, "DropdownMenuPortal", {
2462
1813
  enumerable: true,
2463
- get: function () { return chunkSCDDMIF6_js.DropdownMenuPortal; }
1814
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuPortal; }
2464
1815
  });
2465
1816
  Object.defineProperty(exports, "DropdownMenuRadioGroup", {
2466
1817
  enumerable: true,
2467
- get: function () { return chunkSCDDMIF6_js.DropdownMenuRadioGroup; }
1818
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuRadioGroup; }
2468
1819
  });
2469
1820
  Object.defineProperty(exports, "DropdownMenuRadioItem", {
2470
1821
  enumerable: true,
2471
- get: function () { return chunkSCDDMIF6_js.DropdownMenuRadioItem; }
1822
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuRadioItem; }
2472
1823
  });
2473
1824
  Object.defineProperty(exports, "DropdownMenuSeparator", {
2474
1825
  enumerable: true,
2475
- get: function () { return chunkSCDDMIF6_js.DropdownMenuSeparator; }
1826
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuSeparator; }
2476
1827
  });
2477
1828
  Object.defineProperty(exports, "DropdownMenuShortcut", {
2478
1829
  enumerable: true,
2479
- get: function () { return chunkSCDDMIF6_js.DropdownMenuShortcut; }
1830
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuShortcut; }
2480
1831
  });
2481
1832
  Object.defineProperty(exports, "DropdownMenuSub", {
2482
1833
  enumerable: true,
2483
- get: function () { return chunkSCDDMIF6_js.DropdownMenuSub; }
1834
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuSub; }
2484
1835
  });
2485
1836
  Object.defineProperty(exports, "DropdownMenuSubContent", {
2486
1837
  enumerable: true,
2487
- get: function () { return chunkSCDDMIF6_js.DropdownMenuSubContent; }
1838
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuSubContent; }
2488
1839
  });
2489
1840
  Object.defineProperty(exports, "DropdownMenuSubTrigger", {
2490
1841
  enumerable: true,
2491
- get: function () { return chunkSCDDMIF6_js.DropdownMenuSubTrigger; }
1842
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuSubTrigger; }
2492
1843
  });
2493
1844
  Object.defineProperty(exports, "DropdownMenuTrigger", {
2494
1845
  enumerable: true,
2495
- get: function () { return chunkSCDDMIF6_js.DropdownMenuTrigger; }
1846
+ get: function () { return chunk4XXIBWCO_js.DropdownMenuTrigger; }
2496
1847
  });
2497
1848
  Object.defineProperty(exports, "FilterButtonGroup", {
2498
1849
  enumerable: true,
2499
- get: function () { return chunkSCDDMIF6_js.FilterButtonGroup; }
1850
+ get: function () { return chunk4XXIBWCO_js.FilterButtonGroup; }
2500
1851
  });
2501
1852
  Object.defineProperty(exports, "GenericOrderManager", {
2502
1853
  enumerable: true,
2503
- get: function () { return chunkSCDDMIF6_js.GenericOrderManager; }
1854
+ get: function () { return chunk4XXIBWCO_js.GenericOrderManager; }
2504
1855
  });
2505
1856
  Object.defineProperty(exports, "Grid", {
2506
1857
  enumerable: true,
2507
- get: function () { return chunkSCDDMIF6_js.Grid; }
1858
+ get: function () { return chunk4XXIBWCO_js.Grid; }
2508
1859
  });
2509
1860
  Object.defineProperty(exports, "Input", {
2510
1861
  enumerable: true,
2511
- get: function () { return chunkSCDDMIF6_js.Input; }
1862
+ get: function () { return chunk4XXIBWCO_js.Input; }
2512
1863
  });
2513
1864
  Object.defineProperty(exports, "Label", {
2514
1865
  enumerable: true,
2515
- get: function () { return chunkSCDDMIF6_js.Label; }
1866
+ get: function () { return chunk4XXIBWCO_js.Label; }
2516
1867
  });
2517
1868
  Object.defineProperty(exports, "Modal", {
2518
1869
  enumerable: true,
2519
- get: function () { return chunkSCDDMIF6_js.Modal; }
1870
+ get: function () { return chunk4XXIBWCO_js.Modal; }
2520
1871
  });
2521
1872
  Object.defineProperty(exports, "Popover", {
2522
1873
  enumerable: true,
2523
- get: function () { return chunkSCDDMIF6_js.Popover; }
1874
+ get: function () { return chunk4XXIBWCO_js.Popover; }
2524
1875
  });
2525
1876
  Object.defineProperty(exports, "PopoverAnchor", {
2526
1877
  enumerable: true,
2527
- get: function () { return chunkSCDDMIF6_js.PopoverAnchor; }
1878
+ get: function () { return chunk4XXIBWCO_js.PopoverAnchor; }
2528
1879
  });
2529
1880
  Object.defineProperty(exports, "PopoverContent", {
2530
1881
  enumerable: true,
2531
- get: function () { return chunkSCDDMIF6_js.PopoverContent; }
1882
+ get: function () { return chunk4XXIBWCO_js.PopoverContent; }
2532
1883
  });
2533
1884
  Object.defineProperty(exports, "PopoverTrigger", {
2534
1885
  enumerable: true,
2535
- get: function () { return chunkSCDDMIF6_js.PopoverTrigger; }
1886
+ get: function () { return chunk4XXIBWCO_js.PopoverTrigger; }
2536
1887
  });
2537
1888
  Object.defineProperty(exports, "Progress", {
2538
1889
  enumerable: true,
2539
- get: function () { return chunkSCDDMIF6_js.Progress; }
1890
+ get: function () { return chunk4XXIBWCO_js.Progress; }
2540
1891
  });
2541
1892
  Object.defineProperty(exports, "ScrollArea", {
2542
1893
  enumerable: true,
2543
- get: function () { return chunkSCDDMIF6_js.ScrollArea; }
1894
+ get: function () { return chunk4XXIBWCO_js.ScrollArea; }
2544
1895
  });
2545
1896
  Object.defineProperty(exports, "ScrollBar", {
2546
1897
  enumerable: true,
2547
- get: function () { return chunkSCDDMIF6_js.ScrollBar; }
1898
+ get: function () { return chunk4XXIBWCO_js.ScrollBar; }
2548
1899
  });
2549
1900
  Object.defineProperty(exports, "SearchBox", {
2550
1901
  enumerable: true,
2551
- get: function () { return chunkSCDDMIF6_js.SearchBox; }
1902
+ get: function () { return chunk4XXIBWCO_js.SearchBox; }
2552
1903
  });
2553
1904
  Object.defineProperty(exports, "SearchResultHint", {
2554
1905
  enumerable: true,
2555
- get: function () { return chunkSCDDMIF6_js.SearchResultHint; }
1906
+ get: function () { return chunk4XXIBWCO_js.SearchResultHint; }
2556
1907
  });
2557
1908
  Object.defineProperty(exports, "Select", {
2558
1909
  enumerable: true,
2559
- get: function () { return chunkSCDDMIF6_js.Select; }
1910
+ get: function () { return chunk4XXIBWCO_js.Select; }
2560
1911
  });
2561
1912
  Object.defineProperty(exports, "SelectContent", {
2562
1913
  enumerable: true,
2563
- get: function () { return chunkSCDDMIF6_js.SelectContent; }
1914
+ get: function () { return chunk4XXIBWCO_js.SelectContent; }
2564
1915
  });
2565
1916
  Object.defineProperty(exports, "SelectGroup", {
2566
1917
  enumerable: true,
2567
- get: function () { return chunkSCDDMIF6_js.SelectGroup; }
1918
+ get: function () { return chunk4XXIBWCO_js.SelectGroup; }
2568
1919
  });
2569
1920
  Object.defineProperty(exports, "SelectItem", {
2570
1921
  enumerable: true,
2571
- get: function () { return chunkSCDDMIF6_js.SelectItem; }
1922
+ get: function () { return chunk4XXIBWCO_js.SelectItem; }
2572
1923
  });
2573
1924
  Object.defineProperty(exports, "SelectLabel", {
2574
1925
  enumerable: true,
2575
- get: function () { return chunkSCDDMIF6_js.SelectLabel; }
1926
+ get: function () { return chunk4XXIBWCO_js.SelectLabel; }
2576
1927
  });
2577
1928
  Object.defineProperty(exports, "SelectScrollDownButton", {
2578
1929
  enumerable: true,
2579
- get: function () { return chunkSCDDMIF6_js.SelectScrollDownButton; }
1930
+ get: function () { return chunk4XXIBWCO_js.SelectScrollDownButton; }
2580
1931
  });
2581
1932
  Object.defineProperty(exports, "SelectScrollUpButton", {
2582
1933
  enumerable: true,
2583
- get: function () { return chunkSCDDMIF6_js.SelectScrollUpButton; }
1934
+ get: function () { return chunk4XXIBWCO_js.SelectScrollUpButton; }
2584
1935
  });
2585
1936
  Object.defineProperty(exports, "SelectSeparator", {
2586
1937
  enumerable: true,
2587
- get: function () { return chunkSCDDMIF6_js.SelectSeparator; }
1938
+ get: function () { return chunk4XXIBWCO_js.SelectSeparator; }
2588
1939
  });
2589
1940
  Object.defineProperty(exports, "SelectTrigger", {
2590
1941
  enumerable: true,
2591
- get: function () { return chunkSCDDMIF6_js.SelectTrigger; }
1942
+ get: function () { return chunk4XXIBWCO_js.SelectTrigger; }
2592
1943
  });
2593
1944
  Object.defineProperty(exports, "SelectValue", {
2594
1945
  enumerable: true,
2595
- get: function () { return chunkSCDDMIF6_js.SelectValue; }
1946
+ get: function () { return chunk4XXIBWCO_js.SelectValue; }
2596
1947
  });
2597
1948
  Object.defineProperty(exports, "Separator", {
2598
1949
  enumerable: true,
2599
- get: function () { return chunkSCDDMIF6_js.Separator; }
1950
+ get: function () { return chunk4XXIBWCO_js.Separator; }
2600
1951
  });
2601
1952
  Object.defineProperty(exports, "Sheet", {
2602
1953
  enumerable: true,
2603
- get: function () { return chunkSCDDMIF6_js.Dialog; }
1954
+ get: function () { return chunk4XXIBWCO_js.Dialog; }
2604
1955
  });
2605
1956
  Object.defineProperty(exports, "SheetClose", {
2606
1957
  enumerable: true,
2607
- get: function () { return chunkSCDDMIF6_js.DialogClose; }
1958
+ get: function () { return chunk4XXIBWCO_js.DialogClose; }
2608
1959
  });
2609
1960
  Object.defineProperty(exports, "SheetContent", {
2610
1961
  enumerable: true,
2611
- get: function () { return chunkSCDDMIF6_js.SheetContent; }
1962
+ get: function () { return chunk4XXIBWCO_js.SheetContent; }
2612
1963
  });
2613
1964
  Object.defineProperty(exports, "SheetDescription", {
2614
1965
  enumerable: true,
2615
- get: function () { return chunkSCDDMIF6_js.SheetDescription; }
1966
+ get: function () { return chunk4XXIBWCO_js.SheetDescription; }
2616
1967
  });
2617
1968
  Object.defineProperty(exports, "SheetFooter", {
2618
1969
  enumerable: true,
2619
- get: function () { return chunkSCDDMIF6_js.SheetFooter; }
1970
+ get: function () { return chunk4XXIBWCO_js.SheetFooter; }
2620
1971
  });
2621
1972
  Object.defineProperty(exports, "SheetHeader", {
2622
1973
  enumerable: true,
2623
- get: function () { return chunkSCDDMIF6_js.SheetHeader; }
1974
+ get: function () { return chunk4XXIBWCO_js.SheetHeader; }
2624
1975
  });
2625
1976
  Object.defineProperty(exports, "SheetOverlay", {
2626
1977
  enumerable: true,
2627
- get: function () { return chunkSCDDMIF6_js.DialogOverlay; }
1978
+ get: function () { return chunk4XXIBWCO_js.DialogOverlay; }
2628
1979
  });
2629
1980
  Object.defineProperty(exports, "SheetPortal", {
2630
1981
  enumerable: true,
2631
- get: function () { return chunkSCDDMIF6_js.DialogPortal; }
1982
+ get: function () { return chunk4XXIBWCO_js.DialogPortal; }
2632
1983
  });
2633
1984
  Object.defineProperty(exports, "SheetTitle", {
2634
1985
  enumerable: true,
2635
- get: function () { return chunkSCDDMIF6_js.SheetTitle; }
1986
+ get: function () { return chunk4XXIBWCO_js.SheetTitle; }
2636
1987
  });
2637
1988
  Object.defineProperty(exports, "SheetTrigger", {
2638
1989
  enumerable: true,
2639
- get: function () { return chunkSCDDMIF6_js.DialogTrigger; }
1990
+ get: function () { return chunk4XXIBWCO_js.DialogTrigger; }
2640
1991
  });
2641
1992
  Object.defineProperty(exports, "Tabs", {
2642
1993
  enumerable: true,
2643
- get: function () { return chunkSCDDMIF6_js.Tabs; }
1994
+ get: function () { return chunk4XXIBWCO_js.Tabs; }
2644
1995
  });
2645
1996
  Object.defineProperty(exports, "TabsContent", {
2646
1997
  enumerable: true,
2647
- get: function () { return chunkSCDDMIF6_js.TabsContent; }
1998
+ get: function () { return chunk4XXIBWCO_js.TabsContent; }
2648
1999
  });
2649
2000
  Object.defineProperty(exports, "TabsList", {
2650
2001
  enumerable: true,
2651
- get: function () { return chunkSCDDMIF6_js.TabsList; }
2002
+ get: function () { return chunk4XXIBWCO_js.TabsList; }
2652
2003
  });
2653
2004
  Object.defineProperty(exports, "TabsTrigger", {
2654
2005
  enumerable: true,
2655
- get: function () { return chunkSCDDMIF6_js.TabsTrigger; }
2006
+ get: function () { return chunk4XXIBWCO_js.TabsTrigger; }
2656
2007
  });
2657
2008
  Object.defineProperty(exports, "Textarea", {
2658
2009
  enumerable: true,
2659
- get: function () { return chunkSCDDMIF6_js.Textarea; }
2010
+ get: function () { return chunk4XXIBWCO_js.Textarea; }
2660
2011
  });
2661
2012
  Object.defineProperty(exports, "Timeline", {
2662
2013
  enumerable: true,
2663
- get: function () { return chunkSCDDMIF6_js.Timeline; }
2014
+ get: function () { return chunk4XXIBWCO_js.Timeline; }
2664
2015
  });
2665
2016
  Object.defineProperty(exports, "Tooltip", {
2666
2017
  enumerable: true,
2667
- get: function () { return chunkSCDDMIF6_js.Tooltip; }
2018
+ get: function () { return chunk4XXIBWCO_js.Tooltip; }
2668
2019
  });
2669
2020
  Object.defineProperty(exports, "TooltipContent", {
2670
2021
  enumerable: true,
2671
- get: function () { return chunkSCDDMIF6_js.TooltipContent; }
2022
+ get: function () { return chunk4XXIBWCO_js.TooltipContent; }
2672
2023
  });
2673
2024
  Object.defineProperty(exports, "TooltipProvider", {
2674
2025
  enumerable: true,
2675
- get: function () { return chunkSCDDMIF6_js.TooltipProvider; }
2026
+ get: function () { return chunk4XXIBWCO_js.TooltipProvider; }
2676
2027
  });
2677
2028
  Object.defineProperty(exports, "TooltipTrigger", {
2678
2029
  enumerable: true,
2679
- get: function () { return chunkSCDDMIF6_js.TooltipTrigger; }
2030
+ get: function () { return chunk4XXIBWCO_js.TooltipTrigger; }
2680
2031
  });
2681
2032
  Object.defineProperty(exports, "badgeVariants", {
2682
2033
  enumerable: true,
2683
- get: function () { return chunkSCDDMIF6_js.badgeVariants; }
2034
+ get: function () { return chunk4XXIBWCO_js.badgeVariants; }
2684
2035
  });
2685
2036
  Object.defineProperty(exports, "buttonVariants", {
2686
2037
  enumerable: true,
2687
- get: function () { return chunkSCDDMIF6_js.buttonVariants; }
2038
+ get: function () { return chunk4XXIBWCO_js.buttonVariants; }
2688
2039
  });
2689
2040
  Object.defineProperty(exports, "ImageMappingPanel", {
2690
2041
  enumerable: true,
2691
- get: function () { return chunkHHVDOIPV_js.ImageMappingPanel; }
2042
+ get: function () { return chunkMZKATHB7_js.ImageMappingPanel; }
2692
2043
  });
2693
2044
  Object.defineProperty(exports, "LocalImageMappingPanel", {
2694
2045
  enumerable: true,
2695
- get: function () { return chunkHHVDOIPV_js.LocalImageMappingPanel; }
2046
+ get: function () { return chunkMZKATHB7_js.LocalImageMappingPanel; }
2696
2047
  });
2697
2048
  Object.defineProperty(exports, "arrayUtils", {
2698
2049
  enumerable: true,
2699
- get: function () { return chunkZWQJSZEY_js.arrayUtils; }
2050
+ get: function () { return chunkDVENFCQY_js.arrayUtils; }
2700
2051
  });
2701
2052
  Object.defineProperty(exports, "cn", {
2702
2053
  enumerable: true,
2703
- get: function () { return chunkZWQJSZEY_js.cn; }
2054
+ get: function () { return chunkDVENFCQY_js.cn; }
2704
2055
  });
2705
2056
  Object.defineProperty(exports, "debugUtils", {
2706
2057
  enumerable: true,
2707
- get: function () { return chunkZWQJSZEY_js.debugUtils; }
2058
+ get: function () { return chunkDVENFCQY_js.debugUtils; }
2708
2059
  });
2709
2060
  Object.defineProperty(exports, "errorUtils", {
2710
2061
  enumerable: true,
2711
- get: function () { return chunkZWQJSZEY_js.errorUtils; }
2062
+ get: function () { return chunkDVENFCQY_js.errorUtils; }
2712
2063
  });
2713
2064
  Object.defineProperty(exports, "fileUtils", {
2714
2065
  enumerable: true,
2715
- get: function () { return chunkZWQJSZEY_js.fileUtils; }
2066
+ get: function () { return chunkDVENFCQY_js.fileUtils; }
2716
2067
  });
2717
2068
  Object.defineProperty(exports, "formatTime", {
2718
2069
  enumerable: true,
2719
- get: function () { return chunkZWQJSZEY_js.formatTime; }
2070
+ get: function () { return chunkDVENFCQY_js.formatTime; }
2720
2071
  });
2721
2072
  Object.defineProperty(exports, "japaneseUtils", {
2722
2073
  enumerable: true,
2723
- get: function () { return chunkZWQJSZEY_js.japaneseUtils; }
2074
+ get: function () { return chunkDVENFCQY_js.japaneseUtils; }
2724
2075
  });
2725
2076
  Object.defineProperty(exports, "stringUtils", {
2726
2077
  enumerable: true,
2727
- get: function () { return chunkZWQJSZEY_js.stringUtils; }
2078
+ get: function () { return chunkDVENFCQY_js.stringUtils; }
2728
2079
  });
2729
2080
  Object.defineProperty(exports, "validators", {
2730
2081
  enumerable: true,
2731
- get: function () { return chunkZWQJSZEY_js.validators; }
2082
+ get: function () { return chunkDVENFCQY_js.validators; }
2732
2083
  });
2733
2084
  Object.defineProperty(exports, "useAsyncStorage", {
2734
2085
  enumerable: true,
2735
- get: function () { return chunkL47ZOYHL_js.useAsyncStorage; }
2086
+ get: function () { return chunkEUIXQPPU_js.useAsyncStorage; }
2736
2087
  });
2737
2088
  Object.defineProperty(exports, "useElectronStorage", {
2738
2089
  enumerable: true,
2739
- get: function () { return chunkL47ZOYHL_js.useElectronStorage; }
2090
+ get: function () { return chunkEUIXQPPU_js.useElectronStorage; }
2740
2091
  });
2741
2092
  Object.defineProperty(exports, "useTaroStorage", {
2742
2093
  enumerable: true,
2743
- get: function () { return chunkL47ZOYHL_js.useTaroStorage; }
2094
+ get: function () { return chunkEUIXQPPU_js.useTaroStorage; }
2744
2095
  });
2745
2096
  Object.defineProperty(exports, "useLocalStorage", {
2746
2097
  enumerable: true,
@@ -2752,48 +2103,38 @@ Object.defineProperty(exports, "useStorage", {
2752
2103
  });
2753
2104
  Object.defineProperty(exports, "ConsoleLoggerAdapter", {
2754
2105
  enumerable: true,
2755
- get: function () { return chunk25OFOKNF_js.ConsoleLoggerAdapter; }
2106
+ get: function () { return chunkACLOJXXE_js.ConsoleLoggerAdapter; }
2756
2107
  });
2757
2108
  Object.defineProperty(exports, "LogLevel", {
2758
2109
  enumerable: true,
2759
- get: function () { return chunk25OFOKNF_js.LogLevel; }
2110
+ get: function () { return chunkACLOJXXE_js.LogLevel; }
2760
2111
  });
2761
2112
  Object.defineProperty(exports, "Logger", {
2762
2113
  enumerable: true,
2763
- get: function () { return chunk25OFOKNF_js.Logger; }
2114
+ get: function () { return chunkACLOJXXE_js.Logger; }
2764
2115
  });
2765
2116
  Object.defineProperty(exports, "createLogger", {
2766
2117
  enumerable: true,
2767
- get: function () { return chunk25OFOKNF_js.createLogger; }
2118
+ get: function () { return chunkACLOJXXE_js.createLogger; }
2768
2119
  });
2769
2120
  Object.defineProperty(exports, "logger", {
2770
2121
  enumerable: true,
2771
- get: function () { return chunk25OFOKNF_js.logger; }
2122
+ get: function () { return chunkACLOJXXE_js.logger; }
2772
2123
  });
2773
- exports.About = About_default;
2774
2124
  exports.AutoOpenModal = AutoOpenModal;
2775
2125
  exports.BackgroundRemover = BackgroundRemover;
2776
2126
  exports.CategoryFilter = CategoryFilter;
2777
2127
  exports.CompletionFilterComponent = CompletionFilterComponent;
2778
- exports.Contact = Contact_default;
2779
2128
  exports.DraggableExperimentGrid = DraggableExperimentGrid;
2780
2129
  exports.EmptyState = EmptyState;
2781
2130
  exports.EnhancedAvatar = EnhancedAvatar;
2782
- exports.ExperimentCard = ExperimentCard;
2783
2131
  exports.ExperimentGrid = ExperimentGrid;
2784
2132
  exports.ExperimentItemGrid = ExperimentItemGrid;
2785
- exports.FloatingMenu = FloatingMenu_default;
2786
- exports.FloatingMenuExample = FloatingMenuExample_default;
2787
- exports.Home = Home_default;
2788
- exports.Navigation = Navigation_default;
2789
- exports.NavigationItem = NavigationItem_default;
2790
- exports.NavigationToggle = NavigationToggle_default;
2791
2133
  exports.OCRScanner = OCRScanner;
2792
2134
  exports.PageHeader = PageHeader;
2793
2135
  exports.PermissionGuard = PermissionGuard;
2794
2136
  exports.ProfileButton = ProfileButton;
2795
2137
  exports.ProfileModal = ProfileModal;
2796
- exports.ProjectCarousel = ProjectCarousel;
2797
2138
  exports.SentimentAnalyzer = SentimentAnalyzer;
2798
2139
  exports.SmartAssistant = SmartAssistant;
2799
2140
  exports.SortControl = SortControl;