sa2kit 3.0.0 → 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 (198) hide show
  1. package/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
  2. package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
  3. package/dist/ai/llm/ui/rn/index.d.mts +2 -2
  4. package/dist/ai/llm/ui/rn/index.d.ts +2 -2
  5. package/dist/ai/llm/ui/web/index.d.mts +3 -3
  6. package/dist/ai/llm/ui/web/index.d.ts +3 -3
  7. package/dist/analytics/index.d.mts +1 -1
  8. package/dist/analytics/index.d.ts +1 -1
  9. package/dist/{chunk-QP5N3ER6.js → chunk-3CSCIRQY.js} +5 -6
  10. package/dist/chunk-3CSCIRQY.js.map +1 -0
  11. package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
  12. package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
  13. package/dist/chunk-5FUAQLGC.mjs +14 -0
  14. package/dist/chunk-5FUAQLGC.mjs.map +1 -0
  15. package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
  16. package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
  17. package/dist/chunk-6YLCRWKM.mjs +8 -0
  18. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  19. package/dist/{chunk-IBWDBBX5.mjs → chunk-7B5SI4OF.mjs} +3 -4
  20. package/dist/chunk-7B5SI4OF.mjs.map +1 -0
  21. package/dist/chunk-EQXPL7TN.mjs +78 -0
  22. package/dist/chunk-EQXPL7TN.mjs.map +1 -0
  23. package/dist/{chunk-GQZHGSRR.js → chunk-GSNGCENJ.js} +39 -2
  24. package/dist/chunk-GSNGCENJ.js.map +1 -0
  25. package/dist/chunk-HQLKOXG7.js +16 -0
  26. package/dist/chunk-HQLKOXG7.js.map +1 -0
  27. package/dist/{chunk-S3PUP7N4.js → chunk-PA4ELVGI.js} +2 -2
  28. package/dist/{chunk-S3PUP7N4.js.map → chunk-PA4ELVGI.js.map} +1 -1
  29. package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
  30. package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
  31. package/dist/{chunk-LHJKLUM7.mjs → chunk-TNJ6LYX7.mjs} +2 -2
  32. package/dist/{chunk-LHJKLUM7.mjs.map → chunk-TNJ6LYX7.mjs.map} +1 -1
  33. package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
  34. package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
  35. package/dist/chunk-YTGUIRRH.js +10 -0
  36. package/dist/chunk-YTGUIRRH.js.map +1 -0
  37. package/dist/common/auth/client/index.d.mts +1 -31
  38. package/dist/common/auth/client/index.d.ts +1 -31
  39. package/dist/common/auth/client/index.js +2 -15
  40. package/dist/common/auth/client/index.mjs +1 -2
  41. package/dist/common/auth/components/index.d.mts +14 -248
  42. package/dist/common/auth/components/index.d.ts +14 -248
  43. package/dist/common/auth/components/index.js +878 -49
  44. package/dist/common/auth/components/index.js.map +1 -1
  45. package/dist/common/auth/components/index.mjs +871 -5
  46. package/dist/common/auth/components/index.mjs.map +1 -1
  47. package/dist/common/auth/hooks/index.d.mts +2 -29
  48. package/dist/common/auth/hooks/index.d.ts +2 -29
  49. package/dist/common/auth/hooks/index.js +2 -11
  50. package/dist/common/auth/hooks/index.mjs +1 -2
  51. package/dist/common/auth/index.d.mts +5 -9
  52. package/dist/common/auth/index.d.ts +5 -9
  53. package/dist/common/auth/index.js +7 -28
  54. package/dist/common/auth/index.mjs +3 -4
  55. package/dist/common/auth/react/index.d.mts +3 -3
  56. package/dist/common/auth/react/index.d.ts +3 -3
  57. package/dist/common/auth/rn/index.d.mts +3 -19
  58. package/dist/common/auth/rn/index.d.ts +3 -19
  59. package/dist/common/auth/rn/index.js +0 -32
  60. package/dist/common/auth/rn/index.js.map +1 -1
  61. package/dist/common/auth/rn/index.mjs +1 -30
  62. package/dist/common/auth/rn/index.mjs.map +1 -1
  63. package/dist/common/auth/server/index.d.mts +81 -2
  64. package/dist/common/auth/server/index.d.ts +81 -2
  65. package/dist/common/auth/server/index.js +128 -37
  66. package/dist/common/auth/server/index.js.map +1 -1
  67. package/dist/common/auth/server/index.mjs +124 -1
  68. package/dist/common/auth/server/index.mjs.map +1 -1
  69. package/dist/common/auth/services/index.js +12 -9
  70. package/dist/common/auth/services/index.js.map +1 -1
  71. package/dist/common/auth/services/index.mjs +10 -1
  72. package/dist/common/auth/services/index.mjs.map +1 -1
  73. package/dist/common/file/server/index.js +32 -32
  74. package/dist/common/file/server/index.mjs +3 -3
  75. package/dist/common/index.d.mts +5 -8
  76. package/dist/common/index.d.ts +5 -8
  77. package/dist/common/index.js +12 -14
  78. package/dist/common/index.mjs +6 -8
  79. package/dist/common/request/index.js +4 -5
  80. package/dist/common/request/index.mjs +2 -3
  81. package/dist/i18n/index.d.mts +1 -1
  82. package/dist/i18n/index.d.ts +1 -1
  83. package/dist/imageCrop/index.d.mts +3 -3
  84. package/dist/imageCrop/index.d.ts +3 -3
  85. package/dist/index-Bd7cKF1j.d.mts +50 -0
  86. package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.mts} +5 -5
  87. package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.ts} +5 -5
  88. package/dist/index-DRQxtCDw.d.ts +50 -0
  89. package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.mts} +8 -8
  90. package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.ts} +8 -8
  91. package/dist/index.d.mts +152 -131
  92. package/dist/index.d.ts +152 -131
  93. package/dist/index.js +105 -554
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +106 -555
  96. package/dist/index.mjs.map +1 -1
  97. package/dist/ossFile/server/index.js +32 -32
  98. package/dist/ossFile/server/index.mjs +3 -3
  99. package/dist/request/index.js +3 -4
  100. package/dist/request/index.mjs +1 -2
  101. package/dist/universalExport/index.d.mts +3 -3
  102. package/dist/universalExport/index.d.ts +3 -3
  103. package/dist/universalFile/index.d.mts +5 -5
  104. package/dist/universalFile/index.d.ts +5 -5
  105. package/dist/universalFile/server/index.js +62 -62
  106. package/dist/universalFile/server/index.mjs +2 -2
  107. package/package.json +1 -36
  108. package/dist/auth/client/index.d.mts +0 -13
  109. package/dist/auth/client/index.d.ts +0 -13
  110. package/dist/auth/client/index.js +0 -26
  111. package/dist/auth/client/index.js.map +0 -1
  112. package/dist/auth/client/index.mjs +0 -5
  113. package/dist/auth/client/index.mjs.map +0 -1
  114. package/dist/auth/components/index.d.mts +0 -10
  115. package/dist/auth/components/index.d.ts +0 -10
  116. package/dist/auth/components/index.js +0 -70
  117. package/dist/auth/components/index.js.map +0 -1
  118. package/dist/auth/components/index.mjs +0 -9
  119. package/dist/auth/components/index.mjs.map +0 -1
  120. package/dist/auth/hooks/index.d.mts +0 -13
  121. package/dist/auth/hooks/index.d.ts +0 -13
  122. package/dist/auth/hooks/index.js +0 -28
  123. package/dist/auth/hooks/index.js.map +0 -1
  124. package/dist/auth/hooks/index.mjs +0 -7
  125. package/dist/auth/hooks/index.mjs.map +0 -1
  126. package/dist/auth/index.d.mts +0 -21
  127. package/dist/auth/index.d.ts +0 -21
  128. package/dist/auth/index.js +0 -112
  129. package/dist/auth/index.js.map +0 -1
  130. package/dist/auth/index.mjs +0 -11
  131. package/dist/auth/index.mjs.map +0 -1
  132. package/dist/auth/rn/index.d.mts +0 -3133
  133. package/dist/auth/rn/index.d.ts +0 -3133
  134. package/dist/auth/rn/index.js +0 -684
  135. package/dist/auth/rn/index.js.map +0 -1
  136. package/dist/auth/rn/index.mjs +0 -663
  137. package/dist/auth/rn/index.mjs.map +0 -1
  138. package/dist/auth/schema/index.d.mts +0 -4
  139. package/dist/auth/schema/index.d.ts +0 -4
  140. package/dist/auth/schema/index.js +0 -49
  141. package/dist/auth/schema/index.js.map +0 -1
  142. package/dist/auth/schema/index.mjs +0 -4
  143. package/dist/auth/schema/index.mjs.map +0 -1
  144. package/dist/auth/services/index.d.mts +0 -1
  145. package/dist/auth/services/index.d.ts +0 -1
  146. package/dist/auth/services/index.js +0 -17
  147. package/dist/auth/services/index.js.map +0 -1
  148. package/dist/auth/services/index.mjs +0 -4
  149. package/dist/auth/services/index.mjs.map +0 -1
  150. package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
  151. package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
  152. package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
  153. package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
  154. package/dist/chunk-7E3J7VAD.mjs +0 -3
  155. package/dist/chunk-7E3J7VAD.mjs.map +0 -1
  156. package/dist/chunk-B3CZ3HXJ.mjs +0 -126
  157. package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
  158. package/dist/chunk-FOQEQWX5.js +0 -4
  159. package/dist/chunk-FOQEQWX5.js.map +0 -1
  160. package/dist/chunk-G4NFB2QA.mjs +0 -212
  161. package/dist/chunk-G4NFB2QA.mjs.map +0 -1
  162. package/dist/chunk-G5HJGXGC.mjs +0 -39
  163. package/dist/chunk-G5HJGXGC.mjs.map +0 -1
  164. package/dist/chunk-GQZHGSRR.js.map +0 -1
  165. package/dist/chunk-GS7XLKET.js +0 -41
  166. package/dist/chunk-GS7XLKET.js.map +0 -1
  167. package/dist/chunk-IBWDBBX5.mjs.map +0 -1
  168. package/dist/chunk-MWSAH7ZG.mjs +0 -42
  169. package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
  170. package/dist/chunk-MZOGYD4N.mjs +0 -186
  171. package/dist/chunk-MZOGYD4N.mjs.map +0 -1
  172. package/dist/chunk-QDUBO567.js +0 -1148
  173. package/dist/chunk-QDUBO567.js.map +0 -1
  174. package/dist/chunk-QP5N3ER6.js.map +0 -1
  175. package/dist/chunk-RWCD2CAD.mjs +0 -1132
  176. package/dist/chunk-RWCD2CAD.mjs.map +0 -1
  177. package/dist/chunk-S37OK2QG.js +0 -216
  178. package/dist/chunk-S37OK2QG.js.map +0 -1
  179. package/dist/chunk-SFDJNKWC.js +0 -22
  180. package/dist/chunk-SFDJNKWC.js.map +0 -1
  181. package/dist/chunk-TXMX6PZR.js +0 -190
  182. package/dist/chunk-TXMX6PZR.js.map +0 -1
  183. package/dist/chunk-VHN7PF5I.js +0 -20
  184. package/dist/chunk-VHN7PF5I.js.map +0 -1
  185. package/dist/chunk-XBZIS3MV.mjs +0 -13
  186. package/dist/chunk-XBZIS3MV.mjs.map +0 -1
  187. package/dist/chunk-XFOZ56FB.mjs +0 -20
  188. package/dist/chunk-XFOZ56FB.mjs.map +0 -1
  189. package/dist/chunk-Z23HAXHL.js +0 -136
  190. package/dist/chunk-Z23HAXHL.js.map +0 -1
  191. package/dist/index-BcjDRcKp.d.mts +0 -40
  192. package/dist/index-BlpXrrTy.d.ts +0 -40
  193. package/dist/session-BCXvGCnm.d.mts +0 -81
  194. package/dist/session-BCXvGCnm.d.ts +0 -81
  195. package/dist/types-C_W_CoUD.d.ts +0 -99
  196. package/dist/types-DCRvasyH.d.mts +0 -99
  197. package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
  198. package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
