UNPKG

@frank-auth/react

Version:

Flexible and customizable React UI components for Frank Authentication

1 lines 21 kB
{"version":3,"file":"defaults.cjs","sources":["../../../src/config/defaults.ts"],"sourcesContent":["/**\n * @frank-auth/react - Default Configurations\n *\n * Comprehensive default configuration values for all aspects of the UI library.\n * Based on HeroUI design system with sensible defaults for multi-tenant auth.\n */\n\nimport {\n type AppearanceConfig,\n type AppearanceMode,\n type BrandingConfig,\n type ComponentAppearance,\n type ComponentSize,\n type FrankAuthUIConfig,\n type LocalizationConfig,\n type OrganizationConfig,\n type Theme,\n ThemeUtils,\n type Typography,\n type UserType,\n} from './types';\nimport {AVAILABLE_LOCALES, DEFAULT_LOCALE, getLocale} from \"../locales\";\nimport type {Animations, BorderRadius, LayoutConfig, Shadows, Spacing, ThemeColors} from \"../types\";\n\n// ============================================================================\n// Default Color Palette (Based on HeroUI)\n// ============================================================================\n\nexport const DEFAULT_COLOR_PALETTE = ThemeUtils.generateColorPalette('#3b82f6');\n\nexport const DEFAULT_THEME_COLOR: ThemeColors = {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n DEFAULT: '#3b82f6',\n foreground: '#ffffff',\n },\n secondary: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n DEFAULT: '#64748b',\n foreground: '#ffffff',\n },\n background: '#ffffff',\n foreground: '#0f172a',\n card: '#ffffff',\n cardForeground: '#0f172a',\n popover: '#ffffff',\n popoverForeground: '#0f172a',\n muted: '#f1f5f9',\n mutedForeground: '#64748b',\n accent: '#f1f5f9',\n accentForeground: '#0f172a',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#e2e8f0',\n input: '#e2e8f0',\n ring: '#3b82f6',\n success: '#10b981',\n successForeground: '#ffffff',\n warning: '#f59e0b',\n warningForeground: '#ffffff',\n danger: '#ef4444',\n dangerForeground: '#ffffff',\n info: '#3b82f6',\n infoForeground: '#ffffff',\n content1: '',\n content2: '',\n content3: '',\n content4: '',\n primaryForeground: '',\n secondaryForeground: '',\n divider: '',\n inputForeground: '',\n focus: '',\n focusVisible: '',\n overlay: '',\n selection: '',\n selectionForeground: '',\n disabled: '',\n disabledForeground: ''\n};\n\n// ============================================================================\n// Default Typography\n// ============================================================================\n\nexport const DEFAULT_TYPOGRAPHY: Typography = {\n fontFamily: {\n sans: ['Inter', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n mono: ['JetBrains Mono', 'ui-monospace', 'monospace'],\n serif: ['JetBrains Mono', 'ui-monospace', 'monospace'],\n },\n fontSize: {\n xs: ['0.75rem', {lineHeight: '1rem'}],\n sm: ['0.875rem', {lineHeight: '1.25rem'}],\n base: ['1rem', {lineHeight: '1.5rem'}],\n lg: ['1.125rem', {lineHeight: '1.75rem'}],\n xl: ['1.25rem', {lineHeight: '1.75rem'}],\n '2xl': ['1.5rem', {lineHeight: '2rem'}],\n '3xl': ['1.875rem', {lineHeight: '2.25rem'}],\n '4xl': ['2.25rem', {lineHeight: '2.5rem'}],\n '5xl': ['3rem', {lineHeight: '1'}],\n '6xl': ['4rem', {lineHeight: '1'}],\n '7xl': ['5rem', {lineHeight: '1'}],\n '8xl': ['6rem', {lineHeight: '1'}],\n '9xl': ['7rem', {lineHeight: '1'}]\n },\n fontWeight: {\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n thin: '',\n extralight: '',\n extrabold: '',\n black: ''\n },\n lineHeight: {\n none: '',\n tight: '',\n snug: '',\n normal: '',\n relaxed: '',\n loose: ''\n },\n letterSpacing: {\n tighter: '',\n tight: '',\n normal: '',\n wide: '',\n wider: '',\n widest: ''\n }\n};\n\n// ============================================================================\n// Default Spacing\n// ============================================================================\n\nexport const DEFAULT_SPACING: Spacing = {\n xs: '0.5rem',\n sm: '0.75rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '2.5rem',\n '3xl': '3rem',\n '4xl': '4rem',\n '5xl': '5rem',\n};\n\n// ============================================================================\n// Default Border Radius\n// ============================================================================\n\nexport const DEFAULT_BORDER_RADIUS: BorderRadius = {\n none: '0px',\n sm: '0.125rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n base: ''\n};\n\n// ============================================================================\n// Default Shadows\n// ============================================================================\n\nexport const DEFAULT_SHADOWS: Shadows = {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n none: '0 0 #0000',\n base: ''\n};\n\n// ============================================================================\n// Default Animations\n// ============================================================================\n\nexport const DEFAULT_ANIMATIONS: Animations = {\n duration: {\n fast: '150ms',\n normal: '200ms',\n slow: '300ms',\n },\n easing: {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n },\n};\n\n// ============================================================================\n// Default Theme Configuration\n// ============================================================================\n\nexport const DEFAULT_THEME_CONFIG: Theme = {\n ...ThemeUtils.generateTheme({\n animations: 'enhanced',\n mode: 'light',\n borderRadius: 'medium',\n colorHarmony: 'complementary',\n contrastRatio: 'AAA',\n shadows: 'none',\n secondaryColor: '#64748b',\n primaryColor: '#3b82f6',\n }) as Theme,\n typography: DEFAULT_TYPOGRAPHY,\n spacing: DEFAULT_SPACING,\n borderRadius: DEFAULT_BORDER_RADIUS,\n shadows: DEFAULT_SHADOWS,\n animations: DEFAULT_ANIMATIONS,\n};\n\n// ============================================================================\n// Default Layout Configuration\n// ============================================================================\n\nexport const DEFAULT_LAYOUT_CONFIG: LayoutConfig = {\n containerMaxWidth: '1200px',\n sidebarWidth: '280px',\n headerHeight: '64px',\n footerHeight: '80px',\n contentPadding: '24px',\n};\n\n// ============================================================================\n// Default Component Appearance\n// ============================================================================\n\nexport const DEFAULT_COMPONENT_APPEARANCE: ComponentAppearance = {\n input: {\n variant: 'bordered',\n size: 'md' as ComponentSize,\n radius: 'md',\n color: 'default',\n labelPlacement: 'inside',\n },\n button: {\n variant: 'solid',\n size: 'md' as ComponentSize,\n radius: 'md',\n color: 'primary',\n disableAnimation: false,\n disableRipple: false,\n },\n card: {\n variant: 'shadow',\n radius: 'lg',\n shadow: 'md',\n isBlurred: false,\n },\n modal: {\n size: 'md' as ComponentSize,\n radius: 'lg',\n shadow: 'lg',\n backdrop: 'opaque',\n placement: 'auto',\n },\n navbar: {\n variant: 'sticky',\n maxWidth: '1200px',\n height: '64px',\n isBlurred: true,\n },\n table: {\n variant: 'striped',\n size: 'md' as ComponentSize,\n radius: 'lg',\n shadow: 'sm',\n isCompact: false,\n },\n};\n\n// ============================================================================\n// Default Branding Configuration\n// ============================================================================\n\nexport const DEFAULT_BRANDING_CONFIG: BrandingConfig = {\n logo: {\n alt: 'Frank Auth',\n width: 120,\n height: 32,\n },\n favicon: {\n type: 'image/svg+xml',\n },\n colors: {\n primary: '#3b82f6',\n secondary: '#64748b',\n },\n fonts: {\n primary: 'Inter, ui-sans-serif, system-ui, sans-serif',\n },\n};\n\n// ============================================================================\n// Default Appearance Configuration\n// ============================================================================\n\nexport const DEFAULT_APPEARANCE_CONFIG: AppearanceConfig = {\n mode: 'system' as AppearanceMode,\n layout: DEFAULT_LAYOUT_CONFIG,\n components: DEFAULT_COMPONENT_APPEARANCE,\n branding: DEFAULT_BRANDING_CONFIG,\n};\n\n// ============================================================================\n// Default Locale Messages\n// ============================================================================\n\nexport const DEFAULT_LOCALE_MESSAGES = getLocale(DEFAULT_LOCALE);\n\n// ============================================================================\n// Default Localization Configuration\n// ============================================================================\n\nexport const DEFAULT_LOCALIZATION_CONFIG: LocalizationConfig = {\n defaultLocale: DEFAULT_LOCALE,\n fallbackLocale: DEFAULT_LOCALE,\n supportedLocales: AVAILABLE_LOCALES,\n dateFormat: 'MMM d, yyyy',\n timeFormat: 'h:mm a',\n numberFormat: {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n },\n direction: 'ltr',\n messages: DEFAULT_LOCALE_MESSAGES,\n};\n\n// ============================================================================\n// Default Organization Configuration\n// ============================================================================\n\nexport const DEFAULT_ORGANIZATION_CONFIG: Partial<OrganizationConfig> = {\n settings: {\n allowPublicSignup: true,\n requireEmailVerification: true,\n requirePhoneVerification: false,\n mfaRequired: false,\n allowedMfaMethods: ['totp', 'sms', 'email'],\n passwordPolicy: {\n minLength: 8,\n requireUppercase: true,\n requireLowercase: true,\n requireNumbers: true,\n requireSymbols: false,\n },\n sessionSettings: {\n maxDuration: 86400, // 24 hours\n inactivityTimeout: 1800, // 30 minutes\n multipleSessionsAllowed: true,\n },\n branding: {\n primaryColor: '#3b82f6',\n secondaryColor: '#64748b',\n },\n },\n features: {\n sso: false,\n mfa: true,\n auditLogs: false,\n customBranding: false,\n apiAccess: true,\n },\n limits: {\n maxUsers: 100,\n maxSessions: 10,\n apiRequestLimit: 1000,\n },\n};\n\n// ============================================================================\n// Default Main Configuration\n// ============================================================================\n\nexport const DEFAULT_FRANK_AUTH_CONFIG: Partial<FrankAuthUIConfig> = {\n apiUrl: 'https://api.frankauth.com',\n userType: 'external' as UserType,\n theme: DEFAULT_THEME_CONFIG,\n appearance: DEFAULT_APPEARANCE_CONFIG,\n localization: DEFAULT_LOCALIZATION_CONFIG,\n features: {\n signUp: true,\n signIn: true,\n passwordReset: true,\n mfa: true,\n sso: false,\n organizationManagement: true,\n userProfile: true,\n sessionManagement: true,\n },\n debug: false,\n telemetry: true,\n};\n\n// ============================================================================\n// Configuration Presets\n// ============================================================================\n\n/**\n * Preset configurations for different use cases\n */\nexport const CONFIG_PRESETS = {\n // Minimal configuration for simple auth\n minimal: {\n features: {\n signUp: true,\n signIn: true,\n passwordReset: true,\n mfa: false,\n sso: false,\n organizationManagement: false,\n userProfile: false,\n sessionManagement: false,\n },\n appearance: {\n components: {\n input: { variant: 'flat' as const },\n button: { variant: 'flat' as const },\n card: { variant: 'flat' as const },\n },\n },\n },\n\n // Enterprise configuration with all features\n enterprise: {\n features: {\n signUp: true,\n signIn: true,\n passwordReset: true,\n mfa: true,\n sso: true,\n organizationManagement: true,\n userProfile: true,\n sessionManagement: true,\n },\n organization: {\n settings: {\n mfaRequired: true,\n allowedMfaMethods: ['totp', 'webauthn'],\n passwordPolicy: {\n minLength: 12,\n requireUppercase: true,\n requireLowercase: true,\n requireNumbers: true,\n requireSymbols: true,\n },\n },\n features: {\n sso: true,\n mfa: true,\n auditLogs: true,\n customBranding: true,\n apiAccess: true,\n },\n },\n },\n\n // B2B SaaS configuration\n b2b: {\n userType: 'external' as UserType,\n features: {\n signUp: false, // Invitation-only\n signIn: true,\n passwordReset: true,\n mfa: true,\n sso: true,\n organizationManagement: true,\n userProfile: true,\n sessionManagement: true,\n },\n organization: {\n settings: {\n allowPublicSignup: false,\n requireEmailVerification: true,\n mfaRequired: true,\n },\n },\n },\n\n // Consumer app configuration\n consumer: {\n userType: 'end_user' as UserType,\n features: {\n signUp: true,\n signIn: true,\n passwordReset: true,\n mfa: false,\n sso: true,\n organizationManagement: false,\n userProfile: true,\n sessionManagement: false,\n },\n appearance: {\n components: {\n input: { variant: 'bordered' as const },\n button: { variant: 'shadow' as const },\n card: { variant: 'shadow' as const },\n },\n },\n },\n} as const;\n\n// ============================================================================\n// Export defaults\n// ============================================================================\n\nexport {\n DEFAULT_THEME_CONFIG as defaultTheme,\n DEFAULT_APPEARANCE_CONFIG as defaultAppearance,\n DEFAULT_LOCALIZATION_CONFIG as defaultLocalization,\n DEFAULT_ORGANIZATION_CONFIG as defaultOrganization,\n DEFAULT_FRANK_AUTH_CONFIG as defaultConfig,\n};"],"names":["DEFAULT_COLOR_PALETTE","ThemeUtils","DEFAULT_TYPOGRAPHY","DEFAULT_SPACING","DEFAULT_BORDER_RADIUS","DEFAULT_SHADOWS","DEFAULT_ANIMATIONS","DEFAULT_THEME_CONFIG","DEFAULT_LAYOUT_CONFIG","DEFAULT_COMPONENT_APPEARANCE","DEFAULT_BRANDING_CONFIG","DEFAULT_APPEARANCE_CONFIG","DEFAULT_LOCALE_MESSAGES","getLocale","DEFAULT_LOCALE","DEFAULT_LOCALIZATION_CONFIG","AVAILABLE_LOCALES","DEFAULT_ORGANIZATION_CONFIG","DEFAULT_FRANK_AUTH_CONFIG","CONFIG_PRESETS"],"mappings":"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"}