@proveanything/smartlinks-auth-ui 0.1.0 → 0.1.2
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.
- package/README.md +103 -5
- package/dist/api.d.ts +8 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/components/AccountManagement.d.ts +5 -0
- package/dist/components/AccountManagement.d.ts.map +1 -0
- package/dist/components/AuthUIPreview.d.ts +2 -0
- package/dist/components/AuthUIPreview.d.ts.map +1 -1
- package/dist/components/MagicLinkForm.d.ts +10 -0
- package/dist/components/MagicLinkForm.d.ts.map +1 -0
- package/dist/components/OTPInput.d.ts +11 -0
- package/dist/components/OTPInput.d.ts.map +1 -0
- package/dist/components/PhoneAuthForm.d.ts.map +1 -1
- package/dist/components/PhoneInput.d.ts +11 -0
- package/dist/components/PhoneInput.d.ts.map +1 -0
- package/dist/components/ProviderButtons.d.ts +3 -0
- package/dist/components/ProviderButtons.d.ts.map +1 -1
- package/dist/context/AuthContext.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.css.map +1 -1
- package/dist/index.esm.js +720 -66
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +719 -64
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +78 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/AuthContainer.tsx","../src/components/EmailAuthForm.tsx","../src/components/ProviderButtons.tsx","../src/components/PhoneAuthForm.tsx","../src/components/PasswordResetForm.tsx","../src/api.ts","../src/utils/tokenStorage.ts","../src/context/AuthContext.tsx","../src/components/ProtectedRoute.tsx","../src/components/AuthUIPreview.tsx","../src/index.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\r\nimport './AuthContainer.css';\r\nimport type { AuthUIConfig } from '../types';\r\n\r\ninterface AuthContainerProps {\r\n children: React.ReactNode;\r\n theme?: 'light' | 'dark';\r\n className?: string;\r\n config?: AuthUIConfig;\r\n}\r\n\r\nexport const AuthContainer: React.FC<AuthContainerProps> = ({\r\n children,\r\n theme = 'light',\r\n className = '',\r\n config,\r\n}) => {\r\n // Apply CSS variables for customization\r\n useEffect(() => {\r\n if (!config?.branding) return;\r\n\r\n const root = document.documentElement;\r\n const { branding } = config;\r\n \r\n if (branding.primaryColor) {\r\n root.style.setProperty('--auth-primary-color', branding.primaryColor);\r\n }\r\n if (branding.secondaryColor) {\r\n root.style.setProperty('--auth-secondary-color', branding.secondaryColor);\r\n }\r\n if (branding.backgroundColor) {\r\n root.style.setProperty('--auth-bg-color', branding.backgroundColor);\r\n }\r\n if (branding.fontFamily) {\r\n root.style.setProperty('--auth-font-family', branding.fontFamily);\r\n }\r\n\r\n // Inject custom CSS if provided\r\n if (branding.customCss) {\r\n const styleId = 'auth-custom-styles';\r\n let styleEl = document.getElementById(styleId);\r\n \r\n if (!styleEl) {\r\n styleEl = document.createElement('style');\r\n styleEl.id = styleId;\r\n document.head.appendChild(styleEl);\r\n }\r\n \r\n styleEl.textContent = branding.customCss;\r\n }\r\n\r\n return () => {\r\n // Cleanup on unmount\r\n root.style.removeProperty('--auth-primary-color');\r\n root.style.removeProperty('--auth-secondary-color');\r\n root.style.removeProperty('--auth-bg-color');\r\n root.style.removeProperty('--auth-font-family');\r\n };\r\n }, [config]);\r\n\r\n const title = config?.branding?.title || 'Smartlinks Auth';\r\n const subtitle = config?.branding?.subtitle || 'Sign in to your account';\r\n const logoUrl = config?.branding?.logoUrl;\r\n\r\n return (\r\n <div className={`auth-container auth-theme-${theme} ${className}`}>\r\n <div className=\"auth-card\" style={{ borderRadius: config?.branding?.buttonStyle === 'square' ? '4px' : '12px' }}>\r\n <div className=\"auth-header\">\r\n <div className=\"auth-logo\">\r\n {logoUrl ? (\r\n <img src={logoUrl} alt=\"Logo\" style={{ width: 40, height: 40, objectFit: 'contain' }} />\r\n ) : (\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect width=\"40\" height=\"40\" rx=\"8\" fill=\"url(#gradient)\" />\r\n <path\r\n d=\"M20 10L12 18L20 26L28 18L20 10Z\"\r\n fill=\"white\"\r\n fillOpacity=\"0.9\"\r\n />\r\n <path\r\n d=\"M20 18L16 22L20 26L24 22L20 18Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id=\"gradient\"\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"40\"\r\n y2=\"40\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"var(--auth-primary-color, #3B82F6)\" />\r\n <stop offset=\"1\" stopColor=\"var(--auth-secondary-color, #1D4ED8)\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n )}\r\n </div>\r\n <h1 className=\"auth-title\">{title}</h1>\r\n {subtitle && <p className=\"auth-subtitle\">{subtitle}</p>}\r\n </div>\r\n <div className=\"auth-content\">{children}</div>\r\n {(config?.branding?.termsUrl || config?.branding?.privacyUrl) && (\r\n <div className=\"auth-footer\">\r\n {config.branding.termsUrl && <a href={config.branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\">Terms</a>}\r\n {config.branding.termsUrl && config.branding.privacyUrl && <span>•</span>}\r\n {config.branding.privacyUrl && <a href={config.branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\">Privacy</a>}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport type { AuthFormData } from '../types';\r\nimport './AuthForm.css';\r\n\r\ninterface EmailAuthFormProps {\r\n mode: 'login' | 'register';\r\n onSubmit: (data: AuthFormData) => Promise<void>;\r\n onModeSwitch: () => void;\r\n onForgotPassword: () => void;\r\n loading: boolean;\r\n error?: string;\r\n}\r\n\r\nexport const EmailAuthForm: React.FC<EmailAuthFormProps> = ({\r\n mode,\r\n onSubmit,\r\n onModeSwitch,\r\n onForgotPassword,\r\n loading,\r\n error,\r\n}) => {\r\n const [formData, setFormData] = useState<AuthFormData>({\r\n email: '',\r\n password: '',\r\n displayName: '',\r\n });\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(formData);\r\n };\r\n\r\n const handleChange = (field: keyof AuthFormData, value: string) => {\r\n setFormData(prev => ({ ...prev, [field]: value }));\r\n };\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">\r\n {mode === 'login' ? 'Sign in' : 'Create account'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {mode === 'login'\r\n ? 'Welcome back! Please enter your credentials.'\r\n : 'Get started by creating your account.'}\r\n </p>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\"/>\r\n </svg>\r\n {error}\r\n </div>\r\n )}\r\n\r\n {mode === 'register' && (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"displayName\" className=\"auth-label\">\r\n Full Name\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"displayName\"\r\n className=\"auth-input\"\r\n value={formData.displayName || ''}\r\n onChange={(e) => handleChange('displayName', e.target.value)}\r\n required={mode === 'register'}\r\n disabled={loading}\r\n placeholder=\"John Doe\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"email\" className=\"auth-label\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n className=\"auth-input\"\r\n value={formData.email || ''}\r\n onChange={(e) => handleChange('email', e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n />\r\n </div>\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"password\" className=\"auth-label\">\r\n Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"password\"\r\n className=\"auth-input\"\r\n value={formData.password || ''}\r\n onChange={(e) => handleChange('password', e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"••••••••\"\r\n autoComplete={mode === 'login' ? 'current-password' : 'new-password'}\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n {mode === 'login' && (\r\n <div className=\"auth-form-footer\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link\"\r\n onClick={onForgotPassword}\r\n disabled={loading}\r\n >\r\n Forgot password?\r\n </button>\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : mode === 'login' ? (\r\n 'Sign in'\r\n ) : (\r\n 'Create account'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <span>\r\n {mode === 'login' ? \"Don't have an account?\" : 'Already have an account?'}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onModeSwitch}\r\n disabled={loading}\r\n >\r\n {mode === 'login' ? 'Sign up' : 'Sign in'}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import React from 'react';\r\nimport type { AuthProvider } from '../types';\r\nimport './AuthForm.css';\r\n\r\ninterface ProviderButtonsProps {\r\n enabledProviders: AuthProvider[];\r\n onGoogleLogin: () => Promise<void>;\r\n onPhoneLogin: () => void;\r\n loading: boolean;\r\n}\r\n\r\nexport const ProviderButtons: React.FC<ProviderButtonsProps> = ({\r\n enabledProviders,\r\n onGoogleLogin,\r\n onPhoneLogin,\r\n loading,\r\n}) => {\r\n if (enabledProviders.length === 0) return null;\r\n\r\n return (\r\n <>\r\n <div className=\"auth-or-divider\">\r\n <span>or continue with</span>\r\n </div>\r\n\r\n <div className=\"auth-provider-buttons\">\r\n {enabledProviders.includes('google') && (\r\n <button\r\n type=\"button\"\r\n className=\"auth-provider-button\"\r\n onClick={onGoogleLogin}\r\n disabled={loading}\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M19.6 10.227c0-.709-.064-1.39-.182-2.045H10v3.868h5.382a4.6 4.6 0 01-1.996 3.018v2.51h3.232c1.891-1.742 2.982-4.305 2.982-7.35z\"\r\n fill=\"#4285F4\"\r\n />\r\n <path\r\n d=\"M10 20c2.7 0 4.964-.895 6.618-2.423l-3.232-2.509c-.895.6-2.04.955-3.386.955-2.605 0-4.81-1.76-5.595-4.123H1.064v2.59A9.996 9.996 0 0010 20z\"\r\n fill=\"#34A853\"\r\n />\r\n <path\r\n d=\"M4.405 11.9c-.2-.6-.314-1.24-.314-1.9 0-.66.114-1.3.314-1.9V5.51H1.064A9.996 9.996 0 000 10c0 1.614.386 3.14 1.064 4.49l3.34-2.59z\"\r\n fill=\"#FBBC05\"\r\n />\r\n <path\r\n d=\"M10 3.977c1.468 0 2.786.505 3.823 1.496l2.868-2.868C14.959.99 12.695 0 10 0 6.09 0 2.71 2.24 1.064 5.51l3.34 2.59C5.19 5.736 7.395 3.977 10 3.977z\"\r\n fill=\"#EA4335\"\r\n />\r\n </svg>\r\n Continue with Google\r\n </button>\r\n )}\r\n\r\n {enabledProviders.includes('phone') && (\r\n <button\r\n type=\"button\"\r\n className=\"auth-provider-button\"\r\n onClick={onPhoneLogin}\r\n disabled={loading}\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V15a2 2 0 01-2 2h-1C7.82 17 2 11.18 2 5V4z\"\r\n />\r\n </svg>\r\n Continue with Phone\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport './AuthForm.css';\r\n\r\ninterface PhoneAuthFormProps {\r\n onSubmit: (phoneNumber: string, verificationCode?: string) => Promise<void>;\r\n onBack: () => void;\r\n loading: boolean;\r\n error?: string;\r\n}\r\n\r\nexport const PhoneAuthForm: React.FC<PhoneAuthFormProps> = ({\r\n onSubmit,\r\n onBack,\r\n loading,\r\n error,\r\n}) => {\r\n const [phoneNumber, setPhoneNumber] = useState('');\r\n const [verificationCode, setVerificationCode] = useState('');\r\n const [codeSent, setCodeSent] = useState(false);\r\n\r\n const handleSendCode = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(phoneNumber);\r\n setCodeSent(true);\r\n };\r\n\r\n const handleVerifyCode = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(phoneNumber, verificationCode);\r\n };\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={codeSent ? handleVerifyCode : handleSendCode}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">Phone Authentication</h2>\r\n <p className=\"auth-form-subtitle\">\r\n {codeSent\r\n ? 'Enter the verification code sent to your phone.'\r\n : 'Enter your phone number to receive a verification code.'}\r\n </p>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\" />\r\n </svg>\r\n {error}\r\n </div>\r\n )}\r\n\r\n {!codeSent ? (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"phoneNumber\" className=\"auth-label\">\r\n Phone Number\r\n </label>\r\n <input\r\n type=\"tel\"\r\n id=\"phoneNumber\"\r\n className=\"auth-input\"\r\n value={phoneNumber}\r\n onChange={(e) => setPhoneNumber(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"+1 (555) 123-4567\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"verificationCode\" className=\"auth-label\">\r\n Verification Code\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"verificationCode\"\r\n className=\"auth-input\"\r\n value={verificationCode}\r\n onChange={(e) => setVerificationCode(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"123456\"\r\n maxLength={6}\r\n pattern=\"[0-9]{6}\"\r\n />\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : codeSent ? (\r\n 'Verify Code'\r\n ) : (\r\n 'Send Code'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onBack}\r\n disabled={loading}\r\n >\r\n ← Back to login\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport './AuthForm.css';\r\n\r\ninterface PasswordResetFormProps {\r\n onSubmit: (emailOrPassword: string, confirmPassword?: string) => Promise<void>;\r\n onBack: () => void;\r\n loading: boolean;\r\n error?: string;\r\n success?: boolean;\r\n token?: string; // If token is present, show password reset form instead of email form\r\n}\r\n\r\nexport const PasswordResetForm: React.FC<PasswordResetFormProps> = ({\r\n onSubmit,\r\n onBack,\r\n loading,\r\n error,\r\n success,\r\n token,\r\n}) => {\r\n const [email, setEmail] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [passwordError, setPasswordError] = useState('');\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n \r\n if (token) {\r\n // Reset password with token\r\n if (password !== confirmPassword) {\r\n setPasswordError('Passwords do not match');\r\n return;\r\n }\r\n if (password.length < 6) {\r\n setPasswordError('Password must be at least 6 characters');\r\n return;\r\n }\r\n setPasswordError('');\r\n await onSubmit(password, confirmPassword);\r\n } else {\r\n // Request password reset\r\n await onSubmit(email);\r\n }\r\n };\r\n\r\n if (success) {\r\n return (\r\n <div className=\"auth-form\">\r\n <div className=\"auth-form-header\">\r\n <div style={{ textAlign: 'center', marginBottom: '1rem' }}>\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 64 64\"\r\n fill=\"none\"\r\n style={{ margin: '0 auto' }}\r\n >\r\n <circle cx=\"32\" cy=\"32\" r=\"32\" fill=\"#10b981\" fillOpacity=\"0.1\" />\r\n <path\r\n d=\"M20 32l8 8 16-16\"\r\n stroke=\"#10b981\"\r\n strokeWidth=\"4\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h2 className=\"auth-form-title\">\r\n {token ? 'Password reset!' : 'Check your email'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {token \r\n ? 'Your password has been successfully reset. You can now sign in with your new password.'\r\n : `We've sent password reset instructions to ${email}`\r\n }\r\n </p>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"auth-button auth-button-primary\"\r\n onClick={onBack}\r\n >\r\n Back to Sign in\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">\r\n {token ? 'Set new password' : 'Reset your password'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {token \r\n ? 'Enter your new password below.'\r\n : \"Enter your email address and we'll send you instructions to reset your password.\"\r\n }\r\n </p>\r\n </div>\r\n\r\n {(error || passwordError) && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\" />\r\n </svg>\r\n {error || passwordError}\r\n </div>\r\n )}\r\n\r\n {token ? (\r\n <>\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"password\" className=\"auth-label\">\r\n New Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"password\"\r\n className=\"auth-input\"\r\n value={password}\r\n onChange={(e) => setPassword(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"Enter new password\"\r\n autoComplete=\"new-password\"\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"confirmPassword\" className=\"auth-label\">\r\n Confirm Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"confirmPassword\"\r\n className=\"auth-input\"\r\n value={confirmPassword}\r\n onChange={(e) => setConfirmPassword(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"Confirm new password\"\r\n autoComplete=\"new-password\"\r\n minLength={6}\r\n />\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"email\" className=\"auth-label\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n className=\"auth-input\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n />\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : token ? (\r\n 'Reset password'\r\n ) : (\r\n 'Send reset instructions'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onBack}\r\n disabled={loading}\r\n >\r\n ← Back to Sign in\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import * as smartlinks from '@proveanything/smartlinks';\r\nimport type { AuthResponse, AuthFormData, AuthUIConfig } from './types';\r\n\r\n/**\r\n * AuthAPI - Thin wrapper around Smartlinks SDK authKit namespace\r\n * All authentication operations now use the global Smartlinks SDK\r\n */\r\nexport class AuthAPI {\r\n private clientId: string;\r\n private clientName?: string;\r\n\r\n constructor(_apiEndpoint: string, clientId: string, clientName?: string) {\r\n // apiEndpoint is kept for backward compatibility but not used\r\n // Smartlinks SDK is pre-configured globally\r\n this.clientId = clientId;\r\n this.clientName = clientName;\r\n }\r\n\r\n async login(email: string, password: string): Promise<AuthResponse> {\r\n return smartlinks.authKit.login(this.clientId, email, password) as Promise<AuthResponse>;\r\n }\r\n\r\n async register(data: AuthFormData): Promise<AuthResponse> {\r\n return smartlinks.authKit.register(this.clientId, {\r\n email: data.email!,\r\n password: data.password!,\r\n displayName: data.displayName,\r\n accountData: data.accountData,\r\n }) as Promise<AuthResponse>;\r\n }\r\n\r\n async loginWithGoogle(idToken: string): Promise<AuthResponse> {\r\n return smartlinks.authKit.googleLogin(this.clientId, idToken) as Promise<AuthResponse>;\r\n }\r\n\r\n async sendPhoneCode(phoneNumber: string): Promise<{ verificationId: string }> {\r\n return smartlinks.authKit.sendPhoneCode(this.clientId, phoneNumber);\r\n }\r\n\r\n async verifyPhoneCode(\r\n verificationId: string,\r\n code: string\r\n ): Promise<AuthResponse> {\r\n return smartlinks.authKit.verifyPhoneCode(this.clientId, verificationId, code) as Promise<AuthResponse>;\r\n }\r\n\r\n async requestPasswordReset(email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.requestPasswordReset(this.clientId, {\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async verifyResetToken(token: string): Promise<{ valid: boolean; email?: string; expiresAt?: number; message?: string }> {\r\n return smartlinks.authKit.verifyResetToken(this.clientId, token);\r\n }\r\n\r\n async completePasswordReset(token: string, newPassword: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.completePasswordReset(this.clientId, token, newPassword);\r\n }\r\n\r\n async sendEmailVerification(userId: string, email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.sendEmailVerification(this.clientId, {\r\n userId,\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async verifyEmailWithToken(token: string): Promise<AuthResponse & { message: string }> {\r\n return smartlinks.authKit.verifyEmail(this.clientId, token) as Promise<AuthResponse & { message: string }>;\r\n }\r\n\r\n async resendVerification(userId: string, email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.resendEmailVerification(this.clientId, {\r\n userId,\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async fetchConfig(): Promise<AuthUIConfig> {\r\n try {\r\n return await smartlinks.authKit.load(this.clientId) as AuthUIConfig;\r\n } catch (error) {\r\n console.warn('Failed to fetch UI config, using defaults:', error);\r\n return {\r\n branding: {\r\n title: 'Smartlinks Auth',\r\n subtitle: 'Sign in to your account',\r\n primaryColor: '#3B82F6',\r\n secondaryColor: '#1D4ED8',\r\n backgroundColor: '#e0f2fe',\r\n buttonStyle: 'rounded',\r\n fontFamily: 'Inter, sans-serif'\r\n }\r\n };\r\n }\r\n }\r\n}\r\n","import type { AuthToken, AuthUser } from '../types';\r\n\r\nconst TOKEN_KEY = 'smartlinks_auth_token';\r\nconst USER_KEY = 'smartlinks_auth_user';\r\nconst ACCOUNT_DATA_KEY = 'smartlinks_account_data';\r\n\r\nexport const tokenStorage = {\r\n saveToken(token: string, expiresAt?: number): void {\r\n const authToken: AuthToken = {\r\n token,\r\n expiresAt: expiresAt || Date.now() + 3600000, // Default 1 hour\r\n };\r\n localStorage.setItem(TOKEN_KEY, JSON.stringify(authToken));\r\n },\r\n\r\n getToken(): AuthToken | null {\r\n const stored = localStorage.getItem(TOKEN_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n const authToken: AuthToken = JSON.parse(stored);\r\n \r\n // Check if token is expired\r\n if (authToken.expiresAt && authToken.expiresAt < Date.now()) {\r\n this.clearToken();\r\n return null;\r\n }\r\n \r\n return authToken;\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearToken(): void {\r\n localStorage.removeItem(TOKEN_KEY);\r\n },\r\n\r\n saveUser(user: AuthUser): void {\r\n localStorage.setItem(USER_KEY, JSON.stringify(user));\r\n },\r\n\r\n getUser(): AuthUser | null {\r\n const stored = localStorage.getItem(USER_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n return JSON.parse(stored);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearUser(): void {\r\n localStorage.removeItem(USER_KEY);\r\n },\r\n\r\n clearAll(): void {\r\n this.clearToken();\r\n this.clearUser();\r\n this.clearAccountData();\r\n },\r\n\r\n saveAccountData(data: Record<string, any>): void {\r\n localStorage.setItem(ACCOUNT_DATA_KEY, JSON.stringify(data));\r\n },\r\n\r\n getAccountData(): Record<string, any> | null {\r\n const stored = localStorage.getItem(ACCOUNT_DATA_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n return JSON.parse(stored);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearAccountData(): void {\r\n localStorage.removeItem(ACCOUNT_DATA_KEY);\r\n },\r\n};\r\n","import React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport * as smartlinks from '@proveanything/smartlinks';\r\nimport { tokenStorage } from '../utils/tokenStorage';\r\nimport type { AuthUser } from '../types';\r\n\r\ninterface AuthContextValue {\r\n user: AuthUser | null;\r\n token: string | null;\r\n accountData: Record<string, any> | null;\r\n isAuthenticated: boolean;\r\n isLoading: boolean;\r\n login: (token: string, user: AuthUser, accountData?: Record<string, any>) => void;\r\n logout: () => Promise<void>;\r\n getToken: () => string | null;\r\n refreshToken: () => Promise<string>;\r\n}\r\n\r\nconst AuthContext = createContext<AuthContextValue | undefined>(undefined);\r\n\r\ninterface AuthProviderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {\r\n const [user, setUser] = useState<AuthUser | null>(null);\r\n const [token, setToken] = useState<string | null>(null);\r\n const [accountData, setAccountData] = useState<Record<string, any> | null>(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n // Initialize auth state from localStorage\r\n useEffect(() => {\r\n const storedToken = tokenStorage.getToken();\r\n const storedUser = tokenStorage.getUser();\r\n const storedAccountData = tokenStorage.getAccountData();\r\n\r\n if (storedToken && storedUser) {\r\n setToken(storedToken.token);\r\n setUser(storedUser);\r\n setAccountData(storedAccountData);\r\n \r\n // Set bearer token in global Smartlinks SDK\r\n // @ts-expect-error - setBearerToken exists in runtime but may not be in type definitions\r\n smartlinks.setBearerToken(storedToken.token);\r\n }\r\n \r\n setIsLoading(false);\r\n }, []);\r\n\r\n const login = useCallback((authToken: string, authUser: AuthUser, authAccountData?: Record<string, any>) => {\r\n // Store token, user, and account data\r\n tokenStorage.saveToken(authToken);\r\n tokenStorage.saveUser(authUser);\r\n if (authAccountData) {\r\n tokenStorage.saveAccountData(authAccountData);\r\n }\r\n \r\n setToken(authToken);\r\n setUser(authUser);\r\n setAccountData(authAccountData || null);\r\n \r\n // Set bearer token in global Smartlinks SDK\r\n // @ts-expect-error - setBearerToken exists in runtime but may not be in type definitions\r\n smartlinks.setBearerToken(authToken);\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n // Clear local storage\r\n tokenStorage.clearAll();\r\n setToken(null);\r\n setUser(null);\r\n setAccountData(null);\r\n \r\n // Clear bearer token from global Smartlinks SDK\r\n // @ts-expect-error - setBearerToken exists in runtime but may not be in type definitions\r\n smartlinks.setBearerToken(undefined);\r\n }, []);\r\n\r\n const getToken = useCallback((): string | null => {\r\n const storedToken = tokenStorage.getToken();\r\n return storedToken ? storedToken.token : null;\r\n }, []);\r\n\r\n const refreshToken = useCallback(async () => {\r\n throw new Error('Token refresh must be implemented via your backend API');\r\n }, []);\r\n\r\n const value: AuthContextValue = {\r\n user,\r\n token,\r\n accountData,\r\n isAuthenticated: !!token && !!user,\r\n isLoading,\r\n login,\r\n logout,\r\n getToken,\r\n refreshToken,\r\n };\r\n\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n};\r\n\r\nexport const useAuth = (): AuthContextValue => {\r\n const context = useContext(AuthContext);\r\n if (context === undefined) {\r\n throw new Error('useAuth must be used within an AuthProvider');\r\n }\r\n return context;\r\n};\r\n","import React from 'react';\r\nimport { useAuth } from '../context/AuthContext';\r\n\r\ninterface ProtectedRouteProps {\r\n children: React.ReactNode;\r\n fallback?: React.ReactNode;\r\n redirectTo?: string;\r\n}\r\n\r\nexport const ProtectedRoute: React.FC<ProtectedRouteProps> = ({\r\n children,\r\n fallback,\r\n redirectTo,\r\n}) => {\r\n const { isAuthenticated, isLoading } = useAuth();\r\n\r\n // Show loading state\r\n if (isLoading) {\r\n return <div>Loading...</div>;\r\n }\r\n\r\n // If not authenticated, redirect or show fallback\r\n if (!isAuthenticated) {\r\n if (redirectTo) {\r\n window.location.href = redirectTo;\r\n return null;\r\n }\r\n \r\n return fallback ? <>{fallback}</> : <div>Access denied. Please log in.</div>;\r\n }\r\n\r\n // Render protected content\r\n return <>{children}</>;\r\n};\r\n","import React from 'react';\r\nimport { AuthContainer } from './AuthContainer';\r\nimport type { AuthProvider, AuthUIConfig } from '../types';\r\n\r\ninterface AuthUIPreviewProps {\r\n customization?: Partial<AuthUIConfig>;\r\n enabledProviders?: AuthProvider[];\r\n theme?: 'light' | 'dark';\r\n className?: string;\r\n}\r\n\r\nexport const AuthUIPreview: React.FC<AuthUIPreviewProps> = ({\r\n customization,\r\n enabledProviders = ['email', 'google', 'phone'],\r\n theme = 'light',\r\n className,\r\n}) => {\r\n const showEmail = enabledProviders.includes('email');\r\n const showGoogle = enabledProviders.includes('google');\r\n const showPhone = enabledProviders.includes('phone');\r\n const hasProviders = showGoogle || showPhone;\r\n\r\n return (\r\n <AuthContainer theme={theme} className={className} config={customization}>\r\n {showEmail && (\r\n <div className=\"auth-form\">\r\n <div className=\"auth-form-group\">\r\n <label className=\"auth-label\">Email</label>\r\n <input\r\n type=\"email\"\r\n className=\"auth-input\"\r\n placeholder=\"Enter your email\"\r\n disabled\r\n />\r\n </div>\r\n <div className=\"auth-form-group\">\r\n <label className=\"auth-label\">Password</label>\r\n <input\r\n type=\"password\"\r\n className=\"auth-input\"\r\n placeholder=\"Enter your password\"\r\n disabled\r\n />\r\n </div>\r\n <button className=\"auth-button auth-button-primary\" disabled>\r\n Sign In\r\n </button>\r\n <div style={{ textAlign: 'center', marginTop: '1rem' }}>\r\n <button className=\"auth-link\" disabled>\r\n Forgot password?\r\n </button>\r\n </div>\r\n <div style={{ textAlign: 'center', marginTop: '0.5rem', fontSize: '0.875rem', color: 'var(--auth-text-muted, #6B7280)' }}>\r\n Don't have an account?{' '}\r\n <button className=\"auth-link\" disabled>\r\n Sign up\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n \r\n {hasProviders && (\r\n <>\r\n {showEmail && (\r\n <div className=\"auth-or-divider\">\r\n <span>or continue with</span>\r\n </div>\r\n )}\r\n <div className=\"auth-provider-buttons\">\r\n {showGoogle && (\r\n <button className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.874 2.684-6.615z\"\r\n fill=\"#4285F4\"\r\n />\r\n <path\r\n d=\"M9 18c2.43 0 4.467-.806 5.956-2.183l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332C2.438 15.983 5.482 18 9 18z\"\r\n fill=\"#34A853\"\r\n />\r\n <path\r\n d=\"M3.964 10.707c-.18-.54-.282-1.117-.282-1.707 0-.593.102-1.167.282-1.707V4.961H.957C.347 6.175 0 7.548 0 9s.348 2.825.957 4.039l3.007-2.332z\"\r\n fill=\"#FBBC05\"\r\n />\r\n <path\r\n d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0 5.482 0 2.438 2.017.957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58z\"\r\n fill=\"#EA4335\"\r\n />\r\n </svg>\r\n <span>Google</span>\r\n </button>\r\n )}\r\n {showPhone && (\r\n <button className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\r\n </svg>\r\n <span>Phone</span>\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </AuthContainer>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { AuthContainer } from './components/AuthContainer';\r\nimport { EmailAuthForm } from './components/EmailAuthForm';\r\nimport { ProviderButtons } from './components/ProviderButtons';\r\nimport { PhoneAuthForm } from './components/PhoneAuthForm';\r\nimport { PasswordResetForm } from './components/PasswordResetForm';\r\nimport { AuthAPI } from './api';\r\nimport { useAuth } from './context/AuthContext';\r\nimport type { SmartlinksAuthUIProps, AuthMode, AuthFormData, URLAuthParams } from './types';\r\n\r\nexport const SmartlinksAuthUI: React.FC<SmartlinksAuthUIProps> = ({\r\n apiEndpoint,\r\n clientId,\r\n clientName,\r\n accountData,\r\n onAuthSuccess,\r\n onAuthError,\r\n enabledProviders = ['email', 'google', 'phone'],\r\n redirectUrl,\r\n theme = 'light',\r\n className,\r\n customization,\r\n skipConfigFetch = false,\r\n}) => {\r\n const [mode, setMode] = useState<AuthMode>('login');\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string>();\r\n const [resetSuccess, setResetSuccess] = useState(false);\r\n const [authSuccess, setAuthSuccess] = useState(false);\r\n const [successMessage, setSuccessMessage] = useState<string>();\r\n const [verificationId, setVerificationId] = useState<string>();\r\n const [showResendVerification, setShowResendVerification] = useState(false);\r\n const [resendEmail, setResendEmail] = useState<string>();\r\n const [showRequestNewReset, setShowRequestNewReset] = useState(false);\r\n const [resetRequestEmail, setResetRequestEmail] = useState<string>();\r\n const [resetToken, setResetToken] = useState<string>(); // Store the reset token from URL\r\n const [config, setConfig] = useState<any>(null);\r\n const [configLoading, setConfigLoading] = useState(!skipConfigFetch);\r\n\r\n const api = new AuthAPI(apiEndpoint, clientId, clientName);\r\n const auth = useAuth();\r\n\r\n // Get the effective redirect URL (use prop or default to current page)\r\n const getRedirectUrl = () => {\r\n if (redirectUrl) return redirectUrl;\r\n \r\n // Get the full current URL including hash routes\r\n // Remove any existing query parameters to avoid duplication\r\n const currentUrl = window.location.href.split('?')[0];\r\n return currentUrl;\r\n };\r\n\r\n // Fetch UI configuration\r\n useEffect(() => {\r\n if (skipConfigFetch) {\r\n setConfig(customization || {});\r\n return;\r\n }\r\n\r\n const fetchConfig = async () => {\r\n try {\r\n // Check localStorage cache first\r\n const cacheKey = `auth_ui_config_${clientId || 'default'}`;\r\n const cached = localStorage.getItem(cacheKey);\r\n \r\n if (cached) {\r\n const { config: cachedConfig, timestamp } = JSON.parse(cached);\r\n const age = Date.now() - timestamp;\r\n \r\n // Use cache if less than 1 hour old\r\n if (age < 3600000) {\r\n setConfig({ ...cachedConfig, ...customization });\r\n setConfigLoading(false);\r\n \r\n // Fetch in background to update cache\r\n api.fetchConfig().then(freshConfig => {\r\n localStorage.setItem(cacheKey, JSON.stringify({\r\n config: freshConfig,\r\n timestamp: Date.now()\r\n }));\r\n });\r\n \r\n return;\r\n }\r\n }\r\n\r\n // Fetch from API\r\n const fetchedConfig = await api.fetchConfig();\r\n \r\n // Merge with customization props (props take precedence)\r\n const mergedConfig = { ...fetchedConfig, ...customization };\r\n \r\n setConfig(mergedConfig);\r\n \r\n // Cache the fetched config\r\n localStorage.setItem(cacheKey, JSON.stringify({\r\n config: fetchedConfig,\r\n timestamp: Date.now()\r\n }));\r\n \r\n } catch (err) {\r\n console.error('Failed to fetch config:', err);\r\n setConfig(customization || {});\r\n } finally {\r\n setConfigLoading(false);\r\n }\r\n };\r\n\r\n fetchConfig();\r\n }, [apiEndpoint, clientId, customization, skipConfigFetch]);\r\n\r\n // Handle URL-based auth flows (email verification, password reset)\r\n useEffect(() => {\r\n // Helper to get URL parameters from either hash or search\r\n const getUrlParams = () => {\r\n // First check if there are params in the hash (for hash routing)\r\n const hash = window.location.hash;\r\n const hashQueryIndex = hash.indexOf('?');\r\n \r\n if (hashQueryIndex !== -1) {\r\n // Extract query string from hash (e.g., #/test?mode=verifyEmail&token=abc)\r\n const hashQuery = hash.substring(hashQueryIndex + 1);\r\n return new URLSearchParams(hashQuery);\r\n }\r\n \r\n // Fall back to regular search params (for non-hash routing)\r\n return new URLSearchParams(window.location.search);\r\n };\r\n \r\n const params = getUrlParams();\r\n const urlMode = params.get('mode') as URLAuthParams['mode'];\r\n const token = params.get('token');\r\n\r\n console.log('URL params detected:', { urlMode, token, hash: window.location.hash, search: window.location.search });\r\n\r\n if (urlMode && token) {\r\n handleURLBasedAuth(urlMode, token);\r\n }\r\n }, []);\r\n\r\n const handleURLBasedAuth = async (urlMode: string, token: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (urlMode === 'verifyEmail') {\r\n console.log('Verifying email with token:', token);\r\n const response = await api.verifyEmailWithToken(token);\r\n \r\n // Get email verification mode from config (default: verify-then-auto-login)\r\n const verificationMode = config?.emailVerification?.mode || 'verify-then-auto-login';\r\n \r\n if (verificationMode === 'verify-then-auto-login' || verificationMode === 'immediate') {\r\n // Auto-login modes: Log the user in immediately\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Email verified successfully! You are now logged in.');\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n \r\n // Redirect after a brief delay to show success message\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else {\r\n // verify-then-manual-login mode: Show success but require manual login\r\n setAuthSuccess(true);\r\n setSuccessMessage('Email verified successfully! Please log in with your credentials.');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n \r\n // Switch back to login mode after a delay\r\n setTimeout(() => {\r\n setAuthSuccess(false);\r\n setMode('login');\r\n }, 3000);\r\n }\r\n } else if (urlMode === 'resetPassword') {\r\n console.log('Verifying reset token:', token);\r\n // Verify token is valid, then show password reset form\r\n await api.verifyResetToken(token);\r\n setResetToken(token); // Store token for use in password reset\r\n setMode('reset-password');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n }\r\n } catch (err) {\r\n console.error('URL-based auth error:', err);\r\n const errorMessage = err instanceof Error ? err.message : 'An error occurred';\r\n \r\n // If it's an email verification error (expired/invalid token), show resend option\r\n if (urlMode === 'verifyEmail') {\r\n setError(`${errorMessage} - Please enter your email below to receive a new verification link.`);\r\n setShowResendVerification(true);\r\n setMode('login'); // Show the login form UI\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else if (urlMode === 'resetPassword') {\r\n // If password reset token is invalid/expired, show request new reset link option\r\n setError(`${errorMessage} - Please enter your email below to receive a new password reset link.`);\r\n setShowRequestNewReset(true);\r\n setMode('login');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else {\r\n setError(errorMessage);\r\n }\r\n \r\n onAuthError?.(err instanceof Error ? err : new Error('An error occurred'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleEmailAuth = async (data: AuthFormData) => {\r\n setLoading(true);\r\n setError(undefined);\r\n setAuthSuccess(false);\r\n\r\n try {\r\n const response =\r\n mode === 'login'\r\n ? await api.login(data.email!, data.password!)\r\n : await api.register({\r\n ...data,\r\n accountData: mode === 'register' ? accountData : undefined,\r\n redirectUrl: getRedirectUrl(), // Include redirect URL for email verification\r\n });\r\n\r\n // Get email verification mode from config (default: verify-then-auto-login)\r\n const verificationMode = config?.emailVerification?.mode || 'verify-then-auto-login';\r\n const gracePeriodHours = config?.emailVerification?.gracePeriodHours || 24;\r\n\r\n if (mode === 'register') {\r\n // Handle different verification modes\r\n if (verificationMode === 'immediate') {\r\n // Immediate mode: Log in right away\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage(\r\n `Account created! You're logged in now. Please verify your email within ${gracePeriodHours} hours to keep your account active.`\r\n );\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else if (verificationMode === 'verify-then-auto-login') {\r\n // Verify-then-auto-login mode: Don't log in yet, but will auto-login after email verification\r\n setAuthSuccess(true);\r\n setSuccessMessage(\r\n 'Account created! Please check your email and click the verification link to complete your registration.'\r\n );\r\n } else {\r\n // verify-then-manual-login mode: Traditional flow\r\n setAuthSuccess(true);\r\n setSuccessMessage(\r\n 'Account created successfully! Please check your email to verify your account, then log in.'\r\n );\r\n }\r\n } else {\r\n // Login mode - always log in\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Login successful!');\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Authentication failed';\r\n \r\n // Check if error is about email already registered\r\n if (mode === 'register' && errorMessage.toLowerCase().includes('already') && errorMessage.toLowerCase().includes('email')) {\r\n setShowResendVerification(true);\r\n setResendEmail(data.email!);\r\n setError('This email is already registered. If you didn\\'t receive the verification email, you can resend it below.');\r\n } else {\r\n setError(errorMessage);\r\n }\r\n \r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleResendVerification = async () => {\r\n if (!resendEmail) return;\r\n \r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n // For resend, we need the userId. If we don't have it, we need to handle this differently\r\n // The backend should ideally handle this case\r\n await api.resendVerification('unknown', resendEmail, getRedirectUrl());\r\n \r\n setAuthSuccess(true);\r\n setSuccessMessage('Verification email sent! Please check your inbox.');\r\n setShowResendVerification(false);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to resend verification email';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleRequestNewReset = async () => {\r\n if (!resetRequestEmail) return;\r\n \r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n await api.requestPasswordReset(resetRequestEmail, getRedirectUrl());\r\n setAuthSuccess(true);\r\n setSuccessMessage('Password reset email sent! Please check your inbox.');\r\n setShowRequestNewReset(false);\r\n setResetRequestEmail('');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to send password reset email';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleGoogleLogin = async () => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n // In a real implementation, this would open Google OAuth flow\r\n // For now, this is a placeholder that the consuming app would implement\r\n throw new Error('Google OAuth flow must be implemented in your application');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Google login failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handlePhoneAuth = async (phoneNumber: string, verificationCode?: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (!verificationCode) {\r\n // Send verification code\r\n const result = await api.sendPhoneCode(phoneNumber);\r\n setVerificationId(result.verificationId);\r\n } else {\r\n // Verify code\r\n if (!verificationId) {\r\n throw new Error('Verification ID not found');\r\n }\r\n const response = await api.verifyPhoneCode(verificationId, verificationCode);\r\n \r\n // Update auth context with account data\r\n auth.login(response.token, response.user, response.accountData);\r\n \r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n\r\n if (redirectUrl) {\r\n window.location.href = redirectUrl;\r\n }\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Phone authentication failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handlePasswordReset = async (emailOrPassword: string, confirmPassword?: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (resetToken && confirmPassword) {\r\n // Complete password reset with token\r\n await api.completePasswordReset(resetToken, emailOrPassword);\r\n setResetSuccess(true);\r\n setResetToken(undefined); // Clear token after successful reset\r\n } else {\r\n // Request password reset email\r\n await api.requestPasswordReset(emailOrPassword, getRedirectUrl());\r\n setResetSuccess(true);\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Password reset failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n if (configLoading) {\r\n return (\r\n <AuthContainer theme={theme} className={className}>\r\n <div style={{ textAlign: 'center', padding: '2rem' }}>\r\n <div className=\"auth-spinner\" />\r\n </div>\r\n </AuthContainer>\r\n );\r\n }\r\n\r\n return (\r\n <AuthContainer theme={theme} className={className} config={config}>\r\n {authSuccess ? (\r\n <div style={{ textAlign: 'center', padding: '2rem' }}>\r\n <div style={{ \r\n color: 'var(--auth-primary-color, #4F46E5)', \r\n fontSize: '3rem',\r\n marginBottom: '1rem'\r\n }}>\r\n ✓\r\n </div>\r\n <h2 style={{ \r\n marginBottom: '0.5rem',\r\n fontSize: '1.5rem',\r\n fontWeight: 600\r\n }}>\r\n {successMessage?.includes('verified') ? 'Email Verified!' : \r\n mode === 'register' ? 'Account Created!' : 'Login Successful!'}\r\n </h2>\r\n <p style={{ \r\n color: '#6B7280',\r\n fontSize: '0.875rem'\r\n }}>\r\n {successMessage}\r\n </p>\r\n </div>\r\n ) : mode === 'phone' ? (\r\n <PhoneAuthForm\r\n onSubmit={handlePhoneAuth}\r\n onBack={() => setMode('login')}\r\n loading={loading}\r\n error={error}\r\n />\r\n ) : mode === 'reset-password' ? (\r\n <PasswordResetForm\r\n onSubmit={handlePasswordReset}\r\n onBack={() => {\r\n setMode('login');\r\n setResetSuccess(false);\r\n setResetToken(undefined); // Clear token when going back\r\n }}\r\n loading={loading}\r\n error={error}\r\n success={resetSuccess}\r\n token={resetToken} // Pass token to form\r\n />\r\n ) : (mode === 'login' || mode === 'register') ? (\r\n <>\r\n {showResendVerification ? (\r\n <div style={{ marginTop: '1rem', padding: '1.5rem', backgroundColor: 'rgba(79, 70, 229, 0.05)', borderRadius: '0.5rem' }}>\r\n <h3 style={{ marginBottom: '0.75rem', fontSize: '1rem', fontWeight: 600, color: 'var(--auth-text-color, #374151)' }}>\r\n Verification Link Expired\r\n </h3>\r\n <p style={{ marginBottom: '1rem', fontSize: '0.875rem', color: 'var(--auth-text-color, #6B7280)', lineHeight: '1.5' }}>\r\n Your verification link has expired or is no longer valid. Please enter your email address below and we'll send you a new verification link.\r\n </p>\r\n <input\r\n type=\"email\"\r\n value={resendEmail || ''}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"your@email.com\"\r\n style={{\r\n width: '100%',\r\n padding: '0.625rem',\r\n marginBottom: '1rem',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n fontSize: '0.875rem',\r\n boxSizing: 'border-box'\r\n }}\r\n />\r\n <div style={{ display: 'flex', gap: '0.75rem' }}>\r\n <button\r\n onClick={handleResendVerification}\r\n disabled={loading || !resendEmail}\r\n style={{\r\n flex: 1,\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'var(--auth-primary-color, #4F46E5)',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '0.375rem',\r\n cursor: (loading || !resendEmail) ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: (loading || !resendEmail) ? 0.6 : 1\r\n }}\r\n >\r\n {loading ? 'Sending...' : 'Send New Verification Link'}\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowResendVerification(false);\r\n setResendEmail('');\r\n setError(undefined);\r\n }}\r\n disabled={loading}\r\n style={{\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'transparent',\r\n color: 'var(--auth-text-color, #6B7280)',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n cursor: loading ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: loading ? 0.6 : 1\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n ) : showRequestNewReset ? (\r\n <div style={{ marginTop: '1rem', padding: '1.5rem', backgroundColor: 'rgba(239, 68, 68, 0.05)', borderRadius: '0.5rem' }}>\r\n <h3 style={{ marginBottom: '0.75rem', fontSize: '1rem', fontWeight: 600, color: 'var(--auth-text-color, #374151)' }}>\r\n Password Reset Link Expired\r\n </h3>\r\n <p style={{ marginBottom: '1rem', fontSize: '0.875rem', color: 'var(--auth-text-color, #6B7280)', lineHeight: '1.5' }}>\r\n Your password reset link has expired or is no longer valid. Please enter your email address below and we'll send you a new password reset link.\r\n </p>\r\n <input\r\n type=\"email\"\r\n value={resetRequestEmail || ''}\r\n onChange={(e) => setResetRequestEmail(e.target.value)}\r\n placeholder=\"your@email.com\"\r\n style={{\r\n width: '100%',\r\n padding: '0.625rem',\r\n marginBottom: '1rem',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n fontSize: '0.875rem',\r\n boxSizing: 'border-box'\r\n }}\r\n />\r\n <div style={{ display: 'flex', gap: '0.75rem' }}>\r\n <button\r\n onClick={handleRequestNewReset}\r\n disabled={loading || !resetRequestEmail}\r\n style={{\r\n flex: 1,\r\n padding: '0.625rem 1rem',\r\n backgroundColor: '#EF4444',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '0.375rem',\r\n cursor: (loading || !resetRequestEmail) ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: (loading || !resetRequestEmail) ? 0.6 : 1\r\n }}\r\n >\r\n {loading ? 'Sending...' : 'Send New Reset Link'}\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowRequestNewReset(false);\r\n setResetRequestEmail('');\r\n setError(undefined);\r\n }}\r\n disabled={loading}\r\n style={{\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'transparent',\r\n color: 'var(--auth-text-color, #6B7280)',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n cursor: loading ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: loading ? 0.6 : 1\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <>\r\n <EmailAuthForm\r\n mode={mode}\r\n onSubmit={handleEmailAuth}\r\n onModeSwitch={() => {\r\n setMode(mode === 'login' ? 'register' : 'login');\r\n setShowResendVerification(false);\r\n setShowRequestNewReset(false);\r\n setError(undefined);\r\n }}\r\n onForgotPassword={() => setMode('reset-password')}\r\n loading={loading}\r\n error={error}\r\n />\r\n {((config?.enabledProviders || enabledProviders).length > 1) && (\r\n <ProviderButtons\r\n enabledProviders={(config?.enabledProviders || enabledProviders).filter((p: string) => p !== 'email')}\r\n onGoogleLogin={handleGoogleLogin}\r\n onPhoneLogin={() => setMode('phone')}\r\n loading={loading}\r\n />\r\n )}\r\n </>\r\n )}\r\n </>\r\n ) : null}\r\n </AuthContainer>\r\n );\r\n};\r\n\r\n// Export session management\r\nexport { AuthProvider, useAuth } from './context/AuthContext';\r\nexport { ProtectedRoute } from './components/ProtectedRoute';\r\nexport { tokenStorage } from './utils/tokenStorage';\r\n\r\n// Export preview component\r\nexport { AuthUIPreview } from './components/AuthUIPreview';\r\n\r\n// Export types\r\nexport type * from './types';\r\n\r\n// Legacy export for backward compatibility\r\nexport { SmartlinksAuthUI as FirebaseAuthUI };\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/AuthContainer.tsx","../src/components/EmailAuthForm.tsx","../src/components/ProviderButtons.tsx","../src/components/OTPInput.tsx","../src/components/PhoneInput.tsx","../src/components/PhoneAuthForm.tsx","../src/components/PasswordResetForm.tsx","../src/components/MagicLinkForm.tsx","../src/api.ts","../src/utils/tokenStorage.ts","../src/context/AuthContext.tsx","../src/components/AccountManagement.tsx","../src/components/ProtectedRoute.tsx","../src/components/AuthUIPreview.tsx","../src/index.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\r\nimport './AuthContainer.css';\r\nimport type { AuthUIConfig } from '../types';\r\n\r\ninterface AuthContainerProps {\r\n children: React.ReactNode;\r\n theme?: 'light' | 'dark';\r\n className?: string;\r\n config?: AuthUIConfig;\r\n}\r\n\r\nexport const AuthContainer: React.FC<AuthContainerProps> = ({\r\n children,\r\n theme = 'light',\r\n className = '',\r\n config,\r\n}) => {\r\n // Apply CSS variables for customization\r\n useEffect(() => {\r\n if (!config?.branding) return;\r\n\r\n const root = document.documentElement;\r\n const { branding } = config;\r\n \r\n if (branding.primaryColor) {\r\n root.style.setProperty('--auth-primary-color', branding.primaryColor);\r\n }\r\n if (branding.secondaryColor) {\r\n root.style.setProperty('--auth-secondary-color', branding.secondaryColor);\r\n }\r\n if (branding.backgroundColor) {\r\n root.style.setProperty('--auth-bg-color', branding.backgroundColor);\r\n }\r\n if (branding.fontFamily) {\r\n root.style.setProperty('--auth-font-family', branding.fontFamily);\r\n }\r\n\r\n // Inject custom CSS if provided\r\n if (branding.customCss) {\r\n const styleId = 'auth-custom-styles';\r\n let styleEl = document.getElementById(styleId);\r\n \r\n if (!styleEl) {\r\n styleEl = document.createElement('style');\r\n styleEl.id = styleId;\r\n document.head.appendChild(styleEl);\r\n }\r\n \r\n styleEl.textContent = branding.customCss;\r\n }\r\n\r\n return () => {\r\n // Cleanup on unmount\r\n root.style.removeProperty('--auth-primary-color');\r\n root.style.removeProperty('--auth-secondary-color');\r\n root.style.removeProperty('--auth-bg-color');\r\n root.style.removeProperty('--auth-font-family');\r\n };\r\n }, [config]);\r\n\r\n const title = config?.branding?.title || 'Smartlinks Auth';\r\n const subtitle = config?.branding?.subtitle || 'Sign in to your account';\r\n const logoUrl = config?.branding?.logoUrl;\r\n\r\n return (\r\n <div className={`auth-container auth-theme-${theme} ${className}`}>\r\n <div className=\"auth-card\" style={{ borderRadius: config?.branding?.buttonStyle === 'square' ? '4px' : '12px' }}>\r\n <div className=\"auth-header\">\r\n <div className=\"auth-logo\">\r\n {logoUrl ? (\r\n <img src={logoUrl} alt=\"Logo\" style={{ width: 40, height: 40, objectFit: 'contain' }} />\r\n ) : (\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect width=\"40\" height=\"40\" rx=\"8\" fill=\"url(#gradient)\" />\r\n <path\r\n d=\"M20 10L12 18L20 26L28 18L20 10Z\"\r\n fill=\"white\"\r\n fillOpacity=\"0.9\"\r\n />\r\n <path\r\n d=\"M20 18L16 22L20 26L24 22L20 18Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id=\"gradient\"\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"40\"\r\n y2=\"40\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"var(--auth-primary-color, #3B82F6)\" />\r\n <stop offset=\"1\" stopColor=\"var(--auth-secondary-color, #1D4ED8)\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n )}\r\n </div>\r\n <h1 className=\"auth-title\">{title}</h1>\r\n {subtitle && <p className=\"auth-subtitle\">{subtitle}</p>}\r\n </div>\r\n <div className=\"auth-content\">{children}</div>\r\n {(config?.branding?.termsUrl || config?.branding?.privacyUrl) && (\r\n <div className=\"auth-footer\">\r\n {config.branding.termsUrl && <a href={config.branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\">Terms</a>}\r\n {config.branding.termsUrl && config.branding.privacyUrl && <span>•</span>}\r\n {config.branding.privacyUrl && <a href={config.branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\">Privacy</a>}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport type { AuthFormData } from '../types';\r\nimport './AuthForm.css';\r\n\r\ninterface EmailAuthFormProps {\r\n mode: 'login' | 'register';\r\n onSubmit: (data: AuthFormData) => Promise<void>;\r\n onModeSwitch: () => void;\r\n onForgotPassword: () => void;\r\n loading: boolean;\r\n error?: string;\r\n}\r\n\r\nexport const EmailAuthForm: React.FC<EmailAuthFormProps> = ({\r\n mode,\r\n onSubmit,\r\n onModeSwitch,\r\n onForgotPassword,\r\n loading,\r\n error,\r\n}) => {\r\n const [formData, setFormData] = useState<AuthFormData>({\r\n email: '',\r\n password: '',\r\n displayName: '',\r\n });\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(formData);\r\n };\r\n\r\n const handleChange = (field: keyof AuthFormData, value: string) => {\r\n setFormData(prev => ({ ...prev, [field]: value }));\r\n };\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">\r\n {mode === 'login' ? 'Sign in' : 'Create account'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {mode === 'login'\r\n ? 'Welcome back! Please enter your credentials.'\r\n : 'Get started by creating your account.'}\r\n </p>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\"/>\r\n </svg>\r\n {error}\r\n </div>\r\n )}\r\n\r\n {mode === 'register' && (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"displayName\" className=\"auth-label\">\r\n Full Name\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"displayName\"\r\n className=\"auth-input\"\r\n value={formData.displayName || ''}\r\n onChange={(e) => handleChange('displayName', e.target.value)}\r\n required={mode === 'register'}\r\n disabled={loading}\r\n placeholder=\"John Doe\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"email\" className=\"auth-label\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n className=\"auth-input\"\r\n value={formData.email || ''}\r\n onChange={(e) => handleChange('email', e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n />\r\n </div>\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"password\" className=\"auth-label\">\r\n Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"password\"\r\n className=\"auth-input\"\r\n value={formData.password || ''}\r\n onChange={(e) => handleChange('password', e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"••••••••\"\r\n autoComplete={mode === 'login' ? 'current-password' : 'new-password'}\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n {mode === 'login' && (\r\n <div className=\"auth-form-footer\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link\"\r\n onClick={onForgotPassword}\r\n disabled={loading}\r\n >\r\n Forgot password?\r\n </button>\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : mode === 'login' ? (\r\n 'Sign in'\r\n ) : (\r\n 'Create account'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <span>\r\n {mode === 'login' ? \"Don't have an account?\" : 'Already have an account?'}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onModeSwitch}\r\n disabled={loading}\r\n >\r\n {mode === 'login' ? 'Sign up' : 'Sign in'}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import React from 'react';\r\nimport type { AuthProvider } from '../types';\r\nimport './AuthForm.css';\r\n\r\ninterface ProviderButtonsProps {\r\n enabledProviders: AuthProvider[];\r\n providerOrder?: string[];\r\n onEmailLogin?: () => void;\r\n onGoogleLogin: () => Promise<void>;\r\n onPhoneLogin: () => void;\r\n onMagicLinkLogin?: () => void;\r\n loading: boolean;\r\n}\r\n\r\nexport const ProviderButtons: React.FC<ProviderButtonsProps> = ({\r\n enabledProviders,\r\n providerOrder,\r\n onEmailLogin,\r\n onGoogleLogin,\r\n onPhoneLogin,\r\n onMagicLinkLogin,\r\n loading,\r\n}) => {\r\n if (enabledProviders.length === 0) return null;\r\n\r\n // Determine the order of providers to display\r\n const orderedProviders = providerOrder && providerOrder.length > 0\r\n ? providerOrder.filter(p => enabledProviders.includes(p as AuthProvider))\r\n : enabledProviders;\r\n\r\n // Provider button configurations\r\n const providerConfigs: Record<string, { label: string; icon: JSX.Element; onClick: () => void }> = {\r\n email: {\r\n label: 'Continue with Email',\r\n icon: (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\r\n />\r\n </svg>\r\n ),\r\n onClick: () => onEmailLogin?.()\r\n },\r\n google: {\r\n label: 'Continue with Google',\r\n icon: (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M19.6 10.227c0-.709-.064-1.39-.182-2.045H10v3.868h5.382a4.6 4.6 0 01-1.996 3.018v2.51h3.232c1.891-1.742 2.982-4.305 2.982-7.35z\"\r\n fill=\"#4285F4\"\r\n />\r\n <path\r\n d=\"M10 20c2.7 0 4.964-.895 6.618-2.423l-3.232-2.509c-.895.6-2.04.955-3.386.955-2.605 0-4.81-1.76-5.595-4.123H1.064v2.59A9.996 9.996 0 0010 20z\"\r\n fill=\"#34A853\"\r\n />\r\n <path\r\n d=\"M4.405 11.9c-.2-.6-.314-1.24-.314-1.9 0-.66.114-1.3.314-1.9V5.51H1.064A9.996 9.996 0 000 10c0 1.614.386 3.14 1.064 4.49l3.34-2.59z\"\r\n fill=\"#FBBC05\"\r\n />\r\n <path\r\n d=\"M10 3.977c1.468 0 2.786.505 3.823 1.496l2.868-2.868C14.959.99 12.695 0 10 0 6.09 0 2.71 2.24 1.064 5.51l3.34 2.59C5.19 5.736 7.395 3.977 10 3.977z\"\r\n fill=\"#EA4335\"\r\n />\r\n </svg>\r\n ),\r\n onClick: onGoogleLogin\r\n },\r\n phone: {\r\n label: 'Continue with Phone',\r\n icon: (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V15a2 2 0 01-2 2h-1C7.82 17 2 11.18 2 5V4z\"\r\n />\r\n </svg>\r\n ),\r\n onClick: onPhoneLogin\r\n },\r\n 'magic-link': {\r\n label: 'Continue with Magic Link',\r\n icon: (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\r\n />\r\n </svg>\r\n ),\r\n onClick: () => onMagicLinkLogin?.()\r\n }\r\n };\r\n\r\n // Show divider only if email handler is not provided (meaning this is showing alternative providers, not all providers)\r\n const showDivider = !onEmailLogin;\r\n\r\n return (\r\n <>\r\n {showDivider && (\r\n <div className=\"auth-or-divider\">\r\n <span>or continue with</span>\r\n </div>\r\n )}\r\n\r\n <div className=\"auth-provider-buttons\">\r\n {orderedProviders.map((provider) => {\r\n const config = providerConfigs[provider];\r\n if (!config) return null;\r\n\r\n return (\r\n <button\r\n key={provider}\r\n type=\"button\"\r\n className=\"auth-provider-button\"\r\n onClick={config.onClick}\r\n disabled={loading}\r\n >\r\n {config.icon}\r\n {config.label}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n );\r\n};\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport './OTPInput.css';\r\n\r\ninterface OTPInputProps {\r\n length?: number;\r\n value: string;\r\n onChange: (value: string) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const OTPInput: React.FC<OTPInputProps> = ({\r\n length = 6,\r\n value,\r\n onChange,\r\n disabled = false,\r\n}) => {\r\n const [otp, setOtp] = useState<string[]>(Array(length).fill(''));\r\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n const digits = value.split('').slice(0, length);\r\n const newOtp = [...digits, ...Array(Math.max(0, length - digits.length)).fill('')];\r\n setOtp(newOtp);\r\n }, [value, length]);\r\n\r\n const handleChange = (index: number, digit: string) => {\r\n if (disabled) return;\r\n \r\n // Only allow numbers\r\n if (digit && !/^\\d$/.test(digit)) return;\r\n\r\n const newOtp = [...otp];\r\n newOtp[index] = digit;\r\n setOtp(newOtp);\r\n\r\n // Call onChange with the full OTP value\r\n onChange(newOtp.join(''));\r\n\r\n // Move to next input if digit was entered\r\n if (digit && index < length - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n };\r\n\r\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (disabled) return;\r\n\r\n // Handle backspace\r\n if (e.key === 'Backspace' && !otp[index] && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n }\r\n\r\n // Handle arrow keys\r\n if (e.key === 'ArrowLeft' && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n }\r\n if (e.key === 'ArrowRight' && index < length - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n };\r\n\r\n const handlePaste = (e: React.ClipboardEvent) => {\r\n if (disabled) return;\r\n \r\n e.preventDefault();\r\n const pastedData = e.clipboardData.getData('text/plain').slice(0, length);\r\n const digits = pastedData.replace(/\\D/g, '').split('');\r\n \r\n const newOtp = [...Array(length).fill('')];\r\n digits.forEach((digit, idx) => {\r\n if (idx < length) {\r\n newOtp[idx] = digit;\r\n }\r\n });\r\n \r\n setOtp(newOtp);\r\n onChange(newOtp.join(''));\r\n \r\n // Focus the next empty input or the last one\r\n const nextEmptyIndex = newOtp.findIndex(digit => !digit);\r\n const focusIndex = nextEmptyIndex === -1 ? length - 1 : nextEmptyIndex;\r\n inputRefs.current[focusIndex]?.focus();\r\n };\r\n\r\n return (\r\n <div className=\"otp-input-container\">\r\n {otp.map((digit, index) => (\r\n <input\r\n key={index}\r\n ref={(el) => (inputRefs.current[index] = el)}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n maxLength={1}\r\n value={digit}\r\n onChange={(e) => handleChange(index, e.target.value)}\r\n onKeyDown={(e) => handleKeyDown(index, e)}\r\n onPaste={handlePaste}\r\n disabled={disabled}\r\n className=\"otp-input-box\"\r\n autoComplete=\"off\"\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport PhoneInputComponent from 'react-phone-number-input';\r\nimport 'react-phone-number-input/style.css';\r\nimport './PhoneInput.css';\r\n\r\ninterface PhoneInputProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\r\n value,\r\n onChange,\r\n disabled = false,\r\n}) => {\r\n const [defaultCountry, setDefaultCountry] = useState<any>('US');\r\n\r\n useEffect(() => {\r\n // Auto-detect country based on user's location\r\n const detectCountry = async () => {\r\n try {\r\n const response = await fetch('https://ipapi.co/json/');\r\n const data = await response.json();\r\n if (data.country_code) {\r\n setDefaultCountry(data.country_code);\r\n }\r\n } catch (error) {\r\n console.log('Could not detect country, using default');\r\n }\r\n };\r\n\r\n detectCountry();\r\n }, []);\r\n\r\n return (\r\n <PhoneInputComponent\r\n international\r\n defaultCountry={defaultCountry}\r\n value={value}\r\n onChange={(value) => onChange(value || '')}\r\n disabled={disabled}\r\n className=\"phone-input-wrapper\"\r\n />\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport './AuthForm.css';\r\nimport { OTPInput } from './OTPInput';\r\nimport { PhoneInput } from './PhoneInput';\r\n\r\ninterface PhoneAuthFormProps {\r\n onSubmit: (phoneNumber: string, verificationCode?: string) => Promise<void>;\r\n onBack: () => void;\r\n loading: boolean;\r\n error?: string;\r\n}\r\n\r\nexport const PhoneAuthForm: React.FC<PhoneAuthFormProps> = ({\r\n onSubmit,\r\n onBack,\r\n loading,\r\n error,\r\n}) => {\r\n const [phoneNumber, setPhoneNumber] = useState('');\r\n const [verificationCode, setVerificationCode] = useState('');\r\n const [codeSent, setCodeSent] = useState(false);\r\n const [resendCooldown, setResendCooldown] = useState(0);\r\n\r\n // Countdown timer for resend button\r\n useEffect(() => {\r\n if (resendCooldown > 0) {\r\n const timer = setTimeout(() => {\r\n setResendCooldown(resendCooldown - 1);\r\n }, 1000);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [resendCooldown]);\r\n\r\n const handleSendCode = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(phoneNumber);\r\n setCodeSent(true);\r\n setResendCooldown(60); // 60 second cooldown\r\n };\r\n\r\n const handleResendCode = async () => {\r\n if (resendCooldown > 0) return;\r\n \r\n try {\r\n await onSubmit(phoneNumber);\r\n setResendCooldown(60); // Reset cooldown\r\n setVerificationCode(''); // Clear the code input\r\n } catch (err) {\r\n // Error will be handled by parent component\r\n }\r\n };\r\n\r\n const handleVerifyCode = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(phoneNumber, verificationCode);\r\n };\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={codeSent ? handleVerifyCode : handleSendCode}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">Phone Authentication</h2>\r\n <p className=\"auth-form-subtitle\">\r\n {codeSent\r\n ? 'Enter the verification code sent to your phone.'\r\n : 'Enter your phone number to receive a verification code.'}\r\n </p>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\" />\r\n </svg>\r\n {error}\r\n </div>\r\n )}\r\n\r\n {!codeSent ? (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"phoneNumber\" className=\"auth-label\">\r\n Phone Number\r\n </label>\r\n <PhoneInput\r\n value={phoneNumber}\r\n onChange={setPhoneNumber}\r\n disabled={loading}\r\n />\r\n </div>\r\n ) : (\r\n <>\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"verificationCode\" className=\"auth-label\">\r\n Verification Code\r\n </label>\r\n <OTPInput\r\n length={6}\r\n value={verificationCode}\r\n onChange={setVerificationCode}\r\n disabled={loading}\r\n />\r\n </div>\r\n \r\n <div style={{ marginTop: '0.5rem', textAlign: 'center' }}>\r\n <button\r\n type=\"button\"\r\n className=\"auth-link\"\r\n onClick={handleResendCode}\r\n disabled={loading || resendCooldown > 0}\r\n style={{\r\n cursor: resendCooldown > 0 ? 'not-allowed' : 'pointer',\r\n opacity: resendCooldown > 0 ? 0.5 : 1,\r\n }}\r\n >\r\n {resendCooldown > 0 \r\n ? `Resend code in ${resendCooldown}s` \r\n : 'Resend code'}\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : codeSent ? (\r\n 'Verify Code'\r\n ) : (\r\n 'Send Code'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onBack}\r\n disabled={loading}\r\n >\r\n ← Back to login\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport './AuthForm.css';\r\n\r\ninterface PasswordResetFormProps {\r\n onSubmit: (emailOrPassword: string, confirmPassword?: string) => Promise<void>;\r\n onBack: () => void;\r\n loading: boolean;\r\n error?: string;\r\n success?: boolean;\r\n token?: string; // If token is present, show password reset form instead of email form\r\n}\r\n\r\nexport const PasswordResetForm: React.FC<PasswordResetFormProps> = ({\r\n onSubmit,\r\n onBack,\r\n loading,\r\n error,\r\n success,\r\n token,\r\n}) => {\r\n const [email, setEmail] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [passwordError, setPasswordError] = useState('');\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n \r\n if (token) {\r\n // Reset password with token\r\n if (password !== confirmPassword) {\r\n setPasswordError('Passwords do not match');\r\n return;\r\n }\r\n if (password.length < 6) {\r\n setPasswordError('Password must be at least 6 characters');\r\n return;\r\n }\r\n setPasswordError('');\r\n await onSubmit(password, confirmPassword);\r\n } else {\r\n // Request password reset\r\n await onSubmit(email);\r\n }\r\n };\r\n\r\n if (success) {\r\n return (\r\n <div className=\"auth-form\">\r\n <div className=\"auth-form-header\">\r\n <div style={{ textAlign: 'center', marginBottom: '1rem' }}>\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 64 64\"\r\n fill=\"none\"\r\n style={{ margin: '0 auto' }}\r\n >\r\n <circle cx=\"32\" cy=\"32\" r=\"32\" fill=\"#10b981\" fillOpacity=\"0.1\" />\r\n <path\r\n d=\"M20 32l8 8 16-16\"\r\n stroke=\"#10b981\"\r\n strokeWidth=\"4\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h2 className=\"auth-form-title\">\r\n {token ? 'Password reset!' : 'Check your email'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {token \r\n ? 'Your password has been successfully reset. You can now sign in with your new password.'\r\n : `We've sent password reset instructions to ${email}`\r\n }\r\n </p>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"auth-button auth-button-primary\"\r\n onClick={onBack}\r\n >\r\n Back to Sign in\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n <div className=\"auth-form-header\">\r\n <h2 className=\"auth-form-title\">\r\n {token ? 'Set new password' : 'Reset your password'}\r\n </h2>\r\n <p className=\"auth-form-subtitle\">\r\n {token \r\n ? 'Enter your new password below.'\r\n : \"Enter your email address and we'll send you instructions to reset your password.\"\r\n }\r\n </p>\r\n </div>\r\n\r\n {(error || passwordError) && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z\" />\r\n </svg>\r\n {error || passwordError}\r\n </div>\r\n )}\r\n\r\n {token ? (\r\n <>\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"password\" className=\"auth-label\">\r\n New Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"password\"\r\n className=\"auth-input\"\r\n value={password}\r\n onChange={(e) => setPassword(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"Enter new password\"\r\n autoComplete=\"new-password\"\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"confirmPassword\" className=\"auth-label\">\r\n Confirm Password\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"confirmPassword\"\r\n className=\"auth-input\"\r\n value={confirmPassword}\r\n onChange={(e) => setConfirmPassword(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"Confirm new password\"\r\n autoComplete=\"new-password\"\r\n minLength={6}\r\n />\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"email\" className=\"auth-label\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n className=\"auth-input\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n required\r\n disabled={loading}\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n />\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <span className=\"auth-spinner\" />\r\n ) : token ? (\r\n 'Reset password'\r\n ) : (\r\n 'Send reset instructions'\r\n )}\r\n </button>\r\n\r\n <div className=\"auth-divider\">\r\n <button\r\n type=\"button\"\r\n className=\"auth-link auth-link-bold\"\r\n onClick={onBack}\r\n disabled={loading}\r\n >\r\n ← Back to Sign in\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\n\r\ninterface MagicLinkFormProps {\r\n onSubmit: (email: string) => Promise<void>;\r\n onCancel: () => void;\r\n loading?: boolean;\r\n error?: string;\r\n}\r\n\r\nexport const MagicLinkForm: React.FC<MagicLinkFormProps> = ({\r\n onSubmit,\r\n onCancel,\r\n loading = false,\r\n error,\r\n}) => {\r\n const [email, setEmail] = useState('');\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await onSubmit(email);\r\n };\r\n\r\n return (\r\n <form onSubmit={handleSubmit} className=\"auth-form\">\r\n <div className=\"auth-form-group\">\r\n <label htmlFor=\"magic-link-email\" className=\"auth-label\">\r\n Email Address\r\n </label>\r\n <input\r\n id=\"magic-link-email\"\r\n type=\"email\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n className=\"auth-input\"\r\n placeholder=\"you@example.com\"\r\n required\r\n disabled={loading}\r\n />\r\n </div>\r\n\r\n {error && (\r\n <div className=\"auth-error-message\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"auth-button auth-button-primary\"\r\n disabled={loading || !email}\r\n >\r\n {loading ? (\r\n <>\r\n <span className=\"auth-spinner\" />\r\n Sending...\r\n </>\r\n ) : (\r\n 'Send Magic Link'\r\n )}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onCancel}\r\n className=\"auth-button auth-button-secondary\"\r\n disabled={loading}\r\n >\r\n Cancel\r\n </button>\r\n </form>\r\n );\r\n};\r\n","import * as smartlinks from '@proveanything/smartlinks';\r\nimport type { AuthResponse, AuthFormData, AuthUIConfig } from './types';\r\n\r\n/**\r\n * AuthAPI - Thin wrapper around Smartlinks SDK authKit namespace\r\n * All authentication operations now use the global Smartlinks SDK\r\n */\r\nexport class AuthAPI {\r\n private clientId: string;\r\n private clientName?: string;\r\n\r\n constructor(_apiEndpoint: string, clientId: string, clientName?: string) {\r\n // apiEndpoint is kept for backward compatibility but not used\r\n // Smartlinks SDK is pre-configured globally\r\n this.clientId = clientId;\r\n this.clientName = clientName;\r\n }\r\n\r\n async login(email: string, password: string): Promise<AuthResponse> {\r\n return smartlinks.authKit.login(this.clientId, email, password) as Promise<AuthResponse>;\r\n }\r\n\r\n async register(data: AuthFormData): Promise<AuthResponse> {\r\n return smartlinks.authKit.register(this.clientId, {\r\n email: data.email!,\r\n password: data.password!,\r\n displayName: data.displayName,\r\n accountData: data.accountData,\r\n }) as Promise<AuthResponse>;\r\n }\r\n\r\n async loginWithGoogle(idToken: string): Promise<AuthResponse> {\r\n return smartlinks.authKit.googleLogin(this.clientId, idToken) as Promise<AuthResponse>;\r\n }\r\n\r\n async sendPhoneCode(phoneNumber: string): Promise<{ verificationId: string }> {\r\n return smartlinks.authKit.sendPhoneCode(this.clientId, phoneNumber);\r\n }\r\n\r\n async verifyPhoneCode(\r\n phoneNumber: string,\r\n code: string\r\n ): Promise<AuthResponse> {\r\n return smartlinks.authKit.verifyPhoneCode(this.clientId, phoneNumber, code) as Promise<AuthResponse>;\r\n }\r\n\r\n async requestPasswordReset(email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.requestPasswordReset(this.clientId, {\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async verifyResetToken(token: string): Promise<{ valid: boolean; email?: string; expiresAt?: number; message?: string }> {\r\n return smartlinks.authKit.verifyResetToken(this.clientId, token);\r\n }\r\n\r\n async completePasswordReset(token: string, newPassword: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.completePasswordReset(this.clientId, token, newPassword);\r\n }\r\n\r\n async sendEmailVerification(userId: string, email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.sendEmailVerification(this.clientId, {\r\n userId,\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async verifyEmailWithToken(token: string): Promise<AuthResponse & { message: string }> {\r\n return smartlinks.authKit.verifyEmail(this.clientId, token) as Promise<AuthResponse & { message: string }>;\r\n }\r\n\r\n async resendVerification(userId: string, email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.resendEmailVerification(this.clientId, {\r\n userId,\r\n email,\r\n redirectUrl,\r\n clientName: this.clientName\r\n });\r\n }\r\n\r\n async fetchConfig(): Promise<AuthUIConfig> {\r\n try {\r\n return await smartlinks.authKit.load(this.clientId) as AuthUIConfig;\r\n } catch (error) {\r\n console.warn('Failed to fetch UI config, using defaults:', error);\r\n return {\r\n branding: {\r\n title: 'Smartlinks Auth',\r\n subtitle: 'Sign in to your account',\r\n primaryColor: '#3B82F6',\r\n secondaryColor: '#1D4ED8',\r\n backgroundColor: '#e0f2fe',\r\n buttonStyle: 'rounded',\r\n fontFamily: 'Inter, sans-serif'\r\n }\r\n };\r\n }\r\n }\r\n\r\n async sendMagicLink(email: string, redirectUrl: string): Promise<{ success: boolean; message: string }> {\r\n return smartlinks.authKit.sendMagicLink(this.clientId, {\r\n email,\r\n redirectUrl\r\n });\r\n }\r\n\r\n async verifyMagicLink(token: string): Promise<AuthResponse & { message: string }> {\r\n return smartlinks.authKit.verifyMagicLink(this.clientId, token) as Promise<AuthResponse & { message: string }>;\r\n }\r\n}\r\n","import type { AuthToken, AuthUser } from '../types';\r\n\r\nconst TOKEN_KEY = 'smartlinks_auth_token';\r\nconst USER_KEY = 'smartlinks_auth_user';\r\nconst ACCOUNT_DATA_KEY = 'smartlinks_account_data';\r\n\r\nexport const tokenStorage = {\r\n saveToken(token: string, expiresAt?: number): void {\r\n const authToken: AuthToken = {\r\n token,\r\n expiresAt: expiresAt || Date.now() + 3600000, // Default 1 hour\r\n };\r\n localStorage.setItem(TOKEN_KEY, JSON.stringify(authToken));\r\n },\r\n\r\n getToken(): AuthToken | null {\r\n const stored = localStorage.getItem(TOKEN_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n const authToken: AuthToken = JSON.parse(stored);\r\n \r\n // Check if token is expired\r\n if (authToken.expiresAt && authToken.expiresAt < Date.now()) {\r\n this.clearToken();\r\n return null;\r\n }\r\n \r\n return authToken;\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearToken(): void {\r\n localStorage.removeItem(TOKEN_KEY);\r\n },\r\n\r\n saveUser(user: AuthUser): void {\r\n localStorage.setItem(USER_KEY, JSON.stringify(user));\r\n },\r\n\r\n getUser(): AuthUser | null {\r\n const stored = localStorage.getItem(USER_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n return JSON.parse(stored);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearUser(): void {\r\n localStorage.removeItem(USER_KEY);\r\n },\r\n\r\n clearAll(): void {\r\n this.clearToken();\r\n this.clearUser();\r\n this.clearAccountData();\r\n },\r\n\r\n saveAccountData(data: Record<string, any>): void {\r\n localStorage.setItem(ACCOUNT_DATA_KEY, JSON.stringify(data));\r\n },\r\n\r\n getAccountData(): Record<string, any> | null {\r\n const stored = localStorage.getItem(ACCOUNT_DATA_KEY);\r\n if (!stored) return null;\r\n\r\n try {\r\n return JSON.parse(stored);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n clearAccountData(): void {\r\n localStorage.removeItem(ACCOUNT_DATA_KEY);\r\n },\r\n};\r\n","import React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport * as smartlinks from '@proveanything/smartlinks';\r\nimport { tokenStorage } from '../utils/tokenStorage';\r\nimport type { AuthUser } from '../types';\r\n\r\ninterface AuthContextValue {\r\n user: AuthUser | null;\r\n token: string | null;\r\n accountData: Record<string, any> | null;\r\n isAuthenticated: boolean;\r\n isLoading: boolean;\r\n login: (token: string, user: AuthUser, accountData?: Record<string, any>) => void;\r\n logout: () => Promise<void>;\r\n getToken: () => string | null;\r\n refreshToken: () => Promise<string>;\r\n}\r\n\r\nconst AuthContext = createContext<AuthContextValue | undefined>(undefined);\r\n\r\ninterface AuthProviderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {\r\n const [user, setUser] = useState<AuthUser | null>(null);\r\n const [token, setToken] = useState<string | null>(null);\r\n const [accountData, setAccountData] = useState<Record<string, any> | null>(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n // Initialize auth state from localStorage\r\n useEffect(() => {\r\n const storedToken = tokenStorage.getToken();\r\n const storedUser = tokenStorage.getUser();\r\n const storedAccountData = tokenStorage.getAccountData();\r\n\r\n if (storedToken && storedUser) {\r\n setToken(storedToken.token);\r\n setUser(storedUser);\r\n setAccountData(storedAccountData);\r\n \r\n // Set bearer token in global Smartlinks SDK via auth.verifyToken\r\n smartlinks.auth.verifyToken(storedToken.token).catch(err => {\r\n console.warn('Failed to restore bearer token on init:', err);\r\n });\r\n }\r\n \r\n setIsLoading(false);\r\n }, []);\r\n\r\n const login = useCallback((authToken: string, authUser: AuthUser, authAccountData?: Record<string, any>) => {\r\n // Store token, user, and account data\r\n tokenStorage.saveToken(authToken);\r\n tokenStorage.saveUser(authUser);\r\n if (authAccountData) {\r\n tokenStorage.saveAccountData(authAccountData);\r\n }\r\n \r\n setToken(authToken);\r\n setUser(authUser);\r\n setAccountData(authAccountData || null);\r\n \r\n // Set bearer token in global Smartlinks SDK via auth.verifyToken\r\n // This both validates the token and sets it for future API calls\r\n smartlinks.auth.verifyToken(authToken).catch(err => {\r\n console.warn('Failed to set bearer token on login:', err);\r\n });\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n // Clear local storage\r\n tokenStorage.clearAll();\r\n setToken(null);\r\n setUser(null);\r\n setAccountData(null);\r\n \r\n // Clear bearer token from global Smartlinks SDK\r\n smartlinks.auth.logout();\r\n }, []);\r\n\r\n const getToken = useCallback((): string | null => {\r\n const storedToken = tokenStorage.getToken();\r\n return storedToken ? storedToken.token : null;\r\n }, []);\r\n\r\n const refreshToken = useCallback(async () => {\r\n throw new Error('Token refresh must be implemented via your backend API');\r\n }, []);\r\n\r\n const value: AuthContextValue = {\r\n user,\r\n token,\r\n accountData,\r\n isAuthenticated: !!token && !!user,\r\n isLoading,\r\n login,\r\n logout,\r\n getToken,\r\n refreshToken,\r\n };\r\n\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n};\r\n\r\nexport const useAuth = (): AuthContextValue => {\r\n const context = useContext(AuthContext);\r\n if (context === undefined) {\r\n throw new Error('useAuth must be used within an AuthProvider');\r\n }\r\n return context;\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport * as smartlinks from '@proveanything/smartlinks';\r\nimport { AuthContainer } from './AuthContainer';\r\nimport { useAuth } from '../context/AuthContext';\r\nimport type { AccountManagementProps, UserProfile, ProfileUpdateData } from '../types';\r\nimport './AuthContainer.css';\r\n\r\nexport const AccountManagement: React.FC<AccountManagementProps> = ({\r\n apiEndpoint,\r\n clientId,\r\n onProfileUpdated,\r\n onEmailChangeRequested,\r\n onPasswordChanged,\r\n onAccountDeleted,\r\n onError,\r\n theme = 'light',\r\n className = '',\r\n customization = {},\r\n}) => {\r\n const auth = useAuth();\r\n const [loading, setLoading] = useState(false);\r\n const [profile, setProfile] = useState<UserProfile | null>(null);\r\n const [error, setError] = useState<string>();\r\n const [success, setSuccess] = useState<string>();\r\n \r\n // Profile form state\r\n const [displayName, setDisplayName] = useState('');\r\n \r\n // Email change state\r\n const [newEmail, setNewEmail] = useState('');\r\n const [emailPassword, setEmailPassword] = useState('');\r\n \r\n // Password change state\r\n const [currentPassword, setCurrentPassword] = useState('');\r\n const [newPassword, setNewPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n \r\n // Phone change state (reuses existing sendPhoneCode flow)\r\n const [newPhone, setNewPhone] = useState('');\r\n const [phoneCode, setPhoneCode] = useState('');\r\n const [phoneCodeSent, setPhoneCodeSent] = useState(false);\r\n \r\n // Account deletion state\r\n const [deletePassword, setDeletePassword] = useState('');\r\n const [deleteConfirmText, setDeleteConfirmText] = useState('');\r\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\r\n\r\n const {\r\n showProfileSection = true,\r\n showEmailSection = true,\r\n showPasswordSection = true,\r\n showPhoneSection = true,\r\n showDeleteAccount = true,\r\n } = customization;\r\n\r\n // Reinitialize Smartlinks SDK when apiEndpoint changes\r\n useEffect(() => {\r\n if (apiEndpoint) {\r\n smartlinks.initializeApi({\r\n baseURL: apiEndpoint,\r\n proxyMode: false,\r\n ngrokSkipBrowserWarning: true,\r\n });\r\n }\r\n }, [apiEndpoint]);\r\n\r\n // Load user profile on mount\r\n useEffect(() => {\r\n loadProfile();\r\n }, [clientId]);\r\n\r\n const loadProfile = async () => {\r\n if (!auth.isAuthenticated) {\r\n setError('You must be logged in to manage your account');\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: GET /api/v1/authkit/:clientId/account/profile\r\n // SDK method: smartlinks.authKit.getProfile(clientId)\r\n \r\n // Temporary mock data for UI testing\r\n const profileData: UserProfile = {\r\n uid: auth.user?.uid || '',\r\n email: auth.user?.email,\r\n displayName: auth.user?.displayName,\r\n phoneNumber: auth.user?.phoneNumber,\r\n photoURL: auth.user?.photoURL,\r\n emailVerified: true,\r\n accountData: auth.accountData || {},\r\n };\r\n \r\n setProfile(profileData);\r\n setDisplayName(profileData.displayName || '');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to load profile';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleUpdateProfile = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n setError(undefined);\r\n setSuccess(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: POST /api/v1/authkit/:clientId/account/update-profile\r\n // SDK method: smartlinks.authKit.updateProfile(clientId, updateData)\r\n \r\n setError('Backend API not yet implemented. See console for required endpoint.');\r\n console.log('Required API endpoint: POST /api/v1/authkit/:clientId/account/update-profile');\r\n console.log('Update data:', { displayName });\r\n \r\n // Uncomment when backend is ready:\r\n // const updateData: ProfileUpdateData = {\r\n // displayName: displayName || undefined,\r\n // photoURL: photoURL || undefined,\r\n // };\r\n // const updatedProfile = await smartlinks.authKit.updateProfile(clientId, updateData);\r\n // setProfile(updatedProfile);\r\n // setSuccess('Profile updated successfully!');\r\n // onProfileUpdated?.(updatedProfile);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to update profile';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleChangeEmail = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n setError(undefined);\r\n setSuccess(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: POST /api/v1/authkit/:clientId/account/change-email\r\n // SDK method: smartlinks.authKit.changeEmail(clientId, newEmail, password)\r\n // Note: No verification flow for now - direct email update\r\n \r\n setError('Backend API not yet implemented. See console for required endpoint.');\r\n console.log('Required API endpoint: POST /api/v1/authkit/:clientId/account/change-email');\r\n console.log('Data:', { newEmail });\r\n \r\n // Uncomment when backend is ready:\r\n // await smartlinks.authKit.changeEmail(clientId, newEmail, emailPassword);\r\n // setSuccess('Email changed successfully!');\r\n // setNewEmail('');\r\n // setEmailPassword('');\r\n // onEmailChangeRequested?.();\r\n // await loadProfile(); // Reload to show new email\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to change email';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleChangePassword = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n \r\n if (newPassword !== confirmPassword) {\r\n setError('New passwords do not match');\r\n return;\r\n }\r\n\r\n if (newPassword.length < 6) {\r\n setError('Password must be at least 6 characters');\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(undefined);\r\n setSuccess(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: POST /api/v1/authkit/:clientId/account/change-password\r\n // SDK method: smartlinks.authKit.changePassword(clientId, currentPassword, newPassword)\r\n \r\n setError('Backend API not yet implemented. See console for required endpoint.');\r\n console.log('Required API endpoint: POST /api/v1/authkit/:clientId/account/change-password');\r\n console.log('Data: currentPassword and newPassword provided');\r\n \r\n // Uncomment when backend is ready:\r\n // await smartlinks.authKit.changePassword(clientId, currentPassword, newPassword);\r\n // setSuccess('Password changed successfully!');\r\n // setCurrentPassword('');\r\n // setNewPassword('');\r\n // setConfirmPassword('');\r\n // onPasswordChanged?.();\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to change password';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleSendPhoneCode = async () => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n await smartlinks.authKit.sendPhoneCode(clientId, newPhone);\r\n setPhoneCodeSent(true);\r\n setSuccess('Verification code sent to your phone');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to send verification code';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleUpdatePhone = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n setError(undefined);\r\n setSuccess(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: POST /api/v1/authkit/:clientId/account/update-phone\r\n // SDK method: smartlinks.authKit.updatePhone(clientId, phoneNumber, verificationCode)\r\n \r\n setError('Backend API not yet implemented. See console for required endpoint.');\r\n console.log('Required API endpoint: POST /api/v1/authkit/:clientId/account/update-phone');\r\n console.log('Data:', { phoneNumber: newPhone, code: phoneCode });\r\n \r\n // Uncomment when backend is ready:\r\n // await smartlinks.authKit.updatePhone(clientId, newPhone, phoneCode);\r\n // setSuccess('Phone number updated successfully!');\r\n // setNewPhone('');\r\n // setPhoneCode('');\r\n // setPhoneCodeSent(false);\r\n // await loadProfile();\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to update phone number';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleDeleteAccount = async () => {\r\n if (deleteConfirmText !== 'DELETE') {\r\n setError('Please type DELETE to confirm account deletion');\r\n return;\r\n }\r\n\r\n if (!deletePassword) {\r\n setError('Password is required');\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n // TODO: Backend implementation required\r\n // Endpoint: DELETE /api/v1/authkit/:clientId/account/delete\r\n // SDK method: smartlinks.authKit.deleteAccount(clientId, password, confirmText)\r\n // Note: This performs a SOFT DELETE (marks as deleted, obfuscates email)\r\n \r\n setError('Backend API not yet implemented. See console for required endpoint.');\r\n console.log('Required API endpoint: DELETE /api/v1/authkit/:clientId/account/delete');\r\n console.log('Data: password and confirmText=\"DELETE\" provided');\r\n console.log('Note: Backend should soft delete (mark deleted, obfuscate email, disable account)');\r\n \r\n // Uncomment when backend is ready:\r\n // await smartlinks.authKit.deleteAccount(clientId, deletePassword, deleteConfirmText);\r\n // setSuccess('Account deleted successfully');\r\n // onAccountDeleted?.();\r\n // await auth.logout();\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to delete account';\r\n setError(errorMessage);\r\n onError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n if (!auth.isAuthenticated) {\r\n return (\r\n <AuthContainer theme={theme} className={className}>\r\n <div className=\"auth-form\">\r\n <h2 className=\"auth-title\">Account Management</h2>\r\n <p className=\"text-muted-foreground\">Please log in to manage your account</p>\r\n </div>\r\n </AuthContainer>\r\n );\r\n }\r\n\r\n if (loading && !profile) {\r\n return (\r\n <AuthContainer theme={theme} className={className}>\r\n <div className=\"auth-form\">\r\n <h2 className=\"auth-title\">Loading...</h2>\r\n </div>\r\n </AuthContainer>\r\n );\r\n }\r\n\r\n return (\r\n <AuthContainer theme={theme} className={className}>\r\n <div className=\"auth-form\" style={{ maxWidth: '600px' }}>\r\n <h2 className=\"auth-title\">Account Management</h2>\r\n \r\n {error && (\r\n <div className=\"auth-error\" role=\"alert\">\r\n {error}\r\n </div>\r\n )}\r\n \r\n {success && (\r\n <div className=\"auth-success\" role=\"alert\">\r\n {success}\r\n </div>\r\n )}\r\n\r\n {/* Profile Section */}\r\n {showProfileSection && (\r\n <section className=\"account-section\">\r\n <h3 className=\"section-title\">Profile Information</h3>\r\n <form onSubmit={handleUpdateProfile} className=\"auth-form-fields\">\r\n <div className=\"form-group\">\r\n <label htmlFor=\"displayName\">Display Name</label>\r\n <input\r\n id=\"displayName\"\r\n type=\"text\"\r\n value={displayName}\r\n onChange={(e) => setDisplayName(e.target.value)}\r\n placeholder=\"Your display name\"\r\n className=\"auth-input\"\r\n />\r\n </div>\r\n\r\n <button \r\n type=\"submit\" \r\n className=\"auth-button\"\r\n disabled={loading}\r\n >\r\n {loading ? 'Updating...' : 'Update Profile'}\r\n </button>\r\n </form>\r\n </section>\r\n )}\r\n\r\n {/* Email Section */}\r\n {showEmailSection && (\r\n <section className=\"account-section\">\r\n <h3 className=\"section-title\">Email Management</h3>\r\n <div className=\"current-info\">\r\n <p><strong>Current Email:</strong> {profile?.email || 'Not set'}</p>\r\n <p>\r\n <strong>Status:</strong>{' '}\r\n <span className={profile?.emailVerified ? 'text-success' : 'text-warning'}>\r\n {profile?.emailVerified ? 'Verified' : 'Unverified'}\r\n </span>\r\n </p>\r\n </div>\r\n <form onSubmit={handleChangeEmail} className=\"auth-form-fields\">\r\n <div className=\"form-group\">\r\n <label htmlFor=\"newEmail\">New Email</label>\r\n <input\r\n id=\"newEmail\"\r\n type=\"email\"\r\n value={newEmail}\r\n onChange={(e) => setNewEmail(e.target.value)}\r\n placeholder=\"new.email@example.com\"\r\n className=\"auth-input\"\r\n required\r\n />\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n <label htmlFor=\"emailPassword\">Confirm Password</label>\r\n <input\r\n id=\"emailPassword\"\r\n type=\"password\"\r\n value={emailPassword}\r\n onChange={(e) => setEmailPassword(e.target.value)}\r\n placeholder=\"Enter your password\"\r\n className=\"auth-input\"\r\n required\r\n />\r\n </div>\r\n\r\n <button \r\n type=\"submit\" \r\n className=\"auth-button\"\r\n disabled={loading}\r\n >\r\n {loading ? 'Sending...' : 'Change Email'}\r\n </button>\r\n </form>\r\n </section>\r\n )}\r\n\r\n {/* Password Section */}\r\n {showPasswordSection && (\r\n <section className=\"account-section\">\r\n <h3 className=\"section-title\">Password Management</h3>\r\n <form onSubmit={handleChangePassword} className=\"auth-form-fields\">\r\n <div className=\"form-group\">\r\n <label htmlFor=\"currentPassword\">Current Password</label>\r\n <input\r\n id=\"currentPassword\"\r\n type=\"password\"\r\n value={currentPassword}\r\n onChange={(e) => setCurrentPassword(e.target.value)}\r\n placeholder=\"Enter current password\"\r\n className=\"auth-input\"\r\n required\r\n />\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n <label htmlFor=\"newPassword\">New Password</label>\r\n <input\r\n id=\"newPassword\"\r\n type=\"password\"\r\n value={newPassword}\r\n onChange={(e) => setNewPassword(e.target.value)}\r\n placeholder=\"Enter new password\"\r\n className=\"auth-input\"\r\n required\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n <label htmlFor=\"confirmPassword\">Confirm New Password</label>\r\n <input\r\n id=\"confirmPassword\"\r\n type=\"password\"\r\n value={confirmPassword}\r\n onChange={(e) => setConfirmPassword(e.target.value)}\r\n placeholder=\"Confirm new password\"\r\n className=\"auth-input\"\r\n required\r\n minLength={6}\r\n />\r\n </div>\r\n\r\n <button \r\n type=\"submit\" \r\n className=\"auth-button\"\r\n disabled={loading}\r\n >\r\n {loading ? 'Changing...' : 'Change Password'}\r\n </button>\r\n </form>\r\n </section>\r\n )}\r\n\r\n {/* Phone Section */}\r\n {showPhoneSection && (\r\n <section className=\"account-section\">\r\n <h3 className=\"section-title\">Phone Number</h3>\r\n <div className=\"current-info\">\r\n <p><strong>Current Phone:</strong> {profile?.phoneNumber || 'Not set'}</p>\r\n </div>\r\n <form onSubmit={handleUpdatePhone} className=\"auth-form-fields\">\r\n <div className=\"form-group\">\r\n <label htmlFor=\"newPhone\">New Phone Number</label>\r\n <input\r\n id=\"newPhone\"\r\n type=\"tel\"\r\n value={newPhone}\r\n onChange={(e) => setNewPhone(e.target.value)}\r\n placeholder=\"+1234567890\"\r\n className=\"auth-input\"\r\n required\r\n />\r\n </div>\r\n\r\n {!phoneCodeSent ? (\r\n <button \r\n type=\"button\"\r\n onClick={handleSendPhoneCode}\r\n className=\"auth-button\"\r\n disabled={loading || !newPhone}\r\n >\r\n {loading ? 'Sending...' : 'Send Verification Code'}\r\n </button>\r\n ) : (\r\n <>\r\n <div className=\"form-group\">\r\n <label htmlFor=\"phoneCode\">Verification Code</label>\r\n <input\r\n id=\"phoneCode\"\r\n type=\"text\"\r\n value={phoneCode}\r\n onChange={(e) => setPhoneCode(e.target.value)}\r\n placeholder=\"Enter 6-digit code\"\r\n className=\"auth-input\"\r\n required\r\n maxLength={6}\r\n />\r\n </div>\r\n\r\n <button \r\n type=\"submit\" \r\n className=\"auth-button\"\r\n disabled={loading}\r\n >\r\n {loading ? 'Verifying...' : 'Verify & Update Phone'}\r\n </button>\r\n </>\r\n )}\r\n </form>\r\n </section>\r\n )}\r\n\r\n {/* Delete Account Section */}\r\n {showDeleteAccount && (\r\n <section className=\"account-section danger-zone\">\r\n <h3 className=\"section-title text-danger\">Danger Zone</h3>\r\n \r\n {!showDeleteConfirm ? (\r\n <button \r\n type=\"button\"\r\n onClick={() => setShowDeleteConfirm(true)}\r\n className=\"auth-button button-danger\"\r\n >\r\n Delete Account\r\n </button>\r\n ) : (\r\n <div className=\"delete-confirm\">\r\n <p className=\"warning-text\">\r\n ⚠️ This action cannot be undone. This will permanently delete your account and all associated data.\r\n </p>\r\n \r\n <div className=\"form-group\">\r\n <label htmlFor=\"deletePassword\">Confirm Password</label>\r\n <input\r\n id=\"deletePassword\"\r\n type=\"password\"\r\n value={deletePassword}\r\n onChange={(e) => setDeletePassword(e.target.value)}\r\n placeholder=\"Enter your password\"\r\n className=\"auth-input\"\r\n />\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n <label htmlFor=\"deleteConfirm\">Type DELETE to confirm</label>\r\n <input\r\n id=\"deleteConfirm\"\r\n type=\"text\"\r\n value={deleteConfirmText}\r\n onChange={(e) => setDeleteConfirmText(e.target.value)}\r\n placeholder=\"DELETE\"\r\n className=\"auth-input\"\r\n />\r\n </div>\r\n\r\n <div className=\"button-group\">\r\n <button \r\n type=\"button\"\r\n onClick={handleDeleteAccount}\r\n className=\"auth-button button-danger\"\r\n disabled={loading}\r\n >\r\n {loading ? 'Deleting...' : 'Permanently Delete Account'}\r\n </button>\r\n <button \r\n type=\"button\"\r\n onClick={() => {\r\n setShowDeleteConfirm(false);\r\n setDeletePassword('');\r\n setDeleteConfirmText('');\r\n }}\r\n className=\"auth-button button-secondary\"\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </section>\r\n )}\r\n </div>\r\n </AuthContainer>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { useAuth } from '../context/AuthContext';\r\n\r\ninterface ProtectedRouteProps {\r\n children: React.ReactNode;\r\n fallback?: React.ReactNode;\r\n redirectTo?: string;\r\n}\r\n\r\nexport const ProtectedRoute: React.FC<ProtectedRouteProps> = ({\r\n children,\r\n fallback,\r\n redirectTo,\r\n}) => {\r\n const { isAuthenticated, isLoading } = useAuth();\r\n\r\n // Show loading state\r\n if (isLoading) {\r\n return <div>Loading...</div>;\r\n }\r\n\r\n // If not authenticated, redirect or show fallback\r\n if (!isAuthenticated) {\r\n if (redirectTo) {\r\n window.location.href = redirectTo;\r\n return null;\r\n }\r\n \r\n return fallback ? <>{fallback}</> : <div>Access denied. Please log in.</div>;\r\n }\r\n\r\n // Render protected content\r\n return <>{children}</>;\r\n};\r\n","import React from 'react';\r\nimport { AuthContainer } from './AuthContainer';\r\nimport type { AuthProvider, AuthUIConfig } from '../types';\r\n\r\ninterface AuthUIPreviewProps {\r\n customization?: Partial<AuthUIConfig>;\r\n enabledProviders?: AuthProvider[];\r\n providerOrder?: string[];\r\n emailDisplayMode?: 'form' | 'button';\r\n theme?: 'light' | 'dark';\r\n className?: string;\r\n}\r\n\r\nexport const AuthUIPreview: React.FC<AuthUIPreviewProps> = ({\r\n customization,\r\n enabledProviders = ['email', 'google', 'phone'],\r\n providerOrder,\r\n emailDisplayMode = 'form',\r\n theme = 'light',\r\n className,\r\n}) => {\r\n const showEmail = enabledProviders.includes('email');\r\n const showGoogle = enabledProviders.includes('google');\r\n const showPhone = enabledProviders.includes('phone');\r\n const showMagicLink = enabledProviders.includes('magic-link');\r\n \r\n // Determine ordered providers (excluding email if in button mode)\r\n const orderedProviders = providerOrder && providerOrder.length > 0\r\n ? providerOrder.filter(p => enabledProviders.includes(p as AuthProvider) && p !== 'email')\r\n : enabledProviders.filter(p => p !== 'email');\r\n \r\n const hasOtherProviders = showGoogle || showPhone || showMagicLink;\r\n\r\n // Render provider button helper\r\n const renderProviderButton = (provider: string) => {\r\n if (provider === 'google' && showGoogle) {\r\n return (\r\n <button key=\"google\" className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.874 2.684-6.615z\"\r\n fill=\"#4285F4\"\r\n />\r\n <path\r\n d=\"M9 18c2.43 0 4.467-.806 5.956-2.183l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332C2.438 15.983 5.482 18 9 18z\"\r\n fill=\"#34A853\"\r\n />\r\n <path\r\n d=\"M3.964 10.707c-.18-.54-.282-1.117-.282-1.707 0-.593.102-1.167.282-1.707V4.961H.957C.347 6.175 0 7.548 0 9s.348 2.825.957 4.039l3.007-2.332z\"\r\n fill=\"#FBBC05\"\r\n />\r\n <path\r\n d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0 5.482 0 2.438 2.017.957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58z\"\r\n fill=\"#EA4335\"\r\n />\r\n </svg>\r\n <span>Continue with Google</span>\r\n </button>\r\n );\r\n }\r\n if (provider === 'phone' && showPhone) {\r\n return (\r\n <button key=\"phone\" className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\r\n </svg>\r\n <span>Continue with Phone</span>\r\n </button>\r\n );\r\n }\r\n if (provider === 'magic-link' && showMagicLink) {\r\n return (\r\n <button key=\"magic-link\" className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\r\n />\r\n </svg>\r\n <span>Continue with Magic Link</span>\r\n </button>\r\n );\r\n }\r\n if (provider === 'email' && showEmail && emailDisplayMode === 'button') {\r\n return (\r\n <button key=\"email\" className=\"auth-provider-button\" disabled>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\r\n />\r\n </svg>\r\n <span>Continue with Email</span>\r\n </button>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <AuthContainer theme={theme} className={className} config={customization}>\r\n {/* Button mode: show all providers as buttons */}\r\n {emailDisplayMode === 'button' ? (\r\n <div className=\"auth-provider-buttons\">\r\n {orderedProviders.concat(showEmail ? ['email'] : []).map(provider => renderProviderButton(provider))}\r\n </div>\r\n ) : (\r\n /* Form mode: show email form first, then other providers */\r\n <>\r\n {showEmail && (\r\n <div className=\"auth-form\">\r\n <div className=\"auth-form-group\">\r\n <label className=\"auth-label\">Email</label>\r\n <input\r\n type=\"email\"\r\n className=\"auth-input\"\r\n placeholder=\"Enter your email\"\r\n disabled\r\n />\r\n </div>\r\n <div className=\"auth-form-group\">\r\n <label className=\"auth-label\">Password</label>\r\n <input\r\n type=\"password\"\r\n className=\"auth-input\"\r\n placeholder=\"Enter your password\"\r\n disabled\r\n />\r\n </div>\r\n <button className=\"auth-button auth-button-primary\" disabled>\r\n Sign In\r\n </button>\r\n <div style={{ textAlign: 'center', marginTop: '1rem' }}>\r\n <button className=\"auth-link\" disabled>\r\n Forgot password?\r\n </button>\r\n </div>\r\n <div style={{ textAlign: 'center', marginTop: '0.5rem', fontSize: '0.875rem', color: 'var(--auth-text-muted, #6B7280)' }}>\r\n Don't have an account?{' '}\r\n <button className=\"auth-link\" disabled>\r\n Sign up\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n \r\n {hasOtherProviders && (\r\n <>\r\n {showEmail && (\r\n <div className=\"auth-or-divider\">\r\n <span>or continue with</span>\r\n </div>\r\n )}\r\n <div className=\"auth-provider-buttons\">\r\n {orderedProviders.map(provider => renderProviderButton(provider))}\r\n </div>\r\n </>\r\n )}\r\n </>\r\n )}\r\n </AuthContainer>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport * as smartlinks from '@proveanything/smartlinks';\r\nimport { AuthContainer } from './components/AuthContainer';\r\nimport { EmailAuthForm } from './components/EmailAuthForm';\r\nimport { ProviderButtons } from './components/ProviderButtons';\r\nimport { PhoneAuthForm } from './components/PhoneAuthForm';\r\nimport { PasswordResetForm } from './components/PasswordResetForm';\r\nimport { MagicLinkForm } from './components/MagicLinkForm';\r\nimport { AuthAPI } from './api';\r\nimport { useAuth } from './context/AuthContext';\r\nimport type { SmartlinksAuthUIProps, AuthMode, AuthFormData, URLAuthParams } from './types';\r\n\r\n// Export AccountManagement component\r\nexport { AccountManagement } from './components/AccountManagement';\r\n\r\n// Default Smartlinks Google OAuth Client ID (public - safe to expose)\r\nconst DEFAULT_GOOGLE_CLIENT_ID = '696509063554-jdlbjl8vsjt7cr0vgkjkjf3ffnvi3a70.apps.googleusercontent.com';\r\n\r\nexport const SmartlinksAuthUI: React.FC<SmartlinksAuthUIProps> = ({\r\n apiEndpoint,\r\n clientId,\r\n clientName,\r\n accountData,\r\n onAuthSuccess,\r\n onAuthError,\r\n enabledProviders = ['email', 'google', 'phone'],\r\n initialMode = 'login',\r\n redirectUrl,\r\n theme = 'light',\r\n className,\r\n customization,\r\n skipConfigFetch = false,\r\n}) => {\r\n const [mode, setMode] = useState<AuthMode>(initialMode);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string>();\r\n const [resetSuccess, setResetSuccess] = useState(false);\r\n const [authSuccess, setAuthSuccess] = useState(false);\r\n const [successMessage, setSuccessMessage] = useState<string>();\r\n const [showResendVerification, setShowResendVerification] = useState(false);\r\n const [resendEmail, setResendEmail] = useState<string>();\r\n const [showRequestNewReset, setShowRequestNewReset] = useState(false);\r\n const [resetRequestEmail, setResetRequestEmail] = useState<string>();\r\n const [resetToken, setResetToken] = useState<string>(); // Store the reset token from URL\r\n const [config, setConfig] = useState<any>(null);\r\n const [configLoading, setConfigLoading] = useState(!skipConfigFetch);\r\n const [showEmailForm, setShowEmailForm] = useState(false); // Track if email form should be shown when emailDisplayMode is 'button'\r\n\r\n const api = new AuthAPI(apiEndpoint, clientId, clientName);\r\n const auth = useAuth();\r\n\r\n // Reinitialize Smartlinks SDK when apiEndpoint changes (for test/dev scenarios)\r\n // IMPORTANT: Preserve bearer token during reinitialization\r\n useEffect(() => {\r\n if (apiEndpoint) {\r\n // Get current token before reinitializing\r\n const currentToken = auth.getToken();\r\n \r\n smartlinks.initializeApi({\r\n baseURL: apiEndpoint,\r\n proxyMode: false, // Direct API calls when custom endpoint is provided\r\n ngrokSkipBrowserWarning: true,\r\n });\r\n \r\n // Restore bearer token after reinitialization using auth.verifyToken\r\n if (currentToken) {\r\n smartlinks.auth.verifyToken(currentToken).catch(err => {\r\n console.warn('Failed to restore bearer token after reinit:', err);\r\n });\r\n }\r\n }\r\n }, [apiEndpoint, auth]);\r\n\r\n // Get the effective redirect URL (use prop or default to current page)\r\n const getRedirectUrl = () => {\r\n if (redirectUrl) return redirectUrl;\r\n \r\n // Get the full current URL including hash routes\r\n // Remove any existing query parameters to avoid duplication\r\n const currentUrl = window.location.href.split('?')[0];\r\n return currentUrl;\r\n };\r\n\r\n // Fetch UI configuration\r\n useEffect(() => {\r\n if (skipConfigFetch) {\r\n setConfig(customization || {});\r\n return;\r\n }\r\n\r\n const fetchConfig = async () => {\r\n try {\r\n // Check localStorage cache first\r\n const cacheKey = `auth_ui_config_${clientId || 'default'}`;\r\n const cached = localStorage.getItem(cacheKey);\r\n \r\n if (cached) {\r\n const { config: cachedConfig, timestamp } = JSON.parse(cached);\r\n const age = Date.now() - timestamp;\r\n \r\n // Use cache if less than 1 hour old\r\n if (age < 3600000) {\r\n setConfig({ ...cachedConfig, ...customization });\r\n setConfigLoading(false);\r\n \r\n // Fetch in background to update cache\r\n api.fetchConfig().then(freshConfig => {\r\n localStorage.setItem(cacheKey, JSON.stringify({\r\n config: freshConfig,\r\n timestamp: Date.now()\r\n }));\r\n });\r\n \r\n return;\r\n }\r\n }\r\n\r\n // Fetch from API\r\n const fetchedConfig = await api.fetchConfig();\r\n \r\n // Merge with customization props (props take precedence)\r\n const mergedConfig = { ...fetchedConfig, ...customization };\r\n \r\n setConfig(mergedConfig);\r\n \r\n // Cache the fetched config\r\n localStorage.setItem(cacheKey, JSON.stringify({\r\n config: fetchedConfig,\r\n timestamp: Date.now()\r\n }));\r\n \r\n } catch (err) {\r\n console.error('Failed to fetch config:', err);\r\n setConfig(customization || {});\r\n } finally {\r\n setConfigLoading(false);\r\n }\r\n };\r\n\r\n fetchConfig();\r\n }, [apiEndpoint, clientId, customization, skipConfigFetch]);\r\n\r\n // Reset showEmailForm when mode changes away from login/register\r\n useEffect(() => {\r\n if (mode !== 'login' && mode !== 'register') {\r\n setShowEmailForm(false);\r\n }\r\n }, [mode]);\r\n\r\n // Handle URL-based auth flows (email verification, password reset)\r\n useEffect(() => {\r\n // Helper to get URL parameters from either hash or search\r\n const getUrlParams = () => {\r\n // First check if there are params in the hash (for hash routing)\r\n const hash = window.location.hash;\r\n const hashQueryIndex = hash.indexOf('?');\r\n \r\n if (hashQueryIndex !== -1) {\r\n // Extract query string from hash (e.g., #/test?mode=verifyEmail&token=abc)\r\n const hashQuery = hash.substring(hashQueryIndex + 1);\r\n return new URLSearchParams(hashQuery);\r\n }\r\n \r\n // Fall back to regular search params (for non-hash routing)\r\n return new URLSearchParams(window.location.search);\r\n };\r\n \r\n const params = getUrlParams();\r\n const urlMode = params.get('mode') as URLAuthParams['mode'];\r\n const token = params.get('token');\r\n\r\n console.log('URL params detected:', { urlMode, token, hash: window.location.hash, search: window.location.search });\r\n\r\n if (urlMode && token) {\r\n handleURLBasedAuth(urlMode, token);\r\n }\r\n }, []);\r\n\r\n const handleURLBasedAuth = async (urlMode: string, token: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (urlMode === 'verifyEmail') {\r\n console.log('Verifying email with token:', token);\r\n const response = await api.verifyEmailWithToken(token);\r\n \r\n // Get email verification mode from response or config\r\n const verificationMode = response.emailVerificationMode || config?.emailVerification?.mode || 'verify-then-auto-login';\r\n \r\n if ((verificationMode === 'verify-then-auto-login' || verificationMode === 'immediate') && response.token) {\r\n // Auto-login modes: Log the user in immediately if token is provided\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Email verified successfully! You are now logged in.');\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n \r\n // Redirect after a brief delay to show success message\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else {\r\n // verify-then-manual-login mode or no token: Show success but require manual login\r\n setAuthSuccess(true);\r\n setSuccessMessage('Email verified successfully! Please log in with your credentials.');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n \r\n // Switch back to login mode after a delay\r\n setTimeout(() => {\r\n setAuthSuccess(false);\r\n setMode('login');\r\n }, 3000);\r\n }\r\n } else if (urlMode === 'resetPassword') {\r\n console.log('Verifying reset token:', token);\r\n // Verify token is valid, then show password reset form\r\n await api.verifyResetToken(token);\r\n setResetToken(token); // Store token for use in password reset\r\n setMode('reset-password');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else if (urlMode === 'magicLink') {\r\n console.log('Verifying magic link token:', token);\r\n const response = await api.verifyMagicLink(token);\r\n \r\n // Auto-login with magic link if token is provided\r\n if (response.token) {\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Magic link verified! You are now logged in.');\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n \r\n // Redirect after a brief delay to show success message\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else {\r\n throw new Error('Authentication failed - no token received');\r\n }\r\n }\r\n } catch (err) {\r\n console.error('URL-based auth error:', err);\r\n const errorMessage = err instanceof Error ? err.message : 'An error occurred';\r\n \r\n // If it's an email verification error (expired/invalid token), show resend option\r\n if (urlMode === 'verifyEmail') {\r\n setError(`${errorMessage} - Please enter your email below to receive a new verification link.`);\r\n setShowResendVerification(true);\r\n setMode('login'); // Show the login form UI\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else if (urlMode === 'resetPassword') {\r\n // If password reset token is invalid/expired, show request new reset link option\r\n setError(`${errorMessage} - Please enter your email below to receive a new password reset link.`);\r\n setShowRequestNewReset(true);\r\n setMode('login');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else if (urlMode === 'magicLink') {\r\n // If magic link is invalid/expired\r\n setError(`${errorMessage} - Please request a new magic link below.`);\r\n setMode('magic-link');\r\n \r\n // Clear the URL parameters\r\n const cleanUrl = window.location.href.split('?')[0];\r\n window.history.replaceState({}, document.title, cleanUrl);\r\n } else {\r\n setError(errorMessage);\r\n }\r\n \r\n onAuthError?.(err instanceof Error ? err : new Error('An error occurred'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleEmailAuth = async (data: AuthFormData) => {\r\n setLoading(true);\r\n setError(undefined);\r\n setAuthSuccess(false);\r\n\r\n try {\r\n const response =\r\n mode === 'login'\r\n ? await api.login(data.email!, data.password!)\r\n : await api.register({\r\n ...data,\r\n accountData: mode === 'register' ? accountData : undefined,\r\n redirectUrl: getRedirectUrl(), // Include redirect URL for email verification\r\n });\r\n\r\n // Get email verification mode from response or config (default: verify-then-auto-login)\r\n const verificationMode = response.emailVerificationMode || config?.emailVerification?.mode || 'verify-then-auto-login';\r\n const gracePeriodHours = config?.emailVerification?.gracePeriodHours || 24;\r\n\r\n if (mode === 'register') {\r\n // Handle different verification modes\r\n if (verificationMode === 'immediate' && response.token) {\r\n // Immediate mode: Log in right away if token is provided\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n const deadline = response.emailVerificationDeadline \r\n ? new Date(response.emailVerificationDeadline).toLocaleString()\r\n : `${gracePeriodHours} hours`;\r\n setSuccessMessage(\r\n `Account created! You're logged in now. Please verify your email by ${deadline} to keep your account active.`\r\n );\r\n if (response.token) {\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n }\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else if (verificationMode === 'verify-then-auto-login') {\r\n // Verify-then-auto-login mode: Don't log in yet, but will auto-login after email verification\r\n setAuthSuccess(true);\r\n setSuccessMessage(\r\n 'Account created! Please check your email and click the verification link to complete your registration.'\r\n );\r\n } else {\r\n // verify-then-manual-login mode: Traditional flow\r\n setAuthSuccess(true);\r\n setSuccessMessage(\r\n 'Account created successfully! Please check your email to verify your account, then log in.'\r\n );\r\n }\r\n } else {\r\n // Login mode - always log in if token is provided\r\n if (response.token) {\r\n // Check for account lock or verification requirements\r\n if (response.accountLocked) {\r\n throw new Error('Your account has been locked due to unverified email. Please check your email or request a new verification link.');\r\n }\r\n \r\n if (response.requiresEmailVerification) {\r\n throw new Error('Please verify your email before logging in. Check your inbox for the verification link.');\r\n }\r\n\r\n auth.login(response.token, response.user, response.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Login successful!');\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n } else {\r\n throw new Error('Authentication failed - please verify your email before logging in.');\r\n }\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Authentication failed';\r\n \r\n // Check if error is about email already registered\r\n if (mode === 'register' && errorMessage.toLowerCase().includes('already') && errorMessage.toLowerCase().includes('email')) {\r\n setShowResendVerification(true);\r\n setResendEmail(data.email!);\r\n setError('This email is already registered. If you didn\\'t receive the verification email, you can resend it below.');\r\n } else {\r\n setError(errorMessage);\r\n }\r\n \r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleResendVerification = async () => {\r\n if (!resendEmail) return;\r\n \r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n // For resend, we need the userId. If we don't have it, we need to handle this differently\r\n // The backend should ideally handle this case\r\n await api.resendVerification('unknown', resendEmail, getRedirectUrl());\r\n \r\n setAuthSuccess(true);\r\n setSuccessMessage('Verification email sent! Please check your inbox.');\r\n setShowResendVerification(false);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to resend verification email';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleRequestNewReset = async () => {\r\n if (!resetRequestEmail) return;\r\n \r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n await api.requestPasswordReset(resetRequestEmail, getRedirectUrl());\r\n setAuthSuccess(true);\r\n setSuccessMessage('Password reset email sent! Please check your inbox.');\r\n setShowRequestNewReset(false);\r\n setResetRequestEmail('');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to send password reset email';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleGoogleLogin = async () => {\r\n // Use custom client ID from config, or fall back to default Smartlinks client ID\r\n const googleClientId = config?.googleClientId || DEFAULT_GOOGLE_CLIENT_ID;\r\n // Determine OAuth flow: default to 'oneTap' for better UX, but allow 'popup' for iframe compatibility\r\n const oauthFlow = config?.googleOAuthFlow || 'oneTap';\r\n\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n const google = (window as any).google;\r\n if (!google) {\r\n throw new Error('Google Identity Services not loaded. Please check your internet connection.');\r\n }\r\n\r\n if (oauthFlow === 'popup') {\r\n // Use OAuth2 popup flow (works in iframes but requires popup permission)\r\n if (!google.accounts.oauth2) {\r\n throw new Error('Google OAuth2 not available');\r\n }\r\n\r\n const client = google.accounts.oauth2.initTokenClient({\r\n client_id: googleClientId,\r\n scope: 'openid email profile',\r\n callback: async (response: any) => {\r\n try {\r\n if (response.error) {\r\n throw new Error(response.error_description || response.error);\r\n }\r\n \r\n const accessToken = response.access_token;\r\n \r\n // Send access token to backend\r\n const authResponse = await api.loginWithGoogle(accessToken);\r\n \r\n if (authResponse.token) {\r\n auth.login(authResponse.token, authResponse.user, authResponse.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Google login successful!');\r\n onAuthSuccess(authResponse.token, authResponse.user, authResponse.accountData);\r\n } else {\r\n throw new Error('Authentication failed - no token received');\r\n }\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n \r\n setLoading(false);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Google login failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n setLoading(false);\r\n }\r\n },\r\n });\r\n\r\n client.requestAccessToken();\r\n } else {\r\n // Use One Tap / Sign-In button flow (smoother UX but doesn't work in iframes)\r\n google.accounts.id.initialize({\r\n client_id: googleClientId,\r\n callback: async (response: any) => {\r\n try {\r\n const idToken = response.credential;\r\n \r\n const authResponse = await api.loginWithGoogle(idToken);\r\n \r\n if (authResponse.token) {\r\n auth.login(authResponse.token, authResponse.user, authResponse.accountData);\r\n setAuthSuccess(true);\r\n setSuccessMessage('Google login successful!');\r\n onAuthSuccess(authResponse.token, authResponse.user, authResponse.accountData);\r\n } else {\r\n throw new Error('Authentication failed - no token received');\r\n }\r\n\r\n if (redirectUrl) {\r\n setTimeout(() => {\r\n window.location.href = redirectUrl;\r\n }, 2000);\r\n }\r\n \r\n setLoading(false);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Google login failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n setLoading(false);\r\n }\r\n },\r\n auto_select: false,\r\n cancel_on_tap_outside: true,\r\n });\r\n\r\n google.accounts.id.prompt((notification: any) => {\r\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\r\n setLoading(false);\r\n }\r\n });\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Google login failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handlePhoneAuth = async (phoneNumber: string, verificationCode?: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (!verificationCode) {\r\n // Send verification code via Twilio Verify Service\r\n await api.sendPhoneCode(phoneNumber);\r\n // Twilio Verify Service tracks the verification by phone number\r\n // No need to store verificationId\r\n } else {\r\n // Verify code - Twilio identifies the verification by phone number\r\n const response = await api.verifyPhoneCode(phoneNumber, verificationCode);\r\n \r\n // Update auth context with account data if token is provided\r\n if (response.token) {\r\n auth.login(response.token, response.user, response.accountData);\r\n onAuthSuccess(response.token, response.user, response.accountData);\r\n\r\n if (redirectUrl) {\r\n window.location.href = redirectUrl;\r\n }\r\n } else {\r\n throw new Error('Authentication failed - no token received');\r\n }\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Phone authentication failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handlePasswordReset = async (emailOrPassword: string, confirmPassword?: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n if (resetToken && confirmPassword) {\r\n // Complete password reset with token\r\n await api.completePasswordReset(resetToken, emailOrPassword);\r\n setResetSuccess(true);\r\n setResetToken(undefined); // Clear token after successful reset\r\n } else {\r\n // Request password reset email\r\n await api.requestPasswordReset(emailOrPassword, getRedirectUrl());\r\n setResetSuccess(true);\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Password reset failed';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleMagicLink = async (email: string) => {\r\n setLoading(true);\r\n setError(undefined);\r\n\r\n try {\r\n await api.sendMagicLink(email, getRedirectUrl());\r\n setAuthSuccess(true);\r\n setSuccessMessage('Magic link sent! Check your email to log in.');\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to send magic link';\r\n setError(errorMessage);\r\n onAuthError?.(err instanceof Error ? err : new Error(errorMessage));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n if (configLoading) {\r\n return (\r\n <AuthContainer theme={theme} className={className}>\r\n <div style={{ textAlign: 'center', padding: '2rem' }}>\r\n <div className=\"auth-spinner\" />\r\n </div>\r\n </AuthContainer>\r\n );\r\n }\r\n\r\n return (\r\n <AuthContainer theme={theme} className={className} config={config}>\r\n {authSuccess ? (\r\n <div style={{ textAlign: 'center', padding: '2rem' }}>\r\n <div style={{ \r\n color: 'var(--auth-primary-color, #4F46E5)', \r\n fontSize: '3rem',\r\n marginBottom: '1rem'\r\n }}>\r\n ✓\r\n </div>\r\n <h2 style={{ \r\n marginBottom: '0.5rem',\r\n fontSize: '1.5rem',\r\n fontWeight: 600\r\n }}>\r\n {successMessage?.includes('verified') ? 'Email Verified!' : \r\n successMessage?.includes('Magic link') ? 'Check Your Email!' :\r\n mode === 'register' ? 'Account Created!' : 'Login Successful!'}\r\n </h2>\r\n <p style={{ \r\n color: '#6B7280',\r\n fontSize: '0.875rem'\r\n }}>\r\n {successMessage}\r\n </p>\r\n </div>\r\n ) : mode === 'magic-link' ? (\r\n <MagicLinkForm\r\n onSubmit={handleMagicLink}\r\n onCancel={() => setMode('login')}\r\n loading={loading}\r\n error={error}\r\n />\r\n ) : mode === 'phone' ? (\r\n <PhoneAuthForm\r\n onSubmit={handlePhoneAuth}\r\n onBack={() => setMode('login')}\r\n loading={loading}\r\n error={error}\r\n />\r\n ) : mode === 'reset-password' ? (\r\n <PasswordResetForm\r\n onSubmit={handlePasswordReset}\r\n onBack={() => {\r\n setMode('login');\r\n setResetSuccess(false);\r\n setResetToken(undefined); // Clear token when going back\r\n }}\r\n loading={loading}\r\n error={error}\r\n success={resetSuccess}\r\n token={resetToken} // Pass token to form\r\n />\r\n ) : (mode === 'login' || mode === 'register') ? (\r\n <>\r\n {showResendVerification ? (\r\n <div style={{ marginTop: '1rem', padding: '1.5rem', backgroundColor: 'rgba(79, 70, 229, 0.05)', borderRadius: '0.5rem' }}>\r\n <h3 style={{ marginBottom: '0.75rem', fontSize: '1rem', fontWeight: 600, color: 'var(--auth-text-color, #374151)' }}>\r\n Verification Link Expired\r\n </h3>\r\n <p style={{ marginBottom: '1rem', fontSize: '0.875rem', color: 'var(--auth-text-color, #6B7280)', lineHeight: '1.5' }}>\r\n Your verification link has expired or is no longer valid. Please enter your email address below and we'll send you a new verification link.\r\n </p>\r\n <input\r\n type=\"email\"\r\n value={resendEmail || ''}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"your@email.com\"\r\n style={{\r\n width: '100%',\r\n padding: '0.625rem',\r\n marginBottom: '1rem',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n fontSize: '0.875rem',\r\n boxSizing: 'border-box'\r\n }}\r\n />\r\n <div style={{ display: 'flex', gap: '0.75rem' }}>\r\n <button\r\n onClick={handleResendVerification}\r\n disabled={loading || !resendEmail}\r\n style={{\r\n flex: 1,\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'var(--auth-primary-color, #4F46E5)',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '0.375rem',\r\n cursor: (loading || !resendEmail) ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: (loading || !resendEmail) ? 0.6 : 1\r\n }}\r\n >\r\n {loading ? 'Sending...' : 'Send New Verification Link'}\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowResendVerification(false);\r\n setResendEmail('');\r\n setError(undefined);\r\n }}\r\n disabled={loading}\r\n style={{\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'transparent',\r\n color: 'var(--auth-text-color, #6B7280)',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n cursor: loading ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: loading ? 0.6 : 1\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n ) : showRequestNewReset ? (\r\n <div style={{ marginTop: '1rem', padding: '1.5rem', backgroundColor: 'rgba(239, 68, 68, 0.05)', borderRadius: '0.5rem' }}>\r\n <h3 style={{ marginBottom: '0.75rem', fontSize: '1rem', fontWeight: 600, color: 'var(--auth-text-color, #374151)' }}>\r\n Password Reset Link Expired\r\n </h3>\r\n <p style={{ marginBottom: '1rem', fontSize: '0.875rem', color: 'var(--auth-text-color, #6B7280)', lineHeight: '1.5' }}>\r\n Your password reset link has expired or is no longer valid. Please enter your email address below and we'll send you a new password reset link.\r\n </p>\r\n <input\r\n type=\"email\"\r\n value={resetRequestEmail || ''}\r\n onChange={(e) => setResetRequestEmail(e.target.value)}\r\n placeholder=\"your@email.com\"\r\n style={{\r\n width: '100%',\r\n padding: '0.625rem',\r\n marginBottom: '1rem',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n fontSize: '0.875rem',\r\n boxSizing: 'border-box'\r\n }}\r\n />\r\n <div style={{ display: 'flex', gap: '0.75rem' }}>\r\n <button\r\n onClick={handleRequestNewReset}\r\n disabled={loading || !resetRequestEmail}\r\n style={{\r\n flex: 1,\r\n padding: '0.625rem 1rem',\r\n backgroundColor: '#EF4444',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '0.375rem',\r\n cursor: (loading || !resetRequestEmail) ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: (loading || !resetRequestEmail) ? 0.6 : 1\r\n }}\r\n >\r\n {loading ? 'Sending...' : 'Send New Reset Link'}\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowRequestNewReset(false);\r\n setResetRequestEmail('');\r\n setError(undefined);\r\n }}\r\n disabled={loading}\r\n style={{\r\n padding: '0.625rem 1rem',\r\n backgroundColor: 'transparent',\r\n color: 'var(--auth-text-color, #6B7280)',\r\n border: '1px solid var(--auth-border-color, #D1D5DB)',\r\n borderRadius: '0.375rem',\r\n cursor: loading ? 'not-allowed' : 'pointer',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n opacity: loading ? 0.6 : 1\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <>\r\n {(() => {\r\n const emailDisplayMode = config?.emailDisplayMode || 'form';\r\n const providerOrder = config?.providerOrder || (config?.enabledProviders || enabledProviders);\r\n const actualProviders = config?.enabledProviders || enabledProviders;\r\n\r\n // Button mode: show provider selection first, then email form if email is selected\r\n if (emailDisplayMode === 'button' && !showEmailForm) {\r\n return (\r\n <ProviderButtons\r\n enabledProviders={actualProviders}\r\n providerOrder={providerOrder}\r\n onEmailLogin={() => setShowEmailForm(true)}\r\n onGoogleLogin={handleGoogleLogin}\r\n onPhoneLogin={() => setMode('phone')}\r\n onMagicLinkLogin={() => setMode('magic-link')}\r\n loading={loading}\r\n />\r\n );\r\n }\r\n\r\n // Form mode or email button was clicked: show email form with other providers\r\n return (\r\n <>\r\n {emailDisplayMode === 'button' && showEmailForm && (\r\n <button\r\n onClick={() => setShowEmailForm(false)}\r\n style={{\r\n marginBottom: '1rem',\r\n padding: '0.5rem',\r\n background: 'none',\r\n border: 'none',\r\n color: 'var(--auth-text-color, #6B7280)',\r\n cursor: 'pointer',\r\n fontSize: '0.875rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.25rem'\r\n }}\r\n >\r\n ← Back to options\r\n </button>\r\n )}\r\n <EmailAuthForm\r\n mode={mode}\r\n onSubmit={handleEmailAuth}\r\n onModeSwitch={() => {\r\n setMode(mode === 'login' ? 'register' : 'login');\r\n setShowResendVerification(false);\r\n setShowRequestNewReset(false);\r\n setError(undefined);\r\n }}\r\n onForgotPassword={() => setMode('reset-password')}\r\n loading={loading}\r\n error={error}\r\n />\r\n {emailDisplayMode === 'form' && actualProviders.length > 1 && (\r\n <ProviderButtons\r\n enabledProviders={actualProviders.filter((p: string) => p !== 'email')}\r\n providerOrder={providerOrder}\r\n onGoogleLogin={handleGoogleLogin}\r\n onPhoneLogin={() => setMode('phone')}\r\n onMagicLinkLogin={() => setMode('magic-link')}\r\n loading={loading}\r\n />\r\n )}\r\n </>\r\n );\r\n })()}\r\n </>\r\n )}\r\n </>\r\n ) : null}\r\n </AuthContainer>\r\n );\r\n};\r\n\r\n// Export session management\r\nexport { AuthProvider, useAuth } from './context/AuthContext';\r\nexport { ProtectedRoute } from './components/ProtectedRoute';\r\nexport { tokenStorage } from './utils/tokenStorage';\r\n\r\n// Export preview component\r\nexport { AuthUIPreview } from './components/AuthUIPreview';\r\n\r\n// Export types\r\nexport type * from './types';\r\n\r\n// Legacy export for backward compatibility\r\nexport { SmartlinksAuthUI as FirebaseAuthUI };\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|