@@ -1,59 +1,880 @@
1
1
  'use strict';
2
2
 
3
- var chunkQDUBO567_js = require('../../../chunk-QDUBO567.js');
4
- require('../../../chunk-FOQEQWX5.js');
5
- require('../../../chunk-VJNDOYEC.js');
6
- require('../../../chunk-IS7O4LPI.js');
3
+ var chunkVJNDOYEC_js = require('../../../chunk-VJNDOYEC.js');
4
+ var chunkIS7O4LPI_js = require('../../../chunk-IS7O4LPI.js');
7
5
  var chunkMIDXG6LS_js = require('../../../chunk-MIDXG6LS.js');
8
- require('../../../chunk-TXMX6PZR.js');
9
6
  require('../../../chunk-NSBPE2FW.js');
7
+ var React7 = require('react');
8
+ var lucideReact = require('lucide-react');
9
+ var reactDom = require('react-dom');
10
10
 
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
12
 
13
+ var React7__default = /*#__PURE__*/_interopDefault(React7);
14
+
15
+ function SignInForm({
16
+ authClient,
17
+ initialMode = "email-password",
18
+ onSuccess,
19
+ onError,
20
+ children
21
+ }) {
22
+ const actions = chunkIS7O4LPI_js.useAuthActions(authClient);
23
+ const [mode, setMode] = React7.useState(initialMode);
24
+ const [step, setStep] = React7.useState("credentials");
25
+ const [email, setEmail] = React7.useState("");
26
+ const [phone, setPhone] = React7.useState("");
27
+ const [password, setPassword] = React7.useState("");
28
+ const [otp, setOtp] = React7.useState("");
29
+ const [loading, setLoading] = React7.useState(false);
30
+ const [error, setError] = React7.useState(null);
31
+ const fail = (message) => {
32
+ setError(message);
33
+ onError?.(message);
34
+ };
35
+ const sendOtp = async () => {
36
+ setLoading(true);
37
+ setError(null);
38
+ try {
39
+ if (mode === "phone-otp") {
40
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(phone)) {
41
+ fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
42
+ return;
43
+ }
44
+ const result = await actions.sendPhoneOtp(phone.trim());
45
+ if (!result.success) {
46
+ fail(result.error);
47
+ return;
48
+ }
49
+ setStep("otp");
50
+ } else if (mode === "email-otp") {
51
+ if (!chunkMIDXG6LS_js.validateEmail(email)) {
52
+ fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u90AE\u7BB1");
53
+ return;
54
+ }
55
+ const result = await actions.sendEmailOtp(email.trim(), "sign-in");
56
+ if (!result.success) {
57
+ fail(result.error);
58
+ return;
59
+ }
60
+ setStep("otp");
61
+ }
62
+ } finally {
63
+ setLoading(false);
64
+ }
65
+ };
66
+ const handleSubmit = async (e) => {
67
+ e?.preventDefault();
68
+ setLoading(true);
69
+ setError(null);
70
+ try {
71
+ if (mode === "email-password") {
72
+ if (!chunkMIDXG6LS_js.validateEmail(email)) return fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u90AE\u7BB1");
73
+ const pwd = chunkMIDXG6LS_js.validatePassword(password);
74
+ if (!pwd.valid) return fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
75
+ const result = await actions.signInWithEmail(email.trim(), password);
76
+ if (!result.success) return fail(result.error);
77
+ onSuccess?.();
78
+ return;
79
+ }
80
+ if (mode === "phone-password") {
81
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(phone)) return fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
82
+ const pwd = chunkMIDXG6LS_js.validatePassword(password);
83
+ if (!pwd.valid) return fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
84
+ const result = await actions.signInWithPhonePassword(phone.trim(), password);
85
+ if (!result.success) return fail(result.error);
86
+ onSuccess?.();
87
+ return;
88
+ }
89
+ if (mode === "phone-otp") {
90
+ if (step === "credentials") {
91
+ await sendOtp();
92
+ return;
93
+ }
94
+ if (!/^\d{4,8}$/.test(otp)) return fail("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
95
+ const result = await actions.verifyPhoneOtp(phone.trim(), otp);
96
+ if (!result.success) return fail(result.error);
97
+ onSuccess?.();
98
+ return;
99
+ }
100
+ if (mode === "email-otp") {
101
+ if (step === "credentials") {
102
+ await sendOtp();
103
+ return;
104
+ }
105
+ if (!/^\d{4,8}$/.test(otp)) return fail("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
106
+ const result = await actions.signInWithEmailOtp(email.trim(), otp);
107
+ if (!result.success) return fail(result.error);
108
+ onSuccess?.();
109
+ }
110
+ } finally {
111
+ setLoading(false);
112
+ }
113
+ };
114
+ const state = {
115
+ mode,
116
+ step,
117
+ email,
118
+ phone,
119
+ password,
120
+ otp,
121
+ loading,
122
+ error,
123
+ setMode: (next) => {
124
+ setMode(next);
125
+ setStep("credentials");
126
+ setError(null);
127
+ },
128
+ setEmail,
129
+ setPhone,
130
+ setPassword,
131
+ setOtp,
132
+ sendOtp,
133
+ handleSubmit
134
+ };
135
+ return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, children(state));
136
+ }
137
+ function RegisterFormHeadless({
138
+ authClient,
139
+ initialChannel = "email",
140
+ onSuccess,
141
+ onError,
142
+ children
143
+ }) {
144
+ const actions = chunkIS7O4LPI_js.useAuthActions(authClient);
145
+ const [channel, setChannel] = React7.useState(initialChannel);
146
+ const [step, setStep] = React7.useState("credentials");
147
+ const [email, setEmail] = React7.useState("");
148
+ const [phone, setPhone] = React7.useState("");
149
+ const [password, setPassword] = React7.useState("");
150
+ const [confirmPassword, setConfirmPassword] = React7.useState("");
151
+ const [name, setName] = React7.useState("");
152
+ const [otp, setOtp] = React7.useState("");
153
+ const [loading, setLoading] = React7.useState(false);
154
+ const [error, setError] = React7.useState(null);
155
+ const fail = (message) => {
156
+ setError(message);
157
+ onError?.(message);
158
+ };
159
+ const sendOtp = async () => {
160
+ setLoading(true);
161
+ setError(null);
162
+ try {
163
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(phone)) {
164
+ fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
165
+ return;
166
+ }
167
+ const result = await actions.sendPhoneOtp(phone.trim());
168
+ if (!result.success) {
169
+ fail(result.error);
170
+ return;
171
+ }
172
+ setStep("otp");
173
+ } finally {
174
+ setLoading(false);
175
+ }
176
+ };
177
+ const handleSubmit = async (e) => {
178
+ e?.preventDefault();
179
+ setLoading(true);
180
+ setError(null);
181
+ try {
182
+ if (channel === "email") {
183
+ if (!chunkMIDXG6LS_js.validateEmail(email)) return fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u90AE\u7BB1");
184
+ const pwd = chunkMIDXG6LS_js.validatePassword(password);
185
+ if (!pwd.valid) return fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
186
+ if (password !== confirmPassword) return fail("\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4");
187
+ if (!name.trim()) return fail("\u8BF7\u586B\u5199\u6635\u79F0");
188
+ const result = await actions.signUpWithEmail(email.trim(), password, name.trim());
189
+ if (!result.success) return fail(result.error);
190
+ onSuccess?.();
191
+ return;
192
+ }
193
+ if (step === "credentials") {
194
+ const pwd = chunkMIDXG6LS_js.validatePassword(password);
195
+ if (!pwd.valid) return fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
196
+ if (password !== confirmPassword) return fail("\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4");
197
+ await sendOtp();
198
+ return;
199
+ }
200
+ if (!/^\d{4,8}$/.test(otp)) return fail("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
201
+ const verify = await actions.verifyPhoneOtp(phone.trim(), otp);
202
+ if (!verify.success) return fail(verify.error);
203
+ onSuccess?.();
204
+ } finally {
205
+ setLoading(false);
206
+ }
207
+ };
208
+ const state = {
209
+ channel,
210
+ step,
211
+ email,
212
+ phone,
213
+ password,
214
+ confirmPassword,
215
+ name,
216
+ otp,
217
+ loading,
218
+ error,
219
+ setChannel: (next) => {
220
+ setChannel(next);
221
+ setStep("credentials");
222
+ setError(null);
223
+ },
224
+ setEmail,
225
+ setPhone,
226
+ setPassword,
227
+ setConfirmPassword,
228
+ setName,
229
+ setOtp,
230
+ sendOtp,
231
+ handleSubmit
232
+ };
233
+ return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, children(state));
234
+ }
235
+ function VerifyOtpForm({
236
+ authClient,
237
+ channel,
238
+ target,
239
+ onSuccess,
240
+ onError,
241
+ children
242
+ }) {
243
+ const actions = chunkIS7O4LPI_js.useAuthActions(authClient);
244
+ const [otp, setOtp] = React7.useState("");
245
+ const [loading, setLoading] = React7.useState(false);
246
+ const [error, setError] = React7.useState(null);
247
+ const fail = (message) => {
248
+ setError(message);
249
+ onError?.(message);
250
+ };
251
+ const resendOtp = async () => {
252
+ setLoading(true);
253
+ setError(null);
254
+ try {
255
+ if (channel === "phone") {
256
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(target)) return fail("\u624B\u673A\u53F7\u65E0\u6548");
257
+ const result = await actions.sendPhoneOtp(target.trim());
258
+ if (!result.success) fail(result.error);
259
+ } else {
260
+ if (!chunkMIDXG6LS_js.validateEmail(target)) return fail("\u90AE\u7BB1\u65E0\u6548");
261
+ const result = await actions.sendEmailOtp(target.trim(), "sign-in");
262
+ if (!result.success) fail(result.error);
263
+ }
264
+ } finally {
265
+ setLoading(false);
266
+ }
267
+ };
268
+ const handleSubmit = async (e) => {
269
+ e?.preventDefault();
270
+ setLoading(true);
271
+ setError(null);
272
+ try {
273
+ if (!/^\d{4,8}$/.test(otp)) return fail("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
274
+ if (channel === "phone") {
275
+ const result = await actions.verifyPhoneOtp(target.trim(), otp);
276
+ if (!result.success) return fail(result.error);
277
+ } else {
278
+ const result = await actions.signInWithEmailOtp(target.trim(), otp);
279
+ if (!result.success) return fail(result.error);
280
+ }
281
+ onSuccess?.();
282
+ } finally {
283
+ setLoading(false);
284
+ }
285
+ };
286
+ const state = {
287
+ channel,
288
+ target,
289
+ otp,
290
+ loading,
291
+ error,
292
+ setOtp,
293
+ resendOtp,
294
+ handleSubmit
295
+ };
296
+ return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, children(state));
297
+ }
298
+ var overlayClass = "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";
299
+ var panelClass = "bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative";
300
+ var closeBtnClass = "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";
301
+ var inputClass = "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";
302
+ var submitClass = "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";
303
+ var errorClass = "text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed";
304
+ var linkBtnClass = "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";
305
+ function useClientMounted() {
306
+ const [mounted, setMounted] = React7.useState(false);
307
+ React7.useEffect(() => setMounted(true), []);
308
+ return mounted;
309
+ }
310
+ function AuthModalPortal({ children }) {
311
+ const mounted = useClientMounted();
312
+ if (!mounted) return null;
313
+ return reactDom.createPortal(children, document.body);
314
+ }
315
+ var authModalStyles = {
316
+ overlayClass,
317
+ panelClass,
318
+ closeBtnClass,
319
+ inputClass,
320
+ submitClass,
321
+ errorClass,
322
+ linkBtnClass
323
+ };
324
+ function ForgotPasswordModal({ isOpen, onClose, onSuccess }) {
325
+ const { requestPhonePasswordReset, resetPhonePassword } = chunkVJNDOYEC_js.useAuthContext();
326
+ const [phone, setPhone] = React7.useState("");
327
+ const [otp, setOtp] = React7.useState("");
328
+ const [newPassword, setNewPassword] = React7.useState("");
329
+ const [confirmPassword, setConfirmPassword] = React7.useState("");
330
+ const [showPassword, setShowPassword] = React7.useState(false);
331
+ const [showConfirmPassword, setShowConfirmPassword] = React7.useState(false);
332
+ const [error, setError] = React7.useState("");
333
+ const [loading, setLoading] = React7.useState(false);
334
+ const [countdown, setCountdown] = React7.useState(0);
335
+ const startCountdown = () => {
336
+ setCountdown(60);
337
+ const timer = setInterval(() => {
338
+ setCountdown((prev) => {
339
+ if (prev <= 1) {
340
+ clearInterval(timer);
341
+ return 0;
342
+ }
343
+ return prev - 1;
344
+ });
345
+ }, 1e3);
346
+ };
347
+ const handleSendCode = async () => {
348
+ setError("");
349
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(phone)) {
350
+ setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
351
+ return;
352
+ }
353
+ setLoading(true);
354
+ try {
355
+ const result = await requestPhonePasswordReset(phone.trim());
356
+ if (!result.success) {
357
+ setError(result.error);
358
+ return;
359
+ }
360
+ startCountdown();
361
+ } finally {
362
+ setLoading(false);
363
+ }
364
+ };
365
+ const handleSubmit = async (e) => {
366
+ e.preventDefault();
367
+ setError("");
368
+ if (!chunkMIDXG6LS_js.validatePhoneNumber(phone)) return setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
369
+ const pwd = chunkMIDXG6LS_js.validatePassword(newPassword);
370
+ if (!pwd.valid) return setError(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
371
+ if (newPassword !== confirmPassword) return setError("\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4");
372
+ if (!/^\d{4,8}$/.test(otp)) return setError("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
373
+ setLoading(true);
374
+ try {
375
+ const result = await resetPhonePassword(phone.trim(), otp, newPassword);
376
+ if (!result.success) {
377
+ setError(result.error);
378
+ return;
379
+ }
380
+ onSuccess?.();
381
+ } finally {
382
+ setLoading(false);
383
+ }
384
+ };
385
+ if (!isOpen) return null;
386
+ return /* @__PURE__ */ React7__default.default.createElement(AuthModalPortal, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.overlayClass, style: { margin: 0 }, onClick: (e) => e.target === e.currentTarget && onClose() }, /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.panelClass, onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", className: authModalStyles.closeBtnClass, onClick: onClose }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.X, { size: 20 })), /* @__PURE__ */ React7__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React7__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u91CD\u7F6E\u5BC6\u7801"), /* @__PURE__ */ React7__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u8BF7\u8F93\u5165\u624B\u673A\u53F7\u548C\u9A8C\u8BC1\u7801\u91CD\u7F6E\u5BC6\u7801")), /* @__PURE__ */ React7__default.default.createElement("form", { onSubmit: handleSubmit, className: "p-6" }, /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "reset-phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Phone, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
387
+ "input",
388
+ {
389
+ id: "reset-phone",
390
+ type: "tel",
391
+ value: phone,
392
+ onChange: (e) => setPhone(e.target.value),
393
+ placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
394
+ className: authModalStyles.inputClass,
395
+ disabled: loading
396
+ }
397
+ ))), /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "reset-otp", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u9A8C\u8BC1\u7801"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(
398
+ "input",
399
+ {
400
+ id: "reset-otp",
401
+ type: "text",
402
+ inputMode: "numeric",
403
+ value: otp,
404
+ onChange: (e) => setOtp(e.target.value),
405
+ placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
406
+ 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",
407
+ disabled: loading,
408
+ maxLength: 8
409
+ }
410
+ ), /* @__PURE__ */ React7__default.default.createElement(
411
+ "button",
412
+ {
413
+ type: "button",
414
+ 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",
415
+ onClick: handleSendCode,
416
+ disabled: loading || countdown > 0
417
+ },
418
+ countdown > 0 ? `${countdown}\u79D2\u540E\u91CD\u8BD5` : "\u53D1\u9001\u9A8C\u8BC1\u7801"
419
+ ))), /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "reset-password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u65B0\u5BC6\u7801"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
420
+ "input",
421
+ {
422
+ id: "reset-password",
423
+ type: showPassword ? "text" : "password",
424
+ value: newPassword,
425
+ onChange: (e) => setNewPassword(e.target.value),
426
+ placeholder: "\u8BF7\u8F93\u5165\u65B0\u5BC6\u7801",
427
+ className: `${authModalStyles.inputClass} pr-12`,
428
+ disabled: loading
429
+ }
430
+ ), /* @__PURE__ */ React7__default.default.createElement(
431
+ "button",
432
+ {
433
+ type: "button",
434
+ 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",
435
+ onClick: () => setShowPassword((v) => !v),
436
+ disabled: loading
437
+ },
438
+ showPassword ? /* @__PURE__ */ React7__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React7__default.default.createElement(lucideReact.Eye, { size: 18 })
439
+ ))), /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "reset-confirm-password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u786E\u8BA4\u5BC6\u7801"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
440
+ "input",
441
+ {
442
+ id: "reset-confirm-password",
443
+ type: showConfirmPassword ? "text" : "password",
444
+ value: confirmPassword,
445
+ onChange: (e) => setConfirmPassword(e.target.value),
446
+ placeholder: "\u8BF7\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801",
447
+ className: `${authModalStyles.inputClass} pr-12`,
448
+ disabled: loading
449
+ }
450
+ ), /* @__PURE__ */ React7__default.default.createElement(
451
+ "button",
452
+ {
453
+ type: "button",
454
+ 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",
455
+ onClick: () => setShowConfirmPassword((v) => !v),
456
+ disabled: loading
457
+ },
458
+ showConfirmPassword ? /* @__PURE__ */ React7__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React7__default.default.createElement(lucideReact.Eye, { size: 18 })
459
+ ))), error && /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.errorClass }, error), /* @__PURE__ */ React7__default.default.createElement("button", { type: "submit", className: authModalStyles.submitClass, disabled: loading }, loading ? "\u63D0\u4EA4\u4E2D..." : "\u91CD\u7F6E\u5BC6\u7801")))));
460
+ }
461
+
462
+ // src/common/auth/components/styled/LoginModal.tsx
463
+ var MODE_LABELS = {
464
+ "phone-password": "\u624B\u673A\u5BC6\u7801",
465
+ "email-password": "\u90AE\u7BB1\u5BC6\u7801",
466
+ "phone-otp": "\u624B\u673A\u9A8C\u8BC1\u7801",
467
+ "email-otp": "\u90AE\u7BB1\u9A8C\u8BC1\u7801"
468
+ };
469
+ function LoginModal({
470
+ isOpen,
471
+ onClose,
472
+ onSuccess,
473
+ onSwitchToRegister,
474
+ defaultMode = "phone-password"
475
+ }) {
476
+ const { authClient, refreshSession } = chunkVJNDOYEC_js.useAuthContext();
477
+ const [showPassword, setShowPassword] = React7.useState(false);
478
+ const [showForgotPassword, setShowForgotPassword] = React7.useState(false);
479
+ const handleSuccess = async () => {
480
+ await refreshSession();
481
+ onSuccess?.();
482
+ };
483
+ if (!isOpen) return null;
484
+ return /* @__PURE__ */ React7__default.default.createElement(AuthModalPortal, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.overlayClass, style: { margin: 0 }, onClick: (e) => e.target === e.currentTarget && onClose() }, /* @__PURE__ */ React7__default.default.createElement(SignInForm, { authClient, initialMode: defaultMode, onSuccess: handleSuccess }, (state) => /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.panelClass, onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", className: authModalStyles.closeBtnClass, onClick: onClose }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.X, { size: 20 })), /* @__PURE__ */ React7__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React7__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u7528\u6237\u767B\u5F55"), /* @__PURE__ */ React7__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u9009\u62E9\u767B\u5F55\u65B9\u5F0F\u5E76\u586B\u5199\u4FE1\u606F")), /* @__PURE__ */ React7__default.default.createElement("div", { className: "px-6 pt-4 flex flex-wrap gap-2" }, Object.keys(MODE_LABELS).map((mode) => /* @__PURE__ */ React7__default.default.createElement(
485
+ "button",
486
+ {
487
+ key: mode,
488
+ type: "button",
489
+ onClick: () => state.setMode(mode),
490
+ className: `px-3 py-1.5 text-xs rounded-full border transition-all ${state.mode === mode ? "bg-blue-500 text-white border-blue-500" : "bg-white text-gray-600 border-gray-200 hover:border-blue-300"}`
491
+ },
492
+ MODE_LABELS[mode]
493
+ ))), /* @__PURE__ */ React7__default.default.createElement("form", { onSubmit: state.handleSubmit, className: "p-6" }, (state.mode === "email-password" || state.mode === "email-otp") && state.step === "credentials" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "login-email", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u90AE\u7BB1"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Mail, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
494
+ "input",
495
+ {
496
+ id: "login-email",
497
+ type: "email",
498
+ autoComplete: "email",
499
+ value: state.email,
500
+ onChange: (e) => state.setEmail(e.target.value),
501
+ placeholder: "\u8BF7\u8F93\u5165\u90AE\u7BB1",
502
+ className: authModalStyles.inputClass,
503
+ disabled: state.loading
504
+ }
505
+ ))), (state.mode === "phone-password" || state.mode === "phone-otp") && state.step === "credentials" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "login-phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Phone, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
506
+ "input",
507
+ {
508
+ id: "login-phone",
509
+ type: "tel",
510
+ autoComplete: "tel",
511
+ value: state.phone,
512
+ onChange: (e) => state.setPhone(e.target.value),
513
+ placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
514
+ className: authModalStyles.inputClass,
515
+ disabled: state.loading
516
+ }
517
+ ))), (state.mode === "email-password" || state.mode === "phone-password") && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "login-password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u5BC6\u7801"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
518
+ "input",
519
+ {
520
+ id: "login-password",
521
+ type: showPassword ? "text" : "password",
522
+ autoComplete: "current-password",
523
+ value: state.password,
524
+ onChange: (e) => state.setPassword(e.target.value),
525
+ placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801",
526
+ className: `${authModalStyles.inputClass} pr-12`,
527
+ disabled: state.loading
528
+ }
529
+ ), /* @__PURE__ */ React7__default.default.createElement(
530
+ "button",
531
+ {
532
+ type: "button",
533
+ 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",
534
+ onClick: () => setShowPassword((v) => !v),
535
+ disabled: state.loading
536
+ },
537
+ showPassword ? /* @__PURE__ */ React7__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React7__default.default.createElement(lucideReact.Eye, { size: 18 })
538
+ ))), (state.mode === "phone-otp" || state.mode === "email-otp") && state.step === "otp" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "login-otp", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u9A8C\u8BC1\u7801"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.User, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
539
+ "input",
540
+ {
541
+ id: "login-otp",
542
+ type: "text",
543
+ inputMode: "numeric",
544
+ value: state.otp,
545
+ onChange: (e) => state.setOtp(e.target.value),
546
+ placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
547
+ className: authModalStyles.inputClass,
548
+ disabled: state.loading,
549
+ maxLength: 8
550
+ }
551
+ ))), (state.mode === "phone-password" || state.mode === "phone-otp") && state.step === "credentials" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-right -mt-2 mb-4" }, /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", onClick: () => setShowForgotPassword(true), className: authModalStyles.linkBtnClass }, "\u5FD8\u8BB0\u5BC6\u7801\uFF1F")), state.error && /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.errorClass }, state.error), /* @__PURE__ */ React7__default.default.createElement("button", { type: "submit", className: authModalStyles.submitClass, disabled: state.loading }, state.loading ? "\u5904\u7406\u4E2D..." : state.step === "otp" ? "\u9A8C\u8BC1\u5E76\u767B\u5F55" : state.mode === "phone-otp" || state.mode === "email-otp" ? "\u53D1\u9001\u9A8C\u8BC1\u7801" : "\u767B\u5F55"), onSwitchToRegister && /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-center mt-5 pt-4 border-t border-gray-100" }, /* @__PURE__ */ React7__default.default.createElement("span", { className: "text-gray-500 text-sm mr-1" }, "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF1F"), /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", onClick: onSwitchToRegister, className: authModalStyles.linkBtnClass }, "\u7ACB\u5373\u6CE8\u518C")))))), /* @__PURE__ */ React7__default.default.createElement(
552
+ ForgotPasswordModal,
553
+ {
554
+ isOpen: showForgotPassword,
555
+ onClose: () => setShowForgotPassword(false),
556
+ onSuccess: () => {
557
+ setShowForgotPassword(false);
558
+ handleSuccess();
559
+ }
560
+ }
561
+ ));
562
+ }
563
+ function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }) {
564
+ const { authClient, refreshSession } = chunkVJNDOYEC_js.useAuthContext();
565
+ const [showPassword, setShowPassword] = React7.useState(false);
566
+ const [showConfirmPassword, setShowConfirmPassword] = React7.useState(false);
567
+ const handleSuccess = async () => {
568
+ await refreshSession();
569
+ onSuccess?.();
570
+ };
571
+ if (!isOpen) return null;
572
+ return /* @__PURE__ */ React7__default.default.createElement(AuthModalPortal, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.overlayClass, style: { margin: 0 }, onClick: (e) => e.target === e.currentTarget && onClose() }, /* @__PURE__ */ React7__default.default.createElement(RegisterFormHeadless, { authClient, initialChannel: "phone", onSuccess: handleSuccess }, (state) => /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.panelClass, onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", className: authModalStyles.closeBtnClass, onClick: onClose }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.X, { size: 20 })), /* @__PURE__ */ React7__default.default.createElement("div", { className: "px-6 pt-6 pb-4 text-center border-b border-gray-100" }, /* @__PURE__ */ React7__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-800 mb-2" }, "\u7528\u6237\u6CE8\u518C"), /* @__PURE__ */ React7__default.default.createElement("p", { className: "text-gray-500 text-sm" }, "\u8BF7\u586B\u5199\u4EE5\u4E0B\u4FE1\u606F\u521B\u5EFA\u8D26\u6237")), /* @__PURE__ */ React7__default.default.createElement("div", { className: "px-6 pt-4 flex gap-2" }, /* @__PURE__ */ React7__default.default.createElement(
573
+ "button",
574
+ {
575
+ type: "button",
576
+ onClick: () => state.setChannel("phone"),
577
+ className: `px-3 py-1.5 text-xs rounded-full border transition-all ${state.channel === "phone" ? "bg-blue-500 text-white border-blue-500" : "bg-white text-gray-600 border-gray-200 hover:border-blue-300"}`
578
+ },
579
+ "\u624B\u673A\u53F7\u6CE8\u518C"
580
+ ), /* @__PURE__ */ React7__default.default.createElement(
581
+ "button",
582
+ {
583
+ type: "button",
584
+ onClick: () => state.setChannel("email"),
585
+ className: `px-3 py-1.5 text-xs rounded-full border transition-all ${state.channel === "email" ? "bg-blue-500 text-white border-blue-500" : "bg-white text-gray-600 border-gray-200 hover:border-blue-300"}`
586
+ },
587
+ "\u90AE\u7BB1\u6CE8\u518C"
588
+ )), /* @__PURE__ */ React7__default.default.createElement("form", { onSubmit: state.handleSubmit, className: "p-6" }, state.channel === "email" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-email", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u90AE\u7BB1 *"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Mail, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
589
+ "input",
590
+ {
591
+ id: "register-email",
592
+ type: "email",
593
+ autoComplete: "email",
594
+ value: state.email,
595
+ onChange: (e) => state.setEmail(e.target.value),
596
+ placeholder: "\u8BF7\u8F93\u5165\u90AE\u7BB1",
597
+ className: authModalStyles.inputClass,
598
+ disabled: state.loading
599
+ }
600
+ ))), state.channel === "phone" && state.step === "credentials" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-phone", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u624B\u673A\u53F7 *"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Phone, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
601
+ "input",
602
+ {
603
+ id: "register-phone",
604
+ type: "tel",
605
+ autoComplete: "tel",
606
+ value: state.phone,
607
+ onChange: (e) => state.setPhone(e.target.value),
608
+ placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
609
+ className: authModalStyles.inputClass,
610
+ disabled: state.loading
611
+ }
612
+ ))), state.channel === "email" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-name", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u6635\u79F0 *"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.User, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
613
+ "input",
614
+ {
615
+ id: "register-name",
616
+ type: "text",
617
+ autoComplete: "name",
618
+ value: state.name,
619
+ onChange: (e) => state.setName(e.target.value),
620
+ placeholder: "\u8BF7\u8F93\u5165\u6635\u79F0",
621
+ className: authModalStyles.inputClass,
622
+ disabled: state.loading
623
+ }
624
+ ))), state.step === "credentials" && /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u5BC6\u7801 *"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
625
+ "input",
626
+ {
627
+ id: "register-password",
628
+ type: showPassword ? "text" : "password",
629
+ autoComplete: "new-password",
630
+ value: state.password,
631
+ onChange: (e) => state.setPassword(e.target.value),
632
+ placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801\uFF08\u81F3\u5C116\u4F4D\uFF09",
633
+ className: `${authModalStyles.inputClass} pr-12`,
634
+ disabled: state.loading
635
+ }
636
+ ), /* @__PURE__ */ React7__default.default.createElement(
637
+ "button",
638
+ {
639
+ type: "button",
640
+ 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",
641
+ onClick: () => setShowPassword((v) => !v),
642
+ disabled: state.loading
643
+ },
644
+ showPassword ? /* @__PURE__ */ React7__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React7__default.default.createElement(lucideReact.Eye, { size: 18 })
645
+ ))), /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-confirm-password", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u786E\u8BA4\u5BC6\u7801 *"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React7__default.default.createElement(lucideReact.Lock, { size: 18, className: "absolute left-4 text-gray-400 z-[1] pointer-events-none" }), /* @__PURE__ */ React7__default.default.createElement(
646
+ "input",
647
+ {
648
+ id: "register-confirm-password",
649
+ type: showConfirmPassword ? "text" : "password",
650
+ autoComplete: "new-password",
651
+ value: state.confirmPassword,
652
+ onChange: (e) => state.setConfirmPassword(e.target.value),
653
+ placeholder: "\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801",
654
+ className: `${authModalStyles.inputClass} pr-12`,
655
+ disabled: state.loading
656
+ }
657
+ ), /* @__PURE__ */ React7__default.default.createElement(
658
+ "button",
659
+ {
660
+ type: "button",
661
+ 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",
662
+ onClick: () => setShowConfirmPassword((v) => !v),
663
+ disabled: state.loading
664
+ },
665
+ showConfirmPassword ? /* @__PURE__ */ React7__default.default.createElement(lucideReact.EyeOff, { size: 18 }) : /* @__PURE__ */ React7__default.default.createElement(lucideReact.Eye, { size: 18 })
666
+ )))), state.channel === "phone" && state.step === "otp" && /* @__PURE__ */ React7__default.default.createElement("div", { className: "mb-5" }, /* @__PURE__ */ React7__default.default.createElement("label", { htmlFor: "register-otp", className: "block mb-1.5 text-sm font-medium text-gray-700" }, "\u9A8C\u8BC1\u7801 *"), /* @__PURE__ */ React7__default.default.createElement(
667
+ "input",
668
+ {
669
+ id: "register-otp",
670
+ type: "text",
671
+ inputMode: "numeric",
672
+ value: state.otp,
673
+ onChange: (e) => state.setOtp(e.target.value),
674
+ placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
675
+ className: "w-full py-3 px-4 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",
676
+ disabled: state.loading,
677
+ maxLength: 8
678
+ }
679
+ )), state.error && /* @__PURE__ */ React7__default.default.createElement("div", { className: authModalStyles.errorClass }, state.error), /* @__PURE__ */ React7__default.default.createElement("button", { type: "submit", className: authModalStyles.submitClass, disabled: state.loading }, state.loading ? "\u5904\u7406\u4E2D..." : state.channel === "phone" && state.step === "credentials" ? "\u53D1\u9001\u9A8C\u8BC1\u7801" : state.channel === "phone" && state.step === "otp" ? "\u5B8C\u6210\u6CE8\u518C" : "\u6CE8\u518C"), onSwitchToLogin && /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-center mt-5 pt-4 border-t border-gray-100" }, /* @__PURE__ */ React7__default.default.createElement("span", { className: "text-gray-500 text-sm mr-1" }, "\u5DF2\u6709\u8D26\u53F7\uFF1F"), /* @__PURE__ */ React7__default.default.createElement("button", { type: "button", onClick: onSwitchToLogin, className: authModalStyles.linkBtnClass }, "\u7ACB\u5373\u767B\u5F55")))))));
680
+ }
681
+ function AuthGuard({ children, fallback, requireAuth = true }) {
682
+ const { isAuthenticated, loading, refreshSession } = chunkVJNDOYEC_js.useAuthContext();
683
+ const [showLoginModal, setShowLoginModal] = React7.useState(false);
684
+ const [showRegisterModal, setShowRegisterModal] = React7.useState(false);
685
+ React7.useEffect(() => {
686
+ if (!loading && requireAuth && !isAuthenticated) {
687
+ setShowLoginModal(true);
688
+ setShowRegisterModal(false);
689
+ }
690
+ }, [loading, requireAuth, isAuthenticated]);
691
+ const handleAuthSuccess = async () => {
692
+ await refreshSession();
693
+ setShowLoginModal(false);
694
+ setShowRegisterModal(false);
695
+ };
696
+ if (loading) {
697
+ return /* @__PURE__ */ React7__default.default.createElement("div", { className: "flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-3" }, /* @__PURE__ */ React7__default.default.createElement("div", { className: "w-8 h-8 border-[3px] border-gray-200 border-t-blue-500 rounded-full animate-spin" }), /* @__PURE__ */ React7__default.default.createElement("div", null, "\u9A8C\u8BC1\u767B\u5F55\u72B6\u6001..."));
698
+ }
699
+ if (requireAuth && !isAuthenticated) {
700
+ return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, fallback ?? /* @__PURE__ */ React7__default.default.createElement("div", { className: "flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-4 p-6 text-center" }, /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-5xl opacity-50" }, "\u{1F512}"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-lg font-medium" }, "\u8BF7\u5148\u767B\u5F55\u4EE5\u8BBF\u95EE\u6B64\u9875\u9762"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "text-sm opacity-70" }, "\u767B\u5F55\u6216\u6CE8\u518C\u540E\u5373\u53EF\u67E5\u770B\u76F8\u5173\u5185\u5BB9"), /* @__PURE__ */ React7__default.default.createElement("div", { className: "flex gap-3 mt-2" }, /* @__PURE__ */ React7__default.default.createElement(
701
+ "button",
702
+ {
703
+ type: "button",
704
+ className: "px-4 py-2 rounded-lg bg-blue-500 text-white text-sm font-medium hover:bg-blue-600 transition-colors",
705
+ onClick: () => {
706
+ setShowRegisterModal(false);
707
+ setShowLoginModal(true);
708
+ }
709
+ },
710
+ "\u767B\u5F55"
711
+ ), /* @__PURE__ */ React7__default.default.createElement(
712
+ "button",
713
+ {
714
+ type: "button",
715
+ className: "px-4 py-2 rounded-lg border border-gray-200 text-gray-700 text-sm font-medium hover:border-blue-300 hover:text-blue-600 transition-colors",
716
+ onClick: () => {
717
+ setShowLoginModal(false);
718
+ setShowRegisterModal(true);
719
+ }
720
+ },
721
+ "\u6CE8\u518C"
722
+ ))), /* @__PURE__ */ React7__default.default.createElement(
723
+ LoginModal,
724
+ {
725
+ isOpen: showLoginModal,
726
+ onClose: () => setShowLoginModal(false),
727
+ onSuccess: handleAuthSuccess,
728
+ onSwitchToRegister: () => {
729
+ setShowLoginModal(false);
730
+ setShowRegisterModal(true);
731
+ }
732
+ }
733
+ ), /* @__PURE__ */ React7__default.default.createElement(
734
+ RegisterModal,
735
+ {
736
+ isOpen: showRegisterModal,
737
+ onClose: () => setShowRegisterModal(false),
738
+ onSuccess: handleAuthSuccess,
739
+ onSwitchToLogin: () => {
740
+ setShowRegisterModal(false);
741
+ setShowLoginModal(true);
742
+ }
743
+ }
744
+ ));
745
+ }
746
+ return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, children);
747
+ }
748
+ function UserMenu({ customMenuItems = [], className }) {
749
+ const { user, isAuthenticated, signOut, refreshSession } = chunkVJNDOYEC_js.useAuthContext();
750
+ const [isOpen, setIsOpen] = React7.useState(false);
751
+ const [showLoginModal, setShowLoginModal] = React7.useState(false);
752
+ const [showRegisterModal, setShowRegisterModal] = React7.useState(false);
753
+ React7.useEffect(() => {
754
+ const handleGlobalClick = () => setIsOpen(false);
755
+ if (isOpen) document.addEventListener("click", handleGlobalClick);
756
+ return () => document.removeEventListener("click", handleGlobalClick);
757
+ }, [isOpen]);
758
+ const visibleCustomMenuItems = customMenuItems.filter((item) => {
759
+ if (item.requireAuth === true) return isAuthenticated;
760
+ if (item.requireAuth === false) return !isAuthenticated;
761
+ return true;
762
+ });
763
+ const handleAuthSuccess = async () => {
764
+ await refreshSession();
765
+ setShowLoginModal(false);
766
+ setShowRegisterModal(false);
767
+ };
768
+ const displayName = user?.name || user?.phoneNumber || user?.email || "\u7528\u6237";
769
+ return /* @__PURE__ */ React7__default.default.createElement("div", { className: `relative inline-block ${className ?? ""}` }, /* @__PURE__ */ React7__default.default.createElement(
770
+ "button",
771
+ {
772
+ type: "button",
773
+ 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",
774
+ onClick: () => setIsOpen((v) => !v)
775
+ },
776
+ /* @__PURE__ */ React7__default.default.createElement(lucideReact.User, { size: 24 }),
777
+ isAuthenticated && user && /* @__PURE__ */ React7__default.default.createElement("span", { className: "max-w-[120px] overflow-hidden text-ellipsis whitespace-nowrap" }, displayName)
778
+ ), isOpen && /* @__PURE__ */ React7__default.default.createElement(
779
+ "div",
780
+ {
781
+ 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",
782
+ onClick: (e) => e.stopPropagation()
783
+ },
784
+ isAuthenticated && user ? /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: "p-3 mb-2 bg-slate-50 rounded-lg" }, /* @__PURE__ */ React7__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__ */ React7__default.default.createElement("div", { className: "text-xs text-slate-500 mb-1 overflow-hidden text-ellipsis whitespace-nowrap" }, user.phoneNumber || user.email), user.role && /* @__PURE__ */ React7__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__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), visibleCustomMenuItems.map((item) => {
785
+ const IconComponent = item.icon;
786
+ return /* @__PURE__ */ React7__default.default.createElement(
787
+ "button",
788
+ {
789
+ key: item.id,
790
+ type: "button",
791
+ 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",
792
+ onClick: () => {
793
+ item.onClick();
794
+ setIsOpen(false);
795
+ }
796
+ },
797
+ IconComponent && /* @__PURE__ */ React7__default.default.createElement(IconComponent, { size: 16 }),
798
+ /* @__PURE__ */ React7__default.default.createElement("span", null, item.label)
799
+ );
800
+ })), /* @__PURE__ */ React7__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), /* @__PURE__ */ React7__default.default.createElement(
801
+ "button",
802
+ {
803
+ type: "button",
804
+ 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",
805
+ onClick: async () => {
806
+ await signOut();
807
+ setIsOpen(false);
808
+ }
809
+ },
810
+ /* @__PURE__ */ React7__default.default.createElement(lucideReact.LogOut, { size: 16 }),
811
+ /* @__PURE__ */ React7__default.default.createElement("span", null, "\u9000\u51FA\u767B\u5F55")
812
+ )) : /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement(
813
+ "button",
814
+ {
815
+ type: "button",
816
+ 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",
817
+ onClick: () => {
818
+ setShowLoginModal(true);
819
+ setIsOpen(false);
820
+ }
821
+ },
822
+ /* @__PURE__ */ React7__default.default.createElement(lucideReact.LogIn, { size: 16 }),
823
+ /* @__PURE__ */ React7__default.default.createElement("span", null, "\u767B\u5F55")
824
+ ), /* @__PURE__ */ React7__default.default.createElement(
825
+ "button",
826
+ {
827
+ type: "button",
828
+ 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",
829
+ onClick: () => {
830
+ setShowRegisterModal(true);
831
+ setIsOpen(false);
832
+ }
833
+ },
834
+ /* @__PURE__ */ React7__default.default.createElement(lucideReact.User, { size: 16 }),
835
+ /* @__PURE__ */ React7__default.default.createElement("span", null, "\u6CE8\u518C")
836
+ ), visibleCustomMenuItems.length > 0 && /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("div", { className: "h-px bg-slate-200 my-2" }), visibleCustomMenuItems.map((item) => {
837
+ const IconComponent = item.icon;
838
+ return /* @__PURE__ */ React7__default.default.createElement(
839
+ "button",
840
+ {
841
+ key: item.id,
842
+ type: "button",
843
+ 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",
844
+ onClick: () => {
845
+ item.onClick();
846
+ setIsOpen(false);
847
+ }
848
+ },
849
+ IconComponent && /* @__PURE__ */ React7__default.default.createElement(IconComponent, { size: 16 }),
850
+ /* @__PURE__ */ React7__default.default.createElement("span", null, item.label)
851
+ );
852
+ })))
853
+ ), /* @__PURE__ */ React7__default.default.createElement(
854
+ LoginModal,
855
+ {
856
+ isOpen: showLoginModal,
857
+ onClose: () => setShowLoginModal(false),
858
+ onSuccess: handleAuthSuccess,
859
+ onSwitchToRegister: () => {
860
+ setShowLoginModal(false);
861
+ setShowRegisterModal(true);
862
+ }
863
+ }
864
+ ), /* @__PURE__ */ React7__default.default.createElement(
865
+ RegisterModal,
866
+ {
867
+ isOpen: showRegisterModal,
868
+ onClose: () => setShowRegisterModal(false),
869
+ onSuccess: handleAuthSuccess,
870
+ onSwitchToLogin: () => {
871
+ setShowRegisterModal(false);
872
+ setShowLoginModal(true);
873
+ }
874
+ }
875
+ ));
876
+ }
12
877
 
13
- Object.defineProperty(exports, "AdminLoginPage", {
14
- enumerable: true,
15
- get: function () { return chunkQDUBO567_js.AdminLoginPage; }
16
- });
17
- Object.defineProperty(exports, "AuthGuard", {
18
- enumerable: true,
19
- get: function () { return chunkQDUBO567_js.AuthGuard; }
20
- });
21
- Object.defineProperty(exports, "ForgotPasswordModal", {
22
- enumerable: true,
23
- get: function () { return chunkQDUBO567_js.ForgotPasswordModal; }
24
- });
25
- Object.defineProperty(exports, "LoginForm", {
26
- enumerable: true,
27
- get: function () { return chunkQDUBO567_js.LoginForm; }
28
- });
29
- Object.defineProperty(exports, "LoginModal", {
30
- enumerable: true,
31
- get: function () { return chunkQDUBO567_js.LoginModal; }
32
- });
33
- Object.defineProperty(exports, "RegisterForm", {
34
- enumerable: true,
35
- get: function () { return chunkQDUBO567_js.RegisterForm; }
36
- });
37
- Object.defineProperty(exports, "RegisterFormHeadless", {
38
- enumerable: true,
39
- get: function () { return chunkQDUBO567_js.RegisterFormHeadless; }
40
- });
41
- Object.defineProperty(exports, "RegisterModal", {
42
- enumerable: true,
43
- get: function () { return chunkQDUBO567_js.RegisterModal; }
44
- });
45
- Object.defineProperty(exports, "SignInForm", {
46
- enumerable: true,
47
- get: function () { return chunkQDUBO567_js.SignInForm; }
48
- });
49
- Object.defineProperty(exports, "UserMenu", {
50
- enumerable: true,
51
- get: function () { return chunkQDUBO567_js.UserMenu; }
52
- });
53
- Object.defineProperty(exports, "VerifyOtpForm", {
54
- enumerable: true,
55
- get: function () { return chunkQDUBO567_js.VerifyOtpForm; }
56
- });
57
878
  Object.defineProperty(exports, "validateEmail", {
58
879
  enumerable: true,
59
880
  get: function () { return chunkMIDXG6LS_js.validateEmail; }
@@ -66,5 +887,13 @@ Object.defineProperty(exports, "validatePhoneNumber", {
66
887
  enumerable: true,
67
888
  get: function () { return chunkMIDXG6LS_js.validatePhoneNumber; }
68
889
  });
890
+ exports.AuthGuard = AuthGuard;
891
+ exports.ForgotPasswordModal = ForgotPasswordModal;
892
+ exports.LoginModal = LoginModal;
893
+ exports.RegisterFormHeadless = RegisterFormHeadless;
894
+ exports.RegisterModal = RegisterModal;
895
+ exports.SignInForm = SignInForm;
896
+ exports.UserMenu = UserMenu;
897
+ exports.VerifyOtpForm = VerifyOtpForm;
69
898
  //# sourceMappingURL=index.js.map
70
899
  //# sourceMappingURL=index.js.map