sa2kit 3.2.1 → 3.2.3

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.
@@ -164,6 +164,24 @@ function RegisterFormHeadless({
164
164
  fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
165
165
  return;
166
166
  }
167
+ const pwd = chunkMIDXG6LS_js.validatePassword(password);
168
+ if (!pwd.valid) {
169
+ fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
170
+ return;
171
+ }
172
+ if (password !== confirmPassword) {
173
+ fail("\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4");
174
+ return;
175
+ }
176
+ const intentResponse = await fetch("/api/auth/phone-signup-intent", {
177
+ method: "POST",
178
+ headers: { "Content-Type": "application/json" },
179
+ body: JSON.stringify({ phoneNumber: phone.trim(), password })
180
+ });
181
+ if (!intentResponse.ok) {
182
+ fail("\u65E0\u6CD5\u4FDD\u5B58\u6CE8\u518C\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
183
+ return;
184
+ }
167
185
  const result = await actions.sendPhoneOtp(phone.trim());
168
186
  if (!result.success) {
169
187
  fail(result.error);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/common/auth/components/headless/SignInForm.tsx","../../../../src/common/auth/components/headless/RegisterForm.tsx","../../../../src/common/auth/components/headless/VerifyOtpForm.tsx","../../../../src/common/auth/components/styled/modal-shared.tsx","../../../../src/common/auth/components/styled/ForgotPasswordModal.tsx","../../../../src/common/auth/components/styled/LoginModal.tsx","../../../../src/common/auth/components/styled/RegisterModal.tsx","../../../../src/common/auth/components/styled/AuthGuard.tsx","../../../../src/common/auth/components/styled/UserMenu.tsx"],"names":["useAuthActions","useState","validatePhoneNumber","validateEmail","validatePassword","React","useEffect","createPortal","useAuthContext","X","Phone","Lock","EyeOff","Eye","Mail","User","LogOut","LogIn"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessSignInFormProps, SignInFormState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function SignInForm({\n authClient,\n initialMode = 'email-password',\n onSuccess,\n onError,\n children,\n}: HeadlessSignInFormProps) {\n const actions = useAuthActions(authClient);\n const [mode, setMode] = useState(initialMode);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (mode === 'phone-otp') {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } else if (mode === 'email-otp') {\n if (!validateEmail(email)) {\n fail('请输入正确的邮箱');\n return;\n }\n const result = await actions.sendEmailOtp(email.trim(), 'sign-in');\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (mode === 'email-password') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithEmail(email.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-password') {\n if (!validatePhoneNumber(phone)) return fail('请输入正确的手机号');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithPhonePassword(phone.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'email-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.signInWithEmailOtp(email.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n }\n } finally {\n setLoading(false);\n }\n };\n\n const state: SignInFormState = {\n mode,\n step,\n email,\n phone,\n password,\n otp,\n loading,\n error,\n setMode: (next) => {\n setMode(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessRegisterFormProps, RegisterFormHeadlessState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function RegisterFormHeadless({\n authClient,\n initialChannel = 'email',\n onSuccess,\n onError,\n children,\n}: HeadlessRegisterFormProps) {\n const actions = useAuthActions(authClient);\n const [channel, setChannel] = useState<'email' | 'phone'>(initialChannel);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [name, setName] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (channel === 'email') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n if (!name.trim()) return fail('请填写昵称');\n const result = await actions.signUpWithEmail(email.trim(), password, name.trim());\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (step === 'credentials') {\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n await sendOtp();\n return;\n }\n\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const verify = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!verify.success) return fail(verify.error);\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: RegisterFormHeadlessState = {\n channel,\n step,\n email,\n phone,\n password,\n confirmPassword,\n name,\n otp,\n loading,\n error,\n setChannel: (next) => {\n setChannel(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setConfirmPassword,\n setName,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessVerifyOtpFormProps, VerifyOtpFormState } from '../types';\nimport { validateEmail, validatePhoneNumber } from '../utils';\n\nexport function VerifyOtpForm({\n authClient,\n channel,\n target,\n onSuccess,\n onError,\n children,\n}: HeadlessVerifyOtpFormProps) {\n const actions = useAuthActions(authClient);\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const resendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (channel === 'phone') {\n if (!validatePhoneNumber(target)) return fail('手机号无效');\n const result = await actions.sendPhoneOtp(target.trim());\n if (!result.success) fail(result.error);\n } else {\n if (!validateEmail(target)) return fail('邮箱无效');\n const result = await actions.sendEmailOtp(target.trim(), 'sign-in');\n if (!result.success) fail(result.error);\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n try {\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n if (channel === 'phone') {\n const result = await actions.verifyPhoneOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n } else {\n const result = await actions.signInWithEmailOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: VerifyOtpFormState = {\n channel,\n target,\n otp,\n loading,\n error,\n setOtp,\n resendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nconst overlayClass =\n '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';\nconst panelClass =\n 'bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative';\nconst closeBtnClass =\n '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';\nconst inputClass =\n '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';\nconst submitClass =\n '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';\nconst errorClass =\n 'text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed';\nconst linkBtnClass =\n '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';\n\nexport function useClientMounted() {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n return mounted;\n}\n\nexport function AuthModalPortal({ children }: { children: React.ReactNode }) {\n const mounted = useClientMounted();\n if (!mounted) return null;\n return createPortal(children, document.body);\n}\n\nexport const authModalStyles = {\n overlayClass,\n panelClass,\n closeBtnClass,\n inputClass,\n submitClass,\n errorClass,\n linkBtnClass,\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, Phone, Lock, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { ForgotPasswordModalProps } from '../types';\nimport { validatePassword, validatePhoneNumber } from '../utils';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function ForgotPasswordModal({ isOpen, onClose, onSuccess }: ForgotPasswordModalProps) {\n const { requestPhonePasswordReset, resetPhonePassword } = useAuthContext();\n const [phone, setPhone] = useState('');\n const [otp, setOtp] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n const [countdown, setCountdown] = useState(0);\n\n const startCountdown = () => {\n setCountdown(60);\n const timer = setInterval(() => {\n setCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n };\n\n const handleSendCode = async () => {\n setError('');\n if (!validatePhoneNumber(phone)) {\n setError('请输入正确的手机号');\n return;\n }\n setLoading(true);\n try {\n const result = await requestPhonePasswordReset(phone.trim());\n if (!result.success) {\n setError(result.error);\n return;\n }\n startCountdown();\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n if (!validatePhoneNumber(phone)) return setError('请输入正确的手机号');\n const pwd = validatePassword(newPassword);\n if (!pwd.valid) return setError(pwd.message ?? '密码无效');\n if (newPassword !== confirmPassword) return setError('两次密码不一致');\n if (!/^\\d{4,8}$/.test(otp)) return setError('请输入验证码');\n\n setLoading(true);\n try {\n const result = await resetPhonePassword(phone.trim(), otp, newPassword);\n if (!result.success) {\n setError(result.error);\n return;\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">重置密码</h2>\n <p className=\"text-gray-500 text-sm\">请输入手机号和验证码重置密码</p>\n </div>\n\n <form onSubmit={handleSubmit} className=\"p-6\">\n <div className=\"mb-5\">\n <label htmlFor=\"reset-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-phone\"\n type=\"tel\"\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={loading}\n />\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <input\n id=\"reset-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={otp}\n onChange={(e) => setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n 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\"\n disabled={loading}\n maxLength={8}\n />\n <button\n type=\"button\"\n 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\"\n onClick={handleSendCode}\n disabled={loading || countdown > 0}\n >\n {countdown > 0 ? `${countdown}秒后重试` : '发送验证码'}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 新密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-password\"\n type={showPassword ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n placeholder=\"请输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n {error && <div className={authModalStyles.errorClass}>{error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={loading}>\n {loading ? '提交中...' : '重置密码'}\n </button>\n </form>\n </div>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Eye, EyeOff, Mail, Phone } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { SignInForm } from '../headless/SignInForm';\nimport type { LoginModalProps, SignInMode } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\nimport { ForgotPasswordModal } from './ForgotPasswordModal';\n\nconst MODE_LABELS: Record<SignInMode, string> = {\n 'phone-password': '手机密码',\n 'email-password': '邮箱密码',\n 'phone-otp': '手机验证码',\n 'email-otp': '邮箱验证码',\n};\n\nexport function LoginModal({\n isOpen,\n onClose,\n onSuccess,\n onSwitchToRegister,\n defaultMode = 'phone-password',\n}: LoginModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showForgotPassword, setShowForgotPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <SignInForm authClient={authClient} initialMode={defaultMode} onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户登录</h2>\n <p className=\"text-gray-500 text-sm\">选择登录方式并填写信息</p>\n </div>\n\n <div className=\"px-6 pt-4 flex flex-wrap gap-2\">\n {(Object.keys(MODE_LABELS) as SignInMode[]).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => state.setMode(mode)}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.mode === mode\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n {MODE_LABELS[mode]}\n </button>\n ))}\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {(state.mode === 'email-password' || state.mode === 'email-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'email-password' || state.mode === 'phone-password') && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-otp' || state.mode === 'email-otp') && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"text-right -mt-2 mb-4\">\n <button type=\"button\" onClick={() => setShowForgotPassword(true)} className={authModalStyles.linkBtnClass}>\n 忘记密码?\n </button>\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.step === 'otp'\n ? '验证并登录'\n : state.mode === 'phone-otp' || state.mode === 'email-otp'\n ? '发送验证码'\n : '登录'}\n </button>\n\n {onSwitchToRegister && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">还没有账号?</span>\n <button type=\"button\" onClick={onSwitchToRegister} className={authModalStyles.linkBtnClass}>\n 立即注册\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </SignInForm>\n </div>\n\n <ForgotPasswordModal\n isOpen={showForgotPassword}\n onClose={() => setShowForgotPassword(false)}\n onSuccess={() => {\n setShowForgotPassword(false);\n handleSuccess();\n }}\n />\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Phone, Mail, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { RegisterFormHeadless } from '../headless/RegisterForm';\nimport type { RegisterModalProps } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }: RegisterModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <RegisterFormHeadless authClient={authClient} initialChannel=\"phone\" onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户注册</h2>\n <p className=\"text-gray-500 text-sm\">请填写以下信息创建账户</p>\n </div>\n\n <div className=\"px-6 pt-4 flex gap-2\">\n <button\n type=\"button\"\n onClick={() => state.setChannel('phone')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'phone'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 手机号注册\n </button>\n <button\n type=\"button\"\n onClick={() => state.setChannel('email')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'email'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 邮箱注册\n </button>\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱 *\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'phone' && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号 *\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-name\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 昵称 *\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-name\"\n type=\"text\"\n autoComplete=\"name\"\n value={state.name}\n onChange={(e) => state.setName(e.target.value)}\n placeholder=\"请输入昵称\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.step === 'credentials' && (\n <>\n <div className=\"mb-5\">\n <label htmlFor=\"register-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码(至少6位)\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"register-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.confirmPassword}\n onChange={(e) => state.setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={state.loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n </>\n )}\n\n {state.channel === 'phone' && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码 *\n </label>\n <input\n id=\"register-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n 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\"\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.channel === 'phone' && state.step === 'credentials'\n ? '发送验证码'\n : state.channel === 'phone' && state.step === 'otp'\n ? '完成注册'\n : '注册'}\n </button>\n\n {onSwitchToLogin && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">已有账号?</span>\n <button type=\"button\" onClick={onSwitchToLogin} className={authModalStyles.linkBtnClass}>\n 立即登录\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </RegisterFormHeadless>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { AuthGuardProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function AuthGuard({ children, fallback, requireAuth = true }: AuthGuardProps) {\n const { isAuthenticated, loading, refreshSession } = useAuthContext();\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n if (!loading && requireAuth && !isAuthenticated) {\n setShowLoginModal(true);\n setShowRegisterModal(false);\n }\n }, [loading, requireAuth, isAuthenticated]);\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-3\">\n <div className=\"w-8 h-8 border-[3px] border-gray-200 border-t-blue-500 rounded-full animate-spin\" />\n <div>验证登录状态...</div>\n </div>\n );\n }\n\n if (requireAuth && !isAuthenticated) {\n return (\n <>\n {fallback ?? (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-4 p-6 text-center\">\n <div className=\"text-5xl opacity-50\">🔒</div>\n <div className=\"text-lg font-medium\">请先登录以访问此页面</div>\n <div className=\"text-sm opacity-70\">登录或注册后即可查看相关内容</div>\n <div className=\"flex gap-3 mt-2\">\n <button\n type=\"button\"\n className=\"px-4 py-2 rounded-lg bg-blue-500 text-white text-sm font-medium hover:bg-blue-600 transition-colors\"\n onClick={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n >\n 登录\n </button>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n >\n 注册\n </button>\n </div>\n </div>\n )}\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </>\n );\n }\n\n return <>{children}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { LogOut, LogIn, User } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { UserMenuProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function UserMenu({ customMenuItems = [], className }: UserMenuProps) {\n const { user, isAuthenticated, signOut, refreshSession } = useAuthContext();\n const [isOpen, setIsOpen] = useState(false);\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n const handleGlobalClick = () => setIsOpen(false);\n if (isOpen) document.addEventListener('click', handleGlobalClick);\n return () => document.removeEventListener('click', handleGlobalClick);\n }, [isOpen]);\n\n const visibleCustomMenuItems = customMenuItems.filter((item) => {\n if (item.requireAuth === true) return isAuthenticated;\n if (item.requireAuth === false) return !isAuthenticated;\n return true;\n });\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n const displayName = user?.name || user?.phoneNumber || user?.email || '用户';\n\n return (\n <div className={`relative inline-block ${className ?? ''}`}>\n <button\n type=\"button\"\n 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\"\n onClick={() => setIsOpen((v) => !v)}\n >\n <User size={24} />\n {isAuthenticated && user && (\n <span className=\"max-w-[120px] overflow-hidden text-ellipsis whitespace-nowrap\">{displayName}</span>\n )}\n </button>\n\n {isOpen && (\n <div\n 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\"\n onClick={(e) => e.stopPropagation()}\n >\n {isAuthenticated && user ? (\n <>\n <div className=\"p-3 mb-2 bg-slate-50 rounded-lg\">\n <div className=\"text-sm font-semibold text-slate-800 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.name || '未设置名称'}\n </div>\n <div className=\"text-xs text-slate-500 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.phoneNumber || user.email}\n </div>\n {user.role && (\n <div className=\"text-xs text-blue-500 font-medium\">{user.role === 'admin' ? '管理员' : '普通用户'}</div>\n )}\n </div>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n 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\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n\n <div className=\"h-px bg-slate-200 my-2\" />\n <button\n type=\"button\"\n 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\"\n onClick={async () => {\n await signOut();\n setIsOpen(false);\n }}\n >\n <LogOut size={16} />\n <span>退出登录</span>\n </button>\n </>\n ) : (\n <>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowLoginModal(true);\n setIsOpen(false);\n }}\n >\n <LogIn size={16} />\n <span>登录</span>\n </button>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowRegisterModal(true);\n setIsOpen(false);\n }}\n >\n <User size={16} />\n <span>注册</span>\n </button>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n 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\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n )}\n\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/common/auth/components/headless/SignInForm.tsx","../../../../src/common/auth/components/headless/RegisterForm.tsx","../../../../src/common/auth/components/headless/VerifyOtpForm.tsx","../../../../src/common/auth/components/styled/modal-shared.tsx","../../../../src/common/auth/components/styled/ForgotPasswordModal.tsx","../../../../src/common/auth/components/styled/LoginModal.tsx","../../../../src/common/auth/components/styled/RegisterModal.tsx","../../../../src/common/auth/components/styled/AuthGuard.tsx","../../../../src/common/auth/components/styled/UserMenu.tsx"],"names":["useAuthActions","useState","validatePhoneNumber","validateEmail","validatePassword","React","useEffect","createPortal","useAuthContext","X","Phone","Lock","EyeOff","Eye","Mail","User","LogOut","LogIn"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessSignInFormProps, SignInFormState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function SignInForm({\n authClient,\n initialMode = 'email-password',\n onSuccess,\n onError,\n children,\n}: HeadlessSignInFormProps) {\n const actions = useAuthActions(authClient);\n const [mode, setMode] = useState(initialMode);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (mode === 'phone-otp') {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } else if (mode === 'email-otp') {\n if (!validateEmail(email)) {\n fail('请输入正确的邮箱');\n return;\n }\n const result = await actions.sendEmailOtp(email.trim(), 'sign-in');\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (mode === 'email-password') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithEmail(email.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-password') {\n if (!validatePhoneNumber(phone)) return fail('请输入正确的手机号');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithPhonePassword(phone.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'email-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.signInWithEmailOtp(email.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n }\n } finally {\n setLoading(false);\n }\n };\n\n const state: SignInFormState = {\n mode,\n step,\n email,\n phone,\n password,\n otp,\n loading,\n error,\n setMode: (next) => {\n setMode(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessRegisterFormProps, RegisterFormHeadlessState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function RegisterFormHeadless({\n authClient,\n initialChannel = 'email',\n onSuccess,\n onError,\n children,\n}: HeadlessRegisterFormProps) {\n const actions = useAuthActions(authClient);\n const [channel, setChannel] = useState<'email' | 'phone'>(initialChannel);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [name, setName] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const pwd = validatePassword(password);\n if (!pwd.valid) {\n fail(pwd.message ?? '密码无效');\n return;\n }\n if (password !== confirmPassword) {\n fail('两次密码不一致');\n return;\n }\n\n const intentResponse = await fetch('/api/auth/phone-signup-intent', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ phoneNumber: phone.trim(), password }),\n });\n if (!intentResponse.ok) {\n fail('无法保存注册信息,请稍后重试');\n return;\n }\n\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (channel === 'email') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n if (!name.trim()) return fail('请填写昵称');\n const result = await actions.signUpWithEmail(email.trim(), password, name.trim());\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (step === 'credentials') {\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n await sendOtp();\n return;\n }\n\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const verify = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!verify.success) return fail(verify.error);\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: RegisterFormHeadlessState = {\n channel,\n step,\n email,\n phone,\n password,\n confirmPassword,\n name,\n otp,\n loading,\n error,\n setChannel: (next) => {\n setChannel(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setConfirmPassword,\n setName,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessVerifyOtpFormProps, VerifyOtpFormState } from '../types';\nimport { validateEmail, validatePhoneNumber } from '../utils';\n\nexport function VerifyOtpForm({\n authClient,\n channel,\n target,\n onSuccess,\n onError,\n children,\n}: HeadlessVerifyOtpFormProps) {\n const actions = useAuthActions(authClient);\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const resendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (channel === 'phone') {\n if (!validatePhoneNumber(target)) return fail('手机号无效');\n const result = await actions.sendPhoneOtp(target.trim());\n if (!result.success) fail(result.error);\n } else {\n if (!validateEmail(target)) return fail('邮箱无效');\n const result = await actions.sendEmailOtp(target.trim(), 'sign-in');\n if (!result.success) fail(result.error);\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n try {\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n if (channel === 'phone') {\n const result = await actions.verifyPhoneOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n } else {\n const result = await actions.signInWithEmailOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: VerifyOtpFormState = {\n channel,\n target,\n otp,\n loading,\n error,\n setOtp,\n resendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nconst overlayClass =\n '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';\nconst panelClass =\n 'bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative';\nconst closeBtnClass =\n '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';\nconst inputClass =\n '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';\nconst submitClass =\n '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';\nconst errorClass =\n 'text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed';\nconst linkBtnClass =\n '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';\n\nexport function useClientMounted() {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n return mounted;\n}\n\nexport function AuthModalPortal({ children }: { children: React.ReactNode }) {\n const mounted = useClientMounted();\n if (!mounted) return null;\n return createPortal(children, document.body);\n}\n\nexport const authModalStyles = {\n overlayClass,\n panelClass,\n closeBtnClass,\n inputClass,\n submitClass,\n errorClass,\n linkBtnClass,\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, Phone, Lock, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { ForgotPasswordModalProps } from '../types';\nimport { validatePassword, validatePhoneNumber } from '../utils';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function ForgotPasswordModal({ isOpen, onClose, onSuccess }: ForgotPasswordModalProps) {\n const { requestPhonePasswordReset, resetPhonePassword } = useAuthContext();\n const [phone, setPhone] = useState('');\n const [otp, setOtp] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n const [countdown, setCountdown] = useState(0);\n\n const startCountdown = () => {\n setCountdown(60);\n const timer = setInterval(() => {\n setCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n };\n\n const handleSendCode = async () => {\n setError('');\n if (!validatePhoneNumber(phone)) {\n setError('请输入正确的手机号');\n return;\n }\n setLoading(true);\n try {\n const result = await requestPhonePasswordReset(phone.trim());\n if (!result.success) {\n setError(result.error);\n return;\n }\n startCountdown();\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n if (!validatePhoneNumber(phone)) return setError('请输入正确的手机号');\n const pwd = validatePassword(newPassword);\n if (!pwd.valid) return setError(pwd.message ?? '密码无效');\n if (newPassword !== confirmPassword) return setError('两次密码不一致');\n if (!/^\\d{4,8}$/.test(otp)) return setError('请输入验证码');\n\n setLoading(true);\n try {\n const result = await resetPhonePassword(phone.trim(), otp, newPassword);\n if (!result.success) {\n setError(result.error);\n return;\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">重置密码</h2>\n <p className=\"text-gray-500 text-sm\">请输入手机号和验证码重置密码</p>\n </div>\n\n <form onSubmit={handleSubmit} className=\"p-6\">\n <div className=\"mb-5\">\n <label htmlFor=\"reset-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-phone\"\n type=\"tel\"\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={loading}\n />\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <input\n id=\"reset-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={otp}\n onChange={(e) => setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n 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\"\n disabled={loading}\n maxLength={8}\n />\n <button\n type=\"button\"\n 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\"\n onClick={handleSendCode}\n disabled={loading || countdown > 0}\n >\n {countdown > 0 ? `${countdown}秒后重试` : '发送验证码'}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 新密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-password\"\n type={showPassword ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n placeholder=\"请输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n {error && <div className={authModalStyles.errorClass}>{error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={loading}>\n {loading ? '提交中...' : '重置密码'}\n </button>\n </form>\n </div>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Eye, EyeOff, Mail, Phone } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { SignInForm } from '../headless/SignInForm';\nimport type { LoginModalProps, SignInMode } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\nimport { ForgotPasswordModal } from './ForgotPasswordModal';\n\nconst MODE_LABELS: Record<SignInMode, string> = {\n 'phone-password': '手机密码',\n 'email-password': '邮箱密码',\n 'phone-otp': '手机验证码',\n 'email-otp': '邮箱验证码',\n};\n\nexport function LoginModal({\n isOpen,\n onClose,\n onSuccess,\n onSwitchToRegister,\n defaultMode = 'phone-password',\n}: LoginModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showForgotPassword, setShowForgotPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <SignInForm authClient={authClient} initialMode={defaultMode} onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户登录</h2>\n <p className=\"text-gray-500 text-sm\">选择登录方式并填写信息</p>\n </div>\n\n <div className=\"px-6 pt-4 flex flex-wrap gap-2\">\n {(Object.keys(MODE_LABELS) as SignInMode[]).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => state.setMode(mode)}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.mode === mode\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n {MODE_LABELS[mode]}\n </button>\n ))}\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {(state.mode === 'email-password' || state.mode === 'email-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'email-password' || state.mode === 'phone-password') && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-otp' || state.mode === 'email-otp') && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"text-right -mt-2 mb-4\">\n <button type=\"button\" onClick={() => setShowForgotPassword(true)} className={authModalStyles.linkBtnClass}>\n 忘记密码?\n </button>\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.step === 'otp'\n ? '验证并登录'\n : state.mode === 'phone-otp' || state.mode === 'email-otp'\n ? '发送验证码'\n : '登录'}\n </button>\n\n {onSwitchToRegister && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">还没有账号?</span>\n <button type=\"button\" onClick={onSwitchToRegister} className={authModalStyles.linkBtnClass}>\n 立即注册\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </SignInForm>\n </div>\n\n <ForgotPasswordModal\n isOpen={showForgotPassword}\n onClose={() => setShowForgotPassword(false)}\n onSuccess={() => {\n setShowForgotPassword(false);\n handleSuccess();\n }}\n />\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Phone, Mail, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { RegisterFormHeadless } from '../headless/RegisterForm';\nimport type { RegisterModalProps } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }: RegisterModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <RegisterFormHeadless authClient={authClient} initialChannel=\"phone\" onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户注册</h2>\n <p className=\"text-gray-500 text-sm\">请填写以下信息创建账户</p>\n </div>\n\n <div className=\"px-6 pt-4 flex gap-2\">\n <button\n type=\"button\"\n onClick={() => state.setChannel('phone')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'phone'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 手机号注册\n </button>\n <button\n type=\"button\"\n onClick={() => state.setChannel('email')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'email'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 邮箱注册\n </button>\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱 *\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'phone' && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号 *\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-name\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 昵称 *\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-name\"\n type=\"text\"\n autoComplete=\"name\"\n value={state.name}\n onChange={(e) => state.setName(e.target.value)}\n placeholder=\"请输入昵称\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.step === 'credentials' && (\n <>\n <div className=\"mb-5\">\n <label htmlFor=\"register-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码(至少6位)\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"register-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.confirmPassword}\n onChange={(e) => state.setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n 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\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={state.loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n </>\n )}\n\n {state.channel === 'phone' && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码 *\n </label>\n <input\n id=\"register-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n 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\"\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.channel === 'phone' && state.step === 'credentials'\n ? '发送验证码'\n : state.channel === 'phone' && state.step === 'otp'\n ? '完成注册'\n : '注册'}\n </button>\n\n {onSwitchToLogin && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">已有账号?</span>\n <button type=\"button\" onClick={onSwitchToLogin} className={authModalStyles.linkBtnClass}>\n 立即登录\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </RegisterFormHeadless>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { AuthGuardProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function AuthGuard({ children, fallback, requireAuth = true }: AuthGuardProps) {\n const { isAuthenticated, loading, refreshSession } = useAuthContext();\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n if (!loading && requireAuth && !isAuthenticated) {\n setShowLoginModal(true);\n setShowRegisterModal(false);\n }\n }, [loading, requireAuth, isAuthenticated]);\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-3\">\n <div className=\"w-8 h-8 border-[3px] border-gray-200 border-t-blue-500 rounded-full animate-spin\" />\n <div>验证登录状态...</div>\n </div>\n );\n }\n\n if (requireAuth && !isAuthenticated) {\n return (\n <>\n {fallback ?? (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-4 p-6 text-center\">\n <div className=\"text-5xl opacity-50\">🔒</div>\n <div className=\"text-lg font-medium\">请先登录以访问此页面</div>\n <div className=\"text-sm opacity-70\">登录或注册后即可查看相关内容</div>\n <div className=\"flex gap-3 mt-2\">\n <button\n type=\"button\"\n className=\"px-4 py-2 rounded-lg bg-blue-500 text-white text-sm font-medium hover:bg-blue-600 transition-colors\"\n onClick={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n >\n 登录\n </button>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n >\n 注册\n </button>\n </div>\n </div>\n )}\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </>\n );\n }\n\n return <>{children}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { LogOut, LogIn, User } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { UserMenuProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function UserMenu({ customMenuItems = [], className }: UserMenuProps) {\n const { user, isAuthenticated, signOut, refreshSession } = useAuthContext();\n const [isOpen, setIsOpen] = useState(false);\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n const handleGlobalClick = () => setIsOpen(false);\n if (isOpen) document.addEventListener('click', handleGlobalClick);\n return () => document.removeEventListener('click', handleGlobalClick);\n }, [isOpen]);\n\n const visibleCustomMenuItems = customMenuItems.filter((item) => {\n if (item.requireAuth === true) return isAuthenticated;\n if (item.requireAuth === false) return !isAuthenticated;\n return true;\n });\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n const displayName = user?.name || user?.phoneNumber || user?.email || '用户';\n\n return (\n <div className={`relative inline-block ${className ?? ''}`}>\n <button\n type=\"button\"\n 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\"\n onClick={() => setIsOpen((v) => !v)}\n >\n <User size={24} />\n {isAuthenticated && user && (\n <span className=\"max-w-[120px] overflow-hidden text-ellipsis whitespace-nowrap\">{displayName}</span>\n )}\n </button>\n\n {isOpen && (\n <div\n 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\"\n onClick={(e) => e.stopPropagation()}\n >\n {isAuthenticated && user ? (\n <>\n <div className=\"p-3 mb-2 bg-slate-50 rounded-lg\">\n <div className=\"text-sm font-semibold text-slate-800 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.name || '未设置名称'}\n </div>\n <div className=\"text-xs text-slate-500 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.phoneNumber || user.email}\n </div>\n {user.role && (\n <div className=\"text-xs text-blue-500 font-medium\">{user.role === 'admin' ? '管理员' : '普通用户'}</div>\n )}\n </div>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n 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\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n\n <div className=\"h-px bg-slate-200 my-2\" />\n <button\n type=\"button\"\n 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\"\n onClick={async () => {\n await signOut();\n setIsOpen(false);\n }}\n >\n <LogOut size={16} />\n <span>退出登录</span>\n </button>\n </>\n ) : (\n <>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowLoginModal(true);\n setIsOpen(false);\n }}\n >\n <LogIn size={16} />\n <span>登录</span>\n </button>\n <button\n type=\"button\"\n 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\"\n onClick={() => {\n setShowRegisterModal(true);\n setIsOpen(false);\n }}\n >\n <User size={16} />\n <span>注册</span>\n </button>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n 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\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n )}\n\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </div>\n );\n}\n"]}
@@ -159,6 +159,24 @@ function RegisterFormHeadless({
159
159
  fail("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
160
160
  return;
161
161
  }
162
+ const pwd = validatePassword(password);
163
+ if (!pwd.valid) {
164
+ fail(pwd.message ?? "\u5BC6\u7801\u65E0\u6548");
165
+ return;
166
+ }
167
+ if (password !== confirmPassword) {
168
+ fail("\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4");
169
+ return;
170
+ }
171
+ const intentResponse = await fetch("/api/auth/phone-signup-intent", {
172
+ method: "POST",
173
+ headers: { "Content-Type": "application/json" },
174
+ body: JSON.stringify({ phoneNumber: phone.trim(), password })
175
+ });
176
+ if (!intentResponse.ok) {
177
+ fail("\u65E0\u6CD5\u4FDD\u5B58\u6CE8\u518C\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
178
+ return;
179
+ }
162
180
  const result = await actions.sendPhoneOtp(phone.trim());
163
181
  if (!result.success) {
164
182
  fail(result.error);