{"version":3,"file":"theme.cjs","sources":["../../../src/utils/theme.ts"],"sourcesContent":["import type {\n    ColorPalette,\n    ColorPalettes,\n    ComponentVariant,\n    Theme,\n    ThemeColors,\n    ThemeCustomization,\n    ThemeGeneratorOptions,\n    ThemeMode,\n    ThemeValidation\n} from '../types';\n\n// Color utilities\nexport const hexToHsl = (hex: string): [number, number, number] => {\n    const r = Number.parseInt(hex.slice(1, 3), 16) / 255;\n    const g = Number.parseInt(hex.slice(3, 5), 16) / 255;\n    const b = Number.parseInt(hex.slice(5, 7), 16) / 255;\n\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    let h = 0;\n    let s = 0;\n    const l = (max + min) / 2;\n\n    if (max === min) {\n        h = s = 0; // achromatic\n    } else {\n        const d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch (max) {\n            case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n            case g: h = (b - r) / d + 2; break;\n            case b: h = (r - g) / d + 4; break;\n        }\n        h /= 6;\n    }\n\n    return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];\n};\n\nexport const hslToHex = (h: number, s: number, l: number): string => {\n    h /= 360;\n    s /= 100;\n    l /= 100;\n\n    const hue2rgb = (p: number, q: number, t: number) => {\n        if (t < 0) t += 1;\n        if (t > 1) t -= 1;\n        if (t < 1/6) return p + (q - p) * 6 * t;\n        if (t < 1/2) return q;\n        if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n        return p;\n    };\n\n    let r, g, b;\n\n    if (s === 0) {\n        r = g = b = l; // achromatic\n    } else {\n        const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        const p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1/3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1/3);\n    }\n\n    const toHex = (c: number) => {\n        const hex = Math.round(c * 255).toString(16);\n        return hex.length === 1 ? '0' + hex : hex;\n    };\n\n    return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n};\n\nexport const adjustBrightness = (hex: string, amount: number): string => {\n    const [h, s, l] = hexToHsl(hex);\n    const newL = Math.max(0, Math.min(100, l + amount));\n    return hslToHex(h, s, newL);\n};\n\nexport const adjustSaturation = (hex: string, amount: number): string => {\n    const [h, s, l] = hexToHsl(hex);\n    const newS = Math.max(0, Math.min(100, s + amount));\n    return hslToHex(h, newS, l);\n};\n\nexport const adjustHue = (hex: string, amount: number): string => {\n    const [h, s, l] = hexToHsl(hex);\n    const newH = (h + amount + 360) % 360;\n    return hslToHex(newH, s, l);\n};\n\nexport const getContrastRatio = (color1: string, color2: string): number => {\n    const getLuminance = (hex: string): number => {\n        const r = Number.parseInt(hex.slice(1, 3), 16) / 255;\n        const g = Number.parseInt(hex.slice(3, 5), 16) / 255;\n        const b = Number.parseInt(hex.slice(5, 7), 16) / 255;\n\n        const gamma = (c: number) => c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n\n        return 0.2126 * gamma(r) + 0.7152 * gamma(g) + 0.0722 * gamma(b);\n    };\n\n    const lum1 = getLuminance(color1);\n    const lum2 = getLuminance(color2);\n    const brightest = Math.max(lum1, lum2);\n    const darkest = Math.min(lum1, lum2);\n\n    return (brightest + 0.05) / (darkest + 0.05);\n};\n\nexport const isValidContrast = (color1: string, color2: string, level: 'AA' | 'AAA' = 'AA'): boolean => {\n    const ratio = getContrastRatio(color1, color2);\n    return level === 'AA' ? ratio >= 4.5 : ratio >= 7;\n};\n\nexport const findAccessibleColor = (\n    baseColor: string,\n    backgroundColor: string,\n    level: 'AA' | 'AAA' = 'AA'\n): string => {\n    const color = baseColor;\n    const [h, s, l] = hexToHsl(color);\n\n    // Try adjusting lightness first\n    for (let adjustment = 0; adjustment <= 50; adjustment += 5) {\n        // Try lighter\n        const lighterL = Math.min(100, l + adjustment);\n        const lighterColor = hslToHex(h, s, lighterL);\n        if (isValidContrast(lighterColor, backgroundColor, level)) {\n            return lighterColor;\n        }\n\n        // Try darker\n        const darkerL = Math.max(0, l - adjustment);\n        const darkerColor = hslToHex(h, s, darkerL);\n        if (isValidContrast(darkerColor, backgroundColor, level)) {\n            return darkerColor;\n        }\n    }\n\n    // If lightness adjustment doesn't work, try pure black or white\n    const white = '#ffffff';\n    const black = '#000000';\n\n    if (isValidContrast(white, backgroundColor, level)) {\n        return white;\n    }\n\n    if (isValidContrast(black, backgroundColor, level)) {\n        return black;\n    }\n\n    // Fallback to the original color\n    return baseColor;\n};\n\n// Color palette generation\nexport const generateColorPalette = (baseColor: string): ColorPalette => {\n    const [h, s, l] = hexToHsl(baseColor);\n\n    return {\n        50: hslToHex(h, Math.max(10, s - 40), Math.min(95, l + 40)),\n        100: hslToHex(h, Math.max(20, s - 30), Math.min(90, l + 35)),\n        200: hslToHex(h, Math.max(30, s - 20), Math.min(85, l + 25)),\n        300: hslToHex(h, Math.max(40, s - 10), Math.min(75, l + 15)),\n        400: hslToHex(h, s, Math.min(65, l + 5)),\n        500: baseColor,\n        600: hslToHex(h, Math.min(100, s + 10), Math.max(35, l - 5)),\n        700: hslToHex(h, Math.min(100, s + 15), Math.max(25, l - 15)),\n        800: hslToHex(h, Math.min(100, s + 20), Math.max(15, l - 25)),\n        900: hslToHex(h, Math.min(100, s + 25), Math.max(10, l - 35)),\n        950: hslToHex(h, Math.min(100, s + 30), Math.max(5, l - 45)),\n        DEFAULT: baseColor,\n        foreground: findAccessibleColor(baseColor, '#ffffff'),\n    };\n};\n\nexport const generateSemanticColors = (\n    primary: string,\n    mode: ThemeMode = 'light'\n): Pick<ThemeColors, 'success' | 'warning' | 'danger' | 'info'> => {\n    const colors = {\n        success: mode === 'light' ? '#22c55e' : '#16a34a',\n        warning: mode === 'light' ? '#f59e0b' : '#d97706',\n        danger: mode === 'light' ? '#ef4444' : '#dc2626',\n        info: mode === 'light' ? '#3b82f6' : '#2563eb',\n    };\n\n    return colors;\n};\n\n// Theme mode utilities\nexport const getSystemTheme = (): 'light' | 'dark' => {\n    if (typeof window === 'undefined') return 'light';\n\n    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n};\n\nexport const watchSystemTheme = (callback: (theme: 'light' | 'dark') => void): (() => void) => {\n    if (typeof window === 'undefined') return () => {};\n\n    const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n    const handler = (e: MediaQueryListEvent) => {\n        callback(e.matches ? 'dark' : 'light');\n    };\n\n    mediaQuery.addEventListener('change', handler);\n\n    return () => {\n        mediaQuery.removeEventListener('change', handler);\n    };\n};\n\nexport const resolveThemeMode = (mode: ThemeMode): 'light' | 'dark' => {\n    if (mode === 'system') {\n        return getSystemTheme();\n    }\n    return mode;\n};\n\n// CSS variable utilities\nexport const generateCSSVariables = (theme: Theme): Record<string, string> => {\n    const variables: Record<string, string> = {};\n\n    // Colors\n    Object.entries(theme.colors).forEach(([key, value]) => {\n        variables[`--frank-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`] = value;\n    });\n\n    // Spacing\n    Object.entries(theme.spacing).forEach(([key, value]) => {\n        variables[`--frank-spacing-${key}`] = value;\n    });\n\n    // Border radius\n    Object.entries(theme.borderRadius).forEach(([key, value]) => {\n        variables[`--frank-radius-${key}`] = value;\n    });\n\n    // Shadows\n    Object.entries(theme.shadows).forEach(([key, value]) => {\n        variables[`--frank-shadow-${key}`] = value;\n    });\n\n    // Typography\n    Object.entries(theme.typography.fontSize).forEach(([key, [size, config]]) => {\n        variables[`--frank-text-${key}`] = size;\n        variables[`--frank-text-${key}-line-height`] = config.lineHeight;\n        if (config.letterSpacing) {\n            variables[`--frank-text-${key}-letter-spacing`] = config.letterSpacing;\n        }\n    });\n\n    // Font weights\n    Object.entries(theme.typography.fontWeight).forEach(([key, value]) => {\n        variables[`--frank-font-${key}`] = value;\n    });\n\n    // Custom variables\n    if (theme.cssVariables) {\n        Object.entries(theme.cssVariables).forEach(([key, value]) => {\n            variables[key.startsWith('--') ? key : `--${key}`] = value;\n        });\n    }\n\n    return variables;\n};\n\nexport const applyCSSVariables = (variables: Record<string, string>, element?: HTMLElement): void => {\n    const target = element || document.documentElement;\n\n    Object.entries(variables).forEach(([key, value]) => {\n        target.style.setProperty(key, value);\n    });\n};\n\nexport const removeCSSVariables = (keys: string[], element?: HTMLElement): void => {\n    const target = element || document.documentElement;\n\n    keys.forEach(key => {\n        target.style.removeProperty(key);\n    });\n};\n\n// Theme generation\nexport const generateTheme = (options: ThemeGeneratorOptions): Partial<Theme> => {\n    const { primaryColor, secondaryColor, mode, colorHarmony } = options;\n\n    const primaryPalette = generateColorPalette(primaryColor);\n    const secondaryPalette = secondaryColor\n        ? generateColorPalette(secondaryColor)\n        : generateColorPalette(adjustHue(primaryColor, 30));\n\n    // Generate neutral palette\n    const neutralBase = mode === 'light' ? '#6b7280' : '#9ca3af';\n    const neutralPalette = generateColorPalette(neutralBase);\n\n    // Generate semantic colors\n    const semanticColors = generateSemanticColors(primaryColor, mode);\n\n    const colors: ThemeColors = {\n        background: mode === 'light' ? '#ffffff' : '#0f172a',\n        foreground: mode === 'light' ? '#0f172a' : '#f8fafc',\n\n        content1: mode === 'light' ? '#ffffff' : '#18181b',\n        content2: mode === 'light' ? '#f4f4f5' : '#27272a',\n        content3: mode === 'light' ? '#e4e4e7' : '#3f3f46',\n        content4: mode === 'light' ? '#d4d4d8' : '#52525b',\n\n        primary: primaryPalette,\n        primaryForeground: findAccessibleColor('#ffffff', primaryPalette[500]),\n\n        secondary: secondaryPalette,\n        secondaryForeground: findAccessibleColor('#ffffff', secondaryPalette[500]),\n\n        accent: primaryPalette[600],\n        accentForeground: findAccessibleColor('#ffffff', primaryPalette[600]),\n\n        muted: neutralPalette[100],\n        mutedForeground: neutralPalette[600],\n\n        border: mode === 'light' ? neutralPalette[200] : neutralPalette[800],\n        divider: mode === 'light' ? neutralPalette[100] : neutralPalette[800],\n\n        input: mode === 'light' ? '#ffffff' : '#27272a',\n        inputForeground: mode === 'light' ? '#0f172a' : '#f8fafc',\n\n        focus: primaryPalette[500],\n        focusVisible: primaryPalette[500],\n\n        overlay: mode === 'light' ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.8)',\n\n        success: semanticColors.success,\n        successForeground: findAccessibleColor('#ffffff', semanticColors.success),\n        warning: semanticColors.warning,\n        warningForeground: findAccessibleColor('#ffffff', semanticColors.warning),\n        danger: semanticColors.danger,\n        dangerForeground: findAccessibleColor('#ffffff', semanticColors.danger),\n        info: semanticColors.info,\n        infoForeground: findAccessibleColor('#ffffff', semanticColors.info),\n\n        selection: primaryPalette[100],\n        selectionForeground: primaryPalette[900],\n\n        disabled: neutralPalette[300],\n        disabledForeground: neutralPalette[500],\n        card: '',\n        cardForeground: '',\n        popover: '',\n        popoverForeground: '',\n        ring: '',\n        destructive: '',\n        destructiveForeground: ''\n    };\n\n    const palette: ColorPalettes = {\n        primary: primaryPalette,\n        secondary: secondaryPalette,\n        neutral: neutralPalette,\n        success: generateColorPalette(semanticColors.success),\n        warning: generateColorPalette(semanticColors.warning),\n        danger: generateColorPalette(semanticColors.danger),\n        info: generateColorPalette(semanticColors.info),\n    };\n\n    return {\n        name: `Generated ${mode} theme`,\n        mode,\n        colors,\n        palette,\n    };\n};\n\n// Theme validation\nexport const validateTheme = (theme: Partial<Theme>): ThemeValidation => {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n    const contrastRatios: Record<string, number> = {};\n\n    if (!theme.colors) {\n        errors.push('Theme must have colors defined');\n        return {\n            valid: false,\n            errors,\n            warnings,\n            accessibility: {\n                contrastRatios,\n                wcagLevel: 'fail',\n            },\n        };\n    }\n\n    // Check required colors\n    const requiredColors = ['background', 'foreground', 'primary', 'primaryForeground'];\n    for (const color of requiredColors) {\n        if (!(color in theme.colors)) {\n            errors.push(`Missing required color: ${color}`);\n        }\n    }\n\n    // Check contrast ratios\n    const checkContrast = (colorKey: string, backgroundKey: string) => {\n        const color = theme.colors![colorKey as keyof ThemeColors];\n        const background = theme.colors![backgroundKey as keyof ThemeColors];\n\n        if (color && background) {\n            const ratio = getContrastRatio(typeof color === 'string' ? color : color.DEFAULT, typeof background === 'string' ? background : background.DEFAULT);\n            contrastRatios[`${colorKey}/${backgroundKey}`] = ratio;\n\n            if (ratio < 4.5) {\n                warnings.push(`Low contrast ratio for ${colorKey} on ${backgroundKey}: ${ratio.toFixed(2)}`);\n            }\n        }\n    };\n\n    checkContrast('foreground', 'background');\n    checkContrast('primaryForeground', 'primary');\n    checkContrast('secondaryForeground', 'secondary');\n    checkContrast('successForeground', 'success');\n    checkContrast('warningForeground', 'warning');\n    checkContrast('dangerForeground', 'danger');\n    checkContrast('infoForeground', 'info');\n\n    // Determine WCAG level\n    const minRatio = Math.min(...Object.values(contrastRatios));\n    let wcagLevel: 'A' | 'AA' | 'AAA' | 'fail';\n\n    if (minRatio >= 7) {\n        wcagLevel = 'AAA';\n    } else if (minRatio >= 4.5) {\n        wcagLevel = 'AA';\n    } else if (minRatio >= 3) {\n        wcagLevel = 'A';\n    } else {\n        wcagLevel = 'fail';\n    }\n\n    return {\n        valid: errors.length === 0,\n        errors,\n        warnings,\n        accessibility: {\n            contrastRatios,\n            wcagLevel,\n        },\n    };\n};\n\n// Theme merging utilities\nexport const mergeThemes = (baseTheme: Theme, customization: ThemeCustomization): Theme => {\n    const merged: Theme = { ...baseTheme };\n\n    if (customization.colors) {\n        merged.colors = { ...merged.colors, ...customization.colors };\n    }\n\n    if (customization.typography) {\n        merged.typography = {\n            ...merged.typography,\n            ...customization.typography,\n        };\n    }\n\n    if (customization.spacing) {\n        merged.spacing = { ...merged.spacing, ...customization.spacing };\n    }\n\n    if (customization.components) {\n        merged.components = {\n            ...merged.components,\n            ...customization.components,\n        };\n    }\n\n    if (customization.cssVariables) {\n        merged.cssVariables = {\n            ...merged.cssVariables,\n            ...customization.cssVariables,\n        };\n    }\n\n    if (customization.custom) {\n        merged.custom = {\n            ...merged.custom,\n            ...customization.custom,\n        };\n    }\n\n    return merged;\n};\n\n// Component variant utilities\nexport const getComponentVariant = (\n    theme: Theme,\n    component: string,\n    variant: string,\n    color = 'default'\n): ComponentVariant | undefined => {\n    const componentVariants = theme.components[component as keyof typeof theme.components];\n    if (!componentVariants) return undefined;\n\n    const variantConfig = componentVariants[variant as keyof typeof componentVariants];\n    if (!variantConfig || typeof variantConfig !== 'object') return undefined;\n\n    return variantConfig as ComponentVariant;\n};\n\nexport const getComponentStyles = (\n    theme: Theme,\n    component: string,\n    variant: string,\n    color = 'default',\n    size = 'md'\n): string => {\n    const variantConfig = getComponentVariant(theme, component, variant, color);\n    if (!variantConfig) return '';\n\n    let styles = variantConfig.base || '';\n\n    // Add color styles\n    const colorStyles = variantConfig.colors?.[color as keyof typeof variantConfig.colors];\n    if (colorStyles) {\n        styles += ` ${colorStyles.background || ''} ${colorStyles.foreground || ''} ${colorStyles.border || ''}`;\n    }\n\n    // Add size styles\n    const sizeStyles = variantConfig.sizes?.[size as keyof typeof variantConfig.sizes];\n    if (sizeStyles) {\n        styles += ` ${sizeStyles}`;\n    }\n\n    return styles.trim();\n};\n\n// Storage utilities for theme persistence\nexport const saveThemeToStorage = (theme: string, mode: ThemeMode): void => {\n    if (typeof window === 'undefined') return;\n\n    try {\n        localStorage.setItem('frank-auth-theme', theme);\n        localStorage.setItem('frank-auth-theme-mode', mode);\n    } catch {\n        // Ignore storage errors\n    }\n};\n\nexport const loadThemeFromStorage = (): { theme?: string; mode?: ThemeMode } => {\n    if (typeof window === 'undefined') return {};\n\n    try {\n        const theme = localStorage.getItem('frank-auth-theme');\n        const mode = localStorage.getItem('frank-auth-theme-mode') as ThemeMode;\n\n        return {\n            theme: theme || undefined,\n            mode: mode || undefined,\n        };\n    } catch {\n        return {};\n    }\n};\n\n// Export utilities object\nexport const ThemeUtils = {\n    // Color utilities\n    hexToHsl,\n    hslToHex,\n    adjustBrightness,\n    adjustSaturation,\n    adjustHue,\n    getContrastRatio,\n    isValidContrast,\n    findAccessibleColor,\n\n    // Palette generation\n    generateColorPalette,\n    generateSemanticColors,\n\n    // Theme mode\n    getSystemTheme,\n    watchSystemTheme,\n    resolveThemeMode,\n\n    // CSS variables\n    generateCSSVariables,\n    applyCSSVariables,\n    removeCSSVariables,\n\n    // Theme generation\n    generateTheme,\n    validateTheme,\n    mergeThemes,\n\n    // Component utilities\n    getComponentVariant,\n    getComponentStyles,\n\n    // Storage\n    saveThemeToStorage,\n    loadThemeFromStorage,\n};"],"names":["hexToHsl","hex","r","g","b","max","min","h","s","l","d","hslToHex","hue2rgb","p","q","t","toHex","c","adjustBrightness","amount","newL","adjustSaturation","newS","adjustHue","newH","getContrastRatio","color1","color2","getLuminance","gamma","lum1","lum2","brightest","darkest","isValidContrast","level","ratio","findAccessibleColor","baseColor","backgroundColor","color","adjustment","lighterL","lighterColor","darkerL","darkerColor","white","black","generateColorPalette","generateSemanticColors","primary","mode","getSystemTheme","watchSystemTheme","callback","mediaQuery","handler","e","resolveThemeMode","generateCSSVariables","theme","variables","key","value","size","config","applyCSSVariables","element","target","removeCSSVariables","keys","generateTheme","options","primaryColor","secondaryColor","colorHarmony","primaryPalette","secondaryPalette","neutralPalette","semanticColors","colors","palette","validateTheme","errors","warnings","contrastRatios","requiredColors","checkContrast","colorKey","backgroundKey","background","minRatio","wcagLevel","mergeThemes","baseTheme","customization","merged","getComponentVariant","component","variant","componentVariants","variantConfig","getComponentStyles","styles","colorStyles","sizeStyles","saveThemeToStorage","loadThemeFromStorage","ThemeUtils"],"mappings":"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"}