@erikey/react 0.3.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/context/AuthUIProvider.tsx","../../src/ui/components/auth/SignInForm.tsx","../../src/ui/lib/validation.ts","../../src/ui/components/ui/Button.tsx","../../src/ui/lib/utils.ts","../../src/ui/components/ui/Input.tsx","../../src/ui/components/ui/Label.tsx","../../src/ui/components/ui/Checkbox.tsx","../../src/ui/components/ui/Separator.tsx","../../src/ui/components/auth/SocialAuthButtons.tsx","../../src/ui/components/auth/SignUpForm.tsx","../../src/ui/components/auth/ForgotPasswordForm.tsx","../../src/ui/components/auth/ResetPasswordForm.tsx","../../src/ui/components/auth/AuthCard.tsx","../../src/ui/components/ui/Card.tsx","../../src/ui/components/user/UserAvatar.tsx","../../src/ui/components/user/UserButton.tsx","../../src/ui/components/user/UserView.tsx","../../src/ui/components/user/SignedIn.tsx","../../src/ui/components/user/SignedOut.tsx","../../src/ui/components/user/RedirectToSignIn.tsx","../../src/ui/components/user/RedirectToSignUp.tsx","../../src/ui/components/settings/SettingsCards.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport type { AuthUIConfig, AuthUIContextValue, AuthViewPaths, LinkComponent } from '../lib/types';\n\n/**\n * Default auth view paths\n */\nconst DEFAULT_VIEW_PATHS: AuthViewPaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n forgotPassword: 'forgot-password',\n resetPassword: 'reset-password',\n twoFactor: 'two-factor',\n callback: 'callback',\n settings: 'settings',\n signOut: 'sign-out',\n};\n\n/**\n * Default Link component (plain anchor tag)\n */\nconst DefaultLink: LinkComponent = ({ href, children, className }) => (\n <a href={href} className={className}>\n {children}\n </a>\n);\n\n/**\n * Default navigation function\n */\nconst defaultNavigate = (href: string) => {\n if (typeof window !== 'undefined') {\n window.location.href = href;\n }\n};\n\n/**\n * Default toast function (console log fallback)\n */\nconst defaultToast = (options: { title?: string; description?: string; variant?: string }) => {\n if (options.variant === 'destructive') {\n console.error(options.title, options.description);\n } else {\n console.log(options.title, options.description);\n }\n};\n\n/**\n * Auth UI Context\n */\nconst AuthUIContext = createContext<AuthUIContextValue | null>(null);\n\n/**\n * Hook to access auth UI context\n */\nexport function useAuthUI(): AuthUIContextValue {\n const context = useContext(AuthUIContext);\n if (!context) {\n throw new Error('useAuthUI must be used within an AuthUIProvider');\n }\n return context;\n}\n\n/**\n * Props for AuthUIProvider\n */\nexport interface AuthUIProviderProps extends AuthUIConfig {\n children: ReactNode;\n}\n\n/**\n * Auth UI Provider\n *\n * Provides configuration and utilities to all auth UI components.\n *\n * @example\n * ```tsx\n * import { AuthUIProvider } from '@erikey/react/ui';\n * import { authClient } from './auth-client';\n *\n * function App() {\n * return (\n * <AuthUIProvider\n * authClient={authClient}\n * navigate={(href) => router.push(href)}\n * >\n * <YourApp />\n * </AuthUIProvider>\n * );\n * }\n * ```\n */\nexport function AuthUIProvider({\n children,\n authClient,\n basePath = '/auth',\n redirectTo = '/',\n navigate = defaultNavigate,\n Link = DefaultLink,\n providers = [],\n forgotPassword = true,\n nameRequired = true,\n confirmPassword = false,\n rememberMe = false,\n viewPaths,\n toast = defaultToast,\n onSessionChange,\n}: AuthUIProviderProps) {\n const value = useMemo<AuthUIContextValue>(\n () => ({\n authClient,\n basePath: basePath.replace(/\\/$/, ''), // Remove trailing slash\n redirectTo,\n navigate,\n Link,\n providers,\n forgotPassword,\n nameRequired,\n confirmPassword,\n rememberMe,\n viewPaths: { ...DEFAULT_VIEW_PATHS, ...viewPaths },\n toast,\n onSessionChange,\n }),\n [\n authClient,\n basePath,\n redirectTo,\n navigate,\n Link,\n providers,\n forgotPassword,\n nameRequired,\n confirmPassword,\n rememberMe,\n viewPaths,\n toast,\n onSessionChange,\n ]\n );\n\n return <AuthUIContext.Provider value={value}>{children}</AuthUIContext.Provider>;\n}\n\n// Re-export types for convenience\nexport type { AuthUIProviderProps as AuthProviderProps };\n","import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Loader2 } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { signInSchema, type SignInFormData } from '../../lib/validation';\nimport { Button } from '../ui/Button';\nimport { Input } from '../ui/Input';\nimport { Label } from '../ui/Label';\nimport { Checkbox } from '../ui/Checkbox';\nimport { Separator } from '../ui/Separator';\nimport { SocialAuthButtons } from './SocialAuthButtons';\nimport { cn } from '../../lib/utils';\n\nexport interface SignInFormProps {\n className?: string;\n /**\n * URL to redirect to after successful sign in\n */\n redirectTo?: string;\n /**\n * Callback after successful sign in\n */\n onSuccess?: () => void;\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Sign In Form Component\n *\n * A complete email/password sign in form with validation and error handling.\n *\n * @example\n * ```tsx\n * <SignInForm redirectTo=\"/dashboard\" />\n * ```\n */\nexport function SignInForm({ className, redirectTo, onSuccess, onError }: SignInFormProps) {\n const { authClient, navigate, Link, basePath, viewPaths, forgotPassword, rememberMe, toast, providers } =\n useAuthUI();\n const [isLoading, setIsLoading] = useState(false);\n\n const form = useForm<SignInFormData>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(signInSchema as any),\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n const onSubmit = async (data: SignInFormData) => {\n setIsLoading(true);\n try {\n const result = await authClient.signIn.email({\n email: data.email,\n password: data.password,\n rememberMe: data.rememberMe,\n });\n\n if (result.error) {\n const errorMessage = result.error.message || 'Sign in failed';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(new Error(errorMessage));\n form.setValue('password', '');\n return;\n }\n\n onSuccess?.();\n navigate(redirectTo || '/');\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Sign in failed';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n form.setValue('password', '');\n } finally {\n setIsLoading(false);\n }\n };\n\n const hasSocialProviders = providers && providers.length > 0;\n\n return (\n <div className={cn('grid gap-4', className)}>\n {hasSocialProviders && (\n <>\n <SocialAuthButtons mode=\"sign-in\" onSuccess={onSuccess} onError={onError} />\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <Separator className=\"w-full\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-background px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n </>\n )}\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"grid gap-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"name@example.com\"\n autoComplete=\"email\"\n disabled={isLoading}\n {...form.register('email')}\n />\n {form.formState.errors.email && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.email.message}</p>\n )}\n </div>\n\n <div className=\"grid gap-2\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"password\">Password</Label>\n {forgotPassword && (\n <Link\n href={`${basePath}/${viewPaths.forgotPassword}`}\n className=\"text-sm text-muted-foreground hover:text-primary\"\n >\n Forgot password?\n </Link>\n )}\n </div>\n <Input\n id=\"password\"\n type=\"password\"\n placeholder=\"Enter your password\"\n autoComplete=\"current-password\"\n disabled={isLoading}\n {...form.register('password')}\n />\n {form.formState.errors.password && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.password.message}</p>\n )}\n </div>\n\n {rememberMe && (\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"rememberMe\"\n checked={form.watch('rememberMe')}\n onCheckedChange={(checked) => form.setValue('rememberMe', checked === true)}\n disabled={isLoading}\n />\n <Label htmlFor=\"rememberMe\" className=\"text-sm font-normal cursor-pointer\">\n Remember me\n </Label>\n </div>\n )}\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoading}>\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n Sign In\n </Button>\n\n <p className=\"text-center text-sm text-muted-foreground\">\n Don&apos;t have an account?{' '}\n <Link href={`${basePath}/${viewPaths.signUp}`} className=\"text-primary hover:underline\">\n Sign up\n </Link>\n </p>\n </form>\n </div>\n );\n}\n","import { z } from 'zod';\n\n/**\n * Email validation schema\n */\nexport const emailSchema = z\n .string()\n .min(1, 'Email is required')\n .email('Please enter a valid email address');\n\n/**\n * Password validation schema with configurable constraints\n */\nexport function createPasswordSchema(options?: {\n minLength?: number;\n maxLength?: number;\n requireUppercase?: boolean;\n requireLowercase?: boolean;\n requireNumber?: boolean;\n requireSpecial?: boolean;\n}) {\n const {\n minLength = 8,\n maxLength = 128,\n requireUppercase = false,\n requireLowercase = false,\n requireNumber = false,\n requireSpecial = false,\n } = options || {};\n\n let schema = z\n .string()\n .min(1, 'Password is required')\n .min(minLength, `Password must be at least ${minLength} characters`)\n .max(maxLength, `Password must be less than ${maxLength} characters`);\n\n if (requireUppercase) {\n schema = schema.regex(/[A-Z]/, 'Password must contain an uppercase letter');\n }\n if (requireLowercase) {\n schema = schema.regex(/[a-z]/, 'Password must contain a lowercase letter');\n }\n if (requireNumber) {\n schema = schema.regex(/[0-9]/, 'Password must contain a number');\n }\n if (requireSpecial) {\n schema = schema.regex(/[^A-Za-z0-9]/, 'Password must contain a special character');\n }\n\n return schema;\n}\n\n/**\n * Default password schema (8 chars minimum)\n */\nexport const passwordSchema = createPasswordSchema();\n\n/**\n * Name validation schema\n */\nexport const nameSchema = z\n .string()\n .min(1, 'Name is required')\n .min(2, 'Name must be at least 2 characters')\n .max(100, 'Name must be less than 100 characters');\n\n/**\n * Sign in form schema\n */\nexport const signInSchema = z.object({\n email: emailSchema,\n password: z.string().min(1, 'Password is required'),\n rememberMe: z.boolean().optional(),\n});\n\nexport type SignInFormData = z.infer<typeof signInSchema>;\n\n/**\n * Sign up form schema\n */\nexport const signUpSchema = z.object({\n name: nameSchema,\n email: emailSchema,\n password: passwordSchema,\n});\n\nexport type SignUpFormData = z.infer<typeof signUpSchema>;\n\n/**\n * Sign up with confirm password schema\n */\nexport const signUpWithConfirmSchema = signUpSchema\n .extend({\n confirmPassword: z.string().min(1, 'Please confirm your password'),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: \"Passwords don't match\",\n path: ['confirmPassword'],\n });\n\nexport type SignUpWithConfirmFormData = z.infer<typeof signUpWithConfirmSchema>;\n\n/**\n * Forgot password form schema\n */\nexport const forgotPasswordSchema = z.object({\n email: emailSchema,\n});\n\nexport type ForgotPasswordFormData = z.infer<typeof forgotPasswordSchema>;\n\n/**\n * Reset password form schema\n */\nexport const resetPasswordSchema = z\n .object({\n password: passwordSchema,\n confirmPassword: z.string().min(1, 'Please confirm your password'),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: \"Passwords don't match\",\n path: ['confirmPassword'],\n });\n\nexport type ResetPasswordFormData = z.infer<typeof resetPasswordSchema>;\n\n/**\n * Two-factor authentication schema\n */\nexport const twoFactorSchema = z.object({\n code: z\n .string()\n .min(1, 'Code is required')\n .length(6, 'Code must be 6 digits')\n .regex(/^\\d+$/, 'Code must contain only numbers'),\n});\n\nexport type TwoFactorFormData = z.infer<typeof twoFactorSchema>;\n","import React, { forwardRef, type ButtonHTMLAttributes } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind CSS classes with proper precedence\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\nInput.displayName = 'Input';\n\nexport { Input };\n","import React, { forwardRef, type LabelHTMLAttributes } from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nconst Label = forwardRef<\n HTMLLabelElement,\n LabelHTMLAttributes<HTMLLabelElement> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import React, { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nconst Checkbox = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center text-current')}>\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import React, { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '../../lib/utils';\n\nconst Separator = forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import React, { useState } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { Button } from '../ui/Button';\nimport { cn } from '../../lib/utils';\nimport type { SocialProvider } from '../../lib/types';\n\n// Provider icons as simple SVGs\nconst GoogleIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n);\n\nconst GitHubIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\" />\n </svg>\n);\n\nconst DiscordIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z\" />\n </svg>\n);\n\nconst TwitterIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n);\n\nconst FacebookIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\" />\n </svg>\n);\n\nconst MicrosoftIcon = () => (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M11.4 24H0V12.6h11.4V24zM24 24H12.6V12.6H24V24zM11.4 11.4H0V0h11.4v11.4zm12.6 0H12.6V0H24v11.4z\" />\n </svg>\n);\n\nconst providerConfig: Record<SocialProvider, { icon: React.FC; label: string }> = {\n google: { icon: GoogleIcon, label: 'Google' },\n github: { icon: GitHubIcon, label: 'GitHub' },\n apple: { icon: AppleIcon, label: 'Apple' },\n discord: { icon: DiscordIcon, label: 'Discord' },\n twitter: { icon: TwitterIcon, label: 'X' },\n facebook: { icon: FacebookIcon, label: 'Facebook' },\n microsoft: { icon: MicrosoftIcon, label: 'Microsoft' },\n};\n\nexport interface SocialAuthButtonsProps {\n className?: string;\n /**\n * Mode affects the button text (\"Sign in with X\" vs \"Sign up with X\")\n */\n mode?: 'sign-in' | 'sign-up';\n /**\n * Called on successful OAuth\n */\n onSuccess?: () => void;\n /**\n * Called on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Social Auth Buttons Component\n *\n * Renders OAuth buttons for configured social providers.\n * Gets the list of providers from AuthUIContext.\n *\n * @example\n * ```tsx\n * <SocialAuthButtons mode=\"sign-in\" />\n * ```\n */\nexport function SocialAuthButtons({\n className,\n mode = 'sign-in',\n onSuccess,\n onError,\n}: SocialAuthButtonsProps) {\n const { authClient, providers, redirectTo, toast } = useAuthUI();\n const [loadingProvider, setLoadingProvider] = useState<SocialProvider | null>(null);\n\n if (!providers || providers.length === 0) {\n return null;\n }\n\n const handleSocialAuth = async (provider: SocialProvider) => {\n if (!authClient.signIn.social) {\n toast({ title: 'Error', description: 'Social sign in not available', variant: 'destructive' });\n return;\n }\n\n setLoadingProvider(provider);\n try {\n // better-auth social sign in - this redirects to the OAuth provider\n await authClient.signIn.social({\n provider,\n callbackURL: redirectTo || window.location.origin,\n });\n onSuccess?.();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Authentication failed';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n setLoadingProvider(null);\n }\n };\n\n const actionText = mode === 'sign-in' ? 'Sign in' : 'Sign up';\n\n return (\n <div className={cn('grid gap-2', className)}>\n {providers.map((provider) => {\n const config = providerConfig[provider];\n if (!config) return null;\n\n const Icon = config.icon;\n const isLoading = loadingProvider === provider;\n\n return (\n <Button\n key={provider}\n type=\"button\"\n variant=\"outline\"\n className=\"w-full\"\n disabled={loadingProvider !== null}\n onClick={() => handleSocialAuth(provider)}\n >\n {isLoading ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Icon />\n )}\n <span className=\"ml-2\">\n {actionText} with {config.label}\n </span>\n </Button>\n );\n })}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Loader2 } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport {\n signUpSchema,\n signUpWithConfirmSchema,\n type SignUpFormData,\n type SignUpWithConfirmFormData,\n} from '../../lib/validation';\nimport { Button } from '../ui/Button';\nimport { Input } from '../ui/Input';\nimport { Label } from '../ui/Label';\nimport { Separator } from '../ui/Separator';\nimport { SocialAuthButtons } from './SocialAuthButtons';\nimport { cn } from '../../lib/utils';\n\nexport interface SignUpFormProps {\n className?: string;\n /**\n * URL to redirect to after successful sign up\n */\n redirectTo?: string;\n /**\n * Callback after successful sign up\n */\n onSuccess?: () => void;\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Sign Up Form Component\n *\n * A complete email/password sign up form with validation and error handling.\n *\n * @example\n * ```tsx\n * <SignUpForm redirectTo=\"/onboarding\" />\n * ```\n */\nexport function SignUpForm({ className, redirectTo, onSuccess, onError }: SignUpFormProps) {\n const {\n authClient,\n navigate,\n Link,\n basePath,\n viewPaths,\n nameRequired,\n confirmPassword: showConfirmPassword,\n toast,\n providers,\n } = useAuthUI();\n const [isLoading, setIsLoading] = useState(false);\n\n const schema = showConfirmPassword ? signUpWithConfirmSchema : signUpSchema;\n type FormData = typeof showConfirmPassword extends true\n ? SignUpWithConfirmFormData\n : SignUpFormData;\n\n const form = useForm<FormData>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n defaultValues: {\n name: '',\n email: '',\n password: '',\n ...(showConfirmPassword ? { confirmPassword: '' } : {}),\n } as FormData,\n });\n\n const onSubmit = async (data: FormData) => {\n setIsLoading(true);\n try {\n const result = await authClient.signUp.email({\n name: data.name,\n email: data.email,\n password: data.password,\n });\n\n if (result.error) {\n const errorMessage = result.error.message || 'Sign up failed';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(new Error(errorMessage));\n return;\n }\n\n toast({ title: 'Success', description: 'Account created successfully!' });\n onSuccess?.();\n navigate(redirectTo || '/');\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Sign up failed';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n };\n\n const hasSocialProviders = providers && providers.length > 0;\n\n return (\n <div className={cn('grid gap-4', className)}>\n {hasSocialProviders && (\n <>\n <SocialAuthButtons mode=\"sign-up\" onSuccess={onSuccess} onError={onError} />\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <Separator className=\"w-full\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-background px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n </>\n )}\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"grid gap-4\">\n {nameRequired && (\n <div className=\"grid gap-2\">\n <Label htmlFor=\"name\">Name</Label>\n <Input\n id=\"name\"\n type=\"text\"\n placeholder=\"John Doe\"\n autoComplete=\"name\"\n disabled={isLoading}\n {...form.register('name')}\n />\n {form.formState.errors.name && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.name.message}</p>\n )}\n </div>\n )}\n\n <div className=\"grid gap-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"name@example.com\"\n autoComplete=\"email\"\n disabled={isLoading}\n {...form.register('email')}\n />\n {form.formState.errors.email && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.email.message}</p>\n )}\n </div>\n\n <div className=\"grid gap-2\">\n <Label htmlFor=\"password\">Password</Label>\n <Input\n id=\"password\"\n type=\"password\"\n placeholder=\"Create a password\"\n autoComplete=\"new-password\"\n disabled={isLoading}\n {...form.register('password')}\n />\n {form.formState.errors.password && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.password.message}</p>\n )}\n </div>\n\n {showConfirmPassword && (\n <div className=\"grid gap-2\">\n <Label htmlFor=\"confirmPassword\">Confirm Password</Label>\n <Input\n id=\"confirmPassword\"\n type=\"password\"\n placeholder=\"Confirm your password\"\n autoComplete=\"new-password\"\n disabled={isLoading}\n {...form.register('confirmPassword' as keyof FormData)}\n />\n {(form.formState.errors as any).confirmPassword && (\n <p className=\"text-sm text-destructive\">\n {(form.formState.errors as any).confirmPassword.message}\n </p>\n )}\n </div>\n )}\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoading}>\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n Create Account\n </Button>\n\n <p className=\"text-center text-sm text-muted-foreground\">\n Already have an account?{' '}\n <Link href={`${basePath}/${viewPaths.signIn}`} className=\"text-primary hover:underline\">\n Sign in\n </Link>\n </p>\n </form>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Loader2, ArrowLeft } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { forgotPasswordSchema, type ForgotPasswordFormData } from '../../lib/validation';\nimport { Button } from '../ui/Button';\nimport { Input } from '../ui/Input';\nimport { Label } from '../ui/Label';\nimport { cn } from '../../lib/utils';\n\nexport interface ForgotPasswordFormProps {\n className?: string;\n /**\n * Callback after successful password reset request\n */\n onSuccess?: () => void;\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Forgot Password Form Component\n *\n * Allows users to request a password reset link.\n *\n * @example\n * ```tsx\n * <ForgotPasswordForm />\n * ```\n */\nexport function ForgotPasswordForm({ className, onSuccess, onError }: ForgotPasswordFormProps) {\n const { authClient, Link, basePath, viewPaths, toast } = useAuthUI();\n const [isLoading, setIsLoading] = useState(false);\n const [isSubmitted, setIsSubmitted] = useState(false);\n\n const form = useForm<ForgotPasswordFormData>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(forgotPasswordSchema as any),\n defaultValues: {\n email: '',\n },\n });\n\n const onSubmit = async (data: ForgotPasswordFormData) => {\n setIsLoading(true);\n try {\n if (authClient.forgetPassword) {\n const result = await authClient.forgetPassword({\n email: data.email,\n redirectTo: `${window.location.origin}${basePath}/${viewPaths.resetPassword}`,\n });\n\n if (result.error) {\n const errorMessage = result.error.message || 'Failed to send reset email';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(new Error(errorMessage));\n return;\n }\n }\n\n setIsSubmitted(true);\n toast({\n title: 'Check your email',\n description: 'We sent you a password reset link.',\n });\n onSuccess?.();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to send reset email';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isSubmitted) {\n return (\n <div className={cn('grid gap-4 text-center', className)}>\n <div className=\"space-y-2\">\n <h3 className=\"text-lg font-medium\">Check your email</h3>\n <p className=\"text-sm text-muted-foreground\">\n We sent a password reset link to{' '}\n <span className=\"font-medium\">{form.getValues('email')}</span>\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => setIsSubmitted(false)}>\n Try another email\n </Button>\n <Link\n href={`${basePath}/${viewPaths.signIn}`}\n className=\"text-sm text-muted-foreground hover:text-primary inline-flex items-center justify-center gap-1\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to sign in\n </Link>\n </div>\n );\n }\n\n return (\n <form onSubmit={form.handleSubmit(onSubmit)} className={cn('grid gap-4', className)}>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-lg font-medium\">Forgot your password?</h3>\n <p className=\"text-sm text-muted-foreground\">\n Enter your email and we&apos;ll send you a reset link.\n </p>\n </div>\n\n <div className=\"grid gap-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"name@example.com\"\n autoComplete=\"email\"\n disabled={isLoading}\n {...form.register('email')}\n />\n {form.formState.errors.email && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.email.message}</p>\n )}\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoading}>\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n Send Reset Link\n </Button>\n\n <Link\n href={`${basePath}/${viewPaths.signIn}`}\n className=\"text-sm text-center text-muted-foreground hover:text-primary inline-flex items-center justify-center gap-1\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to sign in\n </Link>\n </form>\n );\n}\n","import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Loader2, CheckCircle } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { resetPasswordSchema, type ResetPasswordFormData } from '../../lib/validation';\nimport { Button } from '../ui/Button';\nimport { Input } from '../ui/Input';\nimport { Label } from '../ui/Label';\nimport { cn } from '../../lib/utils';\n\nexport interface ResetPasswordFormProps {\n className?: string;\n /**\n * Reset token from URL\n */\n token?: string;\n /**\n * Callback after successful password reset\n */\n onSuccess?: () => void;\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Reset Password Form Component\n *\n * Allows users to set a new password using a reset token.\n *\n * @example\n * ```tsx\n * <ResetPasswordForm token={tokenFromUrl} />\n * ```\n */\nexport function ResetPasswordForm({\n className,\n token,\n onSuccess,\n onError,\n}: ResetPasswordFormProps) {\n const { authClient, navigate, basePath, viewPaths, toast } = useAuthUI();\n const [isLoading, setIsLoading] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const form = useForm<ResetPasswordFormData>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(resetPasswordSchema as any),\n defaultValues: {\n password: '',\n confirmPassword: '',\n },\n });\n\n const onSubmit = async (data: ResetPasswordFormData) => {\n setIsLoading(true);\n try {\n if (authClient.resetPassword) {\n const result = await authClient.resetPassword({\n newPassword: data.password,\n token,\n });\n\n if (result.error) {\n const errorMessage = result.error.message || 'Failed to reset password';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(new Error(errorMessage));\n return;\n }\n }\n\n setIsSuccess(true);\n toast({\n title: 'Password reset',\n description: 'Your password has been reset successfully.',\n });\n onSuccess?.();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to reset password';\n toast({ title: 'Error', description: errorMessage, variant: 'destructive' });\n onError?.(error instanceof Error ? error : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isSuccess) {\n return (\n <div className={cn('grid gap-4 text-center', className)}>\n <div className=\"flex justify-center\">\n <CheckCircle className=\"h-12 w-12 text-green-500\" />\n </div>\n <div className=\"space-y-2\">\n <h3 className=\"text-lg font-medium\">Password reset successful</h3>\n <p className=\"text-sm text-muted-foreground\">\n Your password has been reset. You can now sign in with your new password.\n </p>\n </div>\n <Button onClick={() => navigate(`${basePath}/${viewPaths.signIn}`)}>\n Sign in\n </Button>\n </div>\n );\n }\n\n return (\n <form onSubmit={form.handleSubmit(onSubmit)} className={cn('grid gap-4', className)}>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-lg font-medium\">Reset your password</h3>\n <p className=\"text-sm text-muted-foreground\">Enter your new password below.</p>\n </div>\n\n <div className=\"grid gap-2\">\n <Label htmlFor=\"password\">New Password</Label>\n <Input\n id=\"password\"\n type=\"password\"\n placeholder=\"Enter new password\"\n autoComplete=\"new-password\"\n disabled={isLoading}\n {...form.register('password')}\n />\n {form.formState.errors.password && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.password.message}</p>\n )}\n </div>\n\n <div className=\"grid gap-2\">\n <Label htmlFor=\"confirmPassword\">Confirm Password</Label>\n <Input\n id=\"confirmPassword\"\n type=\"password\"\n placeholder=\"Confirm new password\"\n autoComplete=\"new-password\"\n disabled={isLoading}\n {...form.register('confirmPassword')}\n />\n {form.formState.errors.confirmPassword && (\n <p className=\"text-sm text-destructive\">\n {form.formState.errors.confirmPassword.message}\n </p>\n )}\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoading}>\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n Reset Password\n </Button>\n </form>\n );\n}\n","import React from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/Card';\nimport { SignInForm } from './SignInForm';\nimport { SignUpForm } from './SignUpForm';\nimport { ForgotPasswordForm } from './ForgotPasswordForm';\nimport { ResetPasswordForm } from './ResetPasswordForm';\nimport { cn } from '../../lib/utils';\n\nexport type AuthView = 'sign-in' | 'sign-up' | 'forgot-password' | 'reset-password';\n\nexport interface AuthCardProps {\n className?: string;\n /**\n * The auth view to display\n */\n view?: AuthView;\n /**\n * The current pathname (alternative to view prop)\n * Will be parsed to determine the view\n */\n pathname?: string;\n /**\n * URL to redirect to after successful auth\n */\n redirectTo?: string;\n /**\n * Reset token for password reset view\n */\n resetToken?: string;\n /**\n * Callback after successful auth action\n */\n onSuccess?: () => void;\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Auth Card Component\n *\n * A router component that displays the appropriate auth form based on\n * the current view or pathname.\n *\n * @example\n * ```tsx\n * // Using view prop\n * <AuthCard view=\"sign-in\" />\n *\n * // Using pathname (parsed from URL)\n * <AuthCard pathname=\"/auth/sign-up\" />\n * ```\n */\nexport function AuthCard({\n className,\n view,\n pathname,\n redirectTo,\n resetToken,\n onSuccess,\n onError,\n}: AuthCardProps) {\n const { viewPaths } = useAuthUI();\n\n // Determine the current view from pathname if view not provided\n const currentView = view || parsePathname(pathname, viewPaths);\n\n const getTitle = () => {\n switch (currentView) {\n case 'sign-in':\n return 'Welcome back';\n case 'sign-up':\n return 'Create an account';\n case 'forgot-password':\n return 'Reset password';\n case 'reset-password':\n return 'Set new password';\n default:\n return 'Authentication';\n }\n };\n\n const getDescription = () => {\n switch (currentView) {\n case 'sign-in':\n return 'Enter your credentials to sign in';\n case 'sign-up':\n return 'Enter your information to get started';\n case 'forgot-password':\n return 'We\\'ll send you a reset link';\n case 'reset-password':\n return 'Choose a new secure password';\n default:\n return '';\n }\n };\n\n const renderForm = () => {\n switch (currentView) {\n case 'sign-in':\n return <SignInForm redirectTo={redirectTo} onSuccess={onSuccess} onError={onError} />;\n case 'sign-up':\n return <SignUpForm redirectTo={redirectTo} onSuccess={onSuccess} onError={onError} />;\n case 'forgot-password':\n return <ForgotPasswordForm onSuccess={onSuccess} onError={onError} />;\n case 'reset-password':\n return (\n <ResetPasswordForm token={resetToken} onSuccess={onSuccess} onError={onError} />\n );\n default:\n return <SignInForm redirectTo={redirectTo} onSuccess={onSuccess} onError={onError} />;\n }\n };\n\n return (\n <Card className={cn('w-full max-w-md mx-auto', className)}>\n <CardHeader className=\"text-center\">\n <CardTitle className=\"text-2xl\">{getTitle()}</CardTitle>\n <CardDescription>{getDescription()}</CardDescription>\n </CardHeader>\n <CardContent>{renderForm()}</CardContent>\n </Card>\n );\n}\n\n/**\n * Parse pathname to determine auth view\n */\nfunction parsePathname(\n pathname: string | undefined,\n viewPaths: { signIn: string; signUp: string; forgotPassword: string; resetPassword: string }\n): AuthView {\n if (!pathname) return 'sign-in';\n\n const path = pathname.split('/').pop() || '';\n\n if (path === viewPaths.signIn || path === 'sign-in' || path === 'signin') {\n return 'sign-in';\n }\n if (path === viewPaths.signUp || path === 'sign-up' || path === 'signup') {\n return 'sign-up';\n }\n if (path === viewPaths.forgotPassword || path === 'forgot-password') {\n return 'forgot-password';\n }\n if (path === viewPaths.resetPassword || path === 'reset-password') {\n return 'reset-password';\n }\n\n return 'sign-in';\n}\n\n// Also export as AuthForm for compatibility\nexport { AuthCard as AuthForm };\n","import React, { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nconst Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border bg-card text-card-foreground shadow', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import React, { forwardRef } from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '../../lib/utils';\n\nexport interface UserAvatarProps {\n className?: string;\n /**\n * User's profile image URL\n */\n src?: string | null;\n /**\n * User's name (used for fallback initials)\n */\n name?: string | null;\n /**\n * User's email (used for fallback if no name)\n */\n email?: string | null;\n /**\n * Size of the avatar\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeClasses = {\n sm: 'h-8 w-8 text-xs',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n};\n\n/**\n * Get initials from name or email\n */\nfunction getInitials(name?: string | null, email?: string | null): string {\n if (name) {\n const parts = name.trim().split(' ');\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n }\n if (email) {\n return email.slice(0, 2).toUpperCase();\n }\n return 'U';\n}\n\n/**\n * User Avatar Component\n *\n * Displays a user's profile picture with fallback to initials.\n *\n * @example\n * ```tsx\n * <UserAvatar src={user.image} name={user.name} />\n * ```\n */\nexport const UserAvatar = forwardRef<HTMLSpanElement, UserAvatarProps>(\n ({ className, src, name, email, size = 'md' }, ref) => {\n const initials = getInitials(name, email);\n\n return (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n 'relative flex shrink-0 overflow-hidden rounded-full',\n sizeClasses[size],\n className\n )}\n >\n {src && (\n <AvatarPrimitive.Image\n src={src}\n alt={name || email || 'User avatar'}\n className=\"aspect-square h-full w-full object-cover\"\n />\n )}\n <AvatarPrimitive.Fallback\n className=\"flex h-full w-full items-center justify-center rounded-full bg-muted font-medium\"\n delayMs={src ? 600 : 0}\n >\n {initials}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n );\n }\n);\nUserAvatar.displayName = 'UserAvatar';\n","import React, { useState } from 'react';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { LogOut, Settings, User } from 'lucide-react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { UserAvatar } from './UserAvatar';\nimport { cn } from '../../lib/utils';\n\nexport interface UserButtonProps {\n className?: string;\n /**\n * Show settings link in dropdown\n * @default true\n */\n showSettings?: boolean;\n /**\n * Custom settings URL\n */\n settingsUrl?: string;\n}\n\n/**\n * User Button Component\n *\n * A dropdown button showing the user's avatar with sign out and settings options.\n *\n * @example\n * ```tsx\n * <UserButton />\n * ```\n */\nexport function UserButton({ className, showSettings = true, settingsUrl }: UserButtonProps) {\n const { authClient, navigate, basePath, viewPaths, toast, onSessionChange } = useAuthUI();\n const { data: session, isPending } = authClient.useSession();\n const [isSigningOut, setIsSigningOut] = useState(false);\n\n const handleSignOut = async () => {\n setIsSigningOut(true);\n try {\n await authClient.signOut();\n toast({ title: 'Signed out', description: 'You have been signed out.' });\n await onSessionChange?.();\n navigate(`${basePath}/${viewPaths.signIn}`);\n } catch (error) {\n toast({\n title: 'Error',\n description: 'Failed to sign out. Please try again.',\n variant: 'destructive',\n });\n } finally {\n setIsSigningOut(false);\n }\n };\n\n if (isPending) {\n return (\n <div className={cn('h-10 w-10 rounded-full bg-muted animate-pulse', className)} />\n );\n }\n\n if (!session?.user) {\n return null;\n }\n\n const user = session.user;\n const effectiveSettingsUrl = settingsUrl || `${basePath}/${viewPaths.settings}`;\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n className={cn(\n 'flex items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n className\n )}\n >\n <UserAvatar\n src={user.image}\n name={user.name}\n email={user.email}\n size=\"md\"\n />\n </button>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[200px] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"end\"\n >\n <div className=\"px-2 py-1.5 text-sm\">\n <p className=\"font-medium\">{user.name || 'User'}</p>\n <p className=\"text-xs text-muted-foreground\">{user.email}</p>\n </div>\n\n <DropdownMenu.Separator className=\"my-1 h-px bg-border\" />\n\n {showSettings && (\n <DropdownMenu.Item\n className=\"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground\"\n onSelect={() => navigate(effectiveSettingsUrl)}\n >\n <Settings className=\"mr-2 h-4 w-4\" />\n Settings\n </DropdownMenu.Item>\n )}\n\n <DropdownMenu.Item\n className=\"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground text-destructive focus:text-destructive\"\n onSelect={handleSignOut}\n disabled={isSigningOut}\n >\n <LogOut className=\"mr-2 h-4 w-4\" />\n {isSigningOut ? 'Signing out...' : 'Sign out'}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n","import React from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\nimport { UserAvatar } from './UserAvatar';\nimport { cn } from '../../lib/utils';\n\nexport interface UserViewProps {\n className?: string;\n /**\n * Show user's email\n * @default true\n */\n showEmail?: boolean;\n}\n\n/**\n * User View Component\n *\n * Displays the current user's avatar and information.\n *\n * @example\n * ```tsx\n * <UserView />\n * ```\n */\nexport function UserView({ className, showEmail = true }: UserViewProps) {\n const { authClient } = useAuthUI();\n const { data: session, isPending } = authClient.useSession();\n\n if (isPending) {\n return (\n <div className={cn('flex items-center gap-3', className)}>\n <div className=\"h-10 w-10 rounded-full bg-muted animate-pulse\" />\n <div className=\"space-y-1\">\n <div className=\"h-4 w-24 bg-muted animate-pulse rounded\" />\n {showEmail && <div className=\"h-3 w-32 bg-muted animate-pulse rounded\" />}\n </div>\n </div>\n );\n }\n\n if (!session?.user) {\n return null;\n }\n\n const user = session.user;\n\n return (\n <div className={cn('flex items-center gap-3', className)}>\n <UserAvatar src={user.image} name={user.name} email={user.email} size=\"md\" />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{user.name || 'User'}</span>\n {showEmail && user.email && (\n <span className=\"text-xs text-muted-foreground\">{user.email}</span>\n )}\n </div>\n </div>\n );\n}\n","import React, { type ReactNode } from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\n\nexport interface SignedInProps {\n children: ReactNode;\n /**\n * Fallback to show while session is loading\n */\n fallback?: ReactNode;\n}\n\n/**\n * Signed In Component\n *\n * Only renders children when the user is authenticated.\n *\n * @example\n * ```tsx\n * <SignedIn>\n * <p>Welcome back!</p>\n * <UserButton />\n * </SignedIn>\n * ```\n */\nexport function SignedIn({ children, fallback = null }: SignedInProps) {\n const { authClient } = useAuthUI();\n const { data: session, isPending } = authClient.useSession();\n\n if (isPending) {\n return <>{fallback}</>;\n }\n\n if (!session?.user) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import React, { type ReactNode } from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\n\nexport interface SignedOutProps {\n children: ReactNode;\n /**\n * Fallback to show while session is loading\n */\n fallback?: ReactNode;\n}\n\n/**\n * Signed Out Component\n *\n * Only renders children when the user is NOT authenticated.\n *\n * @example\n * ```tsx\n * <SignedOut>\n * <Link href=\"/auth/sign-in\">Sign In</Link>\n * </SignedOut>\n * ```\n */\nexport function SignedOut({ children, fallback = null }: SignedOutProps) {\n const { authClient } = useAuthUI();\n const { data: session, isPending } = authClient.useSession();\n\n // Show children during loading - better UX than hiding everything\n // Users can see and click Sign in/Sign up while session loads\n if (isPending) {\n return <>{children}</>;\n }\n\n if (session?.user) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import React, { useEffect } from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\n\nexport interface RedirectToSignInProps {\n /**\n * Custom redirect URL\n */\n redirectTo?: string;\n}\n\n/**\n * Redirect to Sign In Component\n *\n * Redirects unauthenticated users to the sign in page.\n *\n * @example\n * ```tsx\n * <SignedOut>\n * <RedirectToSignIn />\n * </SignedOut>\n * ```\n */\nexport function RedirectToSignIn({ redirectTo }: RedirectToSignInProps) {\n const { navigate, basePath, viewPaths } = useAuthUI();\n\n useEffect(() => {\n const url = redirectTo || `${basePath}/${viewPaths.signIn}`;\n navigate(url);\n }, [navigate, basePath, viewPaths.signIn, redirectTo]);\n\n return null;\n}\n","import React, { useEffect } from 'react';\nimport { useAuthUI } from '../../context/AuthUIProvider';\n\nexport interface RedirectToSignUpProps {\n /**\n * Custom redirect URL\n */\n redirectTo?: string;\n}\n\n/**\n * Redirect to Sign Up Component\n *\n * Redirects users to the sign up page.\n *\n * @example\n * ```tsx\n * <RedirectToSignUp />\n * ```\n */\nexport function RedirectToSignUp({ redirectTo }: RedirectToSignUpProps) {\n const { navigate, basePath, viewPaths } = useAuthUI();\n\n useEffect(() => {\n const url = redirectTo || `${basePath}/${viewPaths.signUp}`;\n navigate(url);\n }, [navigate, basePath, viewPaths.signUp, redirectTo]);\n\n return null;\n}\n","import React, { type ReactNode } from 'react';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/Card';\nimport { cn } from '../../lib/utils';\n\nexport interface SettingsCardProps {\n className?: string;\n title: string;\n description?: string;\n children: ReactNode;\n}\n\n/**\n * Settings Card Component\n *\n * A card wrapper for settings sections.\n *\n * @example\n * ```tsx\n * <SettingsCard title=\"Profile\" description=\"Manage your profile settings\">\n * <form>...</form>\n * </SettingsCard>\n * ```\n */\nexport function SettingsCard({ className, title, description, children }: SettingsCardProps) {\n return (\n <Card className={cn('', className)}>\n <CardHeader>\n <CardTitle>{title}</CardTitle>\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n <CardContent>{children}</CardContent>\n </Card>\n );\n}\n\nexport interface SettingsCardsProps {\n className?: string;\n children: ReactNode;\n}\n\n/**\n * Settings Cards Container\n *\n * A container for multiple settings cards.\n *\n * @example\n * ```tsx\n * <SettingsCards>\n * <SettingsCard title=\"Profile\">...</SettingsCard>\n * <SettingsCard title=\"Security\">...</SettingsCard>\n * </SettingsCards>\n * ```\n */\nexport function SettingsCards({ className, children }: SettingsCardsProps) {\n return <div className={cn('space-y-6', className)}>{children}</div>;\n}\n"],"mappings":"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","names":["React","useState","Loader2","React","React","React","forwardRef","forwardRef","React","React","forwardRef","cva","cva","forwardRef","React","React","forwardRef","forwardRef","React","React","forwardRef","forwardRef","React","React","React","useState","React","Loader2","React","useState","useForm","zodResolver","Loader2","useState","useForm","zodResolver","React","Loader2","React","useState","useForm","zodResolver","Loader2","useState","useForm","zodResolver","React","Loader2","React","useState","useForm","zodResolver","Loader2","useState","useForm","zodResolver","React","Loader2","React","React","forwardRef","forwardRef","React","React","React","forwardRef","forwardRef","React","React","useState","useState","React","React","React","React","React","React","React","useEffect","useEffect","React","React"]}
1
+ {"version":3,"sources":["../../src/ui/components/account/account-view.tsx","../../src/ui/hooks/use-authenticate.ts","../../src/ui/lib/auth-ui-provider.tsx","../../src/ui/components/captcha/recaptcha-v3.tsx","../../src/ui/hooks/use-hydrated.ts","../../src/ui/hooks/use-lang.ts","../../src/ui/hooks/use-theme.ts","../../src/ui/hooks/use-auth-data.ts","../../src/ui/lib/auth-data-cache.ts","../../src/ui/lib/utils.ts","../../src/ui/localization/admin-error-codes.ts","../../src/ui/localization/anonymous-error-codes.ts","../../src/ui/localization/api-key-error-codes.ts","../../src/ui/localization/base-error-codes.ts","../../src/ui/localization/captcha-error-codes.ts","../../src/ui/localization/email-otp-error-codes.ts","../../src/ui/localization/generic-oauth-error-codes.ts","../../src/ui/localization/haveibeenpwned-error-codes.ts","../../src/ui/localization/multi-session-error-codes.ts","../../src/ui/localization/organization-error-codes.ts","../../src/ui/localization/passkey-error-codes.ts","../../src/ui/localization/phone-number-error-codes.ts","../../src/ui/localization/stripe-localization.ts","../../src/ui/localization/team-error-codes.ts","../../src/ui/localization/two-factor-error-codes.ts","../../src/ui/localization/username-error-codes.ts","../../src/ui/localization/auth-localization.ts","../../src/ui/lib/organization-refetcher.tsx","../../src/ui/hooks/use-current-organization.ts","../../src/ui/lib/view-paths.ts","../../src/ui/components/organization/organizations-card.tsx","../../src/ui/components/ui/card.tsx","../../src/ui/components/ui/skeleton.tsx","../../src/ui/components/settings/shared/settings-action-button.tsx","../../src/ui/components/ui/button.tsx","../../src/ui/components/settings/shared/settings-card-footer.tsx","../../src/ui/components/settings/shared/settings-card-header.tsx","../../src/ui/components/settings/shared/settings-card.tsx","../../src/ui/components/settings/skeletons/settings-cell-skeleton.tsx","../../src/ui/components/organization/create-organization-dialog.tsx","../../src/ui/lib/image-utils.ts","../../src/ui/components/ui/dialog.tsx","../../src/ui/components/ui/dropdown-menu.tsx","../../src/ui/components/ui/form.tsx","../../src/ui/components/ui/label.tsx","../../src/ui/components/ui/input.tsx","../../src/ui/components/organization/organization-logo.tsx","../../src/ui/components/ui/avatar.tsx","../../src/ui/components/organization/organization-cell.tsx","../../src/ui/components/organization/leave-organization-dialog.tsx","../../src/ui/components/organization/organization-cell-view.tsx","../../src/ui/components/organization/user-invitations-card.tsx","../../src/ui/components/user-avatar.tsx","../../src/ui/lib/gravatar-utils.ts","../../src/ui/components/settings/account-settings-cards.tsx","../../src/ui/components/settings/account/accounts-card.tsx","../../src/ui/components/settings/account/account-cell.tsx","../../src/ui/components/user-view.tsx","../../src/ui/components/settings/account/update-avatar-card.tsx","../../src/ui/components/settings/account/update-field-card.tsx","../../src/ui/components/ui/checkbox.tsx","../../src/ui/components/ui/textarea.tsx","../../src/ui/components/settings/account/update-name-card.tsx","../../src/ui/components/settings/account/update-username-card.tsx","../../src/ui/components/settings/security/change-email-card.tsx","../../src/ui/components/settings/api-key/api-keys-card.tsx","../../src/ui/components/settings/api-key/api-key-cell.tsx","../../src/ui/components/settings/api-key/api-key-delete-dialog.tsx","../../src/ui/components/settings/api-key/api-key-display-dialog.tsx","../../src/ui/components/settings/api-key/create-api-key-dialog.tsx","../../src/ui/components/organization/personal-account-view.tsx","../../src/ui/components/ui/select.tsx","../../src/ui/components/settings/security-settings-cards.tsx","../../src/ui/components/settings/account/delete-account-card.tsx","../../src/ui/components/settings/account/delete-account-dialog.tsx","../../src/ui/components/settings/passkey/passkeys-card.tsx","../../src/ui/components/settings/shared/session-freshness-dialog.tsx","../../src/ui/components/settings/passkey/passkey-cell.tsx","../../src/ui/components/settings/providers/providers-card.tsx","../../src/ui/components/provider-icons.tsx","../../src/ui/lib/social-providers.ts","../../src/ui/components/settings/providers/provider-cell.tsx","../../src/ui/components/settings/security/change-password-card.tsx","../../src/ui/components/password-input.tsx","../../src/ui/components/settings/skeletons/input-field-skeleton.tsx","../../src/ui/components/settings/security/sessions-card.tsx","../../src/ui/components/settings/security/session-cell.tsx","../../src/ui/components/settings/two-factor/two-factor-card.tsx","../../src/ui/components/settings/two-factor/two-factor-password-dialog.tsx","../../src/ui/components/settings/two-factor/backup-codes-dialog.tsx","../../src/ui/components/settings/teams/user-teams-card.tsx","../../src/ui/components/settings/teams/user-team-cell.tsx","../../src/ui/types/auth-client.ts","../../../../../node_modules/.pnpm/@better-auth+core@1.4.10_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.21_better-call@1.1._s4ptmt7cznbdkhj2rfry3i4hxy/node_modules/@better-auth/core/dist/env-DbssmzoK.mjs","../../../../../node_modules/.pnpm/@better-auth+core@1.4.10_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.21_better-call@1.1._s4ptmt7cznbdkhj2rfry3i4hxy/node_modules/@better-auth/core/dist/utils-NloIXYE0.mjs","../../../../../node_modules/.pnpm/@better-auth+core@1.4.10_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.21_better-call@1.1._s4ptmt7cznbdkhj2rfry3i4hxy/node_modules/@better-auth/core/dist/error-RtKwr3Pu.mjs","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/access/access.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/admin/access/statement.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/anonymous/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/api-key/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/email-otp/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/generic-oauth/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/magic-link/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/multi-session/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/one-tap/client.ts","../../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js","../../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js","../../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/lifecycle/index.js","../../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/listen-keys/index.js","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/query.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/broadcast-channel.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/focus-manager.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/online-manager.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/session-refresh.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/utils/url.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/fetch-plugins.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/parser.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/session-atom.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/config.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/utils/is-atom.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/proxy.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/organization/access/statement.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/organization/permission.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/organization/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/two-factor/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/plugins/username/client.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/react/react-store.ts","../../../../../node_modules/.pnpm/better-auth@1.4.10_drizzle-kit@0.31.8_drizzle-orm@0.45.1_@cloudflare+workers-types@4.20251119_hirg525kbrpwuqvxcih3czaike/node_modules/better-auth/src/client/react/index.ts","../../src/ui/components/ui/drawer.tsx","../../src/ui/components/auth/auth-callback.tsx","../../src/ui/hooks/use-success-transition.ts","../../src/ui/components/auth/auth-form.tsx","../../src/ui/components/auth/forms/email-otp-form.tsx","../../src/ui/hooks/use-captcha.tsx","../../src/ui/components/captcha/captcha.tsx","../../src/ui/components/captcha/recaptcha-badge.tsx","../../src/ui/components/captcha/recaptcha-v2.tsx","../../src/ui/components/ui/input-otp.tsx","../../src/ui/components/auth/otp-input-group.tsx","../../src/ui/components/auth/forms/email-verification-form.tsx","../../src/ui/components/auth/forms/forgot-password-form.tsx","../../src/ui/components/auth/forms/magic-link-form.tsx","../../src/ui/components/auth/forms/recover-account-form.tsx","../../src/ui/components/auth/forms/reset-password-form.tsx","../../src/ui/components/auth/forms/sign-in-form.tsx","../../src/ui/components/auth/forms/sign-up-form.tsx","../../src/ui/components/auth/forms/two-factor-form.tsx","../../src/ui/components/auth/sign-out.tsx","../../src/ui/components/auth/auth-view.tsx","../../src/ui/components/organization/accept-invitation-card.tsx","../../src/ui/components/ui/separator.tsx","../../src/ui/components/auth/email-otp-button.tsx","../../src/ui/components/auth/magic-link-button.tsx","../../src/ui/components/auth/one-tap.tsx","../../src/ui/components/auth/passkey-button.tsx","../../src/ui/components/auth/provider-button.tsx","../../src/ui/components/auth-loading.tsx","../../src/ui/components/organization/create-team-dialog.tsx","../../src/ui/components/organization/delete-organization-card.tsx","../../src/ui/components/organization/delete-organization-dialog.tsx","../../src/ui/components/organization/delete-team-dialog.tsx","../../src/ui/components/organization/organization-invitations-card.tsx","../../src/ui/components/organization/invitation-cell.tsx","../../src/ui/components/organization/organization-logo-card.tsx","../../src/ui/components/organization/organization-members-card.tsx","../../src/ui/components/organization/invite-member-dialog.tsx","../../src/ui/components/organization/member-cell.tsx","../../src/ui/components/organization/remove-member-dialog.tsx","../../src/ui/components/organization/update-member-role-dialog.tsx","../../src/ui/components/organization/organization-name-card.tsx","../../src/ui/components/organization/organization-settings-cards.tsx","../../src/ui/components/organization/organization-slug-card.tsx","../../src/ui/components/organization/organization-switcher.tsx","../../src/ui/components/organization/organization-view.tsx","../../src/ui/components/organization/teams-card.tsx","../../src/ui/components/organization/team-cell.tsx","../../src/ui/components/organization/update-team-dialog.tsx","../../src/ui/components/ui/field.tsx","../../src/ui/components/redirect-to-sign-in.tsx","../../src/ui/components/redirect-to-sign-up.tsx","../../src/ui/components/signed-in.tsx","../../src/ui/components/signed-out.tsx","../../src/ui/components/user-button.tsx"],"sourcesContent":["\"use client\"\n\nimport { MenuIcon } from \"lucide-react\"\nimport { useContext, useMemo } from \"react\"\nimport { useAuthenticate } from \"../../hooks/use-authenticate\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getViewByPath } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { AccountViewPath } from \"../../server\"\nimport { OrganizationsCard } from \"../organization/organizations-card\"\nimport { UserInvitationsCard } from \"../organization/user-invitations-card\"\nimport { AccountSettingsCards } from \"../settings/account-settings-cards\"\nimport { ApiKeysCard } from \"../settings/api-key/api-keys-card\"\nimport { SecuritySettingsCards } from \"../settings/security-settings-cards\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { UserTeamsCard } from \"../settings/teams/user-teams-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger\n} from \"../ui/drawer\"\nimport { Label } from \"../ui/label\"\n\nexport interface AccountViewProps {\n className?: string\n classNames?: {\n base?: string\n cards?: string\n drawer?: { menuItem?: string }\n sidebar?: { base?: string; button?: string; buttonActive?: string }\n card?: SettingsCardClassNames\n }\n localization?: AuthLocalization\n path?: string\n pathname?: string\n view?: AccountViewPath\n hideNav?: boolean\n showTeams?: boolean\n}\n\nexport function AccountView({\n className,\n classNames,\n localization: localizationProp,\n path: pathProp,\n pathname,\n view: viewProp,\n hideNav,\n showTeams\n}: AccountViewProps) {\n const {\n apiKey,\n teams: teamOptions,\n localization: contextLocalization,\n organization,\n account: accountOptions,\n Link\n } = useContext(AuthUIContext)\n\n if (!accountOptions) {\n return null\n }\n const { enabled: teamsEnabled } = teamOptions || {}\n\n useAuthenticate()\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const path = pathProp ?? pathname?.split(\"/\").pop()\n\n const view =\n viewProp || getViewByPath(accountOptions.viewPaths, path!) || \"SETTINGS\"\n\n const navItems: {\n view: AccountViewPath\n label: string\n }[] = [\n { view: \"SETTINGS\", label: localization.ACCOUNT },\n { view: \"SECURITY\", label: localization.SECURITY }\n ]\n\n if (teamsEnabled && showTeams) {\n navItems.push({\n view: \"TEAMS\",\n label: localization.TEAMS\n })\n }\n\n if (apiKey) {\n navItems.push({\n view: \"API_KEYS\",\n label: localization.API_KEYS\n })\n }\n\n if (organization) {\n navItems.push({\n view: \"ORGANIZATIONS\",\n label: localization.ORGANIZATIONS\n })\n }\n\n return (\n <div\n className={cn(\n \"flex w-full grow flex-col gap-4 md:flex-row md:gap-12\",\n className,\n classNames?.base\n )}\n >\n {!hideNav && (\n <div className=\"flex justify-between gap-2 md:hidden\">\n <Label className=\"font-semibold text-base\">\n {navItems.find((i) => i.view === view)?.label}\n </Label>\n\n <Drawer>\n <DrawerTrigger asChild>\n <Button variant=\"outline\">\n <MenuIcon />\n </Button>\n </DrawerTrigger>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle className=\"hidden\">\n {localization.SETTINGS}\n </DrawerTitle>\n </DrawerHeader>\n <div className=\"flex flex-col px-4 pb-4\">\n {navItems.map((item) => (\n <Link\n key={item.view}\n href={`${accountOptions?.basePath}/${accountOptions?.viewPaths[item.view]}`}\n >\n <Button\n size=\"lg\"\n className={cn(\n \"w-full justify-start px-4 transition-none\",\n classNames?.drawer?.menuItem,\n view === item.view\n ? \"font-semibold\"\n : \"text-foreground/70\"\n )}\n variant=\"ghost\"\n >\n {item.label}\n </Button>\n </Link>\n ))}\n </div>\n </DrawerContent>\n </Drawer>\n </div>\n )}\n\n {!hideNav && (\n <div className=\"hidden md:block\">\n <div\n className={cn(\n \"flex w-48 flex-col gap-1 lg:w-60\",\n classNames?.sidebar?.base\n )}\n >\n {navItems.map((item) => (\n <Link\n key={item.view}\n href={`${accountOptions?.basePath}/${accountOptions?.viewPaths[item.view]}`}\n >\n <Button\n size=\"lg\"\n className={cn(\n \"w-full justify-start px-4 transition-none\",\n classNames?.sidebar?.button,\n view === item.view\n ? \"font-semibold\"\n : \"text-foreground/70\",\n view === item.view &&\n classNames?.sidebar?.buttonActive\n )}\n variant=\"ghost\"\n >\n {item.label}\n </Button>\n </Link>\n ))}\n </div>\n </div>\n )}\n\n {view === \"SETTINGS\" && (\n <AccountSettingsCards\n classNames={classNames}\n localization={localization}\n />\n )}\n\n {view === \"SECURITY\" && (\n <SecuritySettingsCards\n classNames={classNames}\n localization={localization}\n />\n )}\n\n {view === \"TEAMS\" && teamsEnabled && showTeams && (\n <UserTeamsCard\n classNames={classNames}\n localization={localization}\n />\n )}\n\n {view === \"API_KEYS\" && (\n <ApiKeysCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {view === \"ORGANIZATIONS\" && organization && (\n <div className=\"grid w-full gap-4 md:gap-6\">\n <OrganizationsCard\n classNames={classNames?.card}\n localization={localization}\n />\n\n <UserInvitationsCard\n classNames={classNames?.card}\n localization={localization}\n />\n </div>\n )}\n </div>\n )\n}\n","import { useContext, useEffect } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport type { AuthViewPath } from \"../server\"\nimport type { AnyAuthClient } from \"../types/any-auth-client\"\n\ninterface AuthenticateOptions<TAuthClient extends AnyAuthClient> {\n authClient?: TAuthClient\n authView?: AuthViewPath\n enabled?: boolean\n}\n\nexport function useAuthenticate<TAuthClient extends AnyAuthClient>(\n options?: AuthenticateOptions<TAuthClient>\n) {\n type Session = TAuthClient[\"$Infer\"][\"Session\"][\"session\"]\n type User = TAuthClient[\"$Infer\"][\"Session\"][\"user\"]\n\n const { authView = \"SIGN_IN\", enabled = true } = options ?? {}\n\n const {\n hooks: { useSession },\n basePath,\n viewPaths,\n replace\n } = useContext(AuthUIContext)\n\n const { data, isPending, error, refetch } = useSession()\n const sessionData = data as\n | {\n session: Session\n user: User\n }\n | null\n | undefined\n\n useEffect(() => {\n if (!enabled || isPending || sessionData) return\n\n const searchParams = new URLSearchParams(window.location.search)\n const redirectTo =\n searchParams.get(\"redirectTo\") ||\n window.location.pathname + window.location.search\n\n replace(\n `${basePath}/${viewPaths[authView]}?redirectTo=${encodeURIComponent(redirectTo)}`\n )\n }, [\n isPending,\n sessionData,\n basePath,\n viewPaths,\n replace,\n authView,\n enabled\n ])\n\n return {\n data: sessionData,\n user: sessionData?.user,\n isPending,\n error,\n refetch\n }\n}\n","\"use client\"\n\nimport { createContext, type ReactNode, useMemo } from \"react\"\nimport { toast } from \"sonner\"\n\nimport { RecaptchaV3 } from \"../components/captcha/recaptcha-v3\"\nimport { useAuthData } from \"../hooks/use-auth-data\"\nimport {\n type AuthLocalization,\n authLocalization\n} from \"../localization/auth-localization\"\nimport type {\n AccountOptions,\n AccountOptionsContext\n} from \"../types/account-options\"\nimport type { AdditionalFields } from \"../types/additional-fields\"\nimport type { AnyAuthClient } from \"../types/any-auth-client\"\nimport type { AuthClient } from \"../types/auth-client\"\nimport type { AuthHooks } from \"../types/auth-hooks\"\nimport type { AuthMutators } from \"../types/auth-mutators\"\nimport type { AvatarOptions } from \"../types/avatar-options\"\nimport type { CaptchaOptions } from \"../types/captcha-options\"\nimport type { CredentialsOptions } from \"../types/credentials-options\"\nimport type { DeleteUserOptions } from \"../types/delete-user-options\"\nimport type { EmailVerificationOptions } from \"../types/email-verification-options\"\nimport type { GenericOAuthOptions } from \"../types/generic-oauth-options\"\nimport type { GravatarOptions } from \"../types/gravatar-options\"\nimport type { Link } from \"../types/link\"\nimport type {\n OrganizationOptions,\n OrganizationOptionsContext\n} from \"../types/organization-options\"\nimport type { RenderToast } from \"../types/render-toast\"\nimport type { SignUpOptions } from \"../types/sign-up-options\"\nimport type { SocialOptions } from \"../types/social-options\"\nimport type { TeamOptions, TeamOptionsContext } from \"../types/team-options\"\nimport { OrganizationRefetcher } from \"./organization-refetcher\"\nimport type { AuthViewPaths } from \"./view-paths\"\nimport {\n accountViewPaths,\n authViewPaths,\n organizationViewPaths\n} from \"./view-paths\"\n\nconst DefaultLink: Link = ({ href, className, children }) => (\n <a className={className} href={href}>\n {children}\n </a>\n)\n\nconst defaultNavigate = (href: string) => {\n window.location.href = href\n}\n\nconst defaultReplace = (href: string) => {\n window.location.replace(href)\n}\n\nconst defaultToast: RenderToast = ({ variant = \"default\", message }) => {\n if (variant === \"default\") {\n toast(message)\n } else {\n toast[variant](message)\n }\n}\n\nexport type AuthUIContextType = {\n authClient: AuthClient\n /**\n * Additional fields for users\n */\n additionalFields?: AdditionalFields\n /**\n * API Key plugin configuration\n */\n apiKey?:\n | {\n /**\n * Prefix for API Keys\n */\n prefix?: string\n /**\n * Metadata for API Keys\n */\n metadata?: Record<string, unknown>\n }\n | boolean\n /**\n * Avatar configuration\n * @default undefined\n */\n avatar?: AvatarOptions\n /**\n * Base path for the auth views\n * @default \"/auth\"\n */\n basePath: string\n /**\n * Front end base URL for auth API callbacks\n */\n baseURL?: string\n /**\n * Captcha configuration\n */\n captcha?: CaptchaOptions\n credentials?: CredentialsOptions\n /**\n * Default redirect URL after authenticating\n * @default \"/\"\n */\n redirectTo: string\n /**\n * Enable or disable user change email support\n * @default true\n */\n changeEmail?: boolean\n /**\n * User Account deletion configuration\n * @default undefined\n */\n deleteUser?: DeleteUserOptions\n /**\n * Email verification configuration\n */\n emailVerification?: EmailVerificationOptions\n /**\n * Freshness age for Session data\n * @default 60 * 60 * 24\n */\n freshAge: number\n /**\n * Generic OAuth provider configuration\n */\n genericOAuth?: GenericOAuthOptions\n /**\n * Gravatar configuration\n */\n gravatar?: boolean | GravatarOptions\n hooks: AuthHooks\n localization: typeof authLocalization\n /**\n * Enable or disable error localization.\n * When false, errors messages from backend will be used directly.\n * @default true\n */\n localizeErrors: boolean\n /**\n * Enable or disable Magic Link support\n * @default false\n */\n magicLink?: boolean\n /**\n * Enable or disable Email OTP support\n * @default false\n */\n emailOTP?: boolean\n /**\n * Enable or disable Multi Session support\n * @default false\n */\n multiSession?: boolean\n mutators: AuthMutators\n /**\n * Whether the name field should be required\n * @default true\n */\n nameRequired?: boolean\n /**\n * Enable or disable One Tap support\n * @default false\n */\n oneTap?: boolean\n /**\n * Perform some User updates optimistically\n * @default false\n */\n optimistic?: boolean\n /**\n * Organization configuration\n */\n organization?: OrganizationOptionsContext\n /**\n * Teams configuration (requires organizations to be enabled)\n */\n teams?: TeamOptionsContext\n /**\n * Enable or disable Passkey support\n * @default false\n */\n passkey?: boolean\n /**\n * Forces better-auth-tanstack to refresh the Session on the auth callback page\n * @default false\n */\n persistClient?: boolean\n /**\n * Account configuration\n */\n account?: AccountOptionsContext\n /**\n * Sign Up configuration\n */\n signUp?: SignUpOptions\n /**\n * Social provider configuration\n */\n social?: SocialOptions\n toast: RenderToast\n /**\n * Enable or disable two-factor authentication support\n * @default undefined\n */\n twoFactor?: (\"otp\" | \"totp\")[]\n viewPaths: AuthViewPaths\n /**\n * Navigate to a new URL\n * @default window.location.href\n */\n navigate: (href: string) => void\n /**\n * Called whenever the Session changes\n */\n onSessionChange?: () => void | Promise<void>\n /**\n * Replace the current URL\n * @default navigate\n */\n replace: (href: string) => void\n /**\n * Custom Link component for navigation\n * @default <a>\n */\n Link: Link\n}\n\nexport type AuthUIProviderProps = {\n children: ReactNode\n /**\n * Better Auth client returned from createAuthClient\n * @default Required\n * @remarks `AuthClient`\n */\n authClient: AnyAuthClient\n /**\n * Enable account view & account configuration\n * @default { fields: [\"image\", \"name\"] }\n */\n account?: boolean | Partial<AccountOptions>\n /**\n * Avatar configuration\n * @default undefined\n */\n avatar?: boolean | Partial<AvatarOptions>\n /**\n * User Account deletion configuration\n * @default undefined\n */\n deleteUser?: DeleteUserOptions | boolean\n /**\n * ADVANCED: Custom hooks for fetching auth data\n */\n hooks?: Partial<AuthHooks>\n /**\n * Customize the paths for the auth views\n * @default authViewPaths\n * @remarks `AuthViewPaths`\n */\n viewPaths?: Partial<AuthViewPaths>\n /**\n * Email verification configuration\n * @default undefined\n */\n emailVerification?: boolean | Partial<EmailVerificationOptions>\n /**\n * Render custom Toasts\n * @default Sonner\n */\n toast?: RenderToast\n /**\n * Customize the Localization strings\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: AuthLocalization\n /**\n * Enable or disable error localization.\n * When false, errors messages from backend will be used directly.\n * @default true\n */\n localizeErrors?: boolean\n /**\n * ADVANCED: Custom mutators for updating auth data\n */\n mutators?: Partial<AuthMutators>\n /**\n * Organization plugin configuration\n */\n organization?: OrganizationOptions | boolean\n /**\n * Teams plugin configuration (requires organizations to be enabled)\n */\n teams?: TeamOptions | boolean\n /**\n * Enable or disable Credentials support\n * @default { forgotPassword: true }\n */\n credentials?: boolean | CredentialsOptions\n /**\n * Enable or disable Sign Up form\n * @default { fields: [\"name\"] }\n */\n signUp?: SignUpOptions | boolean\n} & Partial<\n Omit<\n AuthUIContextType,\n | \"authClient\"\n | \"viewPaths\"\n | \"localization\"\n | \"mutators\"\n | \"toast\"\n | \"hooks\"\n | \"avatar\"\n | \"account\"\n | \"deleteUser\"\n | \"credentials\"\n | \"signUp\"\n | \"organization\"\n | \"localizeErrors\"\n | \"teams\"\n | \"emailVerification\"\n >\n>\n\nexport const AuthUIContext = createContext<AuthUIContextType>(\n {} as unknown as AuthUIContextType\n)\n\nexport const AuthUIProvider = ({\n children,\n authClient: authClientProp,\n account: accountProp,\n avatar: avatarProp,\n deleteUser: deleteUserProp,\n social: socialProp,\n genericOAuth: genericOAuthProp,\n basePath = \"/auth\",\n baseURL = \"\",\n captcha,\n redirectTo = \"/\",\n credentials: credentialsProp,\n changeEmail = true,\n freshAge = 60 * 60 * 24,\n hooks: hooksProp,\n mutators: mutatorsProp,\n localization: localizationProp,\n localizeErrors = true,\n nameRequired = true,\n organization: organizationProp,\n teams: teamsProp,\n signUp: signUpProp = true,\n toast = defaultToast,\n viewPaths: viewPathsProp,\n navigate,\n replace,\n Link = DefaultLink,\n emailVerification: emailVerificationProp,\n ...props\n}: AuthUIProviderProps) => {\n const authClient = authClientProp as AuthClient\n\n const avatar = useMemo<AvatarOptions | undefined>(() => {\n if (!avatarProp) return\n\n if (avatarProp === true) {\n return {\n extension: \"png\",\n size: 128\n }\n }\n\n return {\n upload: avatarProp.upload,\n delete: avatarProp.delete,\n extension: avatarProp.extension || \"png\",\n size: avatarProp.size || (avatarProp.upload ? 256 : 128),\n Image: avatarProp.Image\n }\n }, [avatarProp])\n\n const emailVerification = useMemo<\n EmailVerificationOptions | undefined\n >(() => {\n if (!emailVerificationProp) return\n\n if (emailVerificationProp === true) {\n return {\n otp: false\n }\n }\n\n return {\n otp: emailVerificationProp.otp ?? false\n }\n }, [emailVerificationProp])\n\n const account = useMemo<AccountOptionsContext | undefined>(() => {\n if (accountProp === false) return\n\n if (accountProp === true || accountProp === undefined) {\n return {\n basePath: \"/account\",\n fields: [\"image\", \"name\"],\n viewPaths: accountViewPaths\n }\n }\n\n // Remove trailing slash from basePath\n const basePath = accountProp.basePath?.endsWith(\"/\")\n ? accountProp.basePath.slice(0, -1)\n : accountProp.basePath\n\n return {\n basePath: basePath ?? \"/account\",\n fields: accountProp.fields || [\"image\", \"name\"],\n viewPaths: { ...accountViewPaths, ...accountProp.viewPaths }\n }\n }, [accountProp])\n\n const deleteUser = useMemo<DeleteUserOptions | undefined>(() => {\n if (!deleteUserProp) return\n\n if (deleteUserProp === true) {\n return {}\n }\n\n return deleteUserProp\n }, [deleteUserProp])\n\n const social = useMemo<SocialOptions | undefined>(() => {\n if (!socialProp) return\n\n return socialProp\n }, [socialProp])\n\n const genericOAuth = useMemo<GenericOAuthOptions | undefined>(() => {\n if (!genericOAuthProp) return\n\n return genericOAuthProp\n }, [genericOAuthProp])\n\n const credentials = useMemo<CredentialsOptions | undefined>(() => {\n if (credentialsProp === false) return\n\n if (credentialsProp === true) {\n return {\n forgotPassword: true,\n usernameRequired: true\n }\n }\n\n return {\n ...credentialsProp,\n forgotPassword: credentialsProp?.forgotPassword ?? true,\n usernameRequired: credentialsProp?.usernameRequired ?? true\n }\n }, [credentialsProp])\n\n const signUp = useMemo<SignUpOptions | undefined>(() => {\n if (signUpProp === false) return\n\n if (signUpProp === true || signUpProp === undefined) {\n return {\n fields: [\"name\"]\n }\n }\n\n return {\n fields: signUpProp.fields || [\"name\"]\n }\n }, [signUpProp])\n\n const organization = useMemo<OrganizationOptionsContext | undefined>(() => {\n if (!organizationProp) return\n\n if (organizationProp === true) {\n return {\n basePath: \"/organization\",\n viewPaths: organizationViewPaths,\n customRoles: []\n }\n }\n\n let logo: OrganizationOptionsContext[\"logo\"] | undefined\n\n if (organizationProp.logo === true) {\n logo = {\n extension: \"png\",\n size: 128\n }\n } else if (organizationProp.logo) {\n logo = {\n upload: organizationProp.logo.upload,\n delete: organizationProp.logo.delete,\n extension: organizationProp.logo.extension || \"png\",\n size:\n organizationProp.logo.size ||\n (organizationProp.logo.upload ? 256 : 128)\n }\n }\n\n // Remove trailing slash from basePath\n const basePath = organizationProp.basePath?.endsWith(\"/\")\n ? organizationProp.basePath.slice(0, -1)\n : organizationProp.basePath\n\n return {\n ...organizationProp,\n logo,\n basePath: basePath ?? \"/organization\",\n customRoles: organizationProp.customRoles || [],\n viewPaths: {\n ...organizationViewPaths,\n ...organizationProp.viewPaths\n }\n }\n }, [organizationProp])\n\n const teams = useMemo<TeamOptionsContext | undefined>(() => {\n if (!teamsProp || !organization) return\n\n if (teamsProp === true) {\n return {\n enabled: true,\n customRoles: [],\n colors: {\n count: 5,\n prefix: \"team\"\n }\n }\n }\n\n return {\n enabled: teamsProp.enabled ?? true,\n customRoles: teamsProp.customRoles || [],\n colors: {\n count: teamsProp.colors?.count ?? 5,\n prefix: teamsProp.colors?.prefix ?? \"team\"\n }\n }\n }, [teamsProp, organization])\n\n const defaultMutators = useMemo(() => {\n return {\n deleteApiKey: (params) =>\n authClient.apiKey.delete({\n ...params,\n fetchOptions: { throw: true }\n }),\n deletePasskey: (params) =>\n authClient.passkey.deletePasskey({\n ...params,\n fetchOptions: { throw: true }\n }),\n revokeDeviceSession: (params) =>\n authClient.multiSession.revoke({\n ...params,\n fetchOptions: { throw: true }\n }),\n revokeSession: (params) =>\n authClient.revokeSession({\n ...params,\n fetchOptions: { throw: true }\n }),\n setActiveSession: (params) =>\n authClient.multiSession.setActive({\n ...params,\n fetchOptions: { throw: true }\n }),\n updateOrganization: (params) =>\n authClient.organization.update({\n ...params,\n fetchOptions: { throw: true }\n }),\n updateTeam: (params) =>\n authClient.$fetch(\"/organization/update-team\", {\n method: \"POST\",\n body: params,\n throw: true\n }),\n updateUser: (params) =>\n authClient.updateUser({\n ...params,\n fetchOptions: { throw: true }\n }),\n unlinkAccount: (params) =>\n authClient.unlinkAccount({\n ...params,\n fetchOptions: { throw: true }\n })\n } as AuthMutators\n }, [authClient])\n\n const defaultHooks = useMemo(() => {\n return {\n useSession: authClient.useSession,\n useListAccounts: () =>\n useAuthData({\n queryFn: authClient.listAccounts,\n cacheKey: \"listAccounts\"\n }),\n useAccountInfo: (params) =>\n useAuthData({\n queryFn: () => authClient.accountInfo(params),\n cacheKey: `accountInfo:${JSON.stringify(params)}`\n }),\n useListDeviceSessions: () =>\n useAuthData({\n queryFn: authClient.multiSession.listDeviceSessions,\n cacheKey: \"listDeviceSessions\"\n }),\n useListSessions: () =>\n useAuthData({\n queryFn: authClient.listSessions,\n cacheKey: \"listSessions\"\n }),\n useListPasskeys: authClient.useListPasskeys,\n useListApiKeys: () =>\n useAuthData({\n queryFn: authClient.apiKey.list,\n cacheKey: \"listApiKeys\"\n }),\n useActiveOrganization: authClient.useActiveOrganization,\n useListOrganizations: authClient.useListOrganizations,\n useHasPermission: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\"/organization/has-permission\", {\n method: \"POST\",\n body: params\n }),\n cacheKey: `hasPermission:${JSON.stringify(params)}`\n }),\n useInvitation: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.organization.getInvitation(params),\n cacheKey: `invitation:${JSON.stringify(params)}`\n }),\n useListInvitations: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\n `/organization/list-invitations?organizationId=${\n params?.query?.organizationId || \"\"\n }`\n ),\n cacheKey: `listInvitations:${JSON.stringify(params)}`\n }),\n useListUserInvitations: () =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\n \"/organization/list-user-invitations\"\n ),\n cacheKey: `listUserInvitations`\n }),\n useListMembers: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\n `/organization/list-members?organizationId=${\n params?.query?.organizationId || \"\"\n }`\n ),\n cacheKey: `listMembers:${JSON.stringify(params)}`\n }),\n useListTeams: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\n `/organization/list-teams?organizationId=${\n params?.organizationId || \"\"\n }`\n ),\n cacheKey: `listTeams:${JSON.stringify(params)}`\n }),\n useListTeamMembers: (params) =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\"/organization/list-team-members\", {\n method: \"POST\",\n body: params?.teamId\n ? { query: { teamId: params.teamId } }\n : undefined\n }),\n cacheKey: `listTeamMembers:${JSON.stringify(params)}`\n }),\n useListUserTeams: () =>\n useAuthData({\n queryFn: () =>\n authClient.$fetch(\"/organization/list-user-teams\"),\n cacheKey: \"listUserTeams\"\n })\n } as unknown as AuthHooks\n }, [authClient])\n\n const viewPaths = useMemo(() => {\n return { ...authViewPaths, ...viewPathsProp }\n }, [viewPathsProp])\n\n const localization = useMemo(() => {\n return { ...authLocalization, ...localizationProp }\n }, [localizationProp])\n\n const hooks = useMemo(() => {\n return { ...defaultHooks, ...hooksProp }\n }, [defaultHooks, hooksProp])\n\n const mutators = useMemo(() => {\n return { ...defaultMutators, ...mutatorsProp }\n }, [defaultMutators, mutatorsProp])\n\n // Remove trailing slash from baseURL\n baseURL = baseURL.endsWith(\"/\") ? baseURL.slice(0, -1) : baseURL\n\n // Remove trailing slash from basePath\n basePath = basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath\n\n const { data: sessionData } = hooks.useSession()\n\n return (\n <AuthUIContext.Provider\n value={{\n authClient,\n avatar,\n basePath: basePath === \"/\" ? \"\" : basePath,\n baseURL,\n captcha,\n redirectTo,\n changeEmail,\n credentials,\n deleteUser,\n emailVerification,\n freshAge,\n genericOAuth,\n hooks,\n mutators,\n localization,\n localizeErrors,\n nameRequired,\n organization,\n teams,\n account,\n signUp,\n social,\n toast,\n navigate: navigate || defaultNavigate,\n replace: replace || navigate || defaultReplace,\n viewPaths,\n Link,\n ...props\n }}\n >\n {sessionData && organization && <OrganizationRefetcher />}\n\n {captcha?.provider === \"google-recaptcha-v3\" ? (\n <RecaptchaV3>{children}</RecaptchaV3>\n ) : (\n children\n )}\n </AuthUIContext.Provider>\n )\n}\n","import {\n GoogleReCaptchaProvider,\n useGoogleReCaptcha\n} from \"@wojtekmaj/react-recaptcha-v3\"\nimport { type ReactNode, useContext, useEffect } from \"react\"\n\nimport { useIsHydrated } from \"../../hooks/use-hydrated\"\nimport { useLang } from \"../../hooks/use-lang\"\nimport { useTheme } from \"../../hooks/use-theme\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\n\nexport function RecaptchaV3({ children }: { children: ReactNode }) {\n const isHydrated = useIsHydrated()\n const { captcha } = useContext(AuthUIContext)\n\n if (captcha?.provider !== \"google-recaptcha-v3\") return children\n\n return (\n <GoogleReCaptchaProvider\n reCaptchaKey={captcha.siteKey}\n useEnterprise={captcha.enterprise}\n useRecaptchaNet={captcha.recaptchaNet}\n >\n {isHydrated && (\n <style>{`\n .grecaptcha-badge {\n visibility: hidden;\n border-radius: var(--radius) !important;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow) !important;\n border-style: var(--tw-border-style) !important;\n border-width: 1px;\n }\n\n .dark .grecaptcha-badge {\n border-color: var(--input) !important;\n }\n `}</style>\n )}\n\n <RecaptchaV3Style />\n\n {children}\n </GoogleReCaptchaProvider>\n )\n}\n\nfunction RecaptchaV3Style() {\n const { executeRecaptcha } = useGoogleReCaptcha()\n const { theme } = useTheme()\n const { lang } = useLang()\n\n useEffect(() => {\n if (!executeRecaptcha) return\n\n const updateRecaptcha = async () => {\n // find iframe with title \"reCAPTCHA\"\n const iframe = document.querySelector(\n \"iframe[title='reCAPTCHA']\"\n ) as HTMLIFrameElement\n if (iframe) {\n const iframeSrcUrl = new URL(iframe.src)\n iframeSrcUrl.searchParams.set(\"theme\", theme)\n if (lang) iframeSrcUrl.searchParams.set(\"hl\", lang)\n iframe.src = iframeSrcUrl.toString()\n }\n }\n\n updateRecaptcha()\n }, [executeRecaptcha, theme, lang])\n\n return null\n}\n","import { useSyncExternalStore } from \"react\"\n\nfunction subscribe() {\n return () => {}\n}\n\nexport function useIsHydrated() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLang() {\n const [lang, setLang] = useState<string>()\n\n useEffect(() => {\n const checkLang = () => {\n const currentLang = document.documentElement.getAttribute(\"lang\")\n setLang(currentLang ?? undefined)\n }\n\n // Initial check\n checkLang()\n\n // Listen for changes to lang attribute on html tag\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.attributeName === \"lang\") {\n checkLang()\n }\n }\n })\n\n observer.observe(document.documentElement, { attributes: true })\n\n return () => {\n observer.disconnect()\n }\n }, [])\n\n return { lang }\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useTheme() {\n const [theme, setTheme] = useState<\"light\" | \"dark\">(\"light\")\n\n useEffect(() => {\n const checkTheme = () => {\n const isDark =\n document.documentElement.classList.contains(\"dark\") ||\n document.documentElement\n .getAttribute(\"style\")\n ?.includes(\"color-scheme: dark\")\n setTheme(isDark ? \"dark\" : \"light\")\n }\n\n // Initial check\n checkTheme()\n\n // Listen for changes to html tag\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (\n mutation.attributeName === \"style\" ||\n mutation.attributeName === \"class\"\n ) {\n checkTheme()\n }\n }\n })\n\n observer.observe(document.documentElement, { attributes: true })\n\n return () => {\n observer.disconnect()\n }\n }, [])\n\n return { theme }\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore\n} from \"react\"\n\nimport { authDataCache } from \"../lib/auth-data-cache\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport { getLocalizedError } from \"../lib/utils\"\nimport type { FetchError } from \"../types/fetch-error\"\n\nexport function useAuthData<T>({\n queryFn,\n cacheKey,\n staleTime = 10000 // Default 10 seconds\n}: {\n queryFn: () => Promise<{ data: T | null; error?: FetchError | null }>\n cacheKey?: string\n staleTime?: number\n}) {\n const {\n hooks: { useSession },\n toast,\n localization,\n localizeErrors\n } = useContext(AuthUIContext)\n const { data: sessionData, isPending: sessionPending } = useSession()\n\n // Generate a stable cache key based on the queryFn if not provided\n const queryFnRef = useRef(queryFn)\n queryFnRef.current = queryFn\n\n const stableCacheKey = cacheKey || queryFn.toString()\n\n // Subscribe to cache updates for this key\n const cacheEntry = useSyncExternalStore(\n useCallback(\n (callback) => authDataCache.subscribe(stableCacheKey, callback),\n [stableCacheKey]\n ),\n useCallback(\n () => authDataCache.get<T>(stableCacheKey),\n [stableCacheKey]\n ),\n useCallback(\n () => authDataCache.get<T>(stableCacheKey),\n [stableCacheKey]\n )\n )\n\n const initialized = useRef(false)\n const previousUserId = useRef<string | undefined>(undefined)\n const [error, setError] = useState<FetchError | null>(null)\n\n const refetch = useCallback(async () => {\n // Check if there's already an in-flight request for this key\n const existingRequest = authDataCache.getInFlightRequest<{\n data: T | null\n error?: FetchError | null\n }>(stableCacheKey)\n if (existingRequest) {\n // Wait for the existing request to complete\n try {\n const result = await existingRequest\n if (result.error) {\n setError(result.error)\n } else {\n setError(null)\n }\n } catch (err) {\n setError(err as FetchError)\n }\n return\n }\n\n // Mark as refetching if we have cached data\n if (cacheEntry?.data !== undefined) {\n authDataCache.setRefetching(stableCacheKey, true)\n }\n\n // Create the fetch promise\n const fetchPromise = queryFnRef.current()\n\n // Store the promise as in-flight\n authDataCache.setInFlightRequest(stableCacheKey, fetchPromise)\n\n try {\n const { data, error } = await fetchPromise\n\n if (error) {\n setError(error)\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n } else {\n setError(null)\n }\n\n // Update cache with new data\n authDataCache.set(stableCacheKey, data)\n } catch (err) {\n const error = err as FetchError\n setError(error)\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n } finally {\n authDataCache.setRefetching(stableCacheKey, false)\n authDataCache.removeInFlightRequest(stableCacheKey)\n }\n }, [stableCacheKey, toast, localization, localizeErrors, cacheEntry])\n\n useEffect(() => {\n const currentUserId = sessionData?.user?.id\n\n if (!sessionData) {\n // Clear cache when session is lost\n authDataCache.setRefetching(stableCacheKey, false)\n authDataCache.clear(stableCacheKey)\n initialized.current = false\n previousUserId.current = undefined\n return\n }\n\n // Check if user ID has changed\n const userIdChanged =\n previousUserId.current !== undefined &&\n previousUserId.current !== currentUserId\n\n // If user changed, clear cache to ensure isPending becomes true\n if (userIdChanged) {\n authDataCache.clear(stableCacheKey)\n }\n\n // If we have cached data, we're not pending anymore\n const hasCachedData = cacheEntry?.data !== undefined\n\n // Check if data is stale\n const isStale =\n !cacheEntry || Date.now() - cacheEntry.timestamp > staleTime\n\n if (\n !initialized.current ||\n !hasCachedData ||\n userIdChanged ||\n (hasCachedData && isStale)\n ) {\n // Only fetch if we don't have data or if the data is stale\n if (!hasCachedData || isStale) {\n initialized.current = true\n refetch()\n }\n }\n\n // Update the previous user ID\n previousUserId.current = currentUserId\n }, [\n sessionData,\n sessionData?.user?.id,\n stableCacheKey,\n refetch,\n cacheEntry,\n staleTime\n ])\n\n // Determine if we're in a pending state\n // We're only pending if:\n // 1. Session is still loading, OR\n // 2. We have no cached data and no error\n const isPending =\n sessionPending || (cacheEntry?.data === undefined && !error)\n\n return {\n data: cacheEntry?.data ?? null,\n isPending,\n isRefetching: cacheEntry?.isRefetching ?? false,\n error,\n refetch\n }\n}\n","type CacheEntry<T> = {\n data: T | null\n timestamp: number\n isRefetching: boolean\n}\n\nclass AuthDataCache {\n private cache = new Map<string, CacheEntry<unknown>>()\n private listeners = new Map<string, Set<() => void>>()\n private inFlightRequests = new Map<string, Promise<unknown>>()\n\n get<T>(key: string): CacheEntry<T> | undefined {\n return this.cache.get(key) as CacheEntry<T> | undefined\n }\n\n set<T>(key: string, data: T | null) {\n const entry: CacheEntry<T> = {\n data,\n timestamp: Date.now(),\n isRefetching: false\n }\n this.cache.set(key, entry)\n this.notify(key)\n }\n\n setRefetching(key: string, isRefetching: boolean) {\n const entry = this.cache.get(key)\n if (entry) {\n entry.isRefetching = isRefetching\n this.notify(key)\n }\n }\n\n clear(key?: string) {\n if (key) {\n this.cache.delete(key)\n this.inFlightRequests.delete(key)\n this.notify(key)\n } else {\n this.cache.clear()\n this.inFlightRequests.clear()\n const keys = Array.from(this.listeners.keys())\n for (const key of keys) {\n this.notify(key)\n }\n }\n }\n\n getInFlightRequest<T>(key: string): Promise<T> | undefined {\n return this.inFlightRequests.get(key) as Promise<T> | undefined\n }\n\n setInFlightRequest<T>(key: string, promise: Promise<T>) {\n this.inFlightRequests.set(key, promise)\n }\n\n removeInFlightRequest(key: string) {\n this.inFlightRequests.delete(key)\n }\n\n subscribe(key: string, callback: () => void) {\n if (!this.listeners.has(key)) {\n this.listeners.set(key, new Set())\n }\n this.listeners.get(key)!.add(callback)\n\n return () => {\n const callbacks = this.listeners.get(key)\n if (callbacks) {\n callbacks.delete(callback)\n if (callbacks.size === 0) {\n this.listeners.delete(key)\n }\n }\n }\n }\n\n private notify(key: string) {\n const callbacks = this.listeners.get(key)\n if (callbacks) {\n const callbackArray = Array.from(callbacks)\n for (const callback of callbackArray) {\n callback()\n }\n }\n }\n}\n\n// Global singleton instance\nexport const authDataCache = new AuthDataCache()\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\nimport * as z from \"zod\"\nimport type { AuthLocalization } from \"../localization/auth-localization\"\nimport type { PasswordValidation } from \"../types/password-validation\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function isValidEmail(email: string) {\n const emailRegex: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n\n/**\n * Converts error codes from SNAKE_CASE to camelCase\n * Example: INVALID_TWO_FACTOR_COOKIE -> invalidTwoFactorCookie\n */\nexport function errorCodeToCamelCase(errorCode: string): string {\n return errorCode\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase())\n}\n\n/**\n * Gets a localized error message from an error object\n */\nexport function getLocalizedError({\n error,\n localization,\n localizeErrors = true\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: ignore\n error: any\n localization?: Partial<AuthLocalization>\n localizeErrors: boolean\n}) {\n const DEFAULT_ERROR_MESSAGE = \"Request failed\"\n\n // If localization is disabled, return backend error message directly\n if (!localizeErrors) {\n if (error?.message) return error.message\n if (error?.error?.message) return error.error.message\n\n return DEFAULT_ERROR_MESSAGE\n }\n\n if (typeof error === \"string\") {\n if (localization?.[error as keyof AuthLocalization])\n return localization[error as keyof AuthLocalization]\n }\n\n if (error?.error) {\n if (error.error.code) {\n const errorCode = error.error.code as keyof AuthLocalization\n if (localization?.[errorCode]) return localization[errorCode]\n }\n\n return (\n error.error.message ||\n error.error.code ||\n error.error.statusText ||\n localization?.REQUEST_FAILED\n )\n }\n\n return (\n error?.message || localization?.REQUEST_FAILED || DEFAULT_ERROR_MESSAGE\n )\n}\n\nexport function getSearchParam(paramName: string) {\n return typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search).get(paramName)\n : null\n}\n\nexport function getViewByPath<T extends object>(viewPaths: T, path?: string) {\n for (const key in viewPaths) {\n if (viewPaths[key] === path) {\n return key\n }\n }\n}\n\nexport function getKeyByValue<T extends Record<string, unknown>>(\n object: T,\n value?: T[keyof T]\n): keyof T | undefined {\n return (Object.keys(object) as Array<keyof T>).find(\n (key) => object[key] === value\n )\n}\n\nexport function getPasswordSchema(\n passwordValidation?: PasswordValidation,\n localization?: AuthLocalization\n) {\n let schema = z.string().min(1, {\n message: localization?.PASSWORD_REQUIRED\n })\n if (passwordValidation?.minLength) {\n schema = schema.min(passwordValidation.minLength, {\n message: localization?.PASSWORD_TOO_SHORT\n })\n }\n if (passwordValidation?.maxLength) {\n schema = schema.max(passwordValidation.maxLength, {\n message: localization?.PASSWORD_TOO_LONG\n })\n }\n if (passwordValidation?.regex) {\n schema = schema.regex(passwordValidation.regex, {\n message: localization?.INVALID_PASSWORD\n })\n }\n return schema\n}\n","export const ADMIN_ERROR_CODES = {\n FAILED_TO_CREATE_USER: \"Failed to create user\",\n USER_ALREADY_EXISTS: \"User already exists\",\n YOU_CANNOT_BAN_YOURSELF: \"You cannot ban yourself\",\n YOU_ARE_NOT_ALLOWED_TO_CHANGE_USERS_ROLE:\n \"You are not allowed to change users role\",\n YOU_ARE_NOT_ALLOWED_TO_CREATE_USERS: \"You are not allowed to create users\",\n YOU_ARE_NOT_ALLOWED_TO_LIST_USERS: \"You are not allowed to list users\",\n YOU_ARE_NOT_ALLOWED_TO_LIST_USERS_SESSIONS:\n \"You are not allowed to list users sessions\",\n YOU_ARE_NOT_ALLOWED_TO_BAN_USERS: \"You are not allowed to ban users\",\n YOU_ARE_NOT_ALLOWED_TO_IMPERSONATE_USERS:\n \"You are not allowed to impersonate users\",\n YOU_ARE_NOT_ALLOWED_TO_REVOKE_USERS_SESSIONS:\n \"You are not allowed to revoke users sessions\",\n YOU_ARE_NOT_ALLOWED_TO_DELETE_USERS: \"You are not allowed to delete users\",\n YOU_ARE_NOT_ALLOWED_TO_SET_USERS_PASSWORD:\n \"You are not allowed to set users password\",\n BANNED_USER: \"You have been banned from this application\"\n}\n","export const ANONYMOUS_ERROR_CODES = {\n FAILED_TO_CREATE_USER: \"Failed to create user\",\n COULD_NOT_CREATE_SESSION: \"Could not create session\",\n ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY:\n \"Anonymous users cannot sign in again anonymously\"\n}\n","export const API_KEY_ERROR_CODES = {\n INVALID_METADATA_TYPE: \"metadata must be an object or undefined\",\n REFILL_AMOUNT_AND_INTERVAL_REQUIRED:\n \"refillAmount is required when refillInterval is provided\",\n REFILL_INTERVAL_AND_AMOUNT_REQUIRED:\n \"refillInterval is required when refillAmount is provided\",\n USER_BANNED: \"User is banned\",\n UNAUTHORIZED_SESSION: \"Unauthorized or invalid session\",\n KEY_NOT_FOUND: \"API Key not found\",\n KEY_DISABLED: \"API Key is disabled\",\n KEY_EXPIRED: \"API Key has expired\",\n USAGE_EXCEEDED: \"API Key has reached its usage limit\",\n KEY_NOT_RECOVERABLE: \"API Key is not recoverable\",\n EXPIRES_IN_IS_TOO_SMALL:\n \"The expiresIn is smaller than the predefined minimum value.\",\n EXPIRES_IN_IS_TOO_LARGE:\n \"The expiresIn is larger than the predefined maximum value.\",\n INVALID_REMAINING: \"The remaining count is either too large or too small.\",\n INVALID_PREFIX_LENGTH:\n \"The prefix length is either too large or too small.\",\n INVALID_NAME_LENGTH: \"The name length is either too large or too small.\",\n METADATA_DISABLED: \"Metadata is disabled.\",\n RATE_LIMIT_EXCEEDED: \"Rate limit exceeded.\",\n NO_VALUES_TO_UPDATE: \"No values to update.\",\n KEY_DISABLED_EXPIRATION: \"Custom key expiration values are disabled.\",\n INVALID_API_KEY: \"Invalid API key.\",\n INVALID_USER_ID_FROM_API_KEY: \"The user id from the API key is invalid.\",\n INVALID_API_KEY_GETTER_RETURN_TYPE:\n \"API Key getter returned an invalid key type. Expected string.\",\n SERVER_ONLY_PROPERTY:\n \"The property you're trying to set can only be set from the server auth instance only.\"\n}\n","export const BASE_ERROR_CODES = {\n USER_NOT_FOUND: \"User not found\",\n FAILED_TO_CREATE_USER: \"Failed to create user\",\n FAILED_TO_CREATE_SESSION: \"Failed to create session\",\n FAILED_TO_UPDATE_USER: \"Failed to update user\",\n FAILED_TO_GET_SESSION: \"Failed to get session\",\n INVALID_PASSWORD: \"Invalid password\",\n INVALID_EMAIL: \"Invalid email\",\n INVALID_EMAIL_OR_PASSWORD: \"Invalid email or password\",\n SOCIAL_ACCOUNT_ALREADY_LINKED: \"Social account already linked\",\n PROVIDER_NOT_FOUND: \"Provider not found\",\n INVALID_TOKEN: \"Invalid token\",\n ID_TOKEN_NOT_SUPPORTED: \"id_token not supported\",\n FAILED_TO_GET_USER_INFO: \"Failed to get user info\",\n USER_EMAIL_NOT_FOUND: \"User email not found\",\n EMAIL_NOT_VERIFIED: \"Email not verified\",\n PASSWORD_TOO_SHORT: \"Password too short\",\n PASSWORD_TOO_LONG: \"Password too long\",\n USER_ALREADY_EXISTS: \"User already exists\",\n EMAIL_CAN_NOT_BE_UPDATED: \"Email can not be updated\",\n CREDENTIAL_ACCOUNT_NOT_FOUND: \"Credential account not found\",\n SESSION_EXPIRED: \"Session expired. Re-authenticate to perform this action.\",\n FAILED_TO_UNLINK_LAST_ACCOUNT: \"You can't unlink your last account\",\n ACCOUNT_NOT_FOUND: \"Account not found\",\n USER_ALREADY_HAS_PASSWORD:\n \"User already has a password. Provide that to delete the account.\"\n}\n","// These error codes are returned by the API\nconst EXTERNAL_ERROR_CODES = {\n VERIFICATION_FAILED: \"Captcha verification failed\",\n MISSING_RESPONSE: \"Missing CAPTCHA response\",\n UNKNOWN_ERROR: \"Something went wrong\"\n}\n\n// These error codes are only visible in the server logs\nconst INTERNAL_ERROR_CODES = {\n MISSING_SECRET_KEY: \"Missing secret key\",\n SERVICE_UNAVAILABLE: \"CAPTCHA service unavailable\"\n}\n\nexport const CAPTCHA_ERROR_CODES = {\n ...EXTERNAL_ERROR_CODES,\n ...INTERNAL_ERROR_CODES\n}\n","export const EMAIL_OTP_ERROR_CODES = {\n OTP_EXPIRED: \"otp expired\",\n INVALID_OTP: \"Invalid OTP\",\n INVALID_EMAIL: \"Invalid email\",\n USER_NOT_FOUND: \"User not found\",\n TOO_MANY_ATTEMPTS: \"Too many attempts\"\n}\n","export const GENERIC_OAUTH_ERROR_CODES = {\n INVALID_OAUTH_CONFIGURATION: \"Invalid OAuth configuration\"\n}\n","export const HAVEIBEENPWNED_ERROR_CODES = {\n PASSWORD_COMPROMISED:\n \"The password you entered has been compromised. Please choose a different password.\"\n}\n","export const MULTI_SESSION_ERROR_CODES = {\n INVALID_SESSION_TOKEN: \"Invalid session token\"\n}\n","export const ORGANIZATION_ERROR_CODES = {\n YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION:\n \"You are not allowed to create a new organization\",\n YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS:\n \"You have reached the maximum number of organizations\",\n ORGANIZATION_ALREADY_EXISTS: \"Organization already exists\",\n ORGANIZATION_NOT_FOUND: \"Organization not found\",\n USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION:\n \"User is not a member of the organization\",\n YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION:\n \"You are not allowed to update this organization\",\n YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION:\n \"You are not allowed to delete this organization\",\n NO_ACTIVE_ORGANIZATION: \"No active organization\",\n USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION:\n \"User is already a member of this organization\",\n MEMBER_NOT_FOUND: \"Member not found\",\n ROLE_NOT_FOUND: \"Role not found\",\n YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM:\n \"You are not allowed to create a new team\",\n TEAM_ALREADY_EXISTS: \"Team already exists\",\n TEAM_NOT_FOUND: \"Team not found\",\n YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER:\n \"You cannot leave the organization as the only owner\",\n YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER:\n \"You are not allowed to delete this member\",\n YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION:\n \"You are not allowed to invite users to this organization\",\n USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION:\n \"User is already invited to this organization\",\n INVITATION_NOT_FOUND: \"Invitation not found\",\n YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION:\n \"You are not the recipient of the invitation\",\n YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION:\n \"You are not allowed to cancel this invitation\",\n INVITER_IS_NO_LONGER_A_MEMBER_OF_THE_ORGANIZATION:\n \"Inviter is no longer a member of the organization\",\n YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE:\n \"you are not allowed to invite user with this role\",\n FAILED_TO_RETRIEVE_INVITATION: \"Failed to retrieve invitation\",\n YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_TEAMS:\n \"You have reached the maximum number of teams\",\n UNABLE_TO_REMOVE_LAST_TEAM: \"Unable to remove last team\",\n YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER:\n \"You are not allowed to update this member\",\n ORGANIZATION_MEMBERSHIP_LIMIT_REACHED:\n \"Organization membership limit reached\",\n YOU_ARE_NOT_ALLOWED_TO_CREATE_TEAMS_IN_THIS_ORGANIZATION:\n \"You are not allowed to create teams in this organization\",\n YOU_ARE_NOT_ALLOWED_TO_DELETE_TEAMS_IN_THIS_ORGANIZATION:\n \"You are not allowed to delete teams in this organization\",\n YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_TEAM:\n \"You are not allowed to update this team\",\n YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_TEAM:\n \"You are not allowed to delete this team\",\n INVITATION_LIMIT_REACHED: \"Invitation limit reached\"\n}\n","export const PASSKEY_ERROR_CODES = {\n CHALLENGE_NOT_FOUND: \"Challenge not found\",\n YOU_ARE_NOT_ALLOWED_TO_REGISTER_THIS_PASSKEY:\n \"You are not allowed to register this passkey\",\n FAILED_TO_VERIFY_REGISTRATION: \"Failed to verify registration\",\n PASSKEY_NOT_FOUND: \"Passkey not found\",\n AUTHENTICATION_FAILED: \"Authentication failed\",\n UNABLE_TO_CREATE_SESSION: \"Unable to create session\",\n FAILED_TO_UPDATE_PASSKEY: \"Failed to update passkey\"\n}\n","export const PHONE_NUMBER_ERROR_CODES = {\n INVALID_PHONE_NUMBER: \"Invalid phone number\",\n PHONE_NUMBER_EXIST: \"Phone number already exists\",\n INVALID_PHONE_NUMBER_OR_PASSWORD: \"Invalid phone number or password\",\n UNEXPECTED_ERROR: \"Unexpected error\",\n OTP_NOT_FOUND: \"OTP not found\",\n OTP_EXPIRED: \"OTP expired\",\n INVALID_OTP: \"Invalid OTP\",\n PHONE_NUMBER_NOT_VERIFIED: \"Phone number not verified\"\n}\n","export const STRIPE_ERROR_CODES = {\n SUBSCRIPTION_NOT_FOUND: \"Subscription not found\",\n SUBSCRIPTION_PLAN_NOT_FOUND: \"Subscription plan not found\",\n ALREADY_SUBSCRIBED_PLAN: \"You're already subscribed to this plan\",\n UNABLE_TO_CREATE_CUSTOMER: \"Unable to create customer\",\n FAILED_TO_FETCH_PLANS: \"Failed to fetch plans\",\n EMAIL_VERIFICATION_REQUIRED:\n \"Email verification is required before you can subscribe to a plan\",\n SUBSCRIPTION_NOT_ACTIVE: \"Subscription is not active\",\n SUBSCRIPTION_NOT_SCHEDULED_FOR_CANCELLATION:\n \"Subscription is not scheduled for cancellation\"\n}\n","export const TEAM_ERROR_CODES = {\n TEAM_LIMIT_REACHED: \"Team limit reached for this organization\",\n TEAM_MEMBER_LIMIT_REACHED: \"Team member limit reached for this team\",\n TEAM_NOT_FOUND: \"Team not found\",\n TEAM_MEMBER_NOT_FOUND: \"Team member not found\",\n TEAM_NAME_TOO_LONG: \"Team name is too long\",\n CANNOT_REMOVE_LAST_TEAM: \"Cannot remove the last team\",\n NOT_ORGANIZATION_MEMBER: \"User is not a member of the organization\",\n ALREADY_TEAM_MEMBER: \"User is already a member of this team\",\n INSUFFICIENT_TEAM_PERMISSIONS:\n \"Insufficient permissions to perform this action on team\"\n}\n","export const TWO_FACTOR_ERROR_CODES = {\n OTP_NOT_ENABLED: \"OTP not enabled\",\n OTP_HAS_EXPIRED: \"OTP has expired\",\n TOTP_NOT_ENABLED: \"TOTP not enabled\",\n TWO_FACTOR_NOT_ENABLED: \"Two factor isn't enabled\",\n BACKUP_CODES_NOT_ENABLED: \"Backup codes aren't enabled\",\n INVALID_BACKUP_CODE: \"Invalid backup code\",\n INVALID_CODE: \"Invalid code\",\n TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE:\n \"Too many attempts. Please request a new code.\",\n INVALID_TWO_FACTOR_COOKIE: \"Invalid two factor cookie\"\n}\n","export const USERNAME_ERROR_CODES = {\n INVALID_USERNAME_OR_PASSWORD: \"invalid username or password\",\n EMAIL_NOT_VERIFIED: \"email not verified\",\n UNEXPECTED_ERROR: \"unexpected error\",\n USERNAME_IS_ALREADY_TAKEN: \"username is already taken. please try another.\",\n USERNAME_TOO_SHORT: \"username is too short\",\n USERNAME_TOO_LONG: \"username is too long\",\n INVALID_USERNAME: \"username is invalid\"\n}\n","import { ADMIN_ERROR_CODES } from \"./admin-error-codes\"\nimport { ANONYMOUS_ERROR_CODES } from \"./anonymous-error-codes\"\nimport { API_KEY_ERROR_CODES } from \"./api-key-error-codes\"\nimport { BASE_ERROR_CODES } from \"./base-error-codes\"\nimport { CAPTCHA_ERROR_CODES } from \"./captcha-error-codes\"\nimport { EMAIL_OTP_ERROR_CODES } from \"./email-otp-error-codes\"\nimport { GENERIC_OAUTH_ERROR_CODES } from \"./generic-oauth-error-codes\"\nimport { HAVEIBEENPWNED_ERROR_CODES } from \"./haveibeenpwned-error-codes\"\nimport { MULTI_SESSION_ERROR_CODES } from \"./multi-session-error-codes\"\nimport { ORGANIZATION_ERROR_CODES } from \"./organization-error-codes\"\nimport { PASSKEY_ERROR_CODES } from \"./passkey-error-codes\"\nimport { PHONE_NUMBER_ERROR_CODES } from \"./phone-number-error-codes\"\nimport { STRIPE_ERROR_CODES } from \"./stripe-localization\"\nimport { TEAM_ERROR_CODES } from \"./team-error-codes\"\nimport { TWO_FACTOR_ERROR_CODES } from \"./two-factor-error-codes\"\nimport { USERNAME_ERROR_CODES } from \"./username-error-codes\"\n\nexport const authLocalization = {\n /** @default \"App\" */\n APP: \"App\",\n\n /** @default \"Account\" */\n ACCOUNT: \"Account\",\n\n /** @default \"Accounts\" */\n ACCOUNTS: \"Accounts\",\n\n /** @default \"Manage your currently signed in accounts.\" */\n ACCOUNTS_DESCRIPTION: \"Switch between your currently signed in accounts.\",\n\n /** @default \"Sign in to an additional account.\" */\n ACCOUNTS_INSTRUCTIONS: \"Sign in to an additional account.\",\n\n /** @default \"Add Account\" */\n ADD_ACCOUNT: \"Add Account\",\n\n /** @default \"Add Passkey\" */\n ADD_PASSKEY: \"Add Passkey\",\n\n /** @default \"Already have an account?\" */\n ALREADY_HAVE_AN_ACCOUNT: \"Already have an account?\",\n\n /** @default \"Avatar\" */\n AVATAR: \"Avatar\",\n\n /** @default \"Click on the avatar to upload a custom one from your files.\" */\n AVATAR_DESCRIPTION:\n \"Click on the avatar to upload a custom one from your files.\",\n\n /** @default \"An avatar is optional but strongly recommended.\" */\n AVATAR_INSTRUCTIONS: \"An avatar is optional but strongly recommended.\",\n\n /** @default \"Backup code is required\" */\n BACKUP_CODE_REQUIRED: \"Backup code is required\",\n\n /** @default \"Backup Codes\" */\n BACKUP_CODES: \"Backup Codes\",\n\n /** @default \"Save these backup codes in a secure place. You can use them to access your account if you lose your two-factor authentication method.\" */\n BACKUP_CODES_DESCRIPTION:\n \"Save these backup codes in a secure place. You can use them to access your account if you lose your two-factor authentication method.\",\n\n /** @default \"Backup Code.\" */\n BACKUP_CODE_PLACEHOLDER: \"Backup Code\",\n\n /** @default \"Backup Code\" */\n BACKUP_CODE: \"Backup Code\",\n\n /** @default \"Cancel\" */\n CANCEL: \"Cancel\",\n\n /** @default \"Change Password\" */\n CHANGE_PASSWORD: \"Change Password\",\n\n /** @default \"Enter your current password and a new password.\" */\n CHANGE_PASSWORD_DESCRIPTION:\n \"Enter your current password and a new password.\",\n\n /** @default \"Please use 8 characters at minimum.\" */\n CHANGE_PASSWORD_INSTRUCTIONS: \"Please use 8 characters at minimum.\",\n\n /** @default \"Your password has been changed.\" */\n CHANGE_PASSWORD_SUCCESS: \"Your password has been changed.\",\n\n /** @default \"Confirm Password\" */\n CONFIRM_PASSWORD: \"Confirm Password\",\n\n /** @default \"Confirm Password\" */\n CONFIRM_PASSWORD_PLACEHOLDER: \"Confirm Password\",\n\n /** @default \"Confirm password is required\" */\n CONFIRM_PASSWORD_REQUIRED: \"Confirm password is required\",\n\n /** @default \"Continue with Authenticator\" */\n CONTINUE_WITH_AUTHENTICATOR: \"Continue with Authenticator\",\n\n /** @default \"Copied to clipboard\" */\n COPIED_TO_CLIPBOARD: \"Copied to clipboard\",\n\n /** @default \"Copy to clipboard\" */\n COPY_TO_CLIPBOARD: \"Copy to clipboard\",\n\n /** @default \"Copy all codes\" */\n COPY_ALL_CODES: \"Copy all codes\",\n\n /** @default \"Continue\" */\n CONTINUE: \"Continue\",\n\n /** @default \"Current Password\" */\n CURRENT_PASSWORD: \"Current Password\",\n\n /** @default \"Current Password\" */\n CURRENT_PASSWORD_PLACEHOLDER: \"Current Password\",\n\n /** @default \"Current Session\" */\n CURRENT_SESSION: \"Current Session\",\n\n /** @default \"Update\" */\n UPDATE: \"Update\",\n\n /** @default \"Delete\" */\n DELETE: \"Delete\",\n\n /** @default \"Delete Avatar\" */\n DELETE_AVATAR: \"Delete Avatar\",\n\n /** @default \"Delete Account\" */\n DELETE_ACCOUNT: \"Delete Account\",\n\n /** @default \"Permanently remove your account and all of its contents. This action is not reversible, so please continue with caution.\" */\n DELETE_ACCOUNT_DESCRIPTION:\n \"Permanently remove your account and all of its contents. This action is not reversible, so please continue with caution.\",\n\n /** @default \"Please confirm the deletion of your account. This action is not reversible, so please continue with caution.\" */\n DELETE_ACCOUNT_INSTRUCTIONS:\n \"Please confirm the deletion of your account. This action is not reversible, so please continue with caution.\",\n\n /** @default \"Please check your email to verify the deletion of your account.\" */\n DELETE_ACCOUNT_VERIFY:\n \"Please check your email to verify the deletion of your account.\",\n\n /** @default \"Your account has been deleted.\" */\n DELETE_ACCOUNT_SUCCESS: \"Your account has been deleted.\",\n\n /** @default \"Disable Two-Factor\" */\n DISABLE_TWO_FACTOR: \"Disable Two-Factor\",\n\n /** @default \"Choose a provider to login to your account\" */\n DISABLED_CREDENTIALS_DESCRIPTION:\n \"Choose a provider to login to your account\",\n\n /** @default \"Don't have an account?\" */\n DONT_HAVE_AN_ACCOUNT: \"Don't have an account?\",\n\n /** @default \"Done\" */\n DONE: \"Done\",\n\n /** @default \"Email\" */\n EMAIL: \"Email\",\n\n /** @default \"Enter the email address you want to use to log in.\" */\n EMAIL_DESCRIPTION: \"Enter the email address you want to use to log in.\",\n\n /** @default \"Please enter a valid email address.\" */\n EMAIL_INSTRUCTIONS: \"Please enter a valid email address.\",\n\n /** @default \"Email is the same\" */\n EMAIL_IS_THE_SAME: \"Email is the same\",\n\n /** @default \"m@example.com\" */\n EMAIL_PLACEHOLDER: \"m@example.com\",\n\n /** @default \"Email address is required\" */\n EMAIL_REQUIRED: \"Email address is required\",\n\n /** @default \"Please check your email to verify the change.\" */\n EMAIL_VERIFY_CHANGE: \"Please check your email to verify the change.\",\n\n /** @default \"Email Verification\" */\n EMAIL_VERIFICATION: \"Email Verification\",\n\n /** @default \"Please check your email for the verification code to complete your registration.\" */\n EMAIL_VERIFICATION_DESCRIPTION:\n \"Please check your email for the verification code to complete your registration.\",\n\n /** @default \"Email verification successful.\" */\n EMAIL_VERIFICATION_SUCCESS: \"Email verification successful.\",\n\n /** @default \"Enable Two-Factor\" */\n ENABLE_TWO_FACTOR: \"Enable Two-Factor\",\n\n /** @default \"is invalid\" */\n IS_INVALID: \"is invalid\",\n\n /** @default \"is required\" */\n IS_REQUIRED: \"is required\",\n\n /** @default \"is the same\" */\n IS_THE_SAME: \"is the same\",\n\n /** @default \"Forgot authenticator?\" */\n FORGOT_AUTHENTICATOR: \"Forgot authenticator?\",\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 password reset link.\" */\n FORGOT_PASSWORD_EMAIL: \"Check your email for the password reset link.\",\n\n /** @default \"Forgot your password?\" */\n FORGOT_PASSWORD_LINK: \"Forgot your password?\",\n\n /** @default \"Link\" */\n LINK: \"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 \"Check your email for the magic link\" */\n MAGIC_LINK_EMAIL: \"Check your email for the magic link\",\n\n /** @default \"Email Code\" */\n EMAIL_OTP: \"Email Code\",\n\n /** @default \"Send code\" */\n EMAIL_OTP_SEND_ACTION: \"Send code\",\n\n /** @default \"Verify code\" */\n EMAIL_OTP_VERIFY_ACTION: \"Verify code\",\n\n /** @default \"Enter your email to receive a code\" */\n EMAIL_OTP_DESCRIPTION: \"Enter your email to receive a code\",\n\n /** @default \"Please check your email for the verification code.\" */\n EMAIL_OTP_VERIFICATION_SENT:\n \"Please check your email for the verification code.\",\n\n /** @default \"Name\" */\n NAME: \"Name\",\n\n /** @default \"Please enter your full name, or a display name.\" */\n NAME_DESCRIPTION: \"Please enter your full name, or a display name.\",\n\n /** @default \"Please use 32 characters at maximum.\" */\n NAME_INSTRUCTIONS: \"Please use 32 characters at maximum.\",\n\n /** @default \"Name\" */\n NAME_PLACEHOLDER: \"Name\",\n\n /** @default \"New Password\" */\n NEW_PASSWORD: \"New Password\",\n\n /** @default \"New Password\" */\n NEW_PASSWORD_PLACEHOLDER: \"New Password\",\n\n /** @default \"New password is required\" */\n NEW_PASSWORD_REQUIRED: \"New password is required\",\n\n /** @default \"One-Time Password\" */\n ONE_TIME_PASSWORD: \"One-Time Password\",\n\n /** @default \"Or continue with\" */\n OR_CONTINUE_WITH: \"Or continue with\",\n\n /** @default \"Passkey\" */\n PASSKEY: \"Passkey\",\n\n /** @default \"Passkeys\" */\n PASSKEYS: \"Passkeys\",\n\n /** @default \"Manage your passkeys for secure access.\" */\n PASSKEYS_DESCRIPTION: \"Manage your passkeys for secure access.\",\n\n /** @default \"Securely access your account without a password.\" */\n PASSKEYS_INSTRUCTIONS: \"Securely access your account without a password.\",\n\n /** @default \"Personal Account\" */\n PERSONAL_ACCOUNT: \"Personal Account\",\n\n /** @default \"API Keys\" */\n API_KEYS: \"API Keys\",\n\n /** @default \"Manage your API keys for secure access.\" */\n API_KEYS_DESCRIPTION: \"Manage your API keys for secure access.\",\n\n /** @default \"Generate API keys to access your account programmatically.\" */\n API_KEYS_INSTRUCTIONS:\n \"Generate API keys to access your account programmatically.\",\n\n /** @default \"Create API Key\" */\n CREATE_API_KEY: \"Create API Key\",\n\n /** @default \"Enter a unique name for your API key to differentiate it from other keys.\" */\n CREATE_API_KEY_DESCRIPTION:\n \"Enter a unique name for your API key to differentiate it from other keys.\",\n\n /** @default \"New API Key\" */\n API_KEY_NAME_PLACEHOLDER: \"New API Key\",\n\n /** @default \"API Key Created\" */\n API_KEY_CREATED: \"API Key Created\",\n\n /** @default \"Please copy your API key and store it in a safe place. For security reasons we cannot show it again.\" */\n CREATE_API_KEY_SUCCESS:\n \"Please copy your API key and store it in a safe place. For security reasons we cannot show it again.\",\n\n /** @default \"Never Expires\" */\n NEVER_EXPIRES: \"Never Expires\",\n\n /** @default \"Expires\" */\n EXPIRES: \"Expires\",\n\n /** @default \"No Expiration\" */\n NO_EXPIRATION: \"No Expiration\",\n\n /** @default \"Create Organization\" */\n CREATE_ORGANIZATION: \"Create Organization\",\n\n /** @default \"Organization\" */\n ORGANIZATION: \"Organization\",\n\n /** @default \"Name\" */\n ORGANIZATION_NAME: \"Name\",\n\n /** @default \"Acme Inc.\" */\n ORGANIZATION_NAME_PLACEHOLDER: \"Acme Inc.\",\n\n /** @default \"This is your organization's visible name.\" */\n ORGANIZATION_NAME_DESCRIPTION: \"This is your organization's visible name.\",\n\n /** @default \"Please use 32 characters at maximum.\" */\n ORGANIZATION_NAME_INSTRUCTIONS: \"Please use 32 characters at maximum.\",\n\n /** @default \"Slug URL\" */\n ORGANIZATION_SLUG: \"Slug URL\",\n\n /** @default \"This is your organization's URL namespace.\" */\n ORGANIZATION_SLUG_DESCRIPTION: \"This is your organization's URL namespace.\",\n\n /** @default \"Please use 48 characters at maximum.\" */\n ORGANIZATION_SLUG_INSTRUCTIONS: \"Please use 48 characters at maximum.\",\n\n /** @default \"acme-inc\" */\n ORGANIZATION_SLUG_PLACEHOLDER: \"acme-inc\",\n\n /** @default \"Organization created successfully\" */\n CREATE_ORGANIZATION_SUCCESS: \"Organization created successfully\",\n\n /** @default \"Password\" */\n PASSWORD: \"Password\",\n\n /** @default \"Password\" */\n PASSWORD_PLACEHOLDER: \"Password\",\n\n /** @default \"Password is required\" */\n PASSWORD_REQUIRED: \"Password is required\",\n\n /** @default \"Passwords do not match\" */\n PASSWORDS_DO_NOT_MATCH: \"Passwords do not match\",\n\n /** @default \"Providers\" */\n PROVIDERS: \"Providers\",\n\n /** @default \"Connect your account with a third-party service.\" */\n PROVIDERS_DESCRIPTION: \"Connect your account with a third-party service.\",\n\n /** @default \"Recover Account\" */\n RECOVER_ACCOUNT: \"Recover Account\",\n\n /** @default \"Recover account\" */\n RECOVER_ACCOUNT_ACTION: \"Recover account\",\n\n /** @default \"Please enter a backup code to access your account\" */\n RECOVER_ACCOUNT_DESCRIPTION:\n \"Please enter a backup code to access your account\",\n\n /** @default \"Remember me\" */\n REMEMBER_ME: \"Remember me\",\n\n /** @default \"Resend code\" */\n RESEND_CODE: \"Resend code\",\n\n /** @default \"Resend verification email\" */\n RESEND_VERIFICATION_EMAIL: \"Resend Verification Email\",\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 \"Enter your new password below\" */\n RESET_PASSWORD_DESCRIPTION: \"Enter your new password below\",\n\n /** @default \"Password reset successfully\" */\n RESET_PASSWORD_SUCCESS: \"Password reset successfully\",\n\n /** @default \"Request failed\" */\n REQUEST_FAILED: \"Request failed\",\n\n /** @default \"Revoke\" */\n REVOKE: \"Revoke\",\n\n /** @default \"Delete API Key\" */\n DELETE_API_KEY: \"Delete API Key\",\n\n /** @default \"Are you sure you want to delete this API key?\" */\n DELETE_API_KEY_CONFIRM: \"Are you sure you want to delete this API key?\",\n\n /** @default \"API Key\" */\n API_KEY: \"API Key\",\n\n /** @default \"Sign In\" */\n SIGN_IN: \"Sign In\",\n\n /** @default \"Login\" */\n SIGN_IN_ACTION: \"Login\",\n\n /** @default \"Enter your email below to login to your account\" */\n SIGN_IN_DESCRIPTION: \"Enter your email below to login to your account\",\n\n /** @default \"Enter your username or email below to login to your account\" */\n SIGN_IN_USERNAME_DESCRIPTION:\n \"Enter your username or email to login to your account\",\n\n /** @default \"Sign in with\" */\n SIGN_IN_WITH: \"Sign in with\",\n\n /** @default \"Sign Out\" */\n SIGN_OUT: \"Sign Out\",\n\n /** @default \"Sign Up\" */\n SIGN_UP: \"Sign Up\",\n\n /** @default \"Create an account\" */\n SIGN_UP_ACTION: \"Create an 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 \"Sessions\" */\n SESSIONS: \"Sessions\",\n\n /** @default \"Manage your active sessions and revoke access.\" */\n SESSIONS_DESCRIPTION: \"Manage your active sessions and revoke access.\",\n\n /** @default \"Set Password\" */\n SET_PASSWORD: \"Set Password\",\n\n /** @default \"Click the button below to receive an email to set up a password for your account.\" */\n SET_PASSWORD_DESCRIPTION:\n \"Click the button below to receive an email to set up a password for your account.\",\n\n /** @default \"Settings\" */\n SETTINGS: \"Settings\",\n\n /** @default \"Save\" */\n SAVE: \"Save\",\n\n /** @default \"Security\" */\n SECURITY: \"Security\",\n\n /** @default \"Switch Account\" */\n SWITCH_ACCOUNT: \"Switch Account\",\n\n /** @default \"Trust this device\" */\n TRUST_DEVICE: \"Trust this device\",\n\n /** @default \"Two-Factor\" */\n TWO_FACTOR: \"Two-Factor\",\n\n /** @default \"Verify code\" */\n TWO_FACTOR_ACTION: \"Verify code\",\n\n /** @default \"Please enter your one-time password to continue\" */\n TWO_FACTOR_DESCRIPTION: \"Please enter your one-time password to continue\",\n\n /** @default \"Add an extra layer of security to your account.\" */\n TWO_FACTOR_CARD_DESCRIPTION:\n \"Add an extra layer of security to your account.\",\n\n /** @default \"Please enter your password to disable 2FA.\" */\n TWO_FACTOR_DISABLE_INSTRUCTIONS:\n \"Please enter your password to disable 2FA.\",\n\n /** @default \"Please enter your password to enable 2FA\" */\n TWO_FACTOR_ENABLE_INSTRUCTIONS: \"Please enter your password to enable 2FA.\",\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 \"Two-Factor Authentication\" */\n TWO_FACTOR_PROMPT: \"Two-Factor Authentication\",\n\n /** @default \"Scan the QR Code with your Authenticator\" */\n TWO_FACTOR_TOTP_LABEL: \"Scan the QR Code with your Authenticator\",\n\n /** @default \"Send verification code\" */\n SEND_VERIFICATION_CODE: \"Send verification code\",\n\n /** @default \"Unlink\" */\n UNLINK: \"Unlink\",\n\n /** @default \"Updated successfully\" */\n UPDATED_SUCCESSFULLY: \"updated successfully\",\n\n /** @default \"Username\" */\n USERNAME: \"Username\",\n\n /** @default \"Enter the username you want to use to log in.\" */\n USERNAME_DESCRIPTION: \"Enter the username you want to use to log in.\",\n\n /** @default \"Please use 32 characters at maximum.\" */\n USERNAME_INSTRUCTIONS: \"Please use 32 characters at maximum.\",\n\n /** @default \"Username\" */\n USERNAME_PLACEHOLDER: \"Username\",\n\n /** @default \"(Optional)\" */\n OPTIONAL_BRACKETS: \"(Optional)\",\n\n /** @default \"Username or email\" */\n SIGN_IN_USERNAME_PLACEHOLDER: \"Username or email\",\n\n /** @default \"Verify Your Email\" */\n VERIFY_YOUR_EMAIL: \"Verify Your Email\",\n\n /** @default \"Please verify your email address. Check your inbox for the verification email. If you haven't received the email, click the button below to resend.\" */\n VERIFY_YOUR_EMAIL_DESCRIPTION:\n \"Please verify your email address. Check your inbox for the verification email. If you haven't received the email, click the button below to resend.\",\n\n /** @default \"Go back\" */\n GO_BACK: \"Go back\",\n\n /** @default \"Your session is not fresh. Please sign in again.\" */\n SESSION_NOT_FRESH: \"Your session is not fresh. Please sign in again.\",\n\n /** @default \"Upload Avatar\" */\n UPLOAD_AVATAR: \"Upload Avatar\",\n\n /** @default \"Logo\" */\n LOGO: \"Logo\",\n\n /** @default \"Click on the logo to upload a custom one from your files.\" */\n LOGO_DESCRIPTION:\n \"Click on the logo to upload a custom one from your files.\",\n\n /** @default \"A logo is optional but strongly recommended.\" */\n LOGO_INSTRUCTIONS: \"A logo is optional but strongly recommended.\",\n\n /** @default \"Upload\" */\n UPLOAD: \"Upload\",\n\n /** @default \"Upload Logo\" */\n UPLOAD_LOGO: \"Upload Logo\",\n\n /** @default \"Delete Logo\" */\n DELETE_LOGO: \"Delete Logo\",\n\n /** @default \"Privacy Policy\" */\n PRIVACY_POLICY: \"Privacy Policy\",\n\n /** @default \"Terms of Service\" */\n TERMS_OF_SERVICE: \"Terms of Service\",\n\n /** @default \"This site is protected by reCAPTCHA.\" */\n PROTECTED_BY_RECAPTCHA: \"This site is protected by reCAPTCHA.\",\n\n /** @default \"By continuing, you agree to the\" */\n BY_CONTINUING_YOU_AGREE: \"By continuing, you agree to the\",\n\n /** @default \"User\" */\n USER: \"User\",\n\n /** @default \"Organizations\" */\n ORGANIZATIONS: \"Organizations\",\n\n /** @default \"Manage your organizations and memberships.\" */\n ORGANIZATIONS_DESCRIPTION: \"Manage your organizations and memberships.\",\n\n /** @default \"Create an organization to collaborate with other users.\" */\n ORGANIZATIONS_INSTRUCTIONS:\n \"Create an organization to collaborate with other users.\",\n\n /** @default \"Leave Organization\" */\n LEAVE_ORGANIZATION: \"Leave Organization\",\n\n /** @default \"Are you sure you want to leave this organization?\" */\n LEAVE_ORGANIZATION_CONFIRM:\n \"Are you sure you want to leave this organization?\",\n\n /** @default \"You have successfully left the organization.\" */\n LEAVE_ORGANIZATION_SUCCESS: \"You have successfully left the organization.\",\n\n /** @default \"Manage Organization\" */\n MANAGE_ORGANIZATION: \"Manage Organization\",\n\n /** @default \"Remove Member\" */\n REMOVE_MEMBER: \"Remove Member\",\n\n /** @default \"Are you sure you want to remove this member from the organization?\" */\n REMOVE_MEMBER_CONFIRM:\n \"Are you sure you want to remove this member from the organization?\",\n\n /** @default \"Member removed successfully\" */\n REMOVE_MEMBER_SUCCESS: \"Member removed successfully\",\n\n /** @default \"Invite Member\" */\n INVITE_MEMBER: \"Invite Member\",\n\n /** @default \"Members\" */\n MEMBERS: \"Members\",\n\n /** @default \"Add or remove members and manage their roles.\" */\n MEMBERS_DESCRIPTION: \"Add or remove members and manage their roles.\",\n\n /** @default \"Invite new members to your organization.\" */\n MEMBERS_INSTRUCTIONS: \"Invite new members to your organization.\",\n\n /** @default \"Send an invitation to add a new member to your organization.\" */\n INVITE_MEMBER_DESCRIPTION:\n \"Send an invitation to add a new member to your organization.\",\n\n /** @default \"Role\" */\n ROLE: \"Role\",\n\n /** @default \"Select a role\" */\n SELECT_ROLE: \"Select a role\",\n\n /** @default \"Admin\" */\n ADMIN: \"Admin\",\n\n /** @default \"Member\" */\n MEMBER: \"Member\",\n\n /** @default \"Guest\" */\n GUEST: \"Guest\",\n\n /** @default \"Owner\" */\n OWNER: \"Owner\",\n\n /** @default \"Update the role for this member\" */\n UPDATE_ROLE_DESCRIPTION: \"Update the role for this member\",\n\n /** @default \"Update Role\" */\n UPDATE_ROLE: \"Update Role\",\n\n /** @default \"Member role updated successfully\" */\n MEMBER_ROLE_UPDATED: \"Member role updated successfully\",\n\n /** @default \"Send Invitation\" */\n SEND_INVITATION: \"Send Invitation\",\n\n /** @default \"Invitation sent successfully\" */\n SEND_INVITATION_SUCCESS: \"Invitation sent successfully\",\n\n /** @default \"Pending Invitations\" */\n PENDING_INVITATIONS: \"Pending Invitations\",\n\n /** @default \"Manage pending invitations to your organization.\" */\n PENDING_INVITATIONS_DESCRIPTION:\n \"Manage pending invitations to your organization.\",\n\n /** @default \"Invitations you've received from organizations.\" */\n PENDING_USER_INVITATIONS_DESCRIPTION:\n \"Invitations you've received from organizations.\",\n\n /** @default \"Cancel Invitation\" */\n CANCEL_INVITATION: \"Cancel Invitation\",\n\n /** @default \"Invitation cancelled successfully\" */\n INVITATION_CANCELLED: \"Invitation cancelled successfully\",\n\n /** @default \"Accept Invitation\" */\n ACCEPT_INVITATION: \"Accept Invitation\",\n\n /** @default \"You have been invited to join an organization.\" */\n ACCEPT_INVITATION_DESCRIPTION:\n \"You have been invited to join an organization.\",\n\n /** @default \"Invitation accepted successfully\" */\n INVITATION_ACCEPTED: \"Invitation accepted successfully\",\n\n /** @default \"Invitation rejected successfully\" */\n INVITATION_REJECTED: \"Invitation rejected successfully\",\n\n /** @default \"Accept\" */\n ACCEPT: \"Accept\",\n\n /** @default \"Reject\" */\n REJECT: \"Reject\",\n\n /** @default \"This invitation has expired\" */\n INVITATION_EXPIRED: \"This invitation has expired\",\n\n /** @default \"Delete Organization\" */\n DELETE_ORGANIZATION: \"Delete Organization\",\n\n /** @default \"Permanently remove your organization and all of its contents. This action is not reversible — please continue with caution.\" */\n DELETE_ORGANIZATION_DESCRIPTION:\n \"Permanently remove your organization and all of its contents. This action is not reversible — please continue with caution.\",\n\n /** @default \"Organization deleted successfully\" */\n DELETE_ORGANIZATION_SUCCESS: \"Organization deleted successfully\",\n\n /** @default \"Enter the organization slug to continue:\" */\n DELETE_ORGANIZATION_INSTRUCTIONS:\n \"Enter the organization slug to continue:\",\n\n /** @default \"Organization slug is required\" */\n SLUG_REQUIRED: \"Organization slug is required\",\n\n /** @default \"The slug does not match\" */\n SLUG_DOES_NOT_MATCH: \"The slug does not match\",\n\n // Teams\n /** @default \"Team\" */\n TEAM: \"Team\",\n\n /** @default \"Teams\" */\n TEAMS: \"Teams\",\n\n /** @default \"Active\" */\n TEAM_ACTIVE: \"Active\",\n\n /** @default \"Set Active\" */\n TEAM_SET_ACTIVE: \"Set Active\",\n\n /** @default \"Create Team\" */\n CREATE_TEAM: \"Create Team\",\n\n /** @default \"Team created successfully\" */\n CREATE_TEAM_SUCCESS: \"Team created successfully\",\n\n /** @default \"Update Team\" */\n UPDATE_TEAM: \"Update Team\",\n\n /** @default \"Update the name for this team\" */\n UPDATE_TEAM_DESCRIPTION: \"Update the name for this team\",\n\n /** @default \"Are you sure you want to remove this team from the organization?\" */\n REMOVE_TEAM_CONFIRM:\n \"Are you sure you want to remove this team from the organization?\",\n\n /** @default \"Add new team to your organization.\" */\n CREATE_TEAM_INSTRUCTIONS: \"Add new team to your organization.\",\n\n /** @default \"Team Name\" */\n TEAM_NAME: \"Team Name\",\n\n /** @default \"Engineering Team\" */\n TEAM_NAME_PLACEHOLDER: \"Engineering Team\",\n\n /** @default \"This is your team's visible name.\" */\n TEAM_NAME_DESCRIPTION: \"This is your team's visible name.\",\n\n /** @default \"Please use 64 characters at maximum.\" */\n TEAM_NAME_INSTRUCTIONS: \"Please use 64 characters at maximum.\",\n\n /** @default \"Manage your teams within your organization.\" */\n TEAMS_DESCRIPTION: \"Manage your teams within your organization.\",\n\n /** @default \"You are a member of the following teams.\" */\n USER_TEAMS_DESCRIPTION: \"You are a member of the following teams.\",\n\n /** @default \"Delete Team\" */\n DELETE_TEAM: \"Delete Team\",\n\n /** @default \"Permanently remove this team and all of its contents.\" */\n DELETE_TEAM_DESCRIPTION:\n \"Permanently remove this team and all of its contents.\",\n\n /** @default \"Team deleted successfully\" */\n DELETE_TEAM_SUCCESS: \"Team deleted successfully\",\n\n /** @default \"Enter the team name to continue:\" */\n DELETE_TEAM_INSTRUCTIONS: \"Enter the team name to continue:\",\n\n /** @default \"Team name is required\" */\n TEAM_NAME_REQUIRED: \"Team name is required\",\n\n /** @default \"The team name does not match\" */\n TEAM_NAME_DOES_NOT_MATCH: \"The team name does not match\",\n\n /** @default \"Team Members\" */\n TEAM_MEMBERS: \"Team Members\",\n\n /** @default \"Manage your team members and their roles.\" */\n TEAM_MEMBERS_DESCRIPTION: \"Manage your team members and their roles.\",\n\n /** @default \"Add Team Member\" */\n ADD_TEAM_MEMBER: \"Add Team Member\",\n\n /** @default \"Remove Team Member\" */\n REMOVE_TEAM_MEMBER: \"Remove Team Member\",\n\n /** @default \"Are you sure you want to remove this member from the team?\" */\n REMOVE_TEAM_MEMBER_CONFIRM:\n \"Are you sure you want to remove this member from the team?\",\n\n /** @default \"Team member removed successfully\" */\n REMOVE_TEAM_MEMBER_SUCCESS: \"Team member removed successfully\",\n\n /** @default \"Team member added successfully\" */\n ADD_TEAM_MEMBER_SUCCESS: \"Team member added successfully\",\n\n /** @default \"Team updated successfully\" */\n UPDATE_TEAM_SUCCESS: \"Team updated successfully\",\n\n /** @default \"Manage Team Members\" */\n MANAGE_TEAM_MEMBERS: \"Manage Team Members\",\n\n /** @default \"Search and add organization members to this team.\" */\n MANAGE_TEAM_MEMBERS_DESCRIPTION:\n \"Search and add organization members to this team.\",\n\n /** @default \"No teams found\" */\n NO_TEAMS_FOUND: \"No teams found\",\n\n /** @default \"member\" */\n MEMBER_SINGULAR: \"member\",\n\n /** @default \"members\" */\n MEMBER_PLURAL: \"members\",\n\n /** @default \"Unknown\" */\n UNKNOWN: \"Unknown\",\n\n ...BASE_ERROR_CODES,\n ...ADMIN_ERROR_CODES,\n ...ANONYMOUS_ERROR_CODES,\n ...API_KEY_ERROR_CODES,\n ...CAPTCHA_ERROR_CODES,\n ...EMAIL_OTP_ERROR_CODES,\n ...GENERIC_OAUTH_ERROR_CODES,\n ...HAVEIBEENPWNED_ERROR_CODES,\n ...MULTI_SESSION_ERROR_CODES,\n ...ORGANIZATION_ERROR_CODES,\n ...PASSKEY_ERROR_CODES,\n ...PHONE_NUMBER_ERROR_CODES,\n ...STRIPE_ERROR_CODES,\n ...TEAM_ERROR_CODES,\n ...TWO_FACTOR_ERROR_CODES,\n ...USERNAME_ERROR_CODES\n}\n\nexport type AuthLocalization = Partial<typeof authLocalization>\n","import { useContext, useEffect } from \"react\"\nimport { useCurrentOrganization } from \"../hooks/use-current-organization\"\nimport { AuthUIContext } from \"./auth-ui-provider\"\n\nexport const OrganizationRefetcher = () => {\n const {\n hooks: { useListOrganizations, useSession },\n organization: organizationOptions,\n navigate,\n redirectTo\n } = useContext(AuthUIContext)\n\n const { slug, pathMode, personalPath } = organizationOptions || {}\n\n const { data: sessionData } = useSession()\n\n const {\n data: organization,\n isPending: organizationPending,\n isRefetching: organizationRefetching,\n refetch: refetchOrganization\n } = useCurrentOrganization()\n\n const { refetch: refetchListOrganizations } = useListOrganizations()\n\n const { data: organizations } = useListOrganizations()\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Refetch fix\n useEffect(() => {\n if (!sessionData?.user.id) return\n\n if (organization || organizations) {\n refetchOrganization?.()\n refetchListOrganizations?.()\n }\n }, [sessionData?.user.id])\n\n useEffect(() => {\n if (organizationRefetching || organizationPending) return\n\n if (slug && pathMode === \"slug\" && !organization) {\n navigate(personalPath || redirectTo)\n }\n }, [\n organization,\n organizationRefetching,\n organizationPending,\n slug,\n pathMode,\n personalPath,\n navigate,\n redirectTo\n ])\n\n return null\n}\n","import type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext, useMemo } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\n\nexport function useCurrentOrganization({\n slug: slugProp\n}: {\n slug?: string\n} = {}) {\n const {\n organization: organizationOptions,\n hooks: { useActiveOrganization, useListOrganizations }\n } = useContext(AuthUIContext)\n\n const { pathMode, slug: contextSlug } = organizationOptions || {}\n\n let data: Organization | null | undefined\n let isPending: boolean | undefined\n let isRefetching: boolean | undefined\n\n let refetch: (() => void) | undefined\n\n const {\n data: organizations,\n isPending: organizationsPending,\n isRefetching: organizationsRefetching\n } = useListOrganizations()\n\n if (pathMode === \"slug\") {\n const slug = slugProp || contextSlug\n\n data = organizations?.find((organization) => organization.slug === slug)\n isPending = organizationsPending\n isRefetching = organizationsRefetching\n } else {\n const {\n data: activeOrganization,\n isPending: organizationPending,\n isRefetching: organizationRefetching,\n refetch: refetchOrganization\n } = useActiveOrganization()\n\n refetch = refetchOrganization\n\n data = activeOrganization\n isPending = organizationPending\n isRefetching = organizationRefetching\n }\n\n return useMemo(\n () => ({\n data,\n isPending,\n isRefetching,\n refetch\n }),\n [data, isPending, isRefetching, refetch]\n )\n}\n","export const authViewPaths = {\n /** @default \"callback\" */\n CALLBACK: \"callback\",\n /** @default \"email-otp\" */\n EMAIL_OTP: \"email-otp\",\n /** @default \"email-verification\" */\n EMAIL_VERIFICATION: \"email-verification\",\n /** @default \"forgot-password\" */\n FORGOT_PASSWORD: \"forgot-password\",\n /** @default \"magic-link\" */\n MAGIC_LINK: \"magic-link\",\n /** @default \"recover-account\" */\n RECOVER_ACCOUNT: \"recover-account\",\n /** @default \"reset-password\" */\n RESET_PASSWORD: \"reset-password\",\n /** @default \"sign-in\" */\n SIGN_IN: \"sign-in\",\n /** @default \"sign-out\" */\n SIGN_OUT: \"sign-out\",\n /** @default \"sign-up\" */\n SIGN_UP: \"sign-up\",\n /** @default \"two-factor\" */\n TWO_FACTOR: \"two-factor\",\n /** @default \"accept-invitation\" */\n ACCEPT_INVITATION: \"accept-invitation\"\n}\n\nexport type AuthViewPaths = typeof authViewPaths\n\n// Account-scoped views (signed-in user)\nexport const accountViewPaths = {\n /** @default \"settings\" */\n SETTINGS: \"settings\",\n /** @default \"security\" */\n SECURITY: \"security\",\n /** @default \"teams\" */\n TEAMS: \"teams\",\n /** @default \"api-keys\" */\n API_KEYS: \"api-keys\",\n /** @default \"organizations\" */\n ORGANIZATIONS: \"organizations\"\n}\n\nexport type AccountViewPaths = typeof accountViewPaths\n\n// Organization-scoped views\nexport const organizationViewPaths = {\n /** @default \"settings\" */\n SETTINGS: \"settings\",\n /** @default \"members\" */\n MEMBERS: \"members\",\n /** @default \"teams\" */\n TEAMS: \"teams\",\n /** @default \"api-keys\" */\n API_KEYS: \"api-keys\"\n}\n\nexport type OrganizationViewPaths = typeof organizationViewPaths\nexport type AuthViewPath = keyof AuthViewPaths\nexport type AccountViewPath = keyof AccountViewPaths\nexport type OrganizationViewPath = keyof OrganizationViewPaths\n","\"use client\"\nimport { useContext, useMemo, useState } from \"react\"\n\nimport { useIsHydrated } from \"../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { SettingsCellSkeleton } from \"../settings/skeletons/settings-cell-skeleton\"\nimport { CardContent } from \"../ui/card\"\nimport { CreateOrganizationDialog } from \"./create-organization-dialog\"\nimport { OrganizationCell } from \"./organization-cell\"\n\nexport function OrganizationsCard({\n className,\n classNames,\n localization,\n ...props\n}: SettingsCardProps) {\n const {\n hooks: { useListOrganizations },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = useMemo(\n () => ({ ...contextLocalization, ...localization }),\n [contextLocalization, localization]\n )\n\n const isHydrated = useIsHydrated()\n const { data: organizations, isPending: organizationsPending } =\n useListOrganizations()\n\n const isPending = !isHydrated || organizationsPending\n\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n\n return (\n <>\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.ORGANIZATIONS}\n description={localization.ORGANIZATIONS_DESCRIPTION}\n instructions={localization.ORGANIZATIONS_INSTRUCTIONS}\n actionLabel={localization.CREATE_ORGANIZATION}\n action={() => setCreateDialogOpen(true)}\n isPending={isPending}\n {...props}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {isPending && <SettingsCellSkeleton />}\n {organizations?.map((organization) => (\n <OrganizationCell\n key={organization.id}\n classNames={classNames}\n organization={organization}\n localization={localization}\n />\n ))}\n </CardContent>\n </SettingsCard>\n\n <CreateOrganizationDialog\n classNames={classNames}\n localization={localization}\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n />\n </>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from \"../../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport { Loader2 } from \"lucide-react\"\nimport type { ComponentProps, ReactNode } from \"react\"\nimport { useFormState } from \"react-hook-form\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Button } from \"../../ui/button\"\nimport type { SettingsCardClassNames } from \"./settings-card\"\n\ninterface SettingsActionButtonProps extends ComponentProps<typeof Button> {\n classNames?: SettingsCardClassNames\n actionLabel: ReactNode\n disabled?: boolean\n isSubmitting?: boolean\n}\n\nexport function SettingsActionButton({\n classNames,\n actionLabel,\n disabled,\n isSubmitting,\n variant,\n onClick,\n ...props\n}: SettingsActionButtonProps) {\n if (!onClick) {\n const formState = useFormState()\n isSubmitting = formState.isSubmitting\n }\n\n return (\n <Button\n className={cn(\n \"md:ms-auto\",\n classNames?.button,\n variant === \"default\" && classNames?.primaryButton,\n variant === \"destructive\" && classNames?.destructiveButton\n )}\n disabled={isSubmitting || disabled}\n size=\"sm\"\n type={onClick ? \"button\" : \"submit\"}\n variant={variant}\n onClick={onClick}\n {...props}\n >\n {isSubmitting && <Loader2 className=\"animate-spin\" />}\n {actionLabel}\n </Button>\n )\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport type { ReactNode } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { CardDescription, CardFooter } from \"../../ui/card\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport { SettingsActionButton } from \"./settings-action-button\"\nimport type { SettingsCardClassNames } from \"./settings-card\"\n\nexport interface SettingsCardFooterProps {\n className?: string\n classNames?: SettingsCardClassNames\n actionLabel?: ReactNode\n disabled?: boolean\n instructions?: ReactNode\n isPending?: boolean\n isSubmitting?: boolean\n optimistic?: boolean\n variant?: \"default\" | \"destructive\"\n action?: () => Promise<unknown> | unknown\n}\n\nexport function SettingsCardFooter({\n className,\n classNames,\n actionLabel,\n disabled,\n instructions,\n isPending,\n isSubmitting,\n variant,\n action\n}: SettingsCardFooterProps) {\n return (\n <CardFooter\n className={cn(\n \"flex flex-col justify-between gap-4 rounded-b-xl md:flex-row\",\n (actionLabel || instructions) && \"!py-4 border-t\",\n variant === \"destructive\"\n ? \"border-destructive/30 bg-destructive/15\"\n : \"bg-sidebar\",\n className,\n classNames?.footer\n )}\n >\n {isPending ? (\n <>\n {instructions && (\n <Skeleton\n className={cn(\n \"my-0.5 h-3 w-48 max-w-full md:h-4 md:w-56\",\n classNames?.skeleton\n )}\n />\n )}\n\n {actionLabel && (\n <Skeleton\n className={cn(\n \"h-8 w-14 md:ms-auto\",\n classNames?.skeleton\n )}\n />\n )}\n </>\n ) : (\n <>\n {instructions && (\n <CardDescription\n className={cn(\n \"text-center text-muted-foreground text-xs md:text-start md:text-sm\",\n classNames?.instructions\n )}\n >\n {instructions}\n </CardDescription>\n )}\n\n {actionLabel && (\n <SettingsActionButton\n classNames={classNames}\n actionLabel={actionLabel}\n disabled={disabled}\n isSubmitting={isSubmitting}\n variant={variant}\n onClick={action}\n />\n )}\n </>\n )}\n </CardFooter>\n )\n}\n","\"use client\"\n\nimport type { ReactNode } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { CardDescription, CardHeader, CardTitle } from \"../../ui/card\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport type { SettingsCardClassNames } from \"./settings-card\"\n\nexport interface SettingsCardHeaderProps {\n className?: string\n classNames?: SettingsCardClassNames\n description?: ReactNode\n isPending?: boolean\n title: ReactNode\n}\n\nexport function SettingsCardHeader({\n className,\n classNames,\n description,\n isPending,\n title\n}: SettingsCardHeaderProps) {\n return (\n <CardHeader className={cn(classNames?.header, className)}>\n {isPending ? (\n <>\n <Skeleton\n className={cn(\n \"my-0.5 h-5 w-1/3 md:h-5.5\",\n classNames?.skeleton\n )}\n />\n\n {description && (\n <Skeleton\n className={cn(\n \"mt-1.5 mb-0.5 h-3 w-2/3 md:h-3.5\",\n classNames?.skeleton\n )}\n />\n )}\n </>\n ) : (\n <>\n <CardTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {title}\n </CardTitle>\n\n {description && (\n <CardDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {description}\n </CardDescription>\n )}\n </>\n )}\n </CardHeader>\n )\n}\n","\"use client\"\n\nimport type { ComponentProps, ReactNode } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Card } from \"../../ui/card\"\nimport type { UserAvatarClassNames } from \"../../user-avatar\"\nimport { SettingsCardFooter } from \"./settings-card-footer\"\nimport { SettingsCardHeader } from \"./settings-card-header\"\n\nexport type SettingsCardClassNames = {\n base?: string\n avatar?: UserAvatarClassNames\n button?: string\n cell?: string\n checkbox?: string\n destructiveButton?: string\n content?: string\n description?: string\n dialog?: {\n content?: string\n footer?: string\n header?: string\n }\n error?: string\n footer?: string\n header?: string\n icon?: string\n input?: string\n instructions?: string\n label?: string\n primaryButton?: string\n secondaryButton?: string\n outlineButton?: string\n skeleton?: string\n title?: string\n}\n\nexport interface SettingsCardProps\n extends Omit<ComponentProps<typeof Card>, \"title\"> {\n children?: ReactNode\n className?: string\n classNames?: SettingsCardClassNames\n title?: ReactNode\n description?: ReactNode\n instructions?: ReactNode\n actionLabel?: ReactNode\n isSubmitting?: boolean\n disabled?: boolean\n isPending?: boolean\n optimistic?: boolean\n variant?: \"default\" | \"destructive\"\n localization?: AuthLocalization\n action?: () => Promise<unknown> | unknown\n}\n\nexport function SettingsCard({\n children,\n className,\n classNames,\n title,\n description,\n instructions,\n actionLabel,\n disabled,\n isPending,\n isSubmitting,\n optimistic,\n variant,\n action,\n ...props\n}: SettingsCardProps) {\n return (\n <Card\n className={cn(\n \"w-full pb-0 text-start\",\n variant === \"destructive\" && \"border-destructive/40\",\n className,\n classNames?.base\n )}\n {...props}\n >\n <SettingsCardHeader\n classNames={classNames}\n description={description}\n isPending={isPending}\n title={title}\n />\n\n {children}\n\n <SettingsCardFooter\n classNames={classNames}\n actionLabel={actionLabel}\n disabled={disabled}\n isPending={isPending}\n isSubmitting={isSubmitting}\n instructions={instructions}\n optimistic={optimistic}\n variant={variant}\n action={action}\n />\n </Card>\n )\n}\n","\"use client\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Card } from \"../../ui/card\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport function SettingsCellSkeleton({\n classNames\n}: {\n classNames?: SettingsCardClassNames\n}) {\n return (\n <Card\n className={cn(\n \"flex-row items-center gap-3 px-4 py-3\",\n classNames?.cell\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton\n className={cn(\"size-5 rounded-full\", classNames?.skeleton)}\n />\n\n <div>\n <Skeleton\n className={cn(\"h-4 w-24\", classNames?.skeleton)}\n />\n </div>\n </div>\n\n <Skeleton\n className={cn(\"ms-auto size-8 w-12\", classNames?.skeleton)}\n />\n </Card>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2, Trash2Icon, UploadCloudIcon } from \"lucide-react\"\nimport {\n type ComponentProps,\n useContext,\n useMemo,\n useRef,\n useState\n} from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { fileToBase64, resizeAndCropImage } from \"../../lib/image-utils\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../ui/form\"\nimport { Input } from \"../ui/input\"\nimport { OrganizationLogo } from \"./organization-logo\"\n\nexport interface CreateOrganizationDialogProps\n extends ComponentProps<typeof Dialog> {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n}\n\nexport function CreateOrganizationDialog({\n className,\n classNames,\n localization: localizationProp,\n onOpenChange,\n ...props\n}: CreateOrganizationDialogProps) {\n const {\n authClient,\n localization: contextLocalization,\n organization: organizationOptions,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const [logo, setLogo] = useState<string | null>(null)\n const [logoPending, setLogoPending] = useState(false)\n\n const fileInputRef = useRef<HTMLInputElement>(null)\n const openFileDialog = () => fileInputRef.current?.click()\n\n const formSchema = z.object({\n logo: z.string().optional(),\n name: z.string().min(1, {\n message: `${localization.ORGANIZATION_NAME} ${localization.IS_REQUIRED}`\n }),\n slug: z\n .string()\n .min(1, {\n message: `${localization.ORGANIZATION_SLUG} ${localization.IS_REQUIRED}`\n })\n .regex(/^[a-z0-9-]+$/, {\n message: `${localization.ORGANIZATION_SLUG} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n logo: \"\",\n name: \"\",\n slug: \"\"\n }\n })\n\n const isSubmitting = form.formState.isSubmitting\n\n const handleLogoChange = async (file: File) => {\n if (!organizationOptions?.logo) return\n\n setLogoPending(true)\n\n try {\n const resizedFile = await resizeAndCropImage(\n file,\n crypto.randomUUID(),\n organizationOptions.logo.size,\n organizationOptions.logo.extension\n )\n\n let image: string | undefined | null\n\n if (organizationOptions?.logo.upload) {\n image = await organizationOptions.logo.upload(resizedFile)\n } else {\n image = await fileToBase64(resizedFile)\n }\n\n setLogo(image || null)\n form.setValue(\"logo\", image || \"\")\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setLogoPending(false)\n }\n\n const deleteLogo = async () => {\n setLogoPending(true)\n\n const currentUrl = logo || undefined\n if (currentUrl && organizationOptions?.logo?.delete) {\n await organizationOptions.logo.delete(currentUrl)\n }\n\n setLogo(null)\n form.setValue(\"logo\", \"\")\n setLogoPending(false)\n }\n\n async function onSubmit({ name, slug, logo }: z.infer<typeof formSchema>) {\n try {\n const organization = await authClient.organization.create({\n name,\n slug,\n logo,\n fetchOptions: { throw: true }\n })\n\n if (organizationOptions?.pathMode === \"slug\") {\n navigate(`${organizationOptions.basePath}/${organization.slug}`)\n return\n }\n\n await authClient.organization.setActive({\n organizationId: organization.id\n })\n\n onOpenChange?.(false)\n form.reset()\n setLogo(null)\n\n toast({\n variant: \"success\",\n message: localization.CREATE_ORGANIZATION_SUCCESS\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent className={classNames?.dialog?.content}>\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.CREATE_ORGANIZATION}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.ORGANIZATIONS_INSTRUCTIONS}\n </DialogDescription>\n </DialogHeader>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(onSubmit)}\n className=\"space-y-6\"\n >\n {organizationOptions?.logo && (\n <FormField\n control={form.control}\n name=\"logo\"\n render={() => (\n <FormItem>\n <input\n ref={fileInputRef}\n accept=\"image/*\"\n disabled={logoPending}\n hidden\n type=\"file\"\n onChange={(e) => {\n const file =\n e.target.files?.item(0)\n if (file) handleLogoChange(file)\n e.target.value = \"\"\n }}\n />\n\n <FormLabel>\n {localization.LOGO}\n </FormLabel>\n\n <div className=\"flex items-center gap-4\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className=\"size-fit rounded-full\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <OrganizationLogo\n className=\"size-16\"\n isPending={\n logoPending\n }\n localization={\n localization\n }\n organization={{\n name: form.watch(\n \"name\"\n ),\n logo\n }}\n />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n align=\"start\"\n onCloseAutoFocus={(e) =>\n e.preventDefault()\n }\n >\n <DropdownMenuItem\n onClick={openFileDialog}\n disabled={logoPending}\n >\n <UploadCloudIcon />\n\n {\n localization.UPLOAD_LOGO\n }\n </DropdownMenuItem>\n\n {logo && (\n <DropdownMenuItem\n onClick={deleteLogo}\n disabled={\n logoPending\n }\n variant=\"destructive\"\n >\n <Trash2Icon />\n\n {\n localization.DELETE_LOGO\n }\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Button\n disabled={logoPending}\n variant=\"outline\"\n onClick={openFileDialog}\n type=\"button\"\n >\n {logoPending && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.UPLOAD}\n </Button>\n </div>\n\n <FormMessage />\n </FormItem>\n )}\n />\n )}\n\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {localization.ORGANIZATION_NAME}\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={\n localization.ORGANIZATION_NAME_PLACEHOLDER\n }\n {...field}\n />\n </FormControl>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"slug\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {localization.ORGANIZATION_SLUG}\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={\n localization.ORGANIZATION_SLUG_PLACEHOLDER\n }\n {...field}\n />\n </FormControl>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"submit\"\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isSubmitting}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.CREATE_ORGANIZATION}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","export async function resizeAndCropImage(\n file: File,\n name: string,\n size: number,\n extension: string\n): Promise<File> {\n const image = await loadImage(file)\n\n const canvas = document.createElement(\"canvas\")\n canvas.width = canvas.height = size\n\n const ctx = canvas.getContext(\"2d\")\n\n const minEdge = Math.min(image.width, image.height)\n\n const sx = (image.width - minEdge) / 2\n const sy = (image.height - minEdge) / 2\n const sWidth = minEdge\n const sHeight = minEdge\n\n ctx?.drawImage(image, sx, sy, sWidth, sHeight, 0, 0, size, size)\n\n const resizedImageBlob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, `image/${extension}`)\n )\n\n return new File([resizedImageBlob as BlobPart], `${name}.${extension}`, {\n type: `image/${extension}`\n })\n}\n\nasync function loadImage(file: File): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image()\n const reader = new FileReader()\n\n reader.onload = (e) => {\n image.src = e.target?.result as string\n }\n\n image.onload = () => resolve(image)\n image.onerror = (err) => reject(err)\n\n reader.readAsDataURL(file)\n })\n}\n\nexport async function fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(file)\n })\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { BuildingIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\"\nimport { Skeleton } from \"../ui/skeleton\"\n\nexport interface OrganizationLogoClassNames {\n base?: string\n image?: string\n fallback?: string\n fallbackIcon?: string\n skeleton?: string\n}\n\nexport interface OrganizationLogoProps {\n classNames?: OrganizationLogoClassNames\n isPending?: boolean\n size?: \"sm\" | \"default\" | \"lg\" | \"xl\" | null\n organization?: Partial<Organization> | null\n /**\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: AuthLocalization\n}\n\n/**\n * Displays an organization logo with image and fallback support\n *\n * Renders an organization's logo image when available, with appropriate fallbacks:\n * - Shows a skeleton when isPending is true\n * - Falls back to a building icon when no logo is available\n */\nexport function OrganizationLogo({\n className,\n classNames,\n isPending,\n size,\n organization,\n localization: propLocalization,\n ...props\n}: OrganizationLogoProps & ComponentProps<typeof Avatar>) {\n const { localization: contextLocalization, avatar } =\n useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...propLocalization }),\n [contextLocalization, propLocalization]\n )\n\n const name = organization?.name\n const src = organization?.logo\n\n if (isPending) {\n return (\n <Skeleton\n className={cn(\n \"shrink-0 rounded-full\",\n size === \"sm\"\n ? \"size-6\"\n : size === \"lg\"\n ? \"size-10\"\n : size === \"xl\"\n ? \"size-12\"\n : \"size-8\",\n className,\n classNames?.base,\n classNames?.skeleton\n )}\n />\n )\n }\n\n return (\n <Avatar\n className={cn(\n \"bg-muted\",\n size === \"sm\"\n ? \"size-6\"\n : size === \"lg\"\n ? \"size-10\"\n : size === \"xl\"\n ? \"size-12\"\n : \"size-8\",\n className,\n classNames?.base\n )}\n {...props}\n >\n {avatar?.Image ? (\n <avatar.Image\n alt={name || localization?.ORGANIZATION}\n className={classNames?.image}\n src={src || \"\"}\n />\n ) : (\n <AvatarImage\n alt={name || localization?.ORGANIZATION}\n className={classNames?.image}\n src={src || undefined}\n />\n )}\n\n <AvatarFallback\n className={cn(\"text-foreground\", classNames?.fallback)}\n delayMs={src ? 600 : undefined}\n >\n <BuildingIcon\n className={cn(\"size-[50%]\", classNames?.fallbackIcon)}\n />\n </AvatarFallback>\n </Avatar>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { EllipsisIcon, Loader2, LogOutIcon, SettingsIcon } from \"lucide-react\"\nimport { useCallback, useContext, useMemo, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { LeaveOrganizationDialog } from \"./leave-organization-dialog\"\nimport { OrganizationCellView } from \"./organization-cell-view\"\n\nexport interface OrganizationCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n organization: Organization\n localization?: AuthLocalization\n}\n\nexport function OrganizationCell({\n className,\n classNames,\n organization,\n localization: localizationProp\n}: OrganizationCellProps) {\n const {\n authClient,\n localization: contextLocalization,\n organization: organizationOptions,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { pathMode } = organizationOptions || {}\n\n const [isLeaveDialogOpen, setIsLeaveDialogOpen] = useState(false)\n const [isManagingOrganization, setIsManagingOrganization] = useState(false)\n\n const handleManageOrganization = useCallback(async () => {\n setIsManagingOrganization(true)\n\n if (pathMode === \"slug\") {\n navigate(\n `${organizationOptions?.basePath}/${organization.slug}/${organizationOptions?.viewPaths.SETTINGS}`\n )\n\n return\n }\n\n try {\n await authClient.organization.setActive({\n organizationId: organization.id,\n fetchOptions: {\n throw: true\n }\n })\n\n navigate(\n `${organizationOptions?.basePath}/${organizationOptions?.viewPaths?.SETTINGS}`\n )\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsManagingOrganization(false)\n }\n }, [\n authClient,\n organization.id,\n organizationOptions?.basePath,\n organizationOptions?.viewPaths?.SETTINGS,\n organization.slug,\n pathMode,\n navigate,\n toast,\n localization,\n localizeErrors\n ])\n\n return (\n <>\n <Card className={cn(\"flex-row p-4\", className, classNames?.cell)}>\n <OrganizationCellView\n organization={organization}\n localization={localization}\n />\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isManagingOrganization}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n {isManagingOrganization ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <EllipsisIcon className={classNames?.icon} />\n )}\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuItem\n onClick={handleManageOrganization}\n disabled={isManagingOrganization}\n >\n <SettingsIcon className={classNames?.icon} />\n\n {localization.MANAGE_ORGANIZATION}\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => setIsLeaveDialogOpen(true)}\n variant=\"destructive\"\n >\n <LogOutIcon className={classNames?.icon} />\n\n {localization.LEAVE_ORGANIZATION}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </Card>\n\n <LeaveOrganizationDialog\n open={isLeaveDialogOpen}\n onOpenChange={setIsLeaveDialogOpen}\n organization={organization}\n localization={localization}\n />\n </>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport { OrganizationCellView } from \"./organization-cell-view\"\n\nexport interface LeaveOrganizationDialogProps\n extends ComponentProps<typeof Dialog> {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n organization: Organization\n}\n\nexport function LeaveOrganizationDialog({\n organization,\n className,\n classNames,\n localization: localizationProp,\n onOpenChange,\n ...props\n}: LeaveOrganizationDialogProps) {\n const {\n authClient,\n hooks: { useListOrganizations },\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { refetch: refetchOrganizations } = useListOrganizations()\n\n const [isLeaving, setIsLeaving] = useState(false)\n\n const handleLeaveOrganization = async () => {\n setIsLeaving(true)\n\n try {\n await authClient.organization.leave({\n organizationId: organization.id,\n fetchOptions: { throw: true }\n })\n\n await refetchOrganizations?.()\n\n toast({\n variant: \"success\",\n message: localization.LEAVE_ORGANIZATION_SUCCESS\n })\n\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLeaving(false)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={classNames?.dialog?.content}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.LEAVE_ORGANIZATION}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.LEAVE_ORGANIZATION_CONFIRM}\n </DialogDescription>\n </DialogHeader>\n\n <Card\n className={cn(\n \"my-2 flex-row p-4\",\n className,\n classNames?.cell\n )}\n >\n <OrganizationCellView\n organization={organization}\n localization={localization}\n />\n </Card>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLeaving}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleLeaveOrganization}\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n disabled={isLeaving}\n >\n {isLeaving && <Loader2 className=\"animate-spin\" />}\n\n {localization.LEAVE_ORGANIZATION}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Skeleton } from \"../ui/skeleton\"\nimport {\n OrganizationLogo,\n type OrganizationLogoClassNames\n} from \"./organization-logo\"\n\nexport interface OrganizationViewClassNames {\n base?: string\n avatar?: OrganizationLogoClassNames\n content?: string\n title?: string\n subtitle?: string\n skeleton?: string\n}\n\nexport interface OrganizationViewProps {\n className?: string\n classNames?: OrganizationViewClassNames\n isPending?: boolean\n size?: \"sm\" | \"default\" | \"lg\" | null\n organization?: Organization | null\n /**\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: AuthLocalization\n}\n\nexport function OrganizationCellView({\n className,\n classNames,\n isPending,\n size,\n organization,\n localization: propLocalization\n}: OrganizationViewProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = { ...contextLocalization, ...propLocalization }\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 truncate\",\n className,\n classNames?.base\n )}\n >\n <OrganizationLogo\n className={cn(size !== \"sm\" && \"my-0.5\")}\n classNames={classNames?.avatar}\n isPending={isPending}\n localization={localization}\n organization={organization}\n size={size}\n />\n\n <div\n className={cn(\n \"flex flex-col truncate text-left leading-tight\",\n classNames?.content\n )}\n >\n {isPending ? (\n <>\n <Skeleton\n className={cn(\n \"max-w-full\",\n size === \"lg\" ? \"h-4.5 w-32\" : \"h-3.5 w-24\",\n classNames?.title,\n classNames?.skeleton\n )}\n />\n\n {size !== \"sm\" && (\n <Skeleton\n className={cn(\n \"mt-1.5 max-w-full\",\n size === \"lg\" ? \"h-3.5 w-24\" : \"h-3 w-16\",\n classNames?.subtitle,\n classNames?.skeleton\n )}\n />\n )}\n </>\n ) : (\n <>\n <span\n className={cn(\n \"truncate font-semibold\",\n size === \"lg\" ? \"text-base\" : \"text-sm\",\n classNames?.title\n )}\n >\n {organization?.name || localization?.ORGANIZATION}\n </span>\n\n {size !== \"sm\" && organization?.slug && (\n <span\n className={cn(\n \"truncate opacity-70\",\n size === \"lg\" ? \"text-sm\" : \"text-xs\",\n classNames?.subtitle\n )}\n >\n {organization.slug}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { CheckIcon, EllipsisIcon, Loader2, XIcon } from \"lucide-react\"\nimport { useContext, useMemo, useState } from \"react\"\nimport { useLang } from \"../../hooks/use-lang\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card, CardContent } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { UserAvatar } from \"../user-avatar\"\n\n/**\n * Render a settings card that lists all pending user invitations.\n *\n * The card is omitted (returns `null`) when there are no pending invitations.\n *\n * @param className - Optional container class name passed to the SettingsCard\n * @param classNames - Optional classNames map applied to SettingsCard subcomponents\n * @param localization - Partial localization overrides that are merged with AuthUIContext localization\n * @returns The SettingsCard element containing a row for each pending invitation, or `null` when none exist\n */\nexport function UserInvitationsCard({\n className,\n classNames,\n localization: localizationProp,\n ...props\n}: SettingsCardProps) {\n const {\n hooks: { useListUserInvitations, useListOrganizations },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: invitations, refetch: refetchInvitations } =\n useListUserInvitations()\n const { refetch: refetchOrganizations } = useListOrganizations()\n\n const handleRefresh = async () => {\n await refetchInvitations?.()\n await refetchOrganizations?.()\n }\n\n const pendingInvitations = invitations?.filter(\n (invitation) => invitation.status === \"pending\"\n )\n\n if (!pendingInvitations?.length) return null\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.PENDING_INVITATIONS}\n description={\n localization.PENDING_USER_INVITATIONS_DESCRIPTION ||\n localization.PENDING_INVITATIONS_DESCRIPTION\n }\n {...props}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {pendingInvitations.map((invitation) => (\n <UserInvitationRow\n key={invitation.id}\n classNames={classNames}\n invitation={{\n id: invitation.id,\n email: invitation.email,\n role: invitation.role,\n status: invitation.status,\n expiresAt: invitation.expiresAt\n }}\n onChanged={handleRefresh}\n />\n ))}\n </CardContent>\n </SettingsCard>\n )\n}\n\n/**\n * Render a row showing a pending user invitation with controls to accept or reject it.\n *\n * @param classNames - Optional className overrides for card parts (matches SettingsCardProps[\"classNames\"]).\n * @param invitation - Invitation data; `expiresAt` must be a Date instance.\n * @param onChanged - Optional callback invoked after the invitation is accepted or rejected.\n * @returns The JSX element representing the invitation row.\n */\nfunction UserInvitationRow({\n classNames,\n invitation,\n onChanged\n}: {\n classNames?: SettingsCardProps[\"classNames\"]\n invitation: {\n id: string\n email: string\n role: string\n status: string\n expiresAt: Date\n }\n onChanged?: () => unknown\n}) {\n const {\n authClient,\n organization: organizationOptions,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = contextLocalization\n const { lang } = useLang()\n\n const [isLoading, setIsLoading] = useState(false)\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ]\n\n const roles = [...builtInRoles, ...(organizationOptions?.customRoles || [])]\n const role = roles.find((r) => r.role === invitation.role)\n\n const handleAccept = async () => {\n setIsLoading(true)\n\n try {\n await authClient.organization.acceptInvitation({\n invitationId: invitation.id,\n fetchOptions: { throw: true }\n })\n\n await onChanged?.()\n\n toast({\n variant: \"success\",\n message: localization.INVITATION_ACCEPTED\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n const handleReject = async () => {\n setIsLoading(true)\n\n try {\n await authClient.organization.rejectInvitation({\n invitationId: invitation.id,\n fetchOptions: { throw: true }\n })\n\n await onChanged?.()\n\n toast({\n variant: \"success\",\n message: localization.INVITATION_REJECTED\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n return (\n <Card className={cn(\"flex-row items-center p-4\", classNames?.cell)}>\n <div className=\"flex flex-1 items-center gap-2\">\n <UserAvatar\n className=\"my-0.5\"\n user={{ email: invitation.email }}\n localization={localization}\n />\n\n <div className=\"grid flex-1 text-left leading-tight\">\n <span className=\"truncate font-semibold text-sm\">\n {invitation.email}\n </span>\n\n <span className=\"truncate text-muted-foreground text-xs\">\n {localization.EXPIRES}{\" \"}\n {invitation.expiresAt.toLocaleDateString(lang ?? \"en\")}\n </span>\n </div>\n </div>\n\n <span className=\"truncate text-sm opacity-70\">{role?.label}</span>\n\n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLoading}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n {isLoading ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <EllipsisIcon className={classNames?.icon} />\n )}\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuItem\n onClick={handleAccept}\n disabled={isLoading}\n >\n <CheckIcon className={classNames?.icon} />\n\n {localization.ACCEPT}\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={handleReject}\n disabled={isLoading}\n variant=\"destructive\"\n >\n <XIcon className={classNames?.icon} />\n\n {localization.REJECT}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </Card>\n )\n}\n","\"use client\"\n\nimport { UserRoundIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext } from \"react\"\n\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport { getGravatarUrl } from \"../lib/gravatar-utils\"\nimport { cn } from \"../lib/utils\"\nimport type { AuthLocalization } from \"../localization/auth-localization\"\nimport type { Profile } from \"../types/profile\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"./ui/avatar\"\nimport { Skeleton } from \"./ui/skeleton\"\n\nexport interface UserAvatarClassNames {\n base?: string\n image?: string\n fallback?: string\n fallbackIcon?: string\n skeleton?: string\n}\n\nexport interface UserAvatarProps {\n classNames?: UserAvatarClassNames\n isPending?: boolean\n size?: \"sm\" | \"default\" | \"lg\" | \"xl\" | null\n user?: Profile | null\n /**\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: Partial<AuthLocalization>\n}\n\n/**\n * Displays a user avatar with image and fallback support\n *\n * Renders a user's avatar image when available, with appropriate fallbacks:\n * - Shows a skeleton when isPending is true\n * - Displays first two characters of user's name when no image is available\n * - Falls back to a generic user icon when neither image nor name is available\n */\nexport function UserAvatar({\n className,\n classNames,\n isPending,\n size,\n user,\n localization: propLocalization,\n ...props\n}: UserAvatarProps & ComponentProps<typeof Avatar>) {\n const {\n localization: contextLocalization,\n gravatar,\n avatar\n } = useContext(AuthUIContext)\n\n const localization = { ...contextLocalization, ...propLocalization }\n\n const name =\n user?.displayName ||\n user?.name ||\n user?.fullName ||\n user?.firstName ||\n user?.displayUsername ||\n user?.username ||\n user?.email\n const userImage = user?.image || user?.avatar || user?.avatarUrl\n\n // Calculate gravatar URL synchronously\n const gravatarUrl =\n gravatar && user?.email\n ? getGravatarUrl(\n user.email,\n gravatar === true ? undefined : gravatar\n )\n : null\n\n const src = gravatar ? gravatarUrl : userImage\n\n if (isPending) {\n return (\n <Skeleton\n className={cn(\n \"shrink-0 rounded-full\",\n size === \"sm\"\n ? \"size-6\"\n : size === \"lg\"\n ? \"size-10\"\n : size === \"xl\"\n ? \"size-12\"\n : \"size-8\",\n className,\n classNames?.base,\n classNames?.skeleton\n )}\n />\n )\n }\n\n return (\n <Avatar\n className={cn(\n \"bg-muted\",\n size === \"sm\"\n ? \"size-6\"\n : size === \"lg\"\n ? \"size-10\"\n : size === \"xl\"\n ? \"size-12\"\n : \"size-8\",\n className,\n classNames?.base\n )}\n {...props}\n >\n {avatar?.Image ? (\n <avatar.Image\n alt={name || localization?.USER}\n className={classNames?.image}\n src={src || \"\"}\n />\n ) : (\n <AvatarImage\n alt={name || localization?.USER}\n className={classNames?.image}\n src={src || undefined}\n />\n )}\n\n <AvatarFallback\n className={cn(\n \"text-foreground uppercase\",\n classNames?.fallback\n )}\n delayMs={src ? 600 : undefined}\n >\n {firstTwoCharacters(name) || (\n <UserRoundIcon\n className={cn(\"size-[50%]\", classNames?.fallbackIcon)}\n />\n )}\n </AvatarFallback>\n </Avatar>\n )\n}\n\nconst firstTwoCharacters = (name?: string | null) => name?.slice(0, 2)\n","import { sha256 } from \"@noble/hashes/sha2.js\"\nimport { bytesToHex } from \"@noble/hashes/utils.js\"\nimport type { GravatarOptions } from \"../types/gravatar-options\"\n\n/**\n * Generate a Gravatar URL for an email address\n * @param email - Email address\n * @param options - Gravatar options\n * @returns Gravatar URL or null if email is invalid\n */\nexport function getGravatarUrl(\n email?: string | null,\n options?: GravatarOptions\n): string | null {\n if (!email) return null\n\n try {\n // Normalize email: trim and lowercase\n const normalizedEmail = email.trim().toLowerCase()\n // sha256 expects Uint8Array, so encode string to Uint8Array\n const encoder = new TextEncoder()\n const emailBytes = encoder.encode(normalizedEmail)\n const hash = bytesToHex(sha256(emailBytes))\n const extension = options?.jpg ? \".jpg\" : \"\"\n let url = `https://gravatar.com/avatar/${hash}${extension}`\n\n const params = new URLSearchParams()\n\n // Add size parameter\n if (options?.size) {\n params.append(\n \"s\",\n Math.min(Math.max(options.size, 1), 2048).toString()\n )\n }\n\n // Add default image parameter\n if (options?.d) {\n params.append(\"d\", options.d)\n }\n\n // Add force default parameter\n if (options?.forceDefault) {\n params.append(\"f\", \"y\")\n }\n\n // Append parameters if any\n const queryString = params.toString()\n if (queryString) {\n url += `?${queryString}`\n }\n\n return url\n } catch (error) {\n console.error(\"Error generating Gravatar URL:\", error)\n return null\n }\n}\n","\"use client\"\n\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { AccountsCard } from \"./account/accounts-card\"\nimport { UpdateAvatarCard } from \"./account/update-avatar-card\"\nimport { UpdateFieldCard } from \"./account/update-field-card\"\nimport { UpdateNameCard } from \"./account/update-name-card\"\nimport { UpdateUsernameCard } from \"./account/update-username-card\"\nimport { ChangeEmailCard } from \"./security/change-email-card\"\nimport type { SettingsCardClassNames } from \"./shared/settings-card\"\n\nexport function AccountSettingsCards({\n className,\n classNames,\n localization\n}: {\n className?: string\n classNames?: {\n card?: SettingsCardClassNames\n cards?: string\n }\n localization?: Partial<AuthLocalization>\n}) {\n const {\n additionalFields,\n avatar,\n changeEmail,\n credentials,\n hooks: { useSession },\n multiSession,\n account: accountOptions\n } = useContext(AuthUIContext)\n\n const { data: sessionData } = useSession()\n\n return (\n <div\n className={cn(\n \"flex w-full flex-col gap-4 md:gap-6\",\n className,\n classNames?.cards\n )}\n >\n {accountOptions?.fields?.includes(\"image\") && avatar && (\n <UpdateAvatarCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {credentials?.username && (\n <UpdateUsernameCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {accountOptions?.fields?.includes(\"name\") && (\n <UpdateNameCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {changeEmail && (\n <ChangeEmailCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {accountOptions?.fields?.map((field) => {\n if (field === \"image\") return null\n if (field === \"name\") return null\n const additionalField = additionalFields?.[field]\n if (!additionalField) return null\n\n const {\n label,\n description,\n instructions,\n placeholder,\n required,\n type,\n multiline,\n validate\n } = additionalField\n\n const defaultValue = sessionData?.user[field] as unknown\n\n return (\n <UpdateFieldCard\n key={field}\n classNames={classNames?.card}\n value={defaultValue}\n description={description}\n name={field}\n instructions={instructions}\n label={label}\n localization={localization}\n placeholder={placeholder}\n required={required}\n type={type}\n multiline={multiline}\n validate={validate}\n />\n )\n })}\n\n {multiSession && (\n <AccountsCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n </div>\n )\n}\n","\"use client\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { CardContent } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { AccountCell } from \"./account-cell\"\n\nexport interface AccountsCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n}\n\nexport function AccountsCard({\n className,\n classNames,\n localization\n}: AccountsCardProps) {\n const {\n basePath,\n hooks: { useListDeviceSessions, useSession },\n localization: contextLocalization,\n viewPaths,\n navigate\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: deviceSessions, isPending, refetch } = useListDeviceSessions()\n const { data: sessionData } = useSession()\n\n const otherDeviceSessions = (deviceSessions || []).filter(\n (ds) => ds.session.id !== sessionData?.session.id\n )\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.ACCOUNTS}\n description={localization.ACCOUNTS_DESCRIPTION}\n actionLabel={localization.ADD_ACCOUNT}\n instructions={localization.ACCOUNTS_INSTRUCTIONS}\n isPending={isPending}\n action={() => navigate(`${basePath}/${viewPaths.SIGN_IN}`)}\n >\n {deviceSessions?.length ? (\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {sessionData && (\n <AccountCell\n classNames={classNames}\n deviceSession={sessionData}\n localization={localization}\n refetch={refetch}\n />\n )}\n\n {otherDeviceSessions.map((deviceSession) => (\n <AccountCell\n key={deviceSession.session.id}\n classNames={classNames}\n deviceSession={deviceSession}\n localization={localization}\n refetch={refetch}\n />\n ))}\n </CardContent>\n ) : null}\n </SettingsCard>\n )\n}\n","\"use client\"\n\nimport type { Session, User } from \"better-auth\"\nimport {\n EllipsisIcon,\n Loader2,\n LogOutIcon,\n RepeatIcon,\n UserX2Icon\n} from \"lucide-react\"\nimport { useContext, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../../ui/dropdown-menu\"\nimport { UserView } from \"../../user-view\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface AccountCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n deviceSession: { user: User; session: Session }\n localization?: Partial<AuthLocalization>\n refetch?: Refetch\n}\n\nexport function AccountCell({\n className,\n classNames,\n deviceSession,\n localization,\n refetch\n}: AccountCellProps) {\n const {\n basePath,\n localization: contextLocalization,\n hooks: { useSession },\n mutators: { revokeDeviceSession, setActiveSession },\n toast,\n viewPaths,\n navigate,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData } = useSession()\n const [isLoading, setIsLoading] = useState(false)\n\n const handleRevoke = async () => {\n setIsLoading(true)\n\n try {\n await revokeDeviceSession({\n sessionToken: deviceSession.session.token\n })\n\n refetch?.()\n } catch (error) {\n setIsLoading(false)\n\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n const handleSetActiveSession = async () => {\n setIsLoading(true)\n\n try {\n await setActiveSession({\n sessionToken: deviceSession.session.token\n })\n\n refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n const isCurrentSession =\n deviceSession.session.id === sessionData?.session.id\n\n return (\n <Card className={cn(\"flex-row p-4\", className, classNames?.cell)}>\n <UserView user={deviceSession.user} localization={localization} />\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLoading}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n {isLoading ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <EllipsisIcon className={classNames?.icon} />\n )}\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n {!isCurrentSession && (\n <DropdownMenuItem onClick={handleSetActiveSession}>\n <RepeatIcon className={classNames?.icon} />\n\n {localization.SWITCH_ACCOUNT}\n </DropdownMenuItem>\n )}\n\n <DropdownMenuItem\n onClick={() => {\n if (isCurrentSession) {\n navigate(`${basePath}/${viewPaths.SIGN_OUT}`)\n return\n }\n\n handleRevoke()\n }}\n variant=\"destructive\"\n >\n {isCurrentSession ? (\n <LogOutIcon className={classNames?.icon} />\n ) : (\n <UserX2Icon className={classNames?.icon} />\n )}\n\n {isCurrentSession\n ? localization.SIGN_OUT\n : localization.REVOKE}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </Card>\n )\n}\n","\"use client\"\n\nimport { useContext, useMemo } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport { cn } from \"../lib/utils\"\nimport type { AuthLocalization } from \"../localization/auth-localization\"\nimport type { Profile } from \"../types/profile\"\nimport { Skeleton } from \"./ui/skeleton\"\nimport { UserAvatar, type UserAvatarClassNames } from \"./user-avatar\"\n\nexport interface UserViewClassNames {\n base?: string\n avatar?: UserAvatarClassNames\n content?: string\n title?: string\n subtitle?: string\n skeleton?: string\n}\n\nexport interface UserViewProps {\n className?: string\n classNames?: UserViewClassNames\n isPending?: boolean\n size?: \"sm\" | \"default\" | \"lg\" | null\n user?: Profile | null\n /**\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: AuthLocalization\n}\n\n/**\n * Displays user information with avatar and details in a compact view\n *\n * Renders a user's profile information with appropriate fallbacks:\n * - Shows avatar alongside user name and email when available\n * - Shows loading skeletons when isPending is true\n * - Falls back to generic \"User\" text when neither name nor email is available\n * - Supports customization through classNames prop\n */\nexport function UserView({\n className,\n classNames,\n isPending,\n size,\n user,\n localization: propLocalization\n}: UserViewProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...propLocalization }),\n [contextLocalization, propLocalization]\n )\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2\",\n className,\n classNames?.base\n )}\n >\n <UserAvatar\n className={cn(size !== \"sm\" && \"my-0.5\")}\n classNames={classNames?.avatar}\n isPending={isPending}\n size={size}\n user={user}\n localization={localization}\n />\n\n <div\n className={cn(\n \"grid flex-1 text-start leading-tight\",\n classNames?.content\n )}\n >\n {isPending ? (\n <>\n <Skeleton\n className={cn(\n \"max-w-full\",\n size === \"lg\" ? \"h-4.5 w-32\" : \"h-3.5 w-24\",\n classNames?.title,\n classNames?.skeleton\n )}\n />\n {size !== \"sm\" && (\n <Skeleton\n className={cn(\n \"mt-1.5 max-w-full\",\n size === \"lg\" ? \"h-3.5 w-40\" : \"h-3 w-32\",\n classNames?.subtitle,\n classNames?.skeleton\n )}\n />\n )}\n </>\n ) : (\n <>\n <span\n className={cn(\n \"truncate font-semibold\",\n size === \"lg\" ? \"text-base\" : \"text-sm\",\n classNames?.title\n )}\n >\n {user?.displayName ||\n user?.name ||\n user?.fullName ||\n user?.firstName ||\n user?.displayUsername ||\n user?.username ||\n user?.email ||\n localization?.USER}\n </span>\n\n {!user?.isAnonymous &&\n size !== \"sm\" &&\n (user?.name || user?.username) && (\n <span\n className={cn(\n \"truncate opacity-70\",\n size === \"lg\" ? \"text-sm\" : \"text-xs\",\n classNames?.subtitle\n )}\n >\n {user?.email}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { Trash2Icon, UploadCloudIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useRef, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { fileToBase64, resizeAndCropImage } from \"../../../lib/image-utils\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../../ui/dropdown-menu\"\nimport { UserAvatar } from \"../../user-avatar\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCardFooter } from \"../shared/settings-card-footer\"\nimport { SettingsCardHeader } from \"../shared/settings-card-header\"\n\nexport interface UpdateAvatarCardProps extends ComponentProps<typeof Card> {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n}\n\nexport function UpdateAvatarCard({\n className,\n classNames,\n localization,\n ...props\n}: UpdateAvatarCardProps) {\n const {\n hooks: { useSession },\n mutators: { updateUser },\n localization: authLocalization,\n optimistic,\n avatar,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...authLocalization, ...localization }\n\n const { data: sessionData, isPending, refetch } = useSession()\n const fileInputRef = useRef<HTMLInputElement | null>(null)\n const [loading, setLoading] = useState(false)\n\n const handleAvatarChange = async (file: File) => {\n if (!sessionData || !avatar) return\n\n setLoading(true)\n const resizedFile = await resizeAndCropImage(\n file,\n crypto.randomUUID(),\n avatar.size,\n avatar.extension\n )\n\n let image: string | undefined | null\n\n if (avatar.upload) {\n image = await avatar.upload(resizedFile)\n } else {\n image = await fileToBase64(resizedFile)\n }\n\n if (!image) {\n setLoading(false)\n return\n }\n\n if (optimistic && !avatar.upload) setLoading(false)\n\n try {\n await updateUser({ image })\n await refetch?.()\n // If a custom storage remover is provided, clean up the old asset\n if (avatar.upload && avatar.delete && sessionData.user.image) {\n try {\n await avatar.delete(sessionData.user.image)\n } catch (error) {\n console.error(\"Failed to delete old avatar:\", error)\n }\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setLoading(false)\n }\n\n const handleDeleteAvatar = async () => {\n if (!sessionData) return\n\n setLoading(true)\n\n try {\n // If a custom storage remover is provided, attempt to clean up the old asset first\n if (sessionData.user.image && avatar?.delete) {\n await avatar.delete(sessionData.user.image)\n }\n\n await updateUser({ image: null })\n await refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setLoading(false)\n }\n\n const openFileDialog = () => fileInputRef.current?.click()\n\n return (\n <Card\n className={cn(\n \"w-full pb-0 text-start\",\n className,\n classNames?.base\n )}\n {...props}\n >\n <input\n ref={fileInputRef}\n accept=\"image/*\"\n disabled={loading}\n hidden\n type=\"file\"\n onChange={(e) => {\n const file = e.target.files?.item(0)\n if (file) handleAvatarChange(file)\n\n e.target.value = \"\"\n }}\n />\n\n <div className=\"flex justify-between\">\n <SettingsCardHeader\n className=\"grow self-start\"\n title={localization.AVATAR}\n description={localization.AVATAR_DESCRIPTION}\n isPending={isPending}\n classNames={classNames}\n />\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className=\"me-6 size-fit rounded-full\"\n size=\"icon\"\n variant=\"ghost\"\n >\n <UserAvatar\n isPending={isPending || loading}\n key={sessionData?.user.image}\n className=\"size-20 text-2xl\"\n classNames={classNames?.avatar}\n user={sessionData?.user}\n localization={localization}\n />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n align=\"end\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuItem\n onClick={openFileDialog}\n disabled={loading}\n >\n <UploadCloudIcon />\n {localization.UPLOAD_AVATAR}\n </DropdownMenuItem>\n {sessionData?.user.image && (\n <DropdownMenuItem\n onClick={handleDeleteAvatar}\n disabled={loading}\n variant=\"destructive\"\n >\n <Trash2Icon />\n {localization.DELETE_AVATAR}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n <SettingsCardFooter\n className=\"!py-5\"\n instructions={localization.AVATAR_INSTRUCTIONS}\n classNames={classNames}\n isPending={isPending}\n isSubmitting={loading}\n />\n </Card>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { type ReactNode, useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { FieldType } from \"../../../types/additional-fields\"\nimport { CardContent } from \"../../ui/card\"\nimport { Checkbox } from \"../../ui/checkbox\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport { Textarea } from \"../../ui/textarea\"\nimport {\n SettingsCard,\n type SettingsCardClassNames\n} from \"../shared/settings-card\"\n\nexport interface UpdateFieldCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n description?: ReactNode\n instructions?: ReactNode\n localization?: Partial<AuthLocalization>\n name: string\n placeholder?: string\n required?: boolean\n label?: ReactNode\n type?: FieldType\n multiline?: boolean\n value?: unknown\n validate?: (value: string) => boolean | Promise<boolean>\n}\n\nexport function UpdateFieldCard({\n className,\n classNames,\n description,\n instructions,\n localization: localizationProp,\n name,\n placeholder,\n required,\n label,\n type,\n multiline,\n value,\n validate\n}: UpdateFieldCardProps) {\n const {\n hooks: { useSession },\n mutators: { updateUser },\n localization: contextLocalization,\n optimistic,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { isPending } = useSession()\n\n let fieldSchema = z.unknown() as z.ZodType<unknown>\n\n // Create the appropriate schema based on type\n if (type === \"number\") {\n fieldSchema = required\n ? z.preprocess(\n (val) => (!val ? undefined : Number(val)),\n z.number({\n message: `${label} ${localization.IS_INVALID}`\n })\n )\n : z.coerce\n .number({\n message: `${label} ${localization.IS_INVALID}`\n })\n .optional()\n } else if (type === \"boolean\") {\n fieldSchema = required\n ? z.coerce\n .boolean({\n message: `${label} ${localization.IS_INVALID}`\n })\n .refine((val) => val === true, {\n message: `${label} ${localization.IS_REQUIRED}`\n })\n : z.coerce.boolean({\n message: `${label} ${localization.IS_INVALID}`\n })\n } else {\n fieldSchema = required\n ? z.string().min(1, `${label} ${localization.IS_REQUIRED}`)\n : z.string().optional()\n }\n\n const form = useForm({\n resolver: zodResolver(z.object({ [name]: fieldSchema })),\n values: { [name]: value || \"\" }\n })\n\n const { isSubmitting } = form.formState\n\n const updateField = async (values: Record<string, unknown>) => {\n await new Promise((resolve) => setTimeout(resolve))\n const newValue = values[name]\n\n if (value === newValue) {\n toast({\n variant: \"error\",\n message: `${label} ${localization.IS_THE_SAME}`\n })\n return\n }\n\n if (\n validate &&\n typeof newValue === \"string\" &&\n !(await validate(newValue))\n ) {\n form.setError(name, {\n message: `${label} ${localization.IS_INVALID}`\n })\n\n return\n }\n\n try {\n await updateUser({ [name]: newValue })\n\n toast({\n variant: \"success\",\n message: `${label} ${localization.UPDATED_SUCCESSFULLY}`\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(updateField)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n description={description}\n instructions={instructions}\n isPending={isPending}\n title={label}\n actionLabel={localization.SAVE}\n optimistic={optimistic}\n >\n <CardContent className={classNames?.content}>\n {type === \"boolean\" ? (\n <FormField\n control={form.control}\n name={name}\n render={({ field }) => (\n <FormItem className=\"flex\">\n <FormControl>\n <Checkbox\n checked={field.value as boolean}\n onCheckedChange={field.onChange}\n disabled={isSubmitting}\n className={classNames?.checkbox}\n />\n </FormControl>\n\n <FormLabel\n className={classNames?.label}\n >\n {label}\n </FormLabel>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n ) : isPending ? (\n <Skeleton\n className={cn(\n \"h-9 w-full\",\n classNames?.skeleton\n )}\n />\n ) : (\n <FormField\n control={form.control}\n name={name}\n render={({ field }) => (\n <FormItem>\n <FormControl>\n {type === \"number\" ? (\n <Input\n className={\n classNames?.input\n }\n type=\"number\"\n placeholder={\n placeholder ||\n (typeof label ===\n \"string\"\n ? label\n : \"\")\n }\n disabled={isSubmitting}\n {...field}\n value={\n field.value as string\n }\n />\n ) : multiline ? (\n <Textarea\n className={\n classNames?.input\n }\n placeholder={\n placeholder ||\n (typeof label ===\n \"string\"\n ? label\n : \"\")\n }\n disabled={isSubmitting}\n {...field}\n value={\n field.value as string\n }\n />\n ) : (\n <Input\n className={\n classNames?.input\n }\n type=\"text\"\n placeholder={\n placeholder ||\n (typeof label ===\n \"string\"\n ? label\n : \"\")\n }\n disabled={isSubmitting}\n {...field}\n value={\n field.value as string\n }\n />\n )}\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )}\n </CardContent>\n </SettingsCard>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport { useContext } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport type { SettingsCardProps } from \"../shared/settings-card\"\nimport { UpdateFieldCard } from \"./update-field-card\"\n\nexport function UpdateNameCard({\n className,\n classNames,\n localization,\n ...props\n}: SettingsCardProps) {\n const {\n hooks: { useSession },\n localization: contextLocalization,\n nameRequired\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData } = useSession()\n\n return (\n <UpdateFieldCard\n className={className}\n classNames={classNames}\n value={sessionData?.user.name}\n description={localization.NAME_DESCRIPTION}\n name=\"name\"\n instructions={localization.NAME_INSTRUCTIONS}\n label={localization.NAME}\n localization={localization}\n placeholder={localization.NAME_PLACEHOLDER}\n required={nameRequired}\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport { useContext } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport type { User } from \"../../../types/auth-client\"\nimport type { SettingsCardProps } from \"../shared/settings-card\"\nimport { UpdateFieldCard } from \"./update-field-card\"\n\nexport function UpdateUsernameCard({\n className,\n classNames,\n localization,\n ...props\n}: SettingsCardProps) {\n const {\n hooks: { useSession },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData } = useSession()\n const value =\n (sessionData?.user as User)?.displayUsername ||\n (sessionData?.user as User)?.username\n\n return (\n <UpdateFieldCard\n className={className}\n classNames={classNames}\n value={value}\n description={localization.USERNAME_DESCRIPTION}\n name=\"username\"\n instructions={localization.USERNAME_INSTRUCTIONS}\n label={localization.USERNAME}\n localization={localization}\n placeholder={localization.USERNAME_PLACEHOLDER}\n required\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { useContext, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport { CardContent } from \"../../ui/card\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport type { SettingsCardProps } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\n\nexport function ChangeEmailCard({\n className,\n classNames,\n localization,\n ...props\n}: SettingsCardProps) {\n const {\n authClient,\n emailVerification,\n hooks: { useSession },\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData, isPending, refetch } = useSession()\n const [resendDisabled, setResendDisabled] = useState(false)\n\n const formSchema = z.object({\n email: z.string().email({ message: localization.INVALID_EMAIL })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n values: {\n email: sessionData?.user.email || \"\"\n }\n })\n\n const resendForm = useForm()\n\n const { isSubmitting } = form.formState\n\n const changeEmail = async ({ email }: z.infer<typeof formSchema>) => {\n if (email === sessionData?.user.email) {\n await new Promise((resolve) => setTimeout(resolve))\n toast({\n variant: \"error\",\n message: localization.EMAIL_IS_THE_SAME\n })\n return\n }\n\n try {\n await authClient.changeEmail({\n newEmail: email,\n callbackURL: window.location.pathname,\n fetchOptions: { throw: true }\n })\n\n if (sessionData?.user.emailVerified) {\n toast({\n variant: \"success\",\n message: localization.EMAIL_VERIFY_CHANGE!\n })\n } else {\n await refetch?.()\n toast({\n variant: \"success\",\n message: `${localization.EMAIL} ${localization.UPDATED_SUCCESSFULLY}`\n })\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n const resendVerification = async () => {\n if (!sessionData) return\n const email = sessionData.user.email\n\n setResendDisabled(true)\n\n try {\n await authClient.sendVerificationEmail({\n email,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.EMAIL_VERIFY_CHANGE!\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n setResendDisabled(false)\n throw error\n }\n }\n\n return (\n <>\n <Form {...form}>\n <form noValidate onSubmit={form.handleSubmit(changeEmail)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.EMAIL_DESCRIPTION}\n instructions={localization.EMAIL_INSTRUCTIONS}\n isPending={isPending}\n title={localization.EMAIL}\n actionLabel={localization.SAVE}\n {...props}\n >\n <CardContent className={classNames?.content}>\n {isPending ? (\n <Skeleton\n className={cn(\n \"h-9 w-full\",\n classNames?.skeleton\n )}\n />\n ) : (\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormControl>\n <Input\n className={\n classNames?.input\n }\n placeholder={\n localization.EMAIL_PLACEHOLDER\n }\n type=\"email\"\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )}\n </CardContent>\n </SettingsCard>\n </form>\n </Form>\n\n {emailVerification &&\n sessionData?.user &&\n !sessionData?.user.emailVerified && (\n <Form {...resendForm}>\n <form\n onSubmit={resendForm.handleSubmit(\n resendVerification\n )}\n >\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.VERIFY_YOUR_EMAIL}\n description={\n localization.VERIFY_YOUR_EMAIL_DESCRIPTION\n }\n actionLabel={\n localization.RESEND_VERIFICATION_EMAIL\n }\n disabled={resendDisabled}\n {...props}\n />\n </form>\n </Form>\n )}\n </>\n )\n}\n","\"use client\"\n\nimport { useContext, useMemo, useState } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport { CardContent } from \"../../ui/card\"\nimport type { SettingsCardProps } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { ApiKeyCell } from \"./api-key-cell\"\nimport { ApiKeyDisplayDialog } from \"./api-key-display-dialog\"\nimport { CreateApiKeyDialog } from \"./create-api-key-dialog\"\n\nexport interface ApiKeysCardProps extends SettingsCardProps {\n organizationId?: string\n}\n\nexport function ApiKeysCard({\n className,\n classNames,\n localization,\n organizationId,\n ...props\n}: ApiKeysCardProps) {\n const {\n hooks: { useListApiKeys },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: apiKeys, isPending, refetch } = useListApiKeys()\n\n // Filter API keys by organizationId\n const filteredApiKeys = useMemo(() => {\n return apiKeys?.filter(\n (apiKey) => organizationId === apiKey.metadata?.organizationId\n )\n }, [apiKeys, organizationId])\n\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n const [displayDialogOpen, setDisplayDialogOpen] = useState(false)\n const [createdApiKey, setCreatedApiKey] = useState(\"\")\n\n const handleCreateApiKey = (apiKey: string) => {\n setCreatedApiKey(apiKey)\n setDisplayDialogOpen(true)\n }\n\n return (\n <>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization.CREATE_API_KEY}\n description={localization.API_KEYS_DESCRIPTION}\n instructions={localization.API_KEYS_INSTRUCTIONS}\n isPending={isPending}\n title={localization.API_KEYS}\n action={() => setCreateDialogOpen(true)}\n {...props}\n >\n {filteredApiKeys && filteredApiKeys.length > 0 && (\n <CardContent\n className={cn(\"grid gap-4\", classNames?.content)}\n >\n {filteredApiKeys?.map((apiKey) => (\n <ApiKeyCell\n key={apiKey.id}\n classNames={classNames}\n apiKey={apiKey}\n localization={localization}\n refetch={refetch}\n />\n ))}\n </CardContent>\n )}\n </SettingsCard>\n\n <CreateApiKeyDialog\n classNames={classNames}\n localization={localization}\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n onSuccess={handleCreateApiKey}\n refetch={refetch}\n organizationId={organizationId}\n />\n\n <ApiKeyDisplayDialog\n classNames={classNames}\n apiKey={createdApiKey}\n localization={localization}\n open={displayDialogOpen}\n onOpenChange={setDisplayDialogOpen}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { KeyRoundIcon } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\n\nimport { useLang } from \"../../../hooks/use-lang\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { ApiKey } from \"../../../types/api-key\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { ApiKeyDeleteDialog } from \"./api-key-delete-dialog\"\n\nexport interface ApiKeyCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n apiKey: ApiKey\n localization?: Partial<AuthLocalization>\n refetch?: Refetch\n}\n\nexport function ApiKeyCell({\n className,\n classNames,\n apiKey,\n localization,\n refetch\n}: ApiKeyCellProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n localization = { ...contextLocalization, ...localization }\n\n const { lang } = useLang()\n\n const [showDeleteDialog, setShowDeleteDialog] = useState(false)\n\n // Format expiration date or show \"Never expires\"\n const formatExpiration = () => {\n if (!apiKey.expiresAt) return localization.NEVER_EXPIRES\n\n const expiresDate = new Date(apiKey.expiresAt)\n return `${localization.EXPIRES} ${expiresDate.toLocaleDateString(\n lang ?? \"en\",\n {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\"\n }\n )}`\n }\n\n return (\n <>\n <Card\n className={cn(\n \"flex-row items-center gap-3 truncate px-4 py-3\",\n className,\n classNames?.cell\n )}\n >\n <KeyRoundIcon\n className={cn(\"size-4 flex-shrink-0\", classNames?.icon)}\n />\n\n <div className=\"flex flex-col truncate\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-semibold text-sm\">\n {apiKey.name}\n </span>\n\n <span className=\"flex-1 truncate text-muted-foreground text-sm\">\n {apiKey.start}\n {\"******\"}\n </span>\n </div>\n\n <div className=\"truncate text-muted-foreground text-xs\">\n {formatExpiration()}\n </div>\n </div>\n\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setShowDeleteDialog(true)}\n >\n {localization.DELETE}\n </Button>\n </Card>\n\n <ApiKeyDeleteDialog\n classNames={classNames}\n apiKey={apiKey}\n localization={localization}\n open={showDeleteDialog}\n onOpenChange={setShowDeleteDialog}\n refetch={refetch}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { KeyRoundIcon, Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useState } from \"react\"\n\nimport { useLang } from \"../../../hooks/use-lang\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { ApiKey } from \"../../../types/api-key\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\ninterface ApiKeyDeleteDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n apiKey: ApiKey\n localization?: AuthLocalization\n refetch?: Refetch\n}\n\nexport function ApiKeyDeleteDialog({\n classNames,\n apiKey,\n localization,\n refetch,\n onOpenChange,\n ...props\n}: ApiKeyDeleteDialogProps) {\n const {\n localization: contextLocalization,\n mutators: { deleteApiKey },\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { lang } = useLang()\n const [isLoading, setIsLoading] = useState(false)\n\n const handleDelete = async () => {\n setIsLoading(true)\n\n try {\n await deleteApiKey({ keyId: apiKey.id })\n await refetch?.()\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n // Format expiration date or show \"Never expires\"\n const formatExpiration = () => {\n if (!apiKey.expiresAt) return localization.NEVER_EXPIRES\n\n const expiresDate = new Date(apiKey.expiresAt)\n return `${localization.EXPIRES} ${expiresDate.toLocaleDateString(\n lang ?? \"en\",\n {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\"\n }\n )}`\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={classNames?.dialog?.content}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.DELETE} {localization.API_KEY}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.DELETE_API_KEY_CONFIRM}\n </DialogDescription>\n </DialogHeader>\n\n <Card\n className={cn(\n \"my-2 flex-row items-center gap-3 px-4 py-3\",\n classNames?.cell\n )}\n >\n <KeyRoundIcon className={cn(\"size-4\", classNames?.icon)} />\n\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold text-sm\">\n {apiKey.name}\n </span>\n\n <span className=\"text-muted-foreground text-sm\">\n {apiKey.start}\n {\"******\"}\n </span>\n </div>\n\n <div className=\"text-muted-foreground text-xs\">\n {formatExpiration()}\n </div>\n </div>\n </Card>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => onOpenChange?.(false)}\n disabled={isLoading}\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isLoading}\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n >\n {isLoading && <Loader2 className=\"animate-spin\" />}\n {localization.DELETE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\ninterface ApiKeyDisplayDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n apiKey: string\n}\n\nexport function ApiKeyDisplayDialog({\n classNames,\n apiKey,\n localization,\n onOpenChange,\n ...props\n}: ApiKeyDisplayDialogProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n localization = { ...contextLocalization, ...localization }\n\n const [copied, setCopied] = useState(false)\n\n const handleCopy = () => {\n navigator.clipboard.writeText(apiKey)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={classNames?.dialog?.content}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.API_KEY_CREATED}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.CREATE_API_KEY_SUCCESS}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"break-all rounded-md bg-muted p-4 font-mono text-sm\">\n {apiKey}\n </div>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCopy}\n disabled={copied}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {copied ? (\n <>\n <CheckIcon className={classNames?.icon} />\n {localization.COPIED_TO_CLIPBOARD}\n </>\n ) : (\n <>\n <CopyIcon className={classNames?.icon} />\n {localization.COPY_TO_CLIPBOARD}\n </>\n )}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {localization.DONE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { useLang } from \"../../../hooks/use-lang\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { OrganizationCellView } from \"../../organization/organization-cell-view\"\nimport { PersonalAccountView } from \"../../organization/personal-account-view\"\nimport { Button } from \"../../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from \"../../ui/select\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\ninterface CreateApiKeyDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n onSuccess: (key: string) => void\n refetch?: Refetch\n organizationId?: string\n}\n\nexport function CreateApiKeyDialog({\n classNames,\n localization,\n onSuccess,\n refetch,\n organizationId,\n onOpenChange,\n ...props\n}: CreateApiKeyDialogProps) {\n const {\n authClient,\n apiKey,\n hooks: { useListOrganizations, useSession },\n localization: contextLocalization,\n organization: contextOrganization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { lang } = useLang()\n\n let organizations: Organization[] | null | undefined\n if (contextOrganization) {\n const { data } = useListOrganizations()\n organizations = data\n }\n\n const { data: sessionData } = useSession()\n const user = sessionData?.user\n\n const showOrganizationSelect = contextOrganization?.apiKey\n\n const formSchema = z.object({\n name: z\n .string()\n .min(1, `${localization.NAME} ${localization.IS_REQUIRED}`),\n expiresInDays: z.string().optional(),\n organizationId: showOrganizationSelect\n ? z\n .string()\n .min(\n 1,\n `${localization.ORGANIZATION} ${localization.IS_REQUIRED}`\n )\n : z.string().optional()\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n values: {\n name: \"\",\n expiresInDays: \"none\",\n organizationId: organizationId ?? \"personal\"\n }\n })\n\n const { isSubmitting } = form.formState\n\n const onSubmit = async (values: z.infer<typeof formSchema>) => {\n try {\n const expiresIn =\n values.expiresInDays && values.expiresInDays !== \"none\"\n ? Number.parseInt(values.expiresInDays) * 60 * 60 * 24\n : undefined\n\n const selectedOrgId =\n values.organizationId === \"personal\"\n ? undefined\n : values.organizationId\n\n const metadata = {\n ...(typeof apiKey === \"object\" ? apiKey.metadata : {}),\n ...(contextOrganization && selectedOrgId\n ? { organizationId: selectedOrgId }\n : {})\n }\n\n const result = await authClient.apiKey.create({\n name: values.name,\n expiresIn,\n prefix: typeof apiKey === \"object\" ? apiKey.prefix : undefined,\n metadata:\n Object.keys(metadata).length > 0 ? metadata : undefined,\n fetchOptions: { throw: true }\n })\n\n await refetch?.()\n onSuccess(result.key)\n onOpenChange?.(false)\n form.reset()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n const rtf = new Intl.RelativeTimeFormat(lang ?? \"en\")\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={classNames?.dialog?.content}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.CREATE_API_KEY}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.CREATE_API_KEY_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(onSubmit)}\n className=\"space-y-6\"\n >\n {showOrganizationSelect && (\n <FormField\n control={form.control}\n name=\"organizationId\"\n render={({ field }) => (\n <FormItem className=\"w-full\">\n <FormLabel\n className={classNames?.label}\n >\n {localization.ORGANIZATION}\n </FormLabel>\n\n <Select\n onValueChange={field.onChange}\n value={field.value}\n disabled={isSubmitting}\n >\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full p-2\",\n classNames?.input\n )}\n >\n <SelectValue\n placeholder={\n localization.ORGANIZATION\n }\n />\n </SelectTrigger>\n </FormControl>\n\n <SelectContent className=\"w-[--radix-select-trigger-width]\">\n <SelectItem\n value=\"personal\"\n className=\"p-2\"\n >\n <PersonalAccountView\n user={user}\n localization={\n localization\n }\n size=\"sm\"\n />\n </SelectItem>\n\n {organizations?.map((org) => (\n <SelectItem\n key={org.id}\n value={org.id}\n className=\"p-2\"\n >\n <OrganizationCellView\n organization={org}\n localization={\n localization\n }\n size=\"sm\"\n />\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <FormMessage />\n </FormItem>\n )}\n />\n )}\n\n <div className=\"flex gap-4\">\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem className=\"flex-1\">\n <FormLabel\n className={classNames?.label}\n >\n {localization.NAME}\n </FormLabel>\n\n <FormControl>\n <Input\n className={classNames?.input}\n placeholder={\n localization.API_KEY_NAME_PLACEHOLDER\n }\n autoFocus\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"expiresInDays\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {localization.EXPIRES}\n </FormLabel>\n\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n disabled={isSubmitting}\n >\n <FormControl>\n <SelectTrigger\n className={\n classNames?.input\n }\n >\n <SelectValue\n placeholder={\n localization.NO_EXPIRATION\n }\n />\n </SelectTrigger>\n </FormControl>\n\n <SelectContent>\n <SelectItem value=\"none\">\n {localization.NO_EXPIRATION}\n </SelectItem>\n\n {[\n 1, 7, 30, 60, 90, 180, 365\n ].map((days) => (\n <SelectItem\n key={days}\n value={days.toString()}\n >\n {days === 365\n ? rtf.format(\n 1,\n \"year\"\n )\n : rtf.format(\n days,\n \"day\"\n )}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isSubmitting}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"submit\"\n variant=\"default\"\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isSubmitting}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.CREATE_API_KEY}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useContext, useMemo } from \"react\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport { Skeleton } from \"../ui/skeleton\"\nimport { UserAvatar } from \"../user-avatar\"\nimport type { UserViewProps } from \"../user-view\"\n\n/**\n * Displays user information with avatar and details in a compact view for personal accounts\n *\n * Renders a user's profile information with appropriate fallbacks:\n * - Shows avatar alongside user name and \"Personal Account\" subtitle when available\n * - Shows loading skeletons when isPending is true\n * - Falls back to generic \"User\" text when neither name nor email is available\n * - Always shows \"Personal Account\" as subtitle for default and lg sizes\n * - Supports customization through classNames prop\n */\nexport function PersonalAccountView({\n className,\n classNames,\n isPending,\n size,\n user,\n localization: propLocalization\n}: UserViewProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...propLocalization }),\n [contextLocalization, propLocalization]\n )\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2\",\n className,\n classNames?.base\n )}\n >\n <UserAvatar\n className={cn(size !== \"sm\" && \"my-0.5\")}\n classNames={classNames?.avatar}\n isPending={isPending}\n localization={localization}\n size={size}\n user={user}\n />\n\n <div\n className={cn(\n \"grid flex-1 text-left leading-tight\",\n classNames?.content\n )}\n >\n {isPending ? (\n <>\n <Skeleton\n className={cn(\n \"max-w-full\",\n size === \"lg\" ? \"h-4.5 w-32\" : \"h-3.5 w-24\",\n classNames?.title,\n classNames?.skeleton\n )}\n />\n\n {size !== \"sm\" && (\n <Skeleton\n className={cn(\n \"mt-1.5 max-w-full\",\n size === \"lg\" ? \"h-3.5 w-40\" : \"h-3 w-32\",\n classNames?.subtitle,\n classNames?.skeleton\n )}\n />\n )}\n </>\n ) : (\n <>\n <span\n className={cn(\n \"truncate font-semibold\",\n size === \"lg\" ? \"text-base\" : \"text-sm\",\n classNames?.title\n )}\n >\n {user?.displayName ||\n user?.name ||\n user?.fullName ||\n user?.firstName ||\n user?.displayUsername ||\n user?.username ||\n user?.email ||\n localization?.USER}\n </span>\n\n {size !== \"sm\" && (\n <span\n className={cn(\n \"truncate opacity-70\",\n size === \"lg\" ? \"text-sm\" : \"text-xs\",\n classNames?.subtitle\n )}\n >\n {localization?.PERSONAL_ACCOUNT}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","\"use client\"\n\nimport { useContext } from \"react\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { DeleteAccountCard } from \"./account/delete-account-card\"\nimport { PasskeysCard } from \"./passkey/passkeys-card\"\nimport { ProvidersCard } from \"./providers/providers-card\"\nimport { ChangePasswordCard } from \"./security/change-password-card\"\nimport { SessionsCard } from \"./security/sessions-card\"\nimport type { SettingsCardClassNames } from \"./shared/settings-card\"\nimport { TwoFactorCard } from \"./two-factor/two-factor-card\"\n\nexport function SecuritySettingsCards({\n className,\n classNames,\n localization\n}: {\n className?: string\n classNames?: {\n card?: SettingsCardClassNames\n cards?: string\n }\n localization?: Partial<AuthLocalization>\n}) {\n const {\n credentials,\n deleteUser,\n hooks,\n localization: contextLocalization,\n passkey,\n social,\n genericOAuth,\n twoFactor\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { useListAccounts } = hooks\n\n const {\n data: accounts,\n isPending: accountsPending,\n refetch: refetchAccounts\n } = useListAccounts()\n\n const credentialsLinked = accounts?.some(\n (acc) => acc.providerId === \"credential\"\n )\n\n return (\n <div\n className={cn(\n \"flex w-full flex-col gap-4 md:gap-6\",\n className,\n classNames?.cards\n )}\n >\n {credentials && (\n <ChangePasswordCard\n accounts={accounts}\n classNames={classNames?.card}\n isPending={accountsPending}\n localization={localization}\n skipHook\n />\n )}\n\n {(social?.providers?.length || genericOAuth?.providers?.length) && (\n <ProvidersCard\n accounts={accounts}\n classNames={classNames?.card}\n isPending={accountsPending}\n localization={localization}\n refetch={refetchAccounts}\n skipHook\n />\n )}\n\n {twoFactor && credentialsLinked && (\n <TwoFactorCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n {passkey && (\n <PasskeysCard\n classNames={classNames?.card}\n localization={localization}\n />\n )}\n\n <SessionsCard\n classNames={classNames?.card}\n localization={localization}\n />\n\n {deleteUser && (\n <DeleteAccountCard\n accounts={accounts}\n classNames={classNames?.card}\n isPending={accountsPending}\n localization={localization}\n skipHook\n />\n )}\n </div>\n )\n}\n","\"use client\"\n\nimport type { Account } from \"better-auth\"\nimport { useContext, useState } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { DeleteAccountDialog } from \"./delete-account-dialog\"\n\nexport interface DeleteAccountCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n accounts?: Account[] | null\n isPending?: boolean\n localization?: AuthLocalization\n skipHook?: boolean\n}\n\nexport function DeleteAccountCard({\n className,\n classNames,\n accounts,\n isPending,\n localization,\n skipHook\n}: DeleteAccountCardProps) {\n const {\n hooks: { useListAccounts },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const [showDialog, setShowDialog] = useState(false)\n\n if (!skipHook) {\n const result = useListAccounts()\n accounts = result.data\n isPending = result.isPending\n }\n\n return (\n <div>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization?.DELETE_ACCOUNT}\n description={localization?.DELETE_ACCOUNT_DESCRIPTION}\n isPending={isPending}\n title={localization?.DELETE_ACCOUNT}\n variant=\"destructive\"\n action={() => setShowDialog(true)}\n />\n\n <DeleteAccountDialog\n classNames={classNames}\n accounts={accounts}\n localization={localization}\n open={showDialog}\n onOpenChange={setShowDialog}\n />\n </div>\n )\n}\n","import { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Account } from \"better-auth\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport { UserView } from \"../../user-view\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface DeleteAccountDialogProps\n extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n accounts?: Account[] | null\n localization?: AuthLocalization\n}\n\nexport function DeleteAccountDialog({\n classNames,\n accounts,\n localization,\n onOpenChange,\n ...props\n}: DeleteAccountDialogProps) {\n const {\n authClient,\n basePath,\n baseURL,\n deleteUser,\n freshAge,\n hooks: { useSession },\n localization: contextLocalization,\n viewPaths,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData } = useSession()\n const session = sessionData?.session\n const user = sessionData?.user\n\n const isFresh = session\n ? Date.now() - new Date(session?.createdAt).getTime() < freshAge * 1000\n : false\n const credentialsLinked = accounts?.some(\n (acc) => acc.providerId === \"credential\"\n )\n\n const formSchema = z.object({\n password: credentialsLinked\n ? z.string().min(1, { message: localization.PASSWORD_REQUIRED! })\n : z.string().optional()\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\"\n }\n })\n\n const { isSubmitting } = form.formState\n\n const deleteAccount = async ({ password }: z.infer<typeof formSchema>) => {\n const params = {} as Record<string, string>\n\n if (credentialsLinked) {\n params.password = password!\n } else if (!isFresh) {\n navigate(`${basePath}/${viewPaths.SIGN_OUT}`)\n return\n }\n\n if (deleteUser?.verification) {\n params.callbackURL = `${baseURL}${basePath}/${viewPaths.SIGN_OUT}`\n }\n\n try {\n await authClient.deleteUser({\n ...params,\n fetchOptions: {\n throw: true\n }\n })\n\n if (deleteUser?.verification) {\n toast({\n variant: \"success\",\n message: localization.DELETE_ACCOUNT_VERIFY!\n })\n } else {\n toast({\n variant: \"success\",\n message: localization.DELETE_ACCOUNT_SUCCESS!\n })\n navigate(`${basePath}/${viewPaths.SIGN_OUT}`)\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n onOpenChange?.(false)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={cn(\"sm:max-w-md\", classNames?.dialog?.content)}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization?.DELETE_ACCOUNT}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {isFresh\n ? localization?.DELETE_ACCOUNT_INSTRUCTIONS\n : localization?.SESSION_NOT_FRESH}\n </DialogDescription>\n </DialogHeader>\n\n <Card className={cn(\"my-2 flex-row p-4\", classNames?.cell)}>\n <UserView user={user} localization={localization} />\n </Card>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(deleteAccount)}\n className=\"grid gap-6\"\n >\n {credentialsLinked && (\n <FormField\n control={form.control}\n name=\"password\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {localization?.PASSWORD}\n </FormLabel>\n\n <FormControl>\n <Input\n autoComplete=\"current-password\"\n placeholder={\n localization?.PASSWORD_PLACEHOLDER\n }\n type=\"password\"\n className={classNames?.input}\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )}\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n onClick={() => onOpenChange?.(false)}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n disabled={isSubmitting}\n variant=\"destructive\"\n type=\"submit\"\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n {isFresh\n ? localization?.DELETE_ACCOUNT\n : localization?.SIGN_OUT}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useContext, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { CardContent } from \"../../ui/card\"\nimport { Form } from \"../../ui/form\"\nimport { SessionFreshnessDialog } from \"../shared/session-freshness-dialog\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { PasskeyCell } from \"./passkey-cell\"\n\nexport interface PasskeysCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n}\n\nexport function PasskeysCard({\n className,\n classNames,\n localization\n}: PasskeysCardProps) {\n const {\n authClient,\n freshAge,\n hooks: { useListPasskeys, useSession },\n localization: authLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...authLocalization, ...localization }\n\n const { data: passkeys, isPending, refetch } = useListPasskeys()\n\n const { data: sessionData } = useSession()\n const session = sessionData?.session\n const isFresh = session\n ? Date.now() - new Date(session?.createdAt).getTime() < freshAge * 1000\n : false\n\n const [showFreshnessDialog, setShowFreshnessDialog] = useState(false)\n\n const addPasskey = async () => {\n // If session isn't fresh, show the freshness dialog\n if (!isFresh) {\n setShowFreshnessDialog(true)\n return\n }\n\n try {\n await authClient.passkey.addPasskey({\n fetchOptions: { throw: true }\n })\n await refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n const form = useForm()\n\n return (\n <>\n <SessionFreshnessDialog\n open={showFreshnessDialog}\n onOpenChange={setShowFreshnessDialog}\n classNames={classNames}\n localization={localization}\n />\n\n <Form {...form}>\n <form onSubmit={form.handleSubmit(addPasskey)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization.ADD_PASSKEY}\n description={localization.PASSKEYS_DESCRIPTION}\n instructions={localization.PASSKEYS_INSTRUCTIONS}\n isPending={isPending}\n title={localization.PASSKEYS}\n >\n {passkeys && passkeys.length > 0 && (\n <CardContent\n className={cn(\n \"grid gap-4\",\n classNames?.content\n )}\n >\n {passkeys?.map((passkey) => (\n <PasskeyCell\n key={passkey.id}\n classNames={classNames}\n localization={localization}\n passkey={passkey}\n />\n ))}\n </CardContent>\n )}\n </SettingsCard>\n </form>\n </Form>\n </>\n )\n}\n","import { type ComponentProps, useContext } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport type { SettingsCardClassNames } from \"./settings-card\"\n\nexport interface SessionFreshnessDialogProps\n extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n title?: string\n description?: string\n}\n\nexport function SessionFreshnessDialog({\n classNames,\n localization,\n title,\n description,\n onOpenChange,\n ...props\n}: SessionFreshnessDialogProps) {\n const {\n basePath,\n localization: contextLocalization,\n viewPaths,\n navigate\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const handleSignOut = () => {\n navigate(`${basePath}/${viewPaths.SIGN_OUT}`)\n onOpenChange?.(false)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={cn(\"sm:max-w-md\", classNames?.dialog?.content)}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {title ||\n localization?.SESSION_EXPIRED ||\n \"Session Expired\"}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {description || localization?.SESSION_NOT_FRESH}\n </DialogDescription>\n </DialogHeader>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n onClick={() => onOpenChange?.(false)}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n variant=\"default\"\n onClick={handleSignOut}\n >\n {localization?.SIGN_OUT}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { Passkey } from \"@better-auth/passkey\"\nimport { FingerprintIcon, Loader2 } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport { SessionFreshnessDialog } from \"../shared/session-freshness-dialog\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface PasskeyCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n passkey: Passkey\n}\n\nexport function PasskeyCell({\n className,\n classNames,\n localization,\n passkey\n}: PasskeyCellProps) {\n const {\n freshAge,\n hooks: { useSession, useListPasskeys },\n localization: contextLocalization,\n mutators: { deletePasskey },\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { refetch } = useListPasskeys()\n\n const { data: sessionData } = useSession()\n const session = sessionData?.session\n const isFresh = session\n ? Date.now() - new Date(session?.createdAt).getTime() < freshAge * 1000\n : false\n\n const [showFreshnessDialog, setShowFreshnessDialog] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const handleDeletePasskey = async () => {\n // If session isn't fresh, show the freshness dialog\n if (!isFresh) {\n setShowFreshnessDialog(true)\n return\n }\n\n setIsLoading(true)\n\n try {\n await deletePasskey({ id: passkey.id })\n refetch?.()\n } catch (error) {\n setIsLoading(false)\n\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <>\n <SessionFreshnessDialog\n open={showFreshnessDialog}\n onOpenChange={setShowFreshnessDialog}\n classNames={classNames}\n localization={localization}\n />\n\n <Card\n className={cn(\n \"flex-row items-center p-4\",\n className,\n classNames?.cell\n )}\n >\n <div className=\"flex items-center gap-3\">\n <FingerprintIcon\n className={cn(\"size-4\", classNames?.icon)}\n />\n <span className=\"text-sm\">\n {new Date(passkey.createdAt).toLocaleString()}\n </span>\n </div>\n\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLoading}\n size=\"sm\"\n variant=\"outline\"\n onClick={handleDeletePasskey}\n >\n {isLoading && <Loader2 className=\"animate-spin\" />}\n\n {localization.DELETE}\n </Button>\n </Card>\n </>\n )\n}\n","\"use client\"\n\nimport type { Account } from \"better-auth\"\nimport { useContext } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { socialProviders } from \"../../../lib/social-providers\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { CardContent } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { SettingsCellSkeleton } from \"../skeletons/settings-cell-skeleton\"\nimport { ProviderCell } from \"./provider-cell\"\n\nexport interface ProvidersCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n accounts?: Account[] | null\n isPending?: boolean\n localization?: Partial<AuthLocalization>\n skipHook?: boolean\n refetch?: Refetch\n}\n\nexport function ProvidersCard({\n className,\n classNames,\n accounts,\n isPending,\n localization,\n skipHook,\n refetch\n}: ProvidersCardProps) {\n const {\n hooks: { useListAccounts },\n localization: contextLocalization,\n social,\n genericOAuth\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n if (!skipHook) {\n const result = useListAccounts()\n accounts = result.data\n isPending = result.isPending\n refetch = result.refetch\n }\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.PROVIDERS}\n description={localization.PROVIDERS_DESCRIPTION}\n isPending={isPending}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {isPending ? (\n social?.providers?.map((provider) => (\n <SettingsCellSkeleton\n key={provider}\n classNames={classNames}\n />\n ))\n ) : (\n <>\n {accounts?.map((account) => {\n const socialProvider = socialProviders.find(\n (sp) => sp.provider === account.providerId\n )\n const genericOAuthProvider =\n genericOAuth?.providers?.find(\n (gp) => gp.provider === account.providerId\n )\n\n const provider =\n socialProvider || genericOAuthProvider\n if (!provider) return null\n\n return (\n <ProviderCell\n key={account.providerId}\n classNames={classNames}\n account={account}\n provider={provider}\n refetch={refetch}\n other={!socialProvider}\n />\n )\n })}\n\n {social?.providers?.map((provider) => {\n const socialProvider = socialProviders.find(\n (socialProvider) =>\n socialProvider.provider === provider\n )\n\n if (!socialProvider) return null\n\n return (\n <ProviderCell\n key={provider}\n classNames={classNames}\n provider={socialProvider}\n refetch={refetch}\n />\n )\n })}\n\n {genericOAuth?.providers?.map((provider) => (\n <ProviderCell\n key={provider.provider}\n classNames={classNames}\n account={accounts?.find(\n (acc) =>\n acc.providerId === provider.provider\n )}\n provider={provider}\n refetch={refetch}\n other\n />\n ))}\n </>\n )}\n </CardContent>\n </SettingsCard>\n )\n}\n","import type { ComponentType } from \"react\"\n\nexport interface ProviderIconProps {\n className?: string\n}\n\nexport type ProviderIcon = ComponentType<ProviderIconProps>\n\nexport const AppleIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.438 31.401a7 7 0 0 1-1.656-1.536a20 20 0 0 1-1.422-1.938a18.9 18.9 0 0 1-2.375-4.849c-.667-2-.99-3.917-.99-5.792c0-2.094.453-3.922 1.339-5.458a7.7 7.7 0 0 1 2.797-2.906a7.45 7.45 0 0 1 3.786-1.12q.705.002 1.51.198c.385.109.854.281 1.427.495c.729.281 1.13.453 1.266.495c.427.156.786.224 1.068.224c.214 0 .516-.068.859-.172c.193-.068.557-.188 1.078-.411c.516-.188.922-.349 1.245-.469c.495-.146.974-.281 1.401-.349a6.7 6.7 0 0 1 1.531-.063a9 9 0 0 1 2.589.557c1.359.547 2.458 1.401 3.276 2.615a6.4 6.4 0 0 0-.969.734a8.2 8.2 0 0 0-1.641 2.005a6.8 6.8 0 0 0-.859 3.359c.021 1.443.391 2.714 1.12 3.813a7.2 7.2 0 0 0 2.047 2.047c.417.281.776.474 1.12.604c-.161.5-.333.984-.536 1.464a19 19 0 0 1-1.667 3.083c-.578.839-1.031 1.464-1.375 1.88c-.536.635-1.052 1.12-1.573 1.458c-.573.38-1.25.583-1.938.583a4.4 4.4 0 0 1-1.38-.167c-.385-.13-.766-.271-1.141-.432a9 9 0 0 0-1.203-.453a6.3 6.3 0 0 0-3.099-.005c-.417.12-.818.26-1.214.432c-.557.234-.927.391-1.141.458c-.427.125-.87.203-1.318.229c-.693 0-1.339-.198-1.979-.599zm9.14-24.615c-.906.453-1.771.646-2.63.583c-.135-.865 0-1.75.359-2.719a7.3 7.3 0 0 1 1.333-2.24A7.1 7.1 0 0 1 19.812.733q1.319-.68 2.521-.734c.104.906 0 1.797-.333 2.76a8 8 0 0 1-1.333 2.344a6.8 6.8 0 0 1-2.115 1.682z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const DiscordIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 199\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M216.856 16.597A208.5 208.5 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046q-29.538-4.442-58.533 0c-1.832-4.4-4.55-9.933-6.846-14.046a207.8 207.8 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161 161 0 0 0 79.735 175.3a136.4 136.4 0 0 1-21.846-10.632a109 109 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a132 132 0 0 0 5.355 4.237a136 136 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848c21.142-6.58 42.646-16.637 64.815-33.213c5.316-56.288-9.08-105.09-38.056-148.36M85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2s23.236 11.804 23.015 26.2c.02 14.375-10.148 26.18-23.015 26.18m85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2c0 14.375-10.148 26.18-23.015 26.18\"\n fill=\"#5865f2\"\n />\n </svg>\n)\n\nexport const DropboxIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 218\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M63.995 0L0 40.771l63.995 40.772L128 40.771zM192 0l-64 40.775l64 40.775l64.001-40.775zM0 122.321l63.995 40.772L128 122.321L63.995 81.55zM192 81.55l-64 40.775l64 40.774l64-40.774zM64 176.771l64.005 40.772L192 176.771L128.005 136z\"\n fill=\"#0061ff\"\n />\n </svg>\n)\n\nexport const FacebookIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445\"\n fill=\"#1877f2\"\n />\n\n <path\n d=\"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z\"\n fill=\"#fff\"\n />\n </svg>\n)\n\nexport const GitHubIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const GitLabIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 236\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"m128.075 236.075l47.104-144.97H80.97z\" fill=\"#e24329\" />\n <path d=\"M128.075 236.074L80.97 91.104H14.956z\" fill=\"#fc6d26\" />\n <path\n d=\"M14.956 91.104L.642 135.16a9.75 9.75 0 0 0 3.542 10.903l123.891 90.012z\"\n fill=\"#fca326\"\n />\n <path\n d=\"M14.956 91.105H80.97L52.601 3.79c-1.46-4.493-7.816-4.492-9.275 0z\"\n fill=\"#e24329\"\n />\n <path d=\"m128.075 236.074l47.104-144.97h66.015z\" fill=\"#fc6d26\" />\n <path\n d=\"m241.194 91.104l14.314 44.056a9.75 9.75 0 0 1-3.543 10.903l-123.89 90.012z\"\n fill=\"#fca326\"\n />\n <path\n d=\"M241.194 91.105h-66.015l28.37-87.315c1.46-4.493 7.816-4.492 9.275 0z\"\n fill=\"#e24329\"\n />\n </svg>\n)\n\nexport const GoogleIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 262\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n fill=\"#4285f4\"\n />\n\n <path\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n fill=\"#34a853\"\n />\n\n <path\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n fill=\"#fbbc05\"\n />\n\n <path\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n fill=\"#eb4335\"\n />\n </svg>\n)\n\nexport const HuggingFaceIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378c0 1.112.178 2.181.503 3.185c.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284c.278.173.48.408.71.694c.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542c.01.026.653 1.552 1.657 2.54c.616.605 1.01 1.223 1.082 1.912c.055.537-.096 1.059-.38 1.572c.637.121 1.294.187 1.967.187c.657 0 1.298-.063 1.921-.178c-.287-.517-.44-1.041-.384-1.581c.07-.69.465-1.307 1.081-1.913c1.004-.987 1.647-2.513 1.657-2.539c.021-.074.083-.285.233-.542c.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952c.23-.286.432-.52.71-.694c.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174a1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094c-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71c-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013a1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921a.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92a.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164c1.607-.007 2.984-1.155 3.572-1.164c.196-.003.305.12.305.454c0 .886-.424 2.328-1.563 3.202c-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026l-.01.008l-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116a1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243a1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444c-.034-.016-.104-.008-.2.022q-.094.03-.216.087q-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096a3 3 0 0 0-.26.219a2 2 0 0 0-.12.121a2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203c0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194c-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858s-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64c-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647s2.822 2.813 2.562 3.244s-1.176-.506-1.176-.506s-2.866-2.567-3.49-1.898s.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405c-.238.839-2.71-1.587-3.216-.642c-.506.946 3.49 2.056 3.522 2.064c1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194c1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858s.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64c.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647s-2.822 2.813-2.562 3.244s1.176-.506 1.176-.506s2.866-2.567 3.49-1.898s-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405c.238.839 2.71-1.587 3.216-.642c.506.946-3.49 2.056-3.522 2.064c-1.29.33-4.568 1.028-5.713-.624\"\n />\n </svg>\n)\n\nexport const KickIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M1.333 0h8v5.333H12V2.667h2.667V0h8v8H20v2.667h-2.667v2.666H20V16h2.667v8h-8v-2.667H12v-2.666H9.333V24h-8Z\"\n />\n </svg>\n)\n\nexport const LinearIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M2.886 4.18A11.98 11.98 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556q-.787.496-1.65.866L.951 7.277q.371-.863.866-1.65ZM.322 9.163l14.515 14.515q-1.066.26-2.195.322L0 11.358a12 12 0 0 1 .322-2.195m-.17 4.862l9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z\"\n />\n </svg>\n)\n\nexport const LinkedInIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 128 128\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M116 3H12a8.91 8.91 0 0 0-9 8.8v104.42a8.91 8.91 0 0 0 9 8.78h104a8.93 8.93 0 0 0 9-8.81V11.77A8.93 8.93 0 0 0 116 3\"\n fill=\"#0076b2\"\n />\n <path\n d=\"M21.06 48.73h18.11V107H21.06zm9.06-29a10.5 10.5 0 1 1-10.5 10.49a10.5 10.5 0 0 1 10.5-10.49m20.41 29h17.36v8h.24c2.42-4.58 8.32-9.41 17.13-9.41C103.6 47.28 107 59.35 107 75v32H88.89V78.65c0-6.75-.12-15.44-9.41-15.44s-10.87 7.36-10.87 15V107H50.53z\"\n fill=\"#fff\"\n />\n </svg>\n)\n\nexport const MicrosoftIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M121.666 121.666H0V0h121.666z\" fill=\"#f1511b\" />\n <path d=\"M256 121.666H134.335V0H256z\" fill=\"#80cc28\" />\n <path d=\"M121.663 256.002H0V134.336h121.663z\" fill=\"#00adef\" />\n <path d=\"M256 256.002H134.335V134.336H256z\" fill=\"#fbbc09\" />\n </svg>\n)\n\nexport const NotionIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514c-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233l4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632\"\n />\n </svg>\n)\n\nexport const RedditIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"128\" cy=\"128\" fill=\"#ff4500\" r=\"128\" />\n\n <path\n d=\"M213.15 129.22c0-10.376-8.391-18.617-18.617-18.617a18.74 18.74 0 0 0-12.97 5.189c-12.818-9.157-30.368-15.107-49.9-15.87l8.544-39.981l27.773 5.95c.307 7.02 6.104 12.667 13.278 12.667c7.324 0 13.275-5.95 13.275-13.278c0-7.324-5.95-13.275-13.275-13.275c-5.188 0-9.768 3.052-11.904 7.478l-30.976-6.562c-.916-.154-1.832 0-2.443.458c-.763.458-1.22 1.22-1.371 2.136l-9.464 44.558c-19.837.612-37.692 6.562-50.662 15.872a18.74 18.74 0 0 0-12.971-5.188c-10.377 0-18.617 8.391-18.617 18.617c0 7.629 4.577 14.037 10.988 16.939a33.6 33.6 0 0 0-.458 5.646c0 28.686 33.42 52.036 74.621 52.036c41.202 0 74.622-23.196 74.622-52.036a35 35 0 0 0-.458-5.646c6.408-2.902 10.985-9.464 10.985-17.093M85.272 142.495c0-7.324 5.95-13.275 13.278-13.275c7.324 0 13.275 5.95 13.275 13.275s-5.95 13.278-13.275 13.278c-7.327.15-13.278-5.953-13.278-13.278m74.317 35.251c-9.156 9.157-26.553 9.768-31.588 9.768c-5.188 0-22.584-.765-31.59-9.768c-1.371-1.373-1.371-3.51 0-4.883c1.374-1.371 3.51-1.371 4.884 0c5.8 5.8 18.008 7.782 26.706 7.782s21.058-1.983 26.704-7.782c1.374-1.371 3.51-1.371 4.884 0c1.22 1.373 1.22 3.51 0 4.883m-2.443-21.822c-7.325 0-13.275-5.95-13.275-13.275s5.95-13.275 13.275-13.275c7.327 0 13.277 5.95 13.277 13.275c0 7.17-5.95 13.275-13.277 13.275\"\n fill=\"#fff\"\n />\n </svg>\n)\n\nexport const RobloxIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.926 23.998L0 18.892L5.075.002L24 5.108ZM15.348 10.09l-5.282-1.453l-1.414 5.273l5.282 1.453z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const SlackIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M6 15a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2h2zm1 0a2 2 0 0 1 2-2a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2a2 2 0 0 1-2-2zm2-8a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2v2zm0 1a2 2 0 0 1 2 2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2a2 2 0 0 1 2-2zm8 2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2h-2zm-1 0a2 2 0 0 1-2 2a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2a2 2 0 0 1 2 2zm-2 8a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2v-2zm0-1a2 2 0 0 1-2-2a2 2 0 0 1 2-2h5a2 2 0 0 1 2 2a2 2 0 0 1-2 2z\"\n />\n </svg>\n)\n\nexport const SpotifyIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M128 0C57.308 0 0 57.309 0 128c0 70.696 57.309 128 128 128c70.697 0 128-57.304 128-128C256 57.314 198.697.007 127.998.007zm58.699 184.614c-2.293 3.76-7.215 4.952-10.975 2.644c-30.053-18.357-67.885-22.515-112.44-12.335a7.98 7.98 0 0 1-9.552-6.007a7.97 7.97 0 0 1 6-9.553c48.76-11.14 90.583-6.344 124.323 14.276c3.76 2.308 4.952 7.215 2.644 10.975m15.667-34.853c-2.89 4.695-9.034 6.178-13.726 3.289c-34.406-21.148-86.853-27.273-127.548-14.92c-5.278 1.594-10.852-1.38-12.454-6.649c-1.59-5.278 1.386-10.842 6.655-12.446c46.485-14.106 104.275-7.273 143.787 17.007c4.692 2.89 6.175 9.034 3.286 13.72zm1.345-36.293C162.457 88.964 94.394 86.71 55.007 98.666c-6.325 1.918-13.014-1.653-14.93-7.978c-1.917-6.328 1.65-13.012 7.98-14.935C93.27 62.027 168.434 64.68 215.929 92.876c5.702 3.376 7.566 10.724 4.188 16.405c-3.362 5.69-10.73 7.565-16.4 4.187z\"\n fill=\"#1ed760\"\n />\n </svg>\n)\n\nexport const TikTokIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 256 290\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M189.72 104.421c18.678 13.345 41.56 21.197 66.273 21.197v-47.53a67 67 0 0 1-13.918-1.456v37.413c-24.711 0-47.59-7.851-66.272-21.195v96.996c0 48.523-39.356 87.855-87.9 87.855c-18.113 0-34.949-5.473-48.934-14.86c15.962 16.313 38.222 26.432 62.848 26.432c48.548 0 87.905-39.332 87.905-87.857v-96.995zm17.17-47.952c-9.546-10.423-15.814-23.893-17.17-38.785v-6.113h-13.189c3.32 18.927 14.644 35.097 30.358 44.898M69.673 225.607a40 40 0 0 1-8.203-24.33c0-22.192 18.001-40.186 40.21-40.186a40.3 40.3 0 0 1 12.197 1.883v-48.593c-4.61-.631-9.262-.9-13.912-.801v37.822a40.3 40.3 0 0 0-12.203-1.882c-22.208 0-40.208 17.992-40.208 40.187c0 15.694 8.997 29.281 22.119 35.9\"\n fill=\"#ff004f\"\n />\n\n <path d=\"M175.803 92.849c18.683 13.344 41.56 21.195 66.272 21.195V76.631c-13.794-2.937-26.005-10.141-35.186-20.162c-15.715-9.802-27.038-25.972-30.358-44.898h-34.643v189.843c-.079 22.132-18.049 40.052-40.21 40.052c-13.058 0-24.66-6.221-32.007-15.86c-13.12-6.618-22.118-20.206-22.118-35.898c0-22.193 18-40.187 40.208-40.187c4.255 0 8.356.662 12.203 1.882v-37.822c-47.692.985-86.047 39.933-86.047 87.834c0 23.912 9.551 45.589 25.053 61.428c13.985 9.385 30.82 14.86 48.934 14.86c48.545 0 87.9-39.335 87.9-87.857z\" />\n\n <path\n d=\"M242.075 76.63V66.516a66.3 66.3 0 0 1-35.186-10.047a66.47 66.47 0 0 0 35.186 20.163M176.53 11.57a68 68 0 0 1-.728-5.457V0h-47.834v189.845c-.076 22.13-18.046 40.05-40.208 40.05a40.06 40.06 0 0 1-18.09-4.287c7.347 9.637 18.949 15.857 32.007 15.857c22.16 0 40.132-17.918 40.21-40.05V11.571zM99.966 113.58v-10.769a89 89 0 0 0-12.061-.818C39.355 101.993 0 141.327 0 189.845c0 30.419 15.467 57.227 38.971 72.996c-15.502-15.838-25.053-37.516-25.053-61.427c0-47.9 38.354-86.848 86.048-87.833\"\n fill=\"#00f2ea\"\n />\n </svg>\n)\n\nexport const TwitchIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n version=\"1.1\"\n viewBox=\"0 0 2400 2800\"\n x=\"0px\"\n xmlSpace=\"preserve\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n y=\"0px\"\n >\n <style type=\"text/css\">\n {`\n .st0{fill:#FFFFFF}\n .st1{fill:#9146FF}\n `}\n </style>\n\n <title>Asset 2</title>\n\n <g>\n <polygon\n className=\"st0\"\n points=\"2200,1300 1800,1700 1400,1700 1050,2050 1050,1700 600,1700 600,200 2200,200\"\n />\n\n <g>\n <g>\n <path\n className=\"st1\"\n d=\"M500,0L0,500v1800h600v500l500-500h400l900-900V0H500z M2200,1300l-400,400h-400l-350,350v-350H600V200h1600V1300z\"\n />\n\n <rect\n className=\"st1\"\n height=\"600\"\n width=\"200\"\n x=\"1700\"\n y=\"550\"\n />\n <rect\n className=\"st1\"\n height=\"600\"\n width=\"200\"\n x=\"1150\"\n y=\"550\"\n />\n </g>\n </g>\n </g>\n </svg>\n)\n\nexport const VercelIcon: ProviderIcon = ({ className }) => (\n <svg\n data-testid=\"geist-icon\"\n height=\"16\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n className={className}\n style={{ color: \"currentcolor\" }}\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 1L16 15H0L8 1Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const VKIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 576 512\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7c0 0-30 73.1-72.4 120.5c-13.7 13.7-20 18.1-27.5 18.1c-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5c0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5c-20 0-68.6-73.4-97.4-157.4c-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7c0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9c0-66.8-3.4-73.1 15.4-73.1c8.7 0 23.7 4.4 58.7 38.1c40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25c-11.2-34.9-86.9-106.7-90.3-111.5c-8.7-11.2-6.2-16.2 0-26.2c.1-.1 72-101.3 79.4-135.6\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const XIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n viewBox=\"0 0 512 512\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M389.2 48h70.6L305.6 224.2L487 464H345L233.7 318.6L106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const ZoomIcon: ProviderIcon = ({ className }) => (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={512}\n height={117}\n viewBox=\"0 0 512 117\"\n >\n <path\n fill=\"#0b5cff\"\n d=\"M107.472 114.706H16.348c-5.968 0-11.791-3.203-14.557-8.589C-1.41 99.858-.247 92.434 4.702 87.63L68.17 24.164H22.607C10.088 24.164.044 13.974.044 1.6h83.992c5.968 0 11.79 3.203 14.556 8.589c3.203 6.259 2.038 13.683-2.911 18.486L32.214 92.143h52.55c12.518 0 22.708 10.19 22.708 22.563M468.183 0c-13.1 0-24.746 5.677-32.898 14.702C427.134 5.677 415.488 0 402.388 0c-24.164 0-43.961 20.67-43.961 44.834v69.872c12.518 0 22.562-10.19 22.562-22.563V44.689c0-11.646 9.025-21.544 20.67-21.98c12.228-.437 22.272 9.315 22.272 21.397v48.037c0 12.519 10.19 22.563 22.563 22.563V44.543c0-11.645 9.025-21.544 20.67-21.98c12.228-.437 22.272 9.316 22.272 21.398v48.036c0 12.52 10.19 22.563 22.563 22.563V44.69C512.144 20.67 492.347 0 468.183 0M221.595 58.226c0 32.17-26.056 58.226-58.226 58.226s-58.226-26.056-58.226-58.226S131.199 0 163.369 0s58.226 26.056 58.226 58.226m-22.563 0c0-19.651-16.012-35.663-35.663-35.663s-35.664 16.012-35.664 35.663c0 19.652 16.013 35.664 35.664 35.664s35.663-16.012 35.663-35.664m148.04 0c0 32.17-26.056 58.226-58.226 58.226S230.62 90.396 230.62 58.226S256.676 0 288.846 0s58.227 26.056 58.227 58.226m-22.562 0c0-19.651-16.012-35.663-35.664-35.663c-19.65 0-35.663 16.012-35.663 35.663c0 19.652 16.012 35.664 35.663 35.664c19.652 0 35.664-16.012 35.664-35.664\"\n />\n </svg>\n)\n","import {\n AppleIcon,\n DiscordIcon,\n DropboxIcon,\n FacebookIcon,\n GitHubIcon,\n GitLabIcon,\n GoogleIcon,\n HuggingFaceIcon,\n KickIcon,\n LinearIcon,\n LinkedInIcon,\n MicrosoftIcon,\n NotionIcon,\n type ProviderIcon,\n RedditIcon,\n RobloxIcon,\n SlackIcon,\n SpotifyIcon,\n TikTokIcon,\n TwitchIcon,\n VercelIcon,\n VKIcon,\n XIcon,\n ZoomIcon\n} from \"../components/provider-icons\"\n\nexport const socialProviders = [\n {\n provider: \"apple\",\n name: \"Apple\",\n icon: AppleIcon\n },\n {\n provider: \"discord\",\n name: \"Discord\",\n icon: DiscordIcon\n },\n {\n provider: \"dropbox\",\n name: \"Dropbox\",\n icon: DropboxIcon\n },\n {\n provider: \"facebook\",\n name: \"Facebook\",\n icon: FacebookIcon\n },\n {\n provider: \"github\",\n name: \"GitHub\",\n icon: GitHubIcon\n },\n {\n provider: \"gitlab\",\n name: \"GitLab\",\n icon: GitLabIcon\n },\n {\n provider: \"google\",\n name: \"Google\",\n icon: GoogleIcon\n },\n {\n provider: \"huggingface\",\n name: \"Hugging Face\",\n icon: HuggingFaceIcon\n },\n {\n provider: \"kick\",\n name: \"Kick\",\n icon: KickIcon\n },\n {\n provider: \"linear\",\n name: \"Linear\",\n icon: LinearIcon\n },\n {\n provider: \"linkedin\",\n name: \"LinkedIn\",\n icon: LinkedInIcon\n },\n {\n provider: \"microsoft\",\n name: \"Microsoft\",\n icon: MicrosoftIcon\n },\n {\n provider: \"notion\",\n name: \"Notion\",\n icon: NotionIcon\n },\n {\n provider: \"reddit\",\n name: \"Reddit\",\n icon: RedditIcon\n },\n {\n provider: \"roblox\",\n name: \"Roblox\",\n icon: RobloxIcon\n },\n {\n provider: \"slack\",\n name: \"Slack\",\n icon: SlackIcon\n },\n {\n provider: \"spotify\",\n name: \"Spotify\",\n icon: SpotifyIcon\n },\n {\n provider: \"tiktok\",\n name: \"TikTok\",\n icon: TikTokIcon\n },\n {\n provider: \"twitch\",\n name: \"Twitch\",\n icon: TwitchIcon\n },\n {\n provider: \"vercel\",\n name: \"Vercel\",\n icon: VercelIcon\n },\n {\n provider: \"vk\",\n name: \"VK\",\n icon: VKIcon\n },\n {\n provider: \"twitter\",\n name: \"X\",\n icon: XIcon\n },\n {\n provider: \"zoom\",\n name: \"Zoom\",\n icon: ZoomIcon\n }\n] as const\n\nexport type Provider = {\n provider: string\n name: string\n icon?: ProviderIcon\n}\n","\"use client\"\n\nimport type { Account } from \"better-auth\"\nimport type { SocialProvider } from \"better-auth/social-providers\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport type { Provider } from \"../../../lib/social-providers\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface ProviderCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n account?: Account | null\n isPending?: boolean\n localization?: Partial<AuthLocalization>\n other?: boolean\n provider: Provider\n refetch?: Refetch\n}\n\nexport function ProviderCell({\n className,\n classNames,\n account,\n localization,\n other,\n provider,\n refetch\n}: ProviderCellProps) {\n const {\n authClient,\n basePath,\n baseURL,\n localization: contextLocalization,\n mutators: { unlinkAccount },\n viewPaths,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const [isLoading, setIsLoading] = useState(false)\n\n const handleLink = async () => {\n setIsLoading(true)\n const callbackURL = `${baseURL}${basePath}/${viewPaths.CALLBACK}?redirectTo=${encodeURIComponent(window.location.pathname)}`\n\n try {\n if (other) {\n await authClient.oauth2.link({\n providerId: provider.provider as SocialProvider,\n callbackURL,\n fetchOptions: { throw: true }\n })\n } else {\n await authClient.linkSocial({\n provider: provider.provider as SocialProvider,\n callbackURL,\n fetchOptions: { throw: true }\n })\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsLoading(false)\n }\n }\n\n const handleUnlink = async () => {\n setIsLoading(true)\n\n try {\n await unlinkAccount({\n accountId: account?.accountId,\n providerId: provider.provider\n })\n\n await refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n return (\n <Card\n className={cn(\n \"flex-row items-center gap-3 px-4 py-3\",\n className,\n classNames?.cell\n )}\n >\n {provider.icon && (\n <provider.icon className={cn(\"size-4\", classNames?.icon)} />\n )}\n\n <div className=\"flex-col\">\n <div className=\"text-sm\">{provider.name}</div>\n\n {account && <AccountInfo account={account} />}\n </div>\n\n <Button\n className={cn(\"relative ms-auto\", classNames?.button)}\n disabled={isLoading}\n size=\"sm\"\n type=\"button\"\n variant={account ? \"outline\" : \"default\"}\n onClick={account ? handleUnlink : handleLink}\n >\n {isLoading && <Loader2 className=\"animate-spin\" />}\n {account ? localization.UNLINK : localization.LINK}\n </Button>\n </Card>\n )\n}\n\nfunction AccountInfo({ account }: { account: { accountId: string } }) {\n const {\n hooks: { useAccountInfo }\n } = useContext(AuthUIContext)\n\n const { data: accountInfo, isPending } = useAccountInfo({\n query: { accountId: account.accountId }\n })\n\n if (isPending) {\n return <Skeleton className=\"my-0.5 h-3 w-28\" />\n }\n\n if (!accountInfo) return null\n\n return (\n <div className=\"text-muted-foreground text-xs\">\n {accountInfo?.user.email}\n </div>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { useContext } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError, getPasswordSchema } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { PasswordValidation } from \"../../../types/password-validation\"\nimport { PasswordInput } from \"../../password-input\"\nimport { CardContent } from \"../../ui/card\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport {\n SettingsCard,\n type SettingsCardClassNames\n} from \"../shared/settings-card\"\nimport { InputFieldSkeleton } from \"../skeletons/input-field-skeleton\"\n\nexport interface ChangePasswordCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n accounts?: { providerId: string }[] | null\n isPending?: boolean\n localization?: AuthLocalization\n skipHook?: boolean\n passwordValidation?: PasswordValidation\n}\n\nexport function ChangePasswordCard({\n className,\n classNames,\n accounts,\n isPending,\n localization,\n skipHook,\n passwordValidation\n}: ChangePasswordCardProps) {\n const {\n authClient,\n basePath,\n baseURL,\n credentials,\n hooks: { useSession, useListAccounts },\n localization: contextLocalization,\n viewPaths,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const confirmPasswordEnabled = credentials?.confirmPassword\n const contextPasswordValidation = credentials?.passwordValidation\n\n localization = { ...contextLocalization, ...localization }\n passwordValidation = { ...contextPasswordValidation, ...passwordValidation }\n\n const { data: sessionData } = useSession()\n\n if (!skipHook) {\n const result = useListAccounts()\n accounts = result.data\n isPending = result.isPending\n }\n\n const formSchema = z\n .object({\n currentPassword: getPasswordSchema(\n passwordValidation,\n localization\n ),\n newPassword: getPasswordSchema(passwordValidation, {\n PASSWORD_REQUIRED: localization.NEW_PASSWORD_REQUIRED,\n PASSWORD_TOO_SHORT: localization.PASSWORD_TOO_SHORT,\n PASSWORD_TOO_LONG: localization.PASSWORD_TOO_LONG,\n INVALID_PASSWORD: localization.INVALID_PASSWORD\n }),\n confirmPassword: confirmPasswordEnabled\n ? getPasswordSchema(passwordValidation, {\n PASSWORD_REQUIRED: localization.CONFIRM_PASSWORD_REQUIRED,\n PASSWORD_TOO_SHORT: localization.PASSWORD_TOO_SHORT,\n PASSWORD_TOO_LONG: localization.PASSWORD_TOO_LONG,\n INVALID_PASSWORD: localization.INVALID_PASSWORD\n })\n : z.string().optional()\n })\n .refine(\n (data) =>\n !confirmPasswordEnabled ||\n data.newPassword === data.confirmPassword,\n {\n message: localization.PASSWORDS_DO_NOT_MATCH,\n path: [\"confirmPassword\"]\n }\n )\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n currentPassword: \"\",\n newPassword: \"\",\n confirmPassword: \"\"\n }\n })\n\n const setPasswordForm = useForm()\n\n const { isSubmitting } = form.formState\n\n const setPassword = async () => {\n if (!sessionData) return\n const email = sessionData?.user.email\n\n try {\n await authClient.requestPasswordReset({\n email,\n redirectTo: `${baseURL}${basePath}/${viewPaths.RESET_PASSWORD}`,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.FORGOT_PASSWORD_EMAIL!\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n const changePassword = async ({\n currentPassword,\n newPassword\n }: z.infer<typeof formSchema>) => {\n try {\n await authClient.changePassword({\n currentPassword,\n newPassword,\n revokeOtherSessions: true,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.CHANGE_PASSWORD_SUCCESS!\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n form.reset()\n }\n\n const credentialsLinked = accounts?.some(\n (acc) => acc.providerId === \"credential\"\n )\n\n if (!isPending && !credentialsLinked) {\n return (\n <Form {...setPasswordForm}>\n <form onSubmit={setPasswordForm.handleSubmit(setPassword)}>\n <SettingsCard\n title={localization.SET_PASSWORD}\n description={localization.SET_PASSWORD_DESCRIPTION}\n actionLabel={localization.SET_PASSWORD}\n isPending={isPending}\n className={className}\n classNames={classNames}\n />\n </form>\n </Form>\n )\n }\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(changePassword)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization.SAVE}\n description={localization.CHANGE_PASSWORD_DESCRIPTION}\n instructions={localization.CHANGE_PASSWORD_INSTRUCTIONS}\n isPending={isPending}\n title={localization.CHANGE_PASSWORD}\n >\n <CardContent\n className={cn(\"grid gap-6\", classNames?.content)}\n >\n {isPending || !accounts ? (\n <>\n <InputFieldSkeleton classNames={classNames} />\n <InputFieldSkeleton classNames={classNames} />\n\n {confirmPasswordEnabled && (\n <InputFieldSkeleton\n classNames={classNames}\n />\n )}\n </>\n ) : (\n <>\n <FormField\n control={form.control}\n name=\"currentPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {localization.CURRENT_PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n className={\n classNames?.input\n }\n autoComplete=\"current-password\"\n placeholder={\n localization.CURRENT_PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"newPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {localization.NEW_PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n className={\n classNames?.input\n }\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n placeholder={\n localization.NEW_PASSWORD_PLACEHOLDER\n }\n enableToggle\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n\n {confirmPasswordEnabled && (\n <FormField\n control={form.control}\n name=\"confirmPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={\n classNames?.label\n }\n >\n {\n localization.CONFIRM_PASSWORD\n }\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n className={\n classNames?.input\n }\n autoComplete=\"new-password\"\n placeholder={\n localization.CONFIRM_PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n enableToggle\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={\n classNames?.error\n }\n />\n </FormItem>\n )}\n />\n )}\n </>\n )}\n </CardContent>\n </SettingsCard>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { EyeIcon, EyeOffIcon } from \"lucide-react\"\nimport { type ComponentProps, useState } from \"react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./ui/button\"\nimport { Input } from \"./ui/input\"\n\nexport function PasswordInput({\n className,\n enableToggle,\n onChange,\n ...props\n}: ComponentProps<typeof Input> & { enableToggle?: boolean }) {\n const [disabled, setDisabled] = useState(true)\n const [isVisible, setIsVisible] = useState(false)\n\n return (\n <div className=\"relative\">\n <Input\n className={cn(enableToggle && \"pr-10\", className)}\n {...props}\n type={isVisible && enableToggle ? \"text\" : \"password\"}\n onChange={(event) => {\n setDisabled(!event.target.value)\n onChange?.(event)\n }}\n />\n\n {enableToggle && (\n <>\n <Button\n className=\"!bg-transparent absolute top-0 right-0\"\n disabled={disabled}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setIsVisible(!isVisible)}\n >\n {isVisible ? <EyeIcon /> : <EyeOffIcon />}\n </Button>\n\n <style>{`\n .hide-password-toggle::-ms-reveal,\n .hide-password-toggle::-ms-clear {\n visibility: hidden;\n pointer-events: none;\n display: none;\n }\n `}</style>\n </>\n )}\n </div>\n )\n}\n","\"use client\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Skeleton } from \"../../ui/skeleton\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport function InputFieldSkeleton({\n classNames\n}: {\n classNames?: SettingsCardClassNames\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <Skeleton className={cn(\"h-4 w-32\", classNames?.skeleton)} />\n <Skeleton className={cn(\"h-9 w-full\", classNames?.skeleton)} />\n </div>\n )\n}\n","\"use client\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { CardContent } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { SettingsCellSkeleton } from \"../skeletons/settings-cell-skeleton\"\nimport { SessionCell } from \"./session-cell\"\n\nexport interface SessionsCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n}\n\nexport function SessionsCard({\n className,\n classNames,\n localization\n}: SessionsCardProps) {\n const {\n hooks: { useListSessions },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessions, isPending, refetch } = useListSessions()\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.SESSIONS_DESCRIPTION}\n isPending={isPending}\n title={localization.SESSIONS}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {isPending ? (\n <SettingsCellSkeleton\n key=\"skeleton\"\n classNames={classNames}\n />\n ) : (\n sessions?.map((session) => (\n <SessionCell\n key={session.id}\n classNames={classNames}\n localization={localization}\n session={session}\n refetch={refetch}\n />\n ))\n )}\n </CardContent>\n </SettingsCard>\n )\n}\n","\"use client\"\n\nimport type { Session } from \"better-auth\"\nimport { LaptopIcon, Loader2, SmartphoneIcon } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\nimport { UAParser } from \"ua-parser-js\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface SessionCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n session: Session\n refetch?: Refetch\n}\n\nexport function SessionCell({\n className,\n classNames,\n localization,\n session,\n refetch\n}: SessionCellProps) {\n const {\n basePath,\n hooks: { useSession },\n localization: contextLocalization,\n mutators: { revokeSession },\n viewPaths,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData } = useSession()\n const isCurrentSession = session.id === sessionData?.session?.id\n\n const [isLoading, setIsLoading] = useState(false)\n\n const handleRevoke = async () => {\n setIsLoading(true)\n\n if (isCurrentSession) {\n navigate(`${basePath}/${viewPaths.SIGN_OUT}`)\n return\n }\n\n try {\n await revokeSession({ token: session.token })\n refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsLoading(false)\n }\n }\n\n const parser = UAParser(session.userAgent as string)\n const isMobile = parser.device.type === \"mobile\"\n\n return (\n <Card\n className={cn(\n \"flex-row items-center gap-3 px-4 py-3\",\n className,\n classNames?.cell\n )}\n >\n {isMobile ? (\n <SmartphoneIcon className={cn(\"size-4\", classNames?.icon)} />\n ) : (\n <LaptopIcon className={cn(\"size-4\", classNames?.icon)} />\n )}\n\n <div className=\"flex flex-col\">\n <span className=\"font-semibold text-sm\">\n {isCurrentSession\n ? localization.CURRENT_SESSION\n : session?.ipAddress}\n </span>\n\n <span className=\"text-muted-foreground text-xs\">\n {session.userAgent?.includes(\"tauri-plugin-http\")\n ? localization.APP\n : parser.os.name && parser.browser.name\n ? `${parser.os.name}, ${parser.browser.name}`\n : parser.os.name ||\n parser.browser.name ||\n session.userAgent ||\n localization.UNKNOWN}\n </span>\n </div>\n\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLoading}\n size=\"sm\"\n variant=\"outline\"\n onClick={handleRevoke}\n >\n {isLoading && <Loader2 className=\"animate-spin\" />}\n {isCurrentSession ? localization.SIGN_OUT : localization.REVOKE}\n </Button>\n </Card>\n )\n}\n","\"use client\"\n\nimport { useContext, useState } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { User } from \"../../../types/auth-client\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { TwoFactorPasswordDialog } from \"./two-factor-password-dialog\"\n\nexport interface TwoFactorCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n}\n\nexport function TwoFactorCard({\n className,\n classNames,\n localization\n}: TwoFactorCardProps) {\n const {\n localization: contextLocalization,\n hooks: { useSession }\n } = useContext(AuthUIContext)\n\n const [showPasswordDialog, setShowPasswordDialog] = useState(false)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData, isPending } = useSession()\n const isTwoFactorEnabled = (sessionData?.user as User)?.twoFactorEnabled\n\n return (\n <div>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={\n isTwoFactorEnabled\n ? localization.DISABLE_TWO_FACTOR\n : localization.ENABLE_TWO_FACTOR\n }\n description={localization.TWO_FACTOR_CARD_DESCRIPTION}\n instructions={\n isTwoFactorEnabled\n ? localization.TWO_FACTOR_DISABLE_INSTRUCTIONS\n : localization.TWO_FACTOR_ENABLE_INSTRUCTIONS\n }\n isPending={isPending}\n title={localization.TWO_FACTOR}\n action={() => setShowPasswordDialog(true)}\n />\n\n <TwoFactorPasswordDialog\n classNames={classNames}\n open={showPasswordDialog}\n onOpenChange={setShowPasswordDialog}\n isTwoFactorEnabled={!!isTwoFactorEnabled}\n />\n </div>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport { PasswordInput } from \"../../password-input\"\nimport { Button } from \"../../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { BackupCodesDialog } from \"./backup-codes-dialog\"\n\ninterface TwoFactorPasswordDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n isTwoFactorEnabled: boolean\n}\n\nexport function TwoFactorPasswordDialog({\n classNames,\n onOpenChange,\n isTwoFactorEnabled,\n ...props\n}: TwoFactorPasswordDialogProps) {\n const {\n localization,\n authClient,\n basePath,\n viewPaths,\n navigate,\n toast,\n twoFactor,\n localizeErrors\n } = useContext(AuthUIContext)\n const [showBackupCodesDialog, setShowBackupCodesDialog] = useState(false)\n const [backupCodes, setBackupCodes] = useState<string[]>([])\n const [totpURI, setTotpURI] = useState<string | null>(null)\n\n const formSchema = z.object({\n password: z.string().min(1, { message: localization.PASSWORD_REQUIRED })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\"\n }\n })\n\n const { isSubmitting } = form.formState\n\n async function enableTwoFactor({ password }: z.infer<typeof formSchema>) {\n try {\n const response = await authClient.twoFactor.enable({\n password,\n fetchOptions: { throw: true }\n })\n\n onOpenChange?.(false)\n setBackupCodes(response.backupCodes)\n\n if (twoFactor?.includes(\"totp\")) {\n setTotpURI(response.totpURI)\n }\n\n setTimeout(() => {\n setShowBackupCodesDialog(true)\n }, 250)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n async function disableTwoFactor({ password }: z.infer<typeof formSchema>) {\n try {\n await authClient.twoFactor.disable({\n password,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.TWO_FACTOR_DISABLED\n })\n\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <>\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={cn(\"sm:max-w-md\", classNames?.dialog)}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle className={classNames?.title}>\n {localization.TWO_FACTOR}\n </DialogTitle>\n\n <DialogDescription className={classNames?.description}>\n {isTwoFactorEnabled\n ? localization.TWO_FACTOR_DISABLE_INSTRUCTIONS\n : localization.TWO_FACTOR_ENABLE_INSTRUCTIONS}\n </DialogDescription>\n </DialogHeader>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(\n isTwoFactorEnabled\n ? disableTwoFactor\n : enableTwoFactor\n )}\n className=\"grid gap-4\"\n >\n <FormField\n control={form.control}\n name=\"password\"\n render={({ field }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {localization.PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n className={classNames?.input}\n placeholder={\n localization.PASSWORD_PLACEHOLDER\n }\n autoComplete=\"current-password\"\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n\n <DialogFooter\n className={classNames?.dialog?.footer}\n >\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n {isTwoFactorEnabled\n ? localization.DISABLE_TWO_FACTOR\n : localization.ENABLE_TWO_FACTOR}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n\n <BackupCodesDialog\n classNames={classNames}\n open={showBackupCodesDialog}\n onOpenChange={(open) => {\n setShowBackupCodesDialog(open)\n\n if (!open) {\n const url = `${basePath}/${viewPaths.TWO_FACTOR}`\n navigate(\n twoFactor?.includes(\"totp\") && totpURI\n ? `${url}?totpURI=${totpURI}`\n : url\n )\n }\n }}\n backupCodes={backupCodes}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport { Button } from \"../../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../../ui/dialog\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\ninterface BackupCodesDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n backupCodes: string[]\n}\n\nexport function BackupCodesDialog({\n classNames,\n backupCodes,\n onOpenChange,\n ...props\n}: BackupCodesDialogProps) {\n const { localization } = useContext(AuthUIContext)\n const [copied, setCopied] = useState(false)\n\n const handleCopy = () => {\n const codeText = backupCodes.join(\"\\n\")\n navigator.clipboard.writeText(codeText)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={classNames?.dialog?.content}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.BACKUP_CODES}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.BACKUP_CODES_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"grid grid-cols-2 gap-2\">\n {backupCodes.map((code, index) => (\n <div\n key={index}\n className=\"rounded-md bg-muted p-2 text-center font-mono text-sm\"\n >\n {code}\n </div>\n ))}\n </div>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCopy}\n disabled={copied}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {copied ? (\n <>\n <CheckIcon className={classNames?.icon} />\n {localization.COPIED_TO_CLIPBOARD}\n </>\n ) : (\n <>\n <CopyIcon className={classNames?.icon} />\n {localization.COPY_ALL_CODES}\n </>\n )}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {localization.CONTINUE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { CardContent } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\nimport { SettingsCard } from \"../shared/settings-card\"\nimport { SettingsCellSkeleton } from \"../skeletons/settings-cell-skeleton\"\nimport { UserTeamCell } from \"./user-team-cell\"\n\nexport interface UserTeamsCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n}\n\nexport function UserTeamsCard({\n className,\n classNames,\n localization\n}: UserTeamsCardProps) {\n const {\n hooks: { useListUserTeams },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: teams, isPending, refetch } = useListUserTeams()\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.USER_TEAMS_DESCRIPTION}\n isPending={isPending}\n title={localization.TEAMS}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {isPending ? (\n <SettingsCellSkeleton\n key=\"skeleton\"\n classNames={classNames}\n />\n ) : teams && teams.length > 0 ? (\n teams\n .sort(\n (a, b) =>\n new Date(a.createdAt).getTime() -\n new Date(b.createdAt).getTime()\n )\n .map((team) => (\n <UserTeamCell\n classNames={classNames}\n key={team.id}\n localization={localization}\n refetch={refetch}\n team={team}\n />\n ))\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n {localization.NO_TEAMS_FOUND}\n </p>\n )}\n </CardContent>\n </SettingsCard>\n )\n}\n","\"use client\"\n\nimport type { Team } from \"better-auth/plugins\"\nimport { Loader2, UsersIcon } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { authClient } from \"../../../types/auth-client\"\nimport type { Refetch } from \"../../../types/refetch\"\nimport { Button } from \"../../ui/button\"\nimport { Card } from \"../../ui/card\"\nimport type { SettingsCardClassNames } from \"../shared/settings-card\"\n\nexport interface UserTeamCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n team: Team\n refetch?: Refetch\n}\n\nexport function UserTeamCell({\n className,\n classNames,\n team,\n localization,\n refetch\n}: UserTeamCellProps) {\n const {\n hooks: { useSession },\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { data: sessionData, refetch: refetchSession } = useSession()\n const isCurrentTeam = team.id === (sessionData?.session as any)?.activeTeamId\n\n const [isUpdating, setIsUpdating] = useState(false)\n\n const handleSetActiveTeam = async () => {\n try {\n setIsUpdating(true)\n await authClient.organization.setActiveTeam({\n teamId: team.id,\n fetchOptions: { throw: true }\n })\n toast({\n variant: \"success\",\n message: localization.UPDATE_TEAM_SUCCESS\n })\n await refetchSession?.()\n await refetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n } finally {\n setIsUpdating(false)\n }\n }\n\n return (\n <Card\n className={cn(\n \"flex-row items-center gap-3 px-4 py-3\",\n className,\n classNames?.cell\n )}\n >\n <UsersIcon\n className={cn(\"size-5 flex-shrink-0\", classNames?.icon)}\n />\n\n <div className=\"flex flex-col truncate\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-semibold text-sm\">\n {team.name}\n </span>\n </div>\n\n <div className=\"truncate text-muted-foreground text-xs\">\n {localization?.TEAM}\n </div>\n </div>\n\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isCurrentTeam || isUpdating}\n size=\"sm\"\n variant=\"outline\"\n onClick={handleSetActiveTeam}\n >\n {isUpdating && <Loader2 className=\"animate-spin\" />}\n {isCurrentTeam\n ? localization.TEAM_ACTIVE\n : localization.TEAM_SET_ACTIVE}\n </Button>\n </Card>\n )\n}\n","import { passkeyClient } from \"@better-auth/passkey/client\"\nimport {\n anonymousClient,\n apiKeyClient,\n emailOTPClient,\n genericOAuthClient,\n magicLinkClient,\n multiSessionClient,\n oneTapClient,\n organizationClient,\n twoFactorClient,\n usernameClient\n} from \"better-auth/client/plugins\"\nimport { createAuthClient } from \"better-auth/react\"\n\nexport const authClient = createAuthClient({\n plugins: [\n apiKeyClient(),\n multiSessionClient(),\n passkeyClient(),\n oneTapClient({\n clientId: \"\"\n }),\n genericOAuthClient(),\n anonymousClient(),\n usernameClient(),\n magicLinkClient(),\n emailOTPClient(),\n twoFactorClient(),\n organizationClient({\n teams: {\n enabled: true\n }\n })\n ]\n})\n\nexport type AuthClient = typeof authClient\n\nexport type Session = AuthClient[\"$Infer\"][\"Session\"][\"session\"]\nexport type User = AuthClient[\"$Infer\"][\"Session\"][\"user\"]\n","//#region src/env/env-impl.ts\nconst _envShim = Object.create(null);\nconst _getEnv = (useShim) => globalThis.process?.env || globalThis.Deno?.env.toObject() || globalThis.__env__ || (useShim ? _envShim : globalThis);\nconst env = new Proxy(_envShim, {\n\tget(_, prop) {\n\t\treturn _getEnv()[prop] ?? _envShim[prop];\n\t},\n\thas(_, prop) {\n\t\treturn prop in _getEnv() || prop in _envShim;\n\t},\n\tset(_, prop, value) {\n\t\tconst env$1 = _getEnv(true);\n\t\tenv$1[prop] = value;\n\t\treturn true;\n\t},\n\tdeleteProperty(_, prop) {\n\t\tif (!prop) return false;\n\t\tconst env$1 = _getEnv(true);\n\t\tdelete env$1[prop];\n\t\treturn true;\n\t},\n\townKeys() {\n\t\tconst env$1 = _getEnv(true);\n\t\treturn Object.keys(env$1);\n\t}\n});\nfunction toBoolean(val) {\n\treturn val ? val !== \"false\" : false;\n}\nconst nodeENV = typeof process !== \"undefined\" && process.env && process.env.NODE_ENV || \"\";\n/** Detect if `NODE_ENV` environment variable is `production` */\nconst isProduction = nodeENV === \"production\";\n/** Detect if `NODE_ENV` environment variable is `dev` or `development` */\nconst isDevelopment = () => nodeENV === \"dev\" || nodeENV === \"development\";\n/** Detect if `NODE_ENV` environment variable is `test` */\nconst isTest = () => nodeENV === \"test\" || toBoolean(env.TEST);\n/**\n* Get environment variable with fallback\n*/\nfunction getEnvVar(key, fallback) {\n\tif (typeof process !== \"undefined\" && process.env) return process.env[key] ?? fallback;\n\tif (typeof Deno !== \"undefined\") return Deno.env.get(key) ?? fallback;\n\tif (typeof Bun !== \"undefined\") return Bun.env[key] ?? fallback;\n\treturn fallback;\n}\n/**\n* Get boolean environment variable\n*/\nfunction getBooleanEnvVar(key, fallback = true) {\n\tconst value = getEnvVar(key);\n\tif (!value) return fallback;\n\treturn value !== \"0\" && value.toLowerCase() !== \"false\" && value !== \"\";\n}\n/**\n* Common environment variables used in Better Auth\n*/\nconst ENV = Object.freeze({\n\tget BETTER_AUTH_SECRET() {\n\t\treturn getEnvVar(\"BETTER_AUTH_SECRET\");\n\t},\n\tget AUTH_SECRET() {\n\t\treturn getEnvVar(\"AUTH_SECRET\");\n\t},\n\tget BETTER_AUTH_TELEMETRY() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ID() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY_ID\");\n\t},\n\tget NODE_ENV() {\n\t\treturn getEnvVar(\"NODE_ENV\", \"development\");\n\t},\n\tget PACKAGE_VERSION() {\n\t\treturn getEnvVar(\"PACKAGE_VERSION\", \"0.0.0\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ENDPOINT() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY_ENDPOINT\", \"https://telemetry.better-auth.com/v1/track\");\n\t}\n});\n\n//#endregion\n//#region src/env/color-depth.ts\nconst COLORS_2 = 1;\nconst COLORS_16 = 4;\nconst COLORS_256 = 8;\nconst COLORS_16m = 24;\nconst TERM_ENVS = {\n\teterm: COLORS_16,\n\tcons25: COLORS_16,\n\tconsole: COLORS_16,\n\tcygwin: COLORS_16,\n\tdtterm: COLORS_16,\n\tgnome: COLORS_16,\n\thurd: COLORS_16,\n\tjfbterm: COLORS_16,\n\tkonsole: COLORS_16,\n\tkterm: COLORS_16,\n\tmlterm: COLORS_16,\n\tmosh: COLORS_16m,\n\tputty: COLORS_16,\n\tst: COLORS_16,\n\t\"rxvt-unicode-24bit\": COLORS_16m,\n\tterminator: COLORS_16m,\n\t\"xterm-kitty\": COLORS_16m\n};\nconst CI_ENVS_MAP = new Map(Object.entries({\n\tAPPVEYOR: COLORS_256,\n\tBUILDKITE: COLORS_256,\n\tCIRCLECI: COLORS_16m,\n\tDRONE: COLORS_256,\n\tGITEA_ACTIONS: COLORS_16m,\n\tGITHUB_ACTIONS: COLORS_16m,\n\tGITLAB_CI: COLORS_256,\n\tTRAVIS: COLORS_256\n}));\nconst TERM_ENVS_REG_EXP = [\n\t/ansi/,\n\t/color/,\n\t/linux/,\n\t/direct/,\n\t/^con[0-9]*x[0-9]/,\n\t/^rxvt/,\n\t/^screen/,\n\t/^xterm/,\n\t/^vt100/,\n\t/^vt220/\n];\nfunction getColorDepth() {\n\tif (getEnvVar(\"FORCE_COLOR\") !== void 0) switch (getEnvVar(\"FORCE_COLOR\")) {\n\t\tcase \"\":\n\t\tcase \"1\":\n\t\tcase \"true\": return COLORS_16;\n\t\tcase \"2\": return COLORS_256;\n\t\tcase \"3\": return COLORS_16m;\n\t\tdefault: return COLORS_2;\n\t}\n\tif (getEnvVar(\"NODE_DISABLE_COLORS\") !== void 0 && getEnvVar(\"NODE_DISABLE_COLORS\") !== \"\" || getEnvVar(\"NO_COLOR\") !== void 0 && getEnvVar(\"NO_COLOR\") !== \"\" || getEnvVar(\"TERM\") === \"dumb\") return COLORS_2;\n\tif (getEnvVar(\"TMUX\")) return COLORS_16m;\n\tif (\"TF_BUILD\" in env && \"AGENT_NAME\" in env) return COLORS_16;\n\tif (\"CI\" in env) {\n\t\tfor (const { 0: envName, 1: colors } of CI_ENVS_MAP) if (envName in env) return colors;\n\t\tif (getEnvVar(\"CI_NAME\") === \"codeship\") return COLORS_256;\n\t\treturn COLORS_2;\n\t}\n\tif (\"TEAMCITY_VERSION\" in env) return /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.exec(getEnvVar(\"TEAMCITY_VERSION\")) !== null ? COLORS_16 : COLORS_2;\n\tswitch (getEnvVar(\"TERM_PROGRAM\")) {\n\t\tcase \"iTerm.app\":\n\t\t\tif (!getEnvVar(\"TERM_PROGRAM_VERSION\") || /^[0-2]\\./.exec(getEnvVar(\"TERM_PROGRAM_VERSION\")) !== null) return COLORS_256;\n\t\t\treturn COLORS_16m;\n\t\tcase \"HyperTerm\":\n\t\tcase \"MacTerm\": return COLORS_16m;\n\t\tcase \"Apple_Terminal\": return COLORS_256;\n\t}\n\tif (getEnvVar(\"COLORTERM\") === \"truecolor\" || getEnvVar(\"COLORTERM\") === \"24bit\") return COLORS_16m;\n\tif (getEnvVar(\"TERM\")) {\n\t\tif (/truecolor/.exec(getEnvVar(\"TERM\")) !== null) return COLORS_16m;\n\t\tif (/^xterm-256/.exec(getEnvVar(\"TERM\")) !== null) return COLORS_256;\n\t\tconst termEnv = getEnvVar(\"TERM\").toLowerCase();\n\t\tif (TERM_ENVS[termEnv]) return TERM_ENVS[termEnv];\n\t\tif (TERM_ENVS_REG_EXP.some((term) => term.exec(termEnv) !== null)) return COLORS_16;\n\t}\n\tif (getEnvVar(\"COLORTERM\")) return COLORS_16;\n\treturn COLORS_2;\n}\n\n//#endregion\n//#region src/env/logger.ts\nconst TTY_COLORS = {\n\treset: \"\\x1B[0m\",\n\tbright: \"\\x1B[1m\",\n\tdim: \"\\x1B[2m\",\n\tundim: \"\\x1B[22m\",\n\tunderscore: \"\\x1B[4m\",\n\tblink: \"\\x1B[5m\",\n\treverse: \"\\x1B[7m\",\n\thidden: \"\\x1B[8m\",\n\tfg: {\n\t\tblack: \"\\x1B[30m\",\n\t\tred: \"\\x1B[31m\",\n\t\tgreen: \"\\x1B[32m\",\n\t\tyellow: \"\\x1B[33m\",\n\t\tblue: \"\\x1B[34m\",\n\t\tmagenta: \"\\x1B[35m\",\n\t\tcyan: \"\\x1B[36m\",\n\t\twhite: \"\\x1B[37m\"\n\t},\n\tbg: {\n\t\tblack: \"\\x1B[40m\",\n\t\tred: \"\\x1B[41m\",\n\t\tgreen: \"\\x1B[42m\",\n\t\tyellow: \"\\x1B[43m\",\n\t\tblue: \"\\x1B[44m\",\n\t\tmagenta: \"\\x1B[45m\",\n\t\tcyan: \"\\x1B[46m\",\n\t\twhite: \"\\x1B[47m\"\n\t}\n};\nconst levels = [\n\t\"debug\",\n\t\"info\",\n\t\"success\",\n\t\"warn\",\n\t\"error\"\n];\nfunction shouldPublishLog(currentLogLevel, logLevel) {\n\treturn levels.indexOf(logLevel) >= levels.indexOf(currentLogLevel);\n}\nconst levelColors = {\n\tinfo: TTY_COLORS.fg.blue,\n\tsuccess: TTY_COLORS.fg.green,\n\twarn: TTY_COLORS.fg.yellow,\n\terror: TTY_COLORS.fg.red,\n\tdebug: TTY_COLORS.fg.magenta\n};\nconst formatMessage = (level, message, colorsEnabled) => {\n\tconst timestamp = (/* @__PURE__ */ new Date()).toISOString();\n\tif (colorsEnabled) return `${TTY_COLORS.dim}${timestamp}${TTY_COLORS.reset} ${levelColors[level]}${level.toUpperCase()}${TTY_COLORS.reset} ${TTY_COLORS.bright}[Better Auth]:${TTY_COLORS.reset} ${message}`;\n\treturn `${timestamp} ${level.toUpperCase()} [Better Auth]: ${message}`;\n};\nconst createLogger = (options) => {\n\tconst enabled = options?.disabled !== true;\n\tconst logLevel = options?.level ?? \"error\";\n\tconst colorsEnabled = options?.disableColors !== void 0 ? !options.disableColors : getColorDepth() !== 1;\n\tconst LogFunc = (level, message, args = []) => {\n\t\tif (!enabled || !shouldPublishLog(logLevel, level)) return;\n\t\tconst formattedMessage = formatMessage(level, message, colorsEnabled);\n\t\tif (!options || typeof options.log !== \"function\") {\n\t\t\tif (level === \"error\") console.error(formattedMessage, ...args);\n\t\t\telse if (level === \"warn\") console.warn(formattedMessage, ...args);\n\t\t\telse console.log(formattedMessage, ...args);\n\t\t\treturn;\n\t\t}\n\t\toptions.log(level === \"success\" ? \"info\" : level, message, ...args);\n\t};\n\treturn {\n\t\t...Object.fromEntries(levels.map((level) => [level, (...[message, ...args]) => LogFunc(level, message, args)])),\n\t\tget level() {\n\t\t\treturn logLevel;\n\t\t}\n\t};\n};\nconst logger = createLogger();\n\n//#endregion\nexport { shouldPublishLog as a, env as c, isDevelopment as d, isProduction as f, logger as i, getBooleanEnvVar as l, nodeENV as m, createLogger as n, getColorDepth as o, isTest as p, levels as r, ENV as s, TTY_COLORS as t, getEnvVar as u };","import { i as logger } from \"./env-DbssmzoK.mjs\";\nimport { createRandomStringGenerator } from \"@better-auth/utils/random\";\n\n//#region src/utils/error-codes.ts\nfunction defineErrorCodes(codes) {\n\treturn codes;\n}\n\n//#endregion\n//#region src/utils/id.ts\nconst generateId = (size) => {\n\treturn createRandomStringGenerator(\"a-z\", \"A-Z\", \"0-9\")(size || 32);\n};\n\n//#endregion\n//#region src/utils/json.ts\nfunction safeJSONParse(data) {\n\tfunction reviver(_, value) {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$/.test(value)) {\n\t\t\t\tconst date = new Date(value);\n\t\t\t\tif (!isNaN(date.getTime())) return date;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\ttry {\n\t\tif (typeof data !== \"string\") return data;\n\t\treturn JSON.parse(data, reviver);\n\t} catch (e) {\n\t\tlogger.error(\"Error parsing JSON\", { error: e });\n\t\treturn null;\n\t}\n}\n\n//#endregion\n//#region src/utils/string.ts\nfunction capitalizeFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n//#endregion\nexport { defineErrorCodes as i, safeJSONParse as n, generateId as r, capitalizeFirstLetter as t };","import { i as defineErrorCodes } from \"./utils-NloIXYE0.mjs\";\n\n//#region src/error/codes.ts\nconst BASE_ERROR_CODES = defineErrorCodes({\n\tUSER_NOT_FOUND: \"User not found\",\n\tFAILED_TO_CREATE_USER: \"Failed to create user\",\n\tFAILED_TO_CREATE_SESSION: \"Failed to create session\",\n\tFAILED_TO_UPDATE_USER: \"Failed to update user\",\n\tFAILED_TO_GET_SESSION: \"Failed to get session\",\n\tINVALID_PASSWORD: \"Invalid password\",\n\tINVALID_EMAIL: \"Invalid email\",\n\tINVALID_EMAIL_OR_PASSWORD: \"Invalid email or password\",\n\tSOCIAL_ACCOUNT_ALREADY_LINKED: \"Social account already linked\",\n\tPROVIDER_NOT_FOUND: \"Provider not found\",\n\tINVALID_TOKEN: \"Invalid token\",\n\tID_TOKEN_NOT_SUPPORTED: \"id_token not supported\",\n\tFAILED_TO_GET_USER_INFO: \"Failed to get user info\",\n\tUSER_EMAIL_NOT_FOUND: \"User email not found\",\n\tEMAIL_NOT_VERIFIED: \"Email not verified\",\n\tPASSWORD_TOO_SHORT: \"Password too short\",\n\tPASSWORD_TOO_LONG: \"Password too long\",\n\tUSER_ALREADY_EXISTS: \"User already exists.\",\n\tUSER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: \"User already exists. Use another email.\",\n\tEMAIL_CAN_NOT_BE_UPDATED: \"Email can not be updated\",\n\tCREDENTIAL_ACCOUNT_NOT_FOUND: \"Credential account not found\",\n\tSESSION_EXPIRED: \"Session expired. Re-authenticate to perform this action.\",\n\tFAILED_TO_UNLINK_LAST_ACCOUNT: \"You can't unlink your last account\",\n\tACCOUNT_NOT_FOUND: \"Account not found\",\n\tUSER_ALREADY_HAS_PASSWORD: \"User already has a password. Provide that to delete the account.\",\n\tCROSS_SITE_NAVIGATION_LOGIN_BLOCKED: \"Cross-site navigation login blocked. This request appears to be a CSRF attack.\",\n\tVERIFICATION_EMAIL_NOT_ENABLED: \"Verification email isn't enabled\",\n\tEMAIL_ALREADY_VERIFIED: \"Email is already verified\",\n\tEMAIL_MISMATCH: \"Email mismatch\",\n\tSESSION_NOT_FRESH: \"Session is not fresh\",\n\tLINKED_ACCOUNT_ALREADY_EXISTS: \"Linked account already exists\",\n\tINVALID_ORIGIN: \"Invalid origin\",\n\tINVALID_CALLBACK_URL: \"Invalid callbackURL\",\n\tINVALID_REDIRECT_URL: \"Invalid redirectURL\",\n\tINVALID_ERROR_CALLBACK_URL: \"Invalid errorCallbackURL\",\n\tINVALID_NEW_USER_CALLBACK_URL: \"Invalid newUserCallbackURL\",\n\tMISSING_OR_NULL_ORIGIN: \"Missing or null Origin\",\n\tCALLBACK_URL_REQUIRED: \"callbackURL is required\",\n\tFAILED_TO_CREATE_VERIFICATION: \"Unable to create verification\",\n\tFIELD_NOT_ALLOWED: \"Field not allowed to be set\",\n\tASYNC_VALIDATION_NOT_SUPPORTED: \"Async validation is not supported\",\n\tVALIDATION_ERROR: \"Validation Error\",\n\tMISSING_FIELD: \"Field is required\"\n});\n\n//#endregion\n//#region src/error/index.ts\nvar BetterAuthError = class extends Error {\n\tconstructor(message, cause) {\n\t\tsuper(message);\n\t\tthis.name = \"BetterAuthError\";\n\t\tthis.message = message;\n\t\tthis.cause = cause;\n\t\tthis.stack = \"\";\n\t}\n};\n\n//#endregion\nexport { BASE_ERROR_CODES as n, BetterAuthError as t };","import { BetterAuthError } from \"@better-auth/core/error\";\nimport type { Statements, Subset } from \"./types\";\n\nexport type AuthorizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never | undefined };\n\nexport function role<TStatements extends Statements>(statements: TStatements) {\n\treturn {\n\t\tauthorize<K extends keyof TStatements>(\n\t\t\trequest: {\n\t\t\t\t[key in K]?:\n\t\t\t\t\t| TStatements[key]\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tactions: TStatements[key];\n\t\t\t\t\t\t\tconnector: \"OR\" | \"AND\";\n\t\t\t\t\t };\n\t\t\t},\n\t\t\tconnector: \"OR\" | \"AND\" = \"AND\",\n\t\t): AuthorizeResponse {\n\t\t\tlet success = false;\n\t\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\t\trequest,\n\t\t\t)) {\n\t\t\t\tconst allowedActions = statements[requestedResource];\n\t\t\t\tif (!allowedActions) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(requestedActions)) {\n\t\t\t\t\tsuccess = (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof requestedActions === \"object\") {\n\t\t\t\t\t\tconst actions = requestedActions as {\n\t\t\t\t\t\t\tactions: string[];\n\t\t\t\t\t\t\tconnector: \"OR\" | \"AND\";\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (actions.connector === \"OR\") {\n\t\t\t\t\t\t\tsuccess = actions.actions.some((requestedAction) =>\n\t\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsuccess = actions.actions.every((requestedAction) =>\n\t\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BetterAuthError(\"Invalid access control request\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (success && connector === \"OR\") {\n\t\t\t\t\treturn { success };\n\t\t\t\t}\n\t\t\t\tif (!success && connector === \"AND\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (success) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Not authorized\",\n\t\t\t};\n\t\t},\n\t\tstatements,\n\t};\n}\n\nexport function createAccessControl<const TStatements extends Statements>(\n\ts: TStatements,\n) {\n\treturn {\n\t\tnewRole<K extends keyof TStatements>(statements: Subset<K, TStatements>) {\n\t\t\treturn role<Subset<K, TStatements>>(statements);\n\t\t},\n\t\tstatements: s,\n\t};\n}\n","import { createAccessControl } from \"../../access\";\n\nexport const defaultStatements = {\n\tuser: [\n\t\t\"create\",\n\t\t\"list\",\n\t\t\"set-role\",\n\t\t\"ban\",\n\t\t\"impersonate\",\n\t\t\"delete\",\n\t\t\"set-password\",\n\t\t\"get\",\n\t\t\"update\",\n\t],\n\tsession: [\"list\", \"revoke\", \"delete\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\tuser: [\n\t\t\"create\",\n\t\t\"list\",\n\t\t\"set-role\",\n\t\t\"ban\",\n\t\t\"impersonate\",\n\t\t\"delete\",\n\t\t\"set-password\",\n\t\t\"get\",\n\t\t\"update\",\n\t],\n\tsession: [\"list\", \"revoke\", \"delete\"],\n});\n\nexport const userAc = defaultAc.newRole({\n\tuser: [],\n\tsession: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\tuser: userAc,\n};\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { anonymous } from \".\";\n\nexport const anonymousClient = () => {\n\treturn {\n\t\tid: \"anonymous\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof anonymous>,\n\t\tpathMethods: {\n\t\t\t\"/sign-in/anonymous\": \"POST\",\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/sign-in/anonymous\",\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport type * from \"./schema\";\nexport type * from \"./types\";\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { apiKey } from \".\";\n\nexport const apiKeyClient = () => {\n\treturn {\n\t\tid: \"api-key\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof apiKey>,\n\t\tpathMethods: {\n\t\t\t\"/api-key/create\": \"POST\",\n\t\t\t\"/api-key/delete\": \"POST\",\n\t\t\t\"/api-key/delete-all-expired-api-keys\": \"POST\",\n\t\t},\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport type ApiKeyClientPlugin = ReturnType<typeof apiKeyClient>;\n\nexport type * from \"./types\";\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { emailOTP } from \".\";\n\nexport const emailOTPClient = () => {\n\treturn {\n\t\tid: \"email-otp\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof emailOTP>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/email-otp/verify-email\" || path === \"/sign-in/email-otp\",\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { genericOAuth } from \".\";\n\nexport const genericOAuthClient = () => {\n\treturn {\n\t\tid: \"generic-oauth-client\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof genericOAuth>,\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport type {\n\tBaseOAuthProviderOptions,\n\tGenericOAuthConfig,\n\tGenericOAuthOptions,\n} from \"./index\";\nexport type * from \"./providers\";\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { magicLink } from \".\";\n\nexport const magicLinkClient = () => {\n\treturn {\n\t\tid: \"magic-link\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof magicLink>,\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { multiSession } from \".\";\n\nexport const multiSessionClient = () => {\n\treturn {\n\t\tid: \"multi-session\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof multiSession>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path === \"/multi-session/set-active\";\n\t\t\t\t},\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport type { MultiSessionConfig } from \"./index\";\n","import type {\n\tBetterAuthClientPlugin,\n\tClientFetchOption,\n} from \"@better-auth/core\";\n\ndeclare global {\n\tinterface Window {\n\t\tgoogle?:\n\t\t\t| {\n\t\t\t\t\taccounts: {\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\tinitialize: (config: any) => void;\n\t\t\t\t\t\t\tprompt: (callback?: (notification: any) => void) => void;\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t }\n\t\t\t| undefined;\n\t\tgoogleScriptInitialized?: boolean | undefined;\n\t}\n}\n\nexport interface GoogleOneTapOptions {\n\t/**\n\t * Google client ID\n\t */\n\tclientId: string;\n\t/**\n\t * Auto select the account if the user is already signed in\n\t */\n\tautoSelect?: boolean | undefined;\n\t/**\n\t * Cancel the flow when the user taps outside the prompt\n\t */\n\tcancelOnTapOutside?: boolean | undefined;\n\t/**\n\t * The mode to use for the Google One Tap flow\n\t *\n\t * popup: Use a popup window\n\t * redirect: Redirect the user to the Google One Tap flow\n\t *\n\t * @default \"popup\"\n\t */\n\tuxMode?: (\"popup\" | \"redirect\") | undefined;\n\t/**\n\t * The context to use for the Google One Tap flow.\n\t *\n\t * @see {@link https://developers.google.com/identity/gsi/web/reference/js-reference}\n\t * @default \"signin\"\n\t */\n\tcontext?: (\"signin\" | \"signup\" | \"use\") | undefined;\n\t/**\n\t * Additional configuration options to pass to the Google One Tap API.\n\t */\n\tadditionalOptions?: Record<string, any> | undefined;\n\t/**\n\t * Configuration options for the prompt and exponential backoff behavior.\n\t */\n\tpromptOptions?:\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * Base delay (in milliseconds) for exponential backoff.\n\t\t\t\t * @default 1000\n\t\t\t\t */\n\t\t\t\tbaseDelay?: number;\n\t\t\t\t/**\n\t\t\t\t * Maximum number of prompt attempts before calling onPromptNotification.\n\t\t\t\t * @default 5\n\t\t\t\t */\n\t\t\t\tmaxAttempts?: number;\n\t\t\t\t/**\n\t\t\t\t * Whether to support FedCM (Federated Credential Management) support.\n\t\t\t\t *\n\t\t\t\t * @see {@link https://developer.chrome.com/docs/identity/fedcm/overview}\n\t\t\t\t * @default true\n\t\t\t\t */\n\t\t\t\tfedCM?: boolean | undefined;\n\t\t }\n\t\t| undefined;\n}\n\nexport interface GoogleOneTapActionOptions\n\textends Omit<GoogleOneTapOptions, \"clientId\" | \"promptOptions\"> {\n\tfetchOptions?: ClientFetchOption | undefined;\n\t/**\n\t * Callback URL.\n\t */\n\tcallbackURL?: string | undefined;\n\t/**\n\t * Optional callback that receives the prompt notification if (or when) the prompt is dismissed or skipped.\n\t * This lets you render an alternative UI (e.g. a Google Sign-In button) to restart the process.\n\t */\n\tonPromptNotification?: ((notification?: any | undefined) => void) | undefined;\n\tnonce?: string | undefined;\n}\n\ninterface IdentityCredential {\n\treadonly configURL: string;\n\treadonly isAutoSelected: boolean;\n\ttoken: string;\n}\n\nlet isRequestInProgress: AbortController | null = null;\n\nfunction isFedCMSupported() {\n\treturn typeof window !== \"undefined\" && \"IdentityCredential\" in window;\n}\n\nexport const oneTapClient = (options: GoogleOneTapOptions) => {\n\treturn {\n\t\tid: \"one-tap\",\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"fedcm-signout-handle\",\n\t\t\t\tname: \"FedCM Sign-Out Handler\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onResponse(ctx) {\n\t\t\t\t\t\tif (!ctx.request.url.toString().includes(\"/sign-out\")) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.promptOptions?.fedCM === false || !isFedCMSupported()) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnavigator.credentials.preventSilentAccess();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tgetActions: ($fetch, _) => {\n\t\t\treturn {\n\t\t\t\toneTap: async (\n\t\t\t\t\topts?: GoogleOneTapActionOptions | undefined,\n\t\t\t\t\tfetchOptions?: ClientFetchOption | undefined,\n\t\t\t\t) => {\n\t\t\t\t\tif (isRequestInProgress && !isRequestInProgress.signal.aborted) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"A Google One Tap request is already in progress. Please wait.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof window === \"undefined\" || !window.document) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"Google One Tap is only available in browser environments\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tasync function callback(idToken: string) {\n\t\t\t\t\t\tawait $fetch(\"/one-tap/callback\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { idToken },\n\t\t\t\t\t\t\t...opts?.fetchOptions,\n\t\t\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif ((!opts?.fetchOptions && !fetchOptions) || opts?.callbackURL) {\n\t\t\t\t\t\t\twindow.location.href = opts?.callbackURL ?? \"/\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { autoSelect, cancelOnTapOutside, context } = opts ?? {};\n\t\t\t\t\tconst contextValue = context ?? options.context ?? \"signin\";\n\t\t\t\t\tconst clients = {\n\t\t\t\t\t\tfedCM: async () => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst identityCredential = (await navigator.credentials.get({\n\t\t\t\t\t\t\t\t\tidentity: {\n\t\t\t\t\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t\t\t\t\t\tproviders: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tconfigURL: \"https://accounts.google.com/gsi/fedcm.json\",\n\t\t\t\t\t\t\t\t\t\t\t\tclientId: options.clientId,\n\t\t\t\t\t\t\t\t\t\t\t\tnonce: opts?.nonce,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmediation: autoSelect ? \"optional\" : \"required\",\n\t\t\t\t\t\t\t\t\tsignal: isRequestInProgress?.signal,\n\t\t\t\t\t\t\t\t} as any)) as IdentityCredential | null;\n\n\t\t\t\t\t\t\t\tif (!identityCredential?.token) {\n\t\t\t\t\t\t\t\t\t// Notify the caller that the prompt resulted in no token.\n\t\t\t\t\t\t\t\t\topts?.onPromptNotification?.(undefined);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait callback(identityCredential.token);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\tconsole.error(\"Error during FedCM callback:\", error);\n\t\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\t\t\tif (error?.code && (error.code === 19 || error.code === 20)) {\n\t\t\t\t\t\t\t\t\t// Notify the caller that the prompt was closed/dismissed.\n\t\t\t\t\t\t\t\t\topts?.onPromptNotification?.(undefined);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\toneTap: () => {\n\t\t\t\t\t\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\t\t\t\t\t\tlet isResolved = false;\n\t\t\t\t\t\t\t\tconst baseDelay = options.promptOptions?.baseDelay ?? 1000;\n\t\t\t\t\t\t\t\tconst maxAttempts = options.promptOptions?.maxAttempts ?? 5;\n\n\t\t\t\t\t\t\t\twindow.google?.accounts.id.initialize({\n\t\t\t\t\t\t\t\t\tclient_id: options.clientId,\n\t\t\t\t\t\t\t\t\tcallback: async (response: { credential: string }) => {\n\t\t\t\t\t\t\t\t\t\tisResolved = true;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tawait callback(response.credential);\n\t\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.error(\"Error during One Tap callback:\", error);\n\t\t\t\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tauto_select: autoSelect,\n\t\t\t\t\t\t\t\t\tcancel_on_tap_outside: cancelOnTapOutside,\n\t\t\t\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t\t\t\t\tux_mode: opts?.uxMode || \"popup\",\n\t\t\t\t\t\t\t\t\tnonce: opts?.nonce,\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * @see {@link https://developers.google.com/identity/gsi/web/guides/overview}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\titp_support: true,\n\n\t\t\t\t\t\t\t\t\t...options.additionalOptions,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst handlePrompt = (attempt: number) => {\n\t\t\t\t\t\t\t\t\tif (isResolved) return;\n\n\t\t\t\t\t\t\t\t\twindow.google?.accounts.id.prompt((notification: any) => {\n\t\t\t\t\t\t\t\t\t\tif (isResolved) return;\n\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tnotification.isDismissedMoment &&\n\t\t\t\t\t\t\t\t\t\t\tnotification.isDismissedMoment()\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tif (attempt < maxAttempts) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst delay = Math.pow(2, attempt) * baseDelay;\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(() => handlePrompt(attempt + 1), delay);\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\topts?.onPromptNotification?.(notification);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t\tnotification.isSkippedMoment &&\n\t\t\t\t\t\t\t\t\t\t\tnotification.isSkippedMoment()\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tif (attempt < maxAttempts) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst delay = Math.pow(2, attempt) * baseDelay;\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(() => handlePrompt(attempt + 1), delay);\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\topts?.onPromptNotification?.(notification);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\thandlePrompt(0);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tif (isRequestInProgress) {\n\t\t\t\t\t\tisRequestInProgress?.abort();\n\t\t\t\t\t}\n\t\t\t\t\tisRequestInProgress = new AbortController();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst client =\n\t\t\t\t\t\t\toptions.promptOptions?.fedCM === false || !isFedCMSupported()\n\t\t\t\t\t\t\t\t? \"oneTap\"\n\t\t\t\t\t\t\t\t: \"fedCM\";\n\t\t\t\t\t\tif (client === \"oneTap\") {\n\t\t\t\t\t\t\tawait loadGoogleScript();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait clients[client]();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error during Google One Tap flow:\", error);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tisRequestInProgress = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetAtoms($fetch) {\n\t\t\treturn {};\n\t\t},\n\t} satisfies BetterAuthClientPlugin;\n};\n\nconst loadGoogleScript = (): Promise<void> => {\n\treturn new Promise((resolve) => {\n\t\tif (window.googleScriptInitialized) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = \"https://accounts.google.com/gsi/client\";\n\t\tscript.async = true;\n\t\tscript.defer = true;\n\t\tscript.onload = () => {\n\t\t\twindow.googleScriptInitialized = true;\n\t\t\tresolve();\n\t\t};\n\t\tdocument.head.appendChild(script);\n\t});\n};\n","import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n object.events = object.events || {}\n if (!object.events[eventKey + REVERT_MUTATION]) {\n object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n // eslint-disable-next-line no-sequences\n object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n shared: {},\n ...eventProps\n })\n })\n }\n object.events[eventKey] = object.events[eventKey] || []\n object.events[eventKey].push(listener)\n return () => {\n let currentListeners = object.events[eventKey]\n let index = currentListeners.indexOf(listener)\n currentListeners.splice(index, 1)\n if (!currentListeners.length) {\n delete object.events[eventKey]\n object.events[eventKey + REVERT_MUTATION]()\n delete object.events[eventKey + REVERT_MUTATION]\n }\n }\n}\n\nexport let onStart = ($store, listener) =>\n on($store, listener, START, runListeners => {\n let originListen = $store.listen\n $store.listen = arg => {\n if (!$store.lc && !$store.starting) {\n $store.starting = true\n runListeners()\n delete $store.starting\n }\n return originListen(arg)\n }\n return () => {\n $store.listen = originListen\n }\n })\n\nexport let onStop = ($store, listener) =>\n on($store, listener, STOP, runListeners => {\n let originOff = $store.off\n $store.off = () => {\n runListeners()\n originOff()\n }\n return () => {\n $store.off = originOff\n }\n })\n\nexport let onSet = ($store, listener) =>\n on($store, listener, SET, runListeners => {\n let originSet = $store.set\n let originSetKey = $store.setKey\n if ($store.setKey) {\n $store.setKey = (changed, changedValue) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({\n abort,\n changed,\n newValue: { ...$store.value, [changed]: changedValue }\n })\n if (!isAborted) return originSetKey(changed, changedValue)\n }\n }\n $store.set = newValue => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, newValue })\n if (!isAborted) return originSet(newValue)\n }\n return () => {\n $store.set = originSet\n $store.setKey = originSetKey\n }\n })\n\nexport let onNotify = ($store, listener) =>\n on($store, listener, NOTIFY, runListeners => {\n let originNotify = $store.notify\n $store.notify = (oldValue, changed) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, changed, oldValue })\n if (!isAborted) return originNotify(oldValue, changed)\n }\n return () => {\n $store.notify = originNotify\n }\n })\n\nexport let STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n let listener = payload => {\n let destroy = initialize(payload)\n if (destroy) $store.events[UNMOUNT].push(destroy)\n }\n return on($store, listener, MOUNT, runListeners => {\n let originListen = $store.listen\n $store.listen = (...args) => {\n if (!$store.lc && !$store.active) {\n $store.active = true\n runListeners()\n }\n return originListen(...args)\n }\n\n let originOff = $store.off\n $store.events[UNMOUNT] = []\n $store.off = () => {\n originOff()\n setTimeout(() => {\n if ($store.active && !$store.lc) {\n $store.active = false\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n }\n }, STORE_UNMOUNT_DELAY)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let originClean = $store[clean]\n $store[clean] = () => {\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n $store.active = false\n originClean()\n }\n }\n\n return () => {\n $store.listen = originListen\n $store.off = originOff\n }\n })\n}\n","export function listenKeys($store, keys, listener) {\n let keysSet = new Set(keys).add(undefined)\n return $store.listen((value, oldValue, changed) => {\n if (keysSet.has(changed)) {\n listener(value, oldValue, changed)\n }\n })\n}\n\nexport function subscribeKeys($store, keys, listener) {\n let unbind = listenKeys($store, keys, listener)\n listener($store.value)\n return unbind\n}\n","import type { ClientFetchOption } from \"@better-auth/core\";\nimport type { BetterFetch, BetterFetchError } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport { atom, onMount } from \"nanostores\";\nimport type { SessionQueryParams } from \"./types\";\n\n// SSR detection\nconst isServer = () => typeof window === \"undefined\";\n\nexport type AuthQueryAtom<T> = PreinitializedWritableAtom<{\n\tdata: null | T;\n\terror: null | BetterFetchError;\n\tisPending: boolean;\n\tisRefetching: boolean;\n\trefetch: (\n\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t) => Promise<void>;\n}>;\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| (\n\t\t\t\t| ((value: {\n\t\t\t\t\t\tdata: null | T;\n\t\t\t\t\t\terror: null | BetterFetchError;\n\t\t\t\t\t\tisPending: boolean;\n\t\t\t\t }) => ClientFetchOption)\n\t\t\t\t| ClientFetchOption\n\t\t )\n\t\t| undefined,\n) => {\n\tconst value: AuthQueryAtom<T> = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch: (queryParams) => fn(queryParams),\n\t});\n\n\tconst fn = async (\n\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t) => {\n\t\treturn new Promise<void>((resolve) => {\n\t\t\tconst opts =\n\t\t\t\ttypeof options === \"function\"\n\t\t\t\t\t? options({\n\t\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t\t})\n\t\t\t\t\t: options;\n\n\t\t\t$fetch<T>(path, {\n\t\t\t\t...opts,\n\t\t\t\tquery: {\n\t\t\t\t\t...opts?.query,\n\t\t\t\t\t...queryParams?.query,\n\t\t\t\t},\n\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tdata: context.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t\t},\n\t\t\t\tasync onError(context) {\n\t\t\t\t\tconst { request } = context;\n\t\t\t\t\tconst retryAttempts =\n\t\t\t\t\t\ttypeof request.retry === \"number\"\n\t\t\t\t\t\t\t? request.retry\n\t\t\t\t\t\t\t: request.retry?.attempts;\n\t\t\t\t\tconst retryAttempt = request.retryAttempt || 0;\n\t\t\t\t\tif (retryAttempts && retryAttempt < retryAttempts) return;\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror: context.error,\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onError?.(context);\n\t\t\t\t},\n\t\t\t\tasync onRequest(context) {\n\t\t\t\t\tconst currentValue = value.get();\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tisPending: currentValue.data === null,\n\t\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisRefetching: true,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t\t},\n\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tresolve(void 0);\n\t\t\t\t});\n\t\t});\n\t};\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet isMounted = false;\n\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe(async () => {\n\t\t\tif (isServer()) {\n\t\t\t\t// On server, don't trigger fetch\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isMounted) {\n\t\t\t\tawait fn();\n\t\t\t} else {\n\t\t\t\tonMount(value, () => {\n\t\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\t\tif (!isMounted) {\n\t\t\t\t\t\t\tawait fn();\n\t\t\t\t\t\t\tisMounted = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 0);\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tvalue.off();\n\t\t\t\t\t\tinitAtom.off();\n\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\treturn value;\n};\n","export interface BroadcastMessage {\n\tevent?: \"session\" | undefined;\n\tdata?: { trigger?: \"signout\" | \"getSession\" | \"updateUser\" } | undefined;\n\tclientId: string;\n\ttimestamp: number;\n}\n\nexport type BroadcastListener = (message: BroadcastMessage) => void;\n\nexport const kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\n\nconst now = () => Math.floor(Date.now() / 1000);\n\nexport interface BroadcastChannel {\n\tpost(message: Record<string, unknown>): void;\n\tsubscribe(listener: BroadcastListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowBroadcastChannel implements BroadcastChannel {\n\tlisteners = new Set<BroadcastListener>();\n\tprivate name: string;\n\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\n\tsubscribe(listener: BroadcastListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tpost(message: Record<string, unknown>) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tthis.name,\n\t\t\t\tJSON.stringify({ ...message, timestamp: now() }),\n\t\t\t);\n\t\t} catch {}\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst handler = (event: StorageEvent) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message: BroadcastMessage = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\n\t\twindow.addEventListener(\"storage\", handler);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n}\n\nexport function getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!(globalThis as any)[kBroadcastChannel]) {\n\t\t(globalThis as any)[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\t}\n\treturn (globalThis as any)[kBroadcastChannel] as BroadcastChannel;\n}\n","export type FocusListener = (focused: boolean) => void;\n\nexport const kFocusManager = Symbol.for(\"better-auth:focus-manager\");\n\nexport interface FocusManager {\n\tsetFocused(focused: boolean): void;\n\tsubscribe(listener: FocusListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowFocusManager implements FocusManager {\n\tlisteners = new Set<FocusListener>();\n\n\tsubscribe(listener: FocusListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tsetFocused(focused: boolean) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof document === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tthis.setFocused(true);\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\n\t\t\t\t\"visibilitychange\",\n\t\t\t\tvisibilityHandler,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t};\n\t}\n}\n\nexport function getGlobalFocusManager() {\n\tif (!(globalThis as any)[kFocusManager]) {\n\t\t(globalThis as any)[kFocusManager] = new WindowFocusManager();\n\t}\n\treturn (globalThis as any)[kFocusManager] as FocusManager;\n}\n","export type OnlineListener = (online: boolean) => void;\n\nexport const kOnlineManager = Symbol.for(\"better-auth:online-manager\");\n\nexport interface OnlineManager {\n\tsetOnline(online: boolean): void;\n\tisOnline: boolean;\n\n\tsubscribe(listener: OnlineListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowOnlineManager implements OnlineManager {\n\tlisteners = new Set<OnlineListener>();\n\tisOnline = typeof navigator !== \"undefined\" ? navigator.onLine : true;\n\n\tsubscribe(listener: OnlineListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tsetOnline(online: boolean) {\n\t\tthis.isOnline = online;\n\t\tthis.listeners.forEach((listener) => listener(online));\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst onOnline = () => this.setOnline(true);\n\t\tconst onOffline = () => this.setOnline(false);\n\n\t\twindow.addEventListener(\"online\", onOnline, false);\n\t\twindow.addEventListener(\"offline\", onOffline, false);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"online\", onOnline, false);\n\t\t\twindow.removeEventListener(\"offline\", onOffline, false);\n\t\t};\n\t}\n}\n\nexport function getGlobalOnlineManager() {\n\tif (!(globalThis as any)[kOnlineManager]) {\n\t\t(globalThis as any)[kOnlineManager] = new WindowOnlineManager();\n\t}\n\treturn (globalThis as any)[kOnlineManager] as OnlineManager;\n}\n","import type { BetterAuthClientOptions } from \"@better-auth/core\";\nimport type { Session, User } from \"@better-auth/core/db\";\nimport type { BetterFetch, BetterFetchError } from \"@better-fetch/fetch\";\nimport type { WritableAtom } from \"nanostores\";\nimport { getGlobalBroadcastChannel } from \"./broadcast-channel\";\nimport { getGlobalFocusManager } from \"./focus-manager\";\nimport { getGlobalOnlineManager } from \"./online-manager\";\nimport type { AuthQueryAtom } from \"./query\";\n\nconst now = () => Math.floor(Date.now() / 1000);\n\n/**\n * Rate limit: don't refetch on focus if a session request was made within this many seconds\n */\nconst FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;\n\nexport interface SessionRefreshOptions {\n\tsessionAtom: AuthQueryAtom<{\n\t\tuser: User;\n\t\tsession: Session;\n\t}>;\n\tsessionSignal: WritableAtom<boolean>;\n\t$fetch: BetterFetch;\n\toptions?: BetterAuthClientOptions | undefined;\n}\n\ninterface SessionRefreshState {\n\tlastSync: number;\n\tlastSessionRequest: number;\n\tcachedSession: any;\n\tpollInterval?: ReturnType<typeof setInterval> | undefined;\n\tunsubscribeBroadcast?: (() => void) | undefined;\n\tunsubscribeFocus?: (() => void) | undefined;\n\tunsubscribeOnline?: (() => void) | undefined;\n}\n\nexport function createSessionRefreshManager(opts: SessionRefreshOptions) {\n\tconst { sessionAtom, sessionSignal, $fetch, options = {} } = opts;\n\n\tconst refetchInterval = options.sessionOptions?.refetchInterval ?? 0;\n\tconst refetchOnWindowFocus =\n\t\toptions.sessionOptions?.refetchOnWindowFocus ?? true;\n\tconst refetchWhenOffline =\n\t\toptions.sessionOptions?.refetchWhenOffline ?? false;\n\n\tconst state: SessionRefreshState = {\n\t\tlastSync: 0,\n\t\tlastSessionRequest: 0,\n\t\tcachedSession: undefined,\n\t};\n\n\tconst shouldRefetch = (): boolean => {\n\t\treturn refetchWhenOffline || getGlobalOnlineManager().isOnline;\n\t};\n\n\tconst triggerRefetch = (\n\t\tevent?:\n\t\t\t| {\n\t\t\t\t\tevent?: \"poll\" | \"visibilitychange\" | \"storage\";\n\t\t\t }\n\t\t\t| undefined,\n\t) => {\n\t\tif (!shouldRefetch()) return;\n\n\t\tif (event?.event === \"storage\") {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentSession = sessionAtom.get();\n\n\t\tif (event?.event === \"poll\") {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\t$fetch<{\n\t\t\t\tuser: User;\n\t\t\t\tsession: Session;\n\t\t\t}>(\"/get-session\")\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.error) {\n\t\t\t\t\t\tsessionAtom.set({\n\t\t\t\t\t\t\t...currentSession,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: res.error as BetterFetchError | null,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsessionAtom.set({\n\t\t\t\t\t\t\t...currentSession,\n\t\t\t\t\t\t\tdata: res.data,\n\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tstate.lastSync = now();\n\t\t\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\treturn;\n\t\t}\n\n\t\t// Rate limit: don't refetch on focus if a session request was made recently\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tconst timeSinceLastRequest = now() - state.lastSessionRequest;\n\t\t\tif (timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstate.lastSessionRequest = now();\n\t\t}\n\n\t\tif (\n\t\t\tcurrentSession?.data === null ||\n\t\t\tcurrentSession?.data === undefined ||\n\t\t\tevent?.event === \"visibilitychange\"\n\t\t) {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t}\n\t};\n\n\tconst broadcastSessionUpdate = (\n\t\ttrigger: \"signout\" | \"getSession\" | \"updateUser\",\n\t) => {\n\t\tgetGlobalBroadcastChannel().post({\n\t\t\tevent: \"session\",\n\t\t\tdata: { trigger },\n\t\t\tclientId: Math.random().toString(36).substring(7),\n\t\t});\n\t};\n\n\tconst setupPolling = () => {\n\t\tif (refetchInterval && refetchInterval > 0) {\n\t\t\tstate.pollInterval = setInterval(() => {\n\t\t\t\tconst currentSession = sessionAtom.get();\n\t\t\t\tif (currentSession?.data) {\n\t\t\t\t\ttriggerRefetch({ event: \"poll\" });\n\t\t\t\t}\n\t\t\t}, refetchInterval * 1000);\n\t\t}\n\t};\n\n\tconst setupBroadcast = () => {\n\t\tstate.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"storage\" });\n\t\t});\n\t};\n\n\tconst setupFocusRefetch = () => {\n\t\tif (!refetchOnWindowFocus) return;\n\n\t\tstate.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\n\tconst setupOnlineRefetch = () => {\n\t\tstate.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {\n\t\t\tif (online) {\n\t\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t\t}\n\t\t});\n\t};\n\n\tconst init = () => {\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\n\t\tgetGlobalBroadcastChannel().setup();\n\t\tgetGlobalFocusManager().setup();\n\t\tgetGlobalOnlineManager().setup();\n\t};\n\n\tconst cleanup = () => {\n\t\tif (state.pollInterval) {\n\t\t\tclearInterval(state.pollInterval);\n\t\t\tstate.pollInterval = undefined;\n\t\t}\n\t\tif (state.unsubscribeBroadcast) {\n\t\t\tstate.unsubscribeBroadcast();\n\t\t\tstate.unsubscribeBroadcast = undefined;\n\t\t}\n\t\tif (state.unsubscribeFocus) {\n\t\t\tstate.unsubscribeFocus();\n\t\t\tstate.unsubscribeFocus = undefined;\n\t\t}\n\t\tif (state.unsubscribeOnline) {\n\t\t\tstate.unsubscribeOnline();\n\t\t\tstate.unsubscribeOnline = undefined;\n\t\t}\n\t\tstate.lastSync = 0;\n\t\tstate.lastSessionRequest = 0;\n\t\tstate.cachedSession = undefined;\n\t};\n\n\treturn {\n\t\tinit,\n\t\tcleanup,\n\t\ttriggerRefetch,\n\t\tbroadcastSessionUpdate,\n\t};\n}\n","import { env } from \"@better-auth/core/env\";\nimport { BetterAuthError } from \"@better-auth/core/error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tconst pathname = parsedUrl.pathname.replace(/\\/+$/, \"\") || \"/\";\n\t\treturn pathname !== \"/\";\n\t} catch {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction assertHasProtocol(url: string): void {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tif (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t`Invalid base URL: ${url}. URL must include 'http://' or 'https://'`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof BetterAuthError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t\tString(error),\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tassertHasProtocol(url);\n\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\n\tconst trimmedUrl = url.replace(/\\/+$/, \"\");\n\n\tif (!path || path === \"/\") {\n\t\treturn trimmedUrl;\n\t}\n\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedUrl}${path}`;\n}\n\nfunction validateProxyHeader(header: string, type: \"host\" | \"proto\"): boolean {\n\tif (!header || header.trim() === \"\") {\n\t\treturn false;\n\t}\n\n\tif (type === \"proto\") {\n\t\t// Only allow http and https protocols\n\t\treturn header === \"http\" || header === \"https\";\n\t}\n\n\tif (type === \"host\") {\n\t\tconst suspiciousPatterns = [\n\t\t\t/\\.\\./, // Path traversal\n\t\t\t/\\0/, // Null bytes\n\t\t\t/[\\s]/, // Whitespace (except legitimate spaces that should be trimmed)\n\t\t\t/^[.]/, // Starting with dot\n\t\t\t/[<>'\"]/, // HTML/script injection characters\n\t\t\t/javascript:/i, // Protocol injection\n\t\t\t/file:/i, // File protocol\n\t\t\t/data:/i, // Data protocol\n\t\t];\n\n\t\tif (suspiciousPatterns.some((pattern) => pattern.test(header))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Basic hostname validation (allows localhost, IPs, and domains with ports)\n\t\t// This is a simple check, not exhaustive RFC validation\n\t\tconst hostnameRegex =\n\t\t\t/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv4 addresses\n\t\tconst ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv6 addresses in brackets\n\t\tconst ipv6Regex = /^\\[[0-9a-fA-F:]+\\](:[0-9]{1,5})?$/;\n\n\t\t// Allow localhost variations\n\t\tconst localhostRegex = /^localhost(:[0-9]{1,5})?$/i;\n\n\t\treturn (\n\t\t\thostnameRegex.test(header) ||\n\t\t\tipv4Regex.test(header) ||\n\t\t\tipv6Regex.test(header) ||\n\t\t\tlocalhostRegex.test(header)\n\t\t);\n\t}\n\n\treturn false;\n}\n\nexport function getBaseURL(\n\turl?: string,\n\tpath?: string,\n\trequest?: Request,\n\tloadEnv?: boolean,\n\ttrustedProxyHeaders?: boolean | undefined,\n) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\n\tif (loadEnv !== false) {\n\t\tconst fromEnv =\n\t\t\tenv.BETTER_AUTH_URL ||\n\t\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_AUTH_URL ||\n\t\t\t(env.BASE_URL !== \"/\" ? env.BASE_URL : undefined);\n\n\t\tif (fromEnv) {\n\t\t\treturn withPath(fromEnv, path);\n\t\t}\n\t}\n\n\tconst fromRequest = request?.headers.get(\"x-forwarded-host\");\n\tconst fromRequestProto = request?.headers.get(\"x-forwarded-proto\");\n\tif (fromRequest && fromRequestProto && trustedProxyHeaders) {\n\t\tif (\n\t\t\tvalidateProxyHeader(fromRequestProto, \"proto\") &&\n\t\t\tvalidateProxyHeader(fromRequest, \"host\")\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn withPath(`${fromRequestProto}://${fromRequest}`, path);\n\t\t\t} catch (_error) {}\n\t\t}\n\t}\n\n\tif (request) {\n\t\tconst url = getOrigin(request.url);\n\t\tif (!url) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"Could not get origin from request. Please provide a valid base URL.\",\n\t\t\t);\n\t\t}\n\t\treturn withPath(url, path);\n\t}\n\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n\nexport function getOrigin(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\t// For custom URL schemes (like exp://), the origin property returns the string \"null\"\n\t\t// instead of null. We need to handle this case and return null so the fallback logic works.\n\t\treturn parsedUrl.origin === \"null\" ? null : parsedUrl.origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getProtocol(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.protocol;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getHost(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.host;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import type { BetterFetchPlugin } from \"@better-fetch/fetch\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\t\tif (window.location) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n","const PROTO_POLLUTION_PATTERNS = {\n\tproto:\n\t\t/\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n\tconstructor:\n\t\t/\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n\tprotoShort: /\"__proto__\"\\s*:/,\n\tconstructorShort: /\"constructor\"\\s*:/,\n} as const;\n\nconst JSON_SIGNATURE =\n\t/^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\n\nconst SPECIAL_VALUES = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined: undefined,\n\tnan: Number.NaN,\n\tinfinity: Number.POSITIVE_INFINITY,\n\t\"-infinity\": Number.NEGATIVE_INFINITY,\n} as const;\n\nconst ISO_DATE_REGEX =\n\t/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\n\ntype ParseOptions = {\n\t/** Throw errors instead of returning the original value */\n\tstrict?: boolean | undefined;\n\t/** Log warnings when suspicious patterns are detected */\n\twarnings?: boolean | undefined;\n\t/** Custom reviver function */\n\treviver?: ((key: string, value: any) => any) | undefined;\n\t/** Automatically convert ISO date strings to Date objects */\n\tparseDates?: boolean | undefined;\n};\n\nfunction isValidDate(date: Date): boolean {\n\treturn date instanceof Date && !isNaN(date.getTime());\n}\n\nfunction parseISODate(value: string): Date | null {\n\tconst match = ISO_DATE_REGEX.exec(value);\n\tif (!match) return null;\n\n\tconst [\n\t\t,\n\t\tyear,\n\t\tmonth,\n\t\tday,\n\t\thour,\n\t\tminute,\n\t\tsecond,\n\t\tms,\n\t\toffsetSign,\n\t\toffsetHour,\n\t\toffsetMinute,\n\t] = match;\n\n\tlet date = new Date(\n\t\tDate.UTC(\n\t\t\tparseInt(year!, 10),\n\t\t\tparseInt(month!, 10) - 1,\n\t\t\tparseInt(day!, 10),\n\t\t\tparseInt(hour!, 10),\n\t\t\tparseInt(minute!, 10),\n\t\t\tparseInt(second!, 10),\n\t\t\tms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0,\n\t\t),\n\t);\n\n\tif (offsetSign) {\n\t\tconst offset =\n\t\t\t(parseInt(offsetHour!, 10) * 60 + parseInt(offsetMinute!, 10)) *\n\t\t\t(offsetSign === \"+\" ? -1 : 1);\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + offset);\n\t}\n\n\treturn isValidDate(date) ? date : null;\n}\n\nfunction betterJSONParse<T = unknown>(\n\tvalue: unknown,\n\toptions: ParseOptions = {},\n): T {\n\tconst {\n\t\tstrict = false,\n\t\twarnings = false,\n\t\treviver,\n\t\tparseDates = true,\n\t} = options;\n\n\tif (typeof value !== \"string\") {\n\t\treturn value as T;\n\t}\n\n\tconst trimmed = value.trim();\n\n\tif (\n\t\ttrimmed.length > 0 &&\n\t\ttrimmed[0] === '\"' &&\n\t\ttrimmed.endsWith('\"') &&\n\t\t!trimmed.slice(1, -1).includes('\"')\n\t) {\n\t\treturn trimmed.slice(1, -1) as T;\n\t}\n\n\tconst lowerValue = trimmed.toLowerCase();\n\tif (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) {\n\t\treturn SPECIAL_VALUES[lowerValue as keyof typeof SPECIAL_VALUES] as T;\n\t}\n\n\tif (!JSON_SIGNATURE.test(trimmed)) {\n\t\tif (strict) {\n\t\t\tthrow new SyntaxError(\"[better-json] Invalid JSON\");\n\t\t}\n\t\treturn value as T;\n\t}\n\n\tconst hasProtoPattern = Object.entries(PROTO_POLLUTION_PATTERNS).some(\n\t\t([key, pattern]) => {\n\t\t\tconst matches = pattern.test(trimmed);\n\t\t\tif (matches && warnings) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[better-json] Detected potential prototype pollution attempt using ${key} pattern`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn matches;\n\t\t},\n\t);\n\n\tif (hasProtoPattern && strict) {\n\t\tthrow new Error(\n\t\t\t\"[better-json] Potential prototype pollution attempt detected\",\n\t\t);\n\t}\n\n\ttry {\n\t\tconst secureReviver = (key: string, value: any) => {\n\t\t\tif (\n\t\t\t\tkey === \"__proto__\" ||\n\t\t\t\t(key === \"constructor\" &&\n\t\t\t\t\tvalue &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\"prototype\" in value)\n\t\t\t) {\n\t\t\t\tif (warnings) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[better-json] Dropping \"${key}\" key to prevent prototype pollution`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (parseDates && typeof value === \"string\") {\n\t\t\t\tconst date = parseISODate(value);\n\t\t\t\tif (date) {\n\t\t\t\t\treturn date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn reviver ? reviver(key, value) : value;\n\t\t};\n\n\t\treturn JSON.parse(trimmed, secureReviver);\n\t} catch (error) {\n\t\tif (strict) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn value as T;\n\t}\n}\n\nexport function parseJSON<T = unknown>(\n\tvalue: unknown,\n\toptions: ParseOptions = { strict: true },\n): T {\n\treturn betterJSONParse<T>(value, options);\n}\n","import type { BetterAuthClientOptions } from \"@better-auth/core\";\nimport type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, onMount } from \"nanostores\";\nimport type { Session, User } from \"../types\";\nimport type { AuthQueryAtom } from \"./query\";\nimport { useAuthQuery } from \"./query\";\nimport { createSessionRefreshManager } from \"./session-refresh\";\n\nexport type SessionAtom = AuthQueryAtom<{\n\tuser: User;\n\tsession: Session;\n}>;\n\nexport function getSessionAtom(\n\t$fetch: BetterFetch,\n\toptions?: BetterAuthClientOptions | undefined,\n) {\n\tconst $signal = atom<boolean>(false);\n\tconst session: SessionAtom = useAuthQuery<{\n\t\tuser: User;\n\t\tsession: Session;\n\t}>($signal, \"/get-session\", $fetch, {\n\t\tmethod: \"GET\",\n\t});\n\n\tonMount(session, () => {\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tsessionAtom: session,\n\t\t\tsessionSignal: $signal,\n\t\t\t$fetch,\n\t\t\toptions,\n\t\t});\n\n\t\trefreshManager.init();\n\n\t\treturn () => {\n\t\t\trefreshManager.cleanup();\n\t\t};\n\t});\n\n\treturn {\n\t\tsession,\n\t\t$sessionSignal: $signal,\n\t};\n}\n","import type {\n\tBetterAuthClientOptions,\n\tClientAtomListener,\n} from \"@better-auth/core\";\nimport { createFetch } from \"@better-fetch/fetch\";\nimport type { WritableAtom } from \"nanostores\";\nimport { getBaseURL } from \"../utils/url\";\nimport { redirectPlugin } from \"./fetch-plugins\";\nimport { parseJSON } from \"./parser\";\nimport { getSessionAtom } from \"./session-atom\";\n\nexport const getClientConfig = (\n\toptions?: BetterAuthClientOptions | undefined,\n\tloadEnv?: boolean | undefined,\n) => {\n\t/* check if the credentials property is supported. Useful for cf workers */\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL =\n\t\tgetBaseURL(options?.baseURL, options?.basePath, undefined, loadEnv) ??\n\t\t\"/api/auth\";\n\tconst pluginsFetchPlugins =\n\t\toptions?.plugins\n\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t.filter((pl) => pl !== undefined) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse,\n\t\t},\n\t};\n\tconst {\n\t\tonSuccess: _onSuccess,\n\t\tonError: _onError,\n\t\tonRequest: _onRequest,\n\t\tonResponse: _onResponse,\n\t\t...restOfFetchOptions\n\t} = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...(isCredentialsSupported ? { credentials: \"include\" } : {}),\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn parseJSON(text, {\n\t\t\t\tstrict: false,\n\t\t\t});\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...(restOfFetchOptions.plugins || []),\n\t\t\t...(options?.disableDefaultFetchPlugins ? [] : [redirectPlugin]),\n\t\t\t...pluginsFetchPlugins,\n\t\t],\n\t});\n\tconst { $sessionSignal, session } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession,\n\t} as Record<string, WritableAtom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\",\n\t};\n\tconst atomListeners: ClientAtomListener[] = [\n\t\t{\n\t\t\tsignal: \"$sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\tconst matchesCommonPaths =\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"/update-user\" ||\n\t\t\t\t\tpath === \"/sign-up/email\" ||\n\t\t\t\t\tpath === \"/sign-in/email\" ||\n\t\t\t\t\tpath === \"/delete-user\" ||\n\t\t\t\t\tpath === \"/verify-email\" ||\n\t\t\t\t\tpath === \"/revoke-sessions\" ||\n\t\t\t\t\tpath === \"/revoke-session\" ||\n\t\t\t\t\tpath === \"/change-email\";\n\n\t\t\t\treturn matchesCommonPaths;\n\t\t\t},\n\t\t},\n\t];\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\n\tconst $store = {\n\t\tnotify: (\n\t\t\tsignal?: (Omit<string, \"$sessionSignal\"> | \"$sessionSignal\") | undefined,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.set(\n\t\t\t\t!pluginsAtoms[signal as keyof typeof pluginsAtoms]!.get(),\n\t\t\t);\n\t\t},\n\t\tlisten: (\n\t\t\tsignal: Omit<string, \"$sessionSignal\"> | \"$sessionSignal\",\n\t\t\tlistener: (value: boolean, oldValue?: boolean | undefined) => void,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms,\n\t};\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(\n\t\t\t\tpluginsActions,\n\t\t\t\tplugin.getActions?.($fetch, $store, options),\n\t\t\t);\n\t\t}\n\t}\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store,\n\t};\n};\n","import type { Atom } from \"nanostores\";\n\nexport function isAtom(value: unknown): value is Atom<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"get\" in value &&\n\t\ttypeof (value as any).get === \"function\" &&\n\t\t\"lc\" in value &&\n\t\ttypeof (value as any).lc === \"number\"\n\t);\n}\n","import type {\n\tBetterAuthClientPlugin,\n\tClientAtomListener,\n\tClientFetchOption,\n} from \"@better-auth/core\";\nimport type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom } from \"nanostores\";\nimport { isAtom } from \"../utils/is-atom\";\nimport type { ProxyRequest } from \"./path-to-object\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs:\n\t\t| {\n\t\t\t\tfetchOptions?: ClientFetchOption | undefined;\n\t\t\t\tquery?: Record<string, any> | undefined;\n\t\t }\n\t\t| undefined,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { fetchOptions, query: _query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (fetchOptions?.method) {\n\t\treturn fetchOptions.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: BetterAuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(_, prop) {\n\t\t\t\tif (typeof prop !== \"string\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif (prop === \"then\" || prop === \"catch\" || prop === \"finally\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\tif (isAtom(current)) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst fetchOptions = (args[1] || {}) as ClientFetchOption;\n\t\t\t\tconst { query, fetchOptions: argFetchOptions, ...body } = arg;\n\t\t\t\tconst options = {\n\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t...argFetchOptions,\n\t\t\t\t} as ClientFetchOption;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query || options?.query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\tif (!atomListeners || options.disableSignal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners.filter((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!matches.length) return;\n\n\t\t\t\t\t\tconst visited = new Set<ClientAtomListener[\"signal\"]>();\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tconst signal = atoms[match.signal as any];\n\t\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t\tif (visited.has(match.signal)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvisited.add(match.signal);\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import { createAccessControl } from \"../../access\";\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tteam: [\"create\", \"update\", \"delete\"],\n\tac: [\"create\", \"read\", \"update\", \"delete\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tteam: [\"create\", \"update\", \"delete\"],\n\tac: [\"create\", \"read\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tteam: [\"create\", \"update\", \"delete\"],\n\tac: [\"create\", \"read\", \"update\", \"delete\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n\tteam: [],\n\tac: [\"read\"], // Allow members to see all roles for their org.\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import type { Role } from \"../access\";\nimport type { OrganizationOptions } from \"./types\";\n\nexport const hasPermissionFn = (\n\tinput: HasPermissionBaseInput,\n\tacRoles: {\n\t\t[x: string]: Role<any> | undefined;\n\t},\n) => {\n\tif (!input.permissions && !input.permission) return false;\n\n\tconst roles = input.role.split(\",\");\n\tconst creatorRole = input.options.creatorRole || \"owner\";\n\tconst isCreator = roles.includes(creatorRole);\n\n\tconst allowCreatorsAllPermissions = input.allowCreatorAllPermissions || false;\n\tif (isCreator && allowCreatorsAllPermissions) return true;\n\n\tfor (const role of roles) {\n\t\tconst _role = acRoles[role as keyof typeof acRoles];\n\t\tconst result = _role?.authorize(input.permissions ?? input.permission);\n\t\tif (result?.success) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nexport type PermissionExclusive =\n\t| {\n\t\t\t/**\n\t\t\t * @deprecated Use `permissions` instead\n\t\t\t */\n\t\t\tpermission: { [key: string]: string[] };\n\t\t\tpermissions?: never | undefined;\n\t }\n\t| {\n\t\t\tpermissions: { [key: string]: string[] };\n\t\t\tpermission?: never | undefined;\n\t };\n\nexport let cacheAllRoles = new Map<\n\tstring,\n\t{\n\t\t[x: string]: Role<any> | undefined;\n\t}\n>();\n\nexport type HasPermissionBaseInput = {\n\trole: string;\n\toptions: OrganizationOptions;\n\tallowCreatorAllPermissions?: boolean | undefined;\n} & PermissionExclusive;\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { DBFieldAttribute } from \"@better-auth/core/db\";\nimport { atom } from \"nanostores\";\nimport { useAuthQuery } from \"../../client\";\nimport type {\n\tInferInvitation,\n\tInferMember,\n\tInferOrganization,\n\tInferTeam,\n\tMember,\n} from \"../../plugins/organization/schema\";\nimport type { BetterAuthOptions, BetterAuthPlugin } from \"../../types\";\nimport type { Prettify } from \"../../types/helper\";\nimport type { AccessControl, Role } from \"../access\";\nimport type { defaultStatements } from \"./access\";\nimport { adminAc, defaultRoles, memberAc, ownerAc } from \"./access\";\nimport type { OrganizationPlugin } from \"./organization\";\nimport type { HasPermissionBaseInput } from \"./permission\";\nimport { hasPermissionFn } from \"./permission\";\nimport type { OrganizationOptions } from \"./types\";\n\n/**\n * Using the same `hasPermissionFn` function, but without the need for a `ctx` parameter or the `organizationId` parameter.\n */\nexport const clientSideHasPermission = (input: HasPermissionBaseInput) => {\n\tconst acRoles: {\n\t\t[x: string]: Role<any> | undefined;\n\t} = input.options.roles || defaultRoles;\n\n\treturn hasPermissionFn(input, acRoles);\n};\n\ninterface OrganizationClientOptions {\n\tac?: AccessControl | undefined;\n\troles?:\n\t\t| {\n\t\t\t\t[key in string]: Role;\n\t\t }\n\t\t| undefined;\n\tteams?:\n\t\t| {\n\t\t\t\tenabled: boolean;\n\t\t }\n\t\t| undefined;\n\tschema?:\n\t\t| {\n\t\t\t\torganization?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tmember?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tinvitation?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tteam?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\torganizationRole?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t }\n\t\t| undefined;\n\tdynamicAccessControl?:\n\t\t| {\n\t\t\t\tenabled: boolean;\n\t\t }\n\t\t| undefined;\n}\n\nexport const organizationClient = <CO extends OrganizationClientOptions>(\n\toptions?: CO | undefined,\n) => {\n\tconst $listOrg = atom<boolean>(false);\n\tconst $activeOrgSignal = atom<boolean>(false);\n\tconst $activeMemberSignal = atom<boolean>(false);\n\tconst $activeMemberRoleSignal = atom<boolean>(false);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements =\n\t\tCO[\"ac\"] extends AccessControl<infer S> ? S : DefaultStatements;\n\ttype PermissionType = {\n\t\t[key in keyof Statements]?: Array<\n\t\t\tStatements[key] extends readonly unknown[]\n\t\t\t\t? Statements[key][number]\n\t\t\t\t: never\n\t\t>;\n\t};\n\ttype PermissionExclusive =\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * @deprecated Use `permissions` instead\n\t\t\t\t */\n\t\t\t\tpermission: PermissionType;\n\t\t\t\tpermissions?: never | undefined;\n\t\t }\n\t\t| {\n\t\t\t\tpermissions: PermissionType;\n\t\t\t\tpermission?: never | undefined;\n\t\t };\n\n\tconst roles = {\n\t\tadmin: adminAc,\n\t\tmember: memberAc,\n\t\towner: ownerAc,\n\t\t...options?.roles,\n\t};\n\n\ttype OrganizationReturn = CO[\"teams\"] extends { enabled: true }\n\t\t? {\n\t\t\t\tmembers: InferMember<CO, false>[];\n\t\t\t\tinvitations: InferInvitation<CO>[];\n\t\t\t\tteams: InferTeam<CO, false>[];\n\t\t\t} & InferOrganization<CO, false>\n\t\t: {\n\t\t\t\tmembers: InferMember<CO, false>[];\n\t\t\t\tinvitations: InferInvitation<CO, false>[];\n\t\t\t} & InferOrganization<CO, false>;\n\n\ttype Schema = CO[\"schema\"];\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as OrganizationPlugin<{\n\t\t\tac: CO[\"ac\"] extends AccessControl\n\t\t\t\t? CO[\"ac\"]\n\t\t\t\t: AccessControl<DefaultStatements>;\n\t\t\troles: CO[\"roles\"] extends Record<string, Role>\n\t\t\t\t? CO[\"roles\"]\n\t\t\t\t: {\n\t\t\t\t\t\tadmin: Role;\n\t\t\t\t\t\tmember: Role;\n\t\t\t\t\t\towner: Role;\n\t\t\t\t\t};\n\t\t\tteams: {\n\t\t\t\tenabled: CO[\"teams\"] extends { enabled: true } ? true : false;\n\t\t\t};\n\t\t\tschema: Schema;\n\t\t\tdynamicAccessControl: {\n\t\t\t\tenabled: CO[\"dynamicAccessControl\"] extends { enabled: true }\n\t\t\t\t\t? true\n\t\t\t\t\t: false;\n\t\t\t};\n\t\t}>,\n\t\tgetActions: ($fetch, _$store, co) => ({\n\t\t\t$Infer: {\n\t\t\t\tActiveOrganization: {} as OrganizationReturn,\n\t\t\t\tOrganization: {} as InferOrganization<CO, false>,\n\t\t\t\tInvitation: {} as InferInvitation<CO, false>,\n\t\t\t\tMember: {} as InferMember<CO, false>,\n\t\t\t\tTeam: {} as InferTeam<CO, false>,\n\t\t\t},\n\t\t\torganization: {\n\t\t\t\tcheckRolePermission: <\n\t\t\t\t\tR extends CO extends { roles: any }\n\t\t\t\t\t\t? keyof CO[\"roles\"]\n\t\t\t\t\t\t: \"admin\" | \"member\" | \"owner\",\n\t\t\t\t>(\n\t\t\t\t\tdata: PermissionExclusive & {\n\t\t\t\t\t\trole: R;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tconst isAuthorized = clientSideHasPermission({\n\t\t\t\t\t\trole: data.role as string,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tac: options?.ac,\n\t\t\t\t\t\t\troles: roles,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpermissions: (data.permissions ?? data.permission) as any,\n\t\t\t\t\t});\n\t\t\t\t\treturn isAuthorized;\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst listOrganizations = useAuthQuery<InferOrganization<CO, false>[]>(\n\t\t\t\t$listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInferOrganization<CO, false> & {\n\t\t\t\t\t\tmembers: InferMember<CO, false>[];\n\t\t\t\t\t\tinvitations: InferInvitation<CO, false>[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[$activeOrgSignal],\n\t\t\t\t\"/organization/get-full-organization\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tconst activeMember = useAuthQuery<Member>(\n\t\t\t\t[$activeMemberSignal],\n\t\t\t\t\"/organization/get-active-member\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeMemberRole = useAuthQuery<{ role: string }>(\n\t\t\t\t[$activeMemberRoleSignal],\n\t\t\t\t\"/organization/get-active-member-role\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t$listOrg,\n\t\t\t\t$activeOrgSignal,\n\t\t\t\t$activeMemberSignal,\n\t\t\t\t$activeMemberRoleSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tactiveMember,\n\t\t\t\tactiveMemberRole,\n\t\t\t};\n\t\t},\n\t\tpathMethods: {\n\t\t\t\"/organization/get-full-organization\": \"GET\",\n\t\t\t\"/organization/list-user-teams\": \"GET\",\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" ||\n\t\t\t\t\t\tpath === \"/organization/delete\" ||\n\t\t\t\t\t\tpath === \"/organization/update\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization/set-active\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.includes(\"/organization/update-member-role\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeMemberSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.includes(\"/organization/update-member-role\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeMemberRoleSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport const inferOrgAdditionalFields = <\n\tO extends {\n\t\toptions: BetterAuthOptions;\n\t},\n\tS extends OrganizationOptions[\"schema\"] = undefined,\n>(\n\tschema?: S | undefined,\n) => {\n\ttype FindById<\n\t\tT extends readonly BetterAuthPlugin[],\n\t\tTargetId extends string,\n\t> = Extract<T[number], { id: TargetId }>;\n\n\ttype Auth = O extends { options: any } ? O : { options: { plugins: [] } };\n\n\ttype OrganizationPlugin = FindById<\n\t\t// @ts-expect-error\n\t\tAuth[\"options\"][\"plugins\"],\n\t\t\"organization\"\n\t>;\n\n\t// The server schema can contain more properties other than additionalFields, but the client only supports additionalFields\n\t// if we don't remove all other properties we may see assignability issues\n\n\ttype ExtractClientOnlyFields<T> = {\n\t\t[K in keyof T]: T[K] extends { additionalFields: infer _AF }\n\t\t\t? T[K]\n\t\t\t: undefined;\n\t};\n\n\ttype Schema = O extends Object\n\t\t? O extends Exclude<OrganizationOptions[\"schema\"], undefined>\n\t\t\t? O\n\t\t\t: OrganizationPlugin extends { options: { schema: infer S } }\n\t\t\t\t? S extends OrganizationOptions[\"schema\"]\n\t\t\t\t\t? ExtractClientOnlyFields<S>\n\t\t\t\t\t: undefined\n\t\t\t\t: undefined\n\t\t: undefined;\n\treturn {} as undefined extends S ? Schema : S;\n};\n\nexport type * from \"./schema\";\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { twoFactor as twoFa } from \".\";\n\nexport const twoFactorClient = (\n\toptions?:\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * a redirect function to call if a user needs to verify\n\t\t\t\t * their two factor\n\t\t\t\t */\n\t\t\t\tonTwoFactorRedirect?: () => void | Promise<void>;\n\t\t }\n\t\t| undefined,\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) => path.startsWith(\"/two-factor/\"),\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t\t\"/two-factor/generate-backup-codes\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options?.onTwoFactorRedirect) {\n\t\t\t\t\t\t\t\tawait options.onTwoFactorRedirect();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport type * from \"./backup-codes\";\nexport type * from \"./otp\";\nexport type * from \"./totp\";\nexport type * from \"./types\";\n","import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { username } from \".\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/sign-in/username\",\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { Store, StoreValue } from \"nanostores\";\nimport { listenKeys } from \"nanostores\";\nimport type { DependencyList } from \"react\";\nimport { useCallback, useRef, useSyncExternalStore } from \"react\";\n\ntype StoreKeys<T> = T extends { setKey: (k: infer K, v: any) => unknown }\n\t? K\n\t: never;\n\nexport interface UseStoreOptions<SomeStore> {\n\t/**\n\t * @default\n\t * ```ts\n\t * [store, options.keys]\n\t * ```\n\t */\n\tdeps?: DependencyList | undefined;\n\n\t/**\n\t * Will re-render components only on specific key changes.\n\t */\n\tkeys?: StoreKeys<SomeStore>[] | undefined;\n}\n\n/**\n * Subscribe to store changes and get store's value.\n *\n * Can be used with store builder too.\n *\n * ```js\n * import { useStore } from 'nanostores/react'\n *\n * import { router } from '../store/router'\n *\n * export const Layout = () => {\n * let page = useStore(router)\n * if (page.route === 'home') {\n * return <HomePage />\n * } else {\n * return <Error404 />\n * }\n * }\n * ```\n *\n * @param store Store instance.\n * @returns Store value.\n */\nexport function useStore<SomeStore extends Store>(\n\tstore: SomeStore,\n\toptions: UseStoreOptions<SomeStore> = {},\n): StoreValue<SomeStore> {\n\tlet snapshotRef = useRef<StoreValue<SomeStore>>(store.get());\n\n\tconst { keys, deps = [store, keys] } = options;\n\n\tlet subscribe = useCallback((onChange: () => void) => {\n\t\tconst emitChange = (value: StoreValue<SomeStore>) => {\n\t\t\tif (snapshotRef.current === value) return;\n\t\t\tsnapshotRef.current = value;\n\t\t\tonChange();\n\t\t};\n\n\t\temitChange(store.value);\n\t\tif (keys?.length) {\n\t\t\treturn listenKeys(store as any, keys, emitChange);\n\t\t}\n\t\treturn store.listen(emitChange);\n\t}, deps);\n\n\tlet get = () => snapshotRef.current as StoreValue<SomeStore>;\n\n\treturn useSyncExternalStore(subscribe, get, get);\n}\n","import type {\n\tBetterAuthClientOptions,\n\tBetterAuthClientPlugin,\n} from \"@better-auth/core\";\nimport type { BASE_ERROR_CODES } from \"@better-auth/core/error\";\nimport { capitalizeFirstLetter } from \"@better-auth/core/utils\";\nimport type {\n\tBetterFetchError,\n\tBetterFetchResponse,\n} from \"@better-fetch/fetch\";\nimport type { PrettifyDeep, UnionToIntersection } from \"../../types/helper\";\nimport { getClientConfig } from \"../config\";\nimport { createDynamicPathProxy } from \"../proxy\";\nimport type {\n\tInferActions,\n\tInferClientAPI,\n\tInferErrorCodes,\n\tIsSignal,\n\tSessionQueryParams,\n} from \"../types\";\nimport { useStore } from \"./react-store\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {\n\tplugins: Array<infer Plugin>;\n}\n\t? UnionToIntersection<\n\t\t\tPlugin extends BetterAuthClientPlugin\n\t\t\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}\n\t\t\t\t\t: {}\n\t\t\t\t: {}\n\t\t>\n\t: {};\n\nexport function createAuthClient<Option extends BetterAuthClientOptions>(\n\toptions?: Option | undefined,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\t$store,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\t$store,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\tpluginsAtoms,\n\t\tatomListeners,\n\t);\n\n\ttype ClientAPI = InferClientAPI<Option>;\n\ttype Session = ClientAPI extends {\n\t\tgetSession: () => Promise<infer Res>;\n\t}\n\t\t? Res extends BetterFetchResponse<infer S>\n\t\t\t? S\n\t\t\t: Res\n\t\t: never;\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tClientAPI &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: () => {\n\t\t\t\tdata: Session;\n\t\t\t\tisPending: boolean;\n\t\t\t\tisRefetching: boolean;\n\t\t\t\terror: BetterFetchError | null;\n\t\t\t\trefetch: (\n\t\t\t\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t\t\t\t) => Promise<void>;\n\t\t\t};\n\t\t\t$Infer: {\n\t\t\t\tSession: NonNullable<Session>;\n\t\t\t};\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$store: typeof $store;\n\t\t\t$ERROR_CODES: PrettifyDeep<\n\t\t\t\tInferErrorCodes<Option> & typeof BASE_ERROR_CODES\n\t\t\t>;\n\t\t};\n}\n\nexport { useStore };\nexport type * from \"@better-fetch/fetch\";\nexport type * from \"nanostores\";\nexport type * from \"../../types/helper\";\nexport type { UnionToIntersection } from \"../../types/helper\";\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect, useRef } from \"react\"\n\nimport { useOnSuccessTransition } from \"../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\n\nexport function AuthCallback({ redirectTo }: { redirectTo?: string }) {\n const {\n hooks: { useIsRestoring },\n persistClient\n } = useContext(AuthUIContext)\n\n const isRestoring = useIsRestoring?.()\n const isRedirecting = useRef(false)\n\n const { onSuccess } = useOnSuccessTransition({ redirectTo })\n\n useEffect(() => {\n if (isRedirecting.current) return\n\n if (!persistClient) {\n isRedirecting.current = true\n onSuccess()\n return\n }\n\n if (isRestoring) return\n\n isRedirecting.current = true\n onSuccess()\n }, [isRestoring, persistClient, onSuccess])\n\n return <Loader2 className=\"animate-spin\" />\n}\n","import { useCallback, useContext, useState } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport { getSearchParam } from \"../lib/utils\"\n\nexport function useOnSuccessTransition({\n redirectTo: redirectToProp\n}: {\n redirectTo?: string\n}) {\n const { redirectTo: contextRedirectTo } = useContext(AuthUIContext)\n\n const getRedirectTo = useCallback(\n () =>\n redirectToProp || getSearchParam(\"redirectTo\") || contextRedirectTo,\n [redirectToProp, contextRedirectTo]\n )\n\n const [isPending, setIsPending] = useState(false)\n\n const {\n navigate,\n hooks: { useSession },\n onSessionChange\n } = useContext(AuthUIContext)\n\n const { refetch: refetchSession } = useSession()\n\n const onSuccess = useCallback(async () => {\n setIsPending(true)\n\n await refetchSession?.()\n\n if (onSessionChange) await onSessionChange()\n\n setIsPending(false)\n\n navigate(getRedirectTo())\n }, [refetchSession, onSessionChange, navigate, getRedirectTo])\n\n return { onSuccess, isPending }\n}\n","\"use client\"\n\nimport { useContext, useEffect } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { getViewByPath } from \"../../lib/utils\"\nimport type { AuthViewPath } from \"../../lib/view-paths\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { AuthCallback } from \"./auth-callback\"\nimport { EmailOTPForm } from \"./forms/email-otp-form\"\nimport { EmailVerificationForm } from \"./forms/email-verification-form\"\nimport { ForgotPasswordForm } from \"./forms/forgot-password-form\"\nimport { MagicLinkForm } from \"./forms/magic-link-form\"\nimport { RecoverAccountForm } from \"./forms/recover-account-form\"\nimport { ResetPasswordForm } from \"./forms/reset-password-form\"\nimport { SignInForm } from \"./forms/sign-in-form\"\nimport { SignUpForm } from \"./forms/sign-up-form\"\nimport { TwoFactorForm } from \"./forms/two-factor-form\"\nimport { SignOut } from \"./sign-out\"\n\nexport type AuthFormClassNames = {\n base?: string\n button?: string\n checkbox?: string\n description?: string\n error?: string\n forgotPasswordLink?: string\n icon?: string\n input?: string\n label?: string\n otpInput?: string\n otpInputContainer?: string\n outlineButton?: string\n primaryButton?: string\n providerButton?: string\n qrCode?: string\n secondaryButton?: string\n}\n\nexport interface AuthFormProps {\n className?: string\n classNames?: AuthFormClassNames\n callbackURL?: string\n isSubmitting?: boolean\n localization?: Partial<AuthLocalization>\n pathname?: string\n redirectTo?: string\n view?: AuthViewPath\n otpSeparators?: 0 | 1 | 2\n setIsSubmitting?: (isSubmitting: boolean) => void\n}\n\n/**\n * Render the appropriate authentication UI view based on component props and AuthUIContext feature flags.\n *\n * The component chooses a view from (in priority): the `view` prop, a view resolved from `pathname`, or `\"SIGN_IN\"`, then validates that the view is allowed given enabled features and credentials before rendering the corresponding form component.\n *\n * @param className - Optional base CSS class applied to rendered form components\n * @param classNames - Optional object of per-element CSS class overrides for rendered form components\n * @param callbackURL - Optional URL used by flows that require a callback (magic link, email OTP)\n * @param isSubmitting - Whether a form submission is currently in progress\n * @param localization - Optional localization strings that override context-provided localization\n * @param pathname - Optional path to resolve the active auth view when `view` is not provided\n * @param redirectTo - Optional URL to redirect to after successful authentication\n * @param view - Optional explicit view to render; takes precedence over `pathname`\n * @param otpSeparators - Number of visual separators to render between OTP input groups\n * @param setIsSubmitting - Setter to update the submitting state\n * @returns The React element for the selected authentication view, or `null` if no suitable view is available.\n */\nexport function AuthForm({\n className,\n classNames,\n callbackURL,\n isSubmitting,\n localization,\n pathname,\n redirectTo,\n view,\n otpSeparators = 0,\n setIsSubmitting\n}: AuthFormProps) {\n const {\n basePath,\n credentials,\n localization: contextLocalization,\n magicLink,\n emailOTP,\n signUp,\n twoFactor: twoFactorEnabled,\n viewPaths,\n replace\n } = useContext(AuthUIContext)\n\n const signUpEnabled = !!signUp\n\n localization = { ...contextLocalization, ...localization }\n\n useEffect(() => {\n if (pathname && !getViewByPath(viewPaths, pathname)) {\n console.error(`Invalid auth view: ${pathname}`)\n replace(`${basePath}/${viewPaths.SIGN_IN}${window.location.search}`)\n }\n }, [pathname, viewPaths, basePath, replace])\n\n view =\n view ||\n (getViewByPath(viewPaths, pathname) as AuthViewPath) ||\n \"SIGN_IN\"\n\n // Redirect to appropriate view based on enabled features\n useEffect(() => {\n let isInvalidView = false\n\n if (\n view === \"MAGIC_LINK\" &&\n (!magicLink || (!credentials && !emailOTP))\n ) {\n isInvalidView = true\n }\n\n if (\n view === \"EMAIL_OTP\" &&\n (!emailOTP || (!credentials && !magicLink))\n ) {\n isInvalidView = true\n }\n\n if (view === \"SIGN_UP\" && !signUpEnabled) {\n isInvalidView = true\n }\n\n if (\n !credentials &&\n [\n \"SIGN_UP\",\n \"FORGOT_PASSWORD\",\n \"RESET_PASSWORD\",\n \"TWO_FACTOR\",\n \"RECOVER_ACCOUNT\"\n ].includes(view)\n ) {\n isInvalidView = true\n }\n\n if (\n [\"TWO_FACTOR\", \"RECOVER_ACCOUNT\"].includes(view) &&\n !twoFactorEnabled\n ) {\n isInvalidView = true\n }\n\n if (isInvalidView) {\n replace(`${basePath}/${viewPaths.SIGN_IN}${window.location.search}`)\n }\n }, [\n basePath,\n view,\n viewPaths,\n credentials,\n replace,\n emailOTP,\n signUpEnabled,\n magicLink,\n twoFactorEnabled\n ])\n\n if (view === \"SIGN_OUT\") return <SignOut redirectTo={redirectTo} />\n if (view === \"CALLBACK\") return <AuthCallback redirectTo={redirectTo} />\n\n if (view === \"SIGN_IN\") {\n return credentials ? (\n <SignInForm\n className={className}\n classNames={classNames}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n ) : magicLink ? (\n <MagicLinkForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n ) : emailOTP ? (\n <EmailOTPForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n ) : null\n }\n\n if (view === \"TWO_FACTOR\") {\n return (\n <TwoFactorForm\n className={className}\n classNames={classNames}\n localization={localization}\n otpSeparators={otpSeparators}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"RECOVER_ACCOUNT\") {\n return (\n <RecoverAccountForm\n className={className}\n classNames={classNames}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"MAGIC_LINK\") {\n return (\n <MagicLinkForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"EMAIL_OTP\") {\n return (\n <EmailOTPForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"EMAIL_VERIFICATION\") {\n return (\n <EmailVerificationForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n otpSeparators={otpSeparators}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"FORGOT_PASSWORD\") {\n return (\n <ForgotPasswordForm\n className={className}\n classNames={classNames}\n localization={localization}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n }\n\n if (view === \"RESET_PASSWORD\") {\n return (\n <ResetPasswordForm\n className={className}\n classNames={classNames}\n localization={localization}\n />\n )\n }\n\n if (view === \"SIGN_UP\") {\n return (\n signUpEnabled && (\n <SignUpForm\n className={className}\n classNames={classNames}\n callbackURL={callbackURL}\n localization={localization}\n redirectTo={redirectTo}\n isSubmitting={isSubmitting}\n setIsSubmitting={setIsSubmitting}\n />\n )\n )\n }\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { BetterFetchOption } from \"better-auth/react\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { useCaptcha } from \"../../../hooks/use-captcha\"\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Captcha } from \"../../captcha/captcha\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport { InputOTP } from \"../../ui/input-otp\"\nimport type { AuthFormClassNames } from \"../auth-form\"\nimport { OTPInputGroup } from \"../otp-input-group\"\n\nexport interface EmailOTPFormProps {\n className?: string\n classNames?: AuthFormClassNames\n callbackURL?: string\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n otpSeparators?: 0 | 1 | 2\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n}\n\nexport function EmailOTPForm(props: EmailOTPFormProps) {\n const [email, setEmail] = useState<string | undefined>()\n\n if (!email) {\n return <EmailForm {...props} setEmail={setEmail} />\n }\n\n return <OTPForm {...props} email={email} />\n}\n\nfunction EmailForm({\n className,\n classNames,\n isSubmitting,\n localization,\n setIsSubmitting,\n setEmail\n}: EmailOTPFormProps & {\n setEmail: (email: string) => void\n}) {\n const isHydrated = useIsHydrated()\n const { captchaRef, getCaptchaHeaders } = useCaptcha({ localization })\n\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const formSchema = z.object({\n email: z.string().email({\n message: `${localization.EMAIL} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\"\n }\n })\n\n isSubmitting = isSubmitting || form.formState.isSubmitting\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting)\n }, [form.formState.isSubmitting, setIsSubmitting])\n\n async function sendEmailOTP({ email }: z.infer<typeof formSchema>) {\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/email-otp/send-verification-otp\")\n }\n\n try {\n await authClient.emailOtp.sendVerificationOtp({\n email,\n type: \"sign-in\",\n fetchOptions\n })\n\n toast({\n variant: \"success\",\n message: localization.EMAIL_OTP_VERIFICATION_SENT\n })\n\n setEmail(email)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(sendEmailOTP)}\n noValidate={isHydrated}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n className={classNames?.input}\n type=\"email\"\n placeholder={localization.EMAIL_PLACEHOLDER}\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <Captcha\n ref={captchaRef}\n localization={localization}\n action=\"/email-otp/send-verification-otp\"\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.EMAIL_OTP_SEND_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n\nexport function OTPForm({\n className,\n classNames,\n isSubmitting,\n localization,\n otpSeparators = 0,\n redirectTo,\n setIsSubmitting,\n email\n}: EmailOTPFormProps & {\n email: string\n}) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n const formSchema = z.object({\n code: z\n .string()\n .min(1, {\n message: `${localization.EMAIL_OTP} ${localization.IS_REQUIRED}`\n })\n .min(6, {\n message: `${localization.EMAIL_OTP} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n code: \"\"\n }\n })\n\n isSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n async function verifyCode({ code }: z.infer<typeof formSchema>) {\n try {\n await authClient.signIn.emailOtp({\n email,\n otp: code,\n fetchOptions: { throw: true }\n })\n\n await onSuccess()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.reset()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(verifyCode)}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL_OTP}\n </FormLabel>\n\n <FormControl>\n <InputOTP\n {...field}\n maxLength={6}\n onChange={(value) => {\n field.onChange(value)\n\n if (value.length === 6) {\n form.handleSubmit(verifyCode)()\n }\n }}\n containerClassName={\n classNames?.otpInputContainer\n }\n className={classNames?.otpInput}\n disabled={isSubmitting}\n >\n <OTPInputGroup\n otpSeparators={otpSeparators}\n />\n </InputOTP>\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <div className=\"grid gap-4\">\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting && <Loader2 className=\"animate-spin\" />}\n {localization.EMAIL_OTP_VERIFY_ACTION}\n </Button>\n </div>\n </form>\n </Form>\n )\n}\n","import type { CaptchaFoxInstance } from \"@captchafox/react\"\nimport type HCaptcha from \"@hcaptcha/react-hcaptcha\"\nimport type { TurnstileInstance } from \"@marsidev/react-turnstile\"\nimport { useGoogleReCaptcha } from \"@wojtekmaj/react-recaptcha-v3\"\nimport { type RefObject, useContext, useRef } from \"react\"\nimport type ReCAPTCHA from \"react-google-recaptcha\"\n\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport type { AuthLocalization } from \"../localization/auth-localization\"\n\n// Default captcha endpoints\nconst DEFAULT_CAPTCHA_ENDPOINTS = [\n \"/sign-up/email\",\n \"/sign-in/email\",\n \"/forget-password\"\n]\n\n// Sanitize action name for reCAPTCHA\n// Google reCAPTCHA only allows A-Za-z/_ in action names\nconst sanitizeActionName = (action: string): string => {\n // First remove leading slash if present\n let result = action.startsWith(\"/\") ? action.substring(1) : action\n\n // Convert both kebab-case and path separators to camelCase\n // Example: \"/sign-in/email\" becomes \"signInEmail\"\n result = result\n .replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n .replace(/\\/([a-z])/g, (_, letter) => letter.toUpperCase())\n .replace(/\\//g, \"\")\n .replace(/[^A-Za-z0-9_]/g, \"\")\n\n return result\n}\n\nexport function useCaptcha({\n localization\n}: {\n localization: Partial<AuthLocalization>\n}) {\n const { captcha, localization: contextLocalization } =\n useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n // biome-ignore lint/suspicious/noExplicitAny: ignore\n const captchaRef = useRef<any>(null)\n const { executeRecaptcha } = useGoogleReCaptcha()\n\n const executeCaptcha = async (action: string) => {\n if (!captcha) throw new Error(localization.MISSING_RESPONSE)\n\n // Sanitize the action name for reCAPTCHA\n let response: string | undefined | null\n\n switch (captcha.provider) {\n case \"google-recaptcha-v3\": {\n const sanitizedAction = sanitizeActionName(action)\n response = await executeRecaptcha?.(sanitizedAction)\n break\n }\n case \"google-recaptcha-v2-checkbox\": {\n const recaptchaRef = captchaRef as RefObject<ReCAPTCHA>\n response = recaptchaRef.current.getValue()\n break\n }\n case \"google-recaptcha-v2-invisible\": {\n const recaptchaRef = captchaRef as RefObject<ReCAPTCHA>\n response = await recaptchaRef.current.executeAsync()\n break\n }\n case \"cloudflare-turnstile\": {\n const turnstileRef = captchaRef as RefObject<TurnstileInstance>\n response = turnstileRef.current.getResponse()\n break\n }\n case \"hcaptcha\": {\n const hcaptchaRef = captchaRef as RefObject<HCaptcha>\n response = hcaptchaRef.current.getResponse()\n break\n }\n case \"captchafox\": {\n const captchafoxRef =\n captchaRef as RefObject<CaptchaFoxInstance>\n response = captchafoxRef.current.getResponse()\n break\n }\n }\n\n if (!response) {\n throw new Error(localization.MISSING_RESPONSE)\n }\n\n return response\n }\n\n const getCaptchaHeaders = async (action: string) => {\n if (!captcha) return undefined\n\n // Use custom endpoints if provided, otherwise use defaults\n const endpoints = captcha.endpoints || DEFAULT_CAPTCHA_ENDPOINTS\n\n // Only execute captcha if the action is in the endpoints list\n if (endpoints.includes(action)) {\n return { \"x-captcha-response\": await executeCaptcha(action) }\n }\n\n return undefined\n }\n\n const resetCaptcha = () => {\n if (!captcha) return\n\n switch (captcha.provider) {\n case \"google-recaptcha-v3\": {\n // No widget to reset; token is generated per execute call\n break\n }\n case \"google-recaptcha-v2-checkbox\":\n case \"google-recaptcha-v2-invisible\": {\n const recaptchaRef = captchaRef as RefObject<ReCAPTCHA>\n recaptchaRef.current?.reset?.()\n break\n }\n case \"cloudflare-turnstile\": {\n const turnstileRef = captchaRef as RefObject<TurnstileInstance>\n // Some versions expose reset on the instance\n // biome-ignore lint/suspicious/noExplicitAny: defensive\n ;(turnstileRef.current as any)?.reset?.()\n break\n }\n case \"hcaptcha\": {\n const hcaptchaRef = captchaRef as RefObject<HCaptcha>\n // HCaptcha uses resetCaptcha()\n hcaptchaRef.current?.resetCaptcha?.()\n break\n }\n case \"captchafox\": {\n const captchafoxRef =\n captchaRef as RefObject<CaptchaFoxInstance>\n captchafoxRef.current?.reset?.()\n break\n }\n }\n }\n\n return {\n captchaRef,\n getCaptchaHeaders,\n resetCaptcha\n }\n}\n","import { CaptchaFox } from \"@captchafox/react\"\nimport HCaptcha from \"@hcaptcha/react-hcaptcha\"\nimport { Turnstile } from \"@marsidev/react-turnstile\"\nimport { type RefObject, useContext } from \"react\"\n\nimport { useTheme } from \"../../hooks/use-theme\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { RecaptchaBadge } from \"./recaptcha-badge\"\nimport { RecaptchaV2 } from \"./recaptcha-v2\"\n\n// Default captcha endpoints\nconst DEFAULT_CAPTCHA_ENDPOINTS = [\n \"/sign-up/email\",\n \"/sign-in/email\",\n \"/forget-password\"\n]\n\ninterface CaptchaProps {\n // biome-ignore lint/suspicious/noExplicitAny: ignore\n ref: RefObject<any>\n localization: Partial<AuthLocalization>\n action?: string // Optional action to check if it's in the endpoints list\n}\n\nexport function Captcha({ ref, localization, action }: CaptchaProps) {\n const { captcha } = useContext(AuthUIContext)\n if (!captcha) return null\n\n // If action is provided, check if it's in the list of captcha-enabled endpoints\n if (action) {\n const endpoints = captcha.endpoints || DEFAULT_CAPTCHA_ENDPOINTS\n if (!endpoints.includes(action)) {\n return null\n }\n }\n\n const { theme } = useTheme()\n\n const showRecaptchaV2 =\n captcha.provider === \"google-recaptcha-v2-checkbox\" ||\n captcha.provider === \"google-recaptcha-v2-invisible\"\n\n const showRecaptchaBadge =\n captcha.provider === \"google-recaptcha-v3\" ||\n captcha.provider === \"google-recaptcha-v2-invisible\"\n\n const showTurnstile = captcha.provider === \"cloudflare-turnstile\"\n\n const showHCaptcha = captcha.provider === \"hcaptcha\"\n\n const showCaptchaFox = captcha.provider === \"captchafox\"\n\n return (\n <>\n {showRecaptchaV2 && <RecaptchaV2 ref={ref} />}\n {showRecaptchaBadge && (\n <RecaptchaBadge localization={localization} />\n )}\n {showTurnstile && (\n <Turnstile\n className=\"mx-auto\"\n ref={ref}\n siteKey={captcha.siteKey}\n options={{\n theme: theme,\n size: \"flexible\"\n }}\n />\n )}\n {showHCaptcha && (\n <div className=\"mx-auto\">\n <HCaptcha\n ref={ref}\n sitekey={captcha.siteKey}\n theme={theme}\n />\n </div>\n )}\n {showCaptchaFox && (\n <div className=\"mx-auto\">\n <CaptchaFox\n ref={ref}\n sitekey={captcha.siteKey}\n theme={theme}\n />\n </div>\n )}\n </>\n )\n}\n","import { useContext } from \"react\"\nimport { useIsHydrated } from \"../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\n\nexport interface RecaptchaBadgeProps {\n className?: string\n localization?: Partial<AuthLocalization>\n}\n\nexport function RecaptchaBadge({\n className,\n localization: propLocalization\n}: RecaptchaBadgeProps) {\n const isHydrated = useIsHydrated()\n const { captcha, localization: contextLocalization } =\n useContext(AuthUIContext)\n const localization = { ...contextLocalization, ...propLocalization }\n\n if (!captcha) return null\n\n if (!captcha.hideBadge) {\n return isHydrated ? (\n <style>{`\n .grecaptcha-badge { visibility: visible !important; }\n `}</style>\n ) : null\n }\n\n return (\n <>\n <style>{`\n .grecaptcha-badge { visibility: hidden; }\n `}</style>\n\n <p className={cn(\"text-muted-foreground text-xs\", className)}>\n {localization.PROTECTED_BY_RECAPTCHA}{\" \"}\n {localization.BY_CONTINUING_YOU_AGREE} Google{\" \"}\n <a\n className=\"text-foreground hover:underline\"\n href=\"https://policies.google.com/privacy\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {localization.PRIVACY_POLICY}\n </a>{\" \"}\n &{\" \"}\n <a\n className=\"text-foreground hover:underline\"\n href=\"https://policies.google.com/terms\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {localization.TERMS_OF_SERVICE}\n </a>\n .\n </p>\n </>\n )\n}\n","import { type RefObject, useContext, useEffect } from \"react\"\nimport ReCAPTCHA from \"react-google-recaptcha\"\nimport { useLang } from \"../../hooks/use-lang\"\nimport { useTheme } from \"../../hooks/use-theme\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\n\nexport function RecaptchaV2({ ref }: { ref: RefObject<ReCAPTCHA | null> }) {\n const { captcha } = useContext(AuthUIContext)\n const { theme } = useTheme()\n const { lang } = useLang()\n\n useEffect(() => {\n // biome-ignore lint/suspicious/noExplicitAny: ignore\n ;(window as any).recaptchaOptions = {\n useRecaptchaNet: captcha?.recaptchaNet,\n enterprise: captcha?.enterprise\n }\n }, [captcha])\n\n if (!captcha) return null\n\n return (\n <>\n <style>{`\n .grecaptcha-badge {\n border-radius: var(--radius) !important;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow) !important;\n border-style: var(--tw-border-style) !important;\n border-width: 1px;\n }\n\n .dark .grecaptcha-badge {\n border-color: var(--input) !important;\n }\n `}</style>\n\n <ReCAPTCHA\n ref={ref}\n key={`${theme}-${lang}-${captcha.provider}`}\n sitekey={captcha.siteKey}\n theme={theme}\n hl={lang}\n size={\n captcha.provider === \"google-recaptcha-v2-invisible\"\n ? \"invisible\"\n : \"normal\"\n }\n className={cn(\n captcha.provider === \"google-recaptcha-v2-invisible\"\n ? \"absolute\"\n : \"mx-auto h-[76px] w-[302px] overflow-hidden rounded bg-muted\"\n )}\n />\n </>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","\"use client\"\n\nimport { InputOTPGroup, InputOTPSeparator, InputOTPSlot } from \"../ui/input-otp\"\n\nexport function OTPInputGroup({\n otpSeparators = 0\n}: {\n otpSeparators?: 0 | 1 | 2\n}) {\n if (otpSeparators === 0) {\n return (\n <InputOTPGroup>\n <InputOTPSlot index={0} />\n <InputOTPSlot index={1} />\n <InputOTPSlot index={2} />\n <InputOTPSlot index={3} />\n <InputOTPSlot index={4} />\n <InputOTPSlot index={5} />\n </InputOTPGroup>\n )\n }\n\n if (otpSeparators === 1) {\n return (\n <>\n <InputOTPGroup>\n <InputOTPSlot index={0} />\n <InputOTPSlot index={1} />\n <InputOTPSlot index={2} />\n </InputOTPGroup>\n\n <InputOTPSeparator />\n\n <InputOTPGroup>\n <InputOTPSlot index={3} />\n <InputOTPSlot index={4} />\n <InputOTPSlot index={5} />\n </InputOTPGroup>\n </>\n )\n }\n\n return (\n <>\n <InputOTPGroup>\n <InputOTPSlot index={0} />\n <InputOTPSlot index={1} />\n </InputOTPGroup>\n\n <InputOTPSeparator />\n\n <InputOTPGroup>\n <InputOTPSlot index={2} />\n <InputOTPSlot index={3} />\n </InputOTPGroup>\n\n <InputOTPSeparator />\n\n <InputOTPGroup>\n <InputOTPSlot index={4} />\n <InputOTPSlot index={5} />\n </InputOTPGroup>\n </>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { InputOTP } from \"../../ui/input-otp\"\nimport type { AuthFormClassNames } from \"../auth-form\"\nimport { OTPInputGroup } from \"../otp-input-group\"\n\nexport interface EmailVerificationFormProps {\n className?: string\n classNames?: AuthFormClassNames\n callbackURL?: string\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n otpSeparators?: 0 | 1 | 2\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n onCancel?: () => void\n}\n\nexport function EmailVerificationForm({\n onCancel,\n localization,\n className,\n classNames,\n otpSeparators,\n callbackURL,\n isSubmitting,\n redirectTo,\n setIsSubmitting\n}: EmailVerificationFormProps) {\n const [resendDisabled, setResendDisabled] = useState(true)\n const [countdown, setCountdown] = useState(30)\n\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors,\n navigate,\n basePath,\n viewPaths\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const email =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search).get(\"email\") || \"\"\n : \"\"\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n const formSchema = z.object({\n code: z\n .string()\n .min(1, {\n message: `${localization.EMAIL_OTP} ${localization.IS_REQUIRED}`\n })\n .min(6, {\n message: `${localization.EMAIL_OTP} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n code: \"\"\n }\n })\n\n const currentIsSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n useEffect(() => {\n if (countdown > 0) {\n const timer = setTimeout(() => setCountdown(countdown - 1), 1000)\n return () => clearTimeout(timer)\n } else {\n setResendDisabled(false)\n }\n }, [countdown])\n\n async function verifyCode({ code }: z.infer<typeof formSchema>) {\n try {\n const data = await authClient.emailOtp.verifyEmail({\n email,\n otp: code,\n fetchOptions: { throw: true }\n })\n\n if (\"token\" in data && data.token) {\n await onSuccess()\n } else {\n navigate(\n `${basePath}/${viewPaths.SIGN_IN}${window.location.search}`\n )\n toast({\n variant: \"success\",\n message: localization.EMAIL_VERIFICATION_SUCCESS!\n })\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.reset()\n }\n }\n\n async function resendCode() {\n if (resendDisabled) return\n\n setResendDisabled(true)\n setCountdown(30)\n\n try {\n await authClient.emailOtp.sendVerificationOtp({\n email,\n type: \"email-verification\",\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.EMAIL_OTP_VERIFICATION_SENT!\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n setResendDisabled(false)\n setCountdown(0)\n }\n }\n\n if (!email) {\n return (\n <div className={cn(\"grid w-full gap-6\", className)}>\n <div className=\"text-center\">\n <h2 className=\"font-semibold text-destructive text-lg\">\n Invalid Request\n </h2>\n <p className=\"text-muted-foreground text-sm\">\n {localization.EMAIL_REQUIRED ||\n \"Email address is required\"}\n </p>\n </div>\n </div>\n )\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(verifyCode)}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL_OTP}\n </FormLabel>\n\n <FormControl>\n <InputOTP\n {...field}\n maxLength={6}\n onChange={(value) => {\n field.onChange(value)\n\n if (value.length === 6) {\n form.handleSubmit(verifyCode)()\n }\n }}\n containerClassName={\n classNames?.otpInputContainer\n }\n className={classNames?.otpInput}\n disabled={currentIsSubmitting}\n >\n <OTPInputGroup\n otpSeparators={otpSeparators}\n />\n </InputOTP>\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <div className=\"grid gap-4\">\n <Button\n type=\"submit\"\n disabled={currentIsSubmitting}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {currentIsSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n {localization.EMAIL_OTP_VERIFY_ACTION}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={resendCode}\n disabled={resendDisabled || currentIsSubmitting}\n className={cn(\"w-full\", classNames?.button)}\n >\n {resendDisabled\n ? `${localization.RESEND_VERIFICATION_EMAIL} (${countdown}s)`\n : localization.RESEND_VERIFICATION_EMAIL}\n </Button>\n\n {onCancel && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onCancel}\n disabled={currentIsSubmitting}\n className=\"w-full\"\n >\n {localization.CANCEL}\n </Button>\n )}\n </div>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { BetterFetchOption } from \"better-auth/react\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { useCaptcha } from \"../../../hooks/use-captcha\"\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Captcha } from \"../../captcha/captcha\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface ForgotPasswordFormProps {\n className?: string\n classNames?: AuthFormClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n setIsSubmitting?: (value: boolean) => void\n}\n\nexport function ForgotPasswordForm({\n className,\n classNames,\n isSubmitting,\n localization,\n setIsSubmitting\n}: ForgotPasswordFormProps) {\n const isHydrated = useIsHydrated()\n const { captchaRef, getCaptchaHeaders, resetCaptcha } = useCaptcha({\n localization\n })\n\n const {\n authClient,\n basePath,\n baseURL,\n localization: contextLocalization,\n navigate,\n toast,\n viewPaths,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const formSchema = z.object({\n email: z\n .string()\n .email({\n message: `${localization.EMAIL} ${localization.IS_INVALID}`\n })\n .min(1, {\n message: `${localization.EMAIL} ${localization.IS_REQUIRED}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\"\n }\n })\n\n isSubmitting = isSubmitting || form.formState.isSubmitting\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting)\n }, [form.formState.isSubmitting, setIsSubmitting])\n\n async function forgotPassword({ email }: z.infer<typeof formSchema>) {\n try {\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/forget-password\")\n }\n\n await authClient.requestPasswordReset({\n email,\n redirectTo: `${baseURL}${basePath}/${viewPaths.RESET_PASSWORD}`,\n fetchOptions\n })\n\n toast({\n variant: \"success\",\n message: localization.FORGOT_PASSWORD_EMAIL\n })\n\n navigate(\n `${basePath}/${viewPaths.SIGN_IN}${window.location.search}`\n )\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n resetCaptcha()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(forgotPassword)}\n noValidate={isHydrated}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n className={classNames?.input}\n type=\"email\"\n placeholder={localization.EMAIL_PLACEHOLDER}\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <Captcha\n ref={captchaRef}\n localization={localization}\n action=\"/forget-password\"\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.FORGOT_PASSWORD_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { BetterFetchOption } from \"better-auth/react\"\nimport { Loader2 } from \"lucide-react\"\nimport { useCallback, useContext, useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useCaptcha } from \"../../../hooks/use-captcha\"\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError, getSearchParam } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Captcha } from \"../../captcha/captcha\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface MagicLinkFormProps {\n className?: string\n classNames?: AuthFormClassNames\n callbackURL?: string\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n}\n\nexport function MagicLinkForm({\n className,\n classNames,\n callbackURL: callbackURLProp,\n isSubmitting,\n localization,\n redirectTo: redirectToProp,\n setIsSubmitting\n}: MagicLinkFormProps) {\n const isHydrated = useIsHydrated()\n const { captchaRef, getCaptchaHeaders, resetCaptcha } = useCaptcha({\n localization\n })\n\n const {\n authClient,\n basePath,\n baseURL,\n persistClient,\n localization: contextLocalization,\n redirectTo: contextRedirectTo,\n viewPaths,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const getRedirectTo = useCallback(\n () =>\n redirectToProp || getSearchParam(\"redirectTo\") || contextRedirectTo,\n [redirectToProp, contextRedirectTo]\n )\n\n const getCallbackURL = useCallback(\n () =>\n `${baseURL}${\n callbackURLProp ||\n (persistClient\n ? `${basePath}/${viewPaths.CALLBACK}?redirectTo=${encodeURIComponent(getRedirectTo())}`\n : getRedirectTo())\n }`,\n [\n callbackURLProp,\n persistClient,\n basePath,\n viewPaths,\n baseURL,\n getRedirectTo\n ]\n )\n\n const formSchema = z.object({\n email: z.string().email({\n message: `${localization.EMAIL} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\"\n }\n })\n\n isSubmitting = isSubmitting || form.formState.isSubmitting\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting)\n }, [form.formState.isSubmitting, setIsSubmitting])\n\n async function sendMagicLink({ email }: z.infer<typeof formSchema>) {\n try {\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/sign-in/magic-link\")\n }\n\n await authClient.signIn.magicLink({\n email,\n callbackURL: getCallbackURL(),\n fetchOptions\n })\n\n toast({\n variant: \"success\",\n message: localization.MAGIC_LINK_EMAIL\n })\n\n form.reset()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n resetCaptcha()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(sendMagicLink)}\n noValidate={isHydrated}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n className={classNames?.input}\n type=\"email\"\n placeholder={localization.EMAIL_PLACEHOLDER}\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <Captcha\n ref={captchaRef}\n localization={localization}\n action=\"/sign-in/magic-link\"\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.MAGIC_LINK_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface RecoverAccountFormProps {\n className?: string\n classNames?: AuthFormClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n}\n\nexport function RecoverAccountForm({\n className,\n classNames,\n isSubmitting,\n localization,\n redirectTo,\n setIsSubmitting\n}: RecoverAccountFormProps) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n const formSchema = z.object({\n code: z.string().min(1, { message: localization.BACKUP_CODE_REQUIRED })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n code: \"\"\n }\n })\n\n isSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n async function verifyBackupCode({ code }: z.infer<typeof formSchema>) {\n try {\n await authClient.twoFactor.verifyBackupCode({\n code,\n fetchOptions: { throw: true }\n })\n\n await onSuccess()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.reset()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(verifyBackupCode)}\n className={cn(\"grid gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.BACKUP_CODE}\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={\n localization.BACKUP_CODE_PLACEHOLDER\n }\n autoComplete=\"off\"\n className={classNames?.input}\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.RECOVER_ACCOUNT_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect, useRef } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError, getPasswordSchema } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { PasswordValidation } from \"../../../types/password-validation\"\nimport { PasswordInput } from \"../../password-input\"\nimport { Button } from \"../../ui/button\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface ResetPasswordFormProps {\n className?: string\n classNames?: AuthFormClassNames\n localization: Partial<AuthLocalization>\n passwordValidation?: PasswordValidation\n}\n\nexport function ResetPasswordForm({\n className,\n classNames,\n localization,\n passwordValidation\n}: ResetPasswordFormProps) {\n const tokenChecked = useRef(false)\n\n const {\n authClient,\n basePath,\n credentials,\n localization: contextLocalization,\n viewPaths,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const confirmPasswordEnabled = credentials?.confirmPassword\n const contextPasswordValidation = credentials?.passwordValidation\n\n localization = { ...contextLocalization, ...localization }\n passwordValidation = { ...contextPasswordValidation, ...passwordValidation }\n\n const formSchema = z\n .object({\n newPassword: getPasswordSchema(passwordValidation, {\n PASSWORD_REQUIRED: localization.NEW_PASSWORD_REQUIRED,\n PASSWORD_TOO_SHORT: localization.PASSWORD_TOO_SHORT,\n PASSWORD_TOO_LONG: localization.PASSWORD_TOO_LONG,\n INVALID_PASSWORD: localization.INVALID_PASSWORD\n }),\n confirmPassword: confirmPasswordEnabled\n ? getPasswordSchema(passwordValidation, {\n PASSWORD_REQUIRED: localization.CONFIRM_PASSWORD_REQUIRED,\n PASSWORD_TOO_SHORT: localization.PASSWORD_TOO_SHORT,\n PASSWORD_TOO_LONG: localization.PASSWORD_TOO_LONG,\n INVALID_PASSWORD: localization.INVALID_PASSWORD\n })\n : z.string().optional()\n })\n .refine(\n (data) =>\n !confirmPasswordEnabled ||\n data.newPassword === data.confirmPassword,\n {\n message: localization.PASSWORDS_DO_NOT_MATCH,\n path: [\"confirmPassword\"]\n }\n )\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n newPassword: \"\",\n confirmPassword: \"\"\n }\n })\n\n const isSubmitting = form.formState.isSubmitting\n\n useEffect(() => {\n if (tokenChecked.current) return\n tokenChecked.current = true\n\n const searchParams = new URLSearchParams(window.location.search)\n const token = searchParams.get(\"token\")\n\n if (!token || token === \"INVALID_TOKEN\") {\n navigate(\n `${basePath}/${viewPaths.SIGN_IN}${window.location.search}`\n )\n toast({ variant: \"error\", message: localization.INVALID_TOKEN })\n }\n }, [basePath, navigate, toast, viewPaths, localization])\n\n async function resetPassword({ newPassword }: z.infer<typeof formSchema>) {\n try {\n const searchParams = new URLSearchParams(window.location.search)\n const token = searchParams.get(\"token\") as string\n\n await authClient.resetPassword({\n newPassword,\n token,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.RESET_PASSWORD_SUCCESS\n })\n\n navigate(\n `${basePath}/${viewPaths.SIGN_IN}${window.location.search}`\n )\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.reset()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(resetPassword)}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"newPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.NEW_PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n autoComplete=\"new-password\"\n className={classNames?.input}\n placeholder={\n localization.NEW_PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n {confirmPasswordEnabled && (\n <FormField\n control={form.control}\n name=\"confirmPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.CONFIRM_PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n autoComplete=\"new-password\"\n className={classNames?.input}\n placeholder={\n localization.CONFIRM_PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n )}\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.RESET_PASSWORD_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport type { BetterFetchOption } from \"@better-fetch/fetch\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useCaptcha } from \"../../../hooks/use-captcha\"\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport {\n cn,\n getLocalizedError,\n getPasswordSchema,\n isValidEmail\n} from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { PasswordValidation } from \"../../../types/password-validation\"\nimport { Captcha } from \"../../captcha/captcha\"\nimport { PasswordInput } from \"../../password-input\"\nimport { Button } from \"../../ui/button\"\nimport { Checkbox } from \"../../ui/checkbox\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface SignInFormProps {\n className?: string\n classNames?: AuthFormClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n redirectTo?: string\n setIsSubmitting?: (isSubmitting: boolean) => void\n passwordValidation?: PasswordValidation\n}\n\nexport function SignInForm({\n className,\n classNames,\n isSubmitting,\n localization,\n redirectTo,\n setIsSubmitting,\n passwordValidation\n}: SignInFormProps) {\n const isHydrated = useIsHydrated()\n const { captchaRef, getCaptchaHeaders, resetCaptcha } = useCaptcha({\n localization\n })\n\n const {\n authClient,\n basePath,\n credentials,\n localization: contextLocalization,\n viewPaths,\n navigate,\n toast,\n Link,\n localizeErrors,\n emailVerification\n } = useContext(AuthUIContext)\n\n const rememberMeEnabled = credentials?.rememberMe\n const usernameEnabled = credentials?.username\n const contextPasswordValidation = credentials?.passwordValidation\n\n localization = { ...contextLocalization, ...localization }\n passwordValidation = { ...contextPasswordValidation, ...passwordValidation }\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n const formSchema = z.object({\n email: usernameEnabled\n ? z.string().min(1, {\n message: `${localization.USERNAME} ${localization.IS_REQUIRED}`\n })\n : z.string().email({\n message: `${localization.EMAIL} ${localization.IS_INVALID}`\n }),\n password: getPasswordSchema(passwordValidation, localization),\n rememberMe: z.boolean().optional()\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: !rememberMeEnabled\n }\n })\n\n isSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n async function signIn({\n email,\n password,\n rememberMe\n }: z.infer<typeof formSchema>) {\n try {\n let response: Record<string, unknown> = {}\n\n if (usernameEnabled && !isValidEmail(email)) {\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/sign-in/username\")\n }\n\n response = await authClient.signIn.username({\n username: email,\n password,\n rememberMe,\n fetchOptions\n })\n } else {\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/sign-in/email\")\n }\n\n response = await authClient.signIn.email({\n email,\n password,\n rememberMe,\n fetchOptions\n })\n }\n\n if (response.twoFactorRedirect) {\n navigate(\n `${basePath}/${viewPaths.TWO_FACTOR}${window.location.search}`\n )\n } else {\n await onSuccess()\n }\n } catch (error) {\n form.resetField(\"password\")\n resetCaptcha()\n\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n if (\n emailVerification?.otp &&\n (error as { error?: { code?: string; message?: string } })\n ?.error?.code === \"EMAIL_NOT_VERIFIED\"\n ) {\n navigate(\n `${basePath}/${\n viewPaths.EMAIL_VERIFICATION\n }?email=${encodeURIComponent(email)}`\n )\n }\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(signIn)}\n noValidate={isHydrated}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {usernameEnabled\n ? localization.USERNAME\n : localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n autoComplete={\n usernameEnabled ? \"username\" : \"email\"\n }\n className={classNames?.input}\n type={usernameEnabled ? \"text\" : \"email\"}\n placeholder={\n usernameEnabled\n ? localization.SIGN_IN_USERNAME_PLACEHOLDER\n : localization.EMAIL_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"password\"\n render={({ field }) => (\n <FormItem>\n <div className=\"flex items-center justify-between\">\n <FormLabel className={classNames?.label}>\n {localization.PASSWORD}\n </FormLabel>\n\n {credentials?.forgotPassword && (\n <Link\n className={cn(\n \"text-sm hover:underline\",\n classNames?.forgotPasswordLink\n )}\n href={`${basePath}/${viewPaths.FORGOT_PASSWORD}${\n isHydrated\n ? window.location.search\n : \"\"\n }`}\n >\n {localization.FORGOT_PASSWORD_LINK}\n </Link>\n )}\n </div>\n\n <FormControl>\n <PasswordInput\n autoComplete=\"current-password\"\n className={classNames?.input}\n placeholder={\n localization.PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n {rememberMeEnabled && (\n <FormField\n control={form.control}\n name=\"rememberMe\"\n render={({ field }) => (\n <FormItem className=\"flex\">\n <FormControl>\n <Checkbox\n checked={field.value}\n onCheckedChange={field.onChange}\n disabled={isSubmitting}\n />\n </FormControl>\n\n <FormLabel>\n {localization.REMEMBER_ME}\n </FormLabel>\n </FormItem>\n )}\n />\n )}\n\n <Captcha\n ref={captchaRef}\n localization={localization}\n action=\"/sign-in/email\"\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.SIGN_IN_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { BetterFetchOption } from \"better-auth/react\"\nimport { Loader2, Trash2Icon, UploadCloudIcon } from \"lucide-react\"\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useCaptcha } from \"../../../hooks/use-captcha\"\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { fileToBase64, resizeAndCropImage } from \"../../../lib/image-utils\"\nimport {\n cn,\n getLocalizedError,\n getPasswordSchema,\n getSearchParam\n} from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { PasswordValidation } from \"../../../types/password-validation\"\nimport { Captcha } from \"../../captcha/captcha\"\nimport { PasswordInput } from \"../../password-input\"\nimport { Button } from \"../../ui/button\"\nimport { Checkbox } from \"../../ui/checkbox\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../../ui/dropdown-menu\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { Input } from \"../../ui/input\"\nimport { Textarea } from \"../../ui/textarea\"\nimport { UserAvatar } from \"../../user-avatar\"\nimport type { AuthFormClassNames } from \"../auth-form\"\n\nexport interface SignUpFormProps {\n className?: string\n classNames?: AuthFormClassNames\n callbackURL?: string\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n passwordValidation?: PasswordValidation\n}\n\n/**\n * Render a configurable sign-up form that handles standard and dynamic additional fields, avatar upload, CAPTCHA integration, validation, and submission flow.\n *\n * @param className - Additional container className applied to the form element\n * @param classNames - Optional className overrides for specific form elements (labels, inputs, buttons, etc.)\n * @param callbackURL - Optional explicit callback URL to include in the sign-up request; if omitted a callback is derived from app configuration and redirectTo\n * @param isSubmitting - External submitting state to disable inputs and show loading UI\n * @param localization - Localization overrides for labels, placeholders, and messages used by the form\n * @param redirectTo - Optional URL to redirect to after successful sign-up (overrides configured redirect)\n * @param setIsSubmitting - Optional callback invoked with the form's submitting state (useful for parent components)\n * @param passwordValidation - Optional password validation rules to customize password constraints and messages\n * @returns A JSX element that renders the fully wired sign-up form UI\n */\nexport function SignUpForm({\n className,\n classNames,\n callbackURL,\n isSubmitting,\n localization,\n redirectTo,\n setIsSubmitting,\n passwordValidation\n}: SignUpFormProps) {\n const isHydrated = useIsHydrated()\n const { captchaRef, getCaptchaHeaders, resetCaptcha } = useCaptcha({\n localization\n })\n\n const {\n additionalFields,\n authClient,\n basePath,\n baseURL,\n credentials,\n localization: contextLocalization,\n nameRequired,\n persistClient,\n redirectTo: contextRedirectTo,\n signUp: signUpOptions,\n viewPaths,\n navigate,\n toast,\n avatar,\n localizeErrors,\n emailVerification\n } = useContext(AuthUIContext)\n\n const confirmPasswordEnabled = credentials?.confirmPassword\n const usernameEnabled = credentials?.username\n const usernameRequired = credentials?.usernameRequired ?? true\n const contextPasswordValidation = credentials?.passwordValidation\n const signUpFields = signUpOptions?.fields\n\n localization = { ...contextLocalization, ...localization }\n passwordValidation = { ...contextPasswordValidation, ...passwordValidation }\n\n // Avatar upload state\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [avatarImage, setAvatarImage] = useState<string | null>(null)\n const [uploadingAvatar, setUploadingAvatar] = useState(false)\n\n const getRedirectTo = useCallback(\n () => redirectTo || getSearchParam(\"redirectTo\") || contextRedirectTo,\n [redirectTo, contextRedirectTo]\n )\n\n const getCallbackURL = useCallback(\n () =>\n `${baseURL}${\n callbackURL ||\n (persistClient\n ? `${basePath}/${viewPaths.CALLBACK}?redirectTo=${encodeURIComponent(getRedirectTo())}`\n : getRedirectTo())\n }`,\n [\n callbackURL,\n persistClient,\n basePath,\n viewPaths,\n baseURL,\n getRedirectTo\n ]\n )\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n // Create the base schema for standard fields\n const defaultFields = {\n email: z.string().email({\n message: `${localization.EMAIL} ${localization.IS_INVALID}`\n }),\n password: getPasswordSchema(passwordValidation, localization),\n name:\n signUpFields?.includes(\"name\") && nameRequired\n ? z.string().min(1, {\n message: `${localization.NAME} ${localization.IS_REQUIRED}`\n })\n : z.string().optional(),\n image: z.string().optional(),\n username: usernameEnabled\n ? usernameRequired\n ? z.string().min(1, {\n message: `${localization.USERNAME} ${localization.IS_REQUIRED}`\n })\n : z.string().optional()\n : z.string().optional(),\n confirmPassword: confirmPasswordEnabled\n ? getPasswordSchema(passwordValidation, {\n PASSWORD_REQUIRED: localization.CONFIRM_PASSWORD_REQUIRED,\n PASSWORD_TOO_SHORT: localization.PASSWORD_TOO_SHORT,\n PASSWORD_TOO_LONG: localization.PASSWORD_TOO_LONG,\n INVALID_PASSWORD: localization.INVALID_PASSWORD\n })\n : z.string().optional()\n }\n\n const schemaFields: Record<string, z.ZodTypeAny> = {}\n\n // Add additional fields from signUpFields\n if (signUpFields) {\n for (const field of signUpFields) {\n if (field === \"name\") continue // Already handled above\n if (field === \"image\") continue // Already handled above\n\n const additionalField = additionalFields?.[field]\n if (!additionalField) continue\n\n let fieldSchema: z.ZodTypeAny\n\n // Create the appropriate schema based on field type\n if (additionalField.type === \"number\") {\n fieldSchema = additionalField.required\n ? z.preprocess(\n (val) => (!val ? undefined : Number(val)),\n z.number({\n message: `${additionalField.label} ${localization.IS_INVALID}`\n })\n )\n : z.coerce\n .number({\n message: `${additionalField.label} ${localization.IS_INVALID}`\n })\n .optional()\n } else if (additionalField.type === \"boolean\") {\n fieldSchema = additionalField.required\n ? z.coerce\n .boolean({\n message: `${additionalField.label} ${localization.IS_INVALID}`\n })\n .refine((val) => val === true, {\n message: `${additionalField.label} ${localization.IS_REQUIRED}`\n })\n : z.coerce\n .boolean({\n message: `${additionalField.label} ${localization.IS_INVALID}`\n })\n .optional()\n } else {\n fieldSchema = additionalField.required\n ? z\n .string()\n .min(\n 1,\n `${additionalField.label} ${localization.IS_REQUIRED}`\n )\n : z.string().optional()\n }\n\n schemaFields[field] = fieldSchema\n }\n }\n\n const formSchema = z\n .object(defaultFields)\n .extend(schemaFields)\n .refine(\n (data) => {\n // Skip validation if confirmPassword is not enabled\n if (!confirmPasswordEnabled) return true\n return data.password === data.confirmPassword\n },\n {\n message: localization.PASSWORDS_DO_NOT_MATCH!,\n path: [\"confirmPassword\"]\n }\n )\n\n // Create default values for the form\n const defaultValues: Record<string, unknown> = {\n email: \"\",\n password: \"\",\n ...(confirmPasswordEnabled && { confirmPassword: \"\" }),\n ...(signUpFields?.includes(\"name\") ? { name: \"\" } : {}),\n ...(usernameEnabled ? { username: \"\" } : {}),\n ...(signUpFields?.includes(\"image\") && avatar ? { image: \"\" } : {})\n }\n\n // Add default values for additional fields\n if (signUpFields) {\n for (const field of signUpFields) {\n if (field === \"name\") continue\n if (field === \"image\") continue\n const additionalField = additionalFields?.[field]\n if (!additionalField) continue\n\n defaultValues[field] =\n additionalField.type === \"boolean\" ? false : \"\"\n }\n }\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues\n })\n\n isSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n const handleAvatarChange = async (file: File) => {\n if (!avatar) return\n\n setUploadingAvatar(true)\n\n try {\n const resizedFile = await resizeAndCropImage(\n file,\n crypto.randomUUID(),\n avatar.size,\n avatar.extension\n )\n\n let image: string | undefined | null\n\n if (avatar.upload) {\n image = await avatar.upload(resizedFile)\n } else {\n image = await fileToBase64(resizedFile)\n }\n\n if (image) {\n setAvatarImage(image)\n form.setValue(\"image\", image)\n } else {\n setAvatarImage(null)\n form.setValue(\"image\", \"\")\n }\n } catch (error) {\n console.error(error)\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setUploadingAvatar(false)\n }\n\n const handleDeleteAvatar = () => {\n setAvatarImage(null)\n form.setValue(\"image\", \"\")\n }\n\n const openFileDialog = () => fileInputRef.current?.click()\n\n async function signUp({\n email,\n password,\n name,\n username,\n confirmPassword,\n image,\n ...additionalFieldValues\n }: z.infer<typeof formSchema>) {\n try {\n // Validate additional fields with custom validators if provided\n for (const [field, value] of Object.entries(\n additionalFieldValues\n )) {\n const additionalField = additionalFields?.[field]\n if (!additionalField?.validate) continue\n\n if (\n typeof value === \"string\" &&\n !(await additionalField.validate(value))\n ) {\n form.setError(field, {\n message: `${additionalField.label} ${localization.IS_INVALID}`\n })\n return\n }\n }\n\n const fetchOptions: BetterFetchOption = {\n throw: true,\n headers: await getCaptchaHeaders(\"/sign-up/email\")\n }\n\n const additionalParams: Record<string, unknown> = {}\n\n if (username !== undefined) {\n if (\n !usernameRequired &&\n (username === null ||\n username === \"\" ||\n (typeof username === \"string\" &&\n username.trim() === \"\"))\n ) {\n } else {\n additionalParams.username = username\n }\n }\n\n if (image !== undefined) {\n additionalParams.image = image\n }\n\n const data = await authClient.signUp.email({\n email: email as string,\n password: password as string,\n name: (name as string) || \"\",\n ...additionalParams,\n ...additionalFieldValues,\n callbackURL: getCallbackURL(),\n fetchOptions\n })\n\n if (\"token\" in data && data.token) {\n await onSuccess()\n } else if (emailVerification?.otp) {\n navigate(\n `${basePath}/${viewPaths.EMAIL_VERIFICATION}?email=${encodeURIComponent(email as string)}`\n )\n } else {\n navigate(\n `${basePath}/${viewPaths.SIGN_IN}${window.location.search}`\n )\n toast({\n variant: \"success\",\n message: localization.SIGN_UP_EMAIL!\n })\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.resetField(\"password\")\n form.resetField(\"confirmPassword\")\n resetCaptcha()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(signUp)}\n noValidate={isHydrated}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n {signUpFields?.includes(\"image\") && avatar && (\n <>\n <input\n ref={fileInputRef}\n accept=\"image/*\"\n disabled={uploadingAvatar}\n hidden\n type=\"file\"\n onChange={(e) => {\n const file = e.target.files?.item(0)\n if (file) handleAvatarChange(file)\n e.target.value = \"\"\n }}\n />\n\n <FormField\n control={form.control}\n name=\"image\"\n render={() => (\n <FormItem>\n <FormLabel>{localization.AVATAR}</FormLabel>\n\n <div className=\"flex items-center gap-4\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className=\"size-fit rounded-full\"\n size=\"icon\"\n variant=\"ghost\"\n type=\"button\"\n >\n <UserAvatar\n isPending={\n uploadingAvatar\n }\n className=\"size-16\"\n user={\n avatarImage\n ? {\n name: form.watch(\n \"name\"\n ) as string,\n email: form.watch(\n \"email\"\n ) as string,\n image: avatarImage\n }\n : null\n }\n localization={\n localization\n }\n />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n align=\"start\"\n onCloseAutoFocus={(e) =>\n e.preventDefault()\n }\n >\n <DropdownMenuItem\n onClick={openFileDialog}\n disabled={uploadingAvatar}\n >\n <UploadCloudIcon />\n {localization.UPLOAD_AVATAR}\n </DropdownMenuItem>\n\n {avatarImage && (\n <DropdownMenuItem\n onClick={\n handleDeleteAvatar\n }\n disabled={\n uploadingAvatar\n }\n variant=\"destructive\"\n >\n <Trash2Icon />\n {\n localization.DELETE_AVATAR\n }\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={openFileDialog}\n disabled={uploadingAvatar}\n >\n {uploadingAvatar && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.UPLOAD}\n </Button>\n </div>\n\n <FormMessage />\n </FormItem>\n )}\n />\n </>\n )}\n\n {signUpFields?.includes(\"name\") && (\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.NAME}\n {!nameRequired && (\n <span className=\"ml-1 text-muted-foreground\">\n {localization.OPTIONAL_BRACKETS}\n </span>\n )}\n </FormLabel>\n\n <FormControl>\n <Input\n autoComplete=\"name\"\n className={classNames?.input}\n placeholder={\n localization.NAME_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n value={field.value as string}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n )}\n\n {usernameEnabled && (\n <FormField\n control={form.control}\n name=\"username\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.USERNAME}\n {!usernameRequired && (\n <span className=\"ml-1 text-muted-foreground\">\n {localization.OPTIONAL_BRACKETS}\n </span>\n )}\n </FormLabel>\n\n <FormControl>\n <Input\n autoComplete=\"username\"\n className={classNames?.input}\n placeholder={\n localization.USERNAME_PLACEHOLDER\n }\n disabled={isSubmitting}\n {...field}\n value={field.value as string}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n )}\n\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n autoComplete=\"email\"\n className={classNames?.input}\n type=\"email\"\n placeholder={localization.EMAIL_PLACEHOLDER}\n disabled={isSubmitting}\n {...field}\n value={field.value as string}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"password\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n autoComplete=\"new-password\"\n className={classNames?.input}\n placeholder={\n localization.PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n enableToggle\n {...field}\n value={field.value as string}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n\n {confirmPasswordEnabled && (\n <FormField\n control={form.control}\n name=\"confirmPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.CONFIRM_PASSWORD}\n </FormLabel>\n\n <FormControl>\n <PasswordInput\n autoComplete=\"new-password\"\n className={classNames?.input}\n placeholder={\n localization.CONFIRM_PASSWORD_PLACEHOLDER\n }\n disabled={isSubmitting}\n enableToggle\n {...field}\n value={field.value as string}\n />\n </FormControl>\n\n <FormMessage className={classNames?.error} />\n </FormItem>\n )}\n />\n )}\n\n {signUpFields\n ?.filter((field) => field !== \"name\" && field !== \"image\")\n .map((field) => {\n const additionalField = additionalFields?.[field]\n if (!additionalField) {\n console.error(`Additional field ${field} not found`)\n return null\n }\n\n return additionalField.type === \"boolean\" ? (\n <FormField\n key={field}\n control={form.control}\n name={field}\n render={({ field: formField }) => (\n <FormItem className=\"flex\">\n <FormControl>\n <Checkbox\n checked={\n formField.value as boolean\n }\n onCheckedChange={\n formField.onChange\n }\n disabled={isSubmitting}\n />\n </FormControl>\n\n <FormLabel\n className={classNames?.label}\n >\n {additionalField.label}\n </FormLabel>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n ) : (\n <FormField\n key={field}\n control={form.control}\n name={field}\n render={({ field: formField }) => (\n <FormItem>\n <FormLabel\n className={classNames?.label}\n >\n {additionalField.label}\n </FormLabel>\n\n <FormControl>\n {additionalField.type ===\n \"number\" ? (\n <Input\n className={\n classNames?.input\n }\n type=\"number\"\n placeholder={\n additionalField.placeholder ||\n (typeof additionalField.label ===\n \"string\"\n ? additionalField.label\n : \"\")\n }\n disabled={isSubmitting}\n {...formField}\n value={\n formField.value as number\n }\n />\n ) : additionalField.multiline ? (\n <Textarea\n className={\n classNames?.input\n }\n placeholder={\n additionalField.placeholder ||\n (typeof additionalField.label ===\n \"string\"\n ? additionalField.label\n : \"\")\n }\n disabled={isSubmitting}\n {...formField}\n value={\n formField.value as string\n }\n />\n ) : (\n <Input\n className={\n classNames?.input\n }\n type=\"text\"\n placeholder={\n additionalField.placeholder ||\n (typeof additionalField.label ===\n \"string\"\n ? additionalField.label\n : \"\")\n }\n disabled={isSubmitting}\n {...formField}\n value={\n formField.value as string\n }\n />\n )}\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )\n })}\n\n <Captcha\n ref={captchaRef}\n localization={localization}\n action=\"/sign-up/email\"\n />\n\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n \"w-full\",\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n localization.SIGN_UP_ACTION\n )}\n </Button>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport type { BetterFetchError } from \"@better-fetch/fetch\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2, QrCodeIcon, SendIcon } from \"lucide-react\"\nimport { useContext, useEffect, useRef, useState } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport QRCode from \"react-qr-code\"\nimport * as z from \"zod\"\n\nimport { useIsHydrated } from \"../../../hooks/use-hydrated\"\nimport { useOnSuccessTransition } from \"../../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError, getSearchParam } from \"../../../lib/utils\"\nimport type { AuthLocalization } from \"../../../localization/auth-localization\"\nimport type { User } from \"../../../types/auth-client\"\nimport { Button } from \"../../ui/button\"\nimport { Checkbox } from \"../../ui/checkbox\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../../ui/form\"\nimport { InputOTP } from \"../../ui/input-otp\"\nimport { Label } from \"../../ui/label\"\nimport type { AuthFormClassNames } from \"../auth-form\"\nimport { OTPInputGroup } from \"../otp-input-group\"\n\nexport interface TwoFactorFormProps {\n className?: string\n classNames?: AuthFormClassNames\n isSubmitting?: boolean\n localization?: Partial<AuthLocalization>\n otpSeparators?: 0 | 1 | 2\n redirectTo?: string\n setIsSubmitting?: (value: boolean) => void\n}\n\nexport function TwoFactorForm({\n className,\n classNames,\n isSubmitting,\n localization,\n otpSeparators = 0,\n redirectTo,\n setIsSubmitting\n}: TwoFactorFormProps) {\n const isHydrated = useIsHydrated()\n const totpURI = isHydrated ? getSearchParam(\"totpURI\") : null\n const initialSendRef = useRef(false)\n\n const {\n authClient,\n basePath,\n hooks: { useSession },\n localization: contextLocalization,\n twoFactor,\n viewPaths,\n toast,\n Link,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { onSuccess, isPending: transitionPending } = useOnSuccessTransition({\n redirectTo\n })\n\n const { data: sessionData } = useSession()\n const isTwoFactorEnabled = (sessionData?.user as User)?.twoFactorEnabled\n\n const [method, setMethod] = useState<\"totp\" | \"otp\" | null>(\n twoFactor?.length === 1 ? twoFactor[0] : null\n )\n\n const [isSendingOtp, setIsSendingOtp] = useState(false)\n const [cooldownSeconds, setCooldownSeconds] = useState(0)\n\n const formSchema = z.object({\n code: z\n .string()\n .min(1, {\n message: `${localization.ONE_TIME_PASSWORD} ${localization.IS_REQUIRED}`\n })\n .min(6, {\n message: `${localization.ONE_TIME_PASSWORD} ${localization.IS_INVALID}`\n }),\n trustDevice: z.boolean().optional()\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n code: \"\"\n }\n })\n\n isSubmitting =\n isSubmitting || form.formState.isSubmitting || transitionPending\n\n useEffect(() => {\n setIsSubmitting?.(form.formState.isSubmitting || transitionPending)\n }, [form.formState.isSubmitting, transitionPending, setIsSubmitting])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: ignore\n useEffect(() => {\n if (\n method === \"otp\" &&\n cooldownSeconds <= 0 &&\n !initialSendRef.current\n ) {\n initialSendRef.current = true\n sendOtp()\n }\n }, [method])\n\n useEffect(() => {\n if (cooldownSeconds <= 0) return\n\n const timer = setTimeout(() => {\n setCooldownSeconds((prev) => prev - 1)\n }, 1000)\n return () => clearTimeout(timer)\n }, [cooldownSeconds])\n\n const sendOtp = async () => {\n if (isSendingOtp || cooldownSeconds > 0) return\n\n try {\n setIsSendingOtp(true)\n await authClient.twoFactor.sendOtp({\n fetchOptions: { throw: true }\n })\n setCooldownSeconds(60)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n if (\n (error as BetterFetchError).error.code ===\n \"INVALID_TWO_FACTOR_COOKIE\"\n ) {\n history.back()\n }\n }\n\n initialSendRef.current = false\n setIsSendingOtp(false)\n }\n\n async function verifyCode({\n code,\n trustDevice\n }: z.infer<typeof formSchema>) {\n try {\n const verifyMethod =\n method === \"totp\"\n ? authClient.twoFactor.verifyTotp\n : authClient.twoFactor.verifyOtp\n\n await verifyMethod({\n code,\n trustDevice,\n fetchOptions: { throw: true }\n })\n\n await onSuccess()\n\n if (sessionData && !isTwoFactorEnabled) {\n toast({\n variant: \"success\",\n message: localization?.TWO_FACTOR_ENABLED\n })\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n form.reset()\n }\n }\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(verifyCode)}\n className={cn(\"grid w-full gap-6\", className, classNames?.base)}\n >\n {twoFactor?.includes(\"totp\") &&\n totpURI &&\n method === \"totp\" && (\n <div className=\"space-y-3\">\n <Label className={classNames?.label}>\n {localization.TWO_FACTOR_TOTP_LABEL}\n </Label>\n\n <QRCode\n className={cn(\n \"border shadow-xs\",\n classNames?.qrCode\n )}\n value={totpURI}\n />\n </div>\n )}\n\n {method !== null && (\n <>\n <FormField\n control={form.control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <div className=\"flex items-center justify-between\">\n <FormLabel\n className={classNames?.label}\n >\n {localization.ONE_TIME_PASSWORD}\n </FormLabel>\n\n <Link\n className={cn(\n \"text-sm hover:underline\",\n classNames?.forgotPasswordLink\n )}\n href={`${basePath}/${viewPaths.RECOVER_ACCOUNT}${isHydrated ? window.location.search : \"\"}`}\n >\n {localization.FORGOT_AUTHENTICATOR}\n </Link>\n </div>\n\n <FormControl>\n <InputOTP\n {...field}\n maxLength={6}\n onChange={(value) => {\n field.onChange(value)\n\n if (value.length === 6) {\n form.handleSubmit(\n verifyCode\n )()\n }\n }}\n containerClassName={\n classNames?.otpInputContainer\n }\n className={classNames?.otpInput}\n disabled={isSubmitting}\n >\n <OTPInputGroup\n otpSeparators={otpSeparators}\n />\n </InputOTP>\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"trustDevice\"\n render={({ field }) => (\n <FormItem className=\"flex\">\n <FormControl>\n <Checkbox\n checked={field.value}\n onCheckedChange={field.onChange}\n disabled={isSubmitting}\n className={classNames?.checkbox}\n />\n </FormControl>\n\n <FormLabel className={classNames?.label}>\n {localization.TRUST_DEVICE}\n </FormLabel>\n </FormItem>\n )}\n />\n </>\n )}\n\n <div className=\"grid gap-4\">\n {method !== null && (\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n {localization.TWO_FACTOR_ACTION}\n </Button>\n )}\n\n {method === \"otp\" && twoFactor?.includes(\"otp\") && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={sendOtp}\n disabled={\n cooldownSeconds > 0 ||\n isSendingOtp ||\n isSubmitting\n }\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {isSendingOtp ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <SendIcon className={classNames?.icon} />\n )}\n\n {localization.RESEND_CODE}\n {cooldownSeconds > 0 && ` (${cooldownSeconds})`}\n </Button>\n )}\n\n {method !== \"otp\" && twoFactor?.includes(\"otp\") && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n onClick={() => setMethod(\"otp\")}\n disabled={isSubmitting}\n >\n <SendIcon className={classNames?.icon} />\n {localization.SEND_VERIFICATION_CODE}\n </Button>\n )}\n\n {method !== \"totp\" && twoFactor?.includes(\"totp\") && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n onClick={() => setMethod(\"totp\")}\n disabled={isSubmitting}\n >\n <QrCodeIcon className={classNames?.icon} />\n {localization.CONTINUE_WITH_AUTHENTICATOR}\n </Button>\n )}\n </div>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { Loader2 } from \"lucide-react\"\nimport { useContext, useEffect, useRef } from \"react\"\n\nimport { useOnSuccessTransition } from \"../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\n\nexport function SignOut({ redirectTo }: { redirectTo?: string }) {\n const signingOut = useRef(false)\n\n const { authClient, basePath, viewPaths } = useContext(AuthUIContext)\n const { onSuccess } = useOnSuccessTransition({\n redirectTo: redirectTo || `${basePath}/${viewPaths.SIGN_IN}`\n })\n\n useEffect(() => {\n if (signingOut.current) return\n signingOut.current = true\n\n authClient.signOut().finally(onSuccess)\n }, [authClient, onSuccess])\n\n return <Loader2 className=\"animate-spin\" />\n}\n","\"use client\"\n\nimport { ArrowLeftIcon } from \"lucide-react\"\nimport { type ReactNode, useContext, useEffect, useState } from \"react\"\nimport { useIsHydrated } from \"../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { socialProviders } from \"../../lib/social-providers\"\nimport { cn, getViewByPath } from \"../../lib/utils\"\nimport type { AuthViewPaths } from \"../../lib/view-paths\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { AcceptInvitationCard } from \"../organization/accept-invitation-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle\n} from \"../ui/card\"\nimport { Separator } from \"../ui/separator\"\nimport { AuthCallback } from \"./auth-callback\"\nimport { AuthForm, type AuthFormClassNames } from \"./auth-form\"\nimport { EmailOTPButton } from \"./email-otp-button\"\nimport { MagicLinkButton } from \"./magic-link-button\"\nimport { OneTap } from \"./one-tap\"\nimport { PasskeyButton } from \"./passkey-button\"\nimport { ProviderButton } from \"./provider-button\"\nimport { SignOut } from \"./sign-out\"\n\nexport type AuthViewClassNames = {\n base?: string\n content?: string\n description?: string\n footer?: string\n footerLink?: string\n continueWith?: string\n form?: AuthFormClassNames\n header?: string\n separator?: string\n title?: string\n}\n\nexport interface AuthViewProps {\n className?: string\n classNames?: AuthViewClassNames\n callbackURL?: string\n cardHeader?: ReactNode\n cardFooter?: ReactNode\n localization?: AuthLocalization\n path?: string\n pathname?: string\n redirectTo?: string\n socialLayout?: \"auto\" | \"horizontal\" | \"grid\" | \"vertical\"\n view?: keyof AuthViewPaths\n otpSeparators?: 0 | 1 | 2\n}\n\nexport function AuthView({\n className,\n classNames,\n callbackURL,\n cardHeader,\n cardFooter,\n localization,\n path: pathProp,\n pathname,\n redirectTo,\n socialLayout: socialLayoutProp = \"auto\",\n view: viewProp,\n otpSeparators = 0\n}: AuthViewProps) {\n const isHydrated = useIsHydrated()\n const {\n basePath,\n credentials,\n localization: contextLocalization,\n magicLink,\n emailOTP,\n oneTap,\n passkey,\n signUp,\n social,\n genericOAuth,\n viewPaths,\n Link\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n let socialLayout = socialLayoutProp\n if (socialLayout === \"auto\") {\n socialLayout = !credentials\n ? \"vertical\"\n : social?.providers && social.providers.length > 2\n ? \"horizontal\"\n : \"vertical\"\n }\n\n const path = pathProp ?? pathname?.split(\"/\").pop()\n\n const view = viewProp || getViewByPath(viewPaths!, path) || \"SIGN_IN\"\n\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n const handlePageHide = () => setIsSubmitting(false)\n window.addEventListener(\"pagehide\", handlePageHide)\n return () => {\n setIsSubmitting(false)\n window.removeEventListener(\"pagehide\", handlePageHide)\n }\n }, [])\n\n if (view === \"CALLBACK\") return <AuthCallback redirectTo={redirectTo} />\n if (view === \"SIGN_OUT\") return <SignOut redirectTo={redirectTo} />\n if (view === \"ACCEPT_INVITATION\")\n return (\n <AcceptInvitationCard\n className={className}\n classNames={classNames}\n />\n )\n\n const description =\n !credentials && !magicLink && !emailOTP\n ? localization.DISABLED_CREDENTIALS_DESCRIPTION\n : localization[`${view}_DESCRIPTION` as keyof typeof localization]\n\n return (\n <Card className={cn(\"w-full max-w-sm\", className, classNames?.base)}>\n <CardHeader className={classNames?.header}>\n {cardHeader ? (\n cardHeader\n ) : (\n <>\n <CardTitle\n className={cn(\n \"text-lg md:text-xl\",\n classNames?.title\n )}\n >\n {localization[view as keyof typeof localization]}\n </CardTitle>\n {description && (\n <CardDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {description}\n </CardDescription>\n )}\n </>\n )}\n </CardHeader>\n\n <CardContent className={cn(\"grid gap-6\", classNames?.content)}>\n {oneTap &&\n [\"SIGN_IN\", \"SIGN_UP\", \"MAGIC_LINK\", \"EMAIL_OTP\"].includes(\n view as string\n ) && (\n <OneTap\n localization={localization}\n redirectTo={redirectTo}\n />\n )}\n\n {(credentials || magicLink || emailOTP) && (\n <div className=\"grid gap-4\">\n <AuthForm\n classNames={classNames?.form}\n callbackURL={callbackURL}\n isSubmitting={isSubmitting}\n localization={localization}\n otpSeparators={otpSeparators}\n view={view}\n redirectTo={redirectTo}\n setIsSubmitting={setIsSubmitting}\n />\n\n {magicLink &&\n ((credentials &&\n [\n \"FORGOT_PASSWORD\",\n \"SIGN_UP\",\n \"SIGN_IN\",\n \"MAGIC_LINK\",\n \"EMAIL_OTP\"\n ].includes(view as string)) ||\n (emailOTP && view === \"EMAIL_OTP\")) && (\n <MagicLinkButton\n classNames={classNames}\n localization={localization}\n view={view}\n isSubmitting={isSubmitting}\n />\n )}\n\n {emailOTP &&\n ((credentials &&\n [\n \"FORGOT_PASSWORD\",\n \"SIGN_UP\",\n \"SIGN_IN\",\n \"MAGIC_LINK\",\n \"EMAIL_OTP\"\n ].includes(view as string)) ||\n (magicLink &&\n [\"SIGN_IN\", \"MAGIC_LINK\"].includes(\n view as string\n ))) && (\n <EmailOTPButton\n classNames={classNames}\n localization={localization}\n view={view}\n isSubmitting={isSubmitting}\n />\n )}\n </div>\n )}\n\n {view !== \"RESET_PASSWORD\" &&\n view !== \"EMAIL_VERIFICATION\" &&\n (social?.providers?.length ||\n genericOAuth?.providers?.length ||\n (view === \"SIGN_IN\" && passkey)) && (\n <>\n {(credentials || magicLink || emailOTP) && (\n <div\n className={cn(\n \"flex items-center gap-2\",\n classNames?.continueWith\n )}\n >\n <Separator\n className={cn(\n \"!w-auto grow\",\n classNames?.separator\n )}\n />\n <span className=\"flex-shrink-0 text-muted-foreground text-sm\">\n {localization.OR_CONTINUE_WITH}\n </span>\n <Separator\n className={cn(\n \"!w-auto grow\",\n classNames?.separator\n )}\n />\n </div>\n )}\n\n <div className=\"grid gap-4\">\n {(social?.providers?.length ||\n genericOAuth?.providers?.length) && (\n <div\n className={cn(\n \"flex w-full items-center justify-between gap-4\",\n socialLayout === \"horizontal\" &&\n \"flex-wrap\",\n socialLayout === \"vertical\" &&\n \"flex-col\",\n socialLayout === \"grid\" &&\n \"grid grid-cols-2\"\n )}\n >\n {social?.providers?.map((provider) => {\n const socialProvider =\n socialProviders.find(\n (socialProvider) =>\n socialProvider.provider ===\n provider\n )\n if (!socialProvider) return null\n return (\n <ProviderButton\n key={provider}\n classNames={classNames}\n callbackURL={callbackURL}\n isSubmitting={isSubmitting}\n localization={localization}\n provider={socialProvider}\n redirectTo={redirectTo}\n setIsSubmitting={\n setIsSubmitting\n }\n socialLayout={socialLayout}\n />\n )\n })}\n {genericOAuth?.providers?.map(\n (provider) => (\n <ProviderButton\n key={provider.provider}\n classNames={classNames}\n callbackURL={callbackURL}\n isSubmitting={isSubmitting}\n localization={localization}\n provider={provider}\n redirectTo={redirectTo}\n setIsSubmitting={\n setIsSubmitting\n }\n socialLayout={socialLayout}\n other\n />\n )\n )}\n </div>\n )}\n\n {passkey &&\n [\n \"SIGN_IN\",\n \"MAGIC_LINK\",\n \"EMAIL_OTP\",\n \"RECOVER_ACCOUNT\",\n \"TWO_FACTOR\",\n \"FORGOT_PASSWORD\"\n ].includes(view as string) && (\n <PasskeyButton\n classNames={classNames}\n isSubmitting={isSubmitting}\n localization={localization}\n redirectTo={redirectTo}\n setIsSubmitting={setIsSubmitting}\n />\n )}\n </div>\n </>\n )}\n </CardContent>\n\n {cardFooter && (\n <CardFooter className={classNames?.footer}>\n {cardFooter}\n </CardFooter>\n )}\n\n {credentials && signUp && (\n <CardFooter\n className={cn(\n \"justify-center gap-1.5 text-muted-foreground text-sm\",\n classNames?.footer\n )}\n >\n {view === \"SIGN_IN\" ||\n view === \"MAGIC_LINK\" ||\n view === \"EMAIL_OTP\" ? (\n localization.DONT_HAVE_AN_ACCOUNT\n ) : view === \"SIGN_UP\" ? (\n localization.ALREADY_HAVE_AN_ACCOUNT\n ) : (\n <ArrowLeftIcon className=\"size-3\" />\n )}\n\n {view === \"SIGN_IN\" ||\n view === \"MAGIC_LINK\" ||\n view === \"EMAIL_OTP\" ||\n view === \"SIGN_UP\" ? (\n <Link\n className={cn(\n \"text-foreground underline\",\n classNames?.footerLink\n )}\n href={`${basePath}/${\n viewPaths[\n view === \"SIGN_IN\" ||\n view === \"MAGIC_LINK\" ||\n view === \"EMAIL_OTP\"\n ? \"SIGN_UP\"\n : \"SIGN_IN\"\n ]\n }${isHydrated ? window.location.search : \"\"}`}\n >\n <Button\n variant=\"link\"\n size=\"sm\"\n className={cn(\n \"px-0 text-foreground underline\",\n classNames?.footerLink\n )}\n >\n {view === \"SIGN_IN\" ||\n view === \"MAGIC_LINK\" ||\n view === \"EMAIL_OTP\"\n ? localization.SIGN_UP\n : localization.SIGN_IN}\n </Button>\n </Link>\n ) : (\n <Button\n variant=\"link\"\n size=\"sm\"\n className={cn(\n \"px-0 text-foreground underline\",\n classNames?.footerLink\n )}\n onClick={() => window.history.back()}\n >\n {localization.GO_BACK}\n </Button>\n )}\n </CardFooter>\n )}\n </Card>\n )\n}\n","\"use client\"\n\nimport { CheckIcon, Loader2, XIcon } from \"lucide-react\"\nimport { useCallback, useContext, useEffect, useMemo, useState } from \"react\"\n\nimport { useAuthenticate } from \"../../hooks/use-authenticate\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError, getSearchParam } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle\n} from \"../ui/card\"\nimport { Skeleton } from \"../ui/skeleton\"\nimport { OrganizationCellView } from \"./organization-cell-view\"\n\nexport interface AcceptInvitationCardProps {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: Partial<AuthLocalization>\n}\n\nexport function AcceptInvitationCard({\n className,\n classNames,\n localization: localizationProp\n}: AcceptInvitationCardProps) {\n const {\n localization: contextLocalization,\n redirectTo,\n replace,\n toast\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: sessionData } = useAuthenticate()\n const [invitationId, setInvitationId] = useState<string | null>(null)\n\n useEffect(() => {\n const invitationIdParam = getSearchParam(\"invitationId\")\n\n if (!invitationIdParam) {\n toast({\n variant: \"error\",\n message: localization.INVITATION_NOT_FOUND\n })\n\n replace(redirectTo)\n return\n }\n\n setInvitationId(invitationIdParam)\n }, [localization.INVITATION_NOT_FOUND, toast, replace, redirectTo])\n\n if (!sessionData || !invitationId) {\n return (\n <AcceptInvitationSkeleton\n className={className}\n classNames={classNames}\n />\n )\n }\n\n return (\n <AcceptInvitationContent\n className={className}\n classNames={classNames}\n localization={localization}\n invitationId={invitationId}\n />\n )\n}\n\nfunction AcceptInvitationContent({\n className,\n classNames,\n localization: localizationProp,\n invitationId\n}: AcceptInvitationCardProps & { invitationId: string }) {\n const {\n authClient,\n hooks: { useInvitation },\n localization: contextLocalization,\n organization,\n redirectTo,\n replace,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const [isRejecting, setIsRejecting] = useState(false)\n const [isAccepting, setIsAccepting] = useState(false)\n const isProcessing = isRejecting || isAccepting\n\n const { data: invitation, isPending } = useInvitation({\n query: {\n id: invitationId\n }\n })\n\n const getRedirectTo = useCallback(\n () => getSearchParam(\"redirectTo\") || redirectTo,\n [redirectTo]\n )\n\n useEffect(() => {\n if (isPending || !invitationId) return\n\n if (!invitation) {\n toast({\n variant: \"error\",\n message: localization.INVITATION_NOT_FOUND\n })\n\n replace(redirectTo)\n return\n }\n\n if (\n invitation.status !== \"pending\" ||\n new Date(invitation.expiresAt) < new Date()\n ) {\n toast({\n variant: \"error\",\n message:\n new Date(invitation.expiresAt) < new Date()\n ? localization.INVITATION_EXPIRED\n : localization.INVITATION_NOT_FOUND\n })\n\n replace(redirectTo)\n }\n }, [\n invitation,\n isPending,\n invitationId,\n localization,\n toast,\n replace,\n redirectTo\n ])\n\n const acceptInvitation = async () => {\n setIsAccepting(true)\n\n try {\n await authClient.organization.acceptInvitation({\n invitationId: invitationId,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message:\n localization.INVITATION_ACCEPTED || \"Invitation accepted\"\n })\n\n replace(getRedirectTo())\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsAccepting(false)\n }\n }\n\n const rejectInvitation = async () => {\n setIsRejecting(true)\n\n try {\n await authClient.organization.rejectInvitation({\n invitationId: invitationId,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.INVITATION_REJECTED\n })\n\n replace(redirectTo)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsRejecting(false)\n }\n }\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ]\n\n const roles = [...builtInRoles, ...(organization?.customRoles || [])]\n const roleLabel =\n roles.find((r) => r.role === invitation?.role)?.label ||\n invitation?.role\n\n if (!invitation)\n return (\n <AcceptInvitationSkeleton\n className={className}\n classNames={classNames}\n />\n )\n\n return (\n <Card className={cn(\"w-full max-w-sm\", className, classNames?.base)}>\n <CardHeader\n className={cn(\n \"justify-items-center text-center\",\n classNames?.header\n )}\n >\n <CardTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.ACCEPT_INVITATION}\n </CardTitle>\n\n <CardDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.ACCEPT_INVITATION_DESCRIPTION}\n </CardDescription>\n </CardHeader>\n\n <CardContent\n className={cn(\n \"flex flex-col gap-6 truncate\",\n classNames?.content\n )}\n >\n <Card className={cn(\"flex-row items-center p-4\")}>\n <OrganizationCellView\n organization={{\n id: invitation.organizationId,\n name: invitation.organizationName,\n slug: invitation.organizationSlug,\n logo: invitation.organizationLogo,\n createdAt: new Date()\n }}\n localization={localization}\n />\n\n <p className=\"ml-auto text-muted-foreground text-sm\">\n {roleLabel}\n </p>\n </Card>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <Button\n variant=\"outline\"\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n onClick={rejectInvitation}\n disabled={isProcessing}\n >\n {isRejecting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <XIcon />\n )}\n\n {localization.REJECT}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n onClick={acceptInvitation}\n disabled={isProcessing}\n >\n {isAccepting ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <CheckIcon />\n )}\n\n {localization.ACCEPT}\n </Button>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nconst AcceptInvitationSkeleton = ({\n className,\n classNames,\n localization\n}: AcceptInvitationCardProps) => {\n return (\n <Card className={cn(\"w-full max-w-sm\", className, classNames?.base)}>\n <CardHeader\n className={cn(\"justify-items-center\", classNames?.header)}\n >\n <Skeleton\n className={cn(\n \"my-1 h-5 w-full max-w-32 md:h-5.5 md:w-40\",\n classNames?.skeleton\n )}\n />\n\n <Skeleton\n className={cn(\n \"my-0.5 h-3 w-full max-w-56 md:h-3.5 md:w-64\",\n classNames?.skeleton\n )}\n />\n </CardHeader>\n\n <CardContent\n className={cn(\n \"flex flex-col gap-6 truncate\",\n classNames?.content\n )}\n >\n <Card className={cn(\"flex-row items-center p-4\")}>\n <OrganizationCellView\n isPending\n localization={localization}\n />\n\n <Skeleton className=\"mt-0.5 ml-auto h-4 w-full max-w-14 shrink-2\" />\n </Card>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <Skeleton className=\"h-9 w-full\" />\n\n <Skeleton className=\"h-9 w-full\" />\n </div>\n </CardContent>\n </Card>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import { LockIcon, MailIcon } from \"lucide-react\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthViewPath } from \"../../lib/view-paths\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Button } from \"../ui/button\"\nimport type { AuthViewClassNames } from \"./auth-view\"\n\ninterface EmailOTPButtonProps {\n classNames?: AuthViewClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n view: AuthViewPath\n}\n\nexport function EmailOTPButton({\n classNames,\n isSubmitting,\n localization,\n view\n}: EmailOTPButtonProps) {\n const { viewPaths, navigate, basePath } = useContext(AuthUIContext)\n\n return (\n <Button\n className={cn(\n \"w-full\",\n classNames?.form?.button,\n classNames?.form?.secondaryButton\n )}\n disabled={isSubmitting}\n type=\"button\"\n variant=\"secondary\"\n onClick={() =>\n navigate(\n `${basePath}/${view === \"EMAIL_OTP\" ? viewPaths.SIGN_IN : viewPaths.EMAIL_OTP}${window.location.search}`\n )\n }\n >\n {view === \"EMAIL_OTP\" ? (\n <LockIcon className={classNames?.form?.icon} />\n ) : (\n <MailIcon className={classNames?.form?.icon} />\n )}\n {localization.SIGN_IN_WITH}{\" \"}\n {view === \"EMAIL_OTP\"\n ? localization.PASSWORD\n : localization.EMAIL_OTP}\n </Button>\n )\n}\n","import { LockIcon, MailIcon } from \"lucide-react\"\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthViewPath } from \"../../lib/view-paths\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Button } from \"../ui/button\"\nimport type { AuthViewClassNames } from \"./auth-view\"\n\ninterface MagicLinkButtonProps {\n classNames?: AuthViewClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n view: AuthViewPath\n}\n\nexport function MagicLinkButton({\n classNames,\n isSubmitting,\n localization,\n view\n}: MagicLinkButtonProps) {\n const { viewPaths, navigate, basePath, credentials } =\n useContext(AuthUIContext)\n\n return (\n <Button\n className={cn(\n \"w-full\",\n classNames?.form?.button,\n classNames?.form?.secondaryButton\n )}\n disabled={isSubmitting}\n type=\"button\"\n variant=\"secondary\"\n onClick={() =>\n navigate(\n `${basePath}/${view === \"MAGIC_LINK\" || !credentials ? viewPaths.SIGN_IN : viewPaths.MAGIC_LINK}${window.location.search}`\n )\n }\n >\n {view === \"MAGIC_LINK\" ? (\n <LockIcon className={classNames?.form?.icon} />\n ) : (\n <MailIcon className={classNames?.form?.icon} />\n )}\n {localization.SIGN_IN_WITH}{\" \"}\n {view === \"MAGIC_LINK\"\n ? localization.PASSWORD\n : localization.MAGIC_LINK}\n </Button>\n )\n}\n","import { useContext, useEffect, useMemo, useRef } from \"react\"\n\nimport { useOnSuccessTransition } from \"../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\n\ninterface OneTapProps {\n localization: Partial<AuthLocalization>\n redirectTo?: string\n}\n\nexport function OneTap({ localization, redirectTo }: OneTapProps) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n const oneTapFetched = useRef(false)\n\n localization = useMemo(\n () => ({ ...contextLocalization, ...localization }),\n [contextLocalization, localization]\n )\n\n const { onSuccess } = useOnSuccessTransition({ redirectTo })\n\n useEffect(() => {\n if (oneTapFetched.current) return\n oneTapFetched.current = true\n\n try {\n authClient.oneTap({\n fetchOptions: {\n throw: true,\n onSuccess\n }\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }, [authClient, localization, localizeErrors, onSuccess, toast])\n\n return null\n}\n","import { FingerprintIcon } from \"lucide-react\"\nimport { useContext } from \"react\"\n\nimport { useOnSuccessTransition } from \"../../hooks/use-success-transition\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Button } from \"../ui/button\"\nimport type { AuthViewClassNames } from \"./auth-view\"\n\ninterface PasskeyButtonProps {\n classNames?: AuthViewClassNames\n isSubmitting?: boolean\n localization: Partial<AuthLocalization>\n redirectTo?: string\n setIsSubmitting?: (isSubmitting: boolean) => void\n}\n\nexport function PasskeyButton({\n classNames,\n isSubmitting,\n localization,\n redirectTo,\n setIsSubmitting\n}: PasskeyButtonProps) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n localization = { ...contextLocalization, ...localization }\n\n const { onSuccess } = useOnSuccessTransition({ redirectTo })\n\n const signInPassKey = async () => {\n setIsSubmitting?.(true)\n\n try {\n const response = await authClient.signIn.passkey({\n fetchOptions: { throw: true }\n })\n\n if (response?.error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error: response.error,\n localization,\n localizeErrors\n })\n })\n\n setIsSubmitting?.(false)\n } else {\n onSuccess()\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsSubmitting?.(false)\n }\n }\n\n return (\n <Button\n className={cn(\n \"w-full\",\n classNames?.form?.button,\n classNames?.form?.secondaryButton\n )}\n disabled={isSubmitting}\n formNoValidate\n name=\"passkey\"\n value=\"true\"\n variant=\"secondary\"\n onClick={signInPassKey}\n >\n <FingerprintIcon />\n {localization.SIGN_IN_WITH} {localization.PASSKEY}\n </Button>\n )\n}\n","import type { SocialProvider } from \"better-auth/social-providers\"\nimport { useCallback, useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport type { Provider } from \"../../lib/social-providers\"\nimport { cn, getLocalizedError, getSearchParam } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport { Button } from \"../ui/button\"\nimport type { AuthViewClassNames } from \"./auth-view\"\n\ninterface ProviderButtonProps {\n className?: string\n classNames?: AuthViewClassNames\n callbackURL?: string\n isSubmitting: boolean\n localization: Partial<AuthLocalization>\n other?: boolean\n provider: Provider\n redirectTo?: string\n socialLayout: \"auto\" | \"horizontal\" | \"grid\" | \"vertical\"\n setIsSubmitting: (isSubmitting: boolean) => void\n}\n\nexport function ProviderButton({\n className,\n classNames,\n callbackURL: callbackURLProp,\n isSubmitting,\n localization,\n other,\n provider,\n redirectTo: redirectToProp,\n socialLayout,\n setIsSubmitting\n}: ProviderButtonProps) {\n const {\n authClient,\n basePath,\n baseURL,\n persistClient,\n redirectTo: contextRedirectTo,\n viewPaths,\n social,\n genericOAuth,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const getRedirectTo = useCallback(\n () =>\n redirectToProp || getSearchParam(\"redirectTo\") || contextRedirectTo,\n [redirectToProp, contextRedirectTo]\n )\n\n const getCallbackURL = useCallback(\n () =>\n `${baseURL}${\n callbackURLProp ||\n (persistClient\n ? `${basePath}/${viewPaths.CALLBACK}?redirectTo=${encodeURIComponent(getRedirectTo())}`\n : getRedirectTo())\n }`,\n [\n callbackURLProp,\n persistClient,\n basePath,\n viewPaths,\n baseURL,\n getRedirectTo\n ]\n )\n\n const doSignInSocial = async () => {\n setIsSubmitting(true)\n\n try {\n if (other) {\n const oauth2Params = {\n providerId: provider.provider,\n callbackURL: getCallbackURL(),\n fetchOptions: { throw: true }\n }\n\n if (genericOAuth?.signIn) {\n await genericOAuth.signIn(oauth2Params)\n\n setTimeout(() => {\n setIsSubmitting(false)\n }, 10000)\n } else {\n await authClient.signIn.oauth2(oauth2Params)\n }\n } else {\n const socialParams = {\n provider: provider.provider as SocialProvider,\n callbackURL: getCallbackURL(),\n fetchOptions: { throw: true }\n }\n\n if (social?.signIn) {\n await social.signIn(socialParams)\n\n setTimeout(() => {\n setIsSubmitting(false)\n }, 10000)\n } else {\n await authClient.signIn.social(socialParams)\n }\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setIsSubmitting(false)\n }\n }\n\n return (\n <Button\n className={cn(\n socialLayout === \"vertical\" ? \"w-full\" : \"grow\",\n className,\n classNames?.form?.button,\n classNames?.form?.outlineButton,\n classNames?.form?.providerButton\n )}\n disabled={isSubmitting}\n variant=\"outline\"\n onClick={doSignInSocial}\n >\n {provider.icon && (\n <provider.icon className={classNames?.form?.icon} />\n )}\n\n {socialLayout === \"grid\" && provider.name}\n {socialLayout === \"vertical\" &&\n `${localization.SIGN_IN_WITH} ${provider.name}`}\n </Button>\n )\n}\n","\"use client\"\n\nimport { type ReactNode, useContext } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\n\n/**\n * Conditionally renders content during authentication loading state\n *\n * Renders its children only when the authentication state is being determined\n * (during the loading/pending phase). Once the authentication state is resolved,\n * nothing is rendered. Useful for displaying loading indicators or temporary\n * content while waiting for the authentication check to complete.\n */\nexport function AuthLoading({ children }: { children: ReactNode }) {\n const {\n hooks: { useSession }\n } = useContext(AuthUIContext)\n const { isPending } = useSession()\n\n return isPending ? children : null\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { Refetch } from \"../../types/refetch\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../ui/form\"\nimport { Input } from \"../ui/input\"\n\nexport interface CreateTeamDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n refetch?: Refetch\n organizationId?: string\n}\n\n/**\n * Renders a dialog containing a form to create a team for a given organization.\n *\n * The component validates the team name, submits it to create the team, shows success or error toasts, and manages dialog visibility via `onOpenChange`.\n *\n * @param organizationId - The ID of the organization to which the new team will belong; when falsy the create action is disabled.\n * @param onOpenChange - Callback invoked when the dialog open state changes; called with `false` to close the dialog after a successful create or when cancel is clicked.\n * @param localization - Optional localization overrides for labels, placeholders, descriptions, and messages used by the dialog.\n * @returns A React element rendering the create-team dialog and its form.\n */\nexport function CreateTeamDialog({\n classNames,\n localization: localizationProp,\n refetch,\n organizationId,\n onOpenChange,\n ...props\n}: CreateTeamDialogProps) {\n const {\n authClient,\n localization: contextLocalization,\n localizeErrors,\n toast\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const formSchema = z.object({\n name: z\n .string()\n .min(1, {\n message: `${localization.TEAM_NAME} ${localization.IS_REQUIRED}`\n })\n .max(64, {\n message: localization.TEAM_NAME_INSTRUCTIONS\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n name: \"\"\n }\n })\n\n const isSubmitting = form.formState.isSubmitting\n\n async function onSubmit({ name }: z.infer<typeof formSchema>) {\n if (!organizationId) return\n\n try {\n await authClient.organization.createTeam({\n name,\n organizationId,\n fetchOptions: { throw: true }\n })\n\n await refetch?.()\n onOpenChange?.(false)\n form.reset()\n\n toast({\n variant: \"success\",\n message: localization.CREATE_TEAM_SUCCESS\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent className={classNames?.dialog?.content}>\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.CREATE_TEAM}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.TEAM_NAME_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(onSubmit)}\n className=\"space-y-6\"\n >\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {localization.TEAM_NAME}\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={\n localization.TEAM_NAME_PLACEHOLDER\n }\n {...field}\n />\n </FormControl>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"submit\"\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isSubmitting || !organizationId}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.CREATE_TEAM}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext, useMemo, useState } from \"react\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { DeleteOrganizationDialog } from \"./delete-organization-dialog\"\n\nexport function DeleteOrganizationCard({\n className,\n classNames,\n localization: localizationProp,\n slug,\n ...props\n}: SettingsCardProps & { slug?: string }) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization)\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization?.DELETE_ORGANIZATION}\n description={localization?.DELETE_ORGANIZATION_DESCRIPTION}\n isPending\n title={localization?.DELETE_ORGANIZATION}\n variant=\"destructive\"\n />\n )\n\n return (\n <DeleteOrganizationForm\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction DeleteOrganizationForm({\n className,\n classNames,\n localization: localizationProp,\n organization\n}: SettingsCardProps & { organization: Organization }) {\n const {\n localization: contextLocalization,\n hooks: { useHasPermission }\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: hasPermission, isPending } = useHasPermission({\n organizationId: organization.id,\n permissions: {\n organization: [\"delete\"]\n }\n })\n\n const [showDialog, setShowDialog] = useState(false)\n\n if (!hasPermission?.success) return null\n\n return (\n <>\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization?.DELETE_ORGANIZATION}\n description={localization?.DELETE_ORGANIZATION_DESCRIPTION}\n isPending={isPending}\n title={localization?.DELETE_ORGANIZATION}\n variant=\"destructive\"\n action={() => setShowDialog(true)}\n />\n\n <DeleteOrganizationDialog\n classNames={classNames}\n localization={localization}\n open={showDialog}\n onOpenChange={setShowDialog}\n organization={organization}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../ui/form\"\nimport { Input } from \"../ui/input\"\nimport { OrganizationCellView } from \"./organization-cell-view\"\n\nexport interface DeleteOrganizationDialogProps\n extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n organization: Organization\n}\n\nexport function DeleteOrganizationDialog({\n classNames,\n localization: localizationProp,\n onOpenChange,\n organization,\n ...props\n}: DeleteOrganizationDialogProps) {\n const {\n authClient,\n account: accountOptions,\n hooks: { useListOrganizations },\n localization: contextLocalization,\n navigate,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { refetch: refetchOrganizations } = useListOrganizations()\n\n const formSchema = z.object({\n slug: z\n .string()\n .min(1, { message: localization.SLUG_REQUIRED! })\n .refine((val) => val === organization.slug, {\n message: localization.SLUG_DOES_NOT_MATCH!\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n slug: \"\"\n }\n })\n\n const { isSubmitting } = form.formState\n\n const deleteOrganization = async () => {\n try {\n await authClient.organization.delete({\n organizationId: organization.id,\n fetchOptions: { throw: true }\n })\n\n await refetchOrganizations?.()\n\n toast({\n variant: \"success\",\n message: localization.DELETE_ORGANIZATION_SUCCESS!\n })\n\n navigate(\n `${accountOptions?.basePath}/${accountOptions?.viewPaths.ORGANIZATIONS}`\n )\n\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={cn(\"sm:max-w-md\", classNames?.dialog?.content)}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization?.DELETE_ORGANIZATION}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization?.DELETE_ORGANIZATION_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <Card className={cn(\"my-2 flex-row p-4\", classNames?.cell)}>\n <OrganizationCellView\n organization={organization}\n localization={localization}\n />\n </Card>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(deleteOrganization)}\n className=\"grid gap-6\"\n >\n <FormField\n control={form.control}\n name=\"slug\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {\n localization?.DELETE_ORGANIZATION_INSTRUCTIONS\n }\n\n <span className=\"font-bold\">\n {organization.slug}\n </span>\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={organization.slug}\n className={classNames?.input}\n autoComplete=\"off\"\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n onClick={() => onOpenChange?.(false)}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n disabled={isSubmitting}\n variant=\"destructive\"\n type=\"submit\"\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization?.DELETE_ORGANIZATION}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { Loader2, UsersIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo, useState } from \"react\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { Team } from \"../../types/auth-hooks\"\nimport type { Refetch } from \"../../types/refetch\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\n\ninterface DeleteTeamDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n team: Team\n localization?: AuthLocalization\n refetch?: Refetch\n}\n\nexport function DeleteTeamDialog({\n classNames,\n team,\n localization: localizationProp,\n refetch,\n onOpenChange,\n ...props\n}: DeleteTeamDialogProps) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({\n ...contextLocalization,\n ...localizationProp\n }),\n [contextLocalization, localizationProp]\n )\n\n const [isDeleting, setIsDeleting] = useState(false)\n\n const handleDelete = async () => {\n try {\n setIsDeleting(true)\n await authClient.organization.removeTeam({\n teamId: team.id,\n organizationId: team.organizationId,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.DELETE_TEAM_SUCCESS\n })\n await refetch?.()\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n } finally {\n setIsDeleting(false)\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={classNames?.dialog?.content}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.DELETE_TEAM}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.REMOVE_TEAM_CONFIRM}\n </DialogDescription>\n </DialogHeader>\n\n <Card\n className={cn(\n \"my-2 flex-row items-center gap-3 px-4 py-3\",\n classNames?.cell\n )}\n >\n <UsersIcon\n className={cn(\"size-5 flex-shrink-0\", classNames?.icon)}\n />\n\n <div className=\"flex flex-col truncate\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-semibold text-sm\">\n {team.name}\n </span>\n </div>\n\n <div className=\"truncate text-muted-foreground text-xs\">\n {localization?.TEAM}\n </div>\n </div>\n </Card>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n disabled={isDeleting}\n onClick={() => onOpenChange?.(false)}\n type=\"button\"\n variant=\"secondary\"\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n disabled={isDeleting}\n onClick={handleDelete}\n type=\"button\"\n variant=\"destructive\"\n >\n {isDeleting && <Loader2 className=\"animate-spin\" />}\n {localization.DELETE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { type ReactNode, useContext, useMemo } from \"react\"\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { CardContent } from \"../ui/card\"\nimport { InvitationCell } from \"./invitation-cell\"\n\nexport interface OrganizationInvitationsCardProps extends SettingsCardProps {\n slug?: string\n emptyState?: ReactNode\n}\n\nexport function OrganizationInvitationsCard({\n className,\n classNames,\n localization: localizationProp,\n slug: slugProp,\n emptyState,\n ...props\n}: OrganizationInvitationsCardProps) {\n const {\n localization: contextLocalization,\n organization: organizationOptions\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const slug = slugProp || organizationOptions?.slug\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization) return null\n\n return (\n <OrganizationInvitationsContent\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction OrganizationInvitationsContent({\n className,\n classNames,\n localization: localizationProp,\n organization,\n emptyState,\n ...props\n}: SettingsCardProps & { organization: Organization; emptyState?: ReactNode }) {\n const {\n hooks: { useListInvitations },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: invitations } = useListInvitations({\n query: { organizationId: organization.id }\n })\n\n const pendingInvitations = invitations?.filter(\n (invitation) => invitation.status === \"pending\"\n )\n if (!pendingInvitations?.length) return <>{emptyState}</>\n\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.PENDING_INVITATIONS}\n description={localization.PENDING_INVITATIONS_DESCRIPTION}\n {...props}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {pendingInvitations.map((invitation) => (\n <InvitationCell\n key={invitation.id}\n classNames={classNames}\n invitation={invitation}\n localization={localization}\n organization={organization}\n />\n ))}\n </CardContent>\n </SettingsCard>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { EllipsisIcon, Loader2, XIcon } from \"lucide-react\"\nimport { useContext, useMemo, useState } from \"react\"\nimport { useLang } from \"../../hooks/use-lang\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { Invitation } from \"../../types/invitation\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { UserAvatar } from \"../user-avatar\"\n\nexport interface InvitationCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n invitation: Invitation\n localization?: AuthLocalization\n organization: Organization\n}\n\n/**\n * Renders a row showing an organization invitation with avatar, email, expiry, role, and actions.\n *\n * @param className - Optional container class names to apply to the card element\n * @param classNames - Optional object of class names for subcomponents (cell, button, icon, outlineButton)\n * @param invitation - The invitation record to display (email, role, expiresAt, id)\n * @param localization - Optional localization overrides for displayed strings\n * @param organization - Organization associated with the invitation (used to scope listing/refetch)\n * @returns The invitation row as a JSX element with a dropdown action to cancel the invitation\n */\nexport function InvitationCell({\n className,\n classNames,\n invitation,\n localization: localizationProp,\n organization\n}: InvitationCellProps) {\n const {\n authClient,\n hooks: { useListInvitations },\n organization: organizationOptions,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n const { lang } = useLang()\n\n const [isLoading, setIsLoading] = useState(false)\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ]\n\n const roles = [...builtInRoles, ...(organizationOptions?.customRoles || [])]\n const role = roles.find((r) => r.role === invitation.role)\n\n const { refetch } = useListInvitations({\n query: { organizationId: organization?.id }\n })\n\n const handleCancelInvitation = async () => {\n setIsLoading(true)\n\n try {\n await authClient.organization.cancelInvitation({\n invitationId: invitation.id,\n fetchOptions: { throw: true }\n })\n\n await refetch?.()\n\n toast({\n variant: \"success\",\n message: localization.INVITATION_CANCELLED\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsLoading(false)\n }\n\n return (\n <Card\n className={cn(\n \"flex-row items-center p-4\",\n className,\n classNames?.cell\n )}\n >\n <div className=\"flex flex-1 items-center gap-2\">\n <UserAvatar\n className=\"my-0.5\"\n user={invitation}\n localization={localization}\n />\n\n <div className=\"grid flex-1 text-left leading-tight\">\n <span className=\"truncate font-semibold text-sm\">\n {invitation.email}\n </span>\n\n <span className=\"truncate text-muted-foreground text-xs\">\n {localization.EXPIRES}{\" \"}\n {invitation.expiresAt.toLocaleDateString(lang ?? \"en\")}\n </span>\n </div>\n </div>\n\n <span className=\"truncate text-sm opacity-70\">{role?.label}</span>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isLoading}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n {isLoading ? (\n <Loader2 className=\"animate-spin\" />\n ) : (\n <EllipsisIcon className={classNames?.icon} />\n )}\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuItem\n onClick={handleCancelInvitation}\n disabled={isLoading}\n variant=\"destructive\"\n >\n <XIcon className={classNames?.icon} />\n\n {localization.CANCEL_INVITATION}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </Card>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { Trash2Icon, UploadCloudIcon } from \"lucide-react\"\nimport {\n type ComponentProps,\n useContext,\n useMemo,\n useRef,\n useState\n} from \"react\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { fileToBase64, resizeAndCropImage } from \"../../lib/image-utils\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { SettingsCardFooter } from \"../settings/shared/settings-card-footer\"\nimport { SettingsCardHeader } from \"../settings/shared/settings-card-header\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { OrganizationLogo } from \"./organization-logo\"\n\nexport interface OrganizationLogoCardProps extends ComponentProps<typeof Card> {\n className?: string\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n slug?: string\n}\n\nexport function OrganizationLogoCard({\n className,\n classNames,\n localization: localizationProp,\n slug,\n ...props\n}: OrganizationLogoCardProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization) {\n return (\n <Card\n className={cn(\n \"w-full pb-0 text-start\",\n className,\n classNames?.base\n )}\n {...props}\n >\n <div className=\"flex justify-between\">\n <SettingsCardHeader\n className=\"grow self-start\"\n title={localization.LOGO}\n description={localization.LOGO_DESCRIPTION}\n isPending\n classNames={classNames}\n />\n\n <Button\n type=\"button\"\n className=\"me-6 size-fit rounded-full\"\n size=\"icon\"\n variant=\"ghost\"\n disabled\n >\n <OrganizationLogo\n isPending\n className=\"size-20 text-2xl\"\n classNames={classNames?.avatar}\n localization={localization}\n />\n </Button>\n </div>\n\n <SettingsCardFooter\n className=\"!py-5\"\n instructions={localization.LOGO_INSTRUCTIONS}\n classNames={classNames}\n isPending\n />\n </Card>\n )\n }\n\n return (\n <OrganizationLogoForm\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction OrganizationLogoForm({\n className,\n classNames,\n localization: localizationProp,\n organization,\n ...props\n}: OrganizationLogoCardProps & { organization: Organization }) {\n const {\n hooks: { useHasPermission },\n localization: authLocalization,\n organization: organizationOptions,\n mutators: { updateOrganization },\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...authLocalization, ...localizationProp }),\n [authLocalization, localizationProp]\n )\n\n const { refetch: refetchOrganization } = useCurrentOrganization({\n slug: organization.slug\n })\n\n const { data: hasPermission, isPending: permissionPending } =\n useHasPermission({\n organizationId: organization.id,\n permissions: {\n organization: [\"update\"]\n }\n })\n\n const isPending = permissionPending\n\n const fileInputRef = useRef<HTMLInputElement | null>(null)\n const [loading, setLoading] = useState(false)\n\n const handleLogoChange = async (file: File) => {\n if (!organizationOptions?.logo || !hasPermission?.success) return\n\n setLoading(true)\n\n const resizedFile = await resizeAndCropImage(\n file,\n crypto.randomUUID(),\n organizationOptions.logo.size,\n organizationOptions.logo.extension\n )\n\n let image: string | undefined | null\n\n if (organizationOptions.logo.upload) {\n image = await organizationOptions.logo.upload(resizedFile)\n } else {\n image = await fileToBase64(resizedFile)\n }\n\n if (!image) {\n setLoading(false)\n return\n }\n\n try {\n await updateOrganization({\n organizationId: organization.id,\n data: { logo: image }\n })\n\n await refetchOrganization?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setLoading(false)\n }\n\n const handleDeleteLogo = async () => {\n if (!hasPermission?.success) return\n\n setLoading(true)\n\n try {\n if (organization.logo) {\n await organizationOptions?.logo?.delete?.(organization.logo)\n }\n\n await updateOrganization({\n organizationId: organization.id,\n data: { logo: \"\" }\n })\n\n await refetchOrganization?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setLoading(false)\n }\n\n const openFileDialog = () => {\n fileInputRef.current?.click()\n }\n\n return (\n <Card\n className={cn(\n \"w-full pb-0 text-start\",\n className,\n classNames?.base\n )}\n {...props}\n >\n <input\n ref={fileInputRef}\n accept=\"image/*\"\n disabled={loading || !hasPermission?.success}\n hidden\n type=\"file\"\n onChange={(e) => {\n const file = e.target.files?.item(0)\n if (file) handleLogoChange(file)\n\n e.target.value = \"\"\n }}\n />\n\n <div className=\"flex justify-between\">\n <SettingsCardHeader\n className=\"grow self-start\"\n title={localization.LOGO}\n description={localization.LOGO_DESCRIPTION}\n isPending={isPending}\n classNames={classNames}\n />\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n className=\"me-6 size-fit rounded-full\"\n size=\"icon\"\n variant=\"ghost\"\n disabled={!hasPermission?.success}\n >\n <OrganizationLogo\n isPending={isPending || loading}\n key={organization.logo}\n className=\"size-20 text-2xl\"\n classNames={classNames?.avatar}\n organization={organization}\n localization={localization}\n />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n align=\"end\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuItem\n onClick={openFileDialog}\n disabled={loading || !hasPermission?.success}\n >\n <UploadCloudIcon />\n\n {localization.UPLOAD_LOGO}\n </DropdownMenuItem>\n\n {organization.logo && (\n <DropdownMenuItem\n onClick={handleDeleteLogo}\n disabled={loading || !hasPermission?.success}\n variant=\"destructive\"\n >\n <Trash2Icon />\n\n {localization.DELETE_LOGO}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n <SettingsCardFooter\n className=\"!py-5\"\n instructions={localization.LOGO_INSTRUCTIONS}\n classNames={classNames}\n isPending={isPending}\n isSubmitting={loading}\n />\n </Card>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext, useMemo, useState } from \"react\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { CardContent } from \"../ui/card\"\nimport { InviteMemberDialog } from \"./invite-member-dialog\"\nimport { MemberCell } from \"./member-cell\"\n\nexport function OrganizationMembersCard({\n className,\n classNames,\n localization: localizationProp,\n slug: slugProp,\n ...props\n}: SettingsCardProps & { slug?: string }) {\n const {\n localization: contextLocalization,\n organization: organizationOptions\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const slug = slugProp || organizationOptions?.slug\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization) {\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.MEMBERS}\n description={localization.MEMBERS_DESCRIPTION}\n instructions={localization.MEMBERS_INSTRUCTIONS}\n actionLabel={localization.INVITE_MEMBER}\n isPending\n {...props}\n />\n )\n }\n\n return (\n <OrganizationMembersContent\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction OrganizationMembersContent({\n className,\n classNames,\n localization: localizationProp,\n organization,\n ...props\n}: SettingsCardProps & { organization: Organization }) {\n const {\n hooks: { useHasPermission, useListMembers },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: hasPermissionInvite, isPending: isPendingInvite } =\n useHasPermission({\n organizationId: organization.id,\n permissions: {\n invitation: [\"create\"]\n }\n })\n\n const {\n data: hasPermissionUpdateMember,\n isPending: isPendingUpdateMember\n } = useHasPermission({\n organizationId: organization.id,\n permission: {\n member: [\"update\"]\n }\n })\n\n const isPending = isPendingInvite || isPendingUpdateMember\n\n const { data } = useListMembers({\n query: { organizationId: organization.id }\n })\n\n const members = data?.members\n\n const [inviteDialogOpen, setInviteDialogOpen] = useState(false)\n\n return (\n <>\n <SettingsCard\n className={className}\n classNames={classNames}\n title={localization.MEMBERS}\n description={localization.MEMBERS_DESCRIPTION}\n instructions={localization.MEMBERS_INSTRUCTIONS}\n actionLabel={localization.INVITE_MEMBER}\n action={() => setInviteDialogOpen(true)}\n isPending={isPending}\n disabled={!hasPermissionInvite?.success}\n {...props}\n >\n {!isPending && members && members.length > 0 && (\n <CardContent\n className={cn(\"grid gap-4\", classNames?.content)}\n >\n {members\n .sort(\n (a, b) =>\n new Date(a.createdAt).getTime() -\n new Date(b.createdAt).getTime()\n )\n .map((member) => (\n <MemberCell\n key={member.id}\n classNames={classNames}\n member={member}\n localization={localization}\n hideActions={\n !hasPermissionUpdateMember?.success\n }\n />\n ))}\n </CardContent>\n )}\n </SettingsCard>\n\n <InviteMemberDialog\n open={inviteDialogOpen}\n onOpenChange={setInviteDialogOpen}\n classNames={classNames}\n localization={localization}\n organization={organization}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage\n} from \"../ui/form\"\nimport { Input } from \"../ui/input\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from \"../ui/select\"\n\nexport interface InviteMemberDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n organization: Organization\n}\n\nexport function InviteMemberDialog({\n classNames,\n localization: localizationProp,\n onOpenChange,\n organization,\n ...props\n}: InviteMemberDialogProps) {\n const {\n authClient,\n hooks: { useListInvitations, useListMembers, useSession },\n localization: contextLocalization,\n toast,\n organization: organizationOptions,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data } = useListMembers({\n query: { organizationId: organization.id }\n })\n\n const { refetch } = useListInvitations({\n query: { organizationId: organization.id }\n })\n\n const members = data?.members\n\n const { data: sessionData } = useSession()\n const membership = members?.find((m) => m.userId === sessionData?.user.id)\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ] as const\n\n const roles = [...builtInRoles, ...(organizationOptions?.customRoles || [])]\n const availableRoles = roles.filter(\n (role) => membership?.role === \"owner\" || role.role !== \"owner\"\n )\n\n const formSchema = z.object({\n email: z\n .string()\n .min(1, { message: localization.EMAIL_REQUIRED })\n .email({\n message: localization.INVALID_EMAIL\n }),\n role: z.string().min(1, {\n message: `${localization.ROLE} ${localization.IS_REQUIRED}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\",\n role: \"member\"\n }\n })\n\n const isSubmitting = form.formState.isSubmitting\n\n async function onSubmit({ email, role }: z.infer<typeof formSchema>) {\n try {\n await authClient.organization.inviteMember({\n email,\n role: role as (typeof builtInRoles)[number][\"role\"],\n organizationId: organization.id,\n fetchOptions: { throw: true }\n })\n\n await refetch?.()\n\n onOpenChange?.(false)\n form.reset()\n\n toast({\n variant: \"success\",\n message:\n localization.SEND_INVITATION_SUCCESS ||\n \"Invitation sent successfully\"\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent className={classNames?.dialog?.content}>\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.INVITE_MEMBER}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.INVITE_MEMBER_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(onSubmit)}\n className=\"space-y-6\"\n >\n <FormField\n control={form.control}\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.EMAIL}\n </FormLabel>\n\n <FormControl>\n <Input\n placeholder={\n localization.EMAIL_PLACEHOLDER\n }\n type=\"email\"\n {...field}\n className={classNames?.input}\n />\n </FormControl>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"role\"\n render={({ field }) => (\n <FormItem>\n <FormLabel className={classNames?.label}>\n {localization.ROLE}\n </FormLabel>\n\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n >\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n\n <SelectContent>\n {availableRoles.map((role) => (\n <SelectItem\n key={role.role}\n value={role.role}\n >\n {role.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <FormMessage />\n </FormItem>\n )}\n />\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"submit\"\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isSubmitting}\n >\n {isSubmitting && (\n <Loader2 className=\"animate-spin\" />\n )}\n\n {localization.SEND_INVITATION}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { User } from \"better-auth\"\nimport type { Member } from \"better-auth/plugins/organization\"\nimport { EllipsisIcon, UserCogIcon, UserXIcon } from \"lucide-react\"\nimport { useContext, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { UserView } from \"../user-view\"\nimport { LeaveOrganizationDialog } from \"./leave-organization-dialog\"\nimport { RemoveMemberDialog } from \"./remove-member-dialog\"\nimport { UpdateMemberRoleDialog } from \"./update-member-role-dialog\"\n\nexport interface MemberCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n member: Member & { user?: Partial<User> | null }\n localization?: AuthLocalization\n hideActions?: boolean\n}\n\nexport function MemberCell({\n className,\n classNames,\n member,\n localization: localizationProp,\n hideActions\n}: MemberCellProps) {\n const {\n organization: organizationOptions,\n hooks: {\n useListMembers,\n useSession,\n useListOrganizations,\n useHasPermission\n },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n const localization = { ...contextLocalization, ...localizationProp }\n\n const { data: sessionData } = useSession()\n const [removeDialogOpen, setRemoveDialogOpen] = useState(false)\n const [leaveDialogOpen, setLeaveDialogOpen] = useState(false)\n const [updateRoleDialogOpen, setUpdateRoleDialogOpen] = useState(false)\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ]\n\n const { data } = useListMembers({\n query: { organizationId: member.organizationId }\n })\n\n const members = data?.members\n\n const myRole = members?.find(\n (m) => m.user?.id === sessionData?.user.id\n )?.role\n const roles = [...builtInRoles, ...(organizationOptions?.customRoles || [])]\n const role = roles.find((r) => r.role === member.role)\n\n const isSelf = sessionData?.user.id === member?.userId\n\n const { data: organizations } = useListOrganizations()\n const organization = organizations?.find(\n (org) => org.id === member.organizationId\n )\n\n const { data: hasPermissionToUpdateMember } = useHasPermission({\n organizationId: member.organizationId,\n permission: { member: [\"update\"] }\n })\n\n return (\n <>\n <Card\n className={cn(\n \"flex-row items-center p-4\",\n className,\n classNames?.cell\n )}\n >\n <UserView\n user={member.user}\n localization={localization}\n className=\"flex-1\"\n />\n\n <span className=\"text-xs opacity-70\">{role?.label}</span>\n\n {!hideActions &&\n (isSelf ||\n member.role !== \"owner\" ||\n myRole === \"owner\") && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n <EllipsisIcon\n className={classNames?.icon}\n />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n {hasPermissionToUpdateMember?.success && (\n <DropdownMenuItem\n onClick={() =>\n setUpdateRoleDialogOpen(true)\n }\n >\n <UserCogIcon\n className={classNames?.icon}\n />\n {localization?.UPDATE_ROLE}\n </DropdownMenuItem>\n )}\n\n <DropdownMenuItem\n onClick={() =>\n isSelf\n ? setLeaveDialogOpen(true)\n : setRemoveDialogOpen(true)\n }\n variant=\"destructive\"\n >\n <UserXIcon className={classNames?.icon} />\n {isSelf\n ? localization?.LEAVE_ORGANIZATION\n : localization?.REMOVE_MEMBER}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </Card>\n\n <RemoveMemberDialog\n open={removeDialogOpen}\n onOpenChange={setRemoveDialogOpen}\n member={member}\n classNames={classNames}\n localization={localization}\n />\n\n {organization && (\n <LeaveOrganizationDialog\n open={leaveDialogOpen}\n onOpenChange={setLeaveDialogOpen}\n organization={organization}\n classNames={classNames}\n localization={localization}\n />\n )}\n\n <UpdateMemberRoleDialog\n open={updateRoleDialogOpen}\n onOpenChange={setUpdateRoleDialogOpen}\n member={member}\n classNames={classNames}\n localization={localization}\n />\n </>\n )\n}\n","\"use client\"\n\nimport type { User } from \"better-auth\"\nimport type { Member } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo, useState } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport { MemberCell } from \"./member-cell\"\n\nexport interface RemoveMemberDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n member: Member & { user?: Partial<User> | null }\n}\n\nexport function RemoveMemberDialog({\n member,\n classNames,\n localization: localizationProp,\n onOpenChange,\n ...props\n}: RemoveMemberDialogProps) {\n const {\n authClient,\n hooks: { useListMembers },\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { refetch } = useListMembers({\n query: { organizationId: member.organizationId }\n })\n\n const [isRemoving, setIsRemoving] = useState(false)\n\n const removeMember = async () => {\n setIsRemoving(true)\n\n try {\n await authClient.organization.removeMember({\n memberIdOrEmail: member.id,\n organizationId: member.organizationId,\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.REMOVE_MEMBER_SUCCESS\n })\n\n await refetch?.()\n\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsRemoving(false)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={classNames?.dialog?.content}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.REMOVE_MEMBER}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.REMOVE_MEMBER_CONFIRM}\n </DialogDescription>\n </DialogHeader>\n\n <MemberCell\n className={classNames?.cell}\n member={member}\n localization={localization}\n hideActions\n />\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isRemoving}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={removeMember}\n className={cn(\n classNames?.button,\n classNames?.destructiveButton\n )}\n disabled={isRemoving}\n >\n {isRemoving && <Loader2 className=\"animate-spin\" />}\n\n {localization.REMOVE_MEMBER}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport type { User } from \"better-auth\"\nimport type { Member } from \"better-auth/plugins/organization\"\nimport { Loader2 } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo, useState } from \"react\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from \"../ui/select\"\nimport { MemberCell } from \"./member-cell\"\n\nexport interface UpdateMemberRoleDialogProps\n extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n localization?: AuthLocalization\n member: Member & { user?: Partial<User> | null }\n}\n\nexport function UpdateMemberRoleDialog({\n member,\n classNames,\n localization: localizationProp,\n onOpenChange,\n ...props\n}: UpdateMemberRoleDialogProps) {\n const {\n authClient,\n hooks: { useSession, useListMembers },\n localization: contextLocalization,\n organization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data, refetch } = useListMembers({\n query: { organizationId: member.organizationId }\n })\n\n const members = data?.members\n\n const { data: sessionData } = useSession()\n\n const [isUpdating, setIsUpdating] = useState(false)\n const [selectedRole, setSelectedRole] = useState(member.role)\n\n const builtInRoles = [\n { role: \"owner\", label: localization.OWNER },\n { role: \"admin\", label: localization.ADMIN },\n { role: \"member\", label: localization.MEMBER }\n ]\n\n const roles = [...builtInRoles, ...(organization?.customRoles || [])]\n\n const currentUserRole = members?.find(\n (m) => m.user?.id === sessionData?.user.id\n )?.role\n\n const availableRoles = roles.filter((role) => {\n if (role.role === \"owner\") {\n return currentUserRole === \"owner\"\n }\n\n if (role.role === \"admin\") {\n return currentUserRole === \"owner\" || currentUserRole === \"admin\"\n }\n\n return true\n })\n\n const updateMemberRole = async () => {\n if (selectedRole === member.role) {\n toast({\n variant: \"error\",\n message: `${localization.ROLE} ${localization.IS_THE_SAME}`\n })\n\n return\n }\n\n setIsUpdating(true)\n\n try {\n await authClient.organization.updateMemberRole({\n memberId: member.id,\n role: selectedRole,\n organizationId: member.organizationId,\n fetchOptions: {\n throw: true\n }\n })\n\n toast({\n variant: \"success\",\n message: localization.MEMBER_ROLE_UPDATED\n })\n\n await refetch?.()\n\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n\n setIsUpdating(false)\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={classNames?.dialog?.content}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.UPDATE_ROLE}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.UPDATE_ROLE_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"grid gap-6 py-4\">\n <MemberCell\n className={classNames?.cell}\n member={member}\n localization={localization}\n hideActions\n />\n\n <Select\n value={selectedRole}\n onValueChange={setSelectedRole}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue\n placeholder={localization.SELECT_ROLE}\n />\n </SelectTrigger>\n\n <SelectContent>\n {availableRoles.map((role) => (\n <SelectItem key={role.role} value={role.role}>\n {role.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange?.(false)}\n className={cn(\n classNames?.button,\n classNames?.outlineButton\n )}\n disabled={isUpdating}\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n type=\"button\"\n onClick={updateMemberRole}\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isUpdating}\n >\n {isUpdating && <Loader2 className=\"animate-spin\" />}\n\n {localization.UPDATE_ROLE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport {\n SettingsCard,\n type SettingsCardProps\n} from \"../settings/shared/settings-card\"\nimport { CardContent } from \"../ui/card\"\nimport { Form, FormControl, FormField, FormItem, FormMessage } from \"../ui/form\"\nimport { Input } from \"../ui/input\"\nimport { Skeleton } from \"../ui/skeleton\"\n\nexport interface OrganizationNameCardProps extends SettingsCardProps {\n slug?: string\n}\n\nexport function OrganizationNameCard({\n className,\n classNames,\n localization: localizationProp,\n slug,\n ...props\n}: OrganizationNameCardProps) {\n const { localization: contextLocalization } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization) {\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n actionLabel={localization.SAVE}\n description={localization.ORGANIZATION_NAME_DESCRIPTION}\n instructions={localization.ORGANIZATION_NAME_INSTRUCTIONS}\n isPending\n title={localization.ORGANIZATION_NAME}\n {...props}\n >\n <CardContent className={classNames?.content}>\n <Skeleton\n className={cn(\"h-9 w-full\", classNames?.skeleton)}\n />\n </CardContent>\n </SettingsCard>\n )\n }\n\n return (\n <OrganizationNameForm\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction OrganizationNameForm({\n className,\n classNames,\n localization: localizationProp,\n organization,\n ...props\n}: OrganizationNameCardProps & { organization: Organization }) {\n const {\n localization: contextLocalization,\n hooks: { useHasPermission },\n mutators: { updateOrganization },\n optimistic,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = { ...contextLocalization, ...localizationProp }\n\n const { data: hasPermission, isPending: permissionPending } =\n useHasPermission({\n organizationId: organization.id,\n permissions: {\n organization: [\"update\"]\n }\n })\n\n const { refetch: refetchOrganization } = useCurrentOrganization({\n slug: organization.slug\n })\n\n const isPending = permissionPending\n\n const formSchema = z.object({\n name: z.string().min(1, {\n message: `${localization.ORGANIZATION_NAME} ${localization.IS_REQUIRED}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n values: { name: organization.name || \"\" }\n })\n\n const { isSubmitting } = form.formState\n\n const updateOrganizationName = async ({\n name\n }: z.infer<typeof formSchema>) => {\n if (organization.name === name) {\n toast({\n variant: \"error\",\n message: `${localization.ORGANIZATION_NAME} ${localization.IS_THE_SAME}`\n })\n\n return\n }\n\n try {\n await updateOrganization({\n organizationId: organization.id,\n data: { name }\n })\n\n await refetchOrganization?.()\n\n toast({\n variant: \"success\",\n message: `${localization.ORGANIZATION_NAME} ${localization.UPDATED_SUCCESSFULLY}`\n })\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(updateOrganizationName)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.ORGANIZATION_NAME_DESCRIPTION}\n instructions={localization.ORGANIZATION_NAME_INSTRUCTIONS}\n isPending={isPending}\n title={localization.ORGANIZATION_NAME}\n actionLabel={localization.SAVE}\n optimistic={optimistic}\n disabled={!hasPermission?.success}\n {...props}\n >\n <CardContent className={classNames?.content}>\n {isPending ? (\n <Skeleton\n className={cn(\n \"h-9 w-full\",\n classNames?.skeleton\n )}\n />\n ) : (\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormControl>\n <Input\n className={classNames?.input}\n placeholder={\n localization.ORGANIZATION_NAME_PLACEHOLDER\n }\n disabled={\n isSubmitting ||\n !hasPermission?.success\n }\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )}\n </CardContent>\n </SettingsCard>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport { useContext } from \"react\"\n\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { DeleteOrganizationCard } from \"./delete-organization-card\"\nimport { OrganizationLogoCard } from \"./organization-logo-card\"\nimport { OrganizationNameCard } from \"./organization-name-card\"\nimport { OrganizationSlugCard } from \"./organization-slug-card\"\n\nexport type OrganizationSettingsCardsProps = {\n className?: string\n classNames?: {\n card?: SettingsCardClassNames\n cards?: string\n }\n localization?: Partial<AuthLocalization>\n slug?: string\n}\n\nexport function OrganizationSettingsCards({\n className,\n classNames,\n localization,\n slug\n}: OrganizationSettingsCardsProps) {\n const { organization: organizationOptions } = useContext(AuthUIContext)\n\n return (\n <div\n className={cn(\n \"flex w-full flex-col gap-4 md:gap-6\",\n className,\n classNames?.cards\n )}\n >\n {organizationOptions?.logo && (\n <OrganizationLogoCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n )}\n\n <OrganizationNameCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n\n <OrganizationSlugCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n\n <DeleteOrganizationCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n </div>\n )\n}\n","\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport { useContext, useMemo } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport {\n SettingsCard,\n type SettingsCardProps\n} from \"../settings/shared/settings-card\"\nimport { CardContent } from \"../ui/card\"\nimport { Form, FormControl, FormField, FormItem, FormMessage } from \"../ui/form\"\nimport { Input } from \"../ui/input\"\nimport { Skeleton } from \"../ui/skeleton\"\n\nexport interface OrganizationSlugCardProps extends SettingsCardProps {\n slug?: string\n}\n\nexport function OrganizationSlugCard({\n className,\n classNames,\n localization: localizationProp,\n slug: slugProp,\n ...props\n}: OrganizationSlugCardProps) {\n const {\n localization: contextLocalization,\n organization: organizationOptions\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const slug = slugProp || organizationOptions?.slug\n\n const { data: organization } = useCurrentOrganization({ slug })\n\n if (!organization) {\n return (\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.ORGANIZATION_SLUG_DESCRIPTION}\n instructions={localization.ORGANIZATION_SLUG_INSTRUCTIONS}\n isPending\n title={localization.ORGANIZATION_SLUG}\n actionLabel={localization.SAVE}\n {...props}\n >\n <CardContent className={classNames?.content}>\n <Skeleton\n className={cn(\"h-9 w-full\", classNames?.skeleton)}\n />\n </CardContent>\n </SettingsCard>\n )\n }\n\n return (\n <OrganizationSlugForm\n className={className}\n classNames={classNames}\n localization={localization}\n organization={organization}\n {...props}\n />\n )\n}\n\nfunction OrganizationSlugForm({\n className,\n classNames,\n localization: localizationProp,\n organization,\n ...props\n}: OrganizationSlugCardProps & { organization: Organization }) {\n const {\n localization: contextLocalization,\n hooks: { useHasPermission },\n mutators: { updateOrganization },\n optimistic,\n toast,\n organization: organizationOptions,\n replace,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const { refetch: refetchOrganization } = useCurrentOrganization({\n slug: organization.slug\n })\n\n const { data: hasPermission, isPending } = useHasPermission({\n organizationId: organization.id,\n permissions: {\n organization: [\"update\"]\n }\n })\n\n const formSchema = z.object({\n slug: z\n .string()\n .min(1, {\n message: `${localization.ORGANIZATION_SLUG} ${localization.IS_REQUIRED}`\n })\n .regex(/^[a-z0-9-]+$/, {\n message: `${localization.ORGANIZATION_SLUG} ${localization.IS_INVALID}`\n })\n })\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n values: { slug: organization.slug || \"\" }\n })\n\n const { isSubmitting } = form.formState\n\n const updateOrganizationSlug = async ({\n slug\n }: z.infer<typeof formSchema>) => {\n if (organization.slug === slug) {\n toast({\n variant: \"error\",\n message: `${localization.ORGANIZATION_SLUG} ${localization.IS_THE_SAME}`\n })\n\n return\n }\n\n try {\n await updateOrganization({\n organizationId: organization.id,\n data: { slug }\n })\n\n await refetchOrganization?.()\n\n toast({\n variant: \"success\",\n message: `${localization.ORGANIZATION_SLUG} ${localization.UPDATED_SUCCESSFULLY}`\n })\n\n // If using slug-based paths, redirect to the new slug's settings route\n if (organizationOptions?.pathMode === \"slug\") {\n const basePath = organizationOptions.basePath\n const settingsPath = organizationOptions.viewPaths.SETTINGS\n replace(`${basePath}/${slug}/${settingsPath}`)\n }\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n }\n }\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(updateOrganizationSlug)}>\n <SettingsCard\n className={className}\n classNames={classNames}\n description={localization.ORGANIZATION_SLUG_DESCRIPTION}\n instructions={localization.ORGANIZATION_SLUG_INSTRUCTIONS}\n isPending={isPending}\n title={localization.ORGANIZATION_SLUG}\n actionLabel={localization.SAVE}\n optimistic={optimistic}\n disabled={!hasPermission?.success}\n {...props}\n >\n <CardContent className={classNames?.content}>\n {isPending ? (\n <Skeleton\n className={cn(\n \"h-9 w-full\",\n classNames?.skeleton\n )}\n />\n ) : (\n <FormField\n control={form.control}\n name=\"slug\"\n render={({ field }) => (\n <FormItem>\n <FormControl>\n <Input\n className={classNames?.input}\n placeholder={\n localization.ORGANIZATION_SLUG_PLACEHOLDER\n }\n disabled={\n isSubmitting ||\n !hasPermission?.success\n }\n {...field}\n />\n </FormControl>\n\n <FormMessage\n className={classNames?.error}\n />\n </FormItem>\n )}\n />\n )}\n </CardContent>\n </SettingsCard>\n </form>\n </Form>\n )\n}\n","\"use client\"\n\nimport type { Organization } from \"better-auth/plugins/organization\"\nimport {\n ChevronsUpDown,\n LogInIcon,\n PlusCircleIcon,\n SettingsIcon\n} from \"lucide-react\"\nimport {\n type ComponentProps,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from \"react\"\n\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { User } from \"../../types/auth-client\"\nimport { Button } from \"../ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { UserAvatar, type UserAvatarClassNames } from \"../user-avatar\"\nimport type { UserViewClassNames } from \"../user-view\"\nimport { CreateOrganizationDialog } from \"./create-organization-dialog\"\nimport {\n OrganizationCellView,\n type OrganizationViewClassNames\n} from \"./organization-cell-view\"\nimport { OrganizationLogo } from \"./organization-logo\"\nimport { PersonalAccountView } from \"./personal-account-view\"\n\nexport interface OrganizationSwitcherClassNames {\n base?: string\n skeleton?: string\n trigger?: {\n base?: string\n avatar?: UserAvatarClassNames\n user?: UserViewClassNames\n organization?: OrganizationViewClassNames\n skeleton?: string\n }\n content?: {\n base?: string\n user?: UserViewClassNames\n organization?: OrganizationViewClassNames\n avatar?: UserAvatarClassNames\n menuItem?: string\n separator?: string\n }\n}\n\nexport interface OrganizationSwitcherProps\n extends Omit<ComponentProps<typeof Button>, \"trigger\"> {\n classNames?: OrganizationSwitcherClassNames\n align?: \"center\" | \"start\" | \"end\"\n alignOffset?: number\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n trigger?: ReactNode\n localization?: AuthLocalization\n slug?: string\n onSetActive?: (organization: Organization | null) => void\n /**\n * Hide the personal organization option from the switcher.\n * When true, users can only switch between organizations and cannot access their personal account.\n * If no organization is active, the first available organization will be automatically selected.\n * @default false\n */\n hidePersonal?: boolean\n}\n\n/**\n * Displays an interactive user button with dropdown menu functionality\n *\n * Renders a user interface element that can be displayed as either an icon or full button:\n * - Shows a user avatar or placeholder when in icon mode\n * - Displays user name and email with dropdown indicator in full mode\n * - Provides dropdown menu with authentication options (sign in/out, settings, etc.)\n * - Supports multi-session functionality for switching between accounts\n * - Can be customized with additional links and styling options\n */\nexport function OrganizationSwitcher({\n className,\n classNames,\n align,\n alignOffset,\n side,\n sideOffset,\n trigger,\n localization: localizationProp,\n slug: slugProp,\n size,\n onSetActive,\n hidePersonal,\n ...props\n}: OrganizationSwitcherProps) {\n const {\n authClient,\n basePath,\n hooks: { useSession, useListOrganizations },\n localization: contextLocalization,\n account: accountOptions,\n organization: organizationOptions,\n redirectTo,\n navigate,\n toast,\n viewPaths,\n Link,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const {\n pathMode,\n slug: contextSlug,\n personalPath\n } = organizationOptions || {}\n\n const slug = slugProp || contextSlug\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const [activeOrganizationPending, setActiveOrganizationPending] =\n useState(false)\n const [isCreateOrgDialogOpen, setIsCreateOrgDialogOpen] = useState(false)\n const [dropdownOpen, setDropdownOpen] = useState(false)\n\n const { data: sessionData, isPending: sessionPending } = useSession()\n const user = sessionData?.user\n\n const { data: organizations, isPending: organizationsPending } =\n useListOrganizations()\n\n const {\n data: activeOrganization,\n isPending: organizationPending,\n isRefetching: organizationRefetching,\n refetch: organizationRefetch\n } = useCurrentOrganization({ slug })\n\n const isPending =\n organizationsPending ||\n sessionPending ||\n activeOrganizationPending ||\n organizationPending\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: ignore\n useEffect(() => {\n if (organizationRefetching) return\n\n setActiveOrganizationPending(false)\n }, [activeOrganization, organizationRefetching])\n\n const switchOrganization = useCallback(\n async (organization: Organization | null) => {\n // Prevent switching to personal account when hidePersonal is true\n if (hidePersonal && organization === null) {\n return\n }\n\n if (pathMode === \"slug\") {\n if (organization) {\n navigate(\n `${organizationOptions?.basePath}/${organization.slug}`\n )\n } else {\n navigate(personalPath ?? redirectTo)\n }\n\n return\n }\n\n setActiveOrganizationPending(true)\n\n try {\n onSetActive?.(organization)\n\n await authClient.organization.setActive({\n organizationId: organization?.id || null,\n fetchOptions: {\n throw: true\n }\n })\n\n organizationRefetch?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n\n setActiveOrganizationPending(false)\n }\n },\n [\n authClient,\n toast,\n localization,\n localizeErrors,\n onSetActive,\n hidePersonal,\n pathMode,\n personalPath,\n organizationOptions?.basePath,\n redirectTo,\n navigate,\n organizationRefetch\n ]\n )\n\n // Auto-select first organization when hidePersonal is true\n useEffect(() => {\n if (\n hidePersonal &&\n !activeOrganization &&\n !activeOrganizationPending &&\n organizations &&\n organizations.length > 0 &&\n !sessionPending &&\n !organizationPending &&\n !slug\n ) {\n switchOrganization(organizations[0])\n }\n }, [\n hidePersonal,\n activeOrganization,\n activeOrganizationPending,\n organizations,\n sessionPending,\n organizationPending,\n switchOrganization,\n slug\n ])\n\n return (\n <>\n <DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>\n <DropdownMenuTrigger asChild>\n {trigger ||\n (size === \"icon\" ? (\n <Button\n size=\"icon\"\n className={cn(\n \"size-fit rounded-full\",\n className,\n classNames?.trigger?.base\n )}\n variant=\"ghost\"\n type=\"button\"\n {...props}\n >\n {isPending ||\n activeOrganization ||\n !sessionData ||\n (user as User)?.isAnonymous ||\n hidePersonal ? (\n <OrganizationLogo\n key={activeOrganization?.logo}\n className={cn(\n className,\n classNames?.base\n )}\n classNames={classNames?.trigger?.avatar}\n isPending={isPending}\n organization={activeOrganization}\n aria-label={localization.ORGANIZATION}\n localization={localization}\n />\n ) : (\n <UserAvatar\n key={user?.image}\n className={cn(\n className,\n classNames?.base\n )}\n classNames={classNames?.trigger?.avatar}\n user={user}\n aria-label={localization.ACCOUNT}\n localization={localization}\n />\n )}\n </Button>\n ) : (\n <Button\n className={cn(\n \"!p-2 h-fit\",\n className,\n classNames?.trigger?.base\n )}\n size={size}\n {...props}\n >\n {isPending ||\n activeOrganization ||\n !sessionData ||\n (user as User)?.isAnonymous ||\n hidePersonal ? (\n <OrganizationCellView\n classNames={\n classNames?.trigger?.organization\n }\n isPending={isPending}\n localization={localization}\n organization={activeOrganization}\n size={size}\n />\n ) : (\n <PersonalAccountView\n classNames={classNames?.trigger?.user}\n localization={localization}\n size={size}\n user={user}\n />\n )}\n\n <ChevronsUpDown className=\"ml-auto\" />\n </Button>\n ))}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n className={cn(\n \"w-[--radix-dropdown-menu-trigger-width] min-w-56 max-w-64\",\n classNames?.content?.base\n )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <div\n className={cn(\n \"flex items-center justify-between gap-2 p-2\",\n classNames?.content?.menuItem\n )}\n >\n {(user && !(user as User).isAnonymous) || isPending ? (\n <>\n {activeOrganizationPending ||\n activeOrganization ||\n hidePersonal ? (\n <OrganizationCellView\n classNames={\n classNames?.content?.organization\n }\n isPending={\n isPending ||\n activeOrganizationPending\n }\n organization={activeOrganization}\n localization={localization}\n />\n ) : (\n <PersonalAccountView\n classNames={classNames?.content?.user}\n isPending={isPending}\n localization={localization}\n user={user}\n />\n )}\n\n {!isPending && (\n <Link\n href={\n activeOrganization\n ? pathMode === \"slug\"\n ? `${organizationOptions?.basePath}/${activeOrganization.slug}/${organizationOptions?.viewPaths.SETTINGS}`\n : `${organizationOptions?.basePath}/${organizationOptions?.viewPaths.SETTINGS}`\n : `${accountOptions?.basePath}/${accountOptions?.viewPaths.SETTINGS}`\n }\n >\n <Button\n size=\"icon\"\n variant=\"outline\"\n className=\"!size-8 ml-auto\"\n onClick={() =>\n setDropdownOpen(false)\n }\n >\n <SettingsIcon className=\"size-4\" />\n </Button>\n </Link>\n )}\n </>\n ) : (\n <div className=\"-my-1 text-muted-foreground text-xs\">\n {localization.ORGANIZATION}\n </div>\n )}\n </div>\n\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n\n {activeOrganization &&\n !hidePersonal &&\n (pathMode === \"slug\" ? (\n <Link href={personalPath ?? redirectTo}>\n <DropdownMenuItem>\n <PersonalAccountView\n classNames={classNames?.content?.user}\n isPending={isPending}\n localization={localization}\n user={user}\n />\n </DropdownMenuItem>\n </Link>\n ) : (\n <DropdownMenuItem\n onClick={() => switchOrganization(null)}\n >\n <PersonalAccountView\n classNames={classNames?.content?.user}\n isPending={isPending}\n localization={localization}\n user={user}\n />\n </DropdownMenuItem>\n ))}\n\n {organizations?.map(\n (organization) =>\n organization.id !== activeOrganization?.id &&\n (pathMode === \"slug\" ? (\n <Link\n key={organization.id}\n href={`${organizationOptions?.basePath}/${organization.slug}`}\n >\n <DropdownMenuItem>\n <OrganizationCellView\n classNames={\n classNames?.content\n ?.organization\n }\n isPending={isPending}\n localization={localization}\n organization={organization}\n />\n </DropdownMenuItem>\n </Link>\n ) : (\n <DropdownMenuItem\n key={organization.id}\n onClick={() =>\n switchOrganization(organization)\n }\n >\n <OrganizationCellView\n classNames={\n classNames?.content?.organization\n }\n isPending={isPending}\n localization={localization}\n organization={organization}\n />\n </DropdownMenuItem>\n ))\n )}\n\n {organizations &&\n organizations.length > 0 &&\n (!hidePersonal || organizations.length > 1) && (\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n )}\n\n {!isPending &&\n sessionData &&\n !(user as User).isAnonymous ? (\n <DropdownMenuItem\n className={cn(classNames?.content?.menuItem)}\n onClick={() => setIsCreateOrgDialogOpen(true)}\n >\n <PlusCircleIcon />\n {localization.CREATE_ORGANIZATION}\n </DropdownMenuItem>\n ) : (\n <Link href={`${basePath}/${viewPaths.SIGN_IN}`}>\n <DropdownMenuItem\n className={cn(classNames?.content?.menuItem)}\n >\n <LogInIcon />\n {localization.SIGN_IN}\n </DropdownMenuItem>\n </Link>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <CreateOrganizationDialog\n open={isCreateOrgDialogOpen}\n onOpenChange={setIsCreateOrgDialogOpen}\n localization={localization}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { MenuIcon } from \"lucide-react\"\nimport { useContext, useEffect, useMemo } from \"react\"\nimport { useAuthenticate } from \"../../hooks/use-authenticate\"\nimport { useCurrentOrganization } from \"../../hooks/use-current-organization\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getViewByPath } from \"../../lib/utils\"\nimport type { OrganizationViewPath } from \"../../server\"\nimport type { AccountViewProps } from \"../account/account-view\"\nimport { ApiKeysCard } from \"../settings/api-key/api-keys-card\"\nimport { Button } from \"../ui/button\"\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger\n} from \"../ui/drawer\"\nimport { Label } from \"../ui/label\"\nimport { OrganizationInvitationsCard } from \"./organization-invitations-card\"\nimport { OrganizationMembersCard } from \"./organization-members-card\"\nimport { OrganizationSettingsCards } from \"./organization-settings-cards\"\nimport { TeamsCard } from \"./teams-card\"\n\nexport type OrganizationViewPageProps = Omit<AccountViewProps, \"view\"> & {\n slug?: string\n view?: OrganizationViewPath\n}\n\nexport function OrganizationView({\n className,\n classNames,\n localization: localizationProp,\n path: pathProp,\n pathname,\n view: viewProp,\n hideNav,\n slug: slugProp\n}: OrganizationViewPageProps) {\n const {\n teams: teamOptions,\n organization: organizationOptions,\n localization: contextLocalization,\n account: accountOptions,\n Link,\n replace\n } = useContext(AuthUIContext)\n\n const { slug: contextSlug, viewPaths, apiKey } = organizationOptions || {}\n const { enabled: teamsEnabled } = teamOptions || {}\n\n useAuthenticate()\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...localizationProp }),\n [contextLocalization, localizationProp]\n )\n\n const path = pathProp ?? pathname?.split(\"/\").pop()\n\n const view = viewProp || getViewByPath(viewPaths!, path) || \"SETTINGS\"\n\n const slug = slugProp || contextSlug\n\n const {\n data: organization,\n isPending: organizationPending,\n isRefetching: organizationRefetching\n } = useCurrentOrganization({ slug })\n\n const navItems: {\n view: OrganizationViewPath\n label: string\n }[] = [\n { view: \"SETTINGS\", label: localization.SETTINGS },\n { view: \"MEMBERS\", label: localization.MEMBERS }\n ]\n\n if (teamsEnabled) {\n navItems.push({\n view: \"TEAMS\",\n label: localization.TEAMS\n })\n }\n\n if (apiKey) {\n navItems.push({\n view: \"API_KEYS\",\n label: localization.API_KEYS\n })\n }\n\n useEffect(() => {\n if (organization || organizationPending || organizationRefetching)\n return\n\n replace(\n `${accountOptions?.basePath}/${accountOptions?.viewPaths?.ORGANIZATIONS}`\n )\n }, [\n organization,\n organizationPending,\n organizationRefetching,\n accountOptions?.basePath,\n accountOptions?.viewPaths?.ORGANIZATIONS,\n replace\n ])\n\n return (\n <div\n className={cn(\n \"flex w-full grow flex-col gap-4 md:flex-row md:gap-12\",\n className,\n classNames?.base\n )}\n >\n {!hideNav && (\n <div className=\"flex justify-between gap-2 md:hidden\">\n <Label className=\"font-semibold text-base\">\n {navItems.find((i) => i.view === view)?.label}\n </Label>\n\n <Drawer>\n <DrawerTrigger asChild>\n <Button variant=\"outline\">\n <MenuIcon />\n </Button>\n </DrawerTrigger>\n\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle className=\"hidden\">\n {localization.ORGANIZATION}\n </DrawerTitle>\n </DrawerHeader>\n <div className=\"flex flex-col px-4 pb-4\">\n {navItems.map((item) => (\n <Link\n key={item.view}\n href={`${organizationOptions?.basePath}${organizationOptions?.pathMode === \"slug\" ? `/${slug}` : \"\"}/${organizationOptions?.viewPaths[item.view]}`}\n >\n <Button\n size=\"lg\"\n className={cn(\n \"w-full justify-start px-4 transition-none\",\n classNames?.drawer?.menuItem,\n view === item.view\n ? \"font-semibold\"\n : \"text-foreground/70\"\n )}\n variant=\"ghost\"\n >\n {item.label}\n </Button>\n </Link>\n ))}\n </div>\n </DrawerContent>\n </Drawer>\n </div>\n )}\n\n {!hideNav && (\n <div className=\"hidden md:block\">\n <div\n className={cn(\n \"flex w-48 flex-col gap-1 lg:w-60\",\n classNames?.sidebar?.base\n )}\n >\n {navItems.map((item) => (\n <Link\n key={item.view}\n href={`${organizationOptions?.basePath}${organizationOptions?.pathMode === \"slug\" ? `/${slug}` : \"\"}/${organizationOptions?.viewPaths[item.view]}`}\n >\n <Button\n size=\"lg\"\n className={cn(\n \"w-full justify-start px-4 transition-none\",\n classNames?.sidebar?.button,\n view === item.view\n ? \"font-semibold\"\n : \"text-foreground/70\",\n view === item.view &&\n classNames?.sidebar?.buttonActive\n )}\n variant=\"ghost\"\n >\n {item.label}\n </Button>\n </Link>\n ))}\n </div>\n </div>\n )}\n\n {view === \"MEMBERS\" && (\n <div\n className={cn(\n \"flex w-full flex-col gap-4 md:gap-6\",\n className,\n classNames?.cards\n )}\n >\n <OrganizationMembersCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n\n <OrganizationInvitationsCard\n classNames={classNames?.card}\n localization={localization}\n slug={slug}\n />\n </div>\n )}\n\n {view === \"TEAMS\" && organization?.id && teamsEnabled && (\n <TeamsCard\n classNames={classNames}\n localization={localization}\n organizationId={organization.id}\n />\n )}\n\n {view === \"API_KEYS\" && (\n <ApiKeysCard\n classNames={classNames?.card}\n localization={localization}\n isPending={organizationPending}\n organizationId={organization?.id}\n />\n )}\n\n {view === \"SETTINGS\" && (\n <OrganizationSettingsCards\n classNames={classNames}\n localization={localization}\n slug={slug}\n />\n )}\n </div>\n )\n}\n","\"use client\"\nimport { useContext, useMemo, useState } from \"react\"\nimport { useIsHydrated } from \"../../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn } from \"../../lib/utils\"\nimport type { SettingsCardProps } from \"../settings/shared/settings-card\"\nimport { SettingsCard } from \"../settings/shared/settings-card\"\nimport { SettingsCellSkeleton } from \"../settings/skeletons/settings-cell-skeleton\"\nimport { CardContent } from \"../ui/card\"\nimport { CreateTeamDialog } from \"./create-team-dialog\"\nimport { TeamCell } from \"./team-cell\"\n\n/**\n * Render a settings card that lists teams for the current organization and exposes a dialog to create a new team.\n *\n * The component merges provided localization with context localization, fetches teams for the current organization,\n * shows a loading skeleton while data is pending, displays a localized empty message when no teams exist,\n * and renders a TeamCell for each team. It also controls a CreateTeamDialog tied to the current organization.\n *\n * @returns A React element containing the teams settings card and the create-team dialog\n */\n\nexport interface TeamsCardProps extends SettingsCardProps {\n organizationId: string\n}\n\nexport function TeamsCard({\n className,\n classNames,\n localization,\n organizationId,\n ...props\n}: TeamsCardProps) {\n const {\n hooks: { useHasPermission, useListTeams },\n localization: contextLocalization\n } = useContext(AuthUIContext)\n\n localization = useMemo(\n () => ({ ...contextLocalization, ...localization }),\n [contextLocalization, localization]\n )\n\n const isHydrated = useIsHydrated()\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n\n const { data: hasPermissionCreate, isPending: permissionCreatePending } =\n useHasPermission({\n organizationId,\n permissions: {\n team: [\"create\"]\n }\n })\n\n const { data: hasPermissionUpdate, isPending: permissionUpdatePending } =\n useHasPermission({\n organizationId,\n permissions: {\n team: [\"update\"]\n }\n })\n\n const { data: hasPermissionDelete, isPending: permissionDeletePending } =\n useHasPermission({\n organizationId,\n permissions: {\n team: [\"delete\"]\n }\n })\n\n const {\n data: teams,\n isPending: teamsPending,\n refetch\n } = useListTeams({\n organizationId\n })\n\n const isPending =\n !isHydrated ||\n permissionCreatePending ||\n permissionUpdatePending ||\n permissionDeletePending ||\n teamsPending\n\n return (\n <>\n <SettingsCard\n action={() => setCreateDialogOpen(true)}\n actionLabel={localization.CREATE_TEAM}\n className={className}\n classNames={classNames}\n description={localization.TEAMS_DESCRIPTION}\n disabled={!hasPermissionCreate?.success}\n instructions={localization.CREATE_TEAM_INSTRUCTIONS}\n isPending={isPending}\n title={localization.TEAMS}\n {...props}\n >\n <CardContent className={cn(\"grid gap-4\", classNames?.content)}>\n {isPending ? (\n <SettingsCellSkeleton />\n ) : teams && teams.length > 0 ? (\n teams\n .sort(\n (a, b) =>\n new Date(a.createdAt).getTime() -\n new Date(b.createdAt).getTime()\n )\n .map((team) => (\n <TeamCell\n canDelete={!!hasPermissionDelete?.success}\n canUpdate={!!hasPermissionUpdate?.success}\n classNames={classNames}\n key={team.id}\n localization={localization}\n refetch={refetch}\n team={team}\n />\n ))\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n {localization.NO_TEAMS_FOUND}\n </p>\n )}\n </CardContent>\n </SettingsCard>\n\n <CreateTeamDialog\n classNames={classNames}\n localization={localization}\n onOpenChange={setCreateDialogOpen}\n open={createDialogOpen}\n organizationId={organizationId}\n refetch={refetch}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { Archive, Edit, EllipsisIcon, UsersIcon } from \"lucide-react\"\nimport { useState } from \"react\"\nimport { cn } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { Team } from \"../../types/auth-hooks\"\nimport type { Refetch } from \"../../types/refetch\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from \"../ui/dropdown-menu\"\nimport { DeleteTeamDialog } from \"./delete-team-dialog\"\nimport { UpdateTeamDialog } from \"./update-team-dialog\"\n\nexport interface TeamCellProps {\n className?: string\n classNames?: SettingsCardClassNames\n team: Team\n localization?: Partial<AuthLocalization>\n canDelete: boolean\n canUpdate: boolean\n refetch?: Refetch\n}\n\n/**\n * Render a single-row team cell with a color-coded circular avatar, the team name, and a localized \"Team\" label.\n *\n * @param classNames - Optional class name overrides for component parts\n * @param team - Team data object containing at least `id` and `name`\n * @param localization - Localization strings providing `TEAM` label\n * @returns The rendered team cell element\n */\nexport function TeamCell({\n className,\n classNames,\n team,\n localization,\n canDelete,\n canUpdate,\n refetch\n}: TeamCellProps) {\n /*\n const { teams } = useContext(AuthUIContext);\n const colorCount = Math.max(1, teams?.colors.count || 5);\n\n const getTeamColor = (index: number) => {\n const colorIndex = (index % colorCount) + 1;\n return `hsl(var(--team-${colorIndex}))`;\n };\n\n // Stable color hash based on team ID (sum of char codes)\n const teamIndex =\n team.id.split(\"\").reduce((sum, char) => sum + char.charCodeAt(0), 0) %\n colorCount;\n */\n\n const [showDeleteDialog, setShowDeleteDialog] = useState(false)\n const [showUpdateDialog, setShowUpdateDialog] = useState(false)\n\n return (\n <>\n <Card\n className={cn(\n \"flex-row items-center gap-3 truncate px-4 py-3\",\n className,\n classNames?.cell\n )}\n >\n <UsersIcon\n className={cn(\"size-5 flex-shrink-0\", classNames?.icon)}\n />\n\n <div className=\"flex flex-col truncate\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-semibold text-sm\">\n {team.name}\n </span>\n </div>\n\n <div className=\"truncate text-muted-foreground text-xs\">\n {localization?.TEAM}\n </div>\n </div>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={cn(\n \"relative ms-auto\",\n classNames?.button,\n classNames?.outlineButton\n )}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n >\n <EllipsisIcon className={classNames?.icon} />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuItem\n disabled={!canUpdate}\n onSelect={() => setShowUpdateDialog(true)}\n >\n <Edit className={classNames?.icon} />\n <span> {localization?.UPDATE_TEAM}</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n disabled={!canDelete}\n onClick={() => setShowDeleteDialog(true)}\n variant=\"destructive\"\n >\n <Archive className={classNames?.icon} />\n <span>{localization?.DELETE_TEAM}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </Card>\n\n <UpdateTeamDialog\n classNames={classNames}\n localization={localization}\n onOpenChange={setShowUpdateDialog}\n open={showUpdateDialog}\n refetch={refetch}\n team={team}\n />\n <DeleteTeamDialog\n classNames={classNames}\n localization={localization}\n onOpenChange={setShowDeleteDialog}\n open={showDeleteDialog}\n refetch={refetch}\n team={team}\n />\n </>\n )\n}\n","\"use client\"\n\nimport { Loader2, UsersIcon } from \"lucide-react\"\nimport { type ComponentProps, useContext, useMemo, useState } from \"react\"\nimport { AuthUIContext } from \"../../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../../lib/utils\"\nimport type { AuthLocalization } from \"../../localization/auth-localization\"\nimport type { Team } from \"../../types/auth-hooks\"\nimport type { Refetch } from \"../../types/refetch\"\nimport type { SettingsCardClassNames } from \"../settings/shared/settings-card\"\n\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from \"../ui/dialog\"\nimport { Field, FieldLabel } from \"../ui/field\"\nimport { Input } from \"../ui/input\"\n\ninterface UpdateTeamDialogProps extends ComponentProps<typeof Dialog> {\n classNames?: SettingsCardClassNames\n team: Team\n localization?: AuthLocalization\n refetch?: Refetch\n}\n\nexport function UpdateTeamDialog({\n classNames,\n team,\n localization: localizationProp,\n refetch,\n onOpenChange,\n ...props\n}: UpdateTeamDialogProps) {\n const {\n authClient,\n localization: contextLocalization,\n toast,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({\n ...contextLocalization,\n ...localizationProp\n }),\n [contextLocalization, localizationProp]\n )\n\n const [isUpdating, setIsUpdating] = useState(false)\n const [name, setName] = useState(team.name)\n\n const handleUpdate = async () => {\n try {\n setIsUpdating(true)\n await authClient.organization.updateTeam({\n teamId: team.id,\n data: { name },\n fetchOptions: { throw: true }\n })\n\n toast({\n variant: \"success\",\n message: localization.UPDATE_TEAM_SUCCESS\n })\n await refetch?.()\n onOpenChange?.(false)\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n } finally {\n setIsUpdating(false)\n }\n }\n\n return (\n <Dialog onOpenChange={onOpenChange} {...props}>\n <DialogContent\n className={classNames?.dialog?.content}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DialogHeader className={classNames?.dialog?.header}>\n <DialogTitle\n className={cn(\"text-lg md:text-xl\", classNames?.title)}\n >\n {localization.UPDATE_TEAM}\n </DialogTitle>\n\n <DialogDescription\n className={cn(\n \"text-xs md:text-sm\",\n classNames?.description\n )}\n >\n {localization.UPDATE_TEAM_DESCRIPTION}\n </DialogDescription>\n </DialogHeader>\n\n <Card\n className={cn(\n \"my-2 flex-row items-center gap-3 px-4 py-3\",\n classNames?.cell\n )}\n >\n <UsersIcon\n className={cn(\"size-5 flex-shrink-0\", classNames?.icon)}\n />\n\n <div className=\"flex flex-col truncate\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-semibold text-sm\">\n {team.name}\n </span>\n </div>\n\n <div className=\"truncate text-muted-foreground text-xs\">\n {localization?.TEAM}\n </div>\n </div>\n </Card>\n <Field className=\"grid gap-2\">\n <FieldLabel htmlFor=\"name\">\n {localization.TEAM_NAME}\n </FieldLabel>\n <Input\n id=\"name\"\n onChange={(e) => setName(e.target.value)}\n placeholder={localization.TEAM_NAME_PLACEHOLDER}\n required\n value={name}\n />\n </Field>\n\n <DialogFooter className={classNames?.dialog?.footer}>\n <Button\n className={cn(\n classNames?.button,\n classNames?.secondaryButton\n )}\n disabled={isUpdating}\n onClick={() => onOpenChange?.(false)}\n type=\"button\"\n variant=\"secondary\"\n >\n {localization.CANCEL}\n </Button>\n\n <Button\n className={cn(\n classNames?.button,\n classNames?.primaryButton\n )}\n disabled={isUpdating || name.trim().length === 0}\n onClick={handleUpdate}\n type=\"button\"\n >\n {isUpdating && <Loader2 className=\"animate-spin\" />}\n {localization.UPDATE}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport { useAuthenticate } from \"../hooks/use-authenticate\"\n\n/**\n * Redirects the user to the sign-in page\n *\n * Renders nothing and automatically redirects the current user to the authentication\n * sign-in page. Useful for protecting routes that require authentication or\n * redirecting users to sign in from various parts of the application.\n */\nexport function RedirectToSignIn(): ReactNode {\n useAuthenticate({ authView: \"SIGN_IN\" })\n return null\n}\n","\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport { useAuthenticate } from \"../hooks/use-authenticate\"\n\n/**\n * Redirects the user to the sign-up page\n *\n * Renders nothing and automatically redirects the current user to the authentication\n * sign-up page. Useful for directing new users to create an account or\n * for redirecting from marketing pages to the registration flow.\n */\nexport function RedirectToSignUp(): ReactNode {\n useAuthenticate({ authView: \"SIGN_UP\" })\n return null\n}\n","\"use client\"\n\nimport { type ReactNode, useContext } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\n\n/**\n * Conditionally renders content for authenticated users only\n *\n * Renders its children only when a user is authenticated with a valid session.\n * If no session exists, nothing is rendered. Useful for displaying protected\n * content or UI elements that should only be visible to signed-in users.\n */\nexport function SignedIn({ children }: { children: ReactNode }) {\n const {\n hooks: { useSession }\n } = useContext(AuthUIContext)\n const { data } = useSession()\n\n return data ? children : null\n}\n","\"use client\"\n\nimport { type ReactNode, useContext } from \"react\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\n\n/**\n * Conditionally renders content for unauthenticated users only\n *\n * Renders its children only when no user is authenticated and the authentication\n * state is not pending. If a session exists or is being loaded, nothing is rendered.\n * Useful for displaying sign-in prompts or content exclusive to guests.\n */\nexport function SignedOut({ children }: { children: ReactNode }) {\n const {\n hooks: { useSession }\n } = useContext(AuthUIContext)\n const { data, isPending } = useSession()\n\n return !data && !isPending ? children : null\n}\n","\"use client\"\nimport {\n ChevronsUpDown,\n LogInIcon,\n LogOutIcon,\n PlusCircleIcon,\n SettingsIcon,\n UserRoundPlus\n} from \"lucide-react\"\nimport {\n type ComponentProps,\n Fragment,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\"\n\nimport { useIsHydrated } from \"../hooks/use-hydrated\"\nimport { AuthUIContext } from \"../lib/auth-ui-provider\"\nimport { cn, getLocalizedError } from \"../lib/utils\"\nimport type { AuthLocalization } from \"../localization/auth-localization\"\nimport type { AnyAuthClient } from \"../types/any-auth-client\"\nimport type { User } from \"../types/auth-client\"\nimport { Button } from \"./ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from \"./ui/dropdown-menu\"\nimport { UserAvatar, type UserAvatarClassNames } from \"./user-avatar\"\nimport { UserView, type UserViewClassNames } from \"./user-view\"\n\nexport interface UserButtonClassNames {\n base?: string\n skeleton?: string\n trigger?: {\n base?: string\n avatar?: UserAvatarClassNames\n user?: UserViewClassNames\n skeleton?: string\n }\n content?: {\n base?: string\n user?: UserViewClassNames\n avatar?: UserAvatarClassNames\n menuItem?: string\n separator?: string\n }\n}\n\nexport interface UserButtonProps {\n className?: string\n classNames?: UserButtonClassNames\n align?: \"center\" | \"start\" | \"end\"\n alignOffset?: number\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n additionalLinks?: (\n | {\n href: string\n icon?: ReactNode\n label: ReactNode\n signedIn?: boolean\n separator?: boolean\n }\n | ReactNode\n )[]\n trigger?: ReactNode\n disableDefaultLinks?: boolean\n /**\n * @default authLocalization\n * @remarks `AuthLocalization`\n */\n localization?: AuthLocalization\n}\n\n/**\n * Displays an interactive user button with dropdown menu functionality\n *\n * Renders a user interface element that can be displayed as either an icon or full button:\n * - Shows a user avatar or placeholder when in icon mode\n * - Displays user name and email with dropdown indicator in full mode\n * - Provides dropdown menu with authentication options (sign in/out, settings, etc.)\n * - Supports multi-session functionality for switching between accounts\n * - Can be customized with additional links and styling options\n */\nexport function UserButton({\n className,\n classNames,\n align,\n alignOffset,\n side,\n sideOffset,\n trigger,\n additionalLinks,\n disableDefaultLinks,\n localization: propLocalization,\n size,\n ...props\n}: UserButtonProps & ComponentProps<typeof Button>) {\n const {\n basePath,\n hooks: { useSession, useListDeviceSessions },\n mutators: { setActiveSession },\n localization: contextLocalization,\n multiSession,\n account: accountOptions,\n signUp,\n toast,\n viewPaths,\n onSessionChange,\n Link,\n localizeErrors\n } = useContext(AuthUIContext)\n\n const localization = useMemo(\n () => ({ ...contextLocalization, ...propLocalization }),\n [contextLocalization, propLocalization]\n )\n\n let deviceSessions:\n | AnyAuthClient[\"$Infer\"][\"Session\"][]\n | undefined\n | null = null\n let deviceSessionsPending = false\n\n if (multiSession) {\n const { data, isPending } = useListDeviceSessions()\n deviceSessions = data\n deviceSessionsPending = isPending\n }\n\n const { data: sessionData, isPending: sessionPending } = useSession()\n const user = sessionData?.user\n const [activeSessionPending, setActiveSessionPending] = useState(false)\n\n const isHydrated = useIsHydrated()\n const isPending = sessionPending || activeSessionPending || !isHydrated\n\n const switchAccount = useCallback(\n async (sessionToken: string) => {\n setActiveSessionPending(true)\n\n try {\n await setActiveSession({ sessionToken })\n\n onSessionChange?.()\n } catch (error) {\n toast({\n variant: \"error\",\n message: getLocalizedError({\n error,\n localization,\n localizeErrors\n })\n })\n setActiveSessionPending(false)\n }\n },\n [setActiveSession, onSessionChange, toast, localization, localizeErrors]\n )\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: ignore\n useEffect(() => {\n if (!multiSession) return\n\n setActiveSessionPending(false)\n }, [sessionData, multiSession])\n\n const warningLogged = useRef(false)\n\n useEffect(() => {\n if (size || warningLogged.current) return\n\n console.warn(\n \"[Better Auth UI] The `size` prop of `UserButton` no longer defaults to `icon`. Please pass `size='icon'` to the `UserButton` component to get the same behaviour as before. This warning will be removed in a future release. It can be suppressed in the meantime by defining the `size` prop.\"\n )\n\n warningLogged.current = true\n }, [size])\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n className={cn(\n size === \"icon\" && \"rounded-full\",\n classNames?.trigger?.base\n )}\n >\n {trigger ||\n (size === \"icon\" ? (\n <Button\n size=\"icon\"\n className=\"size-fit rounded-full\"\n variant=\"ghost\"\n >\n <UserAvatar\n key={user?.image}\n isPending={isPending}\n className={cn(className, classNames?.base)}\n classNames={classNames?.trigger?.avatar}\n user={user}\n aria-label={localization.ACCOUNT}\n localization={localization}\n />\n </Button>\n ) : (\n <Button\n className={cn(\n \"!p-2 h-fit\",\n className,\n classNames?.trigger?.base\n )}\n size={size}\n {...props}\n >\n <UserView\n size={size}\n user={\n !(user as User)?.isAnonymous ? user : null\n }\n isPending={isPending}\n classNames={classNames?.trigger?.user}\n localization={localization}\n />\n\n <ChevronsUpDown className=\"ml-auto\" />\n </Button>\n ))}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n className={cn(\n \"w-[--radix-dropdown-menu-trigger-width] min-w-56 max-w-64\",\n classNames?.content?.base\n )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <div className={cn(\"p-2\", classNames?.content?.menuItem)}>\n {(user && !(user as User).isAnonymous) || isPending ? (\n <UserView\n user={user}\n isPending={isPending}\n classNames={classNames?.content?.user}\n localization={localization}\n />\n ) : (\n <div className=\"-my-1 text-muted-foreground text-xs\">\n {localization.ACCOUNT}\n </div>\n )}\n </div>\n\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n\n {additionalLinks?.map((link, index) => {\n // Handle ReactNode directly\n if (\n !link ||\n typeof link !== \"object\" ||\n !(\"href\" in link)\n ) {\n return (\n <DropdownMenuItem\n key={index}\n className={classNames?.content?.menuItem}\n asChild\n >\n {link as React.ReactNode}\n </DropdownMenuItem>\n )\n }\n\n const { href, icon, label, signedIn, separator } = link\n\n if (\n signedIn !== undefined &&\n ((signedIn && !sessionData) ||\n (!signedIn && sessionData))\n ) {\n return null\n }\n\n return (\n <Fragment key={index}>\n <Link href={href}>\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n {icon}\n {label}\n </DropdownMenuItem>\n </Link>\n {separator && (\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n )}\n </Fragment>\n )\n })}\n\n {!user || (user as User).isAnonymous ? (\n <>\n <Link href={`${basePath}/${viewPaths.SIGN_IN}`}>\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n <LogInIcon />\n\n {localization.SIGN_IN}\n </DropdownMenuItem>\n </Link>\n\n {signUp && (\n <Link href={`${basePath}/${viewPaths.SIGN_UP}`}>\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n <UserRoundPlus />\n\n {localization.SIGN_UP}\n </DropdownMenuItem>\n </Link>\n )}\n </>\n ) : (\n <>\n {!disableDefaultLinks && accountOptions && (\n <Link\n href={`${accountOptions.basePath}/${accountOptions.viewPaths?.SETTINGS}`}\n >\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n <SettingsIcon />\n\n {localization.SETTINGS}\n </DropdownMenuItem>\n </Link>\n )}\n\n <Link href={`${basePath}/${viewPaths.SIGN_OUT}`}>\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n <LogOutIcon />\n\n {localization.SIGN_OUT}\n </DropdownMenuItem>\n </Link>\n </>\n )}\n\n {user && multiSession && (\n <>\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n\n {!deviceSessions && deviceSessionsPending && (\n <>\n <DropdownMenuItem\n disabled\n className={classNames?.content?.menuItem}\n >\n <UserView\n isPending={true}\n classNames={classNames?.content?.user}\n />\n </DropdownMenuItem>\n\n <DropdownMenuSeparator\n className={classNames?.content?.separator}\n />\n </>\n )}\n\n {deviceSessions\n ?.filter(\n (sessionData) =>\n sessionData.user.id !== user?.id\n )\n .map(({ session, user }) => (\n <Fragment key={session.id}>\n <DropdownMenuItem\n className={\n classNames?.content?.menuItem\n }\n onClick={() =>\n switchAccount(session.token)\n }\n >\n <UserView\n user={user}\n classNames={\n classNames?.content?.user\n }\n />\n </DropdownMenuItem>\n\n <DropdownMenuSeparator\n className={\n classNames?.content?.separator\n }\n />\n </Fragment>\n ))}\n\n <Link href={`${basePath}/${viewPaths.SIGN_IN}`}>\n <DropdownMenuItem\n className={classNames?.content?.menuItem}\n >\n <PlusCircleIcon />\n\n {localization.ADD_ACCOUNT}\n </DropdownMenuItem>\n </Link>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n"],"mappings":"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A,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAA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","names":["useContext","useMemo","useContext","useEffect","useMemo","useEffect","useEffect","useState","useEffect","useContext","useEffect","useState","useSyncExternalStore","key","toast","useContext","useSyncExternalStore","useState","error","useEffect","useContext","useEffect","useContext","useContext","useContext","useEffect","jsx","jsxs","toast","authClient","useMemo","basePath","useContext","useEffect","useContext","useMemo","useState","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","Loader2","useContext","useMemo","useRef","useState","z","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","Slot","useFormState","jsx","Label","jsx","useFormState","Label","Slot","jsx","jsx","useContext","useMemo","jsx","jsx","jsxs","useContext","useMemo","jsx","jsxs","authClient","toast","useContext","useMemo","useState","useRef","logo","Loader2","Loader2","useCallback","useContext","useMemo","useState","Loader2","useContext","useMemo","useState","useContext","Fragment","jsx","jsxs","useContext","jsx","jsxs","authClient","toast","useContext","useMemo","useState","Loader2","Fragment","jsx","jsxs","authClient","toast","useContext","useMemo","useState","useCallback","Loader2","Fragment","jsx","jsxs","useContext","useMemo","useState","CheckIcon","EllipsisIcon","Loader2","XIcon","useContext","useMemo","useState","useContext","jsx","jsxs","useContext","jsx","jsxs","useContext","useMemo","authClient","toast","useState","role","Loader2","EllipsisIcon","CheckIcon","XIcon","useContext","useContext","EllipsisIcon","Loader2","LogOutIcon","useContext","useState","useContext","useMemo","Fragment","jsx","jsxs","useContext","useMemo","jsx","jsxs","toast","useContext","useState","Loader2","EllipsisIcon","LogOutIcon","jsx","jsxs","useContext","Trash2Icon","UploadCloudIcon","useContext","useRef","useState","jsx","jsxs","authLocalization","toast","useContext","useRef","useState","UploadCloudIcon","Trash2Icon","zodResolver","useContext","useMemo","useForm","z","CheckIcon","jsx","CheckIcon","jsx","jsx","jsxs","toast","useContext","useMemo","useForm","zodResolver","useContext","jsx","useContext","useContext","jsx","useContext","zodResolver","useContext","useState","useForm","z","Fragment","jsx","jsxs","authClient","toast","useContext","useState","useForm","zodResolver","jsx","jsxs","useContext","useContext","useMemo","useState","KeyRoundIcon","useContext","useState","Loader2","useContext","useState","jsx","jsxs","toast","useContext","useState","Loader2","Fragment","jsx","jsxs","useContext","useState","KeyRoundIcon","CheckIcon","useContext","useState","Fragment","jsx","jsxs","useContext","useState","CheckIcon","zodResolver","Loader2","useContext","useForm","z","useContext","useMemo","Fragment","jsx","jsxs","useContext","useMemo","CheckIcon","jsx","jsxs","jsx","jsxs","jsxs","jsx","CheckIcon","jsx","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","Loader2","Fragment","jsx","jsxs","useContext","useMemo","useState","useContext","useContext","useState","zodResolver","Loader2","useContext","useForm","z","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","Loader2","jsx","jsxs","useContext","useState","useContext","useState","useForm","useContext","jsx","jsxs","useContext","Loader2","useContext","useState","Fragment","jsx","jsxs","toast","useContext","useState","Loader2","Fragment","jsx","jsxs","authClient","authLocalization","toast","useContext","useState","useForm","useContext","jsx","jsxs","XIcon","XIcon","Loader2","useContext","useState","jsx","jsxs","authClient","toast","useContext","useState","Loader2","Fragment","jsx","jsxs","useContext","socialProvider","zodResolver","useContext","useForm","z","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","Fragment","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","useContext","Loader2","useContext","useState","jsx","jsxs","toast","useContext","useState","Loader2","jsx","useContext","useContext","useState","zodResolver","Loader2","useContext","useState","useForm","z","CheckIcon","CopyIcon","useContext","useState","Fragment","jsx","jsxs","useContext","useState","CheckIcon","CopyIcon","Fragment","jsx","jsxs","authClient","toast","useContext","useState","useForm","zodResolver","Loader2","jsx","jsxs","useContext","useState","jsx","jsxs","useContext","useContext","Loader2","useContext","useState","BASE_ERROR_CODES","isRequestInProgress: AbortController | null","error: any","object","value: AuthQueryAtom<T>","message: BroadcastMessage","now","state: SessionRefreshState","url","value","session: SessionAtom","pluginPathMethods: Record<string, \"POST\" | \"GET\">","atomListeners: ClientAtomListener[]","current: any","defaultStatements","defaultAc","adminAc","defaultRoles","role","defaultRoles","adminAc","useRef","subscribe","useCallback","useSyncExternalStore","createAuthClient","resolvedHooks: Record<string, any>","createAuthClient","jsx","jsxs","toast","useContext","useState","Loader2","jsx","useContext","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","useContext","useMemo","Label","Loader2","useContext","useEffect","useRef","useCallback","useContext","useState","useContext","useCallback","useState","jsx","useContext","useRef","useEffect","Loader2","useContext","useEffect","zodResolver","Loader2","useContext","useEffect","useState","useForm","z","useGoogleReCaptcha","useContext","useRef","useContext","useRef","useGoogleReCaptcha","useContext","useContext","Fragment","jsx","jsxs","useContext","useContext","useEffect","Fragment","jsx","jsxs","useContext","useEffect","Fragment","jsx","jsxs","DEFAULT_CAPTCHA_ENDPOINTS","useContext","React","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","useState","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useContext","useEffect","useState","useForm","z","jsx","jsxs","useState","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useContext","useEffect","useForm","z","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useCallback","useContext","useEffect","useForm","z","jsx","jsxs","authClient","toast","useContext","useCallback","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useContext","useEffect","useForm","z","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useContext","useEffect","useRef","useForm","z","jsx","jsxs","useRef","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","useContext","useEffect","useForm","z","jsx","jsxs","authClient","toast","useContext","useForm","zodResolver","useEffect","Loader2","zodResolver","Loader2","Trash2Icon","UploadCloudIcon","useCallback","useContext","useEffect","useRef","useState","useForm","z","Fragment","jsx","jsxs","authClient","toast","useContext","useRef","useState","useCallback","useForm","zodResolver","useEffect","UploadCloudIcon","Trash2Icon","Loader2","zodResolver","Loader2","useContext","useEffect","useRef","useState","useForm","z","Fragment","jsx","jsxs","useRef","authClient","toast","useContext","useState","useForm","zodResolver","useEffect","Label","Loader2","Loader2","useContext","useEffect","useRef","jsx","useRef","authClient","useContext","useEffect","Loader2","jsx","useContext","useEffect","useContext","useEffect","useState","CheckIcon","Loader2","XIcon","useCallback","useContext","useEffect","useMemo","useState","jsx","jsxs","toast","useContext","useMemo","useState","useEffect","authClient","useCallback","Loader2","XIcon","CheckIcon","jsx","Separator","useContext","jsx","jsxs","useContext","LockIcon","MailIcon","useContext","jsx","jsxs","useContext","LockIcon","MailIcon","useContext","useEffect","useMemo","useRef","authClient","toast","useContext","useRef","useMemo","useEffect","FingerprintIcon","useContext","jsx","jsxs","authClient","toast","useContext","FingerprintIcon","useCallback","useContext","jsx","jsxs","authClient","toast","useContext","useCallback","Fragment","jsx","jsxs","useContext","useState","useEffect","Separator","socialProvider","useContext","useContext","zodResolver","Loader2","useContext","useMemo","useForm","z","jsx","jsxs","authClient","toast","useContext","useMemo","useForm","zodResolver","Loader2","useContext","useMemo","useState","zodResolver","Loader2","useContext","useMemo","useForm","z","jsx","jsxs","authClient","toast","useContext","useMemo","useForm","zodResolver","Loader2","Fragment","jsx","jsxs","useContext","useMemo","hasPermission","useState","Loader2","UsersIcon","useContext","useMemo","useState","jsx","jsxs","authClient","toast","useContext","useMemo","useState","UsersIcon","Loader2","useContext","useMemo","EllipsisIcon","Loader2","XIcon","useContext","useMemo","useState","jsx","jsxs","authClient","toast","useContext","useMemo","useState","role","Loader2","EllipsisIcon","XIcon","Fragment","jsx","useContext","useMemo","Trash2Icon","UploadCloudIcon","useContext","useMemo","useRef","useState","jsx","jsxs","useContext","useMemo","authLocalization","toast","hasPermission","useRef","useState","UploadCloudIcon","Trash2Icon","useContext","useMemo","useState","zodResolver","Loader2","useContext","useMemo","useForm","z","jsx","jsxs","authClient","toast","useContext","useMemo","role","useForm","zodResolver","Loader2","EllipsisIcon","useContext","useState","Loader2","useContext","useMemo","useState","jsx","jsxs","authClient","toast","useContext","useMemo","useState","Loader2","Loader2","useContext","useMemo","useState","jsx","jsxs","authClient","toast","useContext","useMemo","useState","role","Loader2","Fragment","jsx","jsxs","useContext","useState","role","EllipsisIcon","Fragment","jsx","jsxs","useContext","useMemo","useState","zodResolver","useContext","useMemo","useForm","z","jsx","jsxs","useContext","useMemo","toast","hasPermission","useForm","zodResolver","useContext","zodResolver","useContext","useMemo","useForm","z","jsx","jsxs","useContext","useMemo","toast","hasPermission","useForm","zodResolver","jsx","jsxs","useContext","SettingsIcon","useCallback","useContext","useEffect","useMemo","useState","Fragment","jsx","jsxs","authClient","toast","useContext","useMemo","useState","useEffect","useCallback","SettingsIcon","MenuIcon","useContext","useEffect","useMemo","useContext","useMemo","useState","EllipsisIcon","UsersIcon","useState","Loader2","UsersIcon","useContext","useMemo","useState","useMemo","cva","jsx","jsxs","cva","jsx","jsx","Label","jsx","jsxs","authClient","toast","useContext","useMemo","useState","UsersIcon","Loader2","Fragment","jsx","jsxs","useState","UsersIcon","EllipsisIcon","Fragment","jsx","jsxs","useContext","useMemo","useState","jsx","jsxs","useContext","useMemo","useEffect","Label","MenuIcon","useContext","useContext","useContext","useContext","ChevronsUpDown","LogInIcon","LogOutIcon","PlusCircleIcon","SettingsIcon","Fragment","useCallback","useContext","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","toast","useContext","useMemo","isPending","useState","useCallback","useEffect","useRef","ChevronsUpDown","LogInIcon","SettingsIcon","LogOutIcon","sessionData","user","PlusCircleIcon"]}