UNPKG

@frank-auth/react

Version:

Flexible and customizable React UI components for Frank Authentication

1 lines 62.4 kB
{"version":3,"file":"sign-in-form.cjs","sources":["../../../../../src/components/auth/sign-in/sign-in-form.tsx"],"sourcesContent":["/**\n * @frank-auth/react - Sign In Form Component (Fully Optimized)\n *\n * Comprehensive sign-in form with multiple authentication methods,\n * organization support, and customizable UI options.\n * Completely optimized to prevent ANY prop recreation that causes FormWrapper re-renders.\n */\n\n\"use client\";\n\nimport { Button as HeroButton, Input as HeroInput } from \"@/components/ui\";\nimport { Checkbox, Divider, Link } from \"@/components/ui\";\nimport { EnvelopeIcon, LockClosedIcon } from \"@heroicons/react/24/outline\";\nimport { Select, SelectItem } from \"@heroui/react\";\nimport { motion } from \"framer-motion\";\nimport React, { useCallback, useMemo, useState } from \"react\";\n\nimport EmailField from \"@/components/forms/email-field\";\nimport FieldError from \"@/components/forms/field-error\";\nimport FormWrapper from \"@/components/forms/form-wrapper\";\nimport PasswordField from \"@/components/forms/password-field\";\nimport {\n\tuseAuth,\n\tuseConfig,\n\tuseMagicLink,\n\tuseOAuth,\n\tusePasskeys,\n} from \"@/hooks\";\nimport type { RadiusT, SizeT } from \"@/types\";\nimport type {\n\tResendVerificationRequest,\n\tResendVerificationResponse,\n} from \"@frank-auth/client\";\n\n// ============================================================================\n// Sign In Form Types\n// ============================================================================\n\nexport interface SignInFormProps {\n\t/**\n\t * Sign-in methods to show\n\t */\n\tmethods?: (\"password\" | \"oauth\" | \"magic-link\" | \"passkey\" | \"sso\")[];\n\n\t/**\n\t * Initial email value\n\t */\n\temail?: string;\n\n\t/**\n\t * Initial organization ID\n\t */\n\torganizationId?: string;\n\n\t/**\n\t * Redirect URL after successful sign-in\n\t */\n\tredirectUrl?: string;\n\n\t/**\n\t * Success callback\n\t */\n\tonSuccess?: (result: any) => void;\n\n\t/**\n\t * Error callback\n\t */\n\tonError?: (error: Error) => void;\n\n\t/**\n\t * Show sign-up link\n\t */\n\tshowSignUpLink?: boolean;\n\n\t/**\n\t * Show forgot password link\n\t */\n\tshowForgotPasswordLink?: boolean;\n\n\t/**\n\t * Show organization selector\n\t */\n\tshowOrganizationSelector?: boolean;\n\n\t/**\n\t * Custom title\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Custom subtitle\n\t */\n\tsubtitle?: string;\n\n\t/**\n\t * Form variant\n\t */\n\tvariant?: \"default\" | \"minimal\" | \"compact\";\n\n\t/**\n\t * Form size\n\t */\n\tsize?: SizeT;\n\n\t/**\n\t * Form radius\n\t */\n\tradius?: RadiusT;\n\n\t/**\n\t * Custom className\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Whether to show branding\n\t */\n\tshowBranding?: boolean;\n\n\t/**\n\t * Disabled state\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Custom footer content\n\t */\n\tfooter?: React.ReactNode;\n\n\t/**\n\t * Custom header content\n\t */\n\theader?: React.ReactNode;\n\n\ttitleAlignment?: \"left\" | \"center\" | \"right\";\n}\n\n// ============================================================================\n// Sign In Form State\n// ============================================================================\n\ntype SignInStep =\n\t| \"credentials\"\n\t| \"mfa\"\n\t| \"organization-select\"\n\t| \"success\"\n\t| \"email-verification\";\n\ntype SuccessType =\n\t| \"password-signin\"\n\t| \"oauth-signin\"\n\t| \"passkey-signin\"\n\t| \"mfa-verified\"\n\t| \"email-verification-required\"\n\t| \"magic-link-sent\";\n\ninterface SignInState {\n\tstep: SignInStep;\n\tmethod: string;\n\temail: string;\n\tpassword: string;\n\tmfaToken?: string;\n\tselectedOrganization?: string;\n\trememberMe: boolean;\n\tshowPassword: boolean;\n\tsuccessType?: SuccessType;\n\tsuccessData?: {\n\t\tprovider?: string;\n\t\temail?: string;\n\t\trequiresEmailVerification?: boolean;\n\t\tmagicLinkSent?: boolean;\n\t\tresendVerification?: (\n\t\t\trequest: ResendVerificationRequest,\n\t\t) => Promise<ResendVerificationResponse>;\n\t};\n}\n\n// ============================================================================\n// Provider Icons (Static - Prevent Recreation)\n// ============================================================================\n\nconst GoogleIcon = React.memo(() => (\n\t// biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n\t<svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\">\n\t\t<path\n\t\t\tfill=\"#4285F4\"\n\t\t\td=\"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\t\t/>\n\t\t<path\n\t\t\tfill=\"#34A853\"\n\t\t\td=\"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\t\t/>\n\t\t<path\n\t\t\tfill=\"#FBBC05\"\n\t\t\td=\"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\t\t/>\n\t\t<path\n\t\t\tfill=\"#EA4335\"\n\t\t\td=\"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\t\t/>\n\t</svg>\n));\n\nconst GitHubIcon = React.memo(() => (\n\t// biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n\t<svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n\t\t<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\t</svg>\n));\n\nconst MicrosoftIcon = React.memo(() => (\n\t// biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n\t<svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\">\n\t\t<path fill=\"#f25022\" d=\"M1 1h10v10H1z\" />\n\t\t<path fill=\"#00a4ef\" d=\"M13 1h10v10H13z\" />\n\t\t<path fill=\"#7fba00\" d=\"M1 13h10v10H1z\" />\n\t\t<path fill=\"#ffb900\" d=\"M13 13h10v10H13z\" />\n\t</svg>\n));\n\nconst AppleIcon = React.memo(() => (\n\t// biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n\t<svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n\t\t<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\t</svg>\n));\n\n// Add display names\nGoogleIcon.displayName = \"GoogleIcon\";\nGitHubIcon.displayName = \"GitHubIcon\";\nMicrosoftIcon.displayName = \"MicrosoftIcon\";\nAppleIcon.displayName = \"AppleIcon\";\n\n// ============================================================================\n// Success Message Component\n// ============================================================================\n\nconst SuccessMessage = React.memo(\n\t({\n\t\tsuccessType,\n\t\tsuccessData,\n\t\tredirectUrl,\n\t}: {\n\t\tsuccessType: SuccessType;\n\t\tsuccessData?: any;\n\t\tredirectUrl?: string;\n\t}) => {\n\t\tconst [isLoading, setIsLoading] = useState(false);\n\t\tconst { components } = useConfig();\n\t\tconst Button = components.Button ?? HeroButton;\n\n\t\tconst getSuccessContent = useCallback(() => {\n\t\t\tswitch (successType) {\n\t\t\t\tcase \"password-signin\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Welcome back!\",\n\t\t\t\t\t\tsubtitle: \"You have been successfully signed in.\",\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName=\"w-8 h-8 text-success-600 dark:text-success-400\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M5 13l4 4L19 7\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tcase \"oauth-signin\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Welcome back!\",\n\t\t\t\t\t\tsubtitle: `Successfully signed in with ${successData?.provider || \"OAuth\"}.`,\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName=\"w-8 h-8 text-success-600 dark:text-success-400\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M5 13l4 4L19 7\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tcase \"passkey-signin\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Authenticated!\",\n\t\t\t\t\t\tsubtitle: \"Successfully signed in with your passkey.\",\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<LockClosedIcon className=\"w-8 h-8 text-success-600 dark:text-success-400\" />\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tcase \"mfa-verified\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Verification complete!\",\n\t\t\t\t\t\tsubtitle: \"Two-factor authentication successful.\",\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName=\"w-8 h-8 text-success-600 dark:text-success-400\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tcase \"email-verification-required\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Check your email\",\n\t\t\t\t\t\tsubtitle: `We've sent a verification link to ${successData?.email || \"your email address\"}. Please click the link to complete your sign-in.`,\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<EnvelopeIcon className=\"w-8 h-8 text-warning-600 dark:text-warning-400\" />\n\t\t\t\t\t\t),\n\t\t\t\t\t\textraButton: (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\tsetIsLoading(true);\n\t\t\t\t\t\t\t\t\tsuccessData\n\t\t\t\t\t\t\t\t\t\t.resendVerification({\n\t\t\t\t\t\t\t\t\t\t\temail: successData.email,\n\t\t\t\t\t\t\t\t\t\t\ttype: \"email\",\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\t\t\t// todo: toast message\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tResend Email\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tcase \"magic-link-sent\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Magic link sent!\",\n\t\t\t\t\t\tsubtitle: `Check your email at ${successData?.email} and click the link to sign in.`,\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName=\"w-8 h-8 text-primary-600 dark:text-primary-400\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M3 8l7.89 7.89a2 2 0 002.83 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t),\n\t\t\t\t\t\textraButton: (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\tawait successData.sendMagicLink(successData.email, {\n\t\t\t\t\t\t\t\t\t\tredirectUrl,\n\t\t\t\t\t\t\t\t\t\torganizationId: successData.organizationId,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tResend magic link\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: \"Success!\",\n\t\t\t\t\t\tsubtitle: \"Operation completed successfully.\",\n\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName=\"w-8 h-8 text-success-600 dark:text-success-400\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M5 13l4 4L19 7\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t}\n\t\t}, [successType, successData]);\n\n\t\tconst content = getSuccessContent();\n\t\tconst showRedirectMessage =\n\t\t\tredirectUrl &&\n\t\t\t![\"email-verification-required\", \"magic-link-sent\"].includes(successType);\n\n\t\treturn (\n\t\t\t<div className=\"text-center space-y-4\">\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ scale: 0 }}\n\t\t\t\t\tanimate={{ scale: 1 }}\n\t\t\t\t\tclassName={`mx-auto w-16 h-16 rounded-full flex items-center justify-center ${\n\t\t\t\t\t\tsuccessType === \"email-verification-required\"\n\t\t\t\t\t\t\t? \"bg-warning-100 dark:bg-warning-900/30\"\n\t\t\t\t\t\t\t: successType === \"magic-link-sent\"\n\t\t\t\t\t\t\t\t? \"bg-primary-100 dark:bg-primary-900/30\"\n\t\t\t\t\t\t\t\t: \"bg-success-100 dark:bg-success-900/30\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{content.icon}\n\t\t\t\t</motion.div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<h3 className=\"text-xl font-semibold text-foreground mb-2\">\n\t\t\t\t\t\t{content.title}\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p className=\"text-default-500 text-sm\">{content.subtitle}</p>\n\t\t\t\t\t{content.extraButton && (\n\t\t\t\t\t\t<div className=\"flex justify-center py-4\">\n\t\t\t\t\t\t\t{content.extraButton}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{showRedirectMessage && (\n\t\t\t\t\t<div className=\"flex items-center justify-center gap-2 text-sm text-default-500\">\n\t\t\t\t\t\t<div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-primary\" />\n\t\t\t\t\t\t<span>Redirecting...</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{successType === \"email-verification-required\" && (\n\t\t\t\t\t<div className=\"text-xs text-default-400\">\n\t\t\t\t\t\tDidn't receive the email? Check your spam folder or contact support.\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nSuccessMessage.displayName = \"SuccessMessage\";\n\n// ============================================================================\n// OAuth Provider Buttons Component\n// ============================================================================\n\nconst OAuthButtons = React.memo(\n\t({\n\t\tonSuccess,\n\t\tonError,\n\t\tredirectUrl,\n\t\torganizationId,\n\t\tdisabled,\n\t\tsize = \"md\",\n\t\tradius = \"md\",\n\t}: {\n\t\tonSuccess: (provider: string, result: any) => void;\n\t\tonError?: (error: Error) => void;\n\t\tredirectUrl?: string;\n\t\torganizationId?: string;\n\t\tdisabled?: boolean;\n\t\tsize?: SizeT;\n\t\tradius?: RadiusT;\n\t}) => {\n\t\tconst {\n\t\t\tsignInWithGoogle,\n\t\t\tsignInWithGitHub,\n\t\t\tsignInWithMicrosoft,\n\t\t\tsignInWithApple,\n\t\t\tisLoading,\n\t\t} = useOAuth();\n\n\t\tconst { components } = useConfig();\n\t\tconst Button = components.Button ?? HeroButton;\n\n\t\tconst handleOAuthSignIn = useCallback(\n\t\t\tasync (provider: string, signInMethod: () => Promise<void>) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await signInMethod();\n\t\t\t\t\tonSuccess(provider, { provider, ...result });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tonError?.(\n\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t? error\n\t\t\t\t\t\t\t: new Error(`${provider} sign-in failed`),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onSuccess, onError],\n\t\t);\n\n\t\tconst handleGoogleSignIn = useCallback(() => {\n\t\t\thandleOAuthSignIn(\"Google\", () =>\n\t\t\t\tsignInWithGoogle({ redirectUrl, organizationId }),\n\t\t\t);\n\t\t}, [handleOAuthSignIn, signInWithGoogle, redirectUrl, organizationId]);\n\n\t\tconst handleGitHubSignIn = useCallback(() => {\n\t\t\thandleOAuthSignIn(\"GitHub\", () =>\n\t\t\t\tsignInWithGitHub({ redirectUrl, organizationId }),\n\t\t\t);\n\t\t}, [handleOAuthSignIn, signInWithGitHub, redirectUrl, organizationId]);\n\n\t\tconst handleMicrosoftSignIn = useCallback(() => {\n\t\t\thandleOAuthSignIn(\"Microsoft\", () =>\n\t\t\t\tsignInWithMicrosoft({ redirectUrl, organizationId }),\n\t\t\t);\n\t\t}, [handleOAuthSignIn, signInWithMicrosoft, redirectUrl, organizationId]);\n\n\t\tconst handleAppleSignIn = useCallback(() => {\n\t\t\thandleOAuthSignIn(\"Apple\", () =>\n\t\t\t\tsignInWithApple({ redirectUrl, organizationId }),\n\t\t\t);\n\t\t}, [handleOAuthSignIn, signInWithApple, redirectUrl, organizationId]);\n\n\t\treturn (\n\t\t\t<div className=\"space-y-3\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\tsize={size}\n\t\t\t\t\tradius={radius}\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tstartContent={<GoogleIcon />}\n\t\t\t\t\tonPress={handleGoogleSignIn}\n\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t>\n\t\t\t\t\tContinue with Google\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\tsize={size}\n\t\t\t\t\tradius={radius}\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tstartContent={<GitHubIcon />}\n\t\t\t\t\tonPress={handleGitHubSignIn}\n\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t>\n\t\t\t\t\tContinue with GitHub\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\tsize={size}\n\t\t\t\t\tradius={radius}\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tstartContent={<MicrosoftIcon />}\n\t\t\t\t\tonPress={handleMicrosoftSignIn}\n\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t>\n\t\t\t\t\tContinue with Microsoft\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\tsize={size}\n\t\t\t\t\tradius={radius}\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tstartContent={<AppleIcon />}\n\t\t\t\t\tonPress={handleAppleSignIn}\n\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t>\n\t\t\t\t\tContinue with Apple\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nOAuthButtons.displayName = \"OAuthButtons\";\n\n// ============================================================================\n// Magic Link Component\n// ============================================================================\n\nconst MagicLinkSection = React.memo(\n\t({\n\t\temail,\n\t\tonSuccess,\n\t\tonError,\n\t\tredirectUrl,\n\t\torganizationId,\n\t\tdisabled,\n\t\tsize = \"md\",\n\t\tradius = \"md\",\n\t}: {\n\t\temail: string;\n\t\tonSuccess: (result: any) => void;\n\t\tonError?: (error: Error) => void;\n\t\tredirectUrl?: string;\n\t\torganizationId?: string;\n\t\tdisabled?: boolean;\n\t\tsize?: SizeT;\n\t\tradius?: RadiusT;\n\t}) => {\n\t\tconst { sendMagicLink, isLoading, lastSentEmail, canResend } =\n\t\t\tuseMagicLink();\n\t\tconst [sent, setSent] = useState(false);\n\n\t\tconst { components } = useConfig();\n\t\tconst Button = components.Button ?? HeroButton;\n\t\t// Memoized envelope icon\n\t\tconst envelopeIcon = useMemo(\n\t\t\t() => <EnvelopeIcon className=\"w-4 h-4\" />,\n\t\t\t[],\n\t\t);\n\n\t\tconst handleSendMagicLink = useCallback(async () => {\n\t\t\tif (!email) return;\n\n\t\t\ttry {\n\t\t\t\tconst result = await sendMagicLink(email, {\n\t\t\t\t\tredirectUrl,\n\t\t\t\t\torganizationId,\n\t\t\t\t});\n\n\t\t\t\tif (result.success) {\n\t\t\t\t\tsetSent(true);\n\t\t\t\t\tonSuccess({\n\t\t\t\t\t\ttype: \"magic-link-sent\",\n\t\t\t\t\t\temail,\n\t\t\t\t\t\tredirectUrl,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tsendMagicLink,\n\t\t\t\t\t\tcanResend,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(\n\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: new Error(\"Failed to send magic link\"),\n\t\t\t\t);\n\t\t\t}\n\t\t}, [email, sendMagicLink, redirectUrl, organizationId, onSuccess, onError]);\n\n\t\tif (sent && lastSentEmail) {\n\t\t\treturn (\n\t\t\t\t<div className=\"text-center space-y-4\">\n\t\t\t\t\t<div className=\"text-success-600 font-medium\">\n\t\t\t\t\t\tMagic link sent to {lastSentEmail}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"text-default-500 text-sm\">\n\t\t\t\t\t\tCheck your email and click the link to sign in\n\t\t\t\t\t</p>\n\t\t\t\t\t{canResend && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"light\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tonPress={handleSendMagicLink}\n\t\t\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tResend magic link\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"bordered\"\n\t\t\t\tsize={size}\n\t\t\t\tradius={radius}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tstartContent={envelopeIcon}\n\t\t\t\tonPress={handleSendMagicLink}\n\t\t\t\tisDisabled={disabled || isLoading || !email}\n\t\t\t\tisLoading={isLoading}\n\t\t\t>\n\t\t\t\tSend magic link\n\t\t\t</Button>\n\t\t);\n\t},\n);\n\nMagicLinkSection.displayName = \"MagicLinkSection\";\n\n// ============================================================================\n// Verification Code Component\n// ============================================================================\n\nconst VerificationCode = React.memo(\n\t({\n\t\tlength = 6,\n\t\tonComplete,\n\t\tdisabled = false,\n\t}: {\n\t\tlength?: number;\n\t\tonComplete: (code: string) => void;\n\t\tdisabled?: boolean;\n\t}) => {\n\t\tconst { components } = useConfig();\n\t\tconst Input = components.Input ?? HeroInput;\n\t\tconst [code, setCode] = useState(Array(length).fill(\"\"));\n\t\tconst [focused, setFocused] = useState(0);\n\n\t\tconst handleChange = useCallback(\n\t\t\t(index: number, value: string) => {\n\t\t\t\tif (value.length > 1) return;\n\n\t\t\t\tconst newCode = [...code];\n\t\t\t\tnewCode[index] = value;\n\t\t\t\tsetCode(newCode);\n\n\t\t\t\t// Auto-focus next input\n\t\t\t\tif (value && index < length - 1) {\n\t\t\t\t\tsetFocused(index + 1);\n\t\t\t\t}\n\n\t\t\t\t// Call onComplete when code is full\n\t\t\t\tif (\n\t\t\t\t\tnewCode.every((digit) => digit !== \"\") &&\n\t\t\t\t\tnewCode.join(\"\").length === length\n\t\t\t\t) {\n\t\t\t\t\tonComplete(newCode.join(\"\"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t[code, length, onComplete],\n\t\t);\n\n\t\tconst handleKeyDown = useCallback(\n\t\t\t(index: number, e: React.KeyboardEvent) => {\n\t\t\t\tif (e.key === \"Backspace\" && !code[index] && index > 0) {\n\t\t\t\t\tsetFocused(index - 1);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[code],\n\t\t);\n\n\t\treturn (\n\t\t\t<div className=\"flex gap-2 justify-center\">\n\t\t\t\t{Array.from({ length }, (_, index) => (\n\t\t\t\t\t<Input\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tmaxLength={1}\n\t\t\t\t\t\tvalue={code[index]}\n\t\t\t\t\t\tonChange={(e) => handleChange(index, e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(index, e)}\n\t\t\t\t\t\tclassName=\"w-12 text-center\"\n\t\t\t\t\t\tclassNames={{\n\t\t\t\t\t\t\tinput: \"text-center text-lg font-mono\",\n\t\t\t\t\t\t\tinputWrapper: \"h-12 w-12\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoFocus={index === focused}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nVerificationCode.displayName = \"VerificationCode\";\n\n// ============================================================================\n// Main Sign In Form Component\n// ============================================================================\n\nexport function SignInForm({\n\tmethods = [\"password\", \"oauth\", \"magic-link\"],\n\temail: initialEmail = \"\",\n\torganizationId: initialOrganizationId,\n\tredirectUrl,\n\tonSuccess,\n\tonError,\n\tshowSignUpLink = true,\n\tshowForgotPasswordLink = true,\n\tshowOrganizationSelector = false,\n\ttitle,\n\tsubtitle,\n\tvariant = \"default\",\n\tsize = \"lg\",\n\tradius = \"md\",\n\tclassName = \"\",\n\tshowBranding = true,\n\tdisabled = false,\n\ttitleAlignment,\n\tfooter,\n\theader,\n}: SignInFormProps) {\n\tconst { signIn, isLoading, organizationMemberships, resendVerification } =\n\t\tuseAuth();\n\tconst {\n\t\tfeatures,\n\t\torganizationSettings,\n\t\tcomponents,\n\t\tlinksPath,\n\t\ttitleAlignment: configTitleAlignment,\n\t} = useConfig();\n\tconst { authenticateWithPasskey } = usePasskeys();\n\n\t// Memoized icons to prevent recreation\n\tconst envelopeIcon = useMemo(\n\t\t() => <EnvelopeIcon className=\"w-4 h-4 text-default-400\" />,\n\t\t[],\n\t);\n\tconst lockIcon = useMemo(\n\t\t() => <LockClosedIcon className=\"w-4 h-4 text-default-400\" />,\n\t\t[],\n\t);\n\tconst lockIconSmall = useMemo(\n\t\t() => <LockClosedIcon className=\"w-4 h-4\" />,\n\t\t[],\n\t);\n\tconst textAlign = React.useMemo(\n\t\t() => titleAlignment ?? configTitleAlignment,\n\t\t[titleAlignment, configTitleAlignment],\n\t);\n\n\t// Custom component override\n\tconst Button = components.Button ?? HeroButton;\n\tconst CustomSignInForm = components.SignInForm;\n\tif (CustomSignInForm) {\n\t\treturn (\n\t\t\t<CustomSignInForm\n\t\t\t\t{...{\n\t\t\t\t\tmethods,\n\t\t\t\t\temail: initialEmail,\n\t\t\t\t\torganizationId: initialOrganizationId,\n\t\t\t\t\tredirectUrl,\n\t\t\t\t\tonSuccess,\n\t\t\t\t\tonError,\n\t\t\t\t\tshowSignUpLink,\n\t\t\t\t\tshowForgotPasswordLink,\n\t\t\t\t\tshowOrganizationSelector,\n\t\t\t\t\ttitle,\n\t\t\t\t\tsubtitle,\n\t\t\t\t\tvariant,\n\t\t\t\t\tsize,\n\t\t\t\t\tclassName,\n\t\t\t\t\tshowBranding,\n\t\t\t\t\tdisabled,\n\t\t\t\t\tfooter,\n\t\t\t\t\theader,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Form state\n\tconst [state, setState] = useState<SignInState>({\n\t\tstep: \"credentials\",\n\t\tmethod: \"password\",\n\t\temail: initialEmail,\n\t\tpassword: \"\",\n\t\tselectedOrganization: initialOrganizationId,\n\t\trememberMe: true,\n\t\tshowPassword: false,\n\t});\n\n\tconst [formError, setFormError] = useState<string | null>(null);\n\n\t// Available methods based on features (memoized)\n\tconst availableMethods = useMemo(() => {\n\t\treturn methods.filter((method) => {\n\t\t\tswitch (method) {\n\t\t\t\tcase \"oauth\":\n\t\t\t\t\treturn features.oauth;\n\t\t\t\tcase \"magic-link\":\n\t\t\t\t\treturn features.magicLink;\n\t\t\t\tcase \"passkey\":\n\t\t\t\t\treturn features.passkeys;\n\t\t\t\tcase \"sso\":\n\t\t\t\t\treturn features.sso;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}, [methods, features]);\n\n\tconst stableFormWrapperProps = useMemo(() => {\n\t\t// Default content\n\t\tconst getDefaultContent = () => {\n\t\t\tif (organizationSettings?.branding?.customLoginText) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle:\n\t\t\t\t\t\torganizationSettings.branding.customLoginText.title ||\n\t\t\t\t\t\t\"Welcome back\",\n\t\t\t\t\tsubtitle:\n\t\t\t\t\t\torganizationSettings.branding.customLoginText.subtitle ||\n\t\t\t\t\t\t\"Sign in to your account\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttitle: \"Welcome back\",\n\t\t\t\tsubtitle: \"Sign in to your account\",\n\t\t\t};\n\t\t};\n\n\t\tconst defaultContent = getDefaultContent();\n\t\tconst finalTitle = title || defaultContent.title;\n\t\tconst finalSubtitle = subtitle || defaultContent.subtitle;\n\n\t\t// Logo element\n\t\tlet logoElement: React.ReactNode = undefined;\n\t\tif (showBranding && organizationSettings?.branding?.logoUrl) {\n\t\t\tlogoElement = (\n\t\t\t\t<img\n\t\t\t\t\tsrc={organizationSettings.branding.logoUrl}\n\t\t\t\t\talt=\"Organization Logo\"\n\t\t\t\t\tclassName=\"h-8 w-auto mx-auto mb-4\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tsize,\n\t\t\tvariant: \"flat\" as const,\n\t\t\tclassName: `space-y-6 ${className}`,\n\t\t\tfooter,\n\t\t\theader,\n\t\t\ttitle: finalTitle,\n\t\t\tsubtitle: finalSubtitle,\n\t\t\tshowCard: false,\n\t\t\tlogo: logoElement,\n\t\t};\n\t}, [\n\t\ttitle,\n\t\tsubtitle,\n\t\tsize,\n\t\tclassName,\n\t\tfooter,\n\t\theader,\n\t\tshowBranding,\n\t\torganizationSettings?.branding?.customLoginText,\n\t\torganizationSettings?.branding?.logoUrl,\n\t]);\n\n\t// Handle form submission\n\tconst handleSubmit = useCallback(\n\t\tasync (e: React.FormEvent) => {\n\t\t\te.preventDefault();\n\t\t\tsetFormError(null);\n\n\t\t\tif (!state.email || !state.password) {\n\t\t\t\tsetFormError(\"Please enter your email and password\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await signIn({\n\t\t\t\t\tstrategy: \"password\",\n\t\t\t\t\tidentifier: state.email,\n\t\t\t\t\tpassword: state.password,\n\t\t\t\t\torganizationId: state.selectedOrganization || initialOrganizationId,\n\t\t\t\t});\n\n\t\t\t\tif (result.status === \"needs_mfa\") {\n\t\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tstep: \"mfa\",\n\t\t\t\t\t\tmfaToken: result.mfaToken,\n\t\t\t\t\t}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"needs_verification\") {\n\t\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tstep: \"success\",\n\t\t\t\t\t\tsuccessType: \"email-verification-required\",\n\t\t\t\t\t\tsuccessData: { email: state.email, resendVerification },\n\t\t\t\t\t}));\n\t\t\t\t\tonSuccess?.(result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"complete\" && result.user) {\n\t\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tstep: \"success\",\n\t\t\t\t\t\tsuccessType: \"password-signin\",\n\t\t\t\t\t}));\n\t\t\t\t\tonSuccess?.(result);\n\n\t\t\t\t\t// Redirect if URL provided\n\t\t\t\t\tif (redirectUrl) {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\twindow.location.href = redirectUrl;\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"complete\" && result.error) {\n\t\t\t\t\tsetFormError(result.error.message);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst authError =\n\t\t\t\t\terror instanceof Error ? error : new Error(\"Sign in failed\");\n\t\t\t\tconsole.error(authError);\n\t\t\t\tsetFormError(authError.message);\n\t\t\t\tonError?.(authError);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tstate.email,\n\t\t\tstate.password,\n\t\t\tstate.selectedOrganization,\n\t\t\tinitialOrganizationId,\n\t\t\tsignIn,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\tredirectUrl,\n\t\t],\n\t);\n\n\t// Handle MFA verification\n\tconst handleMFAVerification = useCallback(\n\t\tasync (code: string) => {\n\t\t\tif (!state.mfaToken) return;\n\n\t\t\ttry {\n\t\t\t\t// This would use the MFA hook in a real implementation\n\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tstep: \"success\",\n\t\t\t\t\tsuccessType: \"mfa-verified\",\n\t\t\t\t}));\n\t\t\t\tonSuccess?.({ mfaVerified: true });\n\n\t\t\t\tif (redirectUrl) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\twindow.location.href = redirectUrl;\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst authError =\n\t\t\t\t\terror instanceof Error ? error : new Error(\"MFA verification failed\");\n\t\t\t\tsetFormError(authError.message);\n\t\t\t\tonError?.(authError);\n\t\t\t}\n\t\t},\n\t\t[state.mfaToken, onSuccess, onError, redirectUrl],\n\t);\n\n\t// Handle OAuth success\n\tconst handleOAuthSuccess = useCallback(\n\t\t(provider: string, result: any) => {\n\t\t\tsetState((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tstep: \"success\",\n\t\t\t\tsuccessType: \"oauth-signin\",\n\t\t\t\tsuccessData: { provider },\n\t\t\t}));\n\t\t\tonSuccess?.(result);\n\t\t},\n\t\t[onSuccess],\n\t);\n\n\t// Handle Magic Link success\n\tconst handleMagicLinkSuccess = useCallback(\n\t\t(result: any) => {\n\t\t\tif (result.type === \"magic-link-sent\") {\n\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tstep: \"success\",\n\t\t\t\t\tsuccessType: \"magic-link-sent\",\n\t\t\t\t\tsuccessData: {\n\t\t\t\t\t\temail: result.email,\n\t\t\t\t\t\tmessage: result.message,\n\t\t\t\t\t\tsendMagicLink: result.sendMagicLink,\n\t\t\t\t\t\tcanResend: result.canResend,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tstep: \"success\",\n\t\t\t\t\tsuccessType: \"password-signin\",\n\t\t\t\t}));\n\t\t\t}\n\t\t\tonSuccess?.(result);\n\t\t},\n\t\t[onSuccess],\n\t);\n\n\t// Handle Passkey authentication\n\tconst handlePasskeyAuth = useCallback(async () => {\n\t\ttry {\n\t\t\tconst result = await authenticateWithPasskey();\n\t\t\tif (result.success) {\n\t\t\t\tsetState((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tstep: \"success\",\n\t\t\t\t\tsuccessType: \"passkey-signin\",\n\t\t\t\t}));\n\t\t\t\tonSuccess?.(result);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst authError =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error\n\t\t\t\t\t: new Error(\"Passkey authentication failed\");\n\t\t\tsetFormError(authError.message);\n\t\t\tonError?.(authError);\n\t\t}\n\t}, [authenticateWithPasskey, onSuccess, onError]);\n\n\t// Stable handlers for form inputs\n\tconst handleEmailChange = useCallback((email: string) => {\n\t\tsetState((prev) => ({ ...prev, email }));\n\t}, []);\n\n\tconst handlePasswordChange = useCallback((password: string) => {\n\t\tsetState((prev) => ({ ...prev, password }));\n\t}, []);\n\n\tconst handleRememberMeChange = useCallback((rememberMe: boolean) => {\n\t\tsetState((prev) => ({ ...prev, rememberMe }));\n\t}, []);\n\n\tconst handleOrganizationChange = useCallback((keys: any) => {\n\t\tconst selected = Array.from(keys)[0] as string;\n\t\tsetState((prev) => ({ ...prev, selectedOrganization: selected }));\n\t}, []);\n\n\t// Success step\n\tif (state.step === \"success\") {\n\t\treturn (\n\t\t\t<SuccessMessage\n\t\t\t\tsuccessType={state.successType!}\n\t\t\t\tsuccessData={state.successData}\n\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t/>\n\t\t);\n\t}\n\n\t// MFA verification step\n\tif (state.step === \"mfa\") {\n\t\treturn (\n\t\t\t<div className=\"space-y-6\">\n\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t<h3 className=\"text-xl font-semibold text-foreground mb-2\">\n\t\t\t\t\t\tTwo-Factor Authentication\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p className=\"text-default-500 text-sm\">\n\t\t\t\t\t\tEnter the verification code from your authenticator app\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<VerificationCode\n\t\t\t\t\tlength={6}\n\t\t\t\t\tonComplete={handleMFAVerification}\n\t\t\t\t\tdisabled={disabled || isLoading}\n\t\t\t\t/>\n\n\t\t\t\t{formError && (\n\t\t\t\t\t<div className=\"text-danger-600 text-sm bg-danger-50 dark:bg-danger-900/20 rounded-lg p-3 text-center\">\n\t\t\t\t\t\t{formError}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"light\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonPress={() => setState((prev) => ({ ...prev, step: \"credentials\" }))}\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t>\n\t\t\t\t\tBack to sign in\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FormWrapper\n\t\t\t{...stableFormWrapperProps}\n\t\t\tonSubmit={handleSubmit}\n\t\t\ttitleAlignment={textAlign}\n\t\t>\n\t\t\t{/* OAuth Buttons */}\n\t\t\t{availableMethods.includes(\"oauth\") && (\n\t\t\t\t<>\n\t\t\t\t\t<OAuthButtons\n\t\t\t\t\t\tonSuccess={handleOAuthSuccess}\n\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\torganizationId={state.selectedOrganization || initialOrganizationId}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{(availableMethods.includes(\"password\") ||\n\t\t\t\t\t\tavailableMethods.includes(\"magic-link\")) && (\n\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t<Divider className=\"my-4\" />\n\t\t\t\t\t\t\t<div className=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<span className=\"bg-background text-sm text-default-500\">\n\t\t\t\t\t\t\t\t\tor\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{/* Password Form */}\n\t\t\t{availableMethods.includes(\"password\") && (\n\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t{/* Organization Selector */}\n\t\t\t\t\t{showOrganizationSelector && organizationMemberships.length > 1 && (\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tlabel=\"Organization\"\n\t\t\t\t\t\t\tplaceholder=\"Select an organization\"\n\t\t\t\t\t\t\tselectedKeys={\n\t\t\t\t\t\t\t\tstate.selectedOrganization ? [state.selectedOrganization] : []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonSelectionChange={handleOrganizationChange}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{organizationMemberships.map((membership) => (\n\t\t\t\t\t\t\t\t<SelectItem\n\t\t\t\t\t\t\t\t\tkey={membership.organization.id}\n\t\t\t\t\t\t\t\t\tvalue={membership.organization.id}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{membership.organization.name}\n\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Email Field */}\n\t\t\t\t\t<EmailField\n\t\t\t\t\t\tlabel=\"Email\"\n\t\t\t\t\t\tname=\"email\"\n\t\t\t\t\t\tplaceholder=\"Enter your email\"\n\t\t\t\t\t\tvalue={state.email}\n\t\t\t\t\t\tonChange={handleEmailChange}\n\t\t\t\t\t\tstartContent={envelopeIcon}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tdisabled={disabled || isLoading}\n\t\t\t\t\t\tshowSuggestions={false}\n\t\t\t\t\t\tshowVerificationStatus={true}\n\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t{state.email && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{/* Password Field */}\n\t\t\t\t\t\t\t<PasswordField\n\t\t\t\t\t\t\t\tlabel=\"Password\"\n\t\t\t\t\t\t\t\tname=\"password\"\n\t\t\t\t\t\t\t\tplaceholder=\"Enter your password\"\n\t\t\t\t\t\t\t\tvalue={state.password}\n\t\t\t\t\t\t\t\tonChange={handlePasswordChange}\n\t\t\t\t\t\t\t\tstartContent={lockIcon}\n\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\tdisabled={disabled || isLoading}\n\t\t\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{/* Remember Me & Forgot Password */}\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\tisSelected={state.rememberMe}\n\t\t\t\t\t\t\t\t\tonValueChange={handleRememberMeChange}\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tRemember me\n\t\t\t\t\t\t\t\t</Checkbox>\n\n\t\t\t\t\t\t\t\t{showForgotPasswordLink && (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\thref={linksPath?.forgotPassword}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tForgot password?\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Error Display */}\n\t\t\t\t\t{formError && (\n\t\t\t\t\t\t<div className=\"rounded-lg\">\n\t\t\t\t\t\t\t<FieldError error={formError} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Submit Button */}\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tisDisabled={disabled || !state.email || !state.password}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoading ? \"Signing in...\" : \"Sign in\"}\n\t\t\t\t\t</Button>\n\n\t\t\t\t\t{/* Magic Link Alternative */}\n\t\t\t\t\t{availableMethods.includes(\"magic-link\") && state.email && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<Divider className=\"my-1\">\n\t\t\t\t\t\t\t\t\t<span className=\"bg-background text-sm text-default-500\">\n\t\t\t\t\t\t\t\t\t\tor\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Divider>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<MagicLinkSection\n\t\t\t\t\t\t\t\temail={state.email}\n\t\t\t\t\t\t\t\tonSuccess={handleMagicLinkSuccess}\n\t\t\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\t\t\torganizationId={\n\t\t\t\t\t\t\t\t\tstate.selectedOrganization || initialOrganizationId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t{/* Magic Link Only */}\n\t\t\t\t{availableMethods.includes(\"magic-link\") &&\n\t\t\t\t\t!availableMethods.includes(\"password\") && (\n\t\t\t\t\t\t<div className=\"space-y-4\">\n\t\t\t\t\t\t\t<EmailField\n\t\t\t\t\t\t\t\tlabel=\"Email\"\n\t\t\t\t\t\t\t\tplaceholder=\"Enter your email\"\n\t\t\t\t\t\t\t\tvalue={state.email}\n\t\t\t\t\t\t\t\tonChange={handleEmailChange}\n\t\t\t\t\t\t\t\tstartContent={envelopeIcon}\n\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\t\trequired={true}\n\t\t\t\t\t\t\t\tdisabled={disabled || isLoading}\n\t\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<MagicLinkSection\n\t\t\t\t\t\t\t\temail={state.email}\n\t\t\t\t\t\t\t\tonSuccess={handleMagicLinkSuccess}\n\t\t\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\t\t\torganizationId={\n\t\t\t\t\t\t\t\t\tstate.selectedOrganization || initialOrganizationId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t{/* Passkey Authentication */}\n\t\t\t\t{availableMethods.includes(\"passkey\") && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{availableMethods.includes(\"password\") &&\n\t\t\t\t\t\t\tavailableMethods.includes(\"magic-link\") &&\n\t\t\t\t\t\t\t!state.email && (\n\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<Divider className=\"my-1\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"bg-background px-2 text-sm text-default-500\">\n\t\t\t\t\t\t\t\t\t\t\tor\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tradius={radius}\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tstartContent={lockIconSmall}\n\t\t\t\t\t\t\tonPress={handlePasskeyAuth}\n\t\t\t\t\t\t\tisDisabled={disabled || isLoading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSign in with passkey\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\n\t\t\t\t{/* Sign Up Link */}\n\t\t\t\t{showSignUpLink && features.signUp && (\n\t\t\t\t\t<div className=\"text-center text-sm\">\n\t\t\t\t\t\t<span className=\"text-default-500\">Don't have an account? </span>\n\t\t\t\t\t\t<Link href={linksPath?.signUp} color=\"primary\">\n\t\t\t\t\t\t\tSign up\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Custom Footer */}\n\t\t\t{footer}\n\t\t</FormWrapper>\n\t);\n}\n\nexport default SignInForm;\n"],"names":["GoogleIcon","React","jsxs","jsx","GitHubIcon","MicrosoftIcon","AppleIcon","SuccessMessage","successType","successData","redirectUrl","isLoading","setIsLoading","useState","components","useConfig","Button","HeroButton","content","useCallback","LockClosedIcon","EnvelopeIcon","showRedirectMessage","motion","OAuthButtons","onSuccess","onError","organizationId","disabled","size","radius","signInWithGoogle","signInWithGitHub","signInWithMicrosoft","signInWithApple","useOAuth","handleOAuthSignIn","provider","signInMethod","result","error","handleGoogleSignIn","handleGitHubSignIn","handleMicrosoftSignIn","handleAppleSignIn","MagicLinkSection","email","sendMagicLink","lastSentEmail","canResend","useMagicLink","sent","setSent","envelopeIcon","useMemo","handleSendMagicLink","VerificationCode","length","onComplete","Input","HeroInput","code","setCode","focused","setFocused","handleChange","index","value","newCode","digit","handleKeyDown","e","_","SignInForm","methods","initialEmail","initialOrganizationId","showSignUpLink","showForgotPasswordLink","showOrganizationSelector","title","subtitle","variant","className","showBranding","titleAlignment","footer","header","signIn","organizationMemberships","resendVerification","useAuth","features","organizationSettings","linksPath","configTitleAlignment","authenticateWithPasskey","usePasskeys","lockIcon","lockIconSmall","textAlign","CustomSignInForm","state","setState","formError","setFormError","availableMethods","method","stableFormWrapperProps","defaultContent","finalTitle","finalSubtitle","logoElement","handleSubmit","prev","authError","handleMFAVerification","handleOAuthSuccess","handleMagicLinkSuccess","handlePasskeyAuth","handleEmailChange","handlePasswordChange","password","handleRememberMeChange","rememberMe","handleOrganizationChange","keys","selected","FormWrapper","Fragment","Divider","Select","membership","SelectItem","EmailField","PasswordField","Checkbox","Link","FieldError"],"mappings":"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"}