@rqdhw3n/react-auth-flow 1.0.5 → 1.0.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/styles/injectAuthStyles.ts","../src/context/AuthContext.ts","../src/utils/normalizeError.ts","../src/services/createAuthClient.ts","../src/context/AuthProvider.tsx","../src/hooks/useAuth.ts","../src/utils/cn.ts","../src/components/authClassNames.ts","../src/components/LoginForm.tsx","../src/components/RegisterForm.tsx","../src/components/ForgotPasswordForm.tsx","../src/components/ResetPasswordForm.tsx","../src/components/VerifyEmailForm.tsx","../src/components/ProtectedRoute.tsx"],"sourcesContent":["import authStyles from \"./auth.css?inline\";\n\nconst STYLE_ELEMENT_ID = \"rq-auth-flow-styles\";\n\nif (typeof document !== \"undefined\" && !document.getElementById(STYLE_ELEMENT_ID)) {\n const styleElement = document.createElement(\"style\");\n styleElement.id = STYLE_ELEMENT_ID;\n styleElement.textContent = authStyles;\n document.head.appendChild(styleElement);\n}\n","import { createContext } from \"react\";\r\nimport { AuthContextValue } from \"../types\";\r\n\r\n/**\r\n * Auth Context\r\n * Provides authentication state and methods to the application\r\n */\r\nexport const AuthContext = createContext<AuthContextValue | undefined>(\r\n undefined\r\n);\r\n\r\nAuthContext.displayName = \"AuthContext\";\r\n","import { AuthError } from \"../types\";\r\n\r\n/**\r\n * Normalizes various error types into a consistent AuthError format\r\n */\r\nexport function normalizeError(error: unknown): AuthError {\r\n // Handle AuthError objects\r\n if (isAuthError(error)) {\r\n return error;\r\n }\r\n\r\n // Handle standard Error objects\r\n if (error instanceof Error) {\r\n return {\r\n code: \"ERROR\",\r\n message: error.message,\r\n statusCode: undefined,\r\n };\r\n }\r\n\r\n // Handle fetch errors with response\r\n if (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"status\" in error &&\r\n \"statusText\" in error\r\n ) {\r\n const fetchError = error as { status: number; statusText: string };\r\n return {\r\n code: `HTTP_${fetchError.status}`,\r\n message: fetchError.statusText || \"Request failed\",\r\n statusCode: fetchError.status,\r\n };\r\n }\r\n\r\n // Handle JSON API error response\r\n if (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"error\" in error &&\r\n typeof error.error === \"object\"\r\n ) {\r\n const apiError = error.error as Record<string, unknown>;\r\n return {\r\n code: (apiError.code as string) || \"API_ERROR\",\r\n message: (apiError.message as string) || \"An error occurred\",\r\n statusCode: (apiError.statusCode as number) || undefined,\r\n details: apiError.details as Record<string, unknown>,\r\n };\r\n }\r\n\r\n // Handle plain objects with message property\r\n if (typeof error === \"object\" && error !== null && \"message\" in error) {\r\n const objError = error as { message: unknown; code?: unknown };\r\n return {\r\n code: (objError.code as string) || \"ERROR\",\r\n message:\r\n typeof objError.message === \"string\"\r\n ? objError.message\r\n : \"An unknown error occurred\",\r\n };\r\n }\r\n\r\n // Handle strings\r\n if (typeof error === \"string\") {\r\n return {\r\n code: \"ERROR\",\r\n message: error,\r\n };\r\n }\r\n\r\n // Fallback\r\n return {\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"An unknown error occurred\",\r\n };\r\n}\r\n\r\n/**\r\n * Type guard to check if an object is an AuthError\r\n */\r\nfunction isAuthError(error: unknown): error is AuthError {\r\n return (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"code\" in error &&\r\n \"message\" in error &&\r\n typeof (error as AuthError).code === \"string\" &&\r\n typeof (error as AuthError).message === \"string\"\r\n );\r\n}\r\n","import {\r\n AuthClientConfig,\r\n AuthEndpoints,\r\n RequestAdapter,\r\n AuthResponse,\r\n} from \"../types\";\r\nimport { normalizeError } from \"../utils/normalizeError\";\r\n\r\n/**\r\n * Default endpoints\r\n */\r\nconst DEFAULT_ENDPOINTS: AuthEndpoints = {\r\n login: \"/auth/login\",\r\n register: \"/auth/register\",\r\n logout: \"/auth/logout\",\r\n me: \"/auth/me\",\r\n refresh: \"/auth/refresh\",\r\n forgotPassword: \"/auth/forgot-password\",\r\n resetPassword: \"/auth/reset-password\",\r\n verifyEmail: \"/auth/verify-email\",\r\n};\r\n\r\n/**\r\n * Default request adapter using fetch\r\n */\r\nconst defaultAdapter: RequestAdapter = async (url, options) => {\r\n const response = await fetch(url, options);\r\n return response;\r\n};\r\n\r\n/**\r\n * Creates an authenticated API client\r\n */\r\nexport function createAuthClient(config: AuthClientConfig = {}) {\r\n const {\r\n baseURL = \"\",\r\n endpoints = {},\r\n headers = {},\r\n credentials = \"include\",\r\n adapter = defaultAdapter,\r\n } = config;\r\n\r\n const finalEndpoints = { ...DEFAULT_ENDPOINTS, ...endpoints };\r\n\r\n /**\r\n * Makes an authenticated request\r\n */\r\n async function request<T = unknown>(\r\n method: string,\r\n endpoint: string,\r\n data?: Record<string, unknown>\r\n ): Promise<T> {\r\n const url = `${baseURL}${endpoint}`;\r\n const options: RequestInit = {\r\n method,\r\n credentials,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...headers,\r\n },\r\n };\r\n\r\n if (data) {\r\n options.body = JSON.stringify(data);\r\n }\r\n\r\n try {\r\n const response = await adapter(url, options);\r\n\r\n if (!response.ok) {\r\n let errorData: unknown = null;\r\n try {\r\n errorData = await response.json();\r\n } catch {\r\n errorData = {\r\n error: {\r\n message: response.statusText,\r\n statusCode: response.status,\r\n },\r\n };\r\n }\r\n throw errorData;\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (contentType && contentType.includes(\"application/json\")) {\r\n return await response.json();\r\n }\r\n\r\n return {} as T;\r\n } catch (error) {\r\n throw normalizeError(error);\r\n }\r\n }\r\n\r\n return {\r\n /**\r\n * Login with email and password\r\n */\r\n async login(email: string, password: string, rememberMe?: boolean) {\r\n const response = await request<AuthResponse>(\r\n \"POST\",\r\n finalEndpoints.login!,\r\n { email, password, rememberMe }\r\n );\r\n return response;\r\n },\r\n\r\n /**\r\n * Register a new account\r\n */\r\n async register(payload: Record<string, unknown>) {\r\n const response = await request<AuthResponse>(\r\n \"POST\",\r\n finalEndpoints.register!,\r\n payload\r\n );\r\n return response;\r\n },\r\n\r\n /**\r\n * Logout the user\r\n */\r\n async logout() {\r\n await request(\"POST\", finalEndpoints.logout!);\r\n },\r\n\r\n /**\r\n * Get current user\r\n */\r\n async me() {\r\n const response = await request<AuthResponse>(\r\n \"GET\",\r\n finalEndpoints.me!\r\n );\r\n return response;\r\n },\r\n\r\n /**\r\n * Refresh the authentication session\r\n */\r\n async refresh() {\r\n const response = await request<AuthResponse>(\r\n \"POST\",\r\n finalEndpoints.refresh!\r\n );\r\n return response;\r\n },\r\n\r\n /**\r\n * Request a password reset\r\n */\r\n async forgotPassword(email: string) {\r\n await request(\"POST\", finalEndpoints.forgotPassword!, { email });\r\n },\r\n\r\n /**\r\n * Reset password with token\r\n */\r\n async resetPassword(\r\n token: string,\r\n password: string,\r\n confirmPassword?: string\r\n ) {\r\n await request(\"POST\", finalEndpoints.resetPassword!, {\r\n token,\r\n password,\r\n confirmPassword,\r\n });\r\n },\r\n\r\n /**\r\n * Verify email with token\r\n */\r\n async verifyEmail(token: string, email?: string) {\r\n await request(\"POST\", finalEndpoints.verifyEmail!, { token, email });\r\n },\r\n\r\n /**\r\n * Set custom headers for subsequent requests\r\n */\r\n setHeaders(newHeaders: Record<string, string>) {\r\n Object.assign(headers, newHeaders);\r\n },\r\n\r\n /**\r\n * Get current endpoints configuration\r\n */\r\n getEndpoints() {\r\n return finalEndpoints;\r\n },\r\n };\r\n}\r\n\r\nexport type AuthClient = ReturnType<typeof createAuthClient>;\r\n","import React, { useEffect, useReducer, useCallback } from \"react\";\r\nimport {\r\n AuthProviderProps,\r\n AuthUser,\r\n AuthError,\r\n LoginPayload,\r\n RegisterPayload,\r\n ForgotPasswordPayload,\r\n ResetPasswordPayload,\r\n VerifyEmailPayload,\r\n} from \"../types\";\r\nimport { AuthContext } from \"./AuthContext\";\r\nimport { createAuthClient } from \"../services/createAuthClient\";\r\nimport { normalizeError } from \"../utils/normalizeError\";\r\n\r\n/**\r\n * Auth state\r\n */\r\ninterface AuthState {\r\n user: AuthUser | null;\r\n isAuthenticated: boolean;\r\n isLoading: boolean;\r\n error: AuthError | null;\r\n}\r\n\r\n/**\r\n * Auth state actions\r\n */\r\ntype AuthAction =\r\n | { type: \"SET_LOADING\"; payload: boolean }\r\n | { type: \"SET_ERROR\"; payload: AuthError | null }\r\n | { type: \"SET_USER\"; payload: AuthUser | null }\r\n | { type: \"LOGOUT\" };\r\n\r\n/**\r\n * Initial state\r\n */\r\nconst initialState: AuthState = {\r\n user: null,\r\n isAuthenticated: false,\r\n isLoading: false,\r\n error: null,\r\n};\r\n\r\n/**\r\n * Auth reducer\r\n */\r\nfunction authReducer(state: AuthState, action: AuthAction): AuthState {\r\n switch (action.type) {\r\n case \"SET_LOADING\":\r\n return { ...state, isLoading: action.payload };\r\n\r\n case \"SET_ERROR\":\r\n return { ...state, error: action.payload, isLoading: false };\r\n\r\n case \"SET_USER\":\r\n return {\r\n ...state,\r\n user: action.payload,\r\n isAuthenticated: action.payload !== null,\r\n error: null,\r\n isLoading: false,\r\n };\r\n\r\n case \"LOGOUT\":\r\n return initialState;\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n/**\r\n * AuthProvider component\r\n * Provides authentication state and methods to the entire application\r\n */\r\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\r\n children,\r\n baseURL = \"\",\r\n endpoints = {},\r\n onAuthError,\r\n autoRefresh = true,\r\n refreshInterval = 5 * 60 * 1000, // 5 minutes\r\n}) => {\r\n const [state, dispatch] = useReducer(authReducer, initialState);\r\n const clientRef = React.useRef(\r\n createAuthClient({\r\n baseURL,\r\n endpoints,\r\n credentials: \"include\",\r\n })\r\n );\r\n\r\n const client = clientRef.current;\r\n\r\n /**\r\n * Handle auth error\r\n */\r\n const handleError = useCallback(\r\n (error: AuthError) => {\r\n dispatch({ type: \"SET_ERROR\", payload: error });\r\n onAuthError?.(error);\r\n },\r\n [onAuthError]\r\n );\r\n\r\n /**\r\n * Restore session on mount\r\n */\r\n const restoreSession = useCallback(async () => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n const response = await client.me();\r\n if (response.user) {\r\n dispatch({ type: \"SET_USER\", payload: response.user });\r\n } else {\r\n dispatch({ type: \"LOGOUT\" });\r\n }\r\n } catch (_error) {\r\n // Session restore failure is not always an error state\r\n dispatch({ type: \"SET_LOADING\", payload: false });\r\n }\r\n }, [client]);\r\n\r\n /**\r\n * Refresh session\r\n */\r\n const refreshSession = useCallback(async () => {\r\n try {\r\n const response = await client.refresh();\r\n if (response.user) {\r\n dispatch({ type: \"SET_USER\", payload: response.user });\r\n }\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n }\r\n }, [client, handleError]);\r\n\r\n /**\r\n * Login\r\n */\r\n const login = useCallback(\r\n async (payload: LoginPayload): Promise<AuthUser> => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n const response = await client.login(payload.email, payload.password);\r\n if (!response.user) {\r\n throw new Error(\"No user data in response\");\r\n }\r\n dispatch({ type: \"SET_USER\", payload: response.user });\r\n return response.user;\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n throw authError;\r\n }\r\n },\r\n [client, handleError]\r\n );\r\n\r\n /**\r\n * Register\r\n */\r\n const register = useCallback(\r\n async (payload: RegisterPayload): Promise<AuthUser> => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n const response = await client.register(payload);\r\n if (!response.user) {\r\n throw new Error(\"No user data in response\");\r\n }\r\n dispatch({ type: \"SET_USER\", payload: response.user });\r\n return response.user;\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n throw authError;\r\n }\r\n },\r\n [client, handleError]\r\n );\r\n\r\n /**\r\n * Logout\r\n */\r\n const logout = useCallback(async () => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n await client.logout();\r\n } catch (error) {\r\n // Log but don't throw on logout error\r\n console.error(\"Logout error:\", error);\r\n } finally {\r\n dispatch({ type: \"LOGOUT\" });\r\n }\r\n }, [client]);\r\n\r\n /**\r\n * Forgot password\r\n */\r\n const forgotPassword = useCallback(\r\n async (payload: ForgotPasswordPayload) => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n await client.forgotPassword(payload.email);\r\n dispatch({ type: \"SET_LOADING\", payload: false });\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n throw authError;\r\n }\r\n },\r\n [client, handleError]\r\n );\r\n\r\n /**\r\n * Reset password\r\n */\r\n const resetPassword = useCallback(\r\n async (payload: ResetPasswordPayload) => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n await client.resetPassword(\r\n payload.token,\r\n payload.password,\r\n payload.confirmPassword\r\n );\r\n dispatch({ type: \"SET_LOADING\", payload: false });\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n throw authError;\r\n }\r\n },\r\n [client, handleError]\r\n );\r\n\r\n /**\r\n * Verify email\r\n */\r\n const verifyEmail = useCallback(\r\n async (payload: VerifyEmailPayload) => {\r\n dispatch({ type: \"SET_LOADING\", payload: true });\r\n try {\r\n await client.verifyEmail(payload.token, payload.email);\r\n dispatch({ type: \"SET_LOADING\", payload: false });\r\n } catch (error) {\r\n const authError = normalizeError(error);\r\n handleError(authError);\r\n throw authError;\r\n }\r\n },\r\n [client, handleError]\r\n );\r\n\r\n /**\r\n * Set user\r\n */\r\n const setUser = useCallback((user: AuthUser | null) => {\r\n dispatch({ type: \"SET_USER\", payload: user });\r\n }, []);\r\n\r\n /**\r\n * Effect: Restore session on mount\r\n */\r\n useEffect(() => {\r\n restoreSession();\r\n }, [restoreSession]);\r\n\r\n /**\r\n * Effect: Auto-refresh session\r\n */\r\n useEffect(() => {\r\n if (!autoRefresh || !state.isAuthenticated) {\r\n return;\r\n }\r\n\r\n const interval = setInterval(() => {\r\n refreshSession();\r\n }, refreshInterval);\r\n\r\n return () => clearInterval(interval);\r\n }, [autoRefresh, state.isAuthenticated, refreshSession, refreshInterval]);\r\n\r\n const value = {\r\n ...state,\r\n login,\r\n register,\r\n logout,\r\n forgotPassword,\r\n resetPassword,\r\n verifyEmail,\r\n refreshSession,\r\n restoreSession,\r\n setUser,\r\n };\r\n\r\n return (\r\n <AuthContext.Provider value={value}>{children}</AuthContext.Provider>\r\n );\r\n};\r\n","import { useContext } from \"react\";\r\nimport { AuthContext } from \"../context/AuthContext\";\r\nimport { AuthContextValue } from \"../types\";\r\n\r\n/**\r\n * Hook to access auth context\r\n * Must be used within an AuthProvider\r\n */\r\nexport function useAuth(): AuthContextValue {\r\n const context = useContext(AuthContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useAuth must be used within an AuthProvider\");\r\n }\r\n\r\n return context;\r\n}\r\n","/**\r\n * Utility to safely merge class names\r\n * Filters out falsy values and joins with space\r\n */\r\nexport function cn(...classes: Array<string | undefined | false | null>): string {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n","export const AUTH_FORM_CLASSES = {\n container: \"rq-auth-container\",\n header: \"rq-auth-header\",\n form: \"rq-auth-form\",\n field: \"rq-auth-field\",\n label: \"rq-auth-label\",\n input: \"rq-auth-input\",\n button: \"rq-auth-button\",\n buttonContent: \"rq-auth-button-content\",\n buttonSpinner: \"rq-auth-button-spinner\",\n error: \"rq-auth-error\",\n success: \"rq-auth-success\",\n title: \"rq-auth-title\",\n subtitle: \"rq-auth-subtitle\",\n checkbox: \"rq-auth-checkbox\",\n checkboxInput: \"rq-auth-checkbox-input\",\n checkboxLabel: \"rq-auth-checkbox-label\",\n} as const;\n","import React, { useState } from \"react\";\nimport { LoginFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * LoginForm Component\n * A ready-to-use login form with packaged default styling\n */\nexport const LoginForm: React.FC<LoginFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Login\",\n loadingText = \"Signing in...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const { login, isLoading: authLoading, error: authError } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [rememberMe, setRememberMe] = useState(false);\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(\"\");\n\n if (!email || !password) {\n setFormError(\"Email and password are required\");\n return;\n }\n\n try {\n const user = await login({ email, password, rememberMe });\n onSuccess?.(user);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Login failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"LOGIN_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"username\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Enter your password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"current-password\"\n required\n />\n </div>\n\n <label htmlFor=\"rememberMe\" className={AUTH_FORM_CLASSES.checkbox}>\n <input\n id=\"rememberMe\"\n type=\"checkbox\"\n checked={rememberMe}\n onChange={(e) => setRememberMe(e.target.checked)}\n disabled={isLoading}\n className={AUTH_FORM_CLASSES.checkboxInput}\n />\n <span className={AUTH_FORM_CLASSES.checkboxLabel}>\n {labels.rememberMe || \"Remember me\"}\n </span>\n </label>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nLoginForm.displayName = \"LoginForm\";\n","import React, { useState } from \"react\";\nimport { RegisterFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * RegisterForm Component\n * A ready-to-use registration form with packaged default styling\n */\nexport const RegisterForm: React.FC<RegisterFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Register\",\n loadingText = \"Creating account...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const { register, isLoading: authLoading, error: authError } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [name, setName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(\"\");\n\n if (!name || !email || !password || !confirmPassword) {\n setFormError(\"All fields are required\");\n return;\n }\n\n if (password !== confirmPassword) {\n setFormError(\"Passwords do not match\");\n return;\n }\n\n if (password.length < 8) {\n setFormError(\"Password must be at least 8 characters\");\n return;\n }\n\n try {\n const user = await register({\n name,\n email,\n password,\n confirmPassword,\n });\n onSuccess?.(user);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Registration failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"REGISTER_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"name\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.name || \"Full Name\"}\n </label>\n <input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={placeholders.name || \"John Doe\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"name\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Create a password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"confirmPassword\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.confirmPassword || \"Confirm Password\"}\n </label>\n <input\n id=\"confirmPassword\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder={placeholders.confirmPassword || \"Confirm your password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nRegisterForm.displayName = \"RegisterForm\";\n","import React, { useState } from \"react\";\nimport { ForgotPasswordFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * ForgotPasswordForm Component\n * A ready-to-use forgot password form with packaged default styling\n */\nexport const ForgotPasswordForm: React.FC<ForgotPasswordFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Send Reset Link\",\n loadingText = \"Sending...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n forgotPassword,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(\"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!email) {\n setFormError(\"Email is required\");\n return;\n }\n\n try {\n await forgotPassword({ email });\n setSuccessMessage(\"Password reset link has been sent to your email\");\n setEmail(\"\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Request failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"FORGOT_PASSWORD_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nForgotPasswordForm.displayName = \"ForgotPasswordForm\";\n","import React, { useState } from \"react\";\nimport { ResetPasswordFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * ResetPasswordForm Component\n * A ready-to-use password reset form with packaged default styling\n */\nexport const ResetPasswordForm: React.FC<ResetPasswordFormProps> = ({\n token,\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Reset Password\",\n loadingText = \"Updating...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n resetPassword,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!password || !confirmPassword) {\n setFormError(\"Both password fields are required\");\n return;\n }\n\n if (password !== confirmPassword) {\n setFormError(\"Passwords do not match\");\n return;\n }\n\n if (password.length < 8) {\n setFormError(\"Password must be at least 8 characters\");\n return;\n }\n\n try {\n await resetPassword({ token, password, confirmPassword });\n setSuccessMessage(\"Password has been reset successfully\");\n setPassword(\"\");\n setConfirmPassword(\"\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Reset failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"RESET_PASSWORD_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"New Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Enter a new password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"confirmPassword\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.confirmPassword || \"Confirm Password\"}\n </label>\n <input\n id=\"confirmPassword\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder={placeholders.confirmPassword || \"Confirm your new password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nResetPasswordForm.displayName = \"ResetPasswordForm\";\n","import React, { useEffect, useState } from \"react\";\nimport { VerifyEmailFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * VerifyEmailForm Component\n * A ready-to-use email verification form with packaged default styling\n */\nexport const VerifyEmailForm: React.FC<VerifyEmailFormProps> = ({\n token: initialToken,\n email: initialEmail,\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Verify Email\",\n loadingText = \"Verifying...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n verifyEmail,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(initialEmail || \"\");\n const [token, setToken] = useState(initialToken || \"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!token) {\n setFormError(\"Verification token is required\");\n return;\n }\n\n if (!email) {\n setFormError(\"Email is required\");\n return;\n }\n\n try {\n await verifyEmail({ token, email });\n setSuccessMessage(\"Email has been verified successfully\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Verification failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"VERIFY_EMAIL_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n // Auto-submit if both token and email are provided.\n useEffect(() => {\n if (token && email && !successMessage && !error) {\n void handleSubmit({ preventDefault: () => {} } as React.FormEvent);\n }\n }, [token, email]);\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"token\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.token || \"Verification Code\"}\n </label>\n <input\n id=\"token\"\n type=\"text\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder={placeholders.token || \"Enter verification code\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"one-time-code\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nVerifyEmailForm.displayName = \"VerifyEmailForm\";\n","import React from \"react\";\r\nimport { Navigate } from \"react-router-dom\";\r\nimport { ProtectedRouteProps } from \"../types\";\r\nimport { useAuth } from \"../hooks/useAuth\";\r\n\r\n/**\r\n * ProtectedRoute Component\r\n * Protects routes based on authentication status and optional role/permission checks\r\n * Compatible with React Router v6\r\n */\r\nexport const ProtectedRoute: React.FC<ProtectedRouteProps> = ({\r\n children,\r\n redirectTo = \"/login\",\r\n fallback,\r\n roles,\r\n permissions,\r\n}) => {\r\n const { isAuthenticated, isLoading, user } = useAuth();\r\n\r\n // Show fallback while loading\r\n if (isLoading) {\r\n return fallback || <div className=\"auth-loading\">Loading...</div>;\r\n }\r\n\r\n // Redirect to login if not authenticated\r\n if (!isAuthenticated) {\r\n return <Navigate to={redirectTo} replace />;\r\n }\r\n\r\n // Check roles\r\n if (roles && roles.length > 0) {\r\n const hasRole = user?.roles?.some((role) => roles.includes(role));\r\n if (!hasRole) {\r\n return (\r\n <div className=\"auth-forbidden\">\r\n <p>You do not have permission to access this page.</p>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n // Check permissions\r\n if (permissions && permissions.length > 0) {\r\n const hasPermission = user?.permissions?.some((permission) =>\r\n permissions.includes(permission)\r\n );\r\n if (!hasPermission) {\r\n return (\r\n <div className=\"auth-forbidden\">\r\n <p>You do not have permission to access this page.</p>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return <>{children}</>;\r\n};\r\n\r\nProtectedRoute.displayName = \"ProtectedRoute\";\r\n"],"names":["createContext","useReducer","useCallback","useEffect","jsx","useContext","useState","jsxs","Navigate"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/context/AuthContext.ts","../src/utils/normalizeError.ts","../src/services/createAuthClient.ts","../src/services/createMockAuthAdapter.ts","../src/context/AuthProvider.tsx","../src/hooks/useAuth.ts","../src/utils/cn.ts","../src/components/authClassNames.ts","../src/components/AuthLayout.tsx","../src/components/LoginForm.tsx","../src/components/RegisterForm.tsx","../src/components/ForgotPasswordForm.tsx","../src/components/ResetPasswordForm.tsx","../src/components/VerifyEmailForm.tsx","../src/components/OtpInput.tsx","../src/components/TwoFactorForm.tsx","../src/components/SocialLoginButton.tsx","../src/components/ProtectedRoute.tsx","../src/components/GuestRoute.tsx"],"sourcesContent":["import { createContext } from \"react\";\r\nimport { AuthContextValue } from \"../types\";\r\n\r\n/**\r\n * Auth Context\r\n * Provides authentication state and methods to the application\r\n */\r\nexport const AuthContext = createContext<AuthContextValue | undefined>(\r\n undefined\r\n);\r\n\r\nAuthContext.displayName = \"AuthContext\";\r\n","import { AuthError } from \"../types\";\r\n\r\n/**\r\n * Normalizes various error types into a consistent AuthError format\r\n */\r\nexport function normalizeError(error: unknown): AuthError {\r\n // Handle AuthError objects\r\n if (isAuthError(error)) {\r\n return error;\r\n }\r\n\r\n // Handle standard Error objects\r\n if (error instanceof Error) {\r\n return {\r\n code: \"ERROR\",\r\n message: error.message,\r\n statusCode: undefined,\r\n };\r\n }\r\n\r\n // Handle fetch errors with response\r\n if (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"status\" in error &&\r\n \"statusText\" in error\r\n ) {\r\n const fetchError = error as { status: number; statusText: string };\r\n return {\r\n code: `HTTP_${fetchError.status}`,\r\n message: fetchError.statusText || \"Request failed\",\r\n statusCode: fetchError.status,\r\n };\r\n }\r\n\r\n // Handle JSON API error response\r\n if (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"error\" in error &&\r\n typeof error.error === \"object\"\r\n ) {\r\n const apiError = error.error as Record<string, unknown>;\r\n return {\r\n code: (apiError.code as string) || \"API_ERROR\",\r\n message: (apiError.message as string) || \"An error occurred\",\r\n statusCode: (apiError.statusCode as number) || undefined,\r\n details: apiError.details as Record<string, unknown>,\r\n };\r\n }\r\n\r\n // Handle plain objects with message property\r\n if (typeof error === \"object\" && error !== null && \"message\" in error) {\r\n const objError = error as { message: unknown; code?: unknown };\r\n return {\r\n code: (objError.code as string) || \"ERROR\",\r\n message:\r\n typeof objError.message === \"string\"\r\n ? objError.message\r\n : \"An unknown error occurred\",\r\n };\r\n }\r\n\r\n // Handle strings\r\n if (typeof error === \"string\") {\r\n return {\r\n code: \"ERROR\",\r\n message: error,\r\n };\r\n }\r\n\r\n // Fallback\r\n return {\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"An unknown error occurred\",\r\n };\r\n}\r\n\r\n/**\r\n * Type guard to check if an object is an AuthError\r\n */\r\nfunction isAuthError(error: unknown): error is AuthError {\r\n return (\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"code\" in error &&\r\n \"message\" in error &&\r\n typeof (error as AuthError).code === \"string\" &&\r\n typeof (error as AuthError).message === \"string\"\r\n );\r\n}\r\n","import {\n AuthClientConfig,\n AuthEndpoints,\n AuthRequestAdapter,\n AuthRequestMethod,\n AuthResponse,\n LegacyRequestAdapter,\n} from \"../types\";\nimport { normalizeError } from \"../utils/normalizeError\";\n\n/**\n * Default endpoints\n */\nconst DEFAULT_ENDPOINTS: Required<AuthEndpoints> = {\n login: \"/auth/login\",\n register: \"/auth/register\",\n logout: \"/auth/logout\",\n me: \"/auth/me\",\n refresh: \"/auth/refresh\",\n forgotPassword: \"/auth/forgot-password\",\n resetPassword: \"/auth/reset-password\",\n verifyEmail: \"/auth/verify-email\",\n twoFactorVerify: \"/auth/2fa/verify\",\n};\n\nasync function parseResponse(response: Response): Promise<unknown> {\n if (!response.ok) {\n let errorData: unknown = null;\n\n try {\n errorData = await response.json();\n } catch {\n errorData = {\n error: {\n message: response.statusText || \"Request failed\",\n statusCode: response.status,\n },\n };\n }\n\n throw errorData;\n }\n\n if (response.status === 204) {\n return {};\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"application/json\")) {\n return response.json();\n }\n\n const text = await response.text();\n return text ? { message: text } : {};\n}\n\nfunction isResponseLike(value: unknown): value is Response {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"ok\" in value &&\n \"status\" in value &&\n \"headers\" in value\n );\n}\n\nfunction createDefaultRequestAdapter(config: {\n baseURL: string;\n credentials: RequestCredentials;\n headers: Record<string, string>;\n}): AuthRequestAdapter {\n const { baseURL, credentials, headers } = config;\n\n return async ({ endpoint, method, data, headers: requestHeaders }) => {\n const response = await fetch(`${baseURL}${endpoint}`, {\n method,\n credentials,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n ...requestHeaders,\n },\n body: data === undefined ? undefined : JSON.stringify(data),\n });\n\n return parseResponse(response);\n };\n}\n\nfunction createLegacyAdapter(config: {\n adapter: LegacyRequestAdapter;\n baseURL: string;\n credentials: RequestCredentials;\n headers: Record<string, string>;\n}): AuthRequestAdapter {\n const { adapter, baseURL, credentials, headers } = config;\n\n return async ({ endpoint, method, data, headers: requestHeaders }) => {\n const response = await adapter(`${baseURL}${endpoint}`, {\n method,\n credentials,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n ...requestHeaders,\n },\n body: data === undefined ? undefined : JSON.stringify(data),\n });\n\n return parseResponse(response);\n };\n}\n\n/**\n * Creates an authenticated API client\n */\nexport function createAuthClient(config: AuthClientConfig = {}) {\n const {\n baseURL,\n baseUrl,\n endpoints = {},\n headers: initialHeaders = {},\n credentials = \"include\",\n requestAdapter,\n adapter,\n } = config;\n\n const resolvedBaseURL = baseURL ?? baseUrl ?? \"\";\n const finalEndpoints: Required<AuthEndpoints> = {\n ...DEFAULT_ENDPOINTS,\n ...endpoints,\n };\n const headers = { ...initialHeaders };\n const resolvedAdapter =\n requestAdapter ??\n (adapter\n ? createLegacyAdapter({\n adapter,\n baseURL: resolvedBaseURL,\n credentials,\n headers,\n })\n : createDefaultRequestAdapter({\n baseURL: resolvedBaseURL,\n credentials,\n headers,\n }));\n\n async function request<T = unknown>(\n method: AuthRequestMethod,\n endpoint: string,\n data?: Record<string, unknown>\n ): Promise<T> {\n try {\n const result = await resolvedAdapter({\n endpoint,\n method,\n data,\n headers,\n });\n\n if (isResponseLike(result)) {\n return (await parseResponse(result)) as T;\n }\n\n return (result ?? {}) as T;\n } catch (error) {\n throw normalizeError(error);\n }\n }\n\n return {\n async login(email: string, password: string, rememberMe?: boolean) {\n return request<AuthResponse>(\"POST\", finalEndpoints.login, {\n email,\n password,\n rememberMe,\n });\n },\n\n async register(payload: Record<string, unknown>) {\n return request<AuthResponse>(\"POST\", finalEndpoints.register, payload);\n },\n\n async logout() {\n await request(\"POST\", finalEndpoints.logout);\n },\n\n async me() {\n return request<AuthResponse>(\"GET\", finalEndpoints.me);\n },\n\n async refresh() {\n return request<AuthResponse>(\"POST\", finalEndpoints.refresh);\n },\n\n async forgotPassword(email: string) {\n return request<AuthResponse>(\"POST\", finalEndpoints.forgotPassword, {\n email,\n });\n },\n\n async resetPassword(\n token: string,\n password: string,\n confirmPassword?: string\n ) {\n return request<AuthResponse>(\"POST\", finalEndpoints.resetPassword, {\n token,\n password,\n confirmPassword,\n });\n },\n\n async verifyEmail(token: string, email?: string) {\n return request<AuthResponse>(\"POST\", finalEndpoints.verifyEmail, {\n token,\n email,\n });\n },\n\n async verifyTwoFactor(code: string) {\n return request<AuthResponse>(\"POST\", finalEndpoints.twoFactorVerify, {\n code,\n });\n },\n\n setHeaders(newHeaders: Record<string, string>) {\n Object.assign(headers, newHeaders);\n },\n\n getEndpoints() {\n return finalEndpoints;\n },\n };\n}\n\nexport type AuthClient = ReturnType<typeof createAuthClient>;\n","import {\n AuthEndpoints,\n AuthRequestAdapter,\n AuthRequestParams,\n AuthResponse,\n AuthUser,\n} from \"../types\";\n\nconst DEFAULT_STORAGE_KEY = \"rq-auth-flow-user\";\nconst DEFAULT_OTP_LENGTH = 6;\n\nlet memoryUser: AuthUser | null = null;\n\ninterface CreateMockAuthAdapterOptions {\n endpoints?: AuthEndpoints;\n mockStorageKey?: string;\n mockUser?: AuthUser;\n}\n\nfunction getStorage() {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\nfunction readStoredUser(storageKey: string): AuthUser | null {\n const storage = getStorage();\n\n if (!storage) {\n return memoryUser;\n }\n\n const rawValue = storage.getItem(storageKey);\n\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue) as AuthUser;\n } catch {\n storage.removeItem(storageKey);\n return null;\n }\n}\n\nfunction writeStoredUser(storageKey: string, user: AuthUser | null) {\n const storage = getStorage();\n memoryUser = user;\n\n if (!storage) {\n return;\n }\n\n if (user === null) {\n storage.removeItem(storageKey);\n return;\n }\n\n storage.setItem(storageKey, JSON.stringify(user));\n}\n\nfunction createAdminUser(email: string, mockUser?: AuthUser): AuthUser {\n return {\n id: 1,\n name: \"Admin Test\",\n email,\n roles: [\"admin\"],\n permissions: [\"users.manage\", \"billing.edit\"],\n ...mockUser,\n };\n}\n\nfunction createRegisteredUser(\n name: string | undefined,\n email: string,\n mockUser?: AuthUser\n): AuthUser {\n return {\n id: 2,\n name: name || \"New User\",\n email,\n roles: [\"user\"],\n permissions: [\"users.create\"],\n ...mockUser,\n };\n}\n\nfunction toSuccessResponse(\n message: string,\n user?: AuthUser | null\n): AuthResponse | Record<string, unknown> {\n return user ? { success: true, message, user } : { success: true, message };\n}\n\nexport function createMockAuthAdapter(\n options: CreateMockAuthAdapterOptions = {}\n): AuthRequestAdapter {\n const {\n endpoints = {},\n mockStorageKey = DEFAULT_STORAGE_KEY,\n mockUser,\n } = options;\n const resolvedEndpoints: Required<AuthEndpoints> = {\n login: \"/auth/login\",\n register: \"/auth/register\",\n logout: \"/auth/logout\",\n me: \"/auth/me\",\n refresh: \"/auth/refresh\",\n forgotPassword: \"/auth/forgot-password\",\n resetPassword: \"/auth/reset-password\",\n verifyEmail: \"/auth/verify-email\",\n twoFactorVerify: \"/auth/2fa/verify\",\n ...endpoints,\n };\n\n return async ({ endpoint, data }: AuthRequestParams) => {\n if (endpoint === resolvedEndpoints.login) {\n const payload = (data ?? {}) as { email?: string };\n const user = createAdminUser(payload.email ?? \"admin@example.com\", mockUser);\n writeStoredUser(mockStorageKey, user);\n return toSuccessResponse(\"Mock login successful.\", user);\n }\n\n if (endpoint === resolvedEndpoints.register) {\n const payload = (data ?? {}) as { name?: string; email?: string };\n const user = createRegisteredUser(\n payload.name,\n payload.email ?? \"user@example.com\",\n mockUser\n );\n writeStoredUser(mockStorageKey, user);\n return toSuccessResponse(\"Mock registration successful.\", user);\n }\n\n if (endpoint === resolvedEndpoints.logout) {\n writeStoredUser(mockStorageKey, null);\n return toSuccessResponse(\"Mock logout successful.\");\n }\n\n if (endpoint === resolvedEndpoints.me || endpoint === resolvedEndpoints.refresh) {\n const user = readStoredUser(mockStorageKey);\n return user ? { success: true, user } : { success: true, user: null };\n }\n\n if (endpoint === resolvedEndpoints.forgotPassword) {\n return toSuccessResponse(\"Mock password reset request accepted.\");\n }\n\n if (endpoint === resolvedEndpoints.resetPassword) {\n return toSuccessResponse(\"Mock password reset successful.\");\n }\n\n if (endpoint === resolvedEndpoints.verifyEmail) {\n return toSuccessResponse(\"Mock email verification successful.\");\n }\n\n if (endpoint === resolvedEndpoints.twoFactorVerify) {\n const payload = (data ?? {}) as { code?: string };\n const code = payload.code?.trim() ?? \"\";\n\n if (code.length !== DEFAULT_OTP_LENGTH) {\n throw {\n code: \"INVALID_2FA_CODE\",\n message: `Mock 2FA code must be exactly ${DEFAULT_OTP_LENGTH} characters.`,\n };\n }\n\n return toSuccessResponse(\"Mock 2FA verification successful.\");\n }\n\n return toSuccessResponse(\"Mock request successful.\");\n };\n}\n","import React, { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport {\n AuthActionResponse,\n AuthContextValue,\n AuthError,\n AuthProviderProps,\n AuthTheme,\n AuthUser,\n ForgotPasswordPayload,\n LoginPayload,\n RegisterPayload,\n ResetPasswordPayload,\n TwoFactorPayload,\n VerifyEmailPayload,\n} from \"../types\";\nimport { AuthContext } from \"./AuthContext\";\nimport { createAuthClient } from \"../services/createAuthClient\";\nimport { createMockAuthAdapter } from \"../services/createMockAuthAdapter\";\nimport { normalizeError } from \"../utils/normalizeError\";\n\ninterface AuthState {\n user: AuthUser | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: AuthError | null;\n}\n\ntype AuthAction =\n | { type: \"SET_LOADING\"; payload: boolean }\n | { type: \"SET_ERROR\"; payload: AuthError | null }\n | { type: \"SET_USER\"; payload: AuthUser | null }\n | { type: \"LOGOUT\" };\n\nconst initialState: AuthState = {\n user: null,\n isAuthenticated: false,\n isLoading: false,\n error: null,\n};\n\nconst defaultTheme: Required<AuthTheme> = {\n primaryColor: \"#2563eb\",\n primaryHoverColor: \"#1d4ed8\",\n radius: \"14px\",\n fontFamily: \"inherit\",\n};\n\nfunction authReducer(state: AuthState, action: AuthAction): AuthState {\n switch (action.type) {\n case \"SET_LOADING\":\n return { ...state, isLoading: action.payload };\n case \"SET_ERROR\":\n return { ...state, error: action.payload, isLoading: false };\n case \"SET_USER\":\n return {\n ...state,\n user: action.payload,\n isAuthenticated: action.payload !== null,\n error: null,\n isLoading: false,\n };\n case \"LOGOUT\":\n return { ...initialState };\n default:\n return state;\n }\n}\n\nfunction toAuthError(error?: AuthError | string | null): AuthError | null {\n if (!error) {\n return null;\n }\n\n return typeof error === \"string\"\n ? {\n code: \"AUTH_ERROR\",\n message: error,\n }\n : error;\n}\n\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\n children,\n baseURL,\n baseUrl,\n endpoints = {},\n headers = {},\n credentials = \"include\",\n onAuthError,\n autoRefresh = true,\n autoRestore = true,\n refreshInterval = 5 * 60 * 1000,\n requestAdapter,\n theme,\n mock = false,\n mockStorageKey = \"rq-auth-flow-user\",\n mockUser,\n}) => {\n const [state, dispatch] = useReducer(authReducer, initialState);\n const resolvedTheme = { ...defaultTheme, ...theme };\n const resolvedBaseURL = baseURL ?? baseUrl ?? \"\";\n\n const client = useMemo(() => {\n const resolvedRequestAdapter = mock\n ? createMockAuthAdapter({\n endpoints,\n mockStorageKey,\n mockUser,\n })\n : requestAdapter;\n\n return createAuthClient({\n baseURL: resolvedBaseURL,\n endpoints,\n headers,\n credentials,\n requestAdapter: resolvedRequestAdapter,\n });\n }, [\n credentials,\n endpoints,\n headers,\n mock,\n mockStorageKey,\n mockUser,\n requestAdapter,\n resolvedBaseURL,\n ]);\n\n const handleError = useCallback(\n (error: AuthError) => {\n dispatch({ type: \"SET_ERROR\", payload: error });\n onAuthError?.(error);\n },\n [onAuthError]\n );\n\n const clearError = useCallback(() => {\n dispatch({ type: \"SET_ERROR\", payload: null });\n }, []);\n\n const setError = useCallback(\n (error?: AuthError | string | null) => {\n const nextError = toAuthError(error);\n dispatch({ type: \"SET_ERROR\", payload: nextError });\n if (nextError) {\n onAuthError?.(nextError);\n }\n },\n [onAuthError]\n );\n\n const setUser = useCallback((user: AuthUser | null) => {\n dispatch({ type: \"SET_USER\", payload: user });\n }, []);\n\n const resolveAction = useCallback((response?: AuthActionResponse | null) => {\n if (response?.user) {\n dispatch({ type: \"SET_USER\", payload: response.user });\n return response.user;\n }\n\n dispatch({ type: \"SET_ERROR\", payload: null });\n return null;\n }, []);\n\n const restoreSession = useCallback(async (): Promise<AuthUser | null> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.me();\n\n if (response.user) {\n dispatch({ type: \"SET_USER\", payload: response.user });\n return response.user;\n }\n\n dispatch({ type: \"LOGOUT\" });\n return null;\n } catch {\n dispatch({ type: \"LOGOUT\" });\n return null;\n }\n }, [client]);\n\n const refreshSession = useCallback(async (): Promise<AuthUser | null> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.refresh();\n return resolveAction(response);\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n return null;\n }\n }, [client, handleError, resolveAction]);\n\n const login = useCallback(\n async (payload: LoginPayload): Promise<AuthUser> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.login(\n payload.email,\n payload.password,\n payload.rememberMe\n );\n\n if (!response.user) {\n throw new Error(\"No user data in response\");\n }\n\n dispatch({ type: \"SET_USER\", payload: response.user });\n return response.user;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError]\n );\n\n const register = useCallback(\n async (payload: RegisterPayload): Promise<AuthUser> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.register(payload);\n\n if (!response.user) {\n throw new Error(\"No user data in response\");\n }\n\n dispatch({ type: \"SET_USER\", payload: response.user });\n return response.user;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError]\n );\n\n const logout = useCallback(async () => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n await client.logout();\n } catch {\n // Logout should always clear local auth state.\n } finally {\n dispatch({ type: \"LOGOUT\" });\n }\n }, [client]);\n\n const forgotPassword = useCallback(\n async (payload: ForgotPasswordPayload): Promise<AuthActionResponse> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.forgotPassword(payload.email);\n resolveAction(response);\n return response;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError, resolveAction]\n );\n\n const resetPassword = useCallback(\n async (payload: ResetPasswordPayload): Promise<AuthActionResponse> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.resetPassword(\n payload.token,\n payload.password,\n payload.confirmPassword\n );\n resolveAction(response);\n return response;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError, resolveAction]\n );\n\n const verifyEmail = useCallback(\n async (payload: VerifyEmailPayload): Promise<AuthActionResponse> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.verifyEmail(payload.token, payload.email);\n resolveAction(response);\n return response;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError, resolveAction]\n );\n\n const verifyTwoFactor = useCallback(\n async (payload: TwoFactorPayload): Promise<AuthActionResponse> => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n\n try {\n const response = await client.verifyTwoFactor(payload.code);\n resolveAction(response);\n return response;\n } catch (error) {\n const authError = normalizeError(error);\n handleError(authError);\n throw authError;\n }\n },\n [client, handleError, resolveAction]\n );\n\n const hasRole = useCallback(\n (role: string) => state.user?.roles?.includes(role) ?? false,\n [state.user]\n );\n\n const hasAnyRole = useCallback(\n (roles: string[]) => roles.some((role) => state.user?.roles?.includes(role)),\n [state.user]\n );\n\n const hasPermission = useCallback(\n (permission: string) => state.user?.permissions?.includes(permission) ?? false,\n [state.user]\n );\n\n const hasAnyPermission = useCallback(\n (permissions: string[]) =>\n permissions.some((permission) =>\n state.user?.permissions?.includes(permission)\n ),\n [state.user]\n );\n\n const hasAllPermissions = useCallback(\n (permissions: string[]) =>\n permissions.every((permission) =>\n state.user?.permissions?.includes(permission)\n ),\n [state.user]\n );\n\n useEffect(() => {\n if (!autoRestore) {\n return;\n }\n\n void restoreSession();\n }, [autoRestore, restoreSession]);\n\n useEffect(() => {\n if (!autoRefresh || !state.isAuthenticated) {\n return;\n }\n\n const intervalId = window.setInterval(() => {\n void refreshSession();\n }, refreshInterval);\n\n return () => window.clearInterval(intervalId);\n }, [autoRefresh, refreshInterval, refreshSession, state.isAuthenticated]);\n\n const themeStyle = useMemo(\n () =>\n ({\n \"--rq-auth-primary\": resolvedTheme.primaryColor,\n \"--rq-auth-primary-hover\": resolvedTheme.primaryHoverColor,\n \"--rq-auth-radius\": resolvedTheme.radius,\n \"--rq-auth-font-family\": resolvedTheme.fontFamily,\n fontFamily: resolvedTheme.fontFamily,\n }) as React.CSSProperties,\n [resolvedTheme.fontFamily, resolvedTheme.primaryColor, resolvedTheme.primaryHoverColor, resolvedTheme.radius]\n );\n\n const value = useMemo<AuthContextValue>(\n () => ({\n ...state,\n login,\n register,\n logout,\n forgotPassword,\n resetPassword,\n verifyEmail,\n verifyTwoFactor,\n refreshSession,\n restoreSession,\n clearError,\n setError,\n setUser,\n hasRole,\n hasAnyRole,\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n }),\n [\n clearError,\n forgotPassword,\n hasAllPermissions,\n hasAnyPermission,\n hasAnyRole,\n hasPermission,\n hasRole,\n login,\n logout,\n refreshSession,\n register,\n resetPassword,\n restoreSession,\n setError,\n setUser,\n state,\n verifyEmail,\n verifyTwoFactor,\n ]\n );\n\n return (\n <AuthContext.Provider value={value}>\n <div className=\"rq-auth-theme\" style={themeStyle}>\n {children}\n </div>\n </AuthContext.Provider>\n );\n};\n","import { useContext } from \"react\";\r\nimport { AuthContext } from \"../context/AuthContext\";\r\nimport { AuthContextValue } from \"../types\";\r\n\r\n/**\r\n * Hook to access auth context\r\n * Must be used within an AuthProvider\r\n */\r\nexport function useAuth(): AuthContextValue {\r\n const context = useContext(AuthContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useAuth must be used within an AuthProvider\");\r\n }\r\n\r\n return context;\r\n}\r\n","/**\r\n * Utility to safely merge class names\r\n * Filters out falsy values and joins with space\r\n */\r\nexport function cn(...classes: Array<string | undefined | false | null>): string {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n","export const AUTH_FORM_CLASSES = {\n theme: \"rq-auth-theme\",\n container: \"rq-auth-container\",\n card: \"rq-auth-card\",\n shell: \"rq-auth-shell\",\n brand: \"rq-auth-brand\",\n footer: \"rq-auth-footer\",\n header: \"rq-auth-header\",\n form: \"rq-auth-form\",\n field: \"rq-auth-field\",\n label: \"rq-auth-label\",\n input: \"rq-auth-input\",\n button: \"rq-auth-button\",\n buttonContent: \"rq-auth-button-content\",\n buttonSpinner: \"rq-auth-button-spinner\",\n error: \"rq-auth-error\",\n success: \"rq-auth-success\",\n title: \"rq-auth-title\",\n subtitle: \"rq-auth-subtitle\",\n checkbox: \"rq-auth-checkbox\",\n checkboxInput: \"rq-auth-checkbox-input\",\n checkboxLabel: \"rq-auth-checkbox-label\",\n otpGroup: \"rq-auth-otp-group\",\n otpInput: \"rq-auth-otp-input\",\n socialButton: \"rq-auth-social-button\",\n socialIcon: \"rq-auth-social-icon\",\n socialLabel: \"rq-auth-social-label\",\n} as const;\n","import React from \"react\";\nimport { AuthLayoutProps } from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\nexport const AuthLayout: React.FC<AuthLayoutProps> = ({\n children,\n title,\n subtitle,\n className,\n cardClassName,\n brand,\n footer,\n}) => {\n return (\n <section className={cn(AUTH_FORM_CLASSES.shell, className)}>\n <div className={cn(AUTH_FORM_CLASSES.card, cardClassName)}>\n {brand ? <div className={AUTH_FORM_CLASSES.brand}>{brand}</div> : null}\n\n {(title || subtitle) && (\n <div className={AUTH_FORM_CLASSES.header}>\n {title ? <h1 className={AUTH_FORM_CLASSES.title}>{title}</h1> : null}\n {subtitle ? (\n <p className={AUTH_FORM_CLASSES.subtitle}>{subtitle}</p>\n ) : null}\n </div>\n )}\n\n {children}\n\n {footer ? <div className={AUTH_FORM_CLASSES.footer}>{footer}</div> : null}\n </div>\n </section>\n );\n};\n\nAuthLayout.displayName = \"AuthLayout\";\n","import React, { useState } from \"react\";\nimport { LoginFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * LoginForm Component\n * A ready-to-use login form with packaged default styling\n */\nexport const LoginForm: React.FC<LoginFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Login\",\n loadingText = \"Signing in...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n login,\n clearError,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [rememberMe, setRememberMe] = useState(false);\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n clearError();\n setFormError(\"\");\n\n if (!email || !password) {\n setFormError(\"Email and password are required\");\n return;\n }\n\n try {\n const user = await login({ email, password, rememberMe });\n onSuccess?.(user);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Login failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"LOGIN_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"username\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Enter your password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"current-password\"\n required\n />\n </div>\n\n <label htmlFor=\"rememberMe\" className={AUTH_FORM_CLASSES.checkbox}>\n <input\n id=\"rememberMe\"\n type=\"checkbox\"\n checked={rememberMe}\n onChange={(e) => setRememberMe(e.target.checked)}\n disabled={isLoading}\n className={AUTH_FORM_CLASSES.checkboxInput}\n />\n <span className={AUTH_FORM_CLASSES.checkboxLabel}>\n {labels.rememberMe || \"Remember me\"}\n </span>\n </label>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nLoginForm.displayName = \"LoginForm\";\n","import React, { useState } from \"react\";\nimport { RegisterFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * RegisterForm Component\n * A ready-to-use registration form with packaged default styling\n */\nexport const RegisterForm: React.FC<RegisterFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Register\",\n loadingText = \"Creating account...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n register,\n clearError,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [name, setName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n clearError();\n setFormError(\"\");\n\n if (!name || !email || !password || !confirmPassword) {\n setFormError(\"All fields are required\");\n return;\n }\n\n if (password !== confirmPassword) {\n setFormError(\"Passwords do not match\");\n return;\n }\n\n if (password.length < 8) {\n setFormError(\"Password must be at least 8 characters\");\n return;\n }\n\n try {\n const user = await register({\n name,\n email,\n password,\n confirmPassword,\n });\n onSuccess?.(user);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Registration failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"REGISTER_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"name\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.name || \"Full Name\"}\n </label>\n <input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={placeholders.name || \"John Doe\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"name\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Create a password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"confirmPassword\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.confirmPassword || \"Confirm Password\"}\n </label>\n <input\n id=\"confirmPassword\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder={placeholders.confirmPassword || \"Confirm your password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nRegisterForm.displayName = \"RegisterForm\";\n","import React, { useState } from \"react\";\nimport { ForgotPasswordFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * ForgotPasswordForm Component\n * A ready-to-use forgot password form with packaged default styling\n */\nexport const ForgotPasswordForm: React.FC<ForgotPasswordFormProps> = ({\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Send Reset Link\",\n loadingText = \"Sending...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n forgotPassword,\n clearError,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(\"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n clearError();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!email) {\n setFormError(\"Email is required\");\n return;\n }\n\n try {\n await forgotPassword({ email });\n setSuccessMessage(\"Password reset link has been sent to your email\");\n setEmail(\"\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Request failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"FORGOT_PASSWORD_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nForgotPasswordForm.displayName = \"ForgotPasswordForm\";\n","import React, { useState } from \"react\";\nimport { ResetPasswordFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * ResetPasswordForm Component\n * A ready-to-use password reset form with packaged default styling\n */\nexport const ResetPasswordForm: React.FC<ResetPasswordFormProps> = ({\n token,\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Reset Password\",\n loadingText = \"Updating...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n resetPassword,\n clearError,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n clearError();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!password || !confirmPassword) {\n setFormError(\"Both password fields are required\");\n return;\n }\n\n if (password !== confirmPassword) {\n setFormError(\"Passwords do not match\");\n return;\n }\n\n if (password.length < 8) {\n setFormError(\"Password must be at least 8 characters\");\n return;\n }\n\n try {\n await resetPassword({ token, password, confirmPassword });\n setSuccessMessage(\"Password has been reset successfully\");\n setPassword(\"\");\n setConfirmPassword(\"\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Reset failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"RESET_PASSWORD_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"password\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.password || \"New Password\"}\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={placeholders.password || \"Enter a new password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label\n htmlFor=\"confirmPassword\"\n className={cn(AUTH_FORM_CLASSES.label, labelClassName)}\n >\n {labels.confirmPassword || \"Confirm Password\"}\n </label>\n <input\n id=\"confirmPassword\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder={placeholders.confirmPassword || \"Confirm your new password\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"new-password\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nResetPasswordForm.displayName = \"ResetPasswordForm\";\n","import React, { useEffect, useState } from \"react\";\nimport { VerifyEmailFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\n/**\n * VerifyEmailForm Component\n * A ready-to-use email verification form with packaged default styling\n */\nexport const VerifyEmailForm: React.FC<VerifyEmailFormProps> = ({\n token: initialToken,\n email: initialEmail,\n className,\n formClassName,\n fieldClassName,\n labelClassName,\n inputClassName,\n buttonClassName,\n errorClassName,\n successClassName,\n titleClassName,\n subtitleClassName,\n labels = {},\n placeholders = {},\n submitButtonText = \"Verify Email\",\n loadingText = \"Verifying...\",\n title,\n subtitle,\n showTitle = !!title,\n onSuccess,\n onError,\n}) => {\n const {\n verifyEmail,\n clearError,\n isLoading: authLoading,\n error: authError,\n } = useAuth();\n const [formError, setFormError] = useState<string>(\"\");\n const [email, setEmail] = useState(initialEmail || \"\");\n const [token, setToken] = useState(initialToken || \"\");\n const [successMessage, setSuccessMessage] = useState<string>(\"\");\n\n const isLoading = authLoading;\n const error = formError || authError?.message;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n clearError();\n setFormError(\"\");\n setSuccessMessage(\"\");\n\n if (!token) {\n setFormError(\"Verification token is required\");\n return;\n }\n\n if (!email) {\n setFormError(\"Email is required\");\n return;\n }\n\n try {\n await verifyEmail({ token, email });\n setSuccessMessage(\"Email has been verified successfully\");\n onSuccess?.();\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : \"Verification failed\";\n setFormError(errorMsg);\n onError?.({\n code: \"VERIFY_EMAIL_ERROR\",\n message: errorMsg,\n });\n }\n };\n\n // Auto-submit if both token and email are provided.\n useEffect(() => {\n if (token && email && !successMessage && !error) {\n void handleSubmit({ preventDefault: () => {} } as React.FormEvent);\n }\n }, [token, email]);\n\n if (successMessage) {\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div className={cn(AUTH_FORM_CLASSES.success, successClassName)} role=\"status\">\n <p>{successMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n {showTitle && title && (\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={cn(AUTH_FORM_CLASSES.title, titleClassName)}>\n {title}\n </h1>\n {subtitle && (\n <p className={cn(AUTH_FORM_CLASSES.subtitle, subtitleClassName)}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n <form\n onSubmit={handleSubmit}\n className={cn(AUTH_FORM_CLASSES.form, formClassName)}\n aria-busy={isLoading}\n >\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"email\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.email || \"Email\"}\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={placeholders.email || \"your@email.com\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"email\"\n required\n />\n </div>\n\n <div className={cn(AUTH_FORM_CLASSES.field, fieldClassName)}>\n <label htmlFor=\"token\" className={cn(AUTH_FORM_CLASSES.label, labelClassName)}>\n {labels.token || \"Verification Code\"}\n </label>\n <input\n id=\"token\"\n type=\"text\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder={placeholders.token || \"Enter verification code\"}\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.input, inputClassName)}\n autoComplete=\"one-time-code\"\n required\n />\n </div>\n\n {error && (\n <div className={cn(AUTH_FORM_CLASSES.error, errorClassName)} role=\"alert\">\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(AUTH_FORM_CLASSES.button, buttonClassName)}\n aria-busy={isLoading}\n >\n {isLoading ? (\n <span className={AUTH_FORM_CLASSES.buttonContent}>\n <span className={AUTH_FORM_CLASSES.buttonSpinner} aria-hidden=\"true\" />\n {loadingText}\n </span>\n ) : (\n submitButtonText\n )}\n </button>\n </form>\n </div>\n );\n};\n\nVerifyEmailForm.displayName = \"VerifyEmailForm\";\n","import React, { useId, useMemo, useRef, useState } from \"react\";\nimport { OtpInputProps } from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\nfunction toDigits(value: string, length: number) {\n return Array.from({ length }, (_, index) => value[index] ?? \"\");\n}\n\nexport const OtpInput: React.FC<OtpInputProps> = ({\n length = 6,\n value,\n onChange,\n onComplete,\n disabled = false,\n className,\n inputClassName,\n}) => {\n const [internalValue, setInternalValue] = useState(\"\");\n const inputRefs = useRef<Array<HTMLInputElement | null>>([]);\n const baseId = useId();\n const currentValue = value ?? internalValue;\n const digits = useMemo(\n () => toDigits(currentValue.slice(0, length), length),\n [currentValue, length]\n );\n\n const commitValue = (nextDigits: string[]) => {\n const nextValue = nextDigits.join(\"\").slice(0, length);\n\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n\n if (nextDigits.every(Boolean) && nextValue.length === length) {\n onComplete?.(nextValue);\n }\n };\n\n const focusInput = (index: number) => {\n inputRefs.current[index]?.focus();\n inputRefs.current[index]?.select();\n };\n\n const handleChange = (index: number, nextChunk: string) => {\n const sanitized = nextChunk.replace(/\\s+/g, \"\");\n const nextDigits = [...digits];\n\n if (!sanitized) {\n nextDigits[index] = \"\";\n commitValue(nextDigits);\n return;\n }\n\n if (sanitized.length > 1) {\n sanitized\n .slice(0, length - index)\n .split(\"\")\n .forEach((character, offset) => {\n nextDigits[index + offset] = character;\n });\n\n commitValue(nextDigits);\n focusInput(Math.min(index + sanitized.length, length - 1));\n return;\n }\n\n nextDigits[index] = sanitized;\n commitValue(nextDigits);\n\n if (index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (\n index: number,\n event: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (event.key === \"Backspace\" && !digits[index] && index > 0) {\n focusInput(index - 1);\n }\n\n if (event.key === \"ArrowLeft\" && index > 0) {\n event.preventDefault();\n focusInput(index - 1);\n }\n\n if (event.key === \"ArrowRight\" && index < length - 1) {\n event.preventDefault();\n focusInput(index + 1);\n }\n };\n\n const handlePaste = (\n index: number,\n event: React.ClipboardEvent<HTMLInputElement>\n ) => {\n event.preventDefault();\n handleChange(index, event.clipboardData.getData(\"text\"));\n };\n\n return (\n <div\n className={cn(AUTH_FORM_CLASSES.otpGroup, className)}\n style={\n {\n \"--rq-auth-otp-columns\": String(length),\n } as React.CSSProperties\n }\n >\n {digits.map((digit, index) => (\n <input\n key={`otp-${index}`}\n ref={(element) => {\n inputRefs.current[index] = element;\n }}\n id={`${baseId}-${index}`}\n type=\"text\"\n inputMode=\"text\"\n autoComplete={index === 0 ? \"one-time-code\" : \"off\"}\n maxLength={1}\n value={digit}\n disabled={disabled}\n className={cn(AUTH_FORM_CLASSES.otpInput, inputClassName)}\n onChange={(event) => handleChange(index, event.target.value)}\n onKeyDown={(event) => handleKeyDown(index, event)}\n onPaste={(event) => handlePaste(index, event)}\n aria-label={`OTP digit ${index + 1}`}\n />\n ))}\n </div>\n );\n};\n\nOtpInput.displayName = \"OtpInput\";\n","import React, { useState } from \"react\";\nimport { TwoFactorFormProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\nimport { OtpInput } from \"./OtpInput\";\n\nexport const TwoFactorForm: React.FC<TwoFactorFormProps> = ({\n onSuccess,\n onError,\n className,\n submitButtonText = \"Verify Code\",\n loadingText = \"Verifying...\",\n title = \"Two-factor authentication\",\n subtitle = \"Enter the verification code to continue.\",\n length = 6,\n}) => {\n const {\n verifyTwoFactor,\n clearError,\n isLoading,\n error: authError,\n } = useAuth();\n const [code, setCode] = useState(\"\");\n const [formError, setFormError] = useState(\"\");\n\n const error = formError || authError?.message;\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n clearError();\n setFormError(\"\");\n\n if (code.length !== length) {\n setFormError(`Enter the full ${length}-digit code.`);\n return;\n }\n\n try {\n const response = await verifyTwoFactor({ code });\n onSuccess?.(response);\n } catch (caughtError) {\n const message =\n caughtError instanceof Error\n ? caughtError.message\n : \"Two-factor verification failed\";\n setFormError(message);\n onError?.({\n code: \"TWO_FACTOR_ERROR\",\n message,\n });\n }\n };\n\n return (\n <div className={cn(AUTH_FORM_CLASSES.container, className)}>\n <div className={AUTH_FORM_CLASSES.header}>\n <h1 className={AUTH_FORM_CLASSES.title}>{title}</h1>\n <p className={AUTH_FORM_CLASSES.subtitle}>{subtitle}</p>\n </div>\n\n <form onSubmit={handleSubmit} className={AUTH_FORM_CLASSES.form}>\n <div className={AUTH_FORM_CLASSES.field}>\n <label className={AUTH_FORM_CLASSES.label}>\n Verification code\n </label>\n <OtpInput\n length={length}\n value={code}\n onChange={setCode}\n disabled={isLoading}\n />\n </div>\n\n {error ? (\n <div className={AUTH_FORM_CLASSES.error} role=\"alert\">\n {error}\n </div>\n ) : null}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n className={AUTH_FORM_CLASSES.button}\n >\n {isLoading ? loadingText : submitButtonText}\n </button>\n </form>\n </div>\n );\n};\n\nTwoFactorForm.displayName = \"TwoFactorForm\";\n","import React from \"react\";\nimport { SocialLoginButtonProps } from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport { AUTH_FORM_CLASSES } from \"./authClassNames\";\n\nconst defaultLabels: Record<SocialLoginButtonProps[\"provider\"], string> = {\n google: \"Continue with Google\",\n github: \"Continue with GitHub\",\n facebook: \"Continue with Facebook\",\n custom: \"Continue\",\n};\n\nconst defaultIcons: Record<SocialLoginButtonProps[\"provider\"], string> = {\n google: \"G\",\n github: \"GH\",\n facebook: \"f\",\n custom: \"+\",\n};\n\nexport const SocialLoginButton: React.FC<SocialLoginButtonProps> = ({\n provider,\n label,\n icon,\n onClick,\n className,\n disabled = false,\n}) => {\n return (\n <button\n type=\"button\"\n className={cn(AUTH_FORM_CLASSES.socialButton, className)}\n data-provider={provider}\n onClick={onClick}\n disabled={disabled}\n >\n <span className={AUTH_FORM_CLASSES.socialIcon} aria-hidden=\"true\">\n {icon ?? defaultIcons[provider]}\n </span>\n <span className={AUTH_FORM_CLASSES.socialLabel}>\n {label ?? defaultLabels[provider]}\n </span>\n </button>\n );\n};\n\nSocialLoginButton.displayName = \"SocialLoginButton\";\n","import React from \"react\";\nimport { Navigate } from \"react-router-dom\";\nimport { ProtectedRouteProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\n\nexport const ProtectedRoute: React.FC<ProtectedRouteProps> = ({\n children,\n redirectTo = \"/login\",\n fallback,\n roles,\n permissions,\n unauthorizedTo,\n requireAllPermissions = true,\n}) => {\n const {\n isAuthenticated,\n isLoading,\n hasAllPermissions,\n hasAnyPermission,\n hasAnyRole,\n } = useAuth();\n\n if (isLoading) {\n return fallback || <div className=\"auth-loading\">Loading...</div>;\n }\n\n if (!isAuthenticated) {\n return <Navigate to={redirectTo} replace />;\n }\n\n const hasRequiredRole = !roles?.length || hasAnyRole(roles);\n const hasRequiredPermission =\n !permissions?.length ||\n (requireAllPermissions\n ? hasAllPermissions(permissions)\n : hasAnyPermission(permissions));\n\n if (!hasRequiredRole || !hasRequiredPermission) {\n return <Navigate to={unauthorizedTo ?? redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\nProtectedRoute.displayName = \"ProtectedRoute\";\n","import React from \"react\";\nimport { Navigate } from \"react-router-dom\";\nimport { GuestRouteProps } from \"../types\";\nimport { useAuth } from \"../hooks/useAuth\";\n\nexport const GuestRoute: React.FC<GuestRouteProps> = ({\n children,\n redirectTo = \"/\",\n fallback,\n}) => {\n const { isAuthenticated, isLoading } = useAuth();\n\n if (isLoading) {\n return fallback || <div className=\"auth-loading\">Loading...</div>;\n }\n\n if (isAuthenticated) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\nGuestRoute.displayName = \"GuestRoute\";\n"],"names":["createContext","useReducer","useMemo","useCallback","useEffect","jsx","useContext","jsxs","useState","useRef","useId","Navigate"],"mappings":"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"}