@erikey/react 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/index.mjs CHANGED
@@ -322,7 +322,7 @@ function SocialAuthButtons({
322
322
  try {
323
323
  await authClient.signIn.social({
324
324
  provider,
325
- callbackURL: redirectTo || window.location.origin
325
+ callbackURL: `${window.location.origin}${redirectTo || "/"}`
326
326
  });
327
327
  onSuccess?.();
328
328
  } catch (error) {
@@ -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/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 // callbackURL must be an absolute URL since auth-api is on a different domain\n await authClient.signIn.social({\n provider,\n callbackURL: `${window.location.origin}${redirectTo || '/'}`,\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erikey/react",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "React SDK for Erikey - B2B authentication and user management",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",