@atzentis/auth-react 0.0.14 → 0.0.15
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/dist/index.d.ts +300 -29
- package/dist/index.js +1783 -301
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +48 -0
- package/dist/server.js +24 -0
- package/dist/server.js.map +1 -0
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider/auth-provider.tsx","../src/localization/error-codes.ts","../src/localization/auth-localization.ts","../src/localization/get-localized-error.ts","../src/hooks/use-auth-context.ts","../src/hooks/use-api-keys.ts","../src/hooks/use-auth.ts","../src/hooks/use-auth-localization.ts","../src/hooks/use-devices.ts","../src/hooks/use-login-activity.ts","../src/hooks/use-organizations.ts","../src/hooks/use-phone.ts","../src/hooks/use-session.ts","../src/hooks/use-sessions.ts","../src/hooks/use-user.ts","../src/helpers/initials.ts","../src/components/sessions/account-switcher.tsx","../src/components/sessions/session-guard.tsx","../src/components/devices/device-list.tsx","../src/components/shared/loading-boundary.tsx","../src/components/shared/submit-button.tsx","../src/helpers/risk-utils.ts","../src/components/activity/login-activity-feed.tsx","../src/helpers/to-auth-error.ts","../src/schemas/login-schema.ts","../src/components/shared/utils.ts","../src/components/auth/oauth-button.tsx","../src/schemas/phone-login-schema.ts","../src/components/shared/country-codes.ts","../src/components/auth/phone-login-form.tsx","../src/components/auth/login-form.tsx","../src/schemas/magic-link-schema.ts","../src/components/auth/magic-link-form.tsx","../src/schemas/signup-schema.ts","../src/components/auth/signup-form.tsx","../src/components/organizations/organization-menu.tsx","../src/components/users/user-menu.tsx"],"names":["useState","useCallback","useContext","jsx","Fragment","useEffect","jsxs","Button","Card","AuthError","z","otpVerifySchema","useMemo","useForm","zodResolver","FormInput","FormPasswordInput","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator"],"mappings":"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","file":"index.js","sourcesContent":["// AuthProvider — React context provider for @atzentis/auth-react\n\nimport type { AuthError, User } from \"@atzentis/auth-sdk\";\nimport { AuthClient } from \"@atzentis/auth-sdk\";\nimport type { Session } from \"@atzentis/auth-sdk\";\nimport { createContext, useCallback, useMemo, useState } from \"react\";\nimport type { AuthLocalization } from \"../localization\";\nimport type { AuthContextValue, AuthProviderProps } from \"./provider.types\";\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\nexport interface LocalizationContextValue {\n overrides: AuthLocalization | null;\n localizeErrors: boolean;\n}\n\nexport const LocalizationContext = createContext<LocalizationContextValue>({\n overrides: null,\n localizeErrors: true,\n});\n\nexport function AuthProvider({\n apiKey,\n baseUrl,\n autoRefreshToken,\n refreshThreshold,\n timeout,\n collectDeviceSignals,\n onSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n children,\n initialUser,\n storage,\n localization,\n localizeErrors = true,\n}: AuthProviderProps) {\n const [client] = useState(() => {\n const handleSessionExpired = () => {\n setUser(null);\n setSession(null);\n onSessionExpired?.();\n };\n\n return new AuthClient({\n apiKey,\n baseUrl,\n timeout,\n autoRefreshToken,\n refreshThreshold,\n collectDeviceSignals,\n onSessionExpired: handleSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n storage,\n });\n });\n\n const [user, setUser] = useState<User | null>(initialUser ?? null);\n const [session, setSession] = useState<Session | null>(null);\n const [isLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const value: AuthContextValue = useMemo(\n () => ({\n client,\n user,\n session,\n isAuthenticated: user !== null,\n isLoading,\n error,\n setUser,\n setSession,\n setError,\n clearError,\n }),\n [client, user, session, isLoading, error, clearError],\n );\n\n const localizationValue = useMemo(\n () => ({ overrides: localization ?? null, localizeErrors }),\n [localization, localizeErrors],\n );\n\n return (\n <AuthContext.Provider value={value}>\n <LocalizationContext.Provider value={localizationValue}>\n {children}\n </LocalizationContext.Provider>\n </AuthContext.Provider>\n );\n}\n","// Error code defaults from @atzentis/auth-sdk\n// Keys match AuthErrorCode enum string values exactly\n\nexport const AUTH_ERROR_CODES = {\n INVALID_CREDENTIALS: \"Invalid email or password\",\n EMAIL_NOT_VERIFIED: \"Email address is not verified\",\n TWO_FACTOR_REQUIRED: \"Two-factor authentication is required\",\n INVALID_PHONE_NUMBER: \"Invalid phone number\",\n OTP_EXPIRED: \"Verification code has expired\",\n OTP_INVALID: \"Invalid verification code\",\n OTP_MAX_ATTEMPTS: \"Too many verification attempts\",\n PHONE_NUMBER_IN_USE: \"Phone number is already in use\",\n FRAUD_DETECTED: \"Suspicious activity detected\",\n USERNAME_TAKEN: \"Username is already taken\",\n USERNAME_INVALID: \"Invalid username\",\n USERNAME_RESERVED: \"This username is reserved\",\n DEVICE_NOT_FOUND: \"Device not found\",\n LOGIN_EVENT_NOT_FOUND: \"Login event not found\",\n REAUTH_REQUIRED: \"Please sign in again to continue\",\n MAX_SESSIONS_EXCEEDED: \"Maximum number of sessions exceeded\",\n CAPTCHA_REQUIRED: \"CAPTCHA verification is required\",\n CAPTCHA_INVALID: \"CAPTCHA verification failed\",\n PASSWORD_BREACHED: \"This password has been found in a data breach\",\n SESSION_EXPIRED: \"Session expired\",\n TOKEN_EXPIRED: \"Token has expired\",\n INVALID_TOKEN: \"Invalid token\",\n UNAUTHORIZED_ROLE: \"You do not have permission to perform this action\",\n ORGANIZATION_NOT_FOUND: \"Organization not found\",\n PERMISSION_DENIED: \"Permission denied\",\n RATE_LIMITED: \"Too many requests. Please try again later.\",\n NETWORK_ERROR: \"Network error. Please check your connection.\",\n TIMEOUT: \"Request timed out. Please try again.\",\n USER_NOT_FOUND: \"User not found\",\n USER_ALREADY_EXISTS: \"A user with this email already exists\",\n INVALID_EMAIL: \"Invalid email address\",\n WEAK_PASSWORD: \"Password is too weak\",\n ORG_LIMIT_EXCEEDED: \"Organization limit exceeded\",\n MEMBER_LIMIT_EXCEEDED: \"Member limit exceeded\",\n KEY_NOT_FOUND: \"API key not found\",\n KEY_REVOKED: \"API key has been revoked\",\n KEY_EXPIRED: \"API key has expired\",\n};\n","import { AUTH_ERROR_CODES } from \"./error-codes\";\n\n/**\n * Centralized localization for all @atzentis/auth-react components.\n *\n * This const object contains all default English strings.\n * The `AuthLocalization` type is derived as `Partial<typeof authLocalization>`.\n *\n * Pass a partial override to AuthProvider:\n * ```tsx\n * const de: AuthLocalization = { SIGN_IN: \"Anmelden\", ... };\n * <AuthProvider localization={de}>\n * ```\n */\nexport const authLocalization = {\n // --- General / Shared ---\n\n /** @default \"Continue\" */\n CONTINUE: \"Continue\",\n\n /** @default \"Cancel\" */\n CANCEL: \"Cancel\",\n\n /** @default \"Save\" */\n SAVE: \"Save\",\n\n /** @default \"Delete\" */\n DELETE: \"Delete\",\n\n /** @default \"Update\" */\n UPDATE: \"Update\",\n\n /** @default \"Remove\" */\n REMOVE: \"Remove\",\n\n /** @default \"Done\" */\n DONE: \"Done\",\n\n /** @default \"Go back\" */\n GO_BACK: \"Go back\",\n\n /** @default \"Loading...\" */\n LOADING: \"Loading...\",\n\n /** @default \"Load more\" */\n LOAD_MORE: \"Load more\",\n\n /** @default \"Unknown\" */\n UNKNOWN: \"Unknown\",\n\n /** @default \"Request failed\" */\n REQUEST_FAILED: \"Request failed\",\n\n /** @default \"Updated successfully\" */\n UPDATED_SUCCESSFULLY: \"Updated successfully\",\n\n // --- Sign In (LoginForm) ---\n\n /** @default \"Sign in\" */\n SIGN_IN: \"Sign in\",\n\n /** @default \"Sign in\" */\n SIGN_IN_ACTION: \"Sign in\",\n\n /** @default \"Enter your email below to sign in\" */\n SIGN_IN_DESCRIPTION: \"Enter your email below to sign in\",\n\n /** @default \"Enter your username or email to sign in\" */\n SIGN_IN_USERNAME_DESCRIPTION: \"Enter your username or email to sign in\",\n\n /** @default \"Username or email\" */\n SIGN_IN_USERNAME_PLACEHOLDER: \"Username or email\",\n\n /** @default \"Signing in...\" */\n SIGNING_IN: \"Signing in...\",\n\n /** @default \"m@example.com\" */\n EMAIL_PLACEHOLDER: \"m@example.com\",\n\n /** @default \"Password\" */\n PASSWORD_PLACEHOLDER: \"Password\",\n\n /** @default \"Forgot your password?\" */\n FORGOT_PASSWORD_LINK: \"Forgot your password?\",\n\n /** @default \"Use phone instead\" */\n USE_PHONE_INSTEAD: \"Use phone instead\",\n\n /** @default \"Use email instead\" */\n USE_EMAIL_INSTEAD: \"Use email instead\",\n\n /** @default \"Or continue with\" */\n OR_CONTINUE_WITH: \"Or continue with\",\n\n /** @default \"Sign in with\" */\n SIGN_IN_WITH: \"Sign in with\",\n\n /** @default \"Don't have an account?\" */\n DONT_HAVE_AN_ACCOUNT: \"Don't have an account?\",\n\n /** @default \"Remember me\" */\n REMEMBER_ME: \"Remember me\",\n\n // --- Sign Up (SignupForm) ---\n\n /** @default \"Sign up\" */\n SIGN_UP: \"Sign up\",\n\n /** @default \"Create account\" */\n SIGN_UP_ACTION: \"Create account\",\n\n /** @default \"Enter your information to create an account\" */\n SIGN_UP_DESCRIPTION: \"Enter your information to create an account\",\n\n /** @default \"Check your email for the verification link.\" */\n SIGN_UP_EMAIL: \"Check your email for the verification link.\",\n\n /** @default \"Name\" */\n NAME_PLACEHOLDER: \"Name\",\n\n /** @default \"Please enter your full name.\" */\n NAME_DESCRIPTION: \"Please enter your full name.\",\n\n /** @default \"Username\" */\n USERNAME_PLACEHOLDER: \"Username\",\n\n /** @default \"Username\" */\n USERNAME: \"Username\",\n\n /** @default \"Confirm password\" */\n CONFIRM_PASSWORD_PLACEHOLDER: \"Confirm password\",\n\n /** @default \"Already have an account?\" */\n ALREADY_HAVE_AN_ACCOUNT: \"Already have an account?\",\n\n /** @default \"I accept the terms and conditions\" */\n ACCEPT_TERMS: \"I accept the terms and conditions\",\n\n /** @default \"You must accept the terms\" */\n ACCEPT_TERMS_ERROR: \"You must accept the terms\",\n\n /** @default \"By continuing, you agree to the\" */\n BY_CONTINUING_YOU_AGREE: \"By continuing, you agree to the\",\n\n /** @default \"Terms of Service\" */\n TERMS_OF_SERVICE: \"Terms of Service\",\n\n /** @default \"Privacy Policy\" */\n PRIVACY_POLICY: \"Privacy Policy\",\n\n // --- Phone Login (PhoneLoginForm) ---\n\n /** @default \"Phone number\" */\n PHONE_NUMBER_PLACEHOLDER: \"Phone number\",\n\n /** @default \"Country code\" */\n COUNTRY_CODE: \"Country code\",\n\n /** @default \"Send code\" */\n SEND_VERIFICATION_CODE: \"Send code\",\n\n /** @default \"Sending code...\" */\n SENDING_VERIFICATION_CODE: \"Sending code...\",\n\n /** @default \"One-Time Password\" */\n ONE_TIME_PASSWORD: \"One-Time Password\",\n\n /** @default \"Verification code\" */\n VERIFICATION_CODE_LABEL: \"Verification code\",\n\n /** @default \"Verify\" */\n VERIFY: \"Verify\",\n\n /** @default \"Verifying...\" */\n VERIFYING: \"Verifying...\",\n\n /** @default \"Code expires in\" */\n CODE_EXPIRES_IN: \"Code expires in\",\n\n /** @default \"Resend code\" */\n RESEND_CODE: \"Resend code\",\n\n /** @default \"Sign in with password\" */\n USE_PASSWORD_INSTEAD: \"Sign in with password\",\n\n // --- OAuth ---\n\n /** @default \"Continue with\" */\n CONTINUE_WITH: \"Continue with\",\n\n /** @default \"Redirecting...\" */\n REDIRECTING: \"Redirecting...\",\n\n // --- Magic Link ---\n\n /** @default \"Magic Link\" */\n MAGIC_LINK: \"Magic Link\",\n\n /** @default \"Send magic link\" */\n MAGIC_LINK_ACTION: \"Send magic link\",\n\n /** @default \"Enter your email to receive a magic link\" */\n MAGIC_LINK_DESCRIPTION: \"Enter your email to receive a magic link\",\n\n /** @default \"We sent a magic link to\" */\n MAGIC_LINK_EMAIL: \"We sent a magic link to\",\n\n /** @default \"Check your inbox and click the link to sign in.\" */\n MAGIC_LINK_HINT: \"Check your inbox and click the link to sign in.\",\n\n /** @default \"Sending...\" */\n SENDING: \"Sending...\",\n\n /** @default \"Resend\" */\n RESEND: \"Resend\",\n\n /** @default \"Resending...\" */\n RESENDING: \"Resending...\",\n\n // --- Password Management ---\n\n /** @default \"Password\" */\n PASSWORD: \"Password\",\n\n /** @default \"New Password\" */\n NEW_PASSWORD: \"New Password\",\n\n /** @default \"Current Password\" */\n CURRENT_PASSWORD: \"Current Password\",\n\n /** @default \"Change Password\" */\n CHANGE_PASSWORD: \"Change Password\",\n\n /** @default \"Enter your current and new password\" */\n CHANGE_PASSWORD_DESCRIPTION: \"Enter your current and new password\",\n\n /** @default \"Password has been changed\" */\n CHANGE_PASSWORD_SUCCESS: \"Password has been changed\",\n\n /** @default \"Forgot Password\" */\n FORGOT_PASSWORD: \"Forgot Password\",\n\n /** @default \"Send reset link\" */\n FORGOT_PASSWORD_ACTION: \"Send reset link\",\n\n /** @default \"Enter your email to reset your password\" */\n FORGOT_PASSWORD_DESCRIPTION: \"Enter your email to reset your password\",\n\n /** @default \"Check your email for the reset link\" */\n FORGOT_PASSWORD_EMAIL: \"Check your email for the reset link\",\n\n /** @default \"Reset Password\" */\n RESET_PASSWORD: \"Reset Password\",\n\n /** @default \"Save new password\" */\n RESET_PASSWORD_ACTION: \"Save new password\",\n\n /** @default \"Password reset successfully\" */\n RESET_PASSWORD_SUCCESS: \"Password reset successfully\",\n\n /** @default \"Set Password\" */\n SET_PASSWORD: \"Set Password\",\n\n /** @default \"Click the button to receive an email to set your password\" */\n SET_PASSWORD_DESCRIPTION: \"Click the button to receive an email to set your password\",\n\n // --- Devices & Sessions ---\n\n /** @default \"Current Session\" */\n CURRENT_SESSION: \"Current Session\",\n\n /** @default \"Current device\" */\n CURRENT_DEVICE: \"Current device\",\n\n /** @default \"Sessions\" */\n SESSIONS: \"Sessions\",\n\n /** @default \"Manage your active sessions\" */\n SESSIONS_DESCRIPTION: \"Manage your active sessions\",\n\n /** @default \"Trust\" */\n TRUST_DEVICE: \"Trust\",\n\n /** @default \"Untrust\" */\n UNTRUST_DEVICE: \"Untrust\",\n\n /** @default \"Loading devices...\" */\n LOADING_DEVICES: \"Loading devices...\",\n\n /** @default \"No devices found\" */\n NO_DEVICES: \"No devices found\",\n\n /** @default \"Last used:\" */\n LAST_USED: \"Last used:\",\n\n /** @default \"IP:\" */\n IP_LABEL: \"IP:\",\n\n /** @default \"Security\" */\n SECURITY: \"Security\",\n\n /** @default \"Session not fresh. Please sign in again.\" */\n SESSION_NOT_FRESH: \"Session not fresh. Please sign in again.\",\n\n // --- Login Activity & Risk ---\n\n /** @default \"Login Activity\" */\n LOGIN_ACTIVITY: \"Login Activity\",\n\n /** @default \"Recent login attempts\" */\n LOGIN_ACTIVITY_DESCRIPTION: \"Recent login attempts\",\n\n /** @default \"Low\" */\n RISK_LOW: \"Low\",\n\n /** @default \"Medium\" */\n RISK_MEDIUM: \"Medium\",\n\n /** @default \"High\" */\n RISK_HIGH: \"High\",\n\n /** @default \"This was me\" */\n MARK_RECOGNIZED: \"This was me\",\n\n /** @default \"Not me\" */\n REPORT_SUSPICIOUS: \"Not me\",\n\n /** @default \"Loading activity...\" */\n LOADING_ACTIVITY: \"Loading activity...\",\n\n /** @default \"No login activity found\" */\n NO_ACTIVITY: \"No login activity found\",\n\n // --- Accounts & Switching ---\n\n /** @default \"Accounts\" */\n ACCOUNTS: \"Accounts\",\n\n /** @default \"Manage signed in accounts\" */\n ACCOUNTS_DESCRIPTION: \"Manage signed in accounts\",\n\n /** @default \"Add account\" */\n ADD_ACCOUNT: \"Add account\",\n\n /** @default \"Switch Account\" */\n SWITCH_ACCOUNT: \"Switch Account\",\n\n /** @default \"Select account\" */\n SELECT_ACCOUNT: \"Select account\",\n\n /** @default \"Personal Account\" */\n PERSONAL_ACCOUNT: \"Personal Account\",\n\n /** @default \"Sign out\" */\n SIGN_OUT: \"Sign out\",\n\n // --- Organizations ---\n\n /** @default \"Organization\" */\n ORGANIZATION: \"Organization\",\n\n /** @default \"Organizations\" */\n ORGANIZATIONS: \"Organizations\",\n\n /** @default \"Manage your organizations\" */\n ORGANIZATIONS_DESCRIPTION: \"Manage your organizations\",\n\n /** @default \"Select organization\" */\n SELECT_ORGANIZATION: \"Select organization\",\n\n /** @default \"Create organization\" */\n CREATE_ORGANIZATION: \"Create organization\",\n\n /** @default \"Name\" */\n ORGANIZATION_NAME: \"Name\",\n\n /** @default \"Acme Inc.\" */\n ORGANIZATION_NAME_PLACEHOLDER: \"Acme Inc.\",\n\n /** @default \"Leave Organization\" */\n LEAVE_ORGANIZATION: \"Leave Organization\",\n\n /** @default \"Delete Organization\" */\n DELETE_ORGANIZATION: \"Delete Organization\",\n\n /** @default \"Members\" */\n MEMBERS: \"Members\",\n\n /** @default \"Invite Member\" */\n INVITE_MEMBER: \"Invite Member\",\n\n /** @default \"Remove Member\" */\n REMOVE_MEMBER: \"Remove Member\",\n\n /** @default \"Role\" */\n ROLE: \"Role\",\n\n /** @default \"Admin\" */\n ADMIN: \"Admin\",\n\n /** @default \"Member\" */\n MEMBER: \"Member\",\n\n /** @default \"Owner\" */\n OWNER: \"Owner\",\n\n // --- User Menu ---\n\n /** @default \"Settings\" */\n SETTINGS: \"Settings\",\n\n /** @default \"Account\" */\n ACCOUNT: \"Account\",\n\n /** @default \"Avatar\" */\n AVATAR: \"Avatar\",\n\n /** @default \"Click avatar to upload a custom one\" */\n AVATAR_DESCRIPTION: \"Click avatar to upload a custom one\",\n\n /** @default \"Delete Avatar\" */\n DELETE_AVATAR: \"Delete Avatar\",\n\n /** @default \"Upload Avatar\" */\n UPLOAD_AVATAR: \"Upload Avatar\",\n\n /** @default \"Email\" */\n EMAIL: \"Email\",\n\n /** @default \"Name\" */\n NAME: \"Name\",\n\n // --- Two-Factor ---\n\n /** @default \"Two-Factor\" */\n TWO_FACTOR: \"Two-Factor\",\n\n /** @default \"Two-Factor Authentication\" */\n TWO_FACTOR_PROMPT: \"Two-Factor Authentication\",\n\n /** @default \"Enter your one-time password\" */\n TWO_FACTOR_DESCRIPTION: \"Enter your one-time password\",\n\n /** @default \"Verify code\" */\n TWO_FACTOR_ACTION: \"Verify code\",\n\n /** @default \"Two-factor authentication has been enabled\" */\n TWO_FACTOR_ENABLED: \"Two-factor authentication has been enabled\",\n\n /** @default \"Two-factor authentication has been disabled\" */\n TWO_FACTOR_DISABLED: \"Two-factor authentication has been disabled\",\n\n /** @default \"Enable Two-Factor\" */\n ENABLE_TWO_FACTOR: \"Enable Two-Factor\",\n\n /** @default \"Disable Two-Factor\" */\n DISABLE_TWO_FACTOR: \"Disable Two-Factor\",\n\n /** @default \"Backup Codes\" */\n BACKUP_CODES: \"Backup Codes\",\n\n /** @default \"Save these codes in a secure place\" */\n BACKUP_CODES_DESCRIPTION: \"Save these codes in a secure place\",\n\n // --- Validation ---\n\n /** @default \"Passwords do not match\" */\n PASSWORDS_DO_NOT_MATCH: \"Passwords do not match\",\n\n /** @default \"Password is required\" */\n PASSWORD_REQUIRED: \"Password is required\",\n\n /** @default \"Email address is required\" */\n EMAIL_REQUIRED: \"Email address is required\",\n\n /** @default \"is required\" */\n IS_REQUIRED: \"is required\",\n\n /** @default \"is invalid\" */\n IS_INVALID: \"is invalid\",\n\n // --- Error Codes ---\n ...AUTH_ERROR_CODES,\n};\n\nexport type AuthLocalization = Partial<typeof authLocalization>;\n","import { AuthError } from \"@atzentis/auth-sdk\";\nimport type { AuthLocalization } from \"./auth-localization\";\nimport { authLocalization } from \"./auth-localization\";\n\n/**\n * Gets a localized error message from an error object.\n *\n * When `localizeErrors` is true, looks up the error code directly\n * in the localization dictionary (error codes are localization keys).\n *\n * Fallback chain:\n * 1. localization[error.code] (if AuthError and localizeErrors)\n * 2. error.message\n * 3. localization.REQUEST_FAILED\n * 4. \"Request failed\"\n */\nexport function getLocalizedError(\n error: unknown,\n localization: AuthLocalization,\n localizeErrors: boolean,\n): string {\n if (!localizeErrors) {\n if (error instanceof Error && error.message) return error.message;\n return authLocalization.REQUEST_FAILED;\n }\n\n if (error instanceof AuthError) {\n const errorCode = error.code as keyof typeof authLocalization;\n if (localization?.[errorCode]) return localization[errorCode];\n }\n\n if (error instanceof Error && error.message) return error.message;\n\n return localization?.REQUEST_FAILED ?? authLocalization.REQUEST_FAILED;\n}\n","// Internal hook to access auth context with error boundary\n\nimport { useContext } from \"react\";\nimport type { AuthContextValue } from \"../provider\";\nimport { AuthContext } from \"../provider\";\n\nexport function useAuthContext(): AuthContextValue {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuthContext must be used within AuthProvider\");\n }\n\n return context;\n}\n","// useApiKeys hook — API key management\n\nimport type {\n ApiKey,\n AuthError,\n CreateApiKeyRequest,\n UpdateApiKeyRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useApiKeys() {\n const { client } = useAuthContext();\n\n const [apiKeys, setApiKeys] = useState<ApiKey[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.apiKeys.list();\n setApiKeys(response.data);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const create = useCallback(\n async (data: CreateApiKeyRequest) => {\n const response = await client.apiKeys.create(data);\n await refresh();\n return response;\n },\n [client, refresh],\n );\n\n const get = useCallback(\n async (keyId: string) => {\n return client.apiKeys.get(keyId);\n },\n [client],\n );\n\n const update = useCallback(\n async (keyId: string, data: UpdateApiKeyRequest) => {\n const updated = await client.apiKeys.update(keyId, data);\n await refresh();\n return updated;\n },\n [client, refresh],\n );\n\n const rotate = useCallback(\n async (keyId: string) => {\n const response = await client.apiKeys.rotate(keyId);\n await refresh();\n return response;\n },\n [client, refresh],\n );\n\n const revoke = useCallback(\n async (keyId: string) => {\n await client.apiKeys.revoke(keyId);\n await refresh();\n },\n [client, refresh],\n );\n\n const validate = useCallback(\n async (keyString: string) => {\n return client.apiKeys.validate(keyString);\n },\n [client],\n );\n\n const getUsage = useCallback(\n async (keyId: string) => {\n return client.apiKeys.getUsage(keyId);\n },\n [client],\n );\n\n return {\n apiKeys,\n isLoading,\n error,\n refresh,\n create,\n get,\n update,\n rotate,\n revoke,\n validate,\n getUsage,\n };\n}\n","// useAuth hook — auth state and methods\n\nimport type {\n GetOAuthUrlRequest,\n LoginCredentials,\n SendMagicLinkRequest,\n SignupData,\n UsernameLoginCredentials,\n VerifyMagicLinkRequest,\n VerifyOAuthCodeRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useAuth() {\n const { client, user, isAuthenticated, isLoading, error, setUser, clearError } = useAuthContext();\n\n const login = useCallback(\n async (credentials: LoginCredentials) => {\n const response = await client.login(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const loginWithUsername = useCallback(\n async (credentials: UsernameLoginCredentials) => {\n const response = await client.loginWithUsername(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const signup = useCallback(\n async (data: SignupData) => {\n const response = await client.signup(data);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const logout = useCallback(async () => {\n await client.logout();\n setUser(null);\n }, [client, setUser]);\n\n const logoutAllDevices = useCallback(async () => {\n await client.logoutAllDevices();\n setUser(null);\n }, [client, setUser]);\n\n const getOAuthUrl = useCallback(\n (config: GetOAuthUrlRequest) => {\n return client.getOAuthUrl(config);\n },\n [client],\n );\n\n const verifyOAuthCode = useCallback(\n async (request: VerifyOAuthCodeRequest) => {\n const response = await client.verifyOAuthCode(request);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const sendMagicLink = useCallback(\n async (request: SendMagicLinkRequest) => {\n await client.sendMagicLink(request);\n },\n [client],\n );\n\n const verifyMagicLink = useCallback(\n async (request: VerifyMagicLinkRequest) => {\n const response = await client.verifyMagicLink(request);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const isUsernameAvailable = useCallback(\n async (username: string) => {\n return client.isUsernameAvailable(username);\n },\n [client],\n );\n\n const getAccessToken = useCallback(async () => {\n return client.getAccessToken();\n }, [client]);\n\n const refreshToken = useCallback(async () => {\n return client.refreshToken();\n }, [client]);\n\n const getAuthHeader = useCallback(async () => {\n const token = await client.getAccessToken();\n if (token) {\n return { Authorization: `Bearer ${token}` };\n }\n return {};\n }, [client]);\n\n return {\n user,\n isAuthenticated,\n isLoading,\n error,\n login,\n loginWithUsername,\n signup,\n logout,\n logoutAllDevices,\n getOAuthUrl,\n verifyOAuthCode,\n sendMagicLink,\n verifyMagicLink,\n isUsernameAvailable,\n getAccessToken,\n refreshToken,\n getAuthHeader,\n clearError,\n };\n}\n","import { useContext } from \"react\";\nimport type { AuthLocalization } from \"../localization\";\nimport { authLocalization } from \"../localization\";\nimport { LocalizationContext } from \"../provider\";\n\nexport interface UseAuthLocalizationResult {\n localization: Required<AuthLocalization>;\n localizeErrors: boolean;\n}\n\nexport function useAuthLocalization(): UseAuthLocalizationResult {\n const ctx = useContext(LocalizationContext);\n const localization = ctx.overrides ? { ...authLocalization, ...ctx.overrides } : authLocalization;\n return { localization, localizeErrors: ctx.localizeErrors };\n}\n","// useDevices hook — device management and trust settings\n\nimport type { AuthError, Device } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useDevices() {\n const { client } = useAuthContext();\n\n const [devices, setDevices] = useState<Device[]>([]);\n const [currentDevice, setCurrentDevice] = useState<Device | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.devices.list();\n setDevices(response.data);\n const current = response.data.find((d) => d.isCurrent) ?? null;\n setCurrentDevice(current);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const trustDevice = useCallback(\n async (id: string) => {\n await client.devices.trust(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const untrustDevice = useCallback(\n async (id: string) => {\n await client.devices.untrust(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const removeDevice = useCallback(\n async (id: string) => {\n await client.devices.remove(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const removeAllOtherDevices = useCallback(async () => {\n await client.devices.removeAllOthers();\n await refresh();\n }, [client, refresh]);\n\n return {\n devices,\n currentDevice,\n isLoading,\n error,\n refresh,\n trustDevice,\n untrustDevice,\n removeDevice,\n removeAllOtherDevices,\n };\n}\n","// useLoginActivity hook — login history with filtering and reporting\n\nimport type { AuthError, ListLoginEventsRequest, LoginEvent } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\ninterface UseLoginActivityOptions {\n limit?: number;\n}\n\nexport function useLoginActivity(options: UseLoginActivityOptions = {}) {\n const { client } = useAuthContext();\n\n const [events, setEvents] = useState<LoginEvent[]>([]);\n const [total, setTotal] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n const [filterOptions, setFilterOptions] = useState<ListLoginEventsRequest>({\n limit: options.limit ?? 50,\n offset: 0,\n });\n\n const hasMore = events.length < total;\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.loginActivity.list(filterOptions);\n setEvents(response.data);\n setTotal(response.total);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client, filterOptions]);\n\n const loadMore = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.loginActivity.list({\n ...filterOptions,\n offset: events.length,\n });\n setEvents((prev) => [...prev, ...response.data]);\n setTotal(response.total);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client, filterOptions, events.length]);\n\n const filter = useCallback(\n (newOptions: ListLoginEventsRequest) => {\n const merged = { ...filterOptions, ...newOptions, offset: 0 };\n setFilterOptions(merged);\n setEvents([]);\n setTotal(0);\n },\n [filterOptions],\n );\n\n const markRecognized = useCallback(\n async (eventId: string) => {\n await client.loginActivity.markRecognized(eventId);\n },\n [client],\n );\n\n const reportSuspicious = useCallback(\n async (eventId: string) => {\n return client.loginActivity.reportSuspicious(eventId);\n },\n [client],\n );\n\n return {\n events,\n total,\n hasMore,\n isLoading,\n error,\n refresh,\n loadMore,\n filter,\n markRecognized,\n reportSuspicious,\n };\n}\n","// useOrganizations hook — organization management\n\nimport type {\n AcceptInvitationRequest,\n AuthError,\n CreateOrganizationRequest,\n DeclineInvitationRequest,\n InviteMemberRequest,\n ListInvitationsRequest,\n ListMembersRequest,\n Organization,\n UpdateMemberRequest,\n UpdateOrganizationRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useOrganizations() {\n const { client } = useAuthContext();\n\n const [organizations, setOrganizations] = useState<Organization[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.organizations.list();\n setOrganizations(response.data);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const create = useCallback(\n async (data: CreateOrganizationRequest) => {\n const org = await client.organizations.create(data);\n await refresh();\n return org;\n },\n [client, refresh],\n );\n\n const update = useCallback(\n async (orgId: string, data: UpdateOrganizationRequest) => {\n const org = await client.organizations.update(orgId, data);\n await refresh();\n return org;\n },\n [client, refresh],\n );\n\n const deleteOrg = useCallback(\n async (orgId: string) => {\n await client.organizations.delete(orgId);\n await refresh();\n },\n [client, refresh],\n );\n\n const listMembers = useCallback(\n async (orgId: string, options?: ListMembersRequest) => {\n return client.organizations.listMembers(orgId, options);\n },\n [client],\n );\n\n const updateMember = useCallback(\n async (orgId: string, userId: string, data: UpdateMemberRequest) => {\n return client.organizations.updateMember(orgId, userId, data);\n },\n [client],\n );\n\n const removeMember = useCallback(\n async (orgId: string, userId: string) => {\n await client.organizations.removeMember(orgId, userId);\n },\n [client],\n );\n\n const inviteMember = useCallback(\n async (orgId: string, data: InviteMemberRequest) => {\n return client.organizations.inviteMember(orgId, data);\n },\n [client],\n );\n\n const listInvitations = useCallback(\n async (orgId: string, options?: ListInvitationsRequest) => {\n return client.organizations.listInvitations(orgId, options);\n },\n [client],\n );\n\n const resendInvitation = useCallback(\n async (orgId: string, invitationId: string) => {\n await client.organizations.resendInvitation(orgId, invitationId);\n },\n [client],\n );\n\n const cancelInvitation = useCallback(\n async (orgId: string, invitationId: string) => {\n await client.organizations.cancelInvitation(orgId, invitationId);\n },\n [client],\n );\n\n const acceptInvitation = useCallback(\n async (data: AcceptInvitationRequest) => {\n await client.organizations.acceptInvitation(data);\n },\n [client],\n );\n\n const declineInvitation = useCallback(\n async (data: DeclineInvitationRequest) => {\n await client.organizations.declineInvitation(data);\n },\n [client],\n );\n\n const leave = useCallback(\n async (orgId: string) => {\n await client.organizations.leave(orgId);\n await refresh();\n },\n [client, refresh],\n );\n\n return {\n organizations,\n isLoading,\n error,\n refresh,\n create,\n update,\n delete: deleteOrg,\n listMembers,\n updateMember,\n removeMember,\n inviteMember,\n listInvitations,\n resendInvitation,\n cancelInvitation,\n acceptInvitation,\n declineInvitation,\n leave,\n };\n}\n","// usePhone hook — phone OTP authentication\n\nimport type { AuthError } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function usePhone() {\n const { client, setUser } = useAuthContext();\n\n const [isSending, setIsSending] = useState(false);\n const [isVerifying, setIsVerifying] = useState(false);\n const [codeSent, setCodeSent] = useState(false);\n const [expiresIn, setExpiresIn] = useState<number | null>(null);\n const [error, setError] = useState<AuthError | null>(null);\n\n const sendOTP = useCallback(\n async (phoneNumber: string) => {\n setIsSending(true);\n setError(null);\n try {\n const response = await client.phone.sendOTP({ phoneNumber });\n setCodeSent(true);\n setExpiresIn(response.expiresIn);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsSending(false);\n }\n },\n [client],\n );\n\n const verify = useCallback(\n async (phoneNumber: string, code: string) => {\n setIsVerifying(true);\n setError(null);\n try {\n const response = await client.phone.verify({ phoneNumber, code });\n setUser(response.user);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsVerifying(false);\n }\n },\n [client, setUser],\n );\n\n const signIn = useCallback(\n async (phoneNumber: string, password: string) => {\n setIsVerifying(true);\n setError(null);\n try {\n const response = await client.phone.signIn({ phoneNumber, password });\n setUser(response.user);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsVerifying(false);\n }\n },\n [client, setUser],\n );\n\n return {\n isSending,\n isVerifying,\n codeSent,\n expiresIn,\n error,\n sendOTP,\n verify,\n signIn,\n };\n}\n","// useSession hook — current session state\n\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useSession() {\n const { user, session, isAuthenticated, isLoading } = useAuthContext();\n\n return {\n user,\n session,\n isAuthenticated,\n isLoading,\n };\n}\n","// useSessions hook — session management with multi-session support\n\nimport type {\n AuthError,\n DeviceSession,\n RevokeAllSessionsOptions,\n Session,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useSessions() {\n const { client, session, setUser } = useAuthContext();\n\n const [sessions, setSessions] = useState<Session[]>([]);\n const [deviceSessions, setDeviceSessions] = useState<DeviceSession[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const [sessionsResponse, deviceSessionsResponse] = await Promise.all([\n client.sessions.list(),\n client.sessions.listDeviceSessions(),\n ]);\n setSessions(sessionsResponse.data);\n setDeviceSessions(deviceSessionsResponse);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const revokeSession = useCallback(\n async (id: string) => {\n await client.sessions.revoke(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const revokeAllSessions = useCallback(\n async (options?: RevokeAllSessionsOptions) => {\n await client.sessions.revokeAll(options);\n await refresh();\n },\n [client, refresh],\n );\n\n const switchAccount = useCallback(\n async (sessionToken: string) => {\n const response = await client.sessions.setActive({ sessionToken });\n setUser(response.user);\n },\n [client, setUser],\n );\n\n const revokeDeviceSession = useCallback(\n async (sessionToken: string) => {\n await client.sessions.revokeDeviceSession({ sessionToken });\n await refresh();\n },\n [client, refresh],\n );\n\n return {\n session,\n sessions,\n deviceSessions,\n isLoading,\n error,\n refresh,\n revokeSession,\n revokeAllSessions,\n switchAccount,\n revokeDeviceSession,\n };\n}\n","// useUser hook — profile, 2FA, OAuth, and phone management\n\nimport type { AuthError, ConnectOAuthRequest, UserUpdate } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useUser() {\n const { client, user, setUser } = useAuthContext();\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const updateProfile = useCallback(\n async (data: UserUpdate) => {\n setIsLoading(true);\n setError(null);\n try {\n const updated = await client.users.update(data);\n setUser(updated);\n return updated;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client, setUser],\n );\n\n const changePassword = useCallback(\n async (currentPassword: string, newPassword: string) => {\n await client.users.changePassword({ currentPassword, newPassword });\n },\n [client],\n );\n\n const setupTwoFactor = useCallback(async () => {\n return client.users.setupTwoFactor();\n }, [client]);\n\n const verifyTwoFactorSetup = useCallback(\n async (code: string) => {\n await client.users.verifyTwoFactorSetup({ code });\n },\n [client],\n );\n\n const disableTwoFactor = useCallback(\n async (password: string) => {\n await client.users.disableTwoFactor({ password });\n },\n [client],\n );\n\n const deleteAccount = useCallback(\n async (password: string, reason?: string) => {\n await client.users.deleteAccount({ password, reason });\n setUser(null);\n },\n [client, setUser],\n );\n\n const listConnectedProviders = useCallback(async () => {\n return client.users.listConnectedProviders();\n }, [client]);\n\n const connectOAuthProvider = useCallback(\n async (data: ConnectOAuthRequest) => {\n return client.users.connectOAuthProvider(data);\n },\n [client],\n );\n\n const disconnectOAuthProvider = useCallback(\n async (provider: string) => {\n await client.users.disconnectOAuthProvider(provider);\n },\n [client],\n );\n\n const addPhoneNumber = useCallback(\n async (phoneNumber: string) => {\n await client.users.addPhoneNumber({ phoneNumber });\n },\n [client],\n );\n\n const verifyPhoneNumber = useCallback(\n async (code: string) => {\n await client.users.verifyPhoneNumber({ code });\n },\n [client],\n );\n\n const removePhoneNumber = useCallback(\n async (password: string) => {\n await client.users.removePhoneNumber({ password });\n },\n [client],\n );\n\n return {\n user,\n isLoading,\n error,\n updateProfile,\n changePassword,\n setupTwoFactor,\n verifyTwoFactorSetup,\n disableTwoFactor,\n deleteAccount,\n listConnectedProviders,\n connectOAuthProvider,\n disconnectOAuthProvider,\n addPhoneNumber,\n verifyPhoneNumber,\n removePhoneNumber,\n };\n}\n","export function getInitials(name: string): string {\n return name\n .split(\" \")\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n","\"use client\";\n\nimport type { User } from \"@atzentis/auth-sdk\";\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useSessions } from \"../../hooks/use-sessions\";\nimport type { AccountSwitcherProps } from \"../../types/components\";\n\nexport function AccountSwitcher({\n showAddAccount = false,\n onSwitch,\n onAddAccount,\n maxAccounts = 5,\n className,\n}: AccountSwitcherProps) {\n const { deviceSessions, switchAccount, isLoading, refresh } = useSessions();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const handleSwitch = useCallback(\n async (sessionToken: string, user: User) => {\n await switchAccount(sessionToken);\n onSwitch?.(user);\n },\n [switchAccount, onSwitch],\n );\n\n const visibleSessions = deviceSessions.slice(0, maxAccounts);\n const activeSession = deviceSessions.find((s) => s.isActive);\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" disabled={isLoading}>\n {activeSession ? activeSession.user.name : localization.SELECT_ACCOUNT}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {visibleSessions.map((session) => (\n <DropdownMenuItem\n key={session.sessionToken}\n onClick={() => handleSwitch(session.sessionToken, session.user)}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-gray-200 text-xs font-medium\">\n {session.user.avatar ? (\n <img src={session.user.avatar} alt=\"\" className=\"h-8 w-8 rounded-full\" />\n ) : (\n getInitials(session.user.name)\n )}\n </span>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{session.user.name}</span>\n <span className=\"text-xs text-gray-500\">{session.user.email}</span>\n </div>\n {session.isActive && <span className=\"ml-auto text-sm\">{\"\\u2713\"}</span>}\n </div>\n </DropdownMenuItem>\n ))}\n\n {showAddAccount && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onAddAccount}>{localization.ADD_ACCOUNT}</DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport { useSession } from \"../../hooks/use-session\";\nimport type { SessionGuardProps } from \"../../types/components\";\n\nexport function SessionGuard({\n children,\n fallback,\n loadingFallback = null,\n freshRequired = false,\n freshThreshold = 300,\n requiredRole,\n className,\n}: SessionGuardProps) {\n const { user, session, isAuthenticated, isLoading } = useSession();\n\n if (isLoading) {\n return className ? <div className={className}>{loadingFallback}</div> : <>{loadingFallback}</>;\n }\n\n if (!isAuthenticated) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n\n if (freshRequired && session) {\n const sessionAge = (Date.now() - new Date(session.createdAt).getTime()) / 1000;\n if (sessionAge > freshThreshold) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n }\n\n if (requiredRole && user) {\n const userRole = (user as unknown as Record<string, unknown>).role as string | undefined;\n if (userRole !== requiredRole) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n }\n\n return className ? <div className={className}>{children}</div> : <>{children}</>;\n}\n","\"use client\";\n\nimport type { Device } from \"@atzentis/auth-sdk\";\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useDevices } from \"../../hooks/use-devices\";\nimport type { DeviceListProps } from \"../../types/components\";\n\nconst DEFAULT_DEVICE_ICONS: Record<string, string> = {\n mobile: \"\\u{1F4F1}\",\n desktop: \"\\u{1F4BB}\",\n tablet: \"\\u{1F4DF}\",\n};\n\nexport function DeviceList({\n showTrustToggle = false,\n showRemoveAction = false,\n onDeviceTrusted,\n onDeviceUntrusted,\n onDeviceRemoved,\n renderDeviceIcon,\n className,\n}: DeviceListProps) {\n const { devices, isLoading, error, refresh, trustDevice, untrustDevice, removeDevice } =\n useDevices();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const handleTrustToggle = useCallback(\n async (device: Device) => {\n if (device.isTrusted) {\n await untrustDevice(device.id);\n onDeviceUntrusted?.(device);\n } else {\n await trustDevice(device.id);\n onDeviceTrusted?.(device);\n }\n },\n [trustDevice, untrustDevice, onDeviceTrusted, onDeviceUntrusted],\n );\n\n const handleRemove = useCallback(\n async (device: Device) => {\n await removeDevice(device.id);\n onDeviceRemoved?.(device);\n },\n [removeDevice, onDeviceRemoved],\n );\n\n if (isLoading && devices.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.LOADING_DEVICES}</div>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-red-600\">{error.message}</div>\n </Card>\n );\n }\n\n if (devices.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.NO_DEVICES}</div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {devices.map((device) => (\n <div\n key={device.id}\n className=\"flex items-start justify-between gap-4 rounded border p-4\"\n >\n <div className=\"flex items-start gap-3\">\n <span className=\"text-2xl\">\n {renderDeviceIcon\n ? renderDeviceIcon(device)\n : (DEFAULT_DEVICE_ICONS[device.deviceType] ?? \"\\u{1F4BB}\")}\n </span>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{device.name}</span>\n {device.isCurrent && (\n <span className=\"rounded bg-blue-100 px-2 py-0.5 text-xs text-blue-700\">\n {localization.CURRENT_DEVICE}\n </span>\n )}\n </div>\n <p className=\"text-sm text-gray-500\">\n {device.browser} · {device.os}\n </p>\n {(device.lastCity || device.lastCountry) && (\n <p className=\"text-sm text-gray-500\">\n {[device.lastCity, device.lastCountry].filter(Boolean).join(\", \")}\n </p>\n )}\n <p className=\"text-xs text-gray-400\">\n {localization.LAST_USED} {device.lastUsedAt} · {localization.IP_LABEL}{\" \"}\n {device.lastIp}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {showTrustToggle && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleTrustToggle(device)}\n >\n {device.isTrusted ? localization.UNTRUST_DEVICE : localization.TRUST_DEVICE}\n </Button>\n )}\n {showRemoveAction && (\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n disabled={device.isCurrent}\n onClick={() => handleRemove(device)}\n >\n {localization.REMOVE}\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useSession } from \"../../hooks/use-session\";\nimport type { LoadingBoundaryProps } from \"../../types/components\";\n\nexport function LoadingBoundary({\n children,\n spinner = <div>Loading...</div>,\n delay = 0,\n className,\n}: LoadingBoundaryProps) {\n const { isLoading } = useSession();\n const [showSpinner, setShowSpinner] = useState(delay === 0 && isLoading);\n\n useEffect(() => {\n if (!isLoading) {\n setShowSpinner(false);\n return;\n }\n\n if (delay === 0) {\n setShowSpinner(true);\n return;\n }\n\n const timer = setTimeout(() => {\n setShowSpinner(true);\n }, delay);\n\n return () => clearTimeout(timer);\n }, [isLoading, delay]);\n\n if (isLoading && showSpinner) {\n return className ? <div className={className}>{spinner}</div> : <>{spinner}</>;\n }\n\n if (isLoading) {\n return null;\n }\n\n return <>{children}</>;\n}\n","\"use client\";\n\nimport { Button } from \"@atzentis/ui-shadcn\";\n\nexport interface SubmitButtonProps {\n loading: boolean;\n loadingLabel: string;\n actionLabel: string;\n className?: string;\n}\n\nexport function SubmitButton({ loading, loadingLabel, actionLabel, className }: SubmitButtonProps) {\n return (\n <Button type=\"submit\" disabled={loading} className={className ?? \"w-full\"}>\n {loading ? loadingLabel : actionLabel}\n </Button>\n );\n}\n","export type RiskLevel = \"low\" | \"medium\" | \"high\";\n\nexport function getRiskLevel(score: number): RiskLevel {\n if (score < 30) return \"low\";\n if (score < 60) return \"medium\";\n return \"high\";\n}\n\nexport const RISK_COLORS: Record<RiskLevel, string> = {\n low: \"text-green-600 bg-green-50\",\n medium: \"text-yellow-600 bg-yellow-50\",\n high: \"text-red-600 bg-red-50\",\n};\n","\"use client\";\n\nimport type { LoginEvent } from \"@atzentis/auth-sdk\";\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { RISK_COLORS, getRiskLevel } from \"../../helpers/risk-utils\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useLoginActivity } from \"../../hooks/use-login-activity\";\nimport type { LoginActivityFeedProps } from \"../../types/components\";\n\nexport function LoginActivityFeed({\n limit = 20,\n showRiskBadge = false,\n showReportActions = false,\n filterByStatus,\n onSuspiciousReported,\n className,\n}: LoginActivityFeedProps) {\n const {\n events,\n hasMore,\n isLoading,\n error,\n refresh,\n loadMore,\n filter,\n markRecognized,\n reportSuspicious,\n } = useLoginActivity({ limit });\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n if (filterByStatus) {\n filter({ status: filterByStatus, limit });\n }\n refresh();\n }, [refresh, filter, filterByStatus, limit]);\n\n const handleMarkRecognized = useCallback(\n async (event: LoginEvent) => {\n await markRecognized(event.id);\n },\n [markRecognized],\n );\n\n const handleReportSuspicious = useCallback(\n async (event: LoginEvent) => {\n await reportSuspicious(event.id);\n onSuspiciousReported?.(event);\n },\n [reportSuspicious, onSuspiciousReported],\n );\n\n if (isLoading && events.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.LOADING_ACTIVITY}</div>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-red-600\">{error.message}</div>\n </Card>\n );\n }\n\n if (events.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.NO_ACTIVITY}</div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {events.map((event) => {\n const riskLevel = getRiskLevel(event.riskScore);\n return (\n <div\n key={event.id}\n className=\"flex items-start justify-between gap-4 rounded border p-4\"\n >\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{event.deviceName}</span>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600\">\n {event.status}\n </span>\n {showRiskBadge && (\n <span className={`rounded px-2 py-0.5 text-xs ${RISK_COLORS[riskLevel]}`}>\n {riskLevel}\n </span>\n )}\n </div>\n <p className=\"text-sm text-gray-500\">\n {event.method} · {event.ip}\n </p>\n {(event.city || event.country) && (\n <p className=\"text-sm text-gray-500\">\n {[event.city, event.country].filter(Boolean).join(\", \")}\n </p>\n )}\n <p className=\"text-xs text-gray-400\">{event.createdAt}</p>\n </div>\n\n {showReportActions && (\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleMarkRecognized(event)}\n >\n {localization.MARK_RECOGNIZED}\n </Button>\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => handleReportSuspicious(event)}\n >\n {localization.REPORT_SUSPICIOUS}\n </Button>\n </div>\n )}\n </div>\n );\n })}\n\n {hasMore && (\n <div className=\"text-center\">\n <Button type=\"button\" variant=\"outline\" disabled={isLoading} onClick={loadMore}>\n {isLoading ? localization.LOADING : localization.LOAD_MORE}\n </Button>\n </div>\n )}\n </div>\n </Card>\n );\n}\n","import { AuthError, AuthErrorCode } from \"@atzentis/auth-sdk\";\n\n/**\n * Safely converts an unknown caught value to AuthError.\n * If the value is already an AuthError, returns it directly.\n * Otherwise wraps the message in a new AuthError.\n */\nexport function toAuthError(error: unknown): AuthError {\n if (error instanceof AuthError) return error;\n const message = error instanceof Error ? error.message : String(error);\n return new AuthError({\n code: AuthErrorCode.NetworkError,\n message,\n statusCode: 0,\n });\n}\n","import { z } from \"zod\";\n\n// Credential mode: email-or-username + password\nexport const credentialLoginSchema = z.object({\n identity: z.string().min(1, \"Email or username is required\"),\n password: z.string().min(1, \"Password is required\"),\n captchaToken: z.string().optional(),\n});\nexport type CredentialLoginFormData = z.infer<typeof credentialLoginSchema>;\n\n// Phone mode: phone number + OTP code\nexport const phoneLoginSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n});\nexport type PhoneLoginFormData = z.infer<typeof phoneLoginSchema>;\n\nexport const otpVerifySchema = z.object({\n code: z.string().length(6, \"Code must be 6 digits\"),\n});\nexport type OtpVerifyFormData = z.infer<typeof otpVerifySchema>;\n","export function isEmail(value: string): boolean {\n return value.includes(\"@\");\n}\n","\"use client\";\n\nimport type { OAuthProvider } from \"@atzentis/auth-sdk\";\nimport { Button } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useState } from \"react\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport type { OAuthButtonProps } from \"../../types/components\";\n\nconst PROVIDER_NAMES: Record<OAuthProvider, string> = {\n google: \"Google\",\n github: \"GitHub\",\n apple: \"Apple\",\n microsoft: \"Microsoft\",\n atzentis: \"Atzentis\",\n};\n\nexport function OAuthButton({\n provider,\n redirectUri,\n state,\n variant = \"outline\",\n size = \"md\",\n className,\n}: OAuthButtonProps) {\n const { getOAuthUrl } = useAuth();\n const { localization } = useAuthLocalization();\n const [isLoading, setIsLoading] = useState(false);\n\n const sizeMap = {\n sm: \"sm\" as const,\n md: \"default\" as const,\n lg: \"lg\" as const,\n };\n\n const providerName = PROVIDER_NAMES[provider];\n\n const handleClick = useCallback(async () => {\n setIsLoading(true);\n try {\n const url = await getOAuthUrl({ provider, redirectUri, state: state ?? \"\" });\n window.location.href = url;\n } catch {\n setIsLoading(false);\n }\n }, [getOAuthUrl, provider, redirectUri, state]);\n\n return (\n <Button\n type=\"button\"\n variant={variant === \"filled\" ? \"default\" : \"outline\"}\n size={sizeMap[size]}\n disabled={isLoading}\n onClick={handleClick}\n aria-label={`${localization.SIGN_IN_WITH} ${providerName}`}\n className={className}\n >\n {isLoading ? localization.REDIRECTING : `${localization.CONTINUE_WITH} ${providerName}`}\n </Button>\n );\n}\n","import { z } from \"zod\";\n\nexport const phoneNumberSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n});\nexport type PhoneNumberFormData = z.infer<typeof phoneNumberSchema>;\n\nexport const otpVerifySchema = z.object({\n code: z.string().length(6, \"Code must be 6 digits\"),\n});\nexport type OtpVerifyFormData = z.infer<typeof otpVerifySchema>;\n\nexport const phonePasswordSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n password: z.string().min(1, \"Password is required\"),\n});\nexport type PhonePasswordFormData = z.infer<typeof phonePasswordSchema>;\n","export interface CountryCode {\n code: string;\n country: string;\n name: string;\n flag: string;\n}\n\nexport const COUNTRY_CODES: CountryCode[] = [\n { code: \"+30\", country: \"GR\", name: \"Greece\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n { code: \"+49\", country: \"DE\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"+1\", country: \"US\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"+44\", country: \"GB\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"+33\", country: \"FR\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"+39\", country: \"IT\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"+34\", country: \"ES\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"+31\", country: \"NL\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"+43\", country: \"AT\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"+41\", country: \"CH\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"+357\", country: \"CY\", name: \"Cyprus\", flag: \"\\u{1F1E8}\\u{1F1FE}\" },\n { code: \"+90\", country: \"TR\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n];\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput, FormSelect, OTPInput } from \"@atzentis/ui-shared\";\nimport type { FormSelectOption } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../helpers/to-auth-error\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { usePhone } from \"../../hooks/use-phone\";\nimport { getLocalizedError } from \"../../localization\";\nimport type { OtpVerifyFormData, PhoneNumberFormData } from \"../../schemas/phone-login-schema\";\nimport { otpVerifySchema, phoneNumberSchema } from \"../../schemas/phone-login-schema\";\nimport type { PhoneLoginFormProps } from \"../../types/components\";\nimport { COUNTRY_CODES } from \"../shared/country-codes\";\nimport { SubmitButton } from \"../shared/submit-button\";\n\nexport function PhoneLoginForm({\n onSuccess,\n onError,\n allowedCountryCodes = [\"+30\", \"+49\"],\n showPasswordFallback = false,\n className,\n}: PhoneLoginFormProps) {\n const { sendOTP, verify, signIn, isSending, isVerifying, expiresIn } = usePhone();\n const { localization, localizeErrors } = useAuthLocalization();\n const [step, setStep] = useState<\"phone\" | \"otp\" | \"password\">(\"phone\");\n const [formError, setFormError] = useState<string | null>(null);\n const [fullPhoneNumber, setFullPhoneNumber] = useState(\"\");\n\n const filteredCountryCodes = useMemo(\n () => COUNTRY_CODES.filter((c) => allowedCountryCodes.includes(c.code)),\n [allowedCountryCodes],\n );\n\n const phoneForm = useForm<PhoneNumberFormData>({\n resolver: zodResolver(phoneNumberSchema),\n defaultValues: {\n countryCode: filteredCountryCodes[0]?.code ?? \"+30\",\n phoneNumber: \"\",\n },\n });\n\n const otpForm = useForm<OtpVerifyFormData>({\n resolver: zodResolver(otpVerifySchema),\n defaultValues: { code: \"\" },\n });\n\n const [passwordValue, setPasswordValue] = useState(\"\");\n\n const countryCodeOptions: FormSelectOption[] = filteredCountryCodes.map((c) => ({\n value: c.code,\n label: `${c.flag} ${c.name} (${c.code})`,\n }));\n\n const handlePhoneSubmit = useCallback(\n async (data: PhoneNumberFormData) => {\n setFormError(null);\n const phone = `${data.countryCode}${data.phoneNumber}`;\n setFullPhoneNumber(phone);\n try {\n await sendOTP(phone);\n setStep(\"otp\");\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [sendOTP, onError, localization, localizeErrors],\n );\n\n const handleOtpSubmit = useCallback(\n async (data: OtpVerifyFormData) => {\n setFormError(null);\n try {\n const response = await verify(fullPhoneNumber, data.code);\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [verify, fullPhoneNumber, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleOtpComplete = useCallback(\n (code: string) => {\n otpForm.setValue(\"code\", code);\n otpForm.handleSubmit(handleOtpSubmit)();\n },\n [otpForm, handleOtpSubmit],\n );\n\n const handlePasswordSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(null);\n try {\n const response = await signIn(fullPhoneNumber, passwordValue);\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [signIn, fullPhoneNumber, passwordValue, onSuccess, onError, localization, localizeErrors],\n );\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {step === \"phone\" && (\n <form onSubmit={phoneForm.handleSubmit(handlePhoneSubmit)} className=\"space-y-4\">\n <FormSelect\n label={localization.COUNTRY_CODE}\n options={countryCodeOptions}\n value={phoneForm.watch(\"countryCode\")}\n onValueChange={(value) => phoneForm.setValue(\"countryCode\", value)}\n />\n\n <FormInput\n label={localization.PHONE_NUMBER_PLACEHOLDER}\n id=\"phone-number\"\n type=\"tel\"\n error={phoneForm.formState.errors.phoneNumber?.message}\n {...phoneForm.register(\"phoneNumber\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSending}\n loadingLabel={localization.SENDING_VERIFICATION_CODE}\n actionLabel={localization.SEND_VERIFICATION_CODE}\n />\n </form>\n )}\n\n {step === \"otp\" && (\n <form onSubmit={otpForm.handleSubmit(handleOtpSubmit)} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.VERIFICATION_CODE_LABEL}\n <OTPInput length={6} onComplete={handleOtpComplete} disabled={isVerifying} />\n </label>\n\n {expiresIn !== null && (\n <p className=\"text-sm text-gray-500\">\n {localization.CODE_EXPIRES_IN} {expiresIn}s\n </p>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isVerifying}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n {showPasswordFallback && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={() => setStep(\"password\")}\n >\n {localization.USE_PASSWORD_INSTEAD}\n </Button>\n )}\n </form>\n )}\n\n {step === \"password\" && (\n <form onSubmit={handlePasswordSubmit} className=\"space-y-4\">\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"phone-password\"\n value={passwordValue}\n onChange={(e) => setPasswordValue(e.target.value)}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isVerifying}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_IN}\n />\n </form>\n )}\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../helpers/to-auth-error\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../localization\";\nimport type { CredentialLoginFormData } from \"../../schemas/login-schema\";\nimport { credentialLoginSchema } from \"../../schemas/login-schema\";\nimport type { LoginFormProps } from \"../../types/components\";\nimport { SubmitButton } from \"../shared/submit-button\";\nimport { isEmail } from \"../shared/utils\";\nimport { OAuthButton } from \"./oauth-button\";\nimport { PhoneLoginForm } from \"./phone-login-form\";\n\nexport function LoginForm({\n onSuccess,\n onError,\n enablePhone = false,\n enableForgotPassword = false,\n onForgotPasswordClick,\n className,\n ...oauthProps\n}: LoginFormProps) {\n const oauthProviders = \"oauthProviders\" in oauthProps ? oauthProps.oauthProviders : undefined;\n const oauthRedirectUri = \"oauthRedirectUri\" in oauthProps ? oauthProps.oauthRedirectUri : \"\";\n\n const { login, loginWithUsername } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [mode, setMode] = useState<\"credential\" | \"phone\">(\"credential\");\n const [formError, setFormError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n } = useForm<CredentialLoginFormData>({\n resolver: zodResolver(credentialLoginSchema),\n defaultValues: { identity: \"\", password: \"\" },\n });\n\n const identityValue = watch(\"identity\");\n\n const onSubmit = useCallback(\n async (data: CredentialLoginFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n if (isEmail(data.identity)) {\n const response = await login({\n email: data.identity,\n password: data.password,\n captchaToken: data.captchaToken,\n });\n onSuccess(response.user);\n } else {\n const response = await loginWithUsername({\n username: data.identity,\n password: data.password,\n captchaToken: data.captchaToken,\n });\n onSuccess(response.user);\n }\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [login, loginWithUsername, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleSwitchToPhone = useCallback(() => {\n setMode(\"phone\");\n setFormError(null);\n }, []);\n\n const handleSwitchToCredential = useCallback(() => {\n setMode(\"credential\");\n setFormError(null);\n }, []);\n\n if (mode === \"phone\") {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <PhoneLoginForm onSuccess={onSuccess} onError={onError} />\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={handleSwitchToCredential}\n >\n {localization.USE_EMAIL_INSTEAD}\n </Button>\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.SIGN_IN_USERNAME_PLACEHOLDER}\n id=\"login-identity\"\n type=\"text\"\n autoComplete=\"username\"\n error={errors.identity?.message}\n {...register(\"identity\")}\n />\n\n {identityValue && (\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"login-password\"\n autoComplete=\"current-password\"\n error={errors.password?.message}\n {...register(\"password\")}\n />\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_IN}\n />\n\n <div className=\"flex items-center justify-between text-sm\">\n {enableForgotPassword && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto\"\n onClick={onForgotPasswordClick}\n >\n {localization.FORGOT_PASSWORD_LINK}\n </Button>\n )}\n {enablePhone && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto\"\n onClick={handleSwitchToPhone}\n >\n {localization.USE_PHONE_INSTEAD}\n </Button>\n )}\n </div>\n\n {oauthProviders && oauthProviders.length > 0 && (\n <>\n <div className=\"relative flex items-center py-2\">\n <div className=\"flex-grow border-t border-gray-300\" />\n <span className=\"mx-4 text-sm text-gray-500\">{localization.OR_CONTINUE_WITH}</span>\n <div className=\"flex-grow border-t border-gray-300\" />\n </div>\n <div className=\"space-y-2\">\n {oauthProviders.map((provider) => (\n <OAuthButton key={provider} provider={provider} redirectUri={oauthRedirectUri} />\n ))}\n </div>\n </>\n )}\n </form>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const magicLinkSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n});\nexport type MagicLinkFormData = z.infer<typeof magicLinkSchema>;\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../helpers/to-auth-error\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../localization\";\nimport type { MagicLinkFormData } from \"../../schemas/magic-link-schema\";\nimport { magicLinkSchema } from \"../../schemas/magic-link-schema\";\nimport type { MagicLinkFormProps } from \"../../types/components\";\nimport { SubmitButton } from \"../shared/submit-button\";\n\nfunction maskEmail(email: string): string {\n const [local, domain] = email.split(\"@\");\n if (!local || !domain) return email;\n const masked = local.length <= 2 ? `${local[0]}***` : `${local[0]}***${local[local.length - 1]}`;\n return `${masked}@${domain}`;\n}\n\nexport function MagicLinkForm({ redirectUrl, onSuccess, onError, className }: MagicLinkFormProps) {\n const { sendMagicLink } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [sent, setSent] = useState(false);\n const [sentEmail, setSentEmail] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n getValues,\n } = useForm<MagicLinkFormData>({\n resolver: zodResolver(magicLinkSchema),\n defaultValues: { email: \"\" },\n });\n\n const onSubmit = useCallback(\n async (data: MagicLinkFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendMagicLink({ email: data.email, redirectUrl });\n setSent(true);\n setSentEmail(data.email);\n onSuccess?.();\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [sendMagicLink, redirectUrl, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleResend = useCallback(async () => {\n const email = getValues(\"email\");\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendMagicLink({ email, redirectUrl });\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [sendMagicLink, redirectUrl, getValues, localization, localizeErrors]);\n\n if (sent) {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4 text-center\">\n <p className=\"text-sm\">\n {localization.MAGIC_LINK_EMAIL} <strong>{maskEmail(sentEmail)}</strong>\n </p>\n <p className=\"text-sm text-gray-500\">{localization.MAGIC_LINK_HINT}</p>\n <Button type=\"button\" variant=\"outline\" disabled={isSubmitting} onClick={handleResend}>\n {isSubmitting ? localization.RESENDING : localization.RESEND}\n </Button>\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.EMAIL}\n id=\"magic-link-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n {...register(\"email\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SENDING}\n actionLabel={localization.MAGIC_LINK_ACTION}\n />\n </form>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const signupSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n name: z.string().min(1, \"Name is required\"),\n username: z.string().optional(),\n phoneNumber: z.string().optional(),\n organizationName: z.string().optional(),\n acceptTerms: z.boolean(),\n captchaToken: z.string().optional(),\n});\nexport type SignupFormData = z.infer<typeof signupSchema>;\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../helpers/to-auth-error\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../localization\";\nimport type { SignupFormData } from \"../../schemas/signup-schema\";\nimport { signupSchema } from \"../../schemas/signup-schema\";\nimport type { SignupFormProps } from \"../../types/components\";\nimport { SubmitButton } from \"../shared/submit-button\";\n\nexport function SignupForm({\n onSuccess,\n onError,\n showUsernameField = false,\n showPhoneField = false,\n organizationName,\n acceptTermsRequired = false,\n onLoginClick,\n className,\n}: SignupFormProps) {\n const { signup } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [formError, setFormError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n } = useForm<SignupFormData>({\n resolver: zodResolver(\n acceptTermsRequired\n ? signupSchema.refine((data) => data.acceptTerms === true, {\n message: localization.ACCEPT_TERMS_ERROR,\n path: [\"acceptTerms\"],\n })\n : signupSchema,\n ),\n defaultValues: {\n email: \"\",\n password: \"\",\n name: \"\",\n username: \"\",\n phoneNumber: \"\",\n organizationName: organizationName ?? \"\",\n acceptTerms: false,\n },\n });\n\n const onSubmit = useCallback(\n async (data: SignupFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n const response = await signup({\n email: data.email,\n password: data.password,\n name: data.name,\n username: data.username,\n organizationName: data.organizationName,\n acceptTerms: data.acceptTerms,\n });\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [signup, onSuccess, onError, localization, localizeErrors],\n );\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.NAME}\n id=\"signup-name\"\n type=\"text\"\n autoComplete=\"name\"\n error={errors.name?.message}\n {...register(\"name\")}\n />\n\n <FormInput\n label={localization.EMAIL}\n id=\"signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n {...register(\"email\")}\n />\n\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"signup-password\"\n autoComplete=\"new-password\"\n error={errors.password?.message}\n {...register(\"password\")}\n />\n\n {showUsernameField && (\n <FormInput\n label={localization.USERNAME}\n id=\"signup-username\"\n type=\"text\"\n autoComplete=\"username\"\n error={errors.username?.message}\n {...register(\"username\")}\n />\n )}\n\n {showPhoneField && (\n <FormInput\n label={localization.PHONE_NUMBER_PLACEHOLDER}\n id=\"signup-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n error={errors.phoneNumber?.message}\n {...register(\"phoneNumber\")}\n />\n )}\n\n {acceptTermsRequired && (\n <div className=\"flex items-center gap-2\">\n <input\n id=\"signup-terms\"\n type=\"checkbox\"\n aria-invalid={errors.acceptTerms ? true : undefined}\n {...register(\"acceptTerms\")}\n />\n <label htmlFor=\"signup-terms\" className=\"text-sm\">\n {localization.ACCEPT_TERMS}\n </label>\n {errors.acceptTerms && (\n <p className=\"text-sm text-red-600\">{errors.acceptTerms.message}</p>\n )}\n </div>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_UP_ACTION}\n />\n\n {onLoginClick && (\n <p className=\"text-sm text-center\">\n {localization.ALREADY_HAVE_AN_ACCOUNT}{\" \"}\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={onLoginClick}\n >\n {localization.SIGN_IN}\n </Button>\n </p>\n )}\n </form>\n </Card>\n );\n}\n","\"use client\";\n\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useEffect } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useOrganizations } from \"../../hooks/use-organizations\";\nimport type { OrganizationMenuProps } from \"../../types/components\";\n\nexport function OrganizationMenu({\n showCreateNew = false,\n currentOrgId,\n onSwitch,\n onCreateNew,\n className,\n}: OrganizationMenuProps) {\n const { organizations, isLoading, refresh } = useOrganizations();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const currentOrg = organizations.find((o) => o.id === currentOrgId);\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" disabled={isLoading}>\n {currentOrg ? (\n <span className=\"flex items-center gap-2\">\n {currentOrg.logo ? (\n <img src={currentOrg.logo} alt=\"\" className=\"h-5 w-5 rounded\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded bg-gray-200 text-xs\">\n {getInitials(currentOrg.name)}\n </span>\n )}\n {currentOrg.name}\n </span>\n ) : (\n localization.SELECT_ORGANIZATION\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {organizations.map((org) => (\n <DropdownMenuItem key={org.id} onClick={() => onSwitch?.(org)}>\n <div className=\"flex items-center gap-2\">\n {org.logo ? (\n <img src={org.logo} alt=\"\" className=\"h-5 w-5 rounded\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded bg-gray-200 text-xs\">\n {getInitials(org.name)}\n </span>\n )}\n <span>{org.name}</span>\n {org.id === currentOrgId && <span className=\"ml-auto\">{\"\\u2713\"}</span>}\n </div>\n </DropdownMenuItem>\n ))}\n\n {showCreateNew && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onCreateNew}>\n {localization.CREATE_ORGANIZATION}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useCallback } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useSession } from \"../../hooks/use-session\";\nimport type { UserMenuProps } from \"../../types/components\";\n\nexport function UserMenu({ showOrganization = false, menuItems, className }: UserMenuProps) {\n const { user } = useSession();\n const { logout } = useAuth();\n const { localization } = useAuthLocalization();\n\n const handleSignOut = useCallback(async () => {\n await logout();\n }, [logout]);\n\n if (!user) return null;\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n <span className=\"flex items-center gap-2\">\n {user.avatar ? (\n <img src={user.avatar} alt=\"\" className=\"h-8 w-8 rounded-full\" />\n ) : (\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-gray-200 text-xs font-medium\">\n {getInitials(user.name)}\n </span>\n )}\n <span className=\"text-sm font-medium\">{user.name}</span>\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>\n <div>\n <p className=\"text-sm\">{user.email}</p>\n {showOrganization && (\n <p className=\"text-xs text-gray-500\">{localization.ORGANIZATION}</p>\n )}\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {menuItems?.map((item) => (\n <DropdownMenuItem key={item.label} onClick={item.onClick}>\n {item.label}\n </DropdownMenuItem>\n ))}\n\n {menuItems && menuItems.length > 0 && <DropdownMenuSeparator />}\n\n <DropdownMenuItem onClick={handleSignOut}>{localization.SIGN_OUT}</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/auth-provider.tsx","../src/localization/error-codes.ts","../src/localization/auth-localization.ts","../src/localization/get-localized-error.ts","../src/hooks/use-auth-context.ts","../src/hooks/use-api-keys.ts","../src/hooks/use-auth.ts","../src/hooks/use-auth-localization.ts","../src/hooks/use-devices.ts","../src/hooks/use-login-activity.ts","../src/hooks/use-organizations.ts","../src/hooks/use-phone.ts","../src/hooks/use-session.ts","../src/hooks/use-sessions.ts","../src/hooks/use-user.ts","../src/helpers/initials.ts","../src/components/sessions/account-switcher.tsx","../src/components/sessions/session-guard.tsx","../src/components/auth/auth-view-paths.ts","../src/helpers/to-auth-error.ts","../src/schemas/email-otp-schema.ts","../src/components/shared/submit-button.tsx","../src/components/shared/utils.ts","../src/components/auth/forms/email-otp.tsx","../src/components/auth/forms/email-verification.tsx","../src/schemas/forgot-password-schema.ts","../src/components/auth/forms/forgot-password.tsx","../src/schemas/login-schema.ts","../src/components/auth/oauth-button.tsx","../src/schemas/phone-login-schema.ts","../src/components/shared/country-codes.ts","../src/components/auth/forms/phone-login.tsx","../src/components/auth/forms/login.tsx","../src/schemas/recover-account-schema.ts","../src/components/auth/forms/recover-account.tsx","../src/schemas/reset-password-schema.ts","../src/components/auth/forms/reset-password.tsx","../src/schemas/signup-schema.ts","../src/components/auth/forms/signup.tsx","../src/schemas/two-factor-schema.ts","../src/components/auth/forms/two-factor.tsx","../src/components/auth/auth-view.tsx","../src/schemas/magic-link-schema.ts","../src/components/auth/forms/magic-link.tsx","../src/components/devices/device-list.tsx","../src/components/shared/loading-boundary.tsx","../src/helpers/risk-utils.ts","../src/components/activity/login-activity-feed.tsx","../src/components/organizations/organization-menu.tsx","../src/components/users/user-menu.tsx"],"names":["useState","useCallback","useContext","jsx","Fragment","AuthError","Button","useEffect","jsxs","Card","z","useForm","zodResolver","FormInput","otpVerifySchema","useMemo","OTPInput","FormPasswordInput","useRef","CardHeader","CardTitle","CardDescription","CardContent","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator"],"mappings":"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","file":"index.js","sourcesContent":["// AuthProvider — React context provider for @atzentis/auth-react\n\nimport type { AuthError, User } from \"@atzentis/auth-sdk\";\nimport { AuthClient } from \"@atzentis/auth-sdk\";\nimport type { Session } from \"@atzentis/auth-sdk\";\nimport { createContext, useCallback, useMemo, useState } from \"react\";\nimport type { AuthLocalization } from \"../localization\";\nimport type { AuthContextValue, AuthProviderProps } from \"./provider.types\";\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\nexport interface LocalizationContextValue {\n overrides: AuthLocalization | null;\n localizeErrors: boolean;\n}\n\nexport const LocalizationContext = createContext<LocalizationContextValue>({\n overrides: null,\n localizeErrors: true,\n});\n\nexport function AuthProvider({\n apiKey,\n baseUrl,\n autoRefreshToken,\n refreshThreshold,\n timeout,\n collectDeviceSignals,\n onSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n children,\n initialUser,\n storage,\n localization,\n localizeErrors = true,\n}: AuthProviderProps) {\n const [client] = useState(() => {\n const handleSessionExpired = () => {\n setUser(null);\n setSession(null);\n onSessionExpired?.();\n };\n\n return new AuthClient({\n apiKey,\n baseUrl,\n timeout,\n autoRefreshToken,\n refreshThreshold,\n collectDeviceSignals,\n onSessionExpired: handleSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n storage,\n });\n });\n\n const [user, setUser] = useState<User | null>(initialUser ?? null);\n const [session, setSession] = useState<Session | null>(null);\n const [isLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const value: AuthContextValue = useMemo(\n () => ({\n client,\n user,\n session,\n isAuthenticated: user !== null,\n isLoading,\n error,\n setUser,\n setSession,\n setError,\n clearError,\n }),\n [client, user, session, isLoading, error, clearError],\n );\n\n const localizationValue = useMemo(\n () => ({ overrides: localization ?? null, localizeErrors }),\n [localization, localizeErrors],\n );\n\n return (\n <AuthContext.Provider value={value}>\n <LocalizationContext.Provider value={localizationValue}>\n {children}\n </LocalizationContext.Provider>\n </AuthContext.Provider>\n );\n}\n","// Error code defaults from @atzentis/auth-sdk\n// Keys match AuthErrorCode enum string values exactly\n\nexport const AUTH_ERROR_CODES = {\n INVALID_CREDENTIALS: \"Invalid email or password\",\n EMAIL_NOT_VERIFIED: \"Email address is not verified\",\n TWO_FACTOR_REQUIRED: \"Two-factor authentication is required\",\n INVALID_PHONE_NUMBER: \"Invalid phone number\",\n OTP_EXPIRED: \"Verification code has expired\",\n OTP_INVALID: \"Invalid verification code\",\n OTP_MAX_ATTEMPTS: \"Too many verification attempts\",\n PHONE_NUMBER_IN_USE: \"Phone number is already in use\",\n FRAUD_DETECTED: \"Suspicious activity detected\",\n USERNAME_TAKEN: \"Username is already taken\",\n USERNAME_INVALID: \"Invalid username\",\n USERNAME_RESERVED: \"This username is reserved\",\n DEVICE_NOT_FOUND: \"Device not found\",\n LOGIN_EVENT_NOT_FOUND: \"Login event not found\",\n REAUTH_REQUIRED: \"Please sign in again to continue\",\n MAX_SESSIONS_EXCEEDED: \"Maximum number of sessions exceeded\",\n CAPTCHA_REQUIRED: \"CAPTCHA verification is required\",\n CAPTCHA_INVALID: \"CAPTCHA verification failed\",\n PASSWORD_BREACHED: \"This password has been found in a data breach\",\n SESSION_EXPIRED: \"Session expired\",\n TOKEN_EXPIRED: \"Token has expired\",\n INVALID_TOKEN: \"Invalid token\",\n UNAUTHORIZED_ROLE: \"You do not have permission to perform this action\",\n ORGANIZATION_NOT_FOUND: \"Organization not found\",\n PERMISSION_DENIED: \"Permission denied\",\n RATE_LIMITED: \"Too many requests. Please try again later.\",\n NETWORK_ERROR: \"Network error. Please check your connection.\",\n TIMEOUT: \"Request timed out. Please try again.\",\n USER_NOT_FOUND: \"User not found\",\n USER_ALREADY_EXISTS: \"A user with this email already exists\",\n INVALID_EMAIL: \"Invalid email address\",\n WEAK_PASSWORD: \"Password is too weak\",\n ORG_LIMIT_EXCEEDED: \"Organization limit exceeded\",\n MEMBER_LIMIT_EXCEEDED: \"Member limit exceeded\",\n KEY_NOT_FOUND: \"API key not found\",\n KEY_REVOKED: \"API key has been revoked\",\n KEY_EXPIRED: \"API key has expired\",\n};\n","import { AUTH_ERROR_CODES } from \"./error-codes\";\n\n/**\n * Centralized localization for all @atzentis/auth-react components.\n *\n * This const object contains all default English strings.\n * The `AuthLocalization` type is derived as `Partial<typeof authLocalization>`.\n *\n * Pass a partial override to AuthProvider:\n * ```tsx\n * const de: AuthLocalization = { SIGN_IN: \"Anmelden\", ... };\n * <AuthProvider localization={de}>\n * ```\n */\nexport const authLocalization = {\n // --- General / Shared ---\n\n /** @default \"Continue\" */\n CONTINUE: \"Continue\",\n\n /** @default \"Cancel\" */\n CANCEL: \"Cancel\",\n\n /** @default \"Save\" */\n SAVE: \"Save\",\n\n /** @default \"Delete\" */\n DELETE: \"Delete\",\n\n /** @default \"Update\" */\n UPDATE: \"Update\",\n\n /** @default \"Remove\" */\n REMOVE: \"Remove\",\n\n /** @default \"Done\" */\n DONE: \"Done\",\n\n /** @default \"Go back\" */\n GO_BACK: \"Go back\",\n\n /** @default \"Loading...\" */\n LOADING: \"Loading...\",\n\n /** @default \"Load more\" */\n LOAD_MORE: \"Load more\",\n\n /** @default \"Unknown\" */\n UNKNOWN: \"Unknown\",\n\n /** @default \"Request failed\" */\n REQUEST_FAILED: \"Request failed\",\n\n /** @default \"Updated successfully\" */\n UPDATED_SUCCESSFULLY: \"Updated successfully\",\n\n // --- Sign In (LoginForm) ---\n\n /** @default \"Sign in\" */\n SIGN_IN: \"Sign in\",\n\n /** @default \"Sign in\" */\n SIGN_IN_ACTION: \"Sign in\",\n\n /** @default \"Enter your email below to sign in\" */\n SIGN_IN_DESCRIPTION: \"Enter your email below to sign in\",\n\n /** @default \"Enter your username or email to sign in\" */\n SIGN_IN_USERNAME_DESCRIPTION: \"Enter your username or email to sign in\",\n\n /** @default \"Username or email\" */\n SIGN_IN_USERNAME_PLACEHOLDER: \"Username or email\",\n\n /** @default \"Signing in...\" */\n SIGNING_IN: \"Signing in...\",\n\n /** @default \"m@example.com\" */\n EMAIL_PLACEHOLDER: \"m@example.com\",\n\n /** @default \"Password\" */\n PASSWORD_PLACEHOLDER: \"Password\",\n\n /** @default \"Forgot your password?\" */\n FORGOT_PASSWORD_LINK: \"Forgot your password?\",\n\n /** @default \"Use phone instead\" */\n USE_PHONE_INSTEAD: \"Use phone instead\",\n\n /** @default \"Use email instead\" */\n USE_EMAIL_INSTEAD: \"Use email instead\",\n\n /** @default \"Or continue with\" */\n OR_CONTINUE_WITH: \"Or continue with\",\n\n /** @default \"Sign in with\" */\n SIGN_IN_WITH: \"Sign in with\",\n\n /** @default \"Don't have an account?\" */\n DONT_HAVE_AN_ACCOUNT: \"Don't have an account?\",\n\n /** @default \"Remember me\" */\n REMEMBER_ME: \"Remember me\",\n\n // --- Sign Up (SignupForm) ---\n\n /** @default \"Sign up\" */\n SIGN_UP: \"Sign up\",\n\n /** @default \"Create account\" */\n SIGN_UP_ACTION: \"Create account\",\n\n /** @default \"Enter your information to create an account\" */\n SIGN_UP_DESCRIPTION: \"Enter your information to create an account\",\n\n /** @default \"Check your email for the verification link.\" */\n SIGN_UP_EMAIL: \"Check your email for the verification link.\",\n\n /** @default \"Name\" */\n NAME_PLACEHOLDER: \"Name\",\n\n /** @default \"Please enter your full name.\" */\n NAME_DESCRIPTION: \"Please enter your full name.\",\n\n /** @default \"Username\" */\n USERNAME_PLACEHOLDER: \"Username\",\n\n /** @default \"Username\" */\n USERNAME: \"Username\",\n\n /** @default \"Confirm password\" */\n CONFIRM_PASSWORD_PLACEHOLDER: \"Confirm password\",\n\n /** @default \"Already have an account?\" */\n ALREADY_HAVE_AN_ACCOUNT: \"Already have an account?\",\n\n /** @default \"I accept the terms and conditions\" */\n ACCEPT_TERMS: \"I accept the terms and conditions\",\n\n /** @default \"You must accept the terms\" */\n ACCEPT_TERMS_ERROR: \"You must accept the terms\",\n\n /** @default \"By continuing, you agree to the\" */\n BY_CONTINUING_YOU_AGREE: \"By continuing, you agree to the\",\n\n /** @default \"Terms of Service\" */\n TERMS_OF_SERVICE: \"Terms of Service\",\n\n /** @default \"Privacy Policy\" */\n PRIVACY_POLICY: \"Privacy Policy\",\n\n // --- Phone Login (PhoneLoginForm) ---\n\n /** @default \"Phone number\" */\n PHONE_NUMBER_PLACEHOLDER: \"Phone number\",\n\n /** @default \"Country code\" */\n COUNTRY_CODE: \"Country code\",\n\n /** @default \"Send code\" */\n SEND_VERIFICATION_CODE: \"Send code\",\n\n /** @default \"Sending code...\" */\n SENDING_VERIFICATION_CODE: \"Sending code...\",\n\n /** @default \"One-Time Password\" */\n ONE_TIME_PASSWORD: \"One-Time Password\",\n\n /** @default \"Verification code\" */\n VERIFICATION_CODE_LABEL: \"Verification code\",\n\n /** @default \"Verify\" */\n VERIFY: \"Verify\",\n\n /** @default \"Verifying...\" */\n VERIFYING: \"Verifying...\",\n\n /** @default \"Code expires in\" */\n CODE_EXPIRES_IN: \"Code expires in\",\n\n /** @default \"Resend code\" */\n RESEND_CODE: \"Resend code\",\n\n /** @default \"Sign in with password\" */\n USE_PASSWORD_INSTEAD: \"Sign in with password\",\n\n // --- OAuth ---\n\n /** @default \"Continue with\" */\n CONTINUE_WITH: \"Continue with\",\n\n /** @default \"Redirecting...\" */\n REDIRECTING: \"Redirecting...\",\n\n // --- Magic Link ---\n\n /** @default \"Magic Link\" */\n MAGIC_LINK: \"Magic Link\",\n\n /** @default \"Send magic link\" */\n MAGIC_LINK_ACTION: \"Send magic link\",\n\n /** @default \"Enter your email to receive a magic link\" */\n MAGIC_LINK_DESCRIPTION: \"Enter your email to receive a magic link\",\n\n /** @default \"We sent a magic link to\" */\n MAGIC_LINK_EMAIL: \"We sent a magic link to\",\n\n /** @default \"Check your inbox and click the link to sign in.\" */\n MAGIC_LINK_HINT: \"Check your inbox and click the link to sign in.\",\n\n /** @default \"Sending...\" */\n SENDING: \"Sending...\",\n\n /** @default \"Resend\" */\n RESEND: \"Resend\",\n\n /** @default \"Resending...\" */\n RESENDING: \"Resending...\",\n\n // --- Password Management ---\n\n /** @default \"Password\" */\n PASSWORD: \"Password\",\n\n /** @default \"New Password\" */\n NEW_PASSWORD: \"New Password\",\n\n /** @default \"Current Password\" */\n CURRENT_PASSWORD: \"Current Password\",\n\n /** @default \"Change Password\" */\n CHANGE_PASSWORD: \"Change Password\",\n\n /** @default \"Enter your current and new password\" */\n CHANGE_PASSWORD_DESCRIPTION: \"Enter your current and new password\",\n\n /** @default \"Password has been changed\" */\n CHANGE_PASSWORD_SUCCESS: \"Password has been changed\",\n\n /** @default \"Forgot Password\" */\n FORGOT_PASSWORD: \"Forgot Password\",\n\n /** @default \"Send reset link\" */\n FORGOT_PASSWORD_ACTION: \"Send reset link\",\n\n /** @default \"Enter your email to reset your password\" */\n FORGOT_PASSWORD_DESCRIPTION: \"Enter your email to reset your password\",\n\n /** @default \"Check your email for the reset link\" */\n FORGOT_PASSWORD_EMAIL: \"Check your email for the reset link\",\n\n /** @default \"Reset Password\" */\n RESET_PASSWORD: \"Reset Password\",\n\n /** @default \"Save new password\" */\n RESET_PASSWORD_ACTION: \"Save new password\",\n\n /** @default \"Password reset successfully\" */\n RESET_PASSWORD_SUCCESS: \"Password reset successfully\",\n\n /** @default \"Confirm new password\" */\n CONFIRM_NEW_PASSWORD: \"Confirm new password\",\n\n /** @default \"Set Password\" */\n SET_PASSWORD: \"Set Password\",\n\n /** @default \"Click the button to receive an email to set your password\" */\n SET_PASSWORD_DESCRIPTION: \"Click the button to receive an email to set your password\",\n\n // --- Forgot Password (P11) ---\n\n /** @default \"Check your email\" */\n CHECK_YOUR_EMAIL: \"Check your email\",\n\n /** @default \"Resend in {{seconds}}s\" */\n RESEND_IN: \"Resend in {{seconds}}s\",\n\n // --- Email Verification (P11) ---\n\n /** @default \"Email Verification\" */\n EMAIL_VERIFICATION: \"Email Verification\",\n\n /** @default \"Verify your email address\" */\n EMAIL_VERIFICATION_DESCRIPTION: \"Verify your email address\",\n\n /** @default \"Email verified successfully\" */\n EMAIL_VERIFICATION_SUCCESS: \"Email verified successfully\",\n\n /** @default \"Verifying your email...\" */\n EMAIL_VERIFICATION_CHECKING: \"Verifying your email...\",\n\n /** @default \"Resend verification email\" */\n RESEND_VERIFICATION_EMAIL: \"Resend verification email\",\n\n /** @default \"Verification email sent\" */\n VERIFICATION_EMAIL_SENT: \"Verification email sent\",\n\n // --- Email OTP (P11) ---\n\n /** @default \"Email Code Verification\" */\n EMAIL_OTP: \"Email Code Verification\",\n\n /** @default \"Enter your email to receive a verification code\" */\n EMAIL_OTP_DESCRIPTION: \"Enter your email to receive a verification code\",\n\n /** @default \"We sent a code to\" */\n EMAIL_OTP_SENT: \"We sent a code to\",\n\n /** @default \"Enter the 6-digit code\" */\n ENTER_VERIFICATION_CODE: \"Enter the 6-digit code\",\n\n // --- Account Recovery ---\n\n /** @default \"Recover Account\" */\n RECOVER_ACCOUNT: \"Recover Account\",\n\n /** @default \"Recover access to your account\" */\n RECOVER_ACCOUNT_DESCRIPTION: \"Recover access to your account\",\n\n /** @default \"Select recovery method\" */\n SELECT_RECOVERY_METHOD: \"Select recovery method\",\n\n /** @default \"Reset via email link\" */\n RESET_VIA_EMAIL: \"Reset via email link\",\n\n /** @default \"Verify with email code\" */\n VERIFY_WITH_CODE: \"Verify with email code\",\n\n /** @default \"Verify via phone\" */\n VERIFY_VIA_PHONE: \"Verify via phone\",\n\n /** @default \"Step {{current}} of {{total}}\" */\n STEP_OF: \"Step {{current}} of {{total}}\",\n\n // --- Devices & Sessions ---\n\n /** @default \"Current Session\" */\n CURRENT_SESSION: \"Current Session\",\n\n /** @default \"Current device\" */\n CURRENT_DEVICE: \"Current device\",\n\n /** @default \"Sessions\" */\n SESSIONS: \"Sessions\",\n\n /** @default \"Manage your active sessions\" */\n SESSIONS_DESCRIPTION: \"Manage your active sessions\",\n\n /** @default \"Trust\" */\n TRUST_DEVICE: \"Trust\",\n\n /** @default \"Untrust\" */\n UNTRUST_DEVICE: \"Untrust\",\n\n /** @default \"Loading devices...\" */\n LOADING_DEVICES: \"Loading devices...\",\n\n /** @default \"No devices found\" */\n NO_DEVICES: \"No devices found\",\n\n /** @default \"Last used:\" */\n LAST_USED: \"Last used:\",\n\n /** @default \"IP:\" */\n IP_LABEL: \"IP:\",\n\n /** @default \"Security\" */\n SECURITY: \"Security\",\n\n /** @default \"Session not fresh. Please sign in again.\" */\n SESSION_NOT_FRESH: \"Session not fresh. Please sign in again.\",\n\n // --- Login Activity & Risk ---\n\n /** @default \"Login Activity\" */\n LOGIN_ACTIVITY: \"Login Activity\",\n\n /** @default \"Recent login attempts\" */\n LOGIN_ACTIVITY_DESCRIPTION: \"Recent login attempts\",\n\n /** @default \"Low\" */\n RISK_LOW: \"Low\",\n\n /** @default \"Medium\" */\n RISK_MEDIUM: \"Medium\",\n\n /** @default \"High\" */\n RISK_HIGH: \"High\",\n\n /** @default \"This was me\" */\n MARK_RECOGNIZED: \"This was me\",\n\n /** @default \"Not me\" */\n REPORT_SUSPICIOUS: \"Not me\",\n\n /** @default \"Loading activity...\" */\n LOADING_ACTIVITY: \"Loading activity...\",\n\n /** @default \"No login activity found\" */\n NO_ACTIVITY: \"No login activity found\",\n\n // --- Accounts & Switching ---\n\n /** @default \"Accounts\" */\n ACCOUNTS: \"Accounts\",\n\n /** @default \"Manage signed in accounts\" */\n ACCOUNTS_DESCRIPTION: \"Manage signed in accounts\",\n\n /** @default \"Add account\" */\n ADD_ACCOUNT: \"Add account\",\n\n /** @default \"Switch Account\" */\n SWITCH_ACCOUNT: \"Switch Account\",\n\n /** @default \"Select account\" */\n SELECT_ACCOUNT: \"Select account\",\n\n /** @default \"Personal Account\" */\n PERSONAL_ACCOUNT: \"Personal Account\",\n\n /** @default \"Sign out\" */\n SIGN_OUT: \"Sign out\",\n\n // --- Organizations ---\n\n /** @default \"Organization\" */\n ORGANIZATION: \"Organization\",\n\n /** @default \"Organizations\" */\n ORGANIZATIONS: \"Organizations\",\n\n /** @default \"Manage your organizations\" */\n ORGANIZATIONS_DESCRIPTION: \"Manage your organizations\",\n\n /** @default \"Select organization\" */\n SELECT_ORGANIZATION: \"Select organization\",\n\n /** @default \"Create organization\" */\n CREATE_ORGANIZATION: \"Create organization\",\n\n /** @default \"Name\" */\n ORGANIZATION_NAME: \"Name\",\n\n /** @default \"Acme Inc.\" */\n ORGANIZATION_NAME_PLACEHOLDER: \"Acme Inc.\",\n\n /** @default \"Leave Organization\" */\n LEAVE_ORGANIZATION: \"Leave Organization\",\n\n /** @default \"Delete Organization\" */\n DELETE_ORGANIZATION: \"Delete Organization\",\n\n /** @default \"Members\" */\n MEMBERS: \"Members\",\n\n /** @default \"Invite Member\" */\n INVITE_MEMBER: \"Invite Member\",\n\n /** @default \"Remove Member\" */\n REMOVE_MEMBER: \"Remove Member\",\n\n /** @default \"Role\" */\n ROLE: \"Role\",\n\n /** @default \"Admin\" */\n ADMIN: \"Admin\",\n\n /** @default \"Member\" */\n MEMBER: \"Member\",\n\n /** @default \"Owner\" */\n OWNER: \"Owner\",\n\n // --- User Menu ---\n\n /** @default \"Settings\" */\n SETTINGS: \"Settings\",\n\n /** @default \"Account\" */\n ACCOUNT: \"Account\",\n\n /** @default \"Avatar\" */\n AVATAR: \"Avatar\",\n\n /** @default \"Click avatar to upload a custom one\" */\n AVATAR_DESCRIPTION: \"Click avatar to upload a custom one\",\n\n /** @default \"Delete Avatar\" */\n DELETE_AVATAR: \"Delete Avatar\",\n\n /** @default \"Upload Avatar\" */\n UPLOAD_AVATAR: \"Upload Avatar\",\n\n /** @default \"Email\" */\n EMAIL: \"Email\",\n\n /** @default \"Name\" */\n NAME: \"Name\",\n\n // --- Two-Factor ---\n\n /** @default \"Two-Factor\" */\n TWO_FACTOR: \"Two-Factor\",\n\n /** @default \"Two-Factor Authentication\" */\n TWO_FACTOR_PROMPT: \"Two-Factor Authentication\",\n\n /** @default \"Enter your one-time password\" */\n TWO_FACTOR_DESCRIPTION: \"Enter your one-time password\",\n\n /** @default \"Verify code\" */\n TWO_FACTOR_ACTION: \"Verify code\",\n\n /** @default \"Two-factor authentication has been enabled\" */\n TWO_FACTOR_ENABLED: \"Two-factor authentication has been enabled\",\n\n /** @default \"Two-factor authentication has been disabled\" */\n TWO_FACTOR_DISABLED: \"Two-factor authentication has been disabled\",\n\n /** @default \"Enable Two-Factor\" */\n ENABLE_TWO_FACTOR: \"Enable Two-Factor\",\n\n /** @default \"Disable Two-Factor\" */\n DISABLE_TWO_FACTOR: \"Disable Two-Factor\",\n\n /** @default \"Backup Codes\" */\n BACKUP_CODES: \"Backup Codes\",\n\n /** @default \"Save these codes in a secure place\" */\n BACKUP_CODES_DESCRIPTION: \"Save these codes in a secure place\",\n\n // --- Two-Factor (P11) ---\n\n /** @default \"Enter your 6-digit code\" */\n ENTER_TOTP_CODE: \"Enter your 6-digit code\",\n\n /** @default \"Use backup code\" */\n USE_BACKUP_CODE: \"Use backup code\",\n\n /** @default \"Use authenticator\" */\n USE_AUTHENTICATOR: \"Use authenticator\",\n\n /** @default \"Enter backup code\" */\n BACKUP_CODE_PLACEHOLDER: \"Enter backup code\",\n\n // --- Validation ---\n\n /** @default \"Passwords do not match\" */\n PASSWORDS_DO_NOT_MATCH: \"Passwords do not match\",\n\n /** @default \"Password is required\" */\n PASSWORD_REQUIRED: \"Password is required\",\n\n /** @default \"Email address is required\" */\n EMAIL_REQUIRED: \"Email address is required\",\n\n /** @default \"is required\" */\n IS_REQUIRED: \"is required\",\n\n /** @default \"is invalid\" */\n IS_INVALID: \"is invalid\",\n\n // --- Error Codes ---\n ...AUTH_ERROR_CODES,\n};\n\nexport type AuthLocalization = Partial<typeof authLocalization>;\n","import { AuthError } from \"@atzentis/auth-sdk\";\nimport type { AuthLocalization } from \"./auth-localization\";\nimport { authLocalization } from \"./auth-localization\";\n\n/**\n * Gets a localized error message from an error object.\n *\n * When `localizeErrors` is true, looks up the error code directly\n * in the localization dictionary (error codes are localization keys).\n *\n * Fallback chain:\n * 1. localization[error.code] (if AuthError and localizeErrors)\n * 2. error.message\n * 3. localization.REQUEST_FAILED\n * 4. \"Request failed\"\n */\nexport function getLocalizedError(\n error: unknown,\n localization: AuthLocalization,\n localizeErrors: boolean,\n): string {\n if (!localizeErrors) {\n if (error instanceof Error && error.message) return error.message;\n return authLocalization.REQUEST_FAILED;\n }\n\n if (error instanceof AuthError) {\n const errorCode = error.code as keyof typeof authLocalization;\n if (localization?.[errorCode]) return localization[errorCode];\n }\n\n if (error instanceof Error && error.message) return error.message;\n\n return localization?.REQUEST_FAILED ?? authLocalization.REQUEST_FAILED;\n}\n","// Internal hook to access auth context with error boundary\n\nimport { useContext } from \"react\";\nimport type { AuthContextValue } from \"../provider\";\nimport { AuthContext } from \"../provider\";\n\nexport function useAuthContext(): AuthContextValue {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuthContext must be used within AuthProvider\");\n }\n\n return context;\n}\n","// useApiKeys hook — API key management\n\nimport type {\n ApiKey,\n AuthError,\n CreateApiKeyRequest,\n UpdateApiKeyRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useApiKeys() {\n const { client } = useAuthContext();\n\n const [apiKeys, setApiKeys] = useState<ApiKey[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.apiKeys.list();\n setApiKeys(response.data);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const create = useCallback(\n async (data: CreateApiKeyRequest) => {\n const response = await client.apiKeys.create(data);\n await refresh();\n return response;\n },\n [client, refresh],\n );\n\n const get = useCallback(\n async (keyId: string) => {\n return client.apiKeys.get(keyId);\n },\n [client],\n );\n\n const update = useCallback(\n async (keyId: string, data: UpdateApiKeyRequest) => {\n const updated = await client.apiKeys.update(keyId, data);\n await refresh();\n return updated;\n },\n [client, refresh],\n );\n\n const rotate = useCallback(\n async (keyId: string) => {\n const response = await client.apiKeys.rotate(keyId);\n await refresh();\n return response;\n },\n [client, refresh],\n );\n\n const revoke = useCallback(\n async (keyId: string) => {\n await client.apiKeys.revoke(keyId);\n await refresh();\n },\n [client, refresh],\n );\n\n const validate = useCallback(\n async (keyString: string) => {\n return client.apiKeys.validate(keyString);\n },\n [client],\n );\n\n const getUsage = useCallback(\n async (keyId: string) => {\n return client.apiKeys.getUsage(keyId);\n },\n [client],\n );\n\n return {\n apiKeys,\n isLoading,\n error,\n refresh,\n create,\n get,\n update,\n rotate,\n revoke,\n validate,\n getUsage,\n };\n}\n","// useAuth hook — auth state and methods\n\nimport type {\n GetOAuthUrlRequest,\n LoginCredentials,\n RequestPasswordResetRequest,\n ResetPasswordRequest,\n SendMagicLinkRequest,\n SendVerificationEmailRequest,\n SignupData,\n UsernameLoginCredentials,\n VerifyEmailRequest,\n VerifyMagicLinkRequest,\n VerifyOAuthCodeRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useAuth() {\n const { client, user, isAuthenticated, isLoading, error, setUser, clearError } = useAuthContext();\n\n const login = useCallback(\n async (credentials: LoginCredentials) => {\n const response = await client.login(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const loginWithUsername = useCallback(\n async (credentials: UsernameLoginCredentials) => {\n const response = await client.loginWithUsername(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const signup = useCallback(\n async (data: SignupData) => {\n const response = await client.signup(data);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const logout = useCallback(async () => {\n await client.logout();\n setUser(null);\n }, [client, setUser]);\n\n const logoutAllDevices = useCallback(async () => {\n await client.logoutAllDevices();\n setUser(null);\n }, [client, setUser]);\n\n const getOAuthUrl = useCallback(\n (config: GetOAuthUrlRequest) => {\n return client.getOAuthUrl(config);\n },\n [client],\n );\n\n const verifyOAuthCode = useCallback(\n async (request: VerifyOAuthCodeRequest) => {\n const response = await client.verifyOAuthCode(request);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const sendMagicLink = useCallback(\n async (request: SendMagicLinkRequest) => {\n await client.sendMagicLink(request);\n },\n [client],\n );\n\n const verifyMagicLink = useCallback(\n async (request: VerifyMagicLinkRequest) => {\n const response = await client.verifyMagicLink(request);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const isUsernameAvailable = useCallback(\n async (username: string) => {\n return client.isUsernameAvailable(username);\n },\n [client],\n );\n\n const getAccessToken = useCallback(async () => {\n return client.getAccessToken();\n }, [client]);\n\n const refreshToken = useCallback(async () => {\n return client.refreshToken();\n }, [client]);\n\n const getAuthHeader = useCallback(async () => {\n const token = await client.getAccessToken();\n if (token) {\n return { Authorization: `Bearer ${token}` };\n }\n return {};\n }, [client]);\n\n const requestPasswordReset = useCallback(\n async (request: RequestPasswordResetRequest) => {\n await client.requestPasswordReset(request);\n },\n [client],\n );\n\n const resetPassword = useCallback(\n async (request: ResetPasswordRequest) => {\n return client.resetPassword(request);\n },\n [client],\n );\n\n const sendVerificationEmail = useCallback(\n async (request: SendVerificationEmailRequest) => {\n await client.sendVerificationEmail(request);\n },\n [client],\n );\n\n const verifyEmail = useCallback(\n async (request: VerifyEmailRequest) => {\n const response = await client.verifyEmail(request);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n return {\n user,\n isAuthenticated,\n isLoading,\n error,\n clearError,\n getAccessToken,\n getAuthHeader,\n getOAuthUrl,\n isUsernameAvailable,\n login,\n loginWithUsername,\n logout,\n logoutAllDevices,\n refreshToken,\n requestPasswordReset,\n resetPassword,\n sendMagicLink,\n sendVerificationEmail,\n signup,\n verifyEmail,\n verifyMagicLink,\n verifyOAuthCode,\n };\n}\n","import { useContext } from \"react\";\nimport type { AuthLocalization } from \"../localization\";\nimport { authLocalization } from \"../localization\";\nimport { LocalizationContext } from \"../provider\";\n\nexport interface UseAuthLocalizationResult {\n localization: Required<AuthLocalization>;\n localizeErrors: boolean;\n}\n\nexport function useAuthLocalization(): UseAuthLocalizationResult {\n const ctx = useContext(LocalizationContext);\n const localization = ctx.overrides ? { ...authLocalization, ...ctx.overrides } : authLocalization;\n return { localization, localizeErrors: ctx.localizeErrors };\n}\n","// useDevices hook — device management and trust settings\n\nimport type { AuthError, Device } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useDevices() {\n const { client } = useAuthContext();\n\n const [devices, setDevices] = useState<Device[]>([]);\n const [currentDevice, setCurrentDevice] = useState<Device | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.devices.list();\n setDevices(response.data);\n const current = response.data.find((d) => d.isCurrent) ?? null;\n setCurrentDevice(current);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const trustDevice = useCallback(\n async (id: string) => {\n await client.devices.trust(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const untrustDevice = useCallback(\n async (id: string) => {\n await client.devices.untrust(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const removeDevice = useCallback(\n async (id: string) => {\n await client.devices.remove(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const removeAllOtherDevices = useCallback(async () => {\n await client.devices.removeAllOthers();\n await refresh();\n }, [client, refresh]);\n\n return {\n devices,\n currentDevice,\n isLoading,\n error,\n refresh,\n trustDevice,\n untrustDevice,\n removeDevice,\n removeAllOtherDevices,\n };\n}\n","// useLoginActivity hook — login history with filtering and reporting\n\nimport type { AuthError, ListLoginEventsRequest, LoginEvent } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\ninterface UseLoginActivityOptions {\n limit?: number;\n}\n\nexport function useLoginActivity(options: UseLoginActivityOptions = {}) {\n const { client } = useAuthContext();\n\n const [events, setEvents] = useState<LoginEvent[]>([]);\n const [total, setTotal] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n const [filterOptions, setFilterOptions] = useState<ListLoginEventsRequest>({\n limit: options.limit ?? 50,\n offset: 0,\n });\n\n const hasMore = events.length < total;\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.loginActivity.list(filterOptions);\n setEvents(response.data);\n setTotal(response.total);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client, filterOptions]);\n\n const loadMore = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.loginActivity.list({\n ...filterOptions,\n offset: events.length,\n });\n setEvents((prev) => [...prev, ...response.data]);\n setTotal(response.total);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client, filterOptions, events.length]);\n\n const filter = useCallback(\n (newOptions: ListLoginEventsRequest) => {\n const merged = { ...filterOptions, ...newOptions, offset: 0 };\n setFilterOptions(merged);\n setEvents([]);\n setTotal(0);\n },\n [filterOptions],\n );\n\n const markRecognized = useCallback(\n async (eventId: string) => {\n await client.loginActivity.markRecognized(eventId);\n },\n [client],\n );\n\n const reportSuspicious = useCallback(\n async (eventId: string) => {\n return client.loginActivity.reportSuspicious(eventId);\n },\n [client],\n );\n\n return {\n events,\n total,\n hasMore,\n isLoading,\n error,\n refresh,\n loadMore,\n filter,\n markRecognized,\n reportSuspicious,\n };\n}\n","// useOrganizations hook — organization management\n\nimport type {\n AcceptInvitationRequest,\n AuthError,\n CreateOrganizationRequest,\n DeclineInvitationRequest,\n InviteMemberRequest,\n ListInvitationsRequest,\n ListMembersRequest,\n Organization,\n UpdateMemberRequest,\n UpdateOrganizationRequest,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useOrganizations() {\n const { client } = useAuthContext();\n\n const [organizations, setOrganizations] = useState<Organization[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await client.organizations.list();\n setOrganizations(response.data);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const create = useCallback(\n async (data: CreateOrganizationRequest) => {\n const org = await client.organizations.create(data);\n await refresh();\n return org;\n },\n [client, refresh],\n );\n\n const update = useCallback(\n async (orgId: string, data: UpdateOrganizationRequest) => {\n const org = await client.organizations.update(orgId, data);\n await refresh();\n return org;\n },\n [client, refresh],\n );\n\n const deleteOrg = useCallback(\n async (orgId: string) => {\n await client.organizations.delete(orgId);\n await refresh();\n },\n [client, refresh],\n );\n\n const listMembers = useCallback(\n async (orgId: string, options?: ListMembersRequest) => {\n return client.organizations.listMembers(orgId, options);\n },\n [client],\n );\n\n const updateMember = useCallback(\n async (orgId: string, userId: string, data: UpdateMemberRequest) => {\n return client.organizations.updateMember(orgId, userId, data);\n },\n [client],\n );\n\n const removeMember = useCallback(\n async (orgId: string, userId: string) => {\n await client.organizations.removeMember(orgId, userId);\n },\n [client],\n );\n\n const inviteMember = useCallback(\n async (orgId: string, data: InviteMemberRequest) => {\n return client.organizations.inviteMember(orgId, data);\n },\n [client],\n );\n\n const listInvitations = useCallback(\n async (orgId: string, options?: ListInvitationsRequest) => {\n return client.organizations.listInvitations(orgId, options);\n },\n [client],\n );\n\n const resendInvitation = useCallback(\n async (orgId: string, invitationId: string) => {\n await client.organizations.resendInvitation(orgId, invitationId);\n },\n [client],\n );\n\n const cancelInvitation = useCallback(\n async (orgId: string, invitationId: string) => {\n await client.organizations.cancelInvitation(orgId, invitationId);\n },\n [client],\n );\n\n const acceptInvitation = useCallback(\n async (data: AcceptInvitationRequest) => {\n await client.organizations.acceptInvitation(data);\n },\n [client],\n );\n\n const declineInvitation = useCallback(\n async (data: DeclineInvitationRequest) => {\n await client.organizations.declineInvitation(data);\n },\n [client],\n );\n\n const leave = useCallback(\n async (orgId: string) => {\n await client.organizations.leave(orgId);\n await refresh();\n },\n [client, refresh],\n );\n\n return {\n organizations,\n isLoading,\n error,\n refresh,\n create,\n update,\n delete: deleteOrg,\n listMembers,\n updateMember,\n removeMember,\n inviteMember,\n listInvitations,\n resendInvitation,\n cancelInvitation,\n acceptInvitation,\n declineInvitation,\n leave,\n };\n}\n","// usePhone hook — phone OTP authentication\n\nimport type { AuthError } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function usePhone() {\n const { client, setUser } = useAuthContext();\n\n const [isSending, setIsSending] = useState(false);\n const [isVerifying, setIsVerifying] = useState(false);\n const [codeSent, setCodeSent] = useState(false);\n const [expiresIn, setExpiresIn] = useState<number | null>(null);\n const [error, setError] = useState<AuthError | null>(null);\n\n const sendOTP = useCallback(\n async (phoneNumber: string) => {\n setIsSending(true);\n setError(null);\n try {\n const response = await client.phone.sendOTP({ phoneNumber });\n setCodeSent(true);\n setExpiresIn(response.expiresIn);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsSending(false);\n }\n },\n [client],\n );\n\n const verify = useCallback(\n async (phoneNumber: string, code: string) => {\n setIsVerifying(true);\n setError(null);\n try {\n const response = await client.phone.verify({ phoneNumber, code });\n setUser(response.user);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsVerifying(false);\n }\n },\n [client, setUser],\n );\n\n const signIn = useCallback(\n async (phoneNumber: string, password: string) => {\n setIsVerifying(true);\n setError(null);\n try {\n const response = await client.phone.signIn({ phoneNumber, password });\n setUser(response.user);\n return response;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsVerifying(false);\n }\n },\n [client, setUser],\n );\n\n return {\n isSending,\n isVerifying,\n codeSent,\n expiresIn,\n error,\n sendOTP,\n verify,\n signIn,\n };\n}\n","// useSession hook — current session state\n\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useSession() {\n const { user, session, isAuthenticated, isLoading } = useAuthContext();\n\n return {\n user,\n session,\n isAuthenticated,\n isLoading,\n };\n}\n","// useSessions hook — session management with multi-session support\n\nimport type {\n AuthError,\n DeviceSession,\n RevokeAllSessionsOptions,\n Session,\n} from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useSessions() {\n const { client, session, setUser } = useAuthContext();\n\n const [sessions, setSessions] = useState<Session[]>([]);\n const [deviceSessions, setDeviceSessions] = useState<DeviceSession[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const [sessionsResponse, deviceSessionsResponse] = await Promise.all([\n client.sessions.list(),\n client.sessions.listDeviceSessions(),\n ]);\n setSessions(sessionsResponse.data);\n setDeviceSessions(deviceSessionsResponse);\n } catch (err) {\n setError(err as AuthError);\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const revokeSession = useCallback(\n async (id: string) => {\n await client.sessions.revoke(id);\n await refresh();\n },\n [client, refresh],\n );\n\n const revokeAllSessions = useCallback(\n async (options?: RevokeAllSessionsOptions) => {\n await client.sessions.revokeAll(options);\n await refresh();\n },\n [client, refresh],\n );\n\n const switchAccount = useCallback(\n async (sessionToken: string) => {\n const response = await client.sessions.setActive({ sessionToken });\n setUser(response.user);\n },\n [client, setUser],\n );\n\n const revokeDeviceSession = useCallback(\n async (sessionToken: string) => {\n await client.sessions.revokeDeviceSession({ sessionToken });\n await refresh();\n },\n [client, refresh],\n );\n\n return {\n session,\n sessions,\n deviceSessions,\n isLoading,\n error,\n refresh,\n revokeSession,\n revokeAllSessions,\n switchAccount,\n revokeDeviceSession,\n };\n}\n","// useUser hook — profile, 2FA, OAuth, and phone management\n\nimport type { AuthError, ConnectOAuthRequest, UserUpdate } from \"@atzentis/auth-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useUser() {\n const { client, user, setUser } = useAuthContext();\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const updateProfile = useCallback(\n async (data: UserUpdate) => {\n setIsLoading(true);\n setError(null);\n try {\n const updated = await client.users.update(data);\n setUser(updated);\n return updated;\n } catch (err) {\n setError(err as AuthError);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client, setUser],\n );\n\n const changePassword = useCallback(\n async (currentPassword: string, newPassword: string) => {\n await client.users.changePassword({ currentPassword, newPassword });\n },\n [client],\n );\n\n const setupTwoFactor = useCallback(async () => {\n return client.users.setupTwoFactor();\n }, [client]);\n\n const verifyTwoFactorSetup = useCallback(\n async (code: string) => {\n await client.users.verifyTwoFactorSetup({ code });\n },\n [client],\n );\n\n const disableTwoFactor = useCallback(\n async (password: string) => {\n await client.users.disableTwoFactor({ password });\n },\n [client],\n );\n\n const deleteAccount = useCallback(\n async (password: string, reason?: string) => {\n await client.users.deleteAccount({ password, reason });\n setUser(null);\n },\n [client, setUser],\n );\n\n const listConnectedProviders = useCallback(async () => {\n return client.users.listConnectedProviders();\n }, [client]);\n\n const connectOAuthProvider = useCallback(\n async (data: ConnectOAuthRequest) => {\n return client.users.connectOAuthProvider(data);\n },\n [client],\n );\n\n const disconnectOAuthProvider = useCallback(\n async (provider: string) => {\n await client.users.disconnectOAuthProvider(provider);\n },\n [client],\n );\n\n const addPhoneNumber = useCallback(\n async (phoneNumber: string) => {\n await client.users.addPhoneNumber({ phoneNumber });\n },\n [client],\n );\n\n const verifyPhoneNumber = useCallback(\n async (code: string) => {\n await client.users.verifyPhoneNumber({ code });\n },\n [client],\n );\n\n const removePhoneNumber = useCallback(\n async (password: string) => {\n await client.users.removePhoneNumber({ password });\n },\n [client],\n );\n\n return {\n user,\n isLoading,\n error,\n updateProfile,\n changePassword,\n setupTwoFactor,\n verifyTwoFactorSetup,\n disableTwoFactor,\n deleteAccount,\n listConnectedProviders,\n connectOAuthProvider,\n disconnectOAuthProvider,\n addPhoneNumber,\n verifyPhoneNumber,\n removePhoneNumber,\n };\n}\n","export function getInitials(name: string): string {\n return name\n .split(\" \")\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n","\"use client\";\n\nimport type { User } from \"@atzentis/auth-sdk\";\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useSessions } from \"../../hooks/use-sessions\";\nimport type { AccountSwitcherProps } from \"../../types/components\";\n\nexport function AccountSwitcher({\n showAddAccount = false,\n onSwitch,\n onAddAccount,\n maxAccounts = 5,\n className,\n}: AccountSwitcherProps) {\n const { deviceSessions, switchAccount, isLoading, refresh } = useSessions();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const handleSwitch = useCallback(\n async (sessionToken: string, user: User) => {\n await switchAccount(sessionToken);\n onSwitch?.(user);\n },\n [switchAccount, onSwitch],\n );\n\n const visibleSessions = deviceSessions.slice(0, maxAccounts);\n const activeSession = deviceSessions.find((s) => s.isActive);\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" disabled={isLoading}>\n {activeSession ? activeSession.user.name : localization.SELECT_ACCOUNT}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {visibleSessions.map((session) => (\n <DropdownMenuItem\n key={session.sessionToken}\n onClick={() => handleSwitch(session.sessionToken, session.user)}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-gray-200 text-xs font-medium\">\n {session.user.avatar ? (\n <img src={session.user.avatar} alt=\"\" className=\"h-8 w-8 rounded-full\" />\n ) : (\n getInitials(session.user.name)\n )}\n </span>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{session.user.name}</span>\n <span className=\"text-xs text-gray-500\">{session.user.email}</span>\n </div>\n {session.isActive && <span className=\"ml-auto text-sm\">{\"\\u2713\"}</span>}\n </div>\n </DropdownMenuItem>\n ))}\n\n {showAddAccount && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onAddAccount}>{localization.ADD_ACCOUNT}</DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport { useSession } from \"../../hooks/use-session\";\nimport type { SessionGuardProps } from \"../../types/components\";\n\nexport function SessionGuard({\n children,\n fallback,\n loadingFallback = null,\n freshRequired = false,\n freshThreshold = 300,\n requiredRole,\n className,\n}: SessionGuardProps) {\n const { user, session, isAuthenticated, isLoading } = useSession();\n\n if (isLoading) {\n return className ? <div className={className}>{loadingFallback}</div> : <>{loadingFallback}</>;\n }\n\n if (!isAuthenticated) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n\n if (freshRequired && session) {\n const sessionAge = (Date.now() - new Date(session.createdAt).getTime()) / 1000;\n if (sessionAge > freshThreshold) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n }\n\n if (requiredRole && user) {\n const userRole = (user as unknown as Record<string, unknown>).role as string | undefined;\n if (userRole !== requiredRole) {\n return className ? <div className={className}>{fallback}</div> : <>{fallback}</>;\n }\n }\n\n return className ? <div className={className}>{children}</div> : <>{children}</>;\n}\n","import type { AuthViewPath } from \"../../types/components\";\n\n/**\n * Default path mapping for AuthView component.\n * Maps logical auth flow paths to actual URL paths.\n *\n * @example\n * // Use in Next.js App Router:\n * <AuthView pathname={pathname} paths={authViewPaths} />\n *\n * // Override specific paths:\n * <AuthView\n * pathname={pathname}\n * paths={{ ...authViewPaths, \"/sign-in\": \"/login\" }}\n * />\n */\nexport const authViewPaths: Record<AuthViewPath, string> = {\n \"/sign-in\": \"/sign-in\",\n \"/sign-up\": \"/sign-up\",\n \"/forgot-password\": \"/forgot-password\",\n \"/reset-password\": \"/reset-password\",\n \"/verify-email\": \"/verify-email\",\n \"/email-otp\": \"/email-otp\",\n \"/recover-account\": \"/recover-account\",\n \"/two-factor\": \"/two-factor\",\n};\n","import { AuthError, AuthErrorCode } from \"@atzentis/auth-sdk\";\n\n/**\n * Safely converts an unknown caught value to AuthError.\n * If the value is already an AuthError, returns it directly.\n * Otherwise wraps the message in a new AuthError.\n */\nexport function toAuthError(error: unknown): AuthError {\n if (error instanceof AuthError) return error;\n const message = error instanceof Error ? error.message : String(error);\n return new AuthError({\n code: AuthErrorCode.NetworkError,\n message,\n statusCode: 0,\n });\n}\n","import { z } from \"zod\";\n\nexport const emailOtpEmailSchema = z.object({\n email: z.string().min(1).email(),\n});\n\nexport type EmailOtpEmailFormData = z.infer<typeof emailOtpEmailSchema>;\n\nexport const emailOtpCodeSchema = z.object({\n code: z\n .string()\n .length(6)\n .regex(/^\\d{6}$/),\n});\n\nexport type EmailOtpCodeFormData = z.infer<typeof emailOtpCodeSchema>;\n","\"use client\";\n\nimport { Button } from \"@atzentis/ui-shadcn\";\n\nexport interface SubmitButtonProps {\n loading: boolean;\n loadingLabel: string;\n actionLabel: string;\n className?: string;\n}\n\nexport function SubmitButton({ loading, loadingLabel, actionLabel, className }: SubmitButtonProps) {\n return (\n <Button type=\"submit\" disabled={loading} className={className ?? \"w-full\"}>\n {loading ? loadingLabel : actionLabel}\n </Button>\n );\n}\n","export function isEmail(value: string): boolean {\n return value.includes(\"@\");\n}\n\nexport function maskEmail(email: string): string {\n const [local, domain] = email.split(\"@\");\n if (!local || !domain) return email;\n const masked =\n local.length <= 1 ? local : `${local[0]}${\"*\".repeat(Math.min(local.length - 1, 3))}`;\n return `${masked}@${domain}`;\n}\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, OTPInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { EmailOtpEmailFormData } from \"../../../schemas/email-otp-schema\";\nimport { emailOtpEmailSchema } from \"../../../schemas/email-otp-schema\";\nimport type { EmailOTPFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\nimport { maskEmail } from \"../../shared/utils\";\n\nexport function EmailOTPForm({\n redirectUrl,\n onSuccess,\n onError,\n resendCooldown = 60,\n autoSubmit = true,\n className,\n}: EmailOTPFormProps) {\n const { sendVerificationEmail, verifyEmail } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [step, setStep] = useState<1 | 2>(1);\n const [email, setEmail] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n const [cooldownRemaining, setCooldownRemaining] = useState(0);\n const codeRef = useRef(\"\");\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n } = useForm<EmailOtpEmailFormData>({\n resolver: zodResolver(emailOtpEmailSchema),\n defaultValues: { email: \"\" },\n });\n\n useEffect(() => {\n if (cooldownRemaining <= 0) return;\n\n const timer = setInterval(() => {\n setCooldownRemaining((prev) => Math.max(0, prev - 1));\n }, 1000);\n\n return () => clearInterval(timer);\n }, [cooldownRemaining]);\n\n const onEmailSubmit = useCallback(\n async (data: EmailOtpEmailFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendVerificationEmail({ email: data.email, redirectUrl });\n setEmail(data.email);\n setStep(2);\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [sendVerificationEmail, redirectUrl, resendCooldown, onError, localization, localizeErrors],\n );\n\n const handleVerifyCode = useCallback(\n async (code: string) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n const response = await verifyEmail({ token: code });\n onSuccess?.(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [verifyEmail, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleOtpComplete = useCallback(\n (code: string) => {\n codeRef.current = code;\n if (autoSubmit) {\n handleVerifyCode(code);\n }\n },\n [autoSubmit, handleVerifyCode],\n );\n\n const handleManualVerify = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n if (codeRef.current) {\n handleVerifyCode(codeRef.current);\n }\n },\n [handleVerifyCode],\n );\n\n const handleResend = useCallback(async () => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendVerificationEmail({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [sendVerificationEmail, email, redirectUrl, resendCooldown, localization, localizeErrors]);\n\n const handleGoBack = useCallback(() => {\n setStep(1);\n setFormError(null);\n codeRef.current = \"\";\n }, []);\n\n if (step === 2) {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">{localization.EMAIL_OTP}</h2>\n <p className=\"text-sm\">\n {localization.EMAIL_OTP_SENT} <strong>{maskEmail(email)}</strong>\n </p>\n </div>\n\n <form onSubmit={handleManualVerify} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.ENTER_VERIFICATION_CODE}\n <OTPInput\n length={6}\n onComplete={handleOtpComplete}\n disabled={isSubmitting}\n className=\"mt-2\"\n />\n </label>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n <div className=\"space-y-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isSubmitting || cooldownRemaining > 0}\n onClick={handleResend}\n className=\"w-full\"\n >\n {cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", String(cooldownRemaining))\n : isSubmitting\n ? localization.RESENDING\n : localization.RESEND}\n </Button>\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </div>\n </form>\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">{localization.EMAIL_OTP}</h2>\n <p className=\"text-sm text-gray-500\">{localization.EMAIL_OTP_DESCRIPTION}</p>\n </div>\n\n <form onSubmit={handleSubmit(onEmailSubmit)} className=\"space-y-4\">\n <FormInput\n label={localization.EMAIL}\n id=\"email-otp-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n disabled={isSubmitting}\n {...register(\"email\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SENDING}\n actionLabel={localization.SEND_VERIFICATION_CODE}\n />\n </form>\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { EmailVerificationFormProps } from \"../../../types/components\";\nimport { maskEmail } from \"../../shared/utils\";\n\nexport function EmailVerificationForm({\n token,\n email,\n redirectUrl,\n onSuccess,\n onError,\n resendCooldown = 60,\n className,\n}: EmailVerificationFormProps) {\n const { sendVerificationEmail, verifyEmail } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [status, setStatus] = useState<\"verifying\" | \"success\" | \"error\" | \"resend\">(\n token ? \"verifying\" : \"resend\",\n );\n const [formError, setFormError] = useState<string | null>(null);\n const [cooldownRemaining, setCooldownRemaining] = useState(0);\n const [isResending, setIsResending] = useState(false);\n\n // Verify token on mount if provided\n // biome-ignore lint/correctness/useExhaustiveDependencies: Only run once on mount for token verification\n useEffect(() => {\n if (!token) return;\n\n setStatus(\"verifying\");\n verifyEmail({ token })\n .then((response) => {\n setStatus(\"success\");\n onSuccess?.(response.user);\n })\n .catch((err) => {\n setStatus(\"error\");\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n });\n }, []);\n\n // Cooldown timer effect\n useEffect(() => {\n if (cooldownRemaining <= 0) return;\n const timer = setInterval(() => {\n setCooldownRemaining((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n return () => clearInterval(timer);\n }, [cooldownRemaining]);\n\n const handleResend = useCallback(async () => {\n if (!email) return;\n\n setFormError(null);\n setIsResending(true);\n try {\n await sendVerificationEmail({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsResending(false);\n }\n }, [\n email,\n redirectUrl,\n resendCooldown,\n sendVerificationEmail,\n localization,\n localizeErrors,\n onError,\n ]);\n\n // Verifying state — loading spinner\n if (status === \"verifying\") {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.EMAIL_VERIFICATION}</CardTitle>\n <CardDescription>{localization.EMAIL_VERIFICATION_DESCRIPTION}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-center py-8\" aria-live=\"polite\">\n <div className=\"flex items-center space-x-3\">\n <div className=\"h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-gray-900\" />\n <p className=\"text-sm text-gray-600\">{localization.EMAIL_VERIFICATION_CHECKING}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n }\n\n // Success state\n if (status === \"success\") {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.EMAIL_VERIFICATION}</CardTitle>\n <CardDescription>{localization.EMAIL_VERIFICATION_DESCRIPTION}</CardDescription>\n </CardHeader>\n <CardContent>\n <div\n className=\"flex flex-col items-center justify-center py-8 space-y-4\"\n aria-live=\"polite\"\n >\n <div className=\"rounded-full bg-green-100 p-3\">\n <svg\n className=\"h-8 w-8 text-green-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n <p className=\"text-sm font-medium text-green-600\">\n {localization.EMAIL_VERIFICATION_SUCCESS}\n </p>\n </div>\n </CardContent>\n </Card>\n );\n }\n\n // Error or resend state\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.EMAIL_VERIFICATION}</CardTitle>\n <CardDescription>{localization.EMAIL_VERIFICATION_DESCRIPTION}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {email && (\n <div className=\"text-sm text-gray-600\">\n {localization.CHECK_YOUR_EMAIL}: <strong>{maskEmail(email)}</strong>\n </div>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isResending || cooldownRemaining > 0}\n onClick={handleResend}\n className=\"w-full\"\n >\n {isResending\n ? localization.RESENDING\n : cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", cooldownRemaining.toString())\n : localization.RESEND_VERIFICATION_EMAIL}\n </Button>\n </div>\n </CardContent>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const forgotPasswordSchema = z.object({\n email: z.string().min(1).email(),\n});\n\nexport type ForgotPasswordFormData = z.infer<typeof forgotPasswordSchema>;\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { ForgotPasswordFormData } from \"../../../schemas/forgot-password-schema\";\nimport { forgotPasswordSchema } from \"../../../schemas/forgot-password-schema\";\nimport type { ForgotPasswordFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\nimport { maskEmail } from \"../../shared/utils\";\n\nexport function ForgotPasswordForm({\n redirectUrl,\n onSuccess,\n onError,\n onBackToLogin,\n resendCooldown = 60,\n className,\n}: ForgotPasswordFormProps) {\n const { requestPasswordReset } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [sent, setSent] = useState(false);\n const [sentEmail, setSentEmail] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n const [cooldownRemaining, setCooldownRemaining] = useState(0);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n getValues,\n } = useForm<ForgotPasswordFormData>({\n resolver: zodResolver(forgotPasswordSchema),\n defaultValues: { email: \"\" },\n });\n\n useEffect(() => {\n if (cooldownRemaining <= 0) return;\n\n const timer = setInterval(() => {\n setCooldownRemaining((prev) => Math.max(0, prev - 1));\n }, 1000);\n\n return () => clearInterval(timer);\n }, [cooldownRemaining]);\n\n const onSubmit = useCallback(\n async (data: ForgotPasswordFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await requestPasswordReset({ email: data.email, redirectUrl });\n setSent(true);\n setSentEmail(data.email);\n setCooldownRemaining(resendCooldown);\n onSuccess?.();\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [\n requestPasswordReset,\n redirectUrl,\n resendCooldown,\n onSuccess,\n onError,\n localization,\n localizeErrors,\n ],\n );\n\n const handleResend = useCallback(async () => {\n const email = getValues(\"email\");\n setFormError(null);\n setIsSubmitting(true);\n try {\n await requestPasswordReset({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [requestPasswordReset, redirectUrl, resendCooldown, getValues, localization, localizeErrors]);\n\n if (sent) {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">{localization.CHECK_YOUR_EMAIL}</h2>\n <p className=\"text-sm\">{localization.FORGOT_PASSWORD_EMAIL}</p>\n <p className=\"text-sm font-medium\">{maskEmail(sentEmail)}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isSubmitting || cooldownRemaining > 0}\n onClick={handleResend}\n className=\"w-full\"\n >\n {cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", String(cooldownRemaining))\n : isSubmitting\n ? localization.RESENDING\n : localization.RESEND}\n </Button>\n\n {onBackToLogin && (\n <Button type=\"button\" variant=\"ghost\" onClick={onBackToLogin} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n )}\n </div>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600 text-center\">\n {formError}\n </div>\n )}\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">{localization.FORGOT_PASSWORD}</h2>\n <p className=\"text-sm text-gray-500\">{localization.FORGOT_PASSWORD_DESCRIPTION}</p>\n </div>\n\n <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n <FormInput\n label={localization.EMAIL}\n id=\"forgot-password-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n disabled={isSubmitting}\n {...register(\"email\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SENDING}\n actionLabel={localization.FORGOT_PASSWORD_ACTION}\n />\n\n {onBackToLogin && (\n <Button type=\"button\" variant=\"ghost\" onClick={onBackToLogin} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n )}\n </form>\n </div>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\n// Credential mode: email-or-username + password\nexport const credentialLoginSchema = z.object({\n identity: z.string().min(1, \"Email or username is required\"),\n password: z.string().min(1, \"Password is required\"),\n captchaToken: z.string().optional(),\n});\nexport type CredentialLoginFormData = z.infer<typeof credentialLoginSchema>;\n\n// Phone mode: phone number + OTP code\nexport const phoneLoginSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n});\nexport type PhoneLoginFormData = z.infer<typeof phoneLoginSchema>;\n\nexport const otpVerifySchema = z.object({\n code: z.string().length(6, \"Code must be 6 digits\"),\n});\nexport type OtpVerifyFormData = z.infer<typeof otpVerifySchema>;\n","\"use client\";\n\nimport type { OAuthProvider } from \"@atzentis/auth-sdk\";\nimport { Button } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useState } from \"react\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport type { OAuthButtonProps } from \"../../types/components\";\n\nconst PROVIDER_NAMES: Record<OAuthProvider, string> = {\n google: \"Google\",\n github: \"GitHub\",\n apple: \"Apple\",\n microsoft: \"Microsoft\",\n atzentis: \"Atzentis\",\n};\n\nexport function OAuthButton({\n provider,\n redirectUri,\n state,\n variant = \"outline\",\n size = \"md\",\n className,\n}: OAuthButtonProps) {\n const { getOAuthUrl } = useAuth();\n const { localization } = useAuthLocalization();\n const [isLoading, setIsLoading] = useState(false);\n\n const sizeMap = {\n sm: \"sm\" as const,\n md: \"default\" as const,\n lg: \"lg\" as const,\n };\n\n const providerName = PROVIDER_NAMES[provider];\n\n const handleClick = useCallback(async () => {\n setIsLoading(true);\n try {\n const url = await getOAuthUrl({ provider, redirectUri, state: state ?? \"\" });\n window.location.href = url;\n } catch {\n setIsLoading(false);\n }\n }, [getOAuthUrl, provider, redirectUri, state]);\n\n return (\n <Button\n type=\"button\"\n variant={variant === \"filled\" ? \"default\" : \"outline\"}\n size={sizeMap[size]}\n disabled={isLoading}\n onClick={handleClick}\n aria-label={`${localization.SIGN_IN_WITH} ${providerName}`}\n className={className}\n >\n {isLoading ? localization.REDIRECTING : `${localization.CONTINUE_WITH} ${providerName}`}\n </Button>\n );\n}\n","import { z } from \"zod\";\n\nexport const phoneNumberSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n});\nexport type PhoneNumberFormData = z.infer<typeof phoneNumberSchema>;\n\nexport const otpVerifySchema = z.object({\n code: z.string().length(6, \"Code must be 6 digits\"),\n});\nexport type OtpVerifyFormData = z.infer<typeof otpVerifySchema>;\n\nexport const phonePasswordSchema = z.object({\n countryCode: z.string(),\n phoneNumber: z.string().min(1, \"Phone number is required\"),\n password: z.string().min(1, \"Password is required\"),\n});\nexport type PhonePasswordFormData = z.infer<typeof phonePasswordSchema>;\n","export interface CountryCode {\n code: string;\n country: string;\n name: string;\n flag: string;\n}\n\nexport const COUNTRY_CODES: CountryCode[] = [\n { code: \"+30\", country: \"GR\", name: \"Greece\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n { code: \"+49\", country: \"DE\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"+1\", country: \"US\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"+44\", country: \"GB\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"+33\", country: \"FR\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"+39\", country: \"IT\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"+34\", country: \"ES\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"+31\", country: \"NL\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"+43\", country: \"AT\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"+41\", country: \"CH\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"+357\", country: \"CY\", name: \"Cyprus\", flag: \"\\u{1F1E8}\\u{1F1FE}\" },\n { code: \"+90\", country: \"TR\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n];\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput, FormSelect, OTPInput } from \"@atzentis/ui-shared\";\nimport type { FormSelectOption } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { usePhone } from \"../../../hooks/use-phone\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { OtpVerifyFormData, PhoneNumberFormData } from \"../../../schemas/phone-login-schema\";\nimport { otpVerifySchema, phoneNumberSchema } from \"../../../schemas/phone-login-schema\";\nimport type { PhoneLoginFormProps } from \"../../../types/components\";\nimport { COUNTRY_CODES } from \"../../shared/country-codes\";\nimport { SubmitButton } from \"../../shared/submit-button\";\n\nexport function PhoneLoginForm({\n onSuccess,\n onError,\n allowedCountryCodes = [\"+30\", \"+49\"],\n showPasswordFallback = false,\n className,\n}: PhoneLoginFormProps) {\n const { sendOTP, verify, signIn, isSending, isVerifying, expiresIn } = usePhone();\n const { localization, localizeErrors } = useAuthLocalization();\n const [step, setStep] = useState<\"phone\" | \"otp\" | \"password\">(\"phone\");\n const [formError, setFormError] = useState<string | null>(null);\n const [fullPhoneNumber, setFullPhoneNumber] = useState(\"\");\n\n const filteredCountryCodes = useMemo(\n () => COUNTRY_CODES.filter((c) => allowedCountryCodes.includes(c.code)),\n [allowedCountryCodes],\n );\n\n const phoneForm = useForm<PhoneNumberFormData>({\n resolver: zodResolver(phoneNumberSchema),\n defaultValues: {\n countryCode: filteredCountryCodes[0]?.code ?? \"+30\",\n phoneNumber: \"\",\n },\n });\n\n const otpForm = useForm<OtpVerifyFormData>({\n resolver: zodResolver(otpVerifySchema),\n defaultValues: { code: \"\" },\n });\n\n const [passwordValue, setPasswordValue] = useState(\"\");\n\n const countryCodeOptions: FormSelectOption[] = filteredCountryCodes.map((c) => ({\n value: c.code,\n label: `${c.flag} ${c.name} (${c.code})`,\n }));\n\n const handlePhoneSubmit = useCallback(\n async (data: PhoneNumberFormData) => {\n setFormError(null);\n const phone = `${data.countryCode}${data.phoneNumber}`;\n setFullPhoneNumber(phone);\n try {\n await sendOTP(phone);\n setStep(\"otp\");\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [sendOTP, onError, localization, localizeErrors],\n );\n\n const handleOtpSubmit = useCallback(\n async (data: OtpVerifyFormData) => {\n setFormError(null);\n try {\n const response = await verify(fullPhoneNumber, data.code);\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [verify, fullPhoneNumber, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleOtpComplete = useCallback(\n (code: string) => {\n otpForm.setValue(\"code\", code);\n otpForm.handleSubmit(handleOtpSubmit)();\n },\n [otpForm, handleOtpSubmit],\n );\n\n const handlePasswordSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setFormError(null);\n try {\n const response = await signIn(fullPhoneNumber, passwordValue);\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n }\n },\n [signIn, fullPhoneNumber, passwordValue, onSuccess, onError, localization, localizeErrors],\n );\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {step === \"phone\" && (\n <form onSubmit={phoneForm.handleSubmit(handlePhoneSubmit)} className=\"space-y-4\">\n <FormSelect\n label={localization.COUNTRY_CODE}\n options={countryCodeOptions}\n value={phoneForm.watch(\"countryCode\")}\n onValueChange={(value) => phoneForm.setValue(\"countryCode\", value)}\n />\n\n <FormInput\n label={localization.PHONE_NUMBER_PLACEHOLDER}\n id=\"phone-number\"\n type=\"tel\"\n error={phoneForm.formState.errors.phoneNumber?.message}\n {...phoneForm.register(\"phoneNumber\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSending}\n loadingLabel={localization.SENDING_VERIFICATION_CODE}\n actionLabel={localization.SEND_VERIFICATION_CODE}\n />\n </form>\n )}\n\n {step === \"otp\" && (\n <form onSubmit={otpForm.handleSubmit(handleOtpSubmit)} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.VERIFICATION_CODE_LABEL}\n <OTPInput length={6} onComplete={handleOtpComplete} disabled={isVerifying} />\n </label>\n\n {expiresIn !== null && (\n <p className=\"text-sm text-gray-500\">\n {localization.CODE_EXPIRES_IN} {expiresIn}s\n </p>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isVerifying}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n {showPasswordFallback && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={() => setStep(\"password\")}\n >\n {localization.USE_PASSWORD_INSTEAD}\n </Button>\n )}\n </form>\n )}\n\n {step === \"password\" && (\n <form onSubmit={handlePasswordSubmit} className=\"space-y-4\">\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"phone-password\"\n value={passwordValue}\n onChange={(e) => setPasswordValue(e.target.value)}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isVerifying}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_IN}\n />\n </form>\n )}\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { CredentialLoginFormData } from \"../../../schemas/login-schema\";\nimport { credentialLoginSchema } from \"../../../schemas/login-schema\";\nimport type { LoginFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\nimport { isEmail } from \"../../shared/utils\";\nimport { OAuthButton } from \"../oauth-button\";\nimport { PhoneLoginForm } from \"./phone-login\";\n\nexport function LoginForm({\n onSuccess,\n onError,\n enablePhone = false,\n enableForgotPassword = false,\n onForgotPasswordClick,\n className,\n ...oauthProps\n}: LoginFormProps) {\n const oauthProviders = \"oauthProviders\" in oauthProps ? oauthProps.oauthProviders : undefined;\n const oauthRedirectUri = \"oauthRedirectUri\" in oauthProps ? oauthProps.oauthRedirectUri : \"\";\n\n const { login, loginWithUsername } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [mode, setMode] = useState<\"credential\" | \"phone\">(\"credential\");\n const [formError, setFormError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n } = useForm<CredentialLoginFormData>({\n resolver: zodResolver(credentialLoginSchema),\n defaultValues: { identity: \"\", password: \"\" },\n });\n\n const identityValue = watch(\"identity\");\n\n const onSubmit = useCallback(\n async (data: CredentialLoginFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n if (isEmail(data.identity)) {\n const response = await login({\n email: data.identity,\n password: data.password,\n captchaToken: data.captchaToken,\n });\n onSuccess(response.user);\n } else {\n const response = await loginWithUsername({\n username: data.identity,\n password: data.password,\n captchaToken: data.captchaToken,\n });\n onSuccess(response.user);\n }\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [login, loginWithUsername, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleSwitchToPhone = useCallback(() => {\n setMode(\"phone\");\n setFormError(null);\n }, []);\n\n const handleSwitchToCredential = useCallback(() => {\n setMode(\"credential\");\n setFormError(null);\n }, []);\n\n if (mode === \"phone\") {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <PhoneLoginForm onSuccess={onSuccess} onError={onError} />\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={handleSwitchToCredential}\n >\n {localization.USE_EMAIL_INSTEAD}\n </Button>\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.SIGN_IN_USERNAME_PLACEHOLDER}\n id=\"login-identity\"\n type=\"text\"\n autoComplete=\"username\"\n error={errors.identity?.message}\n {...register(\"identity\")}\n />\n\n {identityValue && (\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"login-password\"\n autoComplete=\"current-password\"\n error={errors.password?.message}\n {...register(\"password\")}\n />\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_IN}\n />\n\n <div className=\"flex items-center justify-between text-sm\">\n {enableForgotPassword && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto\"\n onClick={onForgotPasswordClick}\n >\n {localization.FORGOT_PASSWORD_LINK}\n </Button>\n )}\n {enablePhone && (\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto\"\n onClick={handleSwitchToPhone}\n >\n {localization.USE_PHONE_INSTEAD}\n </Button>\n )}\n </div>\n\n {oauthProviders && oauthProviders.length > 0 && (\n <>\n <div className=\"relative flex items-center py-2\">\n <div className=\"flex-grow border-t border-gray-300\" />\n <span className=\"mx-4 text-sm text-gray-500\">{localization.OR_CONTINUE_WITH}</span>\n <div className=\"flex-grow border-t border-gray-300\" />\n </div>\n <div className=\"space-y-2\">\n {oauthProviders.map((provider) => (\n <OAuthButton key={provider} provider={provider} redirectUri={oauthRedirectUri} />\n ))}\n </div>\n </>\n )}\n </form>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const recoverEmailSchema = z.object({\n email: z.string().min(1).email(),\n});\n\nexport type RecoverEmailFormData = z.infer<typeof recoverEmailSchema>;\n\nexport const recoverCodeSchema = z.object({\n code: z\n .string()\n .length(6)\n .regex(/^\\d{6}$/),\n});\n\nexport type RecoverCodeFormData = z.infer<typeof recoverCodeSchema>;\n\nexport const recoverNewPasswordSchema = z\n .object({\n newPassword: z.string().min(8),\n confirmPassword: z.string().min(1),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: \"PASSWORDS_DO_NOT_MATCH\",\n path: [\"confirmPassword\"],\n });\n\nexport type RecoverNewPasswordFormData = z.infer<typeof recoverNewPasswordSchema>;\n\nexport const recoverPhoneSchema = z.object({\n phoneNumber: z.string().min(1),\n});\n\nexport type RecoverPhoneFormData = z.infer<typeof recoverPhoneSchema>;\n\nexport type RecoveryMethod = \"email_link\" | \"email_code\" | \"phone_otp\";\n","\"use client\";\n\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput, OTPInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { usePhone } from \"../../../hooks/use-phone\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type {\n RecoverEmailFormData,\n RecoverNewPasswordFormData,\n RecoverPhoneFormData,\n RecoveryMethod,\n} from \"../../../schemas/recover-account-schema\";\nimport {\n recoverEmailSchema,\n recoverNewPasswordSchema,\n recoverPhoneSchema,\n} from \"../../../schemas/recover-account-schema\";\nimport type { RecoverAccountFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\nimport { maskEmail } from \"../../shared/utils\";\n\nexport function RecoverAccountForm({\n redirectUrl,\n enablePhone = false,\n onSuccess,\n onError,\n resendCooldown = 60,\n className,\n}: RecoverAccountFormProps) {\n const { requestPasswordReset, sendVerificationEmail, verifyEmail, resetPassword } = useAuth();\n const { sendOTP, verify: verifyPhone } = usePhone();\n const { localization, localizeErrors } = useAuthLocalization();\n\n const [step, setStep] = useState<1 | 2 | 3 | 4>(1);\n const [email, setEmail] = useState(\"\");\n const [phoneNumber, setPhoneNumber] = useState(\"\");\n const [selectedMethod, setSelectedMethod] = useState<RecoveryMethod | null>(null);\n const [verificationToken, setVerificationToken] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n const [cooldownRemaining, setCooldownRemaining] = useState(0);\n const codeRef = useRef(\"\");\n\n const emailForm = useForm<RecoverEmailFormData>({\n resolver: zodResolver(recoverEmailSchema),\n defaultValues: { email: \"\" },\n });\n\n const phoneForm = useForm<RecoverPhoneFormData>({\n resolver: zodResolver(recoverPhoneSchema),\n defaultValues: { phoneNumber: \"\" },\n });\n\n const passwordForm = useForm<RecoverNewPasswordFormData>({\n resolver: zodResolver(recoverNewPasswordSchema),\n defaultValues: { newPassword: \"\", confirmPassword: \"\" },\n });\n\n useEffect(() => {\n if (cooldownRemaining <= 0) return;\n\n const timer = setInterval(() => {\n setCooldownRemaining((prev) => Math.max(0, prev - 1));\n }, 1000);\n\n return () => clearInterval(timer);\n }, [cooldownRemaining]);\n\n const getTotalSteps = useCallback(() => {\n if (selectedMethod === \"email_link\") return 3;\n return 4;\n }, [selectedMethod]);\n\n const handleGoBack = useCallback(() => {\n if (step === 2) {\n setStep(1);\n setSelectedMethod(null);\n } else if (step === 3) {\n setStep(2);\n codeRef.current = \"\";\n } else if (step === 4) {\n setStep(3);\n }\n setFormError(null);\n }, [step]);\n\n const onEmailSubmit = useCallback(async (data: RecoverEmailFormData) => {\n setFormError(null);\n setEmail(data.email);\n setStep(2);\n }, []);\n\n const handleMethodSelect = useCallback(\n async (method: RecoveryMethod) => {\n setFormError(null);\n setIsSubmitting(true);\n setSelectedMethod(method);\n\n try {\n if (method === \"email_link\") {\n await requestPasswordReset({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n setStep(3);\n } else if (method === \"email_code\") {\n await sendVerificationEmail({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n setStep(3);\n } else if (method === \"phone_otp\") {\n setStep(3);\n }\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [\n email,\n redirectUrl,\n resendCooldown,\n requestPasswordReset,\n sendVerificationEmail,\n onError,\n localization,\n localizeErrors,\n ],\n );\n\n const handleResendEmailLink = useCallback(async () => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await requestPasswordReset({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [email, redirectUrl, resendCooldown, requestPasswordReset, localization, localizeErrors]);\n\n const handleResendEmailCode = useCallback(async () => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendVerificationEmail({ email, redirectUrl });\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [email, redirectUrl, resendCooldown, sendVerificationEmail, localization, localizeErrors]);\n\n const handleResendPhoneOTP = useCallback(async () => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendOTP(phoneNumber);\n setCooldownRemaining(resendCooldown);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [phoneNumber, resendCooldown, sendOTP, localization, localizeErrors]);\n\n const onPhoneSubmit = useCallback(\n async (data: RecoverPhoneFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n setPhoneNumber(data.phoneNumber);\n await sendOTP(data.phoneNumber);\n setCooldownRemaining(resendCooldown);\n setFormError(null);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [sendOTP, resendCooldown, onError, localization, localizeErrors],\n );\n\n const handleVerifyEmailCode = useCallback(\n async (code: string) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await verifyEmail({ token: code });\n setVerificationToken(code);\n setStep(4);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [verifyEmail, onError, localization, localizeErrors],\n );\n\n const handleVerifyPhoneCode = useCallback(\n async (code: string) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await verifyPhone(phoneNumber, code);\n setVerificationToken(code);\n setStep(4);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [verifyPhone, phoneNumber, onError, localization, localizeErrors],\n );\n\n const handleOtpComplete = useCallback(\n (code: string) => {\n codeRef.current = code;\n if (selectedMethod === \"email_code\") {\n handleVerifyEmailCode(code);\n } else if (selectedMethod === \"phone_otp\") {\n handleVerifyPhoneCode(code);\n }\n },\n [selectedMethod, handleVerifyEmailCode, handleVerifyPhoneCode],\n );\n\n const handleManualVerify = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n if (codeRef.current) {\n if (selectedMethod === \"email_code\") {\n handleVerifyEmailCode(codeRef.current);\n } else if (selectedMethod === \"phone_otp\") {\n handleVerifyPhoneCode(codeRef.current);\n }\n }\n },\n [selectedMethod, handleVerifyEmailCode, handleVerifyPhoneCode],\n );\n\n const onPasswordSubmit = useCallback(\n async (data: RecoverNewPasswordFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n const token = verificationToken ?? \"\";\n await resetPassword({ token, newPassword: data.newPassword });\n onSuccess?.();\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [verificationToken, resetPassword, onSuccess, onError, localization, localizeErrors],\n );\n\n if (step === 1) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.RECOVER_ACCOUNT}</CardTitle>\n <CardDescription>{localization.RECOVER_ACCOUNT_DESCRIPTION}</CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={emailForm.handleSubmit(onEmailSubmit)} className=\"space-y-4\">\n <FormInput\n label={localization.EMAIL}\n id=\"recover-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={emailForm.formState.errors.email?.message}\n disabled={isSubmitting}\n {...emailForm.register(\"email\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.LOADING}\n actionLabel={localization.CONTINUE}\n />\n </form>\n </CardContent>\n </Card>\n );\n }\n\n if (step === 2) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.SELECT_RECOVERY_METHOD}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"2\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <button\n type=\"button\"\n onClick={() => handleMethodSelect(\"email_link\")}\n disabled={isSubmitting}\n className=\"w-full p-4 text-left border rounded-lg hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <div className=\"space-y-1\">\n <div className=\"font-medium\">{localization.RESET_VIA_EMAIL}</div>\n <div className=\"text-sm text-gray-500\">{localization.FORGOT_PASSWORD_EMAIL}</div>\n </div>\n </button>\n\n <button\n type=\"button\"\n onClick={() => handleMethodSelect(\"email_code\")}\n disabled={isSubmitting}\n className=\"w-full p-4 text-left border rounded-lg hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <div className=\"space-y-1\">\n <div className=\"font-medium\">{localization.VERIFY_WITH_CODE}</div>\n <div className=\"text-sm text-gray-500\">{localization.EMAIL_OTP_DESCRIPTION}</div>\n </div>\n </button>\n\n {enablePhone && (\n <button\n type=\"button\"\n onClick={() => handleMethodSelect(\"phone_otp\")}\n disabled={isSubmitting}\n className=\"w-full p-4 text-left border rounded-lg hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <div className=\"space-y-1\">\n <div className=\"font-medium\">{localization.VERIFY_VIA_PHONE}</div>\n <div className=\"text-sm text-gray-500\">\n {localization.SENDING_VERIFICATION_CODE}\n </div>\n </div>\n </button>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </CardContent>\n </Card>\n );\n }\n\n if (step === 3) {\n if (selectedMethod === \"email_link\") {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.CHECK_YOUR_EMAIL}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"3\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-sm\">{localization.FORGOT_PASSWORD_EMAIL}</p>\n <p className=\"text-sm font-medium\">{maskEmail(email)}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isSubmitting || cooldownRemaining > 0}\n onClick={handleResendEmailLink}\n className=\"w-full\"\n >\n {cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", String(cooldownRemaining))\n : isSubmitting\n ? localization.RESENDING\n : localization.RESEND}\n </Button>\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </div>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600 text-center\">\n {formError}\n </div>\n )}\n </CardContent>\n </Card>\n );\n }\n\n if (selectedMethod === \"email_code\") {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.EMAIL_OTP}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"3\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-sm\">\n {localization.EMAIL_OTP_SENT} <strong>{maskEmail(email)}</strong>\n </p>\n </div>\n\n <form onSubmit={handleManualVerify} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.ENTER_VERIFICATION_CODE}\n <OTPInput\n length={6}\n onComplete={handleOtpComplete}\n disabled={isSubmitting}\n className=\"mt-2\"\n />\n </label>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n <div className=\"space-y-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isSubmitting || cooldownRemaining > 0}\n onClick={handleResendEmailCode}\n className=\"w-full\"\n >\n {cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", String(cooldownRemaining))\n : isSubmitting\n ? localization.RESENDING\n : localization.RESEND}\n </Button>\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </div>\n </form>\n </div>\n </CardContent>\n </Card>\n );\n }\n\n if (selectedMethod === \"phone_otp\") {\n if (!phoneNumber) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.VERIFY_VIA_PHONE}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"3\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={phoneForm.handleSubmit(onPhoneSubmit)} className=\"space-y-4\">\n <FormInput\n label={localization.PHONE_NUMBER_PLACEHOLDER}\n id=\"recover-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n error={phoneForm.formState.errors.phoneNumber?.message}\n disabled={isSubmitting}\n {...phoneForm.register(\"phoneNumber\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SENDING_VERIFICATION_CODE}\n actionLabel={localization.SEND_VERIFICATION_CODE}\n />\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </form>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.ONE_TIME_PASSWORD}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"3\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-sm\">\n {localization.EMAIL_OTP_SENT} <strong>{phoneNumber}</strong>\n </p>\n </div>\n\n <form onSubmit={handleManualVerify} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.ENTER_VERIFICATION_CODE}\n <OTPInput\n length={6}\n onComplete={handleOtpComplete}\n disabled={isSubmitting}\n className=\"mt-2\"\n />\n </label>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n <div className=\"space-y-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isSubmitting || cooldownRemaining > 0}\n onClick={handleResendPhoneOTP}\n className=\"w-full\"\n >\n {cooldownRemaining > 0\n ? localization.RESEND_IN.replace(\"{{seconds}}\", String(cooldownRemaining))\n : isSubmitting\n ? localization.RESENDING\n : localization.RESEND}\n </Button>\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </div>\n </form>\n </div>\n </CardContent>\n </Card>\n );\n }\n }\n\n if (step === 4) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.RESET_PASSWORD}</CardTitle>\n <CardDescription>\n {localization.STEP_OF.replace(\"{{current}}\", \"4\").replace(\n \"{{total}}\",\n String(getTotalSteps()),\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={passwordForm.handleSubmit(onPasswordSubmit)} className=\"space-y-4\">\n <FormPasswordInput\n label={localization.NEW_PASSWORD}\n id=\"new-password\"\n autoComplete=\"new-password\"\n error={passwordForm.formState.errors.newPassword?.message}\n disabled={isSubmitting}\n {...passwordForm.register(\"newPassword\")}\n />\n\n <FormPasswordInput\n label={localization.CONFIRM_NEW_PASSWORD}\n id=\"confirm-password\"\n autoComplete=\"new-password\"\n error={passwordForm.formState.errors.confirmPassword?.message}\n disabled={isSubmitting}\n {...passwordForm.register(\"confirmPassword\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.LOADING}\n actionLabel={localization.RESET_PASSWORD_ACTION}\n />\n\n <Button type=\"button\" variant=\"ghost\" onClick={handleGoBack} className=\"w-full\">\n {localization.GO_BACK}\n </Button>\n </form>\n </CardContent>\n </Card>\n );\n }\n\n return null;\n}\n","import { z } from \"zod\";\n\nexport const resetPasswordSchema = z\n .object({\n newPassword: z.string().min(8),\n confirmPassword: z.string().min(1),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: \"PASSWORDS_DO_NOT_MATCH\",\n path: [\"confirmPassword\"],\n });\n\nexport type ResetPasswordFormData = z.infer<typeof resetPasswordSchema>;\n","\"use client\";\n\nimport { Card } from \"@atzentis/ui-shadcn\";\nimport { FormPasswordInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { ResetPasswordFormData } from \"../../../schemas/reset-password-schema\";\nimport { resetPasswordSchema } from \"../../../schemas/reset-password-schema\";\nimport type { ResetPasswordFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\n\nexport function ResetPasswordForm({\n token,\n onSuccess,\n onError,\n className,\n}: ResetPasswordFormProps) {\n const { resetPassword } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [isSuccess, setIsSuccess] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n } = useForm<ResetPasswordFormData>({\n resolver: zodResolver(resetPasswordSchema),\n defaultValues: { newPassword: \"\", confirmPassword: \"\" },\n });\n\n const onSubmit = useCallback(\n async (data: ResetPasswordFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await resetPassword({ token, newPassword: data.newPassword });\n setIsSuccess(true);\n onSuccess?.();\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [resetPassword, token, onSuccess, onError, localization, localizeErrors],\n );\n\n if (isSuccess) {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4 text-center\">\n <h2 className=\"text-lg font-semibold\">{localization.RESET_PASSWORD_SUCCESS}</h2>\n <p className=\"text-sm text-gray-500\">{localization.RESET_PASSWORD_SUCCESS}</p>\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">{localization.RESET_PASSWORD}</h2>\n <p className=\"text-sm text-gray-500\">{localization.CHANGE_PASSWORD_DESCRIPTION}</p>\n </div>\n\n <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n <FormPasswordInput\n label={localization.NEW_PASSWORD}\n id=\"reset-password-new\"\n autoComplete=\"new-password\"\n error={errors.newPassword?.message}\n disabled={isSubmitting}\n {...register(\"newPassword\")}\n />\n\n <FormPasswordInput\n label={localization.CONFIRM_NEW_PASSWORD}\n id=\"reset-password-confirm\"\n autoComplete=\"new-password\"\n error={\n errors.confirmPassword?.message === \"PASSWORDS_DO_NOT_MATCH\"\n ? localization.PASSWORDS_DO_NOT_MATCH || \"Passwords do not match\"\n : errors.confirmPassword?.message\n }\n disabled={isSubmitting}\n {...register(\"confirmPassword\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.LOADING}\n actionLabel={localization.RESET_PASSWORD_ACTION}\n />\n </form>\n </div>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const signupSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n name: z.string().min(1, \"Name is required\"),\n username: z.string().optional(),\n phoneNumber: z.string().optional(),\n organizationName: z.string().optional(),\n acceptTerms: z.boolean(),\n captchaToken: z.string().optional(),\n});\nexport type SignupFormData = z.infer<typeof signupSchema>;\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput, FormPasswordInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { SignupFormData } from \"../../../schemas/signup-schema\";\nimport { signupSchema } from \"../../../schemas/signup-schema\";\nimport type { SignupFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\n\nexport function SignupForm({\n onSuccess,\n onError,\n showUsernameField = false,\n showPhoneField = false,\n organizationName,\n acceptTermsRequired = false,\n onLoginClick,\n className,\n}: SignupFormProps) {\n const { signup } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [formError, setFormError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n } = useForm<SignupFormData>({\n resolver: zodResolver(\n acceptTermsRequired\n ? signupSchema.refine((data) => data.acceptTerms === true, {\n message: localization.ACCEPT_TERMS_ERROR,\n path: [\"acceptTerms\"],\n })\n : signupSchema,\n ),\n defaultValues: {\n email: \"\",\n password: \"\",\n name: \"\",\n username: \"\",\n phoneNumber: \"\",\n organizationName: organizationName ?? \"\",\n acceptTerms: false,\n },\n });\n\n const onSubmit = useCallback(\n async (data: SignupFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n const response = await signup({\n email: data.email,\n password: data.password,\n name: data.name,\n username: data.username,\n organizationName: data.organizationName,\n acceptTerms: data.acceptTerms,\n });\n onSuccess(response.user);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [signup, onSuccess, onError, localization, localizeErrors],\n );\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.NAME}\n id=\"signup-name\"\n type=\"text\"\n autoComplete=\"name\"\n error={errors.name?.message}\n {...register(\"name\")}\n />\n\n <FormInput\n label={localization.EMAIL}\n id=\"signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n {...register(\"email\")}\n />\n\n <FormPasswordInput\n label={localization.PASSWORD}\n id=\"signup-password\"\n autoComplete=\"new-password\"\n error={errors.password?.message}\n {...register(\"password\")}\n />\n\n {showUsernameField && (\n <FormInput\n label={localization.USERNAME}\n id=\"signup-username\"\n type=\"text\"\n autoComplete=\"username\"\n error={errors.username?.message}\n {...register(\"username\")}\n />\n )}\n\n {showPhoneField && (\n <FormInput\n label={localization.PHONE_NUMBER_PLACEHOLDER}\n id=\"signup-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n error={errors.phoneNumber?.message}\n {...register(\"phoneNumber\")}\n />\n )}\n\n {acceptTermsRequired && (\n <div className=\"flex items-center gap-2\">\n <input\n id=\"signup-terms\"\n type=\"checkbox\"\n aria-invalid={errors.acceptTerms ? true : undefined}\n {...register(\"acceptTerms\")}\n />\n <label htmlFor=\"signup-terms\" className=\"text-sm\">\n {localization.ACCEPT_TERMS}\n </label>\n {errors.acceptTerms && (\n <p className=\"text-sm text-red-600\">{errors.acceptTerms.message}</p>\n )}\n </div>\n )}\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SIGNING_IN}\n actionLabel={localization.SIGN_UP_ACTION}\n />\n\n {onLoginClick && (\n <p className=\"text-sm text-center\">\n {localization.ALREADY_HAVE_AN_ACCOUNT}{\" \"}\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={onLoginClick}\n >\n {localization.SIGN_IN}\n </Button>\n </p>\n )}\n </form>\n </Card>\n );\n}\n","import { z } from \"zod\";\n\nexport const totpSchema = z.object({\n code: z\n .string()\n .length(6)\n .regex(/^\\d{6}$/),\n});\n\nexport type TotpFormData = z.infer<typeof totpSchema>;\n\nexport const backupCodeSchema = z.object({\n backupCode: z.string().min(1),\n});\n\nexport type BackupCodeFormData = z.infer<typeof backupCodeSchema>;\n","\"use client\";\n\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@atzentis/ui-shadcn\";\nimport { FormInput, OTPInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { BackupCodeFormData } from \"../../../schemas/two-factor-schema\";\nimport { backupCodeSchema } from \"../../../schemas/two-factor-schema\";\nimport type { TwoFactorFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\n\nexport function TwoFactorForm({\n onVerify,\n onError,\n autoSubmit = true,\n isLoading,\n className,\n}: TwoFactorFormProps) {\n const { localization, localizeErrors } = useAuthLocalization();\n const [mode, setMode] = useState<\"totp\" | \"backup\">(\"totp\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n const codeRef = useRef(\"\");\n\n const loading = isLoading ?? isSubmitting;\n\n const backupForm = useForm<BackupCodeFormData>({\n resolver: zodResolver(backupCodeSchema),\n defaultValues: { backupCode: \"\" },\n });\n\n const handleVerify = useCallback(\n async (code: string) => {\n setIsSubmitting(true);\n setFormError(null);\n try {\n await onVerify(code);\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [onVerify, onError, localization, localizeErrors],\n );\n\n const handleOtpComplete = useCallback(\n (code: string) => {\n codeRef.current = code;\n if (autoSubmit) {\n handleVerify(code);\n }\n },\n [autoSubmit, handleVerify],\n );\n\n const handleManualVerify = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n if (codeRef.current) {\n handleVerify(codeRef.current);\n }\n },\n [handleVerify],\n );\n\n const handleBackupSubmit = useCallback(\n async (data: BackupCodeFormData) => {\n await handleVerify(data.backupCode);\n },\n [handleVerify],\n );\n\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{localization.TWO_FACTOR_PROMPT}</CardTitle>\n <CardDescription>\n {mode === \"totp\" ? localization.ENTER_TOTP_CODE : localization.BACKUP_CODES}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {mode === \"totp\" && (\n <form onSubmit={handleManualVerify} className=\"space-y-4\">\n {/* biome-ignore lint/a11y/noLabelWithoutControl: OTPInput renders its own input cells */}\n <label className=\"block text-sm font-medium\">\n {localization.VERIFICATION_CODE_LABEL}\n <OTPInput\n length={6}\n onComplete={handleOtpComplete}\n disabled={loading}\n className=\"mt-2\"\n />\n </label>\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={loading}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.TWO_FACTOR_ACTION}\n />\n\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={() => setMode(\"backup\")}\n disabled={loading}\n >\n {localization.USE_BACKUP_CODE}\n </Button>\n </form>\n )}\n\n {mode === \"backup\" && (\n <form onSubmit={backupForm.handleSubmit(handleBackupSubmit)} className=\"space-y-4\">\n <FormInput\n label={localization.BACKUP_CODE_PLACEHOLDER}\n id=\"backup-code\"\n error={backupForm.formState.errors.backupCode?.message}\n disabled={loading}\n {...backupForm.register(\"backupCode\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={loading}\n loadingLabel={localization.VERIFYING}\n actionLabel={localization.VERIFY}\n />\n\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"p-0 h-auto text-sm\"\n onClick={() => setMode(\"totp\")}\n disabled={loading}\n >\n {localization.USE_AUTHENTICATOR}\n </Button>\n </form>\n )}\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport type { User } from \"@atzentis/auth-sdk\";\nimport { useMemo } from \"react\";\nimport type { AuthViewProps } from \"../../types/components\";\nimport { authViewPaths } from \"./auth-view-paths\";\nimport { EmailOTPForm } from \"./forms/email-otp\";\nimport { EmailVerificationForm } from \"./forms/email-verification\";\nimport { ForgotPasswordForm } from \"./forms/forgot-password\";\nimport { LoginForm } from \"./forms/login\";\nimport { RecoverAccountForm } from \"./forms/recover-account\";\nimport { ResetPasswordForm } from \"./forms/reset-password\";\nimport { SignupForm } from \"./forms/signup\";\nimport { TwoFactorForm } from \"./forms/two-factor\";\n\n/**\n * AuthView — Pathname-based router for auth flows.\n * Renders the appropriate auth form component based on the pathname prop.\n *\n * @example\n * // Next.js App Router:\n * import { AuthView } from \"@atzentis/auth-react\";\n *\n * export default function AuthPage({ params, searchParams }) {\n * const pathname = `/${params.slug?.join(\"/\") || \"\"}`;\n * return <AuthView pathname={pathname} searchParams={searchParams} />;\n * }\n *\n * @example\n * // Custom path mapping:\n * <AuthView\n * pathname=\"/login\"\n * paths={{ \"/sign-in\": \"/login\", \"/sign-up\": \"/register\" }}\n * onSuccess={(user) => router.push(\"/dashboard\")}\n * />\n */\nexport function AuthView({\n pathname,\n paths,\n fallback = null,\n searchParams,\n getSearchParam,\n onSuccess,\n onError,\n enablePhone,\n oauthProviders,\n oauthRedirectUri,\n redirectUrl,\n className,\n}: AuthViewProps) {\n // Merge default paths with consumer overrides\n const resolvedPaths = useMemo(() => {\n return { ...authViewPaths, ...paths };\n }, [paths]);\n\n // Helper to extract search params\n const getParam = (key: string): string | undefined => {\n if (searchParams) {\n return searchParams[key];\n }\n if (getSearchParam) {\n return getSearchParam(key);\n }\n return undefined;\n };\n\n // Reverse lookup: find which AuthViewPath maps to this pathname\n const matchedPath = Object.entries(resolvedPaths).find(\n ([, mappedPath]) => mappedPath === pathname,\n )?.[0];\n\n // Render matched component\n switch (matchedPath) {\n case \"/sign-in\": {\n // LoginForm expects OAuthProvider[] when oauthProviders is passed\n if (oauthProviders && oauthRedirectUri) {\n return (\n <LoginForm\n onSuccess={(user) => onSuccess?.(user)}\n onError={onError}\n enablePhone={enablePhone}\n oauthProviders={oauthProviders}\n oauthRedirectUri={oauthRedirectUri}\n className={className}\n />\n );\n }\n return (\n <LoginForm\n onSuccess={(user) => onSuccess?.(user)}\n onError={onError}\n enablePhone={enablePhone}\n className={className}\n />\n );\n }\n\n case \"/sign-up\": {\n return (\n <SignupForm\n onSuccess={(user) => onSuccess?.(user)}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/forgot-password\": {\n if (!redirectUrl) {\n throw new Error(\"AuthView: redirectUrl is required for /forgot-password\");\n }\n return (\n <ForgotPasswordForm\n redirectUrl={redirectUrl}\n onSuccess={() => onSuccess?.()}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/reset-password\": {\n const token = getParam(\"token\");\n if (!token) {\n throw new Error(\"AuthView: token query param is required for /reset-password\");\n }\n return (\n <ResetPasswordForm\n token={token}\n onSuccess={() => onSuccess?.()}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/verify-email\": {\n if (!redirectUrl) {\n throw new Error(\"AuthView: redirectUrl is required for /verify-email\");\n }\n const token = getParam(\"token\");\n const email = getParam(\"email\");\n return (\n <EmailVerificationForm\n token={token}\n email={email}\n redirectUrl={redirectUrl}\n onSuccess={(user: User) => onSuccess?.(user)}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/email-otp\": {\n if (!redirectUrl) {\n throw new Error(\"AuthView: redirectUrl is required for /email-otp\");\n }\n return (\n <EmailOTPForm\n redirectUrl={redirectUrl}\n onSuccess={(user: User) => onSuccess?.(user)}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/recover-account\": {\n if (!redirectUrl) {\n throw new Error(\"AuthView: redirectUrl is required for /recover-account\");\n }\n return (\n <RecoverAccountForm\n redirectUrl={redirectUrl}\n enablePhone={enablePhone}\n onSuccess={() => onSuccess?.()}\n onError={onError}\n className={className}\n />\n );\n }\n\n case \"/two-factor\": {\n return (\n <TwoFactorForm\n onVerify={() => {\n // Map onVerify to onSuccess for consistency\n onSuccess?.();\n }}\n onError={onError}\n className={className}\n />\n );\n }\n\n default: {\n // No match — render fallback\n return <>{fallback}</>;\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const magicLinkSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n});\nexport type MagicLinkFormData = z.infer<typeof magicLinkSchema>;\n","\"use client\";\n\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { FormInput } from \"@atzentis/ui-shared\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useCallback, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toAuthError } from \"../../../helpers/to-auth-error\";\nimport { useAuth } from \"../../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../../hooks/use-auth-localization\";\nimport { getLocalizedError } from \"../../../localization\";\nimport type { MagicLinkFormData } from \"../../../schemas/magic-link-schema\";\nimport { magicLinkSchema } from \"../../../schemas/magic-link-schema\";\nimport type { MagicLinkFormProps } from \"../../../types/components\";\nimport { SubmitButton } from \"../../shared/submit-button\";\nimport { maskEmail } from \"../../shared/utils\";\n\nexport function MagicLinkForm({ redirectUrl, onSuccess, onError, className }: MagicLinkFormProps) {\n const { sendMagicLink } = useAuth();\n const { localization, localizeErrors } = useAuthLocalization();\n const [sent, setSent] = useState(false);\n const [sentEmail, setSentEmail] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [formError, setFormError] = useState<string | null>(null);\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n getValues,\n } = useForm<MagicLinkFormData>({\n resolver: zodResolver(magicLinkSchema),\n defaultValues: { email: \"\" },\n });\n\n const onSubmit = useCallback(\n async (data: MagicLinkFormData) => {\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendMagicLink({ email: data.email, redirectUrl });\n setSent(true);\n setSentEmail(data.email);\n onSuccess?.();\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n onError?.(toAuthError(err));\n } finally {\n setIsSubmitting(false);\n }\n },\n [sendMagicLink, redirectUrl, onSuccess, onError, localization, localizeErrors],\n );\n\n const handleResend = useCallback(async () => {\n const email = getValues(\"email\");\n setFormError(null);\n setIsSubmitting(true);\n try {\n await sendMagicLink({ email, redirectUrl });\n } catch (err) {\n setFormError(getLocalizedError(err, localization, localizeErrors));\n } finally {\n setIsSubmitting(false);\n }\n }, [sendMagicLink, redirectUrl, getValues, localization, localizeErrors]);\n\n if (sent) {\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4 text-center\">\n <p className=\"text-sm\">\n {localization.MAGIC_LINK_EMAIL} <strong>{maskEmail(sentEmail)}</strong>\n </p>\n <p className=\"text-sm text-gray-500\">{localization.MAGIC_LINK_HINT}</p>\n <Button type=\"button\" variant=\"outline\" disabled={isSubmitting} onClick={handleResend}>\n {isSubmitting ? localization.RESENDING : localization.RESEND}\n </Button>\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n </div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"p-6 space-y-4\">\n <FormInput\n label={localization.EMAIL}\n id=\"magic-link-email\"\n type=\"email\"\n autoComplete=\"email\"\n error={errors.email?.message}\n {...register(\"email\")}\n />\n\n {formError && (\n <div aria-live=\"polite\" className=\"text-sm text-red-600\">\n {formError}\n </div>\n )}\n\n <SubmitButton\n loading={isSubmitting}\n loadingLabel={localization.SENDING}\n actionLabel={localization.MAGIC_LINK_ACTION}\n />\n </form>\n </Card>\n );\n}\n","\"use client\";\n\nimport type { Device } from \"@atzentis/auth-sdk\";\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useDevices } from \"../../hooks/use-devices\";\nimport type { DeviceListProps } from \"../../types/components\";\n\nconst DEFAULT_DEVICE_ICONS: Record<string, string> = {\n mobile: \"\\u{1F4F1}\",\n desktop: \"\\u{1F4BB}\",\n tablet: \"\\u{1F4DF}\",\n};\n\nexport function DeviceList({\n showTrustToggle = false,\n showRemoveAction = false,\n onDeviceTrusted,\n onDeviceUntrusted,\n onDeviceRemoved,\n renderDeviceIcon,\n className,\n}: DeviceListProps) {\n const { devices, isLoading, error, refresh, trustDevice, untrustDevice, removeDevice } =\n useDevices();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const handleTrustToggle = useCallback(\n async (device: Device) => {\n if (device.isTrusted) {\n await untrustDevice(device.id);\n onDeviceUntrusted?.(device);\n } else {\n await trustDevice(device.id);\n onDeviceTrusted?.(device);\n }\n },\n [trustDevice, untrustDevice, onDeviceTrusted, onDeviceUntrusted],\n );\n\n const handleRemove = useCallback(\n async (device: Device) => {\n await removeDevice(device.id);\n onDeviceRemoved?.(device);\n },\n [removeDevice, onDeviceRemoved],\n );\n\n if (isLoading && devices.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.LOADING_DEVICES}</div>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-red-600\">{error.message}</div>\n </Card>\n );\n }\n\n if (devices.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.NO_DEVICES}</div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {devices.map((device) => (\n <div\n key={device.id}\n className=\"flex items-start justify-between gap-4 rounded border p-4\"\n >\n <div className=\"flex items-start gap-3\">\n <span className=\"text-2xl\">\n {renderDeviceIcon\n ? renderDeviceIcon(device)\n : (DEFAULT_DEVICE_ICONS[device.deviceType] ?? \"\\u{1F4BB}\")}\n </span>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{device.name}</span>\n {device.isCurrent && (\n <span className=\"rounded bg-blue-100 px-2 py-0.5 text-xs text-blue-700\">\n {localization.CURRENT_DEVICE}\n </span>\n )}\n </div>\n <p className=\"text-sm text-gray-500\">\n {device.browser} · {device.os}\n </p>\n {(device.lastCity || device.lastCountry) && (\n <p className=\"text-sm text-gray-500\">\n {[device.lastCity, device.lastCountry].filter(Boolean).join(\", \")}\n </p>\n )}\n <p className=\"text-xs text-gray-400\">\n {localization.LAST_USED} {device.lastUsedAt} · {localization.IP_LABEL}{\" \"}\n {device.lastIp}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {showTrustToggle && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleTrustToggle(device)}\n >\n {device.isTrusted ? localization.UNTRUST_DEVICE : localization.TRUST_DEVICE}\n </Button>\n )}\n {showRemoveAction && (\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n disabled={device.isCurrent}\n onClick={() => handleRemove(device)}\n >\n {localization.REMOVE}\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useSession } from \"../../hooks/use-session\";\nimport type { LoadingBoundaryProps } from \"../../types/components\";\n\nexport function LoadingBoundary({\n children,\n spinner = <div>Loading...</div>,\n delay = 0,\n className,\n}: LoadingBoundaryProps) {\n const { isLoading } = useSession();\n const [showSpinner, setShowSpinner] = useState(delay === 0 && isLoading);\n\n useEffect(() => {\n if (!isLoading) {\n setShowSpinner(false);\n return;\n }\n\n if (delay === 0) {\n setShowSpinner(true);\n return;\n }\n\n const timer = setTimeout(() => {\n setShowSpinner(true);\n }, delay);\n\n return () => clearTimeout(timer);\n }, [isLoading, delay]);\n\n if (isLoading && showSpinner) {\n return className ? <div className={className}>{spinner}</div> : <>{spinner}</>;\n }\n\n if (isLoading) {\n return null;\n }\n\n return <>{children}</>;\n}\n","export type RiskLevel = \"low\" | \"medium\" | \"high\";\n\nexport function getRiskLevel(score: number): RiskLevel {\n if (score < 30) return \"low\";\n if (score < 60) return \"medium\";\n return \"high\";\n}\n\nexport const RISK_COLORS: Record<RiskLevel, string> = {\n low: \"text-green-600 bg-green-50\",\n medium: \"text-yellow-600 bg-yellow-50\",\n high: \"text-red-600 bg-red-50\",\n};\n","\"use client\";\n\nimport type { LoginEvent } from \"@atzentis/auth-sdk\";\nimport { Button, Card } from \"@atzentis/ui-shadcn\";\nimport { useCallback, useEffect } from \"react\";\nimport { RISK_COLORS, getRiskLevel } from \"../../helpers/risk-utils\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useLoginActivity } from \"../../hooks/use-login-activity\";\nimport type { LoginActivityFeedProps } from \"../../types/components\";\n\nexport function LoginActivityFeed({\n limit = 20,\n showRiskBadge = false,\n showReportActions = false,\n filterByStatus,\n onSuspiciousReported,\n className,\n}: LoginActivityFeedProps) {\n const {\n events,\n hasMore,\n isLoading,\n error,\n refresh,\n loadMore,\n filter,\n markRecognized,\n reportSuspicious,\n } = useLoginActivity({ limit });\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n if (filterByStatus) {\n filter({ status: filterByStatus, limit });\n }\n refresh();\n }, [refresh, filter, filterByStatus, limit]);\n\n const handleMarkRecognized = useCallback(\n async (event: LoginEvent) => {\n await markRecognized(event.id);\n },\n [markRecognized],\n );\n\n const handleReportSuspicious = useCallback(\n async (event: LoginEvent) => {\n await reportSuspicious(event.id);\n onSuspiciousReported?.(event);\n },\n [reportSuspicious, onSuspiciousReported],\n );\n\n if (isLoading && events.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.LOADING_ACTIVITY}</div>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-red-600\">{error.message}</div>\n </Card>\n );\n }\n\n if (events.length === 0) {\n return (\n <Card className={className}>\n <div className=\"p-6 text-center text-sm text-gray-500\">{localization.NO_ACTIVITY}</div>\n </Card>\n );\n }\n\n return (\n <Card className={className}>\n <div className=\"p-6 space-y-4\">\n {events.map((event) => {\n const riskLevel = getRiskLevel(event.riskScore);\n return (\n <div\n key={event.id}\n className=\"flex items-start justify-between gap-4 rounded border p-4\"\n >\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{event.deviceName}</span>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600\">\n {event.status}\n </span>\n {showRiskBadge && (\n <span className={`rounded px-2 py-0.5 text-xs ${RISK_COLORS[riskLevel]}`}>\n {riskLevel}\n </span>\n )}\n </div>\n <p className=\"text-sm text-gray-500\">\n {event.method} · {event.ip}\n </p>\n {(event.city || event.country) && (\n <p className=\"text-sm text-gray-500\">\n {[event.city, event.country].filter(Boolean).join(\", \")}\n </p>\n )}\n <p className=\"text-xs text-gray-400\">{event.createdAt}</p>\n </div>\n\n {showReportActions && (\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleMarkRecognized(event)}\n >\n {localization.MARK_RECOGNIZED}\n </Button>\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => handleReportSuspicious(event)}\n >\n {localization.REPORT_SUSPICIOUS}\n </Button>\n </div>\n )}\n </div>\n );\n })}\n\n {hasMore && (\n <div className=\"text-center\">\n <Button type=\"button\" variant=\"outline\" disabled={isLoading} onClick={loadMore}>\n {isLoading ? localization.LOADING : localization.LOAD_MORE}\n </Button>\n </div>\n )}\n </div>\n </Card>\n );\n}\n","\"use client\";\n\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useEffect } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useOrganizations } from \"../../hooks/use-organizations\";\nimport type { OrganizationMenuProps } from \"../../types/components\";\n\nexport function OrganizationMenu({\n showCreateNew = false,\n currentOrgId,\n onSwitch,\n onCreateNew,\n className,\n}: OrganizationMenuProps) {\n const { organizations, isLoading, refresh } = useOrganizations();\n const { localization } = useAuthLocalization();\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n const currentOrg = organizations.find((o) => o.id === currentOrgId);\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" disabled={isLoading}>\n {currentOrg ? (\n <span className=\"flex items-center gap-2\">\n {currentOrg.logo ? (\n <img src={currentOrg.logo} alt=\"\" className=\"h-5 w-5 rounded\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded bg-gray-200 text-xs\">\n {getInitials(currentOrg.name)}\n </span>\n )}\n {currentOrg.name}\n </span>\n ) : (\n localization.SELECT_ORGANIZATION\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {organizations.map((org) => (\n <DropdownMenuItem key={org.id} onClick={() => onSwitch?.(org)}>\n <div className=\"flex items-center gap-2\">\n {org.logo ? (\n <img src={org.logo} alt=\"\" className=\"h-5 w-5 rounded\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded bg-gray-200 text-xs\">\n {getInitials(org.name)}\n </span>\n )}\n <span>{org.name}</span>\n {org.id === currentOrgId && <span className=\"ml-auto\">{\"\\u2713\"}</span>}\n </div>\n </DropdownMenuItem>\n ))}\n\n {showCreateNew && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onCreateNew}>\n {localization.CREATE_ORGANIZATION}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@atzentis/ui-shadcn\";\nimport { useCallback } from \"react\";\nimport { getInitials } from \"../../helpers/initials\";\nimport { useAuth } from \"../../hooks/use-auth\";\nimport { useAuthLocalization } from \"../../hooks/use-auth-localization\";\nimport { useSession } from \"../../hooks/use-session\";\nimport type { UserMenuProps } from \"../../types/components\";\n\nexport function UserMenu({ showOrganization = false, menuItems, className }: UserMenuProps) {\n const { user } = useSession();\n const { logout } = useAuth();\n const { localization } = useAuthLocalization();\n\n const handleSignOut = useCallback(async () => {\n await logout();\n }, [logout]);\n\n if (!user) return null;\n\n return (\n <div className={className}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n <span className=\"flex items-center gap-2\">\n {user.avatar ? (\n <img src={user.avatar} alt=\"\" className=\"h-8 w-8 rounded-full\" />\n ) : (\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-gray-200 text-xs font-medium\">\n {getInitials(user.name)}\n </span>\n )}\n <span className=\"text-sm font-medium\">{user.name}</span>\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>\n <div>\n <p className=\"text-sm\">{user.email}</p>\n {showOrganization && (\n <p className=\"text-xs text-gray-500\">{localization.ORGANIZATION}</p>\n )}\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {menuItems?.map((item) => (\n <DropdownMenuItem key={item.label} onClick={item.onClick}>\n {item.label}\n </DropdownMenuItem>\n ))}\n\n {menuItems && menuItems.length > 0 && <DropdownMenuSeparator />}\n\n <DropdownMenuItem onClick={handleSignOut}>{localization.SIGN_OUT}</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n"]}
|