sa2kit 2.0.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/dist/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
  2. package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
  3. package/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
  4. package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
  5. package/dist/ai/llm/ui/rn/index.d.mts +2 -2
  6. package/dist/ai/llm/ui/rn/index.d.ts +2 -2
  7. package/dist/ai/llm/ui/web/index.d.mts +3 -3
  8. package/dist/ai/llm/ui/web/index.d.ts +3 -3
  9. package/dist/analytics/index.d.mts +1 -1
  10. package/dist/analytics/index.d.ts +1 -1
  11. package/dist/business/index.d.mts +1 -5
  12. package/dist/business/index.d.ts +1 -5
  13. package/dist/business/index.js +34 -1135
  14. package/dist/business/index.js.map +1 -1
  15. package/dist/business/index.mjs +5 -1105
  16. package/dist/business/index.mjs.map +1 -1
  17. package/dist/calendar/routes/index.d.mts +74 -1
  18. package/dist/calendar/routes/index.d.ts +74 -1
  19. package/dist/calendar/routes/index.js +186 -97
  20. package/dist/calendar/routes/index.js.map +1 -1
  21. package/dist/calendar/routes/index.mjs +178 -99
  22. package/dist/calendar/routes/index.mjs.map +1 -1
  23. package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
  24. package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
  25. package/dist/chunk-5FUAQLGC.mjs +14 -0
  26. package/dist/chunk-5FUAQLGC.mjs.map +1 -0
  27. package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
  28. package/dist/chunk-5GBDDXYL.mjs.map +1 -0
  29. package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
  30. package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
  31. package/dist/chunk-6YLCRWKM.mjs +8 -0
  32. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  33. package/dist/chunk-CAYOQDBR.js +78 -0
  34. package/dist/chunk-CAYOQDBR.js.map +1 -0
  35. package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
  36. package/dist/chunk-CX2GHCAI.mjs.map +1 -0
  37. package/dist/chunk-EBHPTFG6.mjs +82 -0
  38. package/dist/chunk-EBHPTFG6.mjs.map +1 -0
  39. package/dist/chunk-HQLKOXG7.js +16 -0
  40. package/dist/chunk-HQLKOXG7.js.map +1 -0
  41. package/dist/chunk-IS7O4LPI.js +146 -0
  42. package/dist/chunk-IS7O4LPI.js.map +1 -0
  43. package/dist/chunk-LGHUCQIU.js +93 -0
  44. package/dist/chunk-LGHUCQIU.js.map +1 -0
  45. package/dist/chunk-LKBIVQBT.mjs +34 -0
  46. package/dist/chunk-LKBIVQBT.mjs.map +1 -0
  47. package/dist/chunk-MIDXG6LS.js +32 -0
  48. package/dist/chunk-MIDXG6LS.js.map +1 -0
  49. package/dist/chunk-NDGHXVGS.js +25 -0
  50. package/dist/chunk-NDGHXVGS.js.map +1 -0
  51. package/dist/chunk-PA4ELVGI.js +20 -0
  52. package/dist/chunk-PA4ELVGI.js.map +1 -0
  53. package/dist/chunk-Q5VFBPMG.mjs +76 -0
  54. package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
  55. package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
  56. package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
  57. package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
  58. package/dist/chunk-S6YSGVWD.js.map +1 -0
  59. package/dist/chunk-TNJ6LYX7.mjs +18 -0
  60. package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
  61. package/dist/chunk-TTYCVBIQ.mjs +144 -0
  62. package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
  63. package/dist/chunk-VJNDOYEC.js +41 -0
  64. package/dist/chunk-VJNDOYEC.js.map +1 -0
  65. package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
  66. package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
  67. package/dist/chunk-YTGUIRRH.js +10 -0
  68. package/dist/chunk-YTGUIRRH.js.map +1 -0
  69. package/dist/chunk-ZF7DKR5A.mjs +26 -0
  70. package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
  71. package/dist/common/auth/client/index.d.mts +3209 -0
  72. package/dist/common/auth/client/index.d.ts +3209 -0
  73. package/dist/common/auth/client/index.js +13 -0
  74. package/dist/common/auth/client/index.mjs +4 -0
  75. package/dist/common/auth/components/index.d.mts +140 -0
  76. package/dist/common/auth/components/index.d.ts +140 -0
  77. package/dist/common/auth/components/index.js +899 -0
  78. package/dist/common/auth/components/index.js.map +1 -0
  79. package/dist/common/auth/components/index.mjs +875 -0
  80. package/dist/common/auth/components/index.mjs.map +1 -0
  81. package/dist/common/auth/hooks/index.d.mts +48 -0
  82. package/dist/common/auth/hooks/index.d.ts +48 -0
  83. package/dist/common/auth/hooks/index.js +19 -0
  84. package/dist/common/auth/hooks/index.mjs +6 -0
  85. package/dist/common/auth/index.d.mts +11 -7
  86. package/dist/common/auth/index.d.ts +11 -7
  87. package/dist/common/auth/index.js +7 -19
  88. package/dist/common/auth/index.mjs +3 -3
  89. package/dist/common/auth/react/index.d.mts +3056 -0
  90. package/dist/common/auth/react/index.d.ts +3056 -0
  91. package/dist/common/auth/react/index.js +31 -0
  92. package/dist/common/auth/react/index.js.map +1 -0
  93. package/dist/common/auth/react/index.mjs +21 -0
  94. package/dist/common/auth/react/index.mjs.map +1 -0
  95. package/dist/common/auth/rn/index.d.mts +3122 -0
  96. package/dist/common/auth/rn/index.d.ts +3122 -0
  97. package/dist/common/auth/rn/index.js +316 -0
  98. package/dist/common/auth/rn/index.js.map +1 -0
  99. package/dist/common/auth/rn/index.mjs +298 -0
  100. package/dist/common/auth/rn/index.mjs.map +1 -0
  101. package/dist/common/auth/schema/index.d.mts +1479 -0
  102. package/dist/common/auth/schema/index.d.ts +1479 -0
  103. package/dist/common/auth/schema/index.js +49 -0
  104. package/dist/common/auth/schema/index.mjs +4 -0
  105. package/dist/common/auth/server/index.d.mts +81 -25
  106. package/dist/common/auth/server/index.d.ts +81 -25
  107. package/dist/common/auth/server/index.js +146 -98
  108. package/dist/common/auth/server/index.js.map +1 -1
  109. package/dist/common/auth/server/index.mjs +125 -5
  110. package/dist/common/auth/server/index.mjs.map +1 -1
  111. package/dist/common/auth/services/index.d.mts +14 -0
  112. package/dist/common/auth/services/index.d.ts +14 -0
  113. package/dist/common/auth/services/index.js +20 -0
  114. package/dist/common/auth/services/index.js.map +1 -0
  115. package/dist/common/auth/services/index.mjs +13 -0
  116. package/dist/common/auth/services/index.mjs.map +1 -0
  117. package/dist/common/file/server/index.js +32 -32
  118. package/dist/common/file/server/index.mjs +3 -3
  119. package/dist/common/index.d.mts +13 -8
  120. package/dist/common/index.d.ts +13 -8
  121. package/dist/common/index.js +19 -18
  122. package/dist/common/index.mjs +8 -7
  123. package/dist/common/storage/index.js +13 -12
  124. package/dist/common/storage/index.mjs +3 -2
  125. package/dist/festivalCard/index.d.mts +3 -3
  126. package/dist/festivalCard/index.d.ts +3 -3
  127. package/dist/festivalCard/routes/index.d.mts +1 -1
  128. package/dist/festivalCard/routes/index.d.ts +1 -1
  129. package/dist/festivalCard/server/index.d.mts +2 -2
  130. package/dist/festivalCard/server/index.d.ts +2 -2
  131. package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
  132. package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
  133. package/dist/i18n/index.d.mts +1 -1
  134. package/dist/i18n/index.d.ts +1 -1
  135. package/dist/imageCrop/index.d.mts +3 -3
  136. package/dist/imageCrop/index.d.ts +3 -3
  137. package/dist/index-Bd7cKF1j.d.mts +50 -0
  138. package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.mts} +5 -5
  139. package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.ts} +5 -5
  140. package/dist/index-DRQxtCDw.d.ts +50 -0
  141. package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
  142. package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
  143. package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.mts} +8 -8
  144. package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.ts} +8 -8
  145. package/dist/index.d.mts +6382 -105
  146. package/dist/index.d.ts +6382 -105
  147. package/dist/index.js +1037 -2616
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +976 -2555
  150. package/dist/index.mjs.map +1 -1
  151. package/dist/mmd/admin/index.d.mts +1 -1
  152. package/dist/mmd/admin/index.d.ts +1 -1
  153. package/dist/mmd/index.d.mts +1 -1
  154. package/dist/mmd/index.d.ts +1 -1
  155. package/dist/mmd/server/index.d.mts +3 -3
  156. package/dist/mmd/server/index.d.ts +3 -3
  157. package/dist/ossFile/server/index.js +32 -32
  158. package/dist/ossFile/server/index.mjs +3 -3
  159. package/dist/storage/index.js +12 -11
  160. package/dist/storage/index.mjs +2 -1
  161. package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
  162. package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
  163. package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
  164. package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.mts} +1 -1
  165. package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.ts} +1 -1
  166. package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
  167. package/dist/universalExport/index.d.mts +3 -3
  168. package/dist/universalExport/index.d.ts +3 -3
  169. package/dist/universalFile/index.d.mts +5 -5
  170. package/dist/universalFile/index.d.ts +5 -5
  171. package/dist/universalFile/server/index.js +62 -62
  172. package/dist/universalFile/server/index.mjs +2 -2
  173. package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
  174. package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
  175. package/dist/vocaloidBooth/server/index.d.mts +3 -3
  176. package/dist/vocaloidBooth/server/index.d.ts +3 -3
  177. package/package.json +44 -111
  178. package/dist/auth/client/index.d.mts +0 -32
  179. package/dist/auth/client/index.d.ts +0 -32
  180. package/dist/auth/client/index.js +0 -21
  181. package/dist/auth/client/index.mjs +0 -4
  182. package/dist/auth/components/index.d.mts +0 -227
  183. package/dist/auth/components/index.d.ts +0 -227
  184. package/dist/auth/components/index.js +0 -327
  185. package/dist/auth/components/index.js.map +0 -1
  186. package/dist/auth/components/index.mjs +0 -319
  187. package/dist/auth/components/index.mjs.map +0 -1
  188. package/dist/auth/hooks/index.d.mts +0 -31
  189. package/dist/auth/hooks/index.d.ts +0 -31
  190. package/dist/auth/hooks/index.js +0 -17
  191. package/dist/auth/hooks/index.mjs +0 -4
  192. package/dist/auth/index.d.mts +0 -18
  193. package/dist/auth/index.d.ts +0 -18
  194. package/dist/auth/index.js +0 -151
  195. package/dist/auth/index.mjs +0 -10
  196. package/dist/auth/legacy/core/index.d.mts +0 -42
  197. package/dist/auth/legacy/core/index.d.ts +0 -42
  198. package/dist/auth/legacy/core/index.js +0 -242
  199. package/dist/auth/legacy/core/index.js.map +0 -1
  200. package/dist/auth/legacy/core/index.mjs +0 -226
  201. package/dist/auth/legacy/core/index.mjs.map +0 -1
  202. package/dist/auth/legacy/db/index.d.mts +0 -5
  203. package/dist/auth/legacy/db/index.d.ts +0 -5
  204. package/dist/auth/legacy/db/index.js +0 -261
  205. package/dist/auth/legacy/db/index.js.map +0 -1
  206. package/dist/auth/legacy/db/index.mjs +0 -250
  207. package/dist/auth/legacy/db/index.mjs.map +0 -1
  208. package/dist/auth/legacy/index.d.mts +0 -5
  209. package/dist/auth/legacy/index.d.ts +0 -5
  210. package/dist/auth/legacy/index.js +0 -1107
  211. package/dist/auth/legacy/index.js.map +0 -1
  212. package/dist/auth/legacy/index.mjs +0 -1086
  213. package/dist/auth/legacy/index.mjs.map +0 -1
  214. package/dist/auth/legacy/logic/index.d.mts +0 -9
  215. package/dist/auth/legacy/logic/index.d.ts +0 -9
  216. package/dist/auth/legacy/logic/index.js +0 -194
  217. package/dist/auth/legacy/logic/index.js.map +0 -1
  218. package/dist/auth/legacy/logic/index.mjs +0 -187
  219. package/dist/auth/legacy/logic/index.mjs.map +0 -1
  220. package/dist/auth/legacy/miniapp/index.d.mts +0 -5
  221. package/dist/auth/legacy/miniapp/index.d.ts +0 -5
  222. package/dist/auth/legacy/miniapp/index.js +0 -506
  223. package/dist/auth/legacy/miniapp/index.js.map +0 -1
  224. package/dist/auth/legacy/miniapp/index.mjs +0 -487
  225. package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
  226. package/dist/auth/legacy/routes/index.d.mts +0 -53
  227. package/dist/auth/legacy/routes/index.d.ts +0 -53
  228. package/dist/auth/legacy/routes/index.js +0 -278
  229. package/dist/auth/legacy/routes/index.js.map +0 -1
  230. package/dist/auth/legacy/routes/index.mjs +0 -271
  231. package/dist/auth/legacy/routes/index.mjs.map +0 -1
  232. package/dist/auth/legacy/schema/index.d.mts +0 -401
  233. package/dist/auth/legacy/schema/index.d.ts +0 -401
  234. package/dist/auth/legacy/schema/index.js +0 -50
  235. package/dist/auth/legacy/schema/index.js.map +0 -1
  236. package/dist/auth/legacy/schema/index.mjs +0 -44
  237. package/dist/auth/legacy/schema/index.mjs.map +0 -1
  238. package/dist/auth/legacy/server/index.d.mts +0 -13
  239. package/dist/auth/legacy/server/index.d.ts +0 -13
  240. package/dist/auth/legacy/server/index.js +0 -21
  241. package/dist/auth/legacy/server/index.js.map +0 -1
  242. package/dist/auth/legacy/server/index.mjs +0 -19
  243. package/dist/auth/legacy/server/index.mjs.map +0 -1
  244. package/dist/auth/legacy/services/index.d.mts +0 -40
  245. package/dist/auth/legacy/services/index.d.ts +0 -40
  246. package/dist/auth/legacy/services/index.js +0 -258
  247. package/dist/auth/legacy/services/index.js.map +0 -1
  248. package/dist/auth/legacy/services/index.mjs +0 -252
  249. package/dist/auth/legacy/services/index.mjs.map +0 -1
  250. package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
  251. package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
  252. package/dist/auth/legacy/ui/miniapp/index.js +0 -298
  253. package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
  254. package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
  255. package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
  256. package/dist/auth/legacy/ui/web/index.d.mts +0 -22
  257. package/dist/auth/legacy/ui/web/index.d.ts +0 -22
  258. package/dist/auth/legacy/ui/web/index.js +0 -899
  259. package/dist/auth/legacy/ui/web/index.js.map +0 -1
  260. package/dist/auth/legacy/ui/web/index.mjs +0 -889
  261. package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
  262. package/dist/auth/legacy/web/index.d.mts +0 -5
  263. package/dist/auth/legacy/web/index.d.ts +0 -5
  264. package/dist/auth/legacy/web/index.js +0 -1107
  265. package/dist/auth/legacy/web/index.js.map +0 -1
  266. package/dist/auth/legacy/web/index.mjs +0 -1086
  267. package/dist/auth/legacy/web/index.mjs.map +0 -1
  268. package/dist/auth/middleware/index.d.mts +0 -75
  269. package/dist/auth/middleware/index.d.ts +0 -75
  270. package/dist/auth/middleware/index.js +0 -15
  271. package/dist/auth/middleware/index.js.map +0 -1
  272. package/dist/auth/middleware/index.mjs +0 -6
  273. package/dist/auth/middleware/index.mjs.map +0 -1
  274. package/dist/auth/rn/index.d.mts +0 -64
  275. package/dist/auth/rn/index.d.ts +0 -64
  276. package/dist/auth/rn/index.js +0 -765
  277. package/dist/auth/rn/index.js.map +0 -1
  278. package/dist/auth/rn/index.mjs +0 -754
  279. package/dist/auth/rn/index.mjs.map +0 -1
  280. package/dist/auth/routes/index.d.mts +0 -261
  281. package/dist/auth/routes/index.d.ts +0 -261
  282. package/dist/auth/routes/index.js +0 -59
  283. package/dist/auth/routes/index.js.map +0 -1
  284. package/dist/auth/routes/index.mjs +0 -6
  285. package/dist/auth/routes/index.mjs.map +0 -1
  286. package/dist/auth/schema/index.d.mts +0 -789
  287. package/dist/auth/schema/index.d.ts +0 -789
  288. package/dist/auth/schema/index.js +0 -41
  289. package/dist/auth/schema/index.js.map +0 -1
  290. package/dist/auth/schema/index.mjs +0 -4
  291. package/dist/auth/schema/index.mjs.map +0 -1
  292. package/dist/auth/services/index.d.mts +0 -48
  293. package/dist/auth/services/index.d.ts +0 -48
  294. package/dist/auth/services/index.js +0 -34
  295. package/dist/auth/services/index.js.map +0 -1
  296. package/dist/auth/services/index.mjs +0 -5
  297. package/dist/auth/services/index.mjs.map +0 -1
  298. package/dist/base-api-client-ACKKt13v.d.mts +0 -277
  299. package/dist/base-api-client-ACKKt13v.d.ts +0 -277
  300. package/dist/base-api-client-B3wZZoaH.d.ts +0 -103
  301. package/dist/base-api-client-DrL35Ea2.d.mts +0 -103
  302. package/dist/chunk-37HYTHEC.mjs +0 -90
  303. package/dist/chunk-37HYTHEC.mjs.map +0 -1
  304. package/dist/chunk-5WV35FPV.js +0 -131
  305. package/dist/chunk-5WV35FPV.js.map +0 -1
  306. package/dist/chunk-DCRD5CZB.js +0 -573
  307. package/dist/chunk-DCRD5CZB.js.map +0 -1
  308. package/dist/chunk-DDX4JKFS.js +0 -19
  309. package/dist/chunk-DDX4JKFS.js.map +0 -1
  310. package/dist/chunk-DV6M7MFP.js +0 -283
  311. package/dist/chunk-DV6M7MFP.js.map +0 -1
  312. package/dist/chunk-HBF4HPRK.js +0 -186
  313. package/dist/chunk-HBF4HPRK.js.map +0 -1
  314. package/dist/chunk-HCI6JQOU.mjs +0 -183
  315. package/dist/chunk-HCI6JQOU.mjs.map +0 -1
  316. package/dist/chunk-I44HXJ3X.mjs +0 -17
  317. package/dist/chunk-I44HXJ3X.mjs.map +0 -1
  318. package/dist/chunk-IIVNHQEI.mjs.map +0 -1
  319. package/dist/chunk-IJ4YYWE3.mjs +0 -122
  320. package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
  321. package/dist/chunk-J4BEIZUC.js +0 -92
  322. package/dist/chunk-J4BEIZUC.js.map +0 -1
  323. package/dist/chunk-OKPWFVXC.js +0 -24
  324. package/dist/chunk-OKPWFVXC.js.map +0 -1
  325. package/dist/chunk-PNOTQAYK.mjs +0 -560
  326. package/dist/chunk-PNOTQAYK.mjs.map +0 -1
  327. package/dist/chunk-PTMSDNGO.mjs.map +0 -1
  328. package/dist/chunk-Q2IAL7YV.js +0 -36
  329. package/dist/chunk-Q2IAL7YV.js.map +0 -1
  330. package/dist/chunk-QQ2WFYOD.js.map +0 -1
  331. package/dist/chunk-VQ54PUQV.js +0 -216
  332. package/dist/chunk-VQ54PUQV.js.map +0 -1
  333. package/dist/chunk-W5JEGA76.mjs +0 -33
  334. package/dist/chunk-W5JEGA76.mjs.map +0 -1
  335. package/dist/chunk-YGI7UU2D.mjs +0 -212
  336. package/dist/chunk-YGI7UU2D.mjs.map +0 -1
  337. package/dist/chunk-ZCLQSI5F.mjs +0 -271
  338. package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
  339. package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
  340. package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
  341. package/dist/index-Bnh6VqFv.d.ts +0 -35
  342. package/dist/index-DNKZ7-R_.d.mts +0 -184
  343. package/dist/index-DNKZ7-R_.d.ts +0 -184
  344. package/dist/index-DPYkrKZf.d.mts +0 -35
  345. package/dist/types-C5vUWf9u.d.ts +0 -70
  346. package/dist/types-C_W_CoUD.d.ts +0 -99
  347. package/dist/types-DCRvasyH.d.mts +0 -99
  348. package/dist/types-IYCqCk2g.d.mts +0 -70
  349. /package/dist/{auth → common/auth}/client/index.js.map +0 -0
  350. /package/dist/{auth → common/auth}/client/index.mjs.map +0 -0
  351. /package/dist/{auth → common/auth}/hooks/index.js.map +0 -0
  352. /package/dist/{auth → common/auth}/hooks/index.mjs.map +0 -0
  353. /package/dist/{auth → common/auth/schema}/index.js.map +0 -0
  354. /package/dist/{auth → common/auth/schema}/index.mjs.map +0 -0
@@ -1,899 +0,0 @@
1
- 'use strict';
2
-
3
- var React5 = require('react');
4
- var reactDom = require('react-dom');
5
- var lucideReact = require('lucide-react');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var React5__default = /*#__PURE__*/_interopDefault(React5);
10
-
11
- // src/business/auth-legacy/components/AuthGuard.tsx
12
- var AuthContext = React5.createContext(void 0);
13
- function useAuth() {
14
- const context = React5.useContext(AuthContext);
15
- if (context === void 0) {
16
- throw new Error("useAuth must be used within an AuthProvider");
17
- }
18
- return context;
19
- }
20
-
21
- // src/business/auth-legacy/utils/authUtils.ts
22
- function validatePhoneNumber(phone) {
23
- return /^1[3-9]\d{9}$/.test(phone);
24
- }
25
- function validatePassword(password) {
26
- if (!password) {
27
- return { valid: false, message: "\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A" };
28
- }
29
- if (password.length < 6) {
30
- return { valid: false, message: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C116\u4F4D" };
31
- }
32
- return { valid: true };
33
- }
34
- function ForgotPasswordModal({ isOpen, onClose, onSuccess }) {
35
- const [formData, setFormData] = React5.useState({
36
- phone: "",
37
- newPassword: "",
38
- confirmPassword: "",
39
- verificationCode: ""
40
- });
41
- const [showPassword, setShowPassword] = React5.useState(false);
42
- const [showConfirmPassword, setShowConfirmPassword] = React5.useState(false);
43
- const [error, setError] = React5.useState("");
44
- const [loading, setLoading] = React5.useState(false);
45
- const [countdown, setCountdown] = React5.useState(0);
46
- const [mounted, setMounted] = React5.useState(false);
47
- React5.useEffect(() => {
48
- setMounted(true);
49
- }, []);
50
- const handleInputChange = (e) => {
51
- const { name, value } = e.target;
52
- setFormData((prev) => ({ ...prev, [name]: value }));
53
- if (error) setError("");
54
- };
55
- const validateForm = () => {
56
- if (!formData.phone || !formData.newPassword || !formData.confirmPassword || !formData.verificationCode) {
57
- setError("\u8BF7\u586B\u5199\u5B8C\u6574\u4FE1\u606F");
58
- return false;
59
- }
60
- if (!validatePhoneNumber(formData.phone)) {
61
- setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u683C\u5F0F");
62
- return false;
63
- }
64
- const passwordValidation = validatePassword(formData.newPassword);
65
- if (!passwordValidation.valid) {
66
- setError(passwordValidation.message || "\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF");
67
- return false;
68
- }
69
- if (formData.newPassword !== formData.confirmPassword) {
70
- setError("\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4");
71
- return false;
72
- }
73
- if (!/^\d{6}$/.test(formData.verificationCode)) {
74
- setError("\u8BF7\u8F93\u51656\u4F4D\u6570\u5B57\u9A8C\u8BC1\u7801");
75
- return false;
76
- }
77
- return true;
78
- };
79
- const handleSendCode = async () => {
80
- if (!formData.phone) {
81
- setError("\u8BF7\u8F93\u5165\u624B\u673A\u53F7");
82
- return;
83
- }
84
- if (!validatePhoneNumber(formData.phone)) {
85
- setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u683C\u5F0F");
86
- return;
87
- }
88
- try {
89
- setLoading(true);
90
- setError("");
91
- const response = await fetch("/api/auth/send-verification-code", {
92
- method: "POST",
93
- headers: { "Content-Type": "application/json" },
94
- body: JSON.stringify({ phone: formData.phone })
95
- });
96
- const data = await response.json();
97
- if (data.success) {
98
- setCountdown(60);
99
- const timer = setInterval(() => {
100
- setCountdown((prev) => {
101
- if (prev <= 1) {
102
- clearInterval(timer);
103
- return 0;
104
- }
105
- return prev - 1;
106
- });
107
- }, 1e3);
108
- console.log("\u2705 \u9A8C\u8BC1\u7801\u53D1\u9001\u6210\u529F");
109
- } else {
110
- setError(data.message || "\u53D1\u9001\u9A8C\u8BC1\u7801\u5931\u8D25");
111
- }
112
- } catch (error2) {
113
- console.error("\u53D1\u9001\u9A8C\u8BC1\u7801\u5F02\u5E38:", error2);
114
- setError("\u53D1\u9001\u9A8C\u8BC1\u7801\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
115
- } finally {
116
- setLoading(false);
117
- }
118
- };
119
- const handleSubmit = async (e) => {
120
- e.preventDefault();
121
- setError("");
122
- setLoading(true);
123
- try {
124
- if (!validateForm()) {
125
- return;
126
- }
127
- const response = await fetch("/api/auth/reset-password", {
128
- method: "POST",
129
- headers: { "Content-Type": "application/json" },
130
- body: JSON.stringify({
131
- phone: formData.phone,
132
- newPassword: formData.newPassword,
133
- verificationCode: formData.verificationCode
134
- })
135
- });
136
- const data = await response.json();
137
- if (data.success) {
138
- onSuccess();
139
- } else {
140
- setError(data.message || "\u91CD\u7F6E\u5BC6\u7801\u5931\u8D25");
141
- }
142
- } catch (error2) {
143
- setError("\u91CD\u7F6E\u5BC6\u7801\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
144
- } finally {
145
- setLoading(false);
146
- }
147
- };
148
- const handleOverlayClick = (e) => {
149
- if (e.target === e.currentTarget) {
150
- onClose();
151
- }
152
- };
153
- if (!isOpen || !mounted) return null;
154
- const modalContent = /* @__PURE__ */ React5__default.default.createElement(
155
- "div",
156
- {
157
- className: "fixed top-0 left-0 right-0 bottom-0 w-screen h-screen bg-black/50 backdrop-blur-sm flex items-center justify-center z-[9999] p-4",
158
- style: { margin: 0 },
159
- onClick: handleOverlayClick
160
- },
161
- /* @__PURE__ */ React5__default.default.createElement(
162
- "div",
163
- {
164
- className: "bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative",
165
- onClick: (e) => e.stopPropagation()
166
- },
167
- /* @__PURE__ */ React5__default.default.createElement(
168
- "button",
169
- {
170
- className: "absolute top-5 right-5 bg-transparent border-none text-gray-500 cursor-pointer p-2 rounded-lg transition-all hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 min-w-9 min-h-9 flex items-center justify-center",
171
- onClick: onClose
172
- },
173
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.X, { size: 20 })
174
- ),
175
- /* @__PURE__ */ React5__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u91CD\u7F6E\u5BC6\u7801"), /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u8BF7\u8F93\u5165\u624B\u673A\u53F7\u548C\u9A8C\u8BC1\u7801\u91CD\u7F6E\u5BC6\u7801")),
176
- /* @__PURE__ */ React5__default.default.createElement("form", { onSubmit: handleSubmit, className: "p-6" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Phone, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
177
- "input",
178
- {
179
- id: "phone",
180
- name: "phone",
181
- type: "tel",
182
- value: formData.phone,
183
- onChange: handleInputChange,
184
- placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
185
- className: "w-full py-3 px-4 pl-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
186
- disabled: loading
187
- }
188
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "verificationCode", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u9A8C\u8BC1\u7801"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(
189
- "input",
190
- {
191
- id: "verificationCode",
192
- name: "verificationCode",
193
- type: "text",
194
- value: formData.verificationCode,
195
- onChange: handleInputChange,
196
- placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
197
- className: "w-full py-3 px-4 pr-28 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
198
- disabled: loading,
199
- maxLength: 6
200
- }
201
- ), /* @__PURE__ */ React5__default.default.createElement(
202
- "button",
203
- {
204
- type: "button",
205
- className: "absolute right-2 top-1/2 -translate-y-1/2 bg-transparent border-none text-blue-500 text-sm font-medium cursor-pointer px-2 py-1 rounded transition-all whitespace-nowrap hover:bg-blue-50 disabled:text-gray-400 disabled:cursor-not-allowed",
206
- onClick: handleSendCode,
207
- disabled: loading || countdown > 0
208
- },
209
- countdown > 0 ? `${countdown}\u79D2\u540E\u91CD\u8BD5` : "\u53D1\u9001\u9A8C\u8BC1\u7801"
210
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "newPassword", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u65B0\u5BC6\u7801"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
211
- "input",
212
- {
213
- id: "newPassword",
214
- name: "newPassword",
215
- type: showPassword ? "text" : "password",
216
- value: formData.newPassword,
217
- onChange: handleInputChange,
218
- placeholder: "\u8BF7\u8F93\u5165\u65B0\u5BC6\u7801",
219
- className: "w-full py-3 px-4 pl-12 pr-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
220
- disabled: loading
221
- }
222
- ), /* @__PURE__ */ React5__default.default.createElement(
223
- "button",
224
- {
225
- type: "button",
226
- className: "absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",
227
- onClick: () => setShowPassword(!showPassword),
228
- disabled: loading
229
- },
230
- showPassword ? /* @__PURE__ */ React5__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React5__default.default.createElement(lucideReact.Eye, { size: 18 })
231
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "confirmPassword", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u786E\u8BA4\u5BC6\u7801"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
232
- "input",
233
- {
234
- id: "confirmPassword",
235
- name: "confirmPassword",
236
- type: showConfirmPassword ? "text" : "password",
237
- value: formData.confirmPassword,
238
- onChange: handleInputChange,
239
- placeholder: "\u8BF7\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801",
240
- className: "w-full py-3 px-4 pl-12 pr-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
241
- disabled: loading
242
- }
243
- ), /* @__PURE__ */ React5__default.default.createElement(
244
- "button",
245
- {
246
- type: "button",
247
- className: "absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",
248
- onClick: () => setShowConfirmPassword(!showConfirmPassword),
249
- disabled: loading
250
- },
251
- showConfirmPassword ? /* @__PURE__ */ React5__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React5__default.default.createElement(lucideReact.Eye, { size: 18 })
252
- ))), error && /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed" }, error), /* @__PURE__ */ React5__default.default.createElement(
253
- "button",
254
- {
255
- type: "submit",
256
- className: "w-full bg-blue-500 text-white border-none py-3.5 px-6 rounded-lg text-base font-medium cursor-pointer transition-all mt-2 min-h-[52px] hover:bg-blue-600 hover:-translate-y-0.5 hover:shadow-lg hover:shadow-blue-500/30 active:translate-y-0 disabled:bg-gray-400 disabled:cursor-not-allowed disabled:transform-none disabled:shadow-none focus:outline-none focus:ring-2 focus:ring-blue-700 focus:ring-offset-2",
257
- disabled: loading
258
- },
259
- loading ? "\u63D0\u4EA4\u4E2D..." : "\u91CD\u7F6E\u5BC6\u7801"
260
- ))
261
- )
262
- );
263
- return reactDom.createPortal(modalContent, document.body);
264
- }
265
-
266
- // src/business/auth-legacy/components/LoginModal.tsx
267
- function LoginModal({ isOpen, onClose, onSuccess, onSwitchToRegister }) {
268
- const { login } = useAuth();
269
- const [formData, setFormData] = React5.useState({
270
- phone: "",
271
- password: ""
272
- });
273
- const [showPassword, setShowPassword] = React5.useState(false);
274
- const [error, setError] = React5.useState("");
275
- const [loading, setLoading] = React5.useState(false);
276
- const [showForgotPassword, setShowForgotPassword] = React5.useState(false);
277
- const [mounted, setMounted] = React5.useState(false);
278
- React5.useEffect(() => {
279
- setMounted(true);
280
- }, []);
281
- const fillDemoAccount = (type) => {
282
- if (process.env.NODE_ENV === "development") {
283
- const accounts = {
284
- admin: { phone: "13800138000", password: "admin123456" },
285
- user: { phone: "13900139000", password: "test123456" }
286
- };
287
- setFormData(accounts[type]);
288
- setError("");
289
- }
290
- };
291
- const handleInputChange = (e) => {
292
- const { name, value } = e.target;
293
- setFormData((prev) => ({ ...prev, [name]: value }));
294
- if (error) setError("");
295
- };
296
- const handleSubmit = async (e) => {
297
- e.preventDefault();
298
- setError("");
299
- setLoading(true);
300
- console.log("\u{1F504} [LoginModal] handleSubmit \u5F00\u59CB");
301
- try {
302
- if (!formData.phone || !formData.password) {
303
- console.log("\u274C [LoginModal] \u524D\u7AEF\u9A8C\u8BC1\u5931\u8D25: \u4FE1\u606F\u4E0D\u5B8C\u6574");
304
- setError("\u8BF7\u586B\u5199\u5B8C\u6574\u4FE1\u606F");
305
- return;
306
- }
307
- if (!validatePhoneNumber(formData.phone)) {
308
- console.log("\u274C [LoginModal] \u524D\u7AEF\u9A8C\u8BC1\u5931\u8D25: \u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF");
309
- setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
310
- return;
311
- }
312
- console.log("\u2705 [LoginModal] \u524D\u7AEF\u9A8C\u8BC1\u901A\u8FC7");
313
- console.log("\u{1F511} [LoginModal] \u63D0\u4EA4\u767B\u5F55\u8868\u5355:", {
314
- phone: formData.phone,
315
- password: "***"
316
- });
317
- console.log("\u{1F4DE} [LoginModal] \u51C6\u5907\u8C03\u7528 useAuth.login()...");
318
- const result = await login(formData);
319
- console.log("\u{1F4E1} [LoginModal] useAuth.login() \u8FD4\u56DE\u7ED3\u679C:", result);
320
- if (result.success) {
321
- console.log("\u2705 [LoginModal] \u767B\u5F55\u6210\u529F\uFF0C\u51C6\u5907\u8C03\u7528 onSuccess()");
322
- console.log("\u{1F464} [LoginModal] \u767B\u5F55\u6210\u529F\u7684\u7528\u6237\u4FE1\u606F:", result.user);
323
- setTimeout(() => {
324
- console.log("\u{1F3AF} [LoginModal] \u8C03\u7528 onSuccess \u56DE\u8C03");
325
- onSuccess();
326
- console.log("\u{1F3C1} [LoginModal] onSuccess \u8C03\u7528\u5B8C\u6210");
327
- }, 100);
328
- } else {
329
- console.log("\u274C [LoginModal] \u767B\u5F55\u5931\u8D25:", result.message);
330
- setError(result.message || "\u767B\u5F55\u5931\u8D25");
331
- }
332
- } catch (error2) {
333
- console.error("\u{1F4A5} [LoginModal] \u767B\u5F55\u5F02\u5E38:", error2);
334
- setError("\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
335
- } finally {
336
- console.log("\u{1F51A} [LoginModal] handleSubmit \u7ED3\u675F\uFF0C\u8BBE\u7F6E loading = false");
337
- setLoading(false);
338
- }
339
- };
340
- const handleOverlayClick = (e) => {
341
- if (e.target === e.currentTarget) {
342
- onClose();
343
- }
344
- };
345
- if (!isOpen || !mounted) return null;
346
- const modalContent = /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement(
347
- "div",
348
- {
349
- className: "fixed top-0 left-0 right-0 bottom-0 w-screen h-screen bg-black/50 backdrop-blur-sm flex items-center justify-center z-[9999] p-4",
350
- style: { margin: 0 },
351
- onClick: handleOverlayClick
352
- },
353
- /* @__PURE__ */ React5__default.default.createElement(
354
- "div",
355
- {
356
- className: "bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative",
357
- onClick: (e) => e.stopPropagation()
358
- },
359
- /* @__PURE__ */ React5__default.default.createElement(
360
- "button",
361
- {
362
- className: "absolute top-5 right-5 bg-transparent border-none text-gray-500 cursor-pointer p-2 rounded-lg transition-all hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 min-w-9 min-h-9 flex items-center justify-center",
363
- onClick: onClose
364
- },
365
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.X, { size: 20 })
366
- ),
367
- /* @__PURE__ */ React5__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u7528\u6237\u767B\u5F55"), /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u8BF7\u8F93\u5165\u60A8\u7684\u624B\u673A\u53F7\u548C\u5BC6\u7801")),
368
- process.env.NODE_ENV === "development" && /* @__PURE__ */ React5__default.default.createElement("div", { className: "px-6 py-4 bg-amber-50 border-b border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-xs text-amber-800 font-medium mb-2" }, "\u5F00\u53D1\u73AF\u5883\u5FEB\u6377\u767B\u5F55\uFF1A"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React5__default.default.createElement(
369
- "button",
370
- {
371
- type: "button",
372
- onClick: () => fillDemoAccount("admin"),
373
- className: "px-3 py-1.5 text-xs bg-amber-400 text-amber-900 border-none rounded-md cursor-pointer transition-all font-medium hover:bg-amber-500"
374
- },
375
- "\u7BA1\u7406\u5458\u8D26\u53F7"
376
- ), /* @__PURE__ */ React5__default.default.createElement(
377
- "button",
378
- {
379
- type: "button",
380
- onClick: () => fillDemoAccount("user"),
381
- className: "px-3 py-1.5 text-xs bg-amber-400 text-amber-900 border-none rounded-md cursor-pointer transition-all font-medium hover:bg-amber-500"
382
- },
383
- "\u7528\u6237\u8D26\u53F7"
384
- ))),
385
- /* @__PURE__ */ React5__default.default.createElement("form", { onSubmit: handleSubmit, className: "p-6" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.User, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
386
- "input",
387
- {
388
- id: "phone",
389
- name: "phone",
390
- type: "tel",
391
- autoComplete: "tel",
392
- value: formData.phone,
393
- onChange: handleInputChange,
394
- placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
395
- className: "w-full py-3 px-4 pl-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
396
- disabled: loading
397
- }
398
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u5BC6\u7801"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
399
- "input",
400
- {
401
- id: "password",
402
- name: "password",
403
- type: showPassword ? "text" : "password",
404
- autoComplete: "current-password",
405
- value: formData.password,
406
- onChange: handleInputChange,
407
- placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801",
408
- className: "w-full py-3 px-4 pl-12 pr-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
409
- disabled: loading
410
- }
411
- ), /* @__PURE__ */ React5__default.default.createElement(
412
- "button",
413
- {
414
- type: "button",
415
- className: "absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",
416
- onClick: () => setShowPassword(!showPassword),
417
- disabled: loading
418
- },
419
- showPassword ? /* @__PURE__ */ React5__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React5__default.default.createElement(lucideReact.Eye, { size: 18 })
420
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-right -mt-2 mb-4" }, /* @__PURE__ */ React5__default.default.createElement(
421
- "button",
422
- {
423
- type: "button",
424
- onClick: () => setShowForgotPassword(true),
425
- className: "bg-transparent border-none text-blue-500 cursor-pointer text-sm font-medium underline px-1 py-0.5 rounded transition-all hover:text-blue-600 hover:bg-blue-50 hover:no-underline focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
426
- },
427
- "\u5FD8\u8BB0\u5BC6\u7801\uFF1F"
428
- )), error && /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed" }, error), /* @__PURE__ */ React5__default.default.createElement(
429
- "button",
430
- {
431
- type: "submit",
432
- className: "w-full bg-blue-500 text-white border-none py-3.5 px-6 rounded-lg text-base font-medium cursor-pointer transition-all mt-2 min-h-[52px] hover:bg-blue-600 hover:-translate-y-0.5 hover:shadow-lg hover:shadow-blue-500/30 active:translate-y-0 disabled:bg-gray-400 disabled:cursor-not-allowed disabled:transform-none disabled:shadow-none focus:outline-none focus:ring-2 focus:ring-blue-700 focus:ring-offset-2",
433
- disabled: loading
434
- },
435
- loading ? "\u767B\u5F55\u4E2D..." : "\u767B\u5F55"
436
- ), onSwitchToRegister && /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-center mt-5 pt-4 border-t border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("span", { className: "text-gray-500 text-sm mr-1" }, "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF1F"), /* @__PURE__ */ React5__default.default.createElement(
437
- "button",
438
- {
439
- type: "button",
440
- onClick: onSwitchToRegister,
441
- className: "bg-transparent border-none text-blue-500 cursor-pointer text-sm font-medium underline px-1 py-0.5 rounded transition-all hover:text-blue-600 hover:bg-blue-50 hover:no-underline focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
442
- },
443
- "\u7ACB\u5373\u6CE8\u518C"
444
- )))
445
- )
446
- ), /* @__PURE__ */ React5__default.default.createElement(
447
- ForgotPasswordModal,
448
- {
449
- isOpen: showForgotPassword,
450
- onClose: () => setShowForgotPassword(false),
451
- onSuccess: () => {
452
- setShowForgotPassword(false);
453
- onSuccess();
454
- }
455
- }
456
- ));
457
- return reactDom.createPortal(modalContent, document.body);
458
- }
459
-
460
- // src/business/auth-legacy/components/AuthGuard.tsx
461
- function AuthGuard({
462
- children,
463
- fallback,
464
- requireAuth = true
465
- }) {
466
- const { isAuthenticated, loading, refreshUser } = useAuth();
467
- const [showLoginModal, setShowLoginModal] = React5.useState(false);
468
- React5.useEffect(() => {
469
- if (!loading && requireAuth && !isAuthenticated) {
470
- setShowLoginModal(true);
471
- }
472
- }, [loading, requireAuth, isAuthenticated]);
473
- const handleLoginSuccess = () => {
474
- refreshUser();
475
- setShowLoginModal(false);
476
- };
477
- if (loading) {
478
- return /* @__PURE__ */ React5__default.default.createElement("div", { style: {
479
- display: "flex",
480
- alignItems: "center",
481
- justifyContent: "center",
482
- minHeight: "200px",
483
- color: "#6b7280",
484
- flexDirection: "column",
485
- gap: "12px"
486
- } }, /* @__PURE__ */ React5__default.default.createElement("div", { style: {
487
- width: "32px",
488
- height: "32px",
489
- border: "3px solid #e5e7eb",
490
- borderTop: "3px solid #3b82f6",
491
- borderRadius: "50%",
492
- animation: "spin 1s linear infinite"
493
- } }), /* @__PURE__ */ React5__default.default.createElement("div", null, "\u9A8C\u8BC1\u767B\u5F55\u72B6\u6001..."));
494
- }
495
- if (requireAuth && !isAuthenticated) {
496
- return /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, fallback || /* @__PURE__ */ React5__default.default.createElement("div", { style: {
497
- display: "flex",
498
- alignItems: "center",
499
- justifyContent: "center",
500
- minHeight: "200px",
501
- color: "#6b7280",
502
- flexDirection: "column",
503
- gap: "16px",
504
- padding: "24px",
505
- textAlign: "center"
506
- } }, /* @__PURE__ */ React5__default.default.createElement("div", { style: {
507
- fontSize: "48px",
508
- opacity: 0.5
509
- } }, "\u{1F512}"), /* @__PURE__ */ React5__default.default.createElement("div", { style: {
510
- fontSize: "18px",
511
- fontWeight: "500"
512
- } }, "\u8BF7\u5148\u767B\u5F55\u4EE5\u8BBF\u95EE\u6B64\u9875\u9762"), /* @__PURE__ */ React5__default.default.createElement("div", { style: {
513
- fontSize: "14px",
514
- opacity: 0.7
515
- } }, "\u767B\u5F55\u540E\u5373\u53EF\u67E5\u770B\u76F8\u5173\u5185\u5BB9")), /* @__PURE__ */ React5__default.default.createElement(
516
- LoginModal,
517
- {
518
- isOpen: showLoginModal,
519
- onClose: () => setShowLoginModal(false),
520
- onSuccess: handleLoginSuccess
521
- }
522
- ));
523
- }
524
- return /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, children);
525
- }
526
- function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }) {
527
- const { register } = useAuth();
528
- const [formData, setFormData] = React5.useState({
529
- phone: "",
530
- password: "",
531
- confirmPassword: "",
532
- name: ""
533
- });
534
- const [showPassword, setShowPassword] = React5.useState(false);
535
- const [showConfirmPassword, setShowConfirmPassword] = React5.useState(false);
536
- const [error, setError] = React5.useState("");
537
- const [loading, setLoading] = React5.useState(false);
538
- const [mounted, setMounted] = React5.useState(false);
539
- React5.useEffect(() => {
540
- setMounted(true);
541
- }, []);
542
- const handleInputChange = (e) => {
543
- const { name, value } = e.target;
544
- setFormData((prev) => ({ ...prev, [name]: value }));
545
- if (error) setError("");
546
- };
547
- const validateForm = () => {
548
- if (!formData.phone || !formData.password || !formData.confirmPassword) {
549
- setError("\u8BF7\u586B\u5199\u5FC5\u8981\u4FE1\u606F");
550
- return false;
551
- }
552
- if (!validatePhoneNumber(formData.phone)) {
553
- setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u683C\u5F0F");
554
- return false;
555
- }
556
- const passwordValidation = validatePassword(formData.password);
557
- if (!passwordValidation.valid) {
558
- setError(passwordValidation.message || "\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF");
559
- return false;
560
- }
561
- if (formData.password !== formData.confirmPassword) {
562
- setError("\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4");
563
- return false;
564
- }
565
- return true;
566
- };
567
- const handleSubmit = async (e) => {
568
- e.preventDefault();
569
- setError("");
570
- setLoading(true);
571
- try {
572
- if (!validateForm()) {
573
- return;
574
- }
575
- console.log("\u{1F4DD} [RegisterModal] \u63D0\u4EA4\u6CE8\u518C\u8868\u5355:", {
576
- phone: formData.phone,
577
- name: formData.name || "\u672A\u8BBE\u7F6E",
578
- password: "***"
579
- });
580
- const result = await register({
581
- phone: formData.phone,
582
- password: formData.password,
583
- name: formData.name || void 0
584
- });
585
- if (result.success) {
586
- console.log("\u2705 [RegisterModal] \u6CE8\u518C\u6210\u529F");
587
- onSuccess();
588
- } else {
589
- console.log("\u274C [RegisterModal] \u6CE8\u518C\u5931\u8D25:", result.message);
590
- setError(result.message || "\u6CE8\u518C\u5931\u8D25");
591
- }
592
- } catch (error2) {
593
- console.error("\u{1F4A5} [RegisterModal] \u6CE8\u518C\u5F02\u5E38:", error2);
594
- setError("\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
595
- } finally {
596
- setLoading(false);
597
- }
598
- };
599
- const handleOverlayClick = (e) => {
600
- if (e.target === e.currentTarget) {
601
- onClose();
602
- }
603
- };
604
- if (!isOpen || !mounted) return null;
605
- const modalContent = /* @__PURE__ */ React5__default.default.createElement(
606
- "div",
607
- {
608
- className: "fixed top-0 left-0 right-0 bottom-0 w-screen h-screen bg-black/50 backdrop-blur-sm flex items-center justify-center z-[9999] p-4",
609
- style: { margin: 0 },
610
- onClick: handleOverlayClick
611
- },
612
- /* @__PURE__ */ React5__default.default.createElement(
613
- "div",
614
- {
615
- className: "bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative",
616
- onClick: (e) => e.stopPropagation()
617
- },
618
- /* @__PURE__ */ React5__default.default.createElement(
619
- "button",
620
- {
621
- className: "absolute top-5 right-5 bg-transparent border-none text-gray-500 cursor-pointer p-2 rounded-lg transition-all hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 min-w-9 min-h-9 flex items-center justify-center",
622
- onClick: onClose
623
- },
624
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.X, { size: 20 })
625
- ),
626
- /* @__PURE__ */ React5__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u7528\u6237\u6CE8\u518C"), /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u8BF7\u586B\u5199\u4EE5\u4E0B\u4FE1\u606F\u521B\u5EFA\u8D26\u6237")),
627
- /* @__PURE__ */ React5__default.default.createElement("form", { onSubmit: handleSubmit, className: "p-6" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7 *"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Phone, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
628
- "input",
629
- {
630
- id: "phone",
631
- name: "phone",
632
- type: "tel",
633
- autoComplete: "tel",
634
- value: formData.phone,
635
- onChange: handleInputChange,
636
- placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
637
- className: "w-full py-3 px-4 pl-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
638
- disabled: loading
639
- }
640
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "name", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u59D3\u540D"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.User, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
641
- "input",
642
- {
643
- id: "name",
644
- name: "name",
645
- type: "text",
646
- autoComplete: "name",
647
- value: formData.name,
648
- onChange: handleInputChange,
649
- placeholder: "\u8BF7\u8F93\u5165\u59D3\u540D\uFF08\u53EF\u9009\uFF09",
650
- className: "w-full py-3 px-4 pl-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
651
- disabled: loading
652
- }
653
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u5BC6\u7801 *"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
654
- "input",
655
- {
656
- id: "password",
657
- name: "password",
658
- type: showPassword ? "text" : "password",
659
- autoComplete: "new-password",
660
- value: formData.password,
661
- onChange: handleInputChange,
662
- placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801\uFF08\u81F3\u5C116\u4F4D\uFF09",
663
- className: "w-full py-3 px-4 pl-12 pr-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
664
- disabled: loading
665
- }
666
- ), /* @__PURE__ */ React5__default.default.createElement(
667
- "button",
668
- {
669
- type: "button",
670
- className: "absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",
671
- onClick: () => setShowPassword(!showPassword),
672
- disabled: loading
673
- },
674
- showPassword ? /* @__PURE__ */ React5__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React5__default.default.createElement(lucideReact.Eye, { size: 18 })
675
- ))), /* @__PURE__ */ React5__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React5__default.default.createElement("label", { htmlFor: "confirmPassword", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u786E\u8BA4\u5BC6\u7801 *"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React5__default.default.createElement(
676
- "input",
677
- {
678
- id: "confirmPassword",
679
- name: "confirmPassword",
680
- type: showConfirmPassword ? "text" : "password",
681
- autoComplete: "new-password",
682
- value: formData.confirmPassword,
683
- onChange: handleInputChange,
684
- placeholder: "\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801",
685
- className: "w-full py-3 px-4 pl-12 pr-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed",
686
- disabled: loading
687
- }
688
- ), /* @__PURE__ */ React5__default.default.createElement(
689
- "button",
690
- {
691
- type: "button",
692
- className: "absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",
693
- onClick: () => setShowConfirmPassword(!showConfirmPassword),
694
- disabled: loading
695
- },
696
- showConfirmPassword ? /* @__PURE__ */ React5__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React5__default.default.createElement(lucideReact.Eye, { size: 18 })
697
- ))), error && /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed" }, error), /* @__PURE__ */ React5__default.default.createElement(
698
- "button",
699
- {
700
- type: "submit",
701
- className: "w-full bg-blue-500 text-white border-none py-3.5 px-6 rounded-lg text-base font-medium cursor-pointer transition-all mt-2 min-h-[52px] hover:bg-blue-600 hover:-translate-y-0.5 hover:shadow-lg hover:shadow-blue-500/30 active:translate-y-0 disabled:bg-gray-400 disabled:cursor-not-allowed disabled:transform-none disabled:shadow-none focus:outline-none focus:ring-2 focus:ring-blue-700 focus:ring-offset-2",
702
- disabled: loading
703
- },
704
- loading ? "\u6CE8\u518C\u4E2D..." : "\u6CE8\u518C"
705
- ), onSwitchToLogin && /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-center mt-5 pt-4 border-t border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("span", { className: "text-gray-500 text-sm mr-1" }, "\u5DF2\u6709\u8D26\u53F7\uFF1F"), /* @__PURE__ */ React5__default.default.createElement(
706
- "button",
707
- {
708
- type: "button",
709
- onClick: onSwitchToLogin,
710
- className: "bg-transparent border-none text-blue-500 cursor-pointer text-sm font-medium underline px-1 py-0.5 rounded transition-all hover:text-blue-600 hover:bg-blue-50 hover:no-underline focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
711
- },
712
- "\u7ACB\u5373\u767B\u5F55"
713
- )))
714
- )
715
- );
716
- return reactDom.createPortal(modalContent, document.body);
717
- }
718
-
719
- // src/business/auth-legacy/components/UserMenu.tsx
720
- function UserMenu({ customMenuItems = [], className }) {
721
- const { user, isAuthenticated, logout } = useAuth();
722
- const [isOpen, setIsOpen] = React5.useState(false);
723
- const [showLoginModal, setShowLoginModal] = React5.useState(false);
724
- const [showRegisterModal, setShowRegisterModal] = React5.useState(false);
725
- const toggleMenu = () => {
726
- setIsOpen(!isOpen);
727
- };
728
- const handleMenuClick = (e) => {
729
- e.stopPropagation();
730
- };
731
- const handleCustomMenuClick = (item) => {
732
- console.log(`\u{1F527} [UserMenu] \u81EA\u5B9A\u4E49\u83DC\u5355\u9879\u88AB\u70B9\u51FB: ${item.label}`);
733
- item.onClick();
734
- setIsOpen(false);
735
- };
736
- const handleLogin = () => {
737
- console.log("\u{1F511} [UserMenu] \u767B\u5F55\u6309\u94AE\u88AB\u70B9\u51FB");
738
- setShowLoginModal(true);
739
- setIsOpen(false);
740
- };
741
- const handleRegister = () => {
742
- console.log("\u{1F4DD} [UserMenu] \u6CE8\u518C\u6309\u94AE\u88AB\u70B9\u51FB");
743
- setShowRegisterModal(true);
744
- setIsOpen(false);
745
- };
746
- const handleLogout = async () => {
747
- console.log("\u{1F6AA} [UserMenu] \u9000\u51FA\u767B\u5F55\u6309\u94AE\u88AB\u70B9\u51FB");
748
- try {
749
- await logout();
750
- console.log("\u2705 [UserMenu] \u9000\u51FA\u767B\u5F55\u6210\u529F");
751
- } catch (error) {
752
- console.error("\u9000\u51FA\u767B\u5F55\u5931\u8D25:", error);
753
- }
754
- setIsOpen(false);
755
- };
756
- const handleAuthSuccess = () => {
757
- console.log("\u{1F389} [UserMenu] \u8BA4\u8BC1\u6210\u529F\u56DE\u8C03\u88AB\u8C03\u7528");
758
- console.log("\u{1F464} [UserMenu] \u5F53\u524DuseAuth\u72B6\u6001:", {
759
- user: user ? `${user.name || "\u672A\u8BBE\u7F6E"} (${user.phone})` : null,
760
- isAuthenticated
761
- });
762
- setShowLoginModal(false);
763
- setShowRegisterModal(false);
764
- console.log("\u2705 [UserMenu] \u8BA4\u8BC1\u6210\u529F\u5904\u7406\u5B8C\u6210 - \u6A21\u6001\u6846\u5DF2\u5173\u95ED");
765
- setTimeout(() => {
766
- console.log("\u{1F50D} [UserMenu] \u5EF6\u8FDF\u72B6\u6001\u68C0\u67E5:", {
767
- user: user ? `${user.name || "\u672A\u8BBE\u7F6E"} (${user.phone})` : null,
768
- isAuthenticated
769
- });
770
- }, 500);
771
- };
772
- const handleSwitchToRegister = () => {
773
- console.log("\u{1F504} [UserMenu] \u4ECE\u767B\u5F55\u5207\u6362\u5230\u6CE8\u518C");
774
- setShowLoginModal(false);
775
- setShowRegisterModal(true);
776
- };
777
- const handleSwitchToLogin = () => {
778
- console.log("\u{1F504} [UserMenu] \u4ECE\u6CE8\u518C\u5207\u6362\u5230\u767B\u5F55");
779
- setShowRegisterModal(false);
780
- setShowLoginModal(true);
781
- };
782
- const getVisibleCustomMenuItems = () => {
783
- return customMenuItems.filter((item) => {
784
- if (item.requireAuth === true) {
785
- return isAuthenticated;
786
- }
787
- if (item.requireAuth === false) {
788
- return !isAuthenticated;
789
- }
790
- return true;
791
- });
792
- };
793
- React5__default.default.useEffect(() => {
794
- const handleGlobalClick = () => {
795
- setIsOpen(false);
796
- };
797
- if (isOpen) {
798
- document.addEventListener("click", handleGlobalClick);
799
- }
800
- return () => {
801
- document.removeEventListener("click", handleGlobalClick);
802
- };
803
- }, [isOpen]);
804
- const visibleCustomMenuItems = getVisibleCustomMenuItems();
805
- return /* @__PURE__ */ React5__default.default.createElement("div", { className: `relative inline-block ${className || ""}` }, /* @__PURE__ */ React5__default.default.createElement(
806
- "button",
807
- {
808
- className: "flex items-center gap-2 px-3 py-2 bg-slate-50 text-slate-500 border border-slate-200 rounded-lg cursor-pointer transition-all min-w-11 min-h-11 text-sm font-medium hover:bg-slate-200 hover:text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-500/10",
809
- onClick: toggleMenu
810
- },
811
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.User, { size: 24 }),
812
- isAuthenticated && user && /* @__PURE__ */ React5__default.default.createElement("span", { className: "max-w-[120px] overflow-hidden text-ellipsis whitespace-nowrap" }, user.name || user.phone)
813
- ), isOpen && /* @__PURE__ */ React5__default.default.createElement(
814
- "div",
815
- {
816
- className: "absolute top-[calc(100%+0.5rem)] right-0 z-[1000] min-w-[200px] bg-white border border-slate-200 rounded-xl shadow-lg max-h-[90vh] overflow-y-auto p-2 animate-in slide-in-from-top-2 fade-in duration-200",
817
- onClick: handleMenuClick
818
- },
819
- isAuthenticated && user ? (
820
- // 已登录状态的菜单
821
- /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement("div", { className: "p-3 mb-2 bg-slate-50 rounded-lg" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-sm font-semibold text-slate-800 mb-1 overflow-hidden text-ellipsis whitespace-nowrap" }, user.name || "\u672A\u8BBE\u7F6E\u540D\u79F0"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-xs text-slate-500 mb-1 overflow-hidden text-ellipsis whitespace-nowrap" }, user.phone), /* @__PURE__ */ React5__default.default.createElement("div", { className: "text-xs text-blue-500 font-medium" }, user.role === "admin" ? "\u7BA1\u7406\u5458" : "\u666E\u901A\u7528\u6237")), visibleCustomMenuItems.length > 0 && /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), visibleCustomMenuItems.map((item) => {
822
- const IconComponent = item.icon;
823
- return /* @__PURE__ */ React5__default.default.createElement(
824
- "button",
825
- {
826
- key: item.id,
827
- className: "flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800 focus:outline-none focus:bg-slate-100 focus:ring-2 focus:ring-blue-500/10",
828
- onClick: () => handleCustomMenuClick(item)
829
- },
830
- IconComponent && /* @__PURE__ */ React5__default.default.createElement(IconComponent, { size: 16 }),
831
- /* @__PURE__ */ React5__default.default.createElement("span", null, item.label)
832
- );
833
- })), /* @__PURE__ */ React5__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), /* @__PURE__ */ React5__default.default.createElement(
834
- "button",
835
- {
836
- className: "flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-red-50 hover:text-red-600 focus:outline-none focus:bg-red-50 focus:text-red-600 focus:ring-2 focus:ring-red-500/10",
837
- onClick: handleLogout
838
- },
839
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.LogOut, { size: 16 }),
840
- /* @__PURE__ */ React5__default.default.createElement("span", null, "\u9000\u51FA\u767B\u5F55")
841
- ))
842
- ) : (
843
- // 未登录状态的菜单
844
- /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement(
845
- "button",
846
- {
847
- className: "flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800 focus:outline-none focus:bg-slate-100 focus:ring-2 focus:ring-blue-500/10",
848
- onClick: handleLogin
849
- },
850
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.LogIn, { size: 16 }),
851
- /* @__PURE__ */ React5__default.default.createElement("span", null, "\u767B\u5F55")
852
- ), /* @__PURE__ */ React5__default.default.createElement(
853
- "button",
854
- {
855
- className: "flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800 focus:outline-none focus:bg-slate-100 focus:ring-2 focus:ring-blue-500/10",
856
- onClick: handleRegister
857
- },
858
- /* @__PURE__ */ React5__default.default.createElement(lucideReact.User, { size: 16 }),
859
- /* @__PURE__ */ React5__default.default.createElement("span", null, "\u6CE8\u518C")
860
- ), visibleCustomMenuItems.length > 0 && /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), visibleCustomMenuItems.map((item) => {
861
- const IconComponent = item.icon;
862
- return /* @__PURE__ */ React5__default.default.createElement(
863
- "button",
864
- {
865
- key: item.id,
866
- className: "flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800 focus:outline-none focus:bg-slate-100 focus:ring-2 focus:ring-blue-500/10",
867
- onClick: () => handleCustomMenuClick(item)
868
- },
869
- IconComponent && /* @__PURE__ */ React5__default.default.createElement(IconComponent, { size: 16 }),
870
- /* @__PURE__ */ React5__default.default.createElement("span", null, item.label)
871
- );
872
- })))
873
- )
874
- ), /* @__PURE__ */ React5__default.default.createElement(
875
- LoginModal,
876
- {
877
- isOpen: showLoginModal,
878
- onClose: () => setShowLoginModal(false),
879
- onSuccess: handleAuthSuccess,
880
- onSwitchToRegister: handleSwitchToRegister
881
- }
882
- ), /* @__PURE__ */ React5__default.default.createElement(
883
- RegisterModal,
884
- {
885
- isOpen: showRegisterModal,
886
- onClose: () => setShowRegisterModal(false),
887
- onSuccess: handleAuthSuccess,
888
- onSwitchToLogin: handleSwitchToLogin
889
- }
890
- ));
891
- }
892
-
893
- exports.AuthGuard = AuthGuard;
894
- exports.ForgotPasswordModal = ForgotPasswordModal;
895
- exports.LoginModal = LoginModal;
896
- exports.RegisterModal = RegisterModal;
897
- exports.UserMenu = UserMenu;
898
- //# sourceMappingURL=index.js.map
899
- //# sourceMappingURL=index.js.map