@atzentis/auth-react 0.0.12 → 0.0.14
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 +782 -3
- package/dist/index.js +2076 -8
- package/dist/index.js.map +1 -1
- package/package.json +18 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.tsx","../src/use-auth-context.ts","../src/use-auth.ts","../src/use-session.ts"],"names":["useCallback"],"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 { AuthContextValue, AuthProviderProps } from \"./types\";\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\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}: 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 return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n","// Internal hook to access auth context with error boundary\n\nimport { useContext } from \"react\";\nimport { AuthContext } from \"./provider\";\nimport type { AuthContextValue } from \"./types\";\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","// useAuth hook — auth state and methods\n\nimport type { LoginCredentials, SignupData } 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 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 return {\n user,\n isAuthenticated,\n isLoading,\n error,\n login,\n signup,\n clearError,\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"]}
|
|
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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atzentis/auth-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"description": "Atzentis Auth React — hooks and components for auth.atzentis.com",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"atzentis",
|
|
@@ -34,17 +34,33 @@
|
|
|
34
34
|
"LICENSE"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@
|
|
37
|
+
"@hookform/resolvers": "^3.9.0",
|
|
38
|
+
"react-hook-form": "^7.53.0",
|
|
39
|
+
"zod": "^3.23.0",
|
|
40
|
+
"@atzentis/auth-sdk": "0.0.14"
|
|
38
41
|
},
|
|
39
42
|
"peerDependencies": {
|
|
43
|
+
"@atzentis/ui-shadcn": ">=0.1.0",
|
|
44
|
+
"@atzentis/ui-shared": ">=0.1.0",
|
|
40
45
|
"react": ">=18.0.0",
|
|
41
46
|
"react-dom": ">=18.0.0"
|
|
42
47
|
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"@atzentis/ui-shadcn": {
|
|
50
|
+
"optional": true
|
|
51
|
+
},
|
|
52
|
+
"@atzentis/ui-shared": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
43
56
|
"devDependencies": {
|
|
57
|
+
"@testing-library/dom": "^10.4.1",
|
|
58
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
44
59
|
"@testing-library/react": "^16.3.2",
|
|
45
60
|
"@types/react": "^19.0.0",
|
|
46
61
|
"jsdom": "^28.0.0",
|
|
47
62
|
"react": "^19.0.0",
|
|
63
|
+
"react-dom": "^19.2.4",
|
|
48
64
|
"tsup": "^8.3.0",
|
|
49
65
|
"typescript": "^5.7.0",
|
|
50
66
|
"vitest": "^2.1.0"
|