@frank-auth/react
Version:
Flexible and customizable React UI components for Frank Authentication
1 lines • 23.5 kB
Source Map (JSON)
{"version":3,"file":"oauth-buttons.cjs","sources":["../../../../../src/components/auth/common/oauth-buttons.tsx"],"sourcesContent":["/**\n * @frank-auth/react - OAuth Buttons Component\n *\n * OAuth provider buttons with organization-specific configurations,\n * custom styling, and comprehensive provider support.\n */\n\n\"use client\";\n\nimport { Button } from \"@/components/ui\";\nimport { motion } from \"framer-motion\";\nimport React from \"react\";\nimport { useConfig } from \"../../../hooks/use-config\";\nimport { type OAuthProviderType, useOAuth } from \"../../../hooks/use-oauth\";\n\n// ============================================================================\n// OAuth Buttons Types\n// ============================================================================\n\nexport interface OAuthButtonsProps {\n\t/**\n\t * OAuth providers to show\n\t */\n\tproviders?: OAuthProviderType[];\n\n\t/**\n\t * Button layout\n\t */\n\tlayout?: \"vertical\" | \"horizontal\" | \"grid\";\n\n\t/**\n\t * Button variant\n\t */\n\tvariant?:\n\t\t| \"solid\"\n\t\t| \"bordered\"\n\t\t| \"light\"\n\t\t| \"flat\"\n\t\t| \"faded\"\n\t\t| \"shadow\"\n\t\t| \"ghost\";\n\n\t/**\n\t * Button size\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\n\t/**\n\t * Whether to show provider icons\n\t */\n\tshowIcons?: boolean;\n\n\t/**\n\t * Whether to show provider names\n\t */\n\tshowNames?: boolean;\n\n\t/**\n\t * Custom button text format\n\t */\n\ttextFormat?: \"continue\" | \"sign-in\" | \"sign-up\" | \"connect\" | \"custom\";\n\n\t/**\n\t * Custom text template (use {provider} placeholder)\n\t */\n\tcustomText?: string;\n\n\t/**\n\t * Redirect URL after OAuth\n\t */\n\tredirectUrl?: string;\n\n\t/**\n\t * Organization ID for OAuth\n\t */\n\torganizationId?: string;\n\n\t/**\n\t * Success callback\n\t */\n\tonSuccess?: (provider: string, result: any) => void;\n\n\t/**\n\t * Error callback\n\t */\n\tonError?: (provider: string, error: Error) => void;\n\n\t/**\n\t * Custom className\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Disabled state\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Whether to animate buttons\n\t */\n\tanimated?: boolean;\n\n\t/**\n\t * Custom button props\n\t */\n\tbuttonProps?: any;\n}\n\n// ============================================================================\n// Provider Configurations\n// ============================================================================\n\nconst PROVIDER_CONFIGS = {\n\tgoogle: {\n\t\tname: \"Google\",\n\t\tcolor: \"#4285f4\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\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\t\t/>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\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\t\t/>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\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\t\t/>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\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\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\tmicrosoft: {\n\t\tname: \"Microsoft\",\n\t\tcolor: \"#00a1f1\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path fill=\"#f25022\" d=\"M1 1h10v10H1z\" />\n\t\t\t\t<path fill=\"#00a4ef\" d=\"M13 1h10v10H13z\" />\n\t\t\t\t<path fill=\"#7fba00\" d=\"M1 13h10v10H1z\" />\n\t\t\t\t<path fill=\"#ffb900\" d=\"M13 13h10v10H13z\" />\n\t\t\t</svg>\n\t\t),\n\t},\n\tgithub: {\n\t\tname: \"GitHub\",\n\t\tcolor: \"#333333\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"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\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\tapple: {\n\t\tname: \"Apple\",\n\t\tcolor: \"#000000\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\tfacebook: {\n\t\tname: \"Facebook\",\n\t\tcolor: \"#1877f2\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"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\t\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\ttwitter: {\n\t\tname: \"Twitter\",\n\t\tcolor: \"#1da1f2\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\tlinkedin: {\n\t\tname: \"LinkedIn\",\n\t\tcolor: \"#0077b5\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n\tdiscord: {\n\t\tname: \"Discord\",\n\t\tcolor: \"#5865f2\",\n\t\ttextColor: \"#ffffff\",\n\t\ticon: (\n\t\t\t<svg viewBox=\"0 0 24 24\" className=\"w-5 h-5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.120.098.246.191.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.500-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t),\n\t},\n} as const;\n\n// ============================================================================\n// OAuth Button Component\n// ============================================================================\n\ninterface OAuthButtonProps {\n\tprovider: OAuthProviderType;\n\tvariant?:\n\t\t| \"solid\"\n\t\t| \"bordered\"\n\t\t| \"light\"\n\t\t| \"flat\"\n\t\t| \"faded\"\n\t\t| \"shadow\"\n\t\t| \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tshowIcon?: boolean;\n\tshowName?: boolean;\n\ttext?: string;\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tisLoading?: boolean;\n\tclassName?: string;\n\tanimated?: boolean;\n\tbuttonProps?: any;\n}\n\nfunction OAuthButton({\n\tprovider,\n\tvariant = \"bordered\",\n\tsize = \"md\",\n\tshowIcon = true,\n\tshowName = true,\n\ttext,\n\tonClick,\n\tdisabled = false,\n\tisLoading = false,\n\tclassName = \"\",\n\tanimated = true,\n\tbuttonProps = {},\n}: OAuthButtonProps) {\n\tconst config = PROVIDER_CONFIGS[provider];\n\tconst { components } = useConfig();\n\n\t// Custom component override\n\tconst CustomOAuthButton = components.OAuthButton;\n\tif (CustomOAuthButton) {\n\t\treturn (\n\t\t\t<CustomOAuthButton\n\t\t\t\t{...{\n\t\t\t\t\tprovider,\n\t\t\t\t\tvariant,\n\t\t\t\t\tsize,\n\t\t\t\t\tshowIcon,\n\t\t\t\t\tshowName,\n\t\t\t\t\ttext,\n\t\t\t\t\tonClick,\n\t\t\t\t\tdisabled,\n\t\t\t\t\tisLoading,\n\t\t\t\t\tclassName,\n\t\t\t\t\tanimated,\n\t\t\t\t\tbuttonProps,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst buttonText = text || `Continue with ${config.name}`;\n\n\tconst buttonContent = (\n\t\t<>\n\t\t\t{showIcon && (\n\t\t\t\t<span className={`${isLoading ? \"opacity-50\" : \"\"}`}>\n\t\t\t\t\t{config.icon}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{showName && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`font-medium ${isLoading ? \"opacity-70\" : \"\"} ${!showIcon ? \"\" : \"ml-2\"}`}\n\t\t\t\t>\n\t\t\t\t\t{isLoading ? \"Connecting...\" : buttonText}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{isLoading && (\n\t\t\t\t<div className=\"ml-2\">\n\t\t\t\t\t<div className=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin opacity-60\" />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst buttonElement = (\n\t\t<Button\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tonPress={onClick}\n\t\t\tisDisabled={disabled || isLoading}\n\t\t\tclassName={`\n ${variant === \"solid\" ? `bg-[${config.color}] text-[${config.textColor}] hover:opacity-90` : \"\"}\n ${variant === \"bordered\" ? `border-[${config.color}] text-[${config.color}] hover:bg-[${config.color}]/10` : \"\"}\n ${variant === \"light\" ? `text-[${config.color}] hover:bg-[${config.color}]/10` : \"\"}\n w-full justify-start\n ${className}\n `}\n\t\t\tstartContent={showIcon ? config.icon : undefined}\n\t\t\t{...buttonProps}\n\t\t>\n\t\t\t{showName ? (isLoading ? \"Connecting...\" : buttonText) : null}\n\t\t</Button>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\twhileHover={{ scale: disabled || isLoading ? 1 : 1.02 }}\n\t\t\t\twhileTap={{ scale: disabled || isLoading ? 1 : 0.98 }}\n\t\t\t\ttransition={{ duration: 0.1 }}\n\t\t\t>\n\t\t\t\t{buttonElement}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn buttonElement;\n}\n\n// ============================================================================\n// OAuth Buttons Component\n// ============================================================================\n\nexport function OAuthButtons({\n\tproviders = [\"google\", \"microsoft\", \"github\"],\n\tlayout = \"vertical\",\n\tvariant = \"bordered\",\n\tsize = \"md\",\n\tshowIcons = true,\n\tshowNames = true,\n\ttextFormat = \"continue\",\n\tcustomText,\n\tredirectUrl,\n\torganizationId,\n\tonSuccess,\n\tonError,\n\tclassName = \"\",\n\tdisabled = false,\n\tanimated = true,\n\tbuttonProps = {},\n}: OAuthButtonsProps) {\n\tconst { signInWithProvider, isLoading } = useOAuth();\n\tconst { organizationSettings, features } = useConfig();\n\tconst { components } = useConfig();\n\n\t// Custom component override\n\tconst CustomOAuthButtons = components.OAuthButtons;\n\tif (CustomOAuthButtons) {\n\t\treturn (\n\t\t\t<CustomOAuthButtons\n\t\t\t\t{...{\n\t\t\t\t\tproviders,\n\t\t\t\t\tlayout,\n\t\t\t\t\tvariant,\n\t\t\t\t\tsize,\n\t\t\t\t\tshowIcons,\n\t\t\t\t\tshowNames,\n\t\t\t\t\ttextFormat,\n\t\t\t\t\tcustomText,\n\t\t\t\t\tredirectUrl,\n\t\t\t\t\torganizationId,\n\t\t\t\t\tonSuccess,\n\t\t\t\t\tonError,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdisabled,\n\t\t\t\t\tanimated,\n\t\t\t\t\tbuttonProps,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Filter providers based on organization settings\n\tconst availableProviders = React.useMemo(() => {\n\t\tif (!features.oauth) return [];\n\n\t\t// Get organization-allowed providers\n\t\tconst orgProviders = organizationSettings?.oauthProviders || [];\n\n\t\tif (orgProviders.length > 0) {\n\t\t\treturn providers.filter((provider) =>\n\t\t\t\torgProviders.some((op: any) => op.provider === provider && op.enabled),\n\t\t\t);\n\t\t}\n\n\t\treturn providers;\n\t}, [providers, organizationSettings, features.oauth]);\n\n\t// Generate button text\n\tconst getButtonText = (provider: OAuthProviderType) => {\n\t\tif (customText) {\n\t\t\treturn customText.replace(\"{provider}\", PROVIDER_CONFIGS[provider].name);\n\t\t}\n\n\t\tconst providerName = PROVIDER_CONFIGS[provider].name;\n\n\t\tswitch (textFormat) {\n\t\t\tcase \"sign-in\":\n\t\t\t\treturn `Sign in with ${providerName}`;\n\t\t\tcase \"sign-up\":\n\t\t\t\treturn `Sign up with ${providerName}`;\n\t\t\tcase \"connect\":\n\t\t\t\treturn `Connect ${providerName}`;\n\t\t\tcase \"continue\":\n\t\t\tdefault:\n\t\t\t\treturn `Continue with ${providerName}`;\n\t\t}\n\t};\n\n\t// Handle OAuth provider click\n\tconst handleProviderClick = React.useCallback(\n\t\tasync (provider: OAuthProviderType) => {\n\t\t\tif (disabled || isLoading) return;\n\n\t\t\ttry {\n\t\t\t\tawait signInWithProvider(provider, {\n\t\t\t\t\tredirectUrl,\n\t\t\t\t\torganizationId,\n\t\t\t\t});\n\n\t\t\t\tonSuccess?.(provider, { provider });\n\t\t\t} catch (error) {\n\t\t\t\tconst authError =\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(\"OAuth authentication failed\");\n\t\t\t\tonError?.(provider, authError);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tsignInWithProvider,\n\t\t\tredirectUrl,\n\t\t\torganizationId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\tdisabled,\n\t\t\tisLoading,\n\t\t],\n\t);\n\n\t// Don't render if no providers available\n\tif (availableProviders.length === 0) {\n\t\treturn null;\n\t}\n\n\t// Layout classes\n\tconst layoutClasses = {\n\t\tvertical: \"flex flex-col gap-3\",\n\t\thorizontal: \"flex flex-row gap-3 flex-wrap\",\n\t\tgrid: \"grid grid-cols-1 sm:grid-cols-2 gap-3\",\n\t};\n\n\treturn (\n\t\t<div className={`${layoutClasses[layout]} ${className}`}>\n\t\t\t{availableProviders.map((provider, index) => (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={provider}\n\t\t\t\t\tinitial={animated ? { opacity: 0, y: 10 } : false}\n\t\t\t\t\tanimate={animated ? { opacity: 1, y: 0 } : false}\n\t\t\t\t\ttransition={animated ? { delay: index * 0.1 } : undefined}\n\t\t\t\t>\n\t\t\t\t\t<OAuthButton\n\t\t\t\t\t\tprovider={provider}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tshowIcon={showIcons}\n\t\t\t\t\t\tshowName={showNames}\n\t\t\t\t\t\ttext={getButtonText(provider)}\n\t\t\t\t\t\tonClick={() => handleProviderClick(provider)}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tbuttonProps={buttonProps}\n\t\t\t\t\t/>\n\t\t\t\t</motion.div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// OAuth Divider Component\n// ============================================================================\n\nexport function OAuthDivider({\n\ttext = \"or\",\n\tclassName = \"\",\n}: {\n\ttext?: string;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<div className={`relative flex items-center my-6 ${className}`}>\n\t\t\t<div className=\"flex-grow border-t border-default-200 dark:border-default-700\" />\n\t\t\t<span className=\"px-4 text-sm text-default-500 bg-background\">\n\t\t\t\t{text}\n\t\t\t</span>\n\t\t\t<div className=\"flex-grow border-t border-default-200 dark:border-default-700\" />\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Export\n// ============================================================================\n\nexport default OAuthButtons;\n"],"names":["PROVIDER_CONFIGS","jsxs","jsx","OAuthButton","provider","variant","size","showIcon","showName","text","onClick","disabled","isLoading","className","animated","buttonProps","config","components","useConfig","CustomOAuthButton","buttonText","Fragment","buttonElement","Button","motion","OAuthButtons","providers","layout","showIcons","showNames","textFormat","customText","redirectUrl","organizationId","onSuccess","onError","signInWithProvider","useOAuth","organizationSettings","features","CustomOAuthButtons","availableProviders","React","orgProviders","op","getButtonText","providerName","handleProviderClick","error","authError","layoutClasses","index","OAuthDivider","oauth_buttons_default"],"mappings":"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"}