@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.
- package/README.md +371 -173
- package/dist/index.cjs.js +779 -210
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +126 -65
- package/dist/index.es.js +744 -175
- package/dist/index.es.js.map +1 -1
- package/dist/style.css +209 -47
- package/package.json +24 -20
package/dist/index.cjs.js.map
CHANGED
|
@@ -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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"}
|