@razzusharma/accent-theme 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AccentThemeProvider.tsx","../src/colors.ts","../src/AccentColorPicker.tsx","../src/utils.ts","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { \n createContext, \n useContext, \n useEffect, \n useState, \n useCallback,\n useMemo\n} from \"react\";\nimport type { \n AccentColor, \n AccentThemeContextType, \n AccentThemeProviderProps \n} from \"./types\";\nimport { defaultAccentColors, mergeColors } from \"./colors\";\n\nconst STYLE_ID = 'accent-theme-base-styles';\n\nconst defaultContext: AccentThemeContextType = {\n accentColor: \"teal\",\n setAccentColor: () => {},\n accentConfig: defaultAccentColors.teal,\n colors: defaultAccentColors,\n mounted: false,\n defaultColor: \"teal\",\n resetToDefault: () => {},\n};\n\nconst AccentThemeContext = createContext<AccentThemeContextType>(defaultContext);\n\n// Base CSS that gets injected automatically\nconst BASE_CSS = `\n :root {\n --primary: 174 72% 35%;\n --primary-foreground: 210 40% 98%;\n --accent: 174 72% 45%;\n --ring: 174 72% 45%;\n }\n \n .dark {\n --primary: 174 72% 45%;\n --primary-foreground: 210 40% 98%;\n --accent: 174 72% 55%;\n --ring: 174 72% 55%;\n }\n`;\n\n// Detect if dark mode is active\nfunction detectDarkMode(): boolean {\n if (typeof window === 'undefined') return false;\n \n const root = document.documentElement;\n \n // Check various dark mode indicators\n const isDark = \n root.classList.contains('dark') ||\n root.getAttribute('data-theme') === 'dark' ||\n root.getAttribute('data-mode') === 'dark' ||\n document.body.classList.contains('dark') ||\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n \n return isDark;\n}\n\nexport function AccentThemeProvider({ \n children, \n defaultColor = \"teal\",\n customColors,\n storageKey = \"accent-color\",\n cssVariablePrefix = \"\",\n injectCSS = true,\n enableDarkMode = true,\n}: AccentThemeProviderProps) {\n const colors = useMemo(() => mergeColors(defaultAccentColors, customColors), [customColors]);\n \n const [accentColor, setAccentColorState] = useState<AccentColor>(defaultColor);\n const [mounted, setMounted] = useState(false);\n const [isDark, setIsDark] = useState(false);\n\n // Get CSS variable names\n const getVarName = useCallback((name: string) => {\n return cssVariablePrefix ? `${cssVariablePrefix}-${name}` : name;\n }, [cssVariablePrefix]);\n\n // Inject base CSS on mount\n useEffect(() => {\n if (!injectCSS || typeof document === 'undefined') return;\n \n // Check if styles already exist\n if (!document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = BASE_CSS;\n document.head.appendChild(style);\n }\n }, [injectCSS]);\n\n // Initialize from localStorage and detect dark mode\n useEffect(() => {\n setMounted(true);\n \n // Check local storage\n const stored = localStorage.getItem(storageKey) as AccentColor;\n if (stored && colors[stored]) {\n setAccentColorState(stored);\n }\n \n // Detect dark mode\n if (!enableDarkMode) return;\n \n setIsDark(detectDarkMode());\n \n // Watch for theme changes\n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, [storageKey, colors, enableDarkMode, defaultColor]);\n\n // Update CSS variables when color changes\n useEffect(() => {\n if (!mounted || typeof document === 'undefined') return;\n \n const root = document.documentElement;\n const config = colors[accentColor];\n \n if (!config) return;\n \n // Adjust colors for dark mode if enabled\n const primary = isDark && enableDarkMode ? config.light : config.primary;\n const accent = isDark && enableDarkMode ? config.light : config.light;\n \n // Update CSS variables\n root.style.setProperty(`--${getVarName('primary')}`, primary);\n root.style.setProperty(`--${getVarName('primary-foreground')}`, config.primaryForeground);\n root.style.setProperty(`--${getVarName('ring')}`, accent);\n root.style.setProperty(`--${getVarName('accent')}`, accent);\n \n // Store preference\n localStorage.setItem(storageKey, accentColor);\n \n // Add data attribute for Tailwind selectors\n root.setAttribute(`data-${getVarName('accent')}`, accentColor);\n \n // Dispatch custom event for external listeners\n window.dispatchEvent(new CustomEvent('accentthemechange', { \n detail: { color: accentColor, config, isDark } \n }));\n }, [accentColor, mounted, colors, cssVariablePrefix, getVarName, isDark, enableDarkMode, storageKey]);\n\n const setAccentColor = useCallback((color: AccentColor) => {\n if (colors[color]) {\n setAccentColorState(color);\n } else {\n console.warn(`[AccentTheme] Color \"${color}\" not found in available colors`);\n }\n }, [colors]);\n\n const resetToDefault = useCallback(() => {\n setAccentColorState(defaultColor);\n localStorage.removeItem(storageKey);\n }, [defaultColor, storageKey]);\n\n const value: AccentThemeContextType = {\n accentColor,\n setAccentColor,\n accentConfig: colors[accentColor] || colors[defaultColor],\n colors,\n mounted,\n defaultColor,\n resetToDefault,\n };\n\n return React.createElement(\n AccentThemeContext.Provider,\n { value },\n children\n );\n}\n\nexport function useAccentTheme() {\n return useContext(AccentThemeContext);\n}\n\n// Utility hook for getting color values\nexport function useAccentColor() {\n const context = useAccentTheme();\n const { accentConfig, mounted } = context;\n \n // Get dark mode from detectDarkMode for the hook\n const [isDark, setIsDark] = useState(false);\n \n useEffect(() => {\n setIsDark(detectDarkMode());\n \n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, []);\n \n return {\n primary: `hsl(${accentConfig.primary})`,\n primaryForeground: `hsl(${accentConfig.primaryForeground})`,\n light: `hsl(${accentConfig.light})`,\n dark: `hsl(${accentConfig.dark})`,\n gradient: accentConfig.gradient,\n mounted,\n isDark,\n };\n}\n\n// Hook to detect dark mode\nexport function useAccentDarkMode() {\n const [isDark, setIsDark] = useState(false);\n \n useEffect(() => {\n setIsDark(detectDarkMode());\n \n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, []);\n \n return isDark;\n}\n","import { AccentColor, AccentColorConfig } from './types';\n\nexport const defaultAccentColors: Record<AccentColor, AccentColorConfig> = {\n teal: {\n name: \"Teal\",\n primary: \"174 72% 35%\",\n primaryForeground: \"210 40% 98%\",\n light: \"174 72% 45%\",\n dark: \"174 72% 25%\",\n gradient: \"from-teal-500 to-emerald-500\",\n },\n blue: {\n name: \"Ocean Blue\",\n primary: \"217 91% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"217 91% 55%\",\n dark: \"217 91% 35%\",\n gradient: \"from-blue-500 to-cyan-500\",\n },\n purple: {\n name: \"Royal Purple\",\n primary: \"270 60% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"270 60% 55%\",\n dark: \"270 60% 35%\",\n gradient: \"from-purple-500 to-pink-500\",\n },\n rose: {\n name: \"Rose Pink\",\n primary: \"350 80% 50%\",\n primaryForeground: \"210 40% 98%\",\n light: \"350 80% 60%\",\n dark: \"350 80% 40%\",\n gradient: \"from-rose-500 to-pink-500\",\n },\n amber: {\n name: \"Sunset Amber\",\n primary: \"35 95% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"35 95% 55%\",\n dark: \"35 95% 35%\",\n gradient: \"from-amber-500 to-orange-500\",\n },\n emerald: {\n name: \"Forest Emerald\",\n primary: \"150 65% 35%\",\n primaryForeground: \"210 40% 98%\",\n light: \"150 65% 45%\",\n dark: \"150 65% 25%\",\n gradient: \"from-emerald-500 to-green-500\",\n },\n indigo: {\n name: \"Deep Indigo\",\n primary: \"240 60% 50%\",\n primaryForeground: \"210 40% 98%\",\n light: \"240 60% 60%\",\n dark: \"240 60% 40%\",\n gradient: \"from-indigo-500 to-purple-500\",\n },\n cyan: {\n name: \"Electric Cyan\",\n primary: \"190 90% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"190 90% 55%\",\n dark: \"190 90% 35%\",\n gradient: \"from-cyan-500 to-blue-500\",\n },\n};\n\nexport function mergeColors(\n defaultColors: Record<string, AccentColorConfig>,\n customColors?: Record<string, AccentColorConfig>\n): Record<string, AccentColorConfig> {\n if (!customColors) return defaultColors;\n return { ...defaultColors, ...customColors };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useRef, useEffect } from \"react\";\nimport { useAccentTheme, useAccentColor } from \"./AccentThemeProvider\";\nimport { defaultAccentColors } from \"./colors\";\nimport type { \n AccentColor, \n AccentColorPickerProps,\n AccentColorSwatchesProps,\n AccentColorMenuProps,\n AccentColorButtonProps,\n AccentThemeResetProps,\n CurrentAccentIndicatorProps,\n AccentColorGridProps,\n AccentColorSwatchProps\n} from \"./types\";\n\n// Size mappings\nconst sizeClasses = {\n sm: \"w-6 h-6\",\n md: \"w-8 h-8\",\n lg: \"w-10 h-10\",\n};\n\nconst gapClasses = {\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-3\",\n};\n\n// Checkmark icon component\nconst CheckmarkIcon = ({ className = \"\" }: { className?: string }) => (\n <svg className={className} viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\n// Chevron icon\nconst ChevronIcon = ({ className = \"\" }: { className?: string }) => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\n// Palette icon\nconst PaletteIcon = ({ className = \"\" }: { className?: string }) => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.8}\n d=\"M12 3a9 9 0 100 18h1.4a2.6 2.6 0 000-5.2H11a1.5 1.5 0 010-3h4.8a3.2 3.2 0 003.2-3.2C19 6 15.9 3 12 3z\"\n />\n <circle cx=\"7.5\" cy=\"10.2\" r=\"1\" />\n <circle cx=\"10.5\" cy=\"7.5\" r=\"1\" />\n <circle cx=\"14.2\" cy=\"7.3\" r=\"1\" />\n </svg>\n);\n\n// Reset icon\nconst ResetIcon = ({ className = \"\" }: { className?: string }) => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n);\n\n// Individual swatch component\nexport function AccentColorSwatch({ \n color, \n isSelected, \n onClick,\n size = \"md\",\n className = \"\",\n showCheckmark = true,\n}: AccentColorSwatchProps) {\n const { colors } = useAccentTheme();\n const config = colors[color] || defaultAccentColors[color];\n if (!config) return null;\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick,\n className: `\n relative rounded-full transition-all duration-200 flex-shrink-0\n hover:scale-110 focus:outline-none focus:ring-2 focus:ring-offset-2\n focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${sizeClasses[size]}\n ${isSelected ? \"ring-2 ring-offset-2 scale-110\" : \"\"}\n ${className}\n `,\n style: {\n background: `hsl(${config.primary})`,\n ['--tw-ring-color' as string]: `hsl(${config.light})`,\n },\n title: config.name,\n \"aria-label\": `Select ${config.name} theme`,\n \"aria-pressed\": isSelected,\n }, isSelected && showCheckmark && React.createElement(CheckmarkIcon, {\n className: \"absolute inset-0 w-full h-full p-1.5 text-white drop-shadow-md\"\n }));\n}\n\n// Main color picker with multiple variants\nexport function AccentColorPicker({\n size = \"md\",\n variant = \"dropdown\",\n columns = 4,\n className = \"\",\n align = \"end\",\n onChange,\n label = \"Theme\",\n showColorName = true,\n}: AccentColorPickerProps) {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (variant !== 'dropdown') return;\n \n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n \n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, variant]);\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n if (variant === \"dropdown\") {\n setIsOpen(false);\n }\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeClasses[size]} ${className}`\n });\n }\n\n // Inline variant\n if (variant === \"inline\") {\n return React.createElement(\"div\", {\n className: `grid ${gapClasses.md} ${className}`,\n style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }\n }, Object.entries(colors).map(([color]) => {\n const isSelected = accentColor === color;\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n });\n }));\n }\n\n // Menu variant (uses fixed positioning for better placement)\n if (variant === \"menu\") {\n return React.createElement(AccentColorMenu, {\n size,\n className,\n onChange,\n label,\n align,\n });\n }\n\n // Dropdown variant (default)\n return React.createElement(\"div\", { \n ref: dropdownRef,\n className: `relative inline-block ${className}` \n },\n React.createElement(\"button\", {\n type: \"button\",\n onClick: () => setIsOpen(!isOpen),\n className: `\n flex items-center gap-2 px-3.5 py-2 rounded-full\n text-slate-100 bg-slate-900/70 backdrop-blur-md\n border border-white/10 hover:bg-slate-900/85\n transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\n focus:ring-offset-slate-950 shadow-lg shadow-slate-950/30\n `,\n style: { ['--tw-ring-color' as string]: primary },\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"listbox\",\n }, [\n React.createElement(\"div\", {\n key: \"swatch\",\n className: \"w-5 h-5 rounded-full shadow-sm ring-1 ring-white/20\",\n style: { background: primary }\n }),\n showColorName && React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-slate-100\"\n }, colors[accentColor]?.name || label),\n React.createElement(ChevronIcon, {\n key: \"chevron\",\n className: `w-4 h-4 text-rose-300 transition-transform duration-200 ${isOpen ? \"rotate-180\" : \"\"}`\n })\n ]),\n isOpen && React.createElement(React.Fragment, {}, [\n React.createElement(\"div\", {\n key: \"backdrop\",\n className: \"fixed inset-0 z-40\",\n onClick: () => setIsOpen(false)\n }),\n React.createElement(\"div\", {\n key: \"dropdown\",\n className: `\n absolute right-0 mt-3 p-4\n rounded-2xl z-50 min-w-[290px]\n bg-gradient-to-b from-slate-800/95 to-slate-900/95\n border border-slate-600/40\n shadow-2xl shadow-slate-950/50 backdrop-blur-xl\n `,\n role: \"listbox\"\n }, [\n React.createElement(\"div\", {\n key: \"header\",\n className: \"flex items-start gap-3 mb-3\"\n }, [\n React.createElement(\"div\", {\n key: \"icon-wrap\",\n className: \"w-7 h-7 rounded-full grid place-items-center border border-rose-400/40 bg-rose-500/15\"\n }, React.createElement(PaletteIcon, {\n className: \"w-4 h-4 text-rose-300\"\n })),\n React.createElement(\"div\", { key: \"titles\" }, [\n React.createElement(\"p\", {\n key: \"title\",\n className: \"text-[1.15rem] font-semibold text-slate-100 leading-5\"\n }, \"Theme Color\"),\n React.createElement(\"p\", {\n key: \"subtitle\",\n className: \"text-sm text-slate-300 mt-1\"\n }, \"Choose your preferred accent color\")\n ])\n ]),\n React.createElement(\"div\", {\n key: \"grid\",\n className: \"grid grid-cols-4 gap-3 border-t border-white/10 pt-4\"\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n relative w-12 h-12 rounded-xl transition-all duration-200\n hover:-translate-y-0.5 hover:brightness-110\n focus:outline-none focus:ring-2 ring-offset-0\n ${isSelected ? \"ring-2 ring-white/70 scale-[1.03]\" : \"ring-1 ring-white/10\"}\n `,\n style: {\n background: `hsl(${config.primary})`,\n },\n title: config.name,\n role: \"option\",\n \"aria-selected\": isSelected\n }, isSelected && React.createElement(CheckmarkIcon, {\n className: \"absolute inset-0 w-full h-full p-3 text-white drop-shadow-md\"\n }));\n })),\n React.createElement(\"div\", {\n key: \"footer\",\n className: \"mt-4 pt-4 border-t border-white/10 flex items-center justify-between gap-3\"\n }, [\n React.createElement(\"p\", {\n key: \"current-text\",\n className: \"text-[1.05rem] text-slate-200\"\n }, `Current: ${colors[accentColor]?.name || accentColor}`),\n React.createElement(\"span\", {\n key: \"current-pill\",\n className: \"w-14 h-7 rounded-full ring-1 ring-white/20\",\n style: { background: primary },\n \"aria-hidden\": true\n })\n ])\n ])\n ])\n );\n}\n\n// Horizontal row of color swatches\nexport function AccentColorSwatches({\n className = \"\",\n size = \"md\",\n onChange,\n showCheckmark = true,\n gap = \"md\",\n}: AccentColorSwatchesProps) {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `flex ${gapClasses[gap]} ${className}`\n }, Array(8).fill(null).map((_, i) => React.createElement(\"div\", {\n key: i,\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-full ${sizeClasses[size]}`\n })));\n }\n\n return React.createElement(\"div\", {\n className: `flex flex-wrap ${gapClasses[gap]} ${className}`\n }, Object.entries(colors).map(([color]) => {\n const isSelected = accentColor === color;\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n showCheckmark,\n });\n }));\n}\n\n// Menu dropdown component\nexport function AccentColorMenu({\n className = \"\",\n size: _size = \"md\",\n onChange,\n align = \"end\",\n label = \"Theme\",\n}: AccentColorMenuProps) {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n \n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n setIsOpen(false);\n };\n\n const alignClasses = {\n start: \"left-0\",\n center: \"left-1/2 -translate-x-1/2\",\n end: \"right-0\",\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg w-24 h-9 ${className}`\n });\n }\n\n return React.createElement(\"div\", { \n ref: menuRef,\n className: `relative inline-block ${className}` \n },\n React.createElement(\"button\", {\n type: \"button\",\n onClick: () => setIsOpen(!isOpen),\n className: `\n flex items-center gap-2 px-3 py-2 rounded-lg \n bg-white dark:bg-gray-800 \n border border-gray-200 dark:border-gray-700 \n hover:bg-gray-50 dark:hover:bg-gray-700 \n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n `,\n style: { ['--tw-ring-color' as string]: primary },\n \"aria-expanded\": isOpen,\n }, [\n React.createElement(\"div\", {\n key: \"swatch\",\n className: `${sizeClasses.sm} rounded-full shadow-sm`,\n style: { background: primary }\n }),\n React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, label),\n React.createElement(ChevronIcon, {\n key: \"chevron\",\n className: `w-4 h-4 text-gray-500 dark:text-gray-400 transition-transform ${isOpen ? \"rotate-180\" : \"\"}`\n })\n ]),\n isOpen && React.createElement(\"div\", {\n className: `\n absolute top-full mt-2 p-2 \n bg-white dark:bg-gray-800 \n rounded-lg shadow-xl \n border border-gray-200 dark:border-gray-700 \n z-50 min-w-[160px]\n ${alignClasses[align]}\n `\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n w-full flex items-center gap-3 px-3 py-2 rounded-md\n transition-colors\n ${isSelected ? \"bg-gray-100 dark:bg-gray-700\" : \"hover:bg-gray-50 dark:hover:bg-gray-700/50\"}\n `,\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `w-4 h-4 rounded-full flex-shrink-0`,\n style: { background: `hsl(${config.primary})` }\n }),\n React.createElement(\"span\", {\n key: \"name\",\n className: `text-sm ${isSelected ? \"font-medium text-gray-900 dark:text-gray-100\" : \"text-gray-700 dark:text-gray-300\"}`\n }, config.name),\n isSelected && React.createElement(CheckmarkIcon, {\n key: \"check\",\n className: \"w-4 h-4 ml-auto text-gray-500 dark:text-gray-400\"\n })\n ]);\n }))\n );\n}\n\n// Button showing current accent color\nexport function AccentColorButton({\n className = \"\",\n size = \"md\",\n onClick,\n showLabel = false,\n buttonVariant = \"default\",\n}: AccentColorButtonProps) {\n const { accentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const colorConfig = colors[accentColor] || defaultAccentColors[accentColor];\n\n const variantClasses = {\n default: \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700\",\n ghost: \"hover:bg-gray-100 dark:hover:bg-gray-800\",\n outline: \"border-2 border-current hover:bg-gray-50 dark:hover:bg-gray-800\",\n };\n\n const sizeStyles = {\n sm: { button: \"p-1.5\", dot: \"w-4 h-4\" },\n md: { button: \"p-2\", dot: \"w-5 h-5\" },\n lg: { button: \"p-2.5\", dot: \"w-6 h-6\" },\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeStyles[size].button}`\n });\n }\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick,\n className: `\n inline-flex items-center gap-2 rounded-lg \n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${variantClasses[buttonVariant]}\n ${sizeStyles[size].button}\n ${className}\n `,\n style: { ['--tw-ring-color' as string]: primary },\n title: colorConfig?.name || accentColor,\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `${sizeStyles[size].dot} rounded-full shadow-sm`,\n style: { background: primary }\n }),\n showLabel && React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, colorConfig?.name || accentColor)\n ]);\n}\n\n// Reset to default button\nexport function AccentThemeReset({\n className = \"\",\n size = \"md\",\n text = \"Reset\",\n onReset,\n variant = \"button\",\n}: AccentThemeResetProps) {\n const { defaultColor, resetToDefault, mounted, accentColor } = useAccentTheme();\n const { primary } = useAccentColor();\n \n const isDefault = accentColor === defaultColor;\n\n const handleReset = () => {\n resetToDefault();\n onReset?.();\n };\n\n const sizeStyles = {\n sm: { button: \"text-xs px-2 py-1\", icon: \"w-3 h-3\" },\n md: { button: \"text-sm px-3 py-1.5\", icon: \"w-3.5 h-3.5\" },\n lg: { button: \"text-base px-4 py-2\", icon: \"w-4 h-4\" },\n };\n\n const variantClasses = {\n button: `\n inline-flex items-center gap-1.5 rounded-md\n bg-gray-100 dark:bg-gray-800 \n text-gray-700 dark:text-gray-300\n hover:bg-gray-200 dark:hover:bg-gray-700\n disabled:opacity-50 disabled:cursor-not-allowed\n text-sm px-3 py-1.5\n `,\n link: `\n inline-flex items-center gap-1.5\n text-gray-500 dark:text-gray-400\n hover:text-gray-700 dark:hover:text-gray-300\n underline underline-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed disabled:no-underline\n `,\n subtle: `\n inline-flex items-center gap-1.5\n text-gray-400 dark:text-gray-500\n hover:text-gray-600 dark:hover:text-gray-400\n disabled:opacity-50 disabled:cursor-not-allowed\n `,\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-md w-20 h-8`\n });\n }\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick: handleReset,\n disabled: isDefault,\n className: `\n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${variantClasses[variant]}\n ${className}\n `,\n style: variant === 'button' ? { ['--tw-ring-color' as string]: primary } : undefined,\n title: isDefault ? \"Already using default theme\" : `Reset to default theme`,\n }, [\n React.createElement(ResetIcon, {\n key: \"icon\",\n className: sizeStyles[size].icon\n }),\n React.createElement(\"span\", { key: \"text\" }, text)\n ]);\n}\n\n// Current color indicator (non-interactive)\nexport function CurrentAccentIndicator({\n className = \"\",\n size = \"md\",\n showName = false,\n pulseOnChange = false,\n}: CurrentAccentIndicatorProps) {\n const { accentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const config = colors[accentColor] || defaultAccentColors[accentColor];\n const [isPulsing, setIsPulsing] = useState(false);\n const prevColorRef = useRef(accentColor);\n\n useEffect(() => {\n if (pulseOnChange && prevColorRef.current !== accentColor) {\n setIsPulsing(true);\n const timer = setTimeout(() => setIsPulsing(false), 500);\n prevColorRef.current = accentColor;\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [accentColor, pulseOnChange]);\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `flex items-center gap-2 ${className}`\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-full ${sizeClasses[size]}`\n }),\n showName && React.createElement(\"div\", {\n key: \"name\",\n className: \"animate-pulse bg-gray-200 dark:bg-gray-700 rounded h-4 w-16\"\n })\n ]);\n }\n\n return React.createElement(\"div\", {\n className: `inline-flex items-center gap-2 ${className}`\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `\n ${sizeClasses[size]} rounded-full shadow-sm flex-shrink-0\n ${isPulsing ? \"animate-ping\" : \"\"}\n `,\n style: { background: primary }\n }),\n showName && React.createElement(\"span\", {\n key: \"name\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, config?.name || accentColor)\n ]);\n}\n\n// Grid layout for color selection\nexport function AccentColorGrid({\n className = \"\",\n size = \"md\",\n columns = 4,\n onChange,\n showLabels = false,\n gap = \"md\",\n}: AccentColorGridProps) {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n };\n\n const gridCols = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n 8: \"grid-cols-8\",\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `grid ${gridCols[columns]} ${gapClasses[gap]} ${className}`\n }, Array(8).fill(null).map((_, i) => React.createElement(\"div\", {\n key: i,\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeClasses[size]}`\n })));\n }\n\n return React.createElement(\"div\", {\n className: `grid ${gridCols[columns]} ${gapClasses[gap]} ${className}`\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n \n if (showLabels) {\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n flex flex-col items-center gap-1.5 p-2 rounded-lg\n transition-colors\n ${isSelected ? \"bg-gray-100 dark:bg-gray-700\" : \"hover:bg-gray-50 dark:hover:bg-gray-800\"}\n `,\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `${sizeClasses[size]} rounded-full shadow-sm`,\n style: { background: `hsl(${config.primary})` }\n }),\n React.createElement(\"span\", {\n key: \"name\",\n className: `text-xs ${isSelected ? \"font-medium text-gray-900 dark:text-gray-100\" : \"text-gray-600 dark:text-gray-400\"}`\n }, config.name)\n ]);\n }\n\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n });\n }));\n}\n","import { AccentColorConfig } from './types';\n\n/**\n * Generate CSS custom properties for an accent color\n */\nexport function generateCSSVariables(\n config: AccentColorConfig,\n prefix: string = \"\"\n): Record<string, string> {\n const p = prefix ? `${prefix}-` : \"\";\n return {\n [`--${p}primary`]: config.primary,\n [`--${p}primary-foreground`]: config.primaryForeground,\n [`--${p}accent`]: config.light,\n [`--${p}ring`]: config.light,\n };\n}\n\n/**\n * Apply CSS variables to an element\n */\nexport function applyCSSVariables(\n element: HTMLElement,\n variables: Record<string, string>\n): void {\n Object.entries(variables).forEach(([key, value]) => {\n element.style.setProperty(key, value);\n });\n}\n\n/**\n * Create a gradient string from accent color config\n */\nexport function createGradient(\n config: AccentColorConfig,\n direction: string = \"to right\"\n): string {\n return `linear-gradient(${direction}, hsl(${config.light}), hsl(${config.primary}))`;\n}\n\n/**\n * Create a shadow with the accent color\n */\nexport function createShadow(\n config: AccentColorConfig,\n intensity: number = 0.3,\n blur: number = 20\n): string {\n return `0 4px ${blur}px hsl(${config.primary} / ${intensity})`;\n}\n\n/**\n * Lighten or darken an HSL color\n */\nexport function adjustHSL(\n hsl: string,\n adjustments: {\n hue?: number;\n saturation?: number;\n lightness?: number;\n }\n): string {\n const [h, s, l] = hsl.split(\" \").map((v) => parseFloat(v));\n const newH = h + (adjustments.hue || 0);\n const newS = Math.max(0, Math.min(100, s + (adjustments.saturation || 0)));\n const newL = Math.max(0, Math.min(100, l + (adjustments.lightness || 0)));\n return `${newH} ${newS}% ${newL}%`;\n}\n\n/**\n * Get contrasting text color (black or white) for a background\n */\nexport function getContrastColor(\n hsl: string,\n threshold: number = 50\n): \"black\" | \"white\" {\n const [, , l] = hsl.split(\" \").map((v) => parseFloat(v));\n return l > threshold ? \"black\" : \"white\";\n}\n\n/**\n * Check if code is running on client side\n */\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\n/**\n * Local storage wrapper with error handling\n */\nexport const storage = {\n get: (key: string, defaultValue?: string): string | undefined => {\n if (!isClient()) return defaultValue;\n try {\n return localStorage.getItem(key) || defaultValue;\n } catch {\n return defaultValue;\n }\n },\n set: (key: string, value: string): void => {\n if (!isClient()) return;\n try {\n localStorage.setItem(key, value);\n } catch {\n // Ignore storage errors\n }\n },\n remove: (key: string): void => {\n if (!isClient()) return;\n try {\n localStorage.removeItem(key);\n } catch {\n // Ignore storage errors\n }\n },\n};\n","// Main exports - Provider and Hooks\nexport { \n AccentThemeProvider, \n useAccentTheme, \n useAccentColor,\n useAccentDarkMode \n} from './AccentThemeProvider';\n\n// UI Components\nexport { \n AccentColorPicker, \n AccentColorSwatch,\n AccentColorSwatches,\n AccentColorMenu,\n AccentColorButton,\n AccentThemeReset,\n CurrentAccentIndicator,\n AccentColorGrid,\n} from './AccentColorPicker';\n\n// Color data\nexport { defaultAccentColors, mergeColors } from './colors';\n\n// Types\nexport type {\n // Core types\n AccentColor,\n AccentColorConfig,\n AccentThemeContextType,\n AccentThemeProviderProps,\n \n // Component types\n ComponentSize,\n BaseComponentProps,\n AccentColorPickerProps,\n AccentColorSwatchesProps,\n AccentColorMenuProps,\n AccentColorButtonProps,\n AccentThemeResetProps,\n CurrentAccentIndicatorProps,\n AccentColorGridProps,\n AccentColorSwatchProps,\n} from './types';\n\n// Utilities\nexport {\n generateCSSVariables,\n applyCSSVariables,\n createGradient,\n createShadow,\n adjustHSL,\n getContrastColor,\n isClient,\n storage,\n} from './utils';\n\n// Version\nexport const VERSION = '2.0.0';\n"],"mappings":"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","names":["React","useState","useEffect","useState","useEffect"]}
1
+ {"version":3,"sources":["../src/AccentThemeProvider.tsx","../src/colors.ts","../src/AccentColorPicker.tsx","../src/AccentThemeWidget.tsx","../src/utils.ts","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { \n createContext, \n useContext, \n useEffect, \n useState, \n useCallback,\n useMemo\n} from \"react\";\nimport type { \n AccentColor, \n AccentThemeContextType, \n AccentThemeProviderProps \n} from \"./types\";\nimport { defaultAccentColors, mergeColors } from \"./colors\";\n\nconst STYLE_ID = 'accent-theme-base-styles';\n\nconst defaultContext: AccentThemeContextType = {\n accentColor: \"teal\",\n setAccentColor: () => {},\n accentConfig: defaultAccentColors.teal,\n colors: defaultAccentColors,\n mounted: false,\n defaultColor: \"teal\",\n resetToDefault: () => {},\n};\n\nconst AccentThemeContext = createContext<AccentThemeContextType>(defaultContext);\n\n// Base CSS that gets injected automatically\nconst BASE_CSS = `\n :root {\n --primary: 174 72% 35%;\n --primary-foreground: 210 40% 98%;\n --accent: 174 72% 45%;\n --ring: 174 72% 45%;\n }\n \n .dark {\n --primary: 174 72% 45%;\n --primary-foreground: 210 40% 98%;\n --accent: 174 72% 55%;\n --ring: 174 72% 55%;\n }\n`;\n\n// Detect if dark mode is active\nfunction detectDarkMode(): boolean {\n if (typeof window === 'undefined') return false;\n \n const root = document.documentElement;\n \n // Check various dark mode indicators\n const isDark = \n root.classList.contains('dark') ||\n root.getAttribute('data-theme') === 'dark' ||\n root.getAttribute('data-mode') === 'dark' ||\n document.body.classList.contains('dark') ||\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n \n return isDark;\n}\n\nexport function AccentThemeProvider({ \n children, \n defaultColor = \"teal\",\n customColors,\n storageKey = \"accent-color\",\n cssVariablePrefix = \"\",\n injectCSS = true,\n enableDarkMode = true,\n}: AccentThemeProviderProps): React.JSX.Element {\n const colors = useMemo(() => mergeColors(defaultAccentColors, customColors), [customColors]);\n \n const [accentColor, setAccentColorState] = useState<AccentColor>(defaultColor);\n const [mounted, setMounted] = useState(false);\n const [isDark, setIsDark] = useState(false);\n\n // Get CSS variable names\n const getVarName = useCallback((name: string) => {\n return cssVariablePrefix ? `${cssVariablePrefix}-${name}` : name;\n }, [cssVariablePrefix]);\n\n // Inject base CSS on mount\n useEffect(() => {\n if (!injectCSS || typeof document === 'undefined') return;\n \n // Check if styles already exist\n if (!document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = BASE_CSS;\n document.head.appendChild(style);\n }\n }, [injectCSS]);\n\n // Initialize from localStorage and detect dark mode\n useEffect(() => {\n setMounted(true);\n \n // Check local storage\n const stored = localStorage.getItem(storageKey) as AccentColor;\n if (stored && colors[stored]) {\n setAccentColorState(stored);\n }\n \n // Detect dark mode\n if (!enableDarkMode) return;\n \n setIsDark(detectDarkMode());\n \n // Watch for theme changes\n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, [storageKey, colors, enableDarkMode, defaultColor]);\n\n // Update CSS variables when color changes\n useEffect(() => {\n if (!mounted || typeof document === 'undefined') return;\n \n const root = document.documentElement;\n const config = colors[accentColor];\n \n if (!config) return;\n \n // Adjust colors for dark mode if enabled\n const primary = isDark && enableDarkMode ? config.light : config.primary;\n const accent = isDark && enableDarkMode ? config.light : config.light;\n \n // Update CSS variables\n root.style.setProperty(`--${getVarName('primary')}`, primary);\n root.style.setProperty(`--${getVarName('primary-foreground')}`, config.primaryForeground);\n root.style.setProperty(`--${getVarName('ring')}`, accent);\n root.style.setProperty(`--${getVarName('accent')}`, accent);\n \n // Store preference\n localStorage.setItem(storageKey, accentColor);\n \n // Add data attribute for Tailwind selectors\n root.setAttribute(`data-${getVarName('accent')}`, accentColor);\n \n // Dispatch custom event for external listeners\n window.dispatchEvent(new CustomEvent('accentthemechange', { \n detail: { color: accentColor, config, isDark } \n }));\n }, [accentColor, mounted, colors, cssVariablePrefix, getVarName, isDark, enableDarkMode, storageKey]);\n\n const setAccentColor = useCallback((color: AccentColor) => {\n if (colors[color]) {\n setAccentColorState(color);\n } else {\n console.warn(`[AccentTheme] Color \"${color}\" not found in available colors`);\n }\n }, [colors]);\n\n const resetToDefault = useCallback(() => {\n setAccentColorState(defaultColor);\n localStorage.removeItem(storageKey);\n }, [defaultColor, storageKey]);\n\n const value: AccentThemeContextType = {\n accentColor,\n setAccentColor,\n accentConfig: colors[accentColor] || colors[defaultColor],\n colors,\n mounted,\n defaultColor,\n resetToDefault,\n };\n\n return React.createElement(\n AccentThemeContext.Provider,\n { value },\n children\n );\n}\n\nexport function useAccentTheme(): AccentThemeContextType {\n return useContext(AccentThemeContext);\n}\n\n// Utility hook for getting color values\nexport function useAccentColor() {\n const context = useAccentTheme();\n const { accentConfig, mounted } = context;\n \n // Get dark mode from detectDarkMode for the hook\n const [isDark, setIsDark] = useState(false);\n \n useEffect(() => {\n setIsDark(detectDarkMode());\n \n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, []);\n \n return {\n primary: `hsl(${accentConfig.primary})`,\n primaryForeground: `hsl(${accentConfig.primaryForeground})`,\n light: `hsl(${accentConfig.light})`,\n dark: `hsl(${accentConfig.dark})`,\n gradient: accentConfig.gradient,\n mounted,\n isDark,\n };\n}\n\n// Hook to detect dark mode\nexport function useAccentDarkMode() {\n const [isDark, setIsDark] = useState(false);\n \n useEffect(() => {\n setIsDark(detectDarkMode());\n \n const observer = new MutationObserver(() => {\n setIsDark(detectDarkMode());\n });\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-mode']\n });\n \n return () => observer.disconnect();\n }, []);\n \n return isDark;\n}\n","import { AccentColor, AccentColorConfig } from './types';\n\nexport const defaultAccentColors: Record<AccentColor, AccentColorConfig> = {\n teal: {\n name: \"Teal\",\n primary: \"174 72% 35%\",\n primaryForeground: \"210 40% 98%\",\n light: \"174 72% 45%\",\n dark: \"174 72% 25%\",\n gradient: \"from-teal-500 to-emerald-500\",\n },\n blue: {\n name: \"Ocean Blue\",\n primary: \"217 91% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"217 91% 55%\",\n dark: \"217 91% 35%\",\n gradient: \"from-blue-500 to-cyan-500\",\n },\n purple: {\n name: \"Royal Purple\",\n primary: \"270 60% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"270 60% 55%\",\n dark: \"270 60% 35%\",\n gradient: \"from-purple-500 to-pink-500\",\n },\n rose: {\n name: \"Rose Pink\",\n primary: \"350 80% 50%\",\n primaryForeground: \"210 40% 98%\",\n light: \"350 80% 60%\",\n dark: \"350 80% 40%\",\n gradient: \"from-rose-500 to-pink-500\",\n },\n amber: {\n name: \"Sunset Amber\",\n primary: \"35 95% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"35 95% 55%\",\n dark: \"35 95% 35%\",\n gradient: \"from-amber-500 to-orange-500\",\n },\n emerald: {\n name: \"Forest Emerald\",\n primary: \"150 65% 35%\",\n primaryForeground: \"210 40% 98%\",\n light: \"150 65% 45%\",\n dark: \"150 65% 25%\",\n gradient: \"from-emerald-500 to-green-500\",\n },\n indigo: {\n name: \"Deep Indigo\",\n primary: \"240 60% 50%\",\n primaryForeground: \"210 40% 98%\",\n light: \"240 60% 60%\",\n dark: \"240 60% 40%\",\n gradient: \"from-indigo-500 to-purple-500\",\n },\n cyan: {\n name: \"Electric Cyan\",\n primary: \"190 90% 45%\",\n primaryForeground: \"210 40% 98%\",\n light: \"190 90% 55%\",\n dark: \"190 90% 35%\",\n gradient: \"from-cyan-500 to-blue-500\",\n },\n};\n\nexport function mergeColors(\n defaultColors: Record<string, AccentColorConfig>,\n customColors?: Record<string, AccentColorConfig>\n): Record<string, AccentColorConfig> {\n if (!customColors) return defaultColors;\n return { ...defaultColors, ...customColors };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useRef, useEffect } from \"react\";\nimport { useAccentTheme, useAccentColor } from \"./AccentThemeProvider\";\nimport { defaultAccentColors } from \"./colors\";\nimport type { \n AccentColor, \n AccentColorPickerProps,\n AccentColorSwatchesProps,\n AccentColorMenuProps,\n AccentColorButtonProps,\n AccentThemeResetProps,\n CurrentAccentIndicatorProps,\n AccentColorGridProps,\n AccentColorSwatchProps\n} from \"./types\";\n\n// Size mappings\nconst sizeClasses = {\n sm: \"w-6 h-6\",\n md: \"w-8 h-8\",\n lg: \"w-10 h-10\",\n};\n\nconst gapClasses = {\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-3\",\n};\n\nconst sizePixels = {\n sm: 24,\n md: 32,\n lg: 40,\n};\n\nconst gapPixels = {\n sm: 4,\n md: 8,\n lg: 12,\n};\n\n// Checkmark icon component\nconst CheckmarkIcon = ({ className = \"\", style }: { className?: string; style?: React.CSSProperties }): React.JSX.Element => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\n// Chevron icon\nconst ChevronIcon = ({ className = \"\" }: { className?: string }): React.JSX.Element => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\n// Palette icon\nconst PaletteIcon = ({ className = \"\" }: { className?: string }): React.JSX.Element => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.8}\n d=\"M12 3a9 9 0 100 18h1.4a2.6 2.6 0 000-5.2H11a1.5 1.5 0 010-3h4.8a3.2 3.2 0 003.2-3.2C19 6 15.9 3 12 3z\"\n />\n <circle cx=\"7.5\" cy=\"10.2\" r=\"1\" />\n <circle cx=\"10.5\" cy=\"7.5\" r=\"1\" />\n <circle cx=\"14.2\" cy=\"7.3\" r=\"1\" />\n </svg>\n);\n\n// Reset icon\nconst ResetIcon = ({ className = \"\" }: { className?: string }): React.JSX.Element => (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n);\n\n// Individual swatch component\nexport function AccentColorSwatch({ \n color, \n isSelected, \n onClick,\n size = \"md\",\n className = \"\",\n showCheckmark = true,\n}: AccentColorSwatchProps): React.JSX.Element | null {\n const { colors } = useAccentTheme();\n const config = colors[color] || defaultAccentColors[color];\n if (!config) return null;\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick,\n className: `\n relative rounded-full transition-all duration-200 flex-shrink-0\n hover:scale-110 focus:outline-none focus:ring-2 focus:ring-offset-2\n focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${sizeClasses[size]}\n ${isSelected ? \"ring-2 ring-offset-2 scale-110\" : \"\"}\n ${className}\n `,\n style: {\n width: `${sizePixels[size]}px`,\n height: `${sizePixels[size]}px`,\n borderRadius: \"9999px\",\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n background: `hsl(${config.primary})`,\n ['--tw-ring-color' as string]: `hsl(${config.light})`,\n boxShadow: isSelected ? `0 0 0 2px #fff, 0 0 0 4px hsl(${config.light})` : undefined,\n },\n title: config.name,\n \"aria-label\": `Select ${config.name} theme`,\n \"aria-pressed\": isSelected,\n }, isSelected && showCheckmark && React.createElement(CheckmarkIcon, {\n className: \"absolute inset-0 w-full h-full p-1.5 text-white drop-shadow-md\",\n style: {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n padding: \"6px\",\n color: \"#fff\",\n pointerEvents: \"none\",\n }\n }));\n}\n\n// Main color picker with multiple variants\nexport function AccentColorPicker({\n size = \"md\",\n variant = \"dropdown\",\n columns = 4,\n className = \"\",\n align = \"end\",\n onChange,\n label = \"Theme\",\n showColorName = true,\n}: AccentColorPickerProps): React.JSX.Element {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (variant !== 'dropdown') return;\n \n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n \n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, variant]);\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n if (variant === \"dropdown\") {\n setIsOpen(false);\n }\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeClasses[size]} ${className}`\n });\n }\n\n // Inline variant\n if (variant === \"inline\") {\n return React.createElement(\"div\", {\n className: `grid ${gapClasses.md} ${className}`,\n style: {\n display: \"grid\",\n gap: `${gapPixels.md}px`,\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`\n }\n }, Object.entries(colors).map(([color]) => {\n const isSelected = accentColor === color;\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n });\n }));\n }\n\n // Menu variant (uses fixed positioning for better placement)\n if (variant === \"menu\") {\n return React.createElement(AccentColorMenu, {\n size,\n className,\n onChange,\n label,\n align,\n });\n }\n\n // Dropdown variant (default)\n return React.createElement(\"div\", { \n ref: dropdownRef,\n className: `relative inline-block ${className}`,\n style: {\n position: \"relative\",\n display: \"inline-block\",\n }\n },\n React.createElement(\"button\", {\n type: \"button\",\n onClick: () => setIsOpen(!isOpen),\n className: `\n flex items-center gap-2 px-3.5 py-2 rounded-full\n text-slate-100 bg-slate-900/70 backdrop-blur-md\n border border-white/10 hover:bg-slate-900/85\n transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\n focus:ring-offset-slate-950 shadow-lg shadow-slate-950/30\n `,\n style: { ['--tw-ring-color' as string]: primary },\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"listbox\",\n }, [\n React.createElement(\"div\", {\n key: \"swatch\",\n className: \"w-5 h-5 rounded-full shadow-sm ring-1 ring-white/20\",\n style: { background: primary }\n }),\n showColorName && React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-slate-100\"\n }, colors[accentColor]?.name || label),\n React.createElement(ChevronIcon, {\n key: \"chevron\",\n className: `w-4 h-4 text-rose-300 transition-transform duration-200 ${isOpen ? \"rotate-180\" : \"\"}`\n })\n ]),\n isOpen && React.createElement(React.Fragment, {}, [\n React.createElement(\"div\", {\n key: \"backdrop\",\n className: \"fixed inset-0 z-40\",\n onClick: () => setIsOpen(false)\n }),\n React.createElement(\"div\", {\n key: \"dropdown\",\n className: `\n absolute right-0 mt-3 p-4\n rounded-2xl z-50 min-w-[290px]\n bg-gradient-to-b from-slate-800/95 to-slate-900/95\n border border-slate-600/40\n shadow-2xl shadow-slate-950/50 backdrop-blur-xl\n `,\n role: \"listbox\",\n style: {\n position: \"absolute\",\n right: 0,\n marginTop: \"12px\",\n padding: \"16px\",\n borderRadius: \"16px\",\n zIndex: 50,\n minWidth: \"290px\",\n background: \"linear-gradient(to bottom, rgba(30,41,59,0.95), rgba(15,23,42,0.95))\",\n border: \"1px solid rgba(71,85,105,0.4)\",\n boxShadow: \"0 24px 48px rgba(2,6,23,0.5)\",\n backdropFilter: \"blur(16px)\",\n }\n }, [\n React.createElement(\"div\", {\n key: \"header\",\n className: \"flex items-start gap-3 mb-3\",\n style: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n marginBottom: \"12px\",\n }\n }, [\n React.createElement(\"div\", {\n key: \"icon-wrap\",\n className: \"w-7 h-7 rounded-full grid place-items-center border border-rose-400/40 bg-rose-500/15\"\n }, React.createElement(PaletteIcon, {\n className: \"w-4 h-4 text-rose-300\"\n })),\n React.createElement(\"div\", { key: \"titles\" }, [\n React.createElement(\"p\", {\n key: \"title\",\n className: \"text-[1.15rem] font-semibold text-slate-100 leading-5\",\n style: {\n margin: 0,\n fontSize: \"1.15rem\",\n lineHeight: 1.25,\n fontWeight: 600,\n color: \"#f1f5f9\",\n }\n }, \"Theme Color\"),\n React.createElement(\"p\", {\n key: \"subtitle\",\n className: \"text-sm text-slate-300 mt-1\",\n style: {\n margin: \"4px 0 0\",\n fontSize: \"0.875rem\",\n color: \"#cbd5e1\",\n }\n }, \"Choose your preferred accent color\")\n ])\n ]),\n React.createElement(\"div\", {\n key: \"grid\",\n className: \"grid grid-cols-4 gap-3 border-t border-white/10 pt-4\",\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\",\n gap: \"12px\",\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n paddingTop: \"16px\",\n }\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n relative w-12 h-12 rounded-xl transition-all duration-200\n hover:-translate-y-0.5 hover:brightness-110\n focus:outline-none focus:ring-2 ring-offset-0\n ${isSelected ? \"ring-2 ring-white/70 scale-[1.03]\" : \"ring-1 ring-white/10\"}\n `,\n style: {\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"12px\",\n border: \"none\",\n cursor: \"pointer\",\n position: \"relative\",\n background: `hsl(${config.primary})`,\n boxShadow: isSelected\n ? \"0 0 0 2px rgba(255,255,255,0.7)\"\n : \"0 0 0 1px rgba(255,255,255,0.1)\",\n },\n title: config.name,\n role: \"option\",\n \"aria-selected\": isSelected\n }, isSelected && React.createElement(CheckmarkIcon, {\n className: \"absolute inset-0 w-full h-full p-3 text-white drop-shadow-md\",\n style: {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n padding: \"12px\",\n color: \"#fff\",\n pointerEvents: \"none\",\n }\n }));\n })),\n React.createElement(\"div\", {\n key: \"footer\",\n className: \"mt-4 pt-4 border-t border-white/10 flex items-center justify-between gap-3\",\n style: {\n marginTop: \"16px\",\n paddingTop: \"16px\",\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }\n }, [\n React.createElement(\"p\", {\n key: \"current-text\",\n className: \"text-[1.05rem] text-slate-200\",\n style: {\n margin: 0,\n fontSize: \"1.05rem\",\n color: \"#e2e8f0\",\n }\n }, `Current: ${colors[accentColor]?.name || accentColor}`),\n React.createElement(\"span\", {\n key: \"current-pill\",\n className: \"w-14 h-7 rounded-full ring-1 ring-white/20\",\n style: { background: primary },\n \"aria-hidden\": true\n })\n ])\n ])\n ])\n );\n}\n\n// Horizontal row of color swatches\nexport function AccentColorSwatches({\n className = \"\",\n size = \"md\",\n onChange,\n showCheckmark = true,\n gap = \"md\",\n}: AccentColorSwatchesProps): React.JSX.Element {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `flex ${gapClasses[gap]} ${className}`\n }, Array(8).fill(null).map((_, i) => React.createElement(\"div\", {\n key: i,\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-full ${sizeClasses[size]}`\n })));\n }\n\n return React.createElement(\"div\", {\n className: `flex flex-wrap ${gapClasses[gap]} ${className}`\n }, Object.entries(colors).map(([color]) => {\n const isSelected = accentColor === color;\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n showCheckmark,\n });\n }));\n}\n\n// Menu dropdown component\nexport function AccentColorMenu({\n className = \"\",\n size: _size = \"md\",\n onChange,\n align = \"end\",\n label = \"Theme\",\n}: AccentColorMenuProps): React.JSX.Element {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n \n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n setIsOpen(false);\n };\n\n const alignClasses = {\n start: \"left-0\",\n center: \"left-1/2 -translate-x-1/2\",\n end: \"right-0\",\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg w-24 h-9 ${className}`,\n style: {\n width: \"96px\",\n height: \"36px\",\n borderRadius: \"8px\",\n }\n });\n }\n\n return React.createElement(\"div\", { \n ref: menuRef,\n className: `relative inline-block ${className}`,\n style: {\n position: \"relative\",\n display: \"inline-block\",\n }\n },\n React.createElement(\"button\", {\n type: \"button\",\n onClick: () => setIsOpen(!isOpen),\n className: `\n flex items-center gap-2 px-3 py-2 rounded-lg \n bg-white dark:bg-gray-800 \n border border-gray-200 dark:border-gray-700 \n hover:bg-gray-50 dark:hover:bg-gray-700 \n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n `,\n style: { ['--tw-ring-color' as string]: primary },\n \"aria-expanded\": isOpen,\n }, [\n React.createElement(\"div\", {\n key: \"swatch\",\n className: `${sizeClasses.sm} rounded-full shadow-sm`,\n style: { background: primary }\n }),\n React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, label),\n React.createElement(ChevronIcon, {\n key: \"chevron\",\n className: `w-4 h-4 text-gray-500 dark:text-gray-400 transition-transform ${isOpen ? \"rotate-180\" : \"\"}`\n })\n ]),\n isOpen && React.createElement(\"div\", {\n className: `\n absolute top-full mt-2 p-2 \n bg-white dark:bg-gray-800 \n rounded-lg shadow-xl \n border border-gray-200 dark:border-gray-700 \n z-50 min-w-[160px]\n ${alignClasses[align]}\n `,\n style: {\n position: \"absolute\",\n top: \"100%\",\n marginTop: \"8px\",\n padding: \"8px\",\n background: \"#ffffff\",\n borderRadius: \"8px\",\n boxShadow: \"0 12px 30px rgba(15,23,42,0.18)\",\n border: \"1px solid #e5e7eb\",\n zIndex: 50,\n minWidth: \"160px\",\n left: align === \"start\" ? 0 : align === \"center\" ? \"50%\" : undefined,\n right: align === \"end\" ? 0 : undefined,\n transform: align === \"center\" ? \"translateX(-50%)\" : undefined,\n }\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n w-full flex items-center gap-3 px-3 py-2 rounded-md\n transition-colors\n ${isSelected ? \"bg-gray-100 dark:bg-gray-700\" : \"hover:bg-gray-50 dark:hover:bg-gray-700/50\"}\n `,\n style: {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n padding: \"8px 12px\",\n borderRadius: \"6px\",\n border: \"none\",\n cursor: \"pointer\",\n background: isSelected ? \"#f3f4f6\" : \"transparent\",\n },\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `w-4 h-4 rounded-full flex-shrink-0`,\n style: {\n width: \"16px\",\n height: \"16px\",\n borderRadius: \"9999px\",\n flexShrink: 0,\n background: `hsl(${config.primary})`\n }\n }),\n React.createElement(\"span\", {\n key: \"name\",\n className: `text-sm ${isSelected ? \"font-medium text-gray-900 dark:text-gray-100\" : \"text-gray-700 dark:text-gray-300\"}`,\n style: {\n fontSize: \"14px\",\n fontWeight: isSelected ? 500 : 400,\n color: isSelected ? \"#111827\" : \"#374151\",\n }\n }, config.name),\n isSelected && React.createElement(CheckmarkIcon, {\n key: \"check\",\n className: \"w-4 h-4 ml-auto text-gray-500 dark:text-gray-400\",\n style: {\n width: \"16px\",\n height: \"16px\",\n marginLeft: \"auto\",\n color: \"#6b7280\",\n }\n })\n ]);\n }))\n );\n}\n\n// Button showing current accent color\nexport function AccentColorButton({\n className = \"\",\n size = \"md\",\n onClick,\n showLabel = false,\n buttonVariant = \"default\",\n}: AccentColorButtonProps): React.JSX.Element {\n const { accentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const colorConfig = colors[accentColor] || defaultAccentColors[accentColor];\n\n const variantClasses = {\n default: \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700\",\n ghost: \"hover:bg-gray-100 dark:hover:bg-gray-800\",\n outline: \"border-2 border-current hover:bg-gray-50 dark:hover:bg-gray-800\",\n };\n\n const sizeStyles = {\n sm: { button: \"p-1.5\", dot: \"w-4 h-4\" },\n md: { button: \"p-2\", dot: \"w-5 h-5\" },\n lg: { button: \"p-2.5\", dot: \"w-6 h-6\" },\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeStyles[size].button}`\n });\n }\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick,\n className: `\n inline-flex items-center gap-2 rounded-lg \n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${variantClasses[buttonVariant]}\n ${sizeStyles[size].button}\n ${className}\n `,\n style: { ['--tw-ring-color' as string]: primary },\n title: colorConfig?.name || accentColor,\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `${sizeStyles[size].dot} rounded-full shadow-sm`,\n style: { background: primary }\n }),\n showLabel && React.createElement(\"span\", {\n key: \"label\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, colorConfig?.name || accentColor)\n ]);\n}\n\n// Reset to default button\nexport function AccentThemeReset({\n className = \"\",\n size = \"md\",\n text = \"Reset\",\n onReset,\n variant = \"button\",\n}: AccentThemeResetProps): React.JSX.Element {\n const { defaultColor, resetToDefault, mounted, accentColor } = useAccentTheme();\n const { primary } = useAccentColor();\n \n const isDefault = accentColor === defaultColor;\n\n const handleReset = () => {\n resetToDefault();\n onReset?.();\n };\n\n const sizeStyles = {\n sm: { button: \"text-xs px-2 py-1\", icon: \"w-3 h-3\" },\n md: { button: \"text-sm px-3 py-1.5\", icon: \"w-3.5 h-3.5\" },\n lg: { button: \"text-base px-4 py-2\", icon: \"w-4 h-4\" },\n };\n\n const variantClasses = {\n button: `\n inline-flex items-center gap-1.5 rounded-md\n bg-gray-100 dark:bg-gray-800 \n text-gray-700 dark:text-gray-300\n hover:bg-gray-200 dark:hover:bg-gray-700\n disabled:opacity-50 disabled:cursor-not-allowed\n text-sm px-3 py-1.5\n `,\n link: `\n inline-flex items-center gap-1.5\n text-gray-500 dark:text-gray-400\n hover:text-gray-700 dark:hover:text-gray-300\n underline underline-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed disabled:no-underline\n `,\n subtle: `\n inline-flex items-center gap-1.5\n text-gray-400 dark:text-gray-500\n hover:text-gray-600 dark:hover:text-gray-400\n disabled:opacity-50 disabled:cursor-not-allowed\n `,\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-md w-20 h-8`\n });\n }\n\n return React.createElement(\"button\", {\n type: \"button\",\n onClick: handleReset,\n disabled: isDefault,\n className: `\n transition-colors focus:outline-none focus:ring-2 \n focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900\n ${variantClasses[variant]}\n ${className}\n `,\n style: variant === 'button' ? { ['--tw-ring-color' as string]: primary } : undefined,\n title: isDefault ? \"Already using default theme\" : `Reset to default theme`,\n }, [\n React.createElement(ResetIcon, {\n key: \"icon\",\n className: sizeStyles[size].icon\n }),\n React.createElement(\"span\", { key: \"text\" }, text)\n ]);\n}\n\n// Current color indicator (non-interactive)\nexport function CurrentAccentIndicator({\n className = \"\",\n size = \"md\",\n showName = false,\n pulseOnChange = false,\n}: CurrentAccentIndicatorProps): React.JSX.Element {\n const { accentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const config = colors[accentColor] || defaultAccentColors[accentColor];\n const [isPulsing, setIsPulsing] = useState(false);\n const prevColorRef = useRef(accentColor);\n\n useEffect(() => {\n if (pulseOnChange && prevColorRef.current !== accentColor) {\n setIsPulsing(true);\n const timer = setTimeout(() => setIsPulsing(false), 500);\n prevColorRef.current = accentColor;\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [accentColor, pulseOnChange]);\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `flex items-center gap-2 ${className}`\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-full ${sizeClasses[size]}`\n }),\n showName && React.createElement(\"div\", {\n key: \"name\",\n className: \"animate-pulse bg-gray-200 dark:bg-gray-700 rounded h-4 w-16\"\n })\n ]);\n }\n\n return React.createElement(\"div\", {\n className: `inline-flex items-center gap-2 ${className}`\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `\n ${sizeClasses[size]} rounded-full shadow-sm flex-shrink-0\n ${isPulsing ? \"animate-ping\" : \"\"}\n `,\n style: { background: primary }\n }),\n showName && React.createElement(\"span\", {\n key: \"name\",\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\"\n }, config?.name || accentColor)\n ]);\n}\n\n// Grid layout for color selection\nexport function AccentColorGrid({\n className = \"\",\n size = \"md\",\n columns = 4,\n onChange,\n showLabels = false,\n gap = \"md\",\n}: AccentColorGridProps): React.JSX.Element {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n };\n\n const gridCols = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n 8: \"grid-cols-8\",\n };\n\n if (!mounted) {\n return React.createElement(\"div\", {\n className: `grid ${gridCols[columns]} ${gapClasses[gap]} ${className}`\n }, Array(8).fill(null).map((_, i) => React.createElement(\"div\", {\n key: i,\n className: `animate-pulse bg-gray-200 dark:bg-gray-700 rounded-lg ${sizeClasses[size]}`\n })));\n }\n\n return React.createElement(\"div\", {\n className: `grid ${gridCols[columns]} ${gapClasses[gap]} ${className}`\n }, Object.entries(colors).map(([color, config]) => {\n const isSelected = accentColor === color;\n \n if (showLabels) {\n return React.createElement(\"button\", {\n key: color,\n type: \"button\",\n onClick: () => handleColorChange(color),\n className: `\n flex flex-col items-center gap-1.5 p-2 rounded-lg\n transition-colors\n ${isSelected ? \"bg-gray-100 dark:bg-gray-700\" : \"hover:bg-gray-50 dark:hover:bg-gray-800\"}\n `,\n }, [\n React.createElement(\"div\", {\n key: \"dot\",\n className: `${sizeClasses[size]} rounded-full shadow-sm`,\n style: { background: `hsl(${config.primary})` }\n }),\n React.createElement(\"span\", {\n key: \"name\",\n className: `text-xs ${isSelected ? \"font-medium text-gray-900 dark:text-gray-100\" : \"text-gray-600 dark:text-gray-400\"}`\n }, config.name)\n ]);\n }\n\n return React.createElement(AccentColorSwatch, {\n key: color,\n color: color as AccentColor,\n isSelected,\n onClick: () => handleColorChange(color),\n size,\n });\n }));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccentTheme, useAccentColor } from \"./AccentThemeProvider\";\nimport type { AccentColor, AccentThemeWidgetProps } from \"./types\";\n\nconst CheckIcon = (): React.JSX.Element => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: \"100%\", height: \"100%\" }}>\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst PaletteIcon = (): React.JSX.Element => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" style={{ width: \"14px\", height: \"14px\" }}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.8}\n d=\"M12 3a9 9 0 100 18h1.4a2.6 2.6 0 000-5.2H11a1.5 1.5 0 010-3h4.8a3.2 3.2 0 003.2-3.2C19 6 15.9 3 12 3z\"\n />\n <circle cx=\"7.5\" cy=\"10.2\" r=\"1\" />\n <circle cx=\"10.5\" cy=\"7.5\" r=\"1\" />\n <circle cx=\"14.2\" cy=\"7.3\" r=\"1\" />\n </svg>\n);\n\nexport function AccentThemeWidget({\n className = \"\",\n title = \"Theme Color\",\n subtitle = \"Choose your preferred accent color\",\n position = \"top-right\",\n offset = 20,\n defaultOpen = true,\n collapsible = true,\n showCurrent = true,\n onChange,\n}: AccentThemeWidgetProps): React.JSX.Element {\n const { accentColor, setAccentColor, mounted, colors } = useAccentTheme();\n const { primary } = useAccentColor();\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!collapsible || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen, collapsible]);\n\n const placementStyle = useMemo((): React.CSSProperties => {\n if (position === \"inline\") {\n return { position: \"relative\", display: \"inline-block\" };\n }\n\n const base: React.CSSProperties = { position: \"fixed\", zIndex: 80 };\n if (position === \"top-right\") base.top = `${offset}px`, base.right = `${offset}px`;\n if (position === \"top-left\") base.top = `${offset}px`, base.left = `${offset}px`;\n if (position === \"bottom-right\") base.bottom = `${offset}px`, base.right = `${offset}px`;\n if (position === \"bottom-left\") base.bottom = `${offset}px`, base.left = `${offset}px`;\n return base;\n }, [position, offset]);\n\n const handleColorChange = (color: AccentColor) => {\n setAccentColor(color);\n onChange?.(color);\n };\n\n if (!mounted) {\n return (\n <div\n className={className}\n style={{\n ...placementStyle,\n width: \"228px\",\n height: \"196px\",\n borderRadius: \"14px\",\n background: \"rgba(31,41,55,0.75)\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n }}\n />\n );\n }\n\n return (\n <div className={className} style={placementStyle} ref={panelRef}>\n {collapsible ? (\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-label=\"Toggle theme color panel\"\n style={{\n width: \"38px\",\n height: \"38px\",\n borderRadius: \"9999px\",\n border: \"1px solid rgba(168,85,247,0.45)\",\n background: \"radial-gradient(circle at 35% 30%, rgba(168,85,247,0.42), rgba(15,23,42,0.9))\",\n color: \"#c4b5fd\",\n display: \"grid\",\n placeItems: \"center\",\n cursor: \"pointer\",\n marginLeft: position.endsWith(\"left\") ? 0 : \"auto\",\n marginBottom: isOpen ? \"8px\" : 0,\n boxShadow: \"0 8px 24px rgba(76,29,149,0.35)\",\n }}\n >\n <PaletteIcon />\n </button>\n ) : null}\n\n {isOpen ? (\n <div\n role=\"dialog\"\n aria-label=\"Theme color picker\"\n style={{\n width: \"228px\",\n padding: \"12px\",\n borderRadius: \"14px\",\n background: \"linear-gradient(180deg, rgba(30,41,59,0.96), rgba(15,23,42,0.96))\",\n border: \"1px solid rgba(100,116,139,0.45)\",\n boxShadow: \"0 24px 50px rgba(2,6,23,0.5)\",\n color: \"#f8fafc\",\n backdropFilter: \"blur(14px)\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: \"8px\", marginBottom: \"12px\" }}>\n <div\n aria-hidden\n style={{\n width: \"20px\",\n height: \"20px\",\n borderRadius: \"9999px\",\n border: \"1px solid rgba(168,85,247,0.45)\",\n display: \"grid\",\n placeItems: \"center\",\n color: \"#c4b5fd\",\n }}\n >\n <PaletteIcon />\n </div>\n <div>\n <p style={{ margin: 0, fontSize: \"1.1rem\", fontWeight: 700, lineHeight: 1.15 }}>{title}</p>\n <p style={{ margin: \"2px 0 0\", fontSize: \"0.8rem\", color: \"#94a3b8\" }}>{subtitle}</p>\n </div>\n </div>\n\n <div\n style={{\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n paddingTop: \"12px\",\n display: \"grid\",\n gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\",\n gap: \"8px\",\n }}\n >\n {Object.entries(colors).map(([color, config]) => {\n const selected = accentColor === color;\n return (\n <button\n key={color}\n type=\"button\"\n onClick={() => handleColorChange(color)}\n title={config.name}\n aria-label={`Select ${config.name}`}\n style={{\n width: \"42px\",\n height: \"42px\",\n borderRadius: \"10px\",\n border: \"none\",\n cursor: \"pointer\",\n position: \"relative\",\n background: `hsl(${config.primary})`,\n boxShadow: selected\n ? \"0 0 0 2px rgba(255,255,255,0.68)\"\n : \"0 0 0 1px rgba(255,255,255,0.1)\",\n }}\n >\n {selected ? (\n <span\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n color: \"#fff\",\n padding: \"10px\",\n pointerEvents: \"none\",\n }}\n >\n <CheckIcon />\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n\n {showCurrent ? (\n <div\n style={{\n marginTop: \"12px\",\n paddingTop: \"10px\",\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"8px\",\n }}\n >\n <p style={{ margin: 0, color: \"#e2e8f0\", fontSize: \"0.95rem\" }}>\n Current: {colors[accentColor]?.name || accentColor}\n </p>\n <span\n aria-hidden\n style={{\n width: \"46px\",\n height: \"20px\",\n borderRadius: \"9999px\",\n background: primary,\n boxShadow: \"inset 0 0 0 1px rgba(255,255,255,0.25)\",\n }}\n />\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","import { AccentColorConfig } from './types';\n\n/**\n * Generate CSS custom properties for an accent color\n */\nexport function generateCSSVariables(\n config: AccentColorConfig,\n prefix: string = \"\"\n): Record<string, string> {\n const p = prefix ? `${prefix}-` : \"\";\n return {\n [`--${p}primary`]: config.primary,\n [`--${p}primary-foreground`]: config.primaryForeground,\n [`--${p}accent`]: config.light,\n [`--${p}ring`]: config.light,\n };\n}\n\n/**\n * Apply CSS variables to an element\n */\nexport function applyCSSVariables(\n element: HTMLElement,\n variables: Record<string, string>\n): void {\n Object.entries(variables).forEach(([key, value]) => {\n element.style.setProperty(key, value);\n });\n}\n\n/**\n * Create a gradient string from accent color config\n */\nexport function createGradient(\n config: AccentColorConfig,\n direction: string = \"to right\"\n): string {\n return `linear-gradient(${direction}, hsl(${config.light}), hsl(${config.primary}))`;\n}\n\n/**\n * Create a shadow with the accent color\n */\nexport function createShadow(\n config: AccentColorConfig,\n intensity: number = 0.3,\n blur: number = 20\n): string {\n return `0 4px ${blur}px hsl(${config.primary} / ${intensity})`;\n}\n\n/**\n * Lighten or darken an HSL color\n */\nexport function adjustHSL(\n hsl: string,\n adjustments: {\n hue?: number;\n saturation?: number;\n lightness?: number;\n }\n): string {\n const [h, s, l] = hsl.split(\" \").map((v) => parseFloat(v));\n const newH = h + (adjustments.hue || 0);\n const newS = Math.max(0, Math.min(100, s + (adjustments.saturation || 0)));\n const newL = Math.max(0, Math.min(100, l + (adjustments.lightness || 0)));\n return `${newH} ${newS}% ${newL}%`;\n}\n\n/**\n * Get contrasting text color (black or white) for a background\n */\nexport function getContrastColor(\n hsl: string,\n threshold: number = 50\n): \"black\" | \"white\" {\n const [, , l] = hsl.split(\" \").map((v) => parseFloat(v));\n return l > threshold ? \"black\" : \"white\";\n}\n\n/**\n * Check if code is running on client side\n */\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\n/**\n * Local storage wrapper with error handling\n */\nexport const storage = {\n get: (key: string, defaultValue?: string): string | undefined => {\n if (!isClient()) return defaultValue;\n try {\n return localStorage.getItem(key) || defaultValue;\n } catch {\n return defaultValue;\n }\n },\n set: (key: string, value: string): void => {\n if (!isClient()) return;\n try {\n localStorage.setItem(key, value);\n } catch {\n // Ignore storage errors\n }\n },\n remove: (key: string): void => {\n if (!isClient()) return;\n try {\n localStorage.removeItem(key);\n } catch {\n // Ignore storage errors\n }\n },\n};\n","// Main exports - Provider and Hooks\nexport { \n AccentThemeProvider, \n useAccentTheme, \n useAccentColor,\n useAccentDarkMode \n} from './AccentThemeProvider';\n\n// UI Components\nexport { \n AccentColorPicker, \n AccentColorSwatch,\n AccentColorSwatches,\n AccentColorMenu,\n AccentColorButton,\n AccentThemeReset,\n CurrentAccentIndicator,\n AccentColorGrid,\n} from './AccentColorPicker';\nexport { AccentThemeWidget } from './AccentThemeWidget';\n\n// Color data\nexport { defaultAccentColors, mergeColors } from './colors';\n\n// Types\nexport type {\n // Core types\n AccentColor,\n AccentColorConfig,\n AccentThemeContextType,\n AccentThemeProviderProps,\n \n // Component types\n ComponentSize,\n BaseComponentProps,\n AccentColorPickerProps,\n AccentColorSwatchesProps,\n AccentColorMenuProps,\n AccentColorButtonProps,\n AccentThemeResetProps,\n CurrentAccentIndicatorProps,\n AccentColorGridProps,\n AccentColorSwatchProps,\n AccentThemeWidgetProps,\n} from './types';\n\n// Utilities\nexport {\n generateCSSVariables,\n applyCSSVariables,\n createGradient,\n createShadow,\n adjustHSL,\n getContrastColor,\n isClient,\n storage,\n} from './utils';\n\n// Version\nexport const VERSION = '2.0.2';\n"],"mappings":"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","names":["React","useState","useEffect","useState","useEffect","useEffect","useMemo","useRef","useState","jsx","jsxs","PaletteIcon","useState","useRef","useEffect","useMemo"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razzusharma/accent-theme",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Zero-config dynamic accent color theming for React apps - truly plug and play!",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",