@marcoschwartz/lite-ui 0.2.0 → 0.3.0

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/theme/ThemeProvider.tsx","../src/theme/themes.ts","../src/components/Button.tsx","../src/components/Select.tsx","../src/components/Modal.tsx","../src/components/Navbar.tsx","../src/components/Sidebar.tsx","../src/components/SidebarProvider.tsx","../src/components/AppShell.tsx","../src/icons/icon-utils.tsx","../src/icons/HomeIcon.tsx","../src/icons/UserIcon.tsx","../src/icons/SearchIcon.tsx","../src/icons/BellIcon.tsx","../src/icons/SettingsIcon.tsx","../src/icons/MenuIcon.tsx","../src/icons/CloseIcon.tsx","../src/icons/ChevronDownIcon.tsx","../src/icons/ChevronRightIcon.tsx","../src/icons/CheckIcon.tsx","../src/icons/PlusIcon.tsx","../src/icons/TrashIcon.tsx","../src/icons/EditIcon.tsx","../src/icons/MailIcon.tsx","../src/icons/StarIcon.tsx","../src/icons/HeartIcon.tsx","../src/icons/DownloadIcon.tsx","../src/icons/UploadIcon.tsx","../src/icons/CameraIcon.tsx","../src/icons/LockIcon.tsx","../src/icons/CalendarIcon.tsx","../src/icons/GoogleIcon.tsx","../src/icons/GitHubIcon.tsx","../src/icons/TwitterIcon.tsx","../src/icons/FacebookIcon.tsx","../src/icons/AppleIcon.tsx","../src/icons/LinkedInIcon.tsx","../src/icons/YouTubeIcon.tsx","../src/icons/SlackIcon.tsx","../src/components/Drawer.tsx","../src/components/TextInput.tsx","../src/components/NumberInput.tsx","../src/components/ActionMenu.tsx","../src/components/Card.tsx","../src/components/Alert.tsx","../src/components/Checkbox.tsx","../src/components/Toggle.tsx","../src/components/Badge.tsx","../src/components/Spinner.tsx","../src/components/Tabs.tsx","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/DatePicker.tsx","../src/components/TimePicker.tsx","../src/components/DateTimePicker.tsx","../src/components/Calendar.tsx","../src/components/Radio.tsx","../src/components/ProgressBar.tsx","../src/components/Slider.tsx","../src/components/Avatar.tsx","../src/components/Textarea.tsx","../src/components/RichTextEditor.tsx","../src/components/Toast.tsx","../src/components/Stepper.tsx","../src/components/Divider.tsx","../src/components/FileUpload.tsx","../src/utils/theme-script.ts"],"sourcesContent":["export { Button } from './components/Button';\nexport type { ButtonProps } from './components/Button';\n\nexport { Select } from './components/Select';\nexport type { SelectProps, SelectOption } from './components/Select';\n\nexport { Modal } from './components/Modal';\nexport type { ModalProps } from './components/Modal';\n\nexport { Navbar } from './components/Navbar';\nexport type { NavbarProps } from './components/Navbar';\n\nexport { Sidebar } from './components/Sidebar';\nexport type { SidebarProps } from './components/Sidebar';\n\nexport { SidebarProvider, useSidebar } from './components/SidebarProvider';\nexport type { SidebarProviderProps, SidebarContextValue } from './components/SidebarProvider';\n\nexport { AppShell } from './components/AppShell';\nexport type { AppShellProps } from './components/AppShell';\n\nexport { Drawer } from './components/Drawer';\nexport type { DrawerProps } from './components/Drawer';\n\nexport { TextInput } from './components/TextInput';\nexport type { TextInputProps } from './components/TextInput';\n\nexport { NumberInput } from './components/NumberInput';\nexport type { NumberInputProps } from './components/NumberInput';\n\nexport { ActionMenu } from './components/ActionMenu';\nexport type { ActionMenuProps, ActionMenuItem } from './components/ActionMenu';\n\nexport { Card } from './components/Card';\nexport type { CardProps } from './components/Card';\n\nexport { Alert } from './components/Alert';\nexport type { AlertProps } from './components/Alert';\n\nexport { Checkbox } from './components/Checkbox';\nexport type { CheckboxProps } from './components/Checkbox';\n\nexport { Toggle } from './components/Toggle';\nexport type { ToggleProps } from './components/Toggle';\n\nexport { Badge } from './components/Badge';\nexport type { BadgeProps } from './components/Badge';\n\nexport { Spinner } from './components/Spinner';\nexport type { SpinnerProps } from './components/Spinner';\n\nexport { Tabs } from './components/Tabs';\nexport type { TabsProps, Tab } from './components/Tabs';\n\nexport { Table } from './components/Table';\nexport type { TableProps, Column } from './components/Table';\n\nexport { Pagination } from './components/Pagination';\nexport type { PaginationProps } from './components/Pagination';\n\nexport { DatePicker } from './components/DatePicker';\nexport type { DatePickerProps } from './components/DatePicker';\n\nexport { TimePicker } from './components/TimePicker';\nexport type { TimePickerProps } from './components/TimePicker';\n\nexport { DateTimePicker } from './components/DateTimePicker';\nexport type { DateTimePickerProps } from './components/DateTimePicker';\n\nexport { Calendar } from './components/Calendar';\nexport type { CalendarProps } from './components/Calendar';\n\nexport { Radio } from './components/Radio';\nexport type { RadioProps, RadioOption } from './components/Radio';\n\nexport { ProgressBar } from './components/ProgressBar';\nexport type { ProgressBarProps } from './components/ProgressBar';\n\nexport { Slider } from './components/Slider';\nexport type { SliderProps } from './components/Slider';\n\nexport { Avatar } from './components/Avatar';\nexport type { AvatarProps } from './components/Avatar';\n\nexport { Textarea } from './components/Textarea';\nexport type { TextareaProps } from './components/Textarea';\n\nexport { RichTextEditor } from './components/RichTextEditor';\nexport type { RichTextEditorProps } from './components/RichTextEditor';\n\nexport { ToastProvider, useToast, toast } from './components/Toast';\nexport type { Toast, ToastProviderProps } from './components/Toast';\n\nexport { Stepper } from './components/Stepper';\nexport type { StepperProps, Step } from './components/Stepper';\n\nexport { Divider } from './components/Divider';\nexport type { DividerProps } from './components/Divider';\n\nexport { FileUpload } from './components/FileUpload';\nexport type { FileUploadProps } from './components/FileUpload';\n\nexport { ThemeProvider, useTheme } from './theme/ThemeProvider';\nexport type { ColorMode } from './theme/ThemeProvider';\nexport { themes } from './theme/themes';\nexport type { ThemeName, Theme, ButtonTheme, SelectTheme } from './theme/themes';\n\nexport { themeScript, getThemeScript } from './utils/theme-script';\n\nexport * from './icons';\n","\"use client\";\n\nimport React, { createContext, useContext, useState, useEffect } from 'react';\nimport { themes, ThemeName, Theme } from './themes';\n\nexport type ColorMode = 'light' | 'dark' | 'system';\n\ninterface ThemeContextValue {\n theme: Theme;\n themeName: ThemeName;\n setTheme: (themeName: ThemeName) => void;\n colorMode: ColorMode;\n setColorMode: (mode: ColorMode) => void;\n toggleColorMode: () => void;\n resolvedColorMode: 'light' | 'dark';\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n\n // Return default values if no ThemeProvider is present (graceful fallback)\n if (!context) {\n const warnOnce = () => {\n if (process.env.NODE_ENV === 'development') {\n console.warn('useTheme: Component used outside ThemeProvider. Using default theme. Wrap your app with <ThemeProvider> for full functionality.');\n }\n };\n\n return {\n theme: themes.default,\n themeName: 'default' as ThemeName,\n setTheme: () => warnOnce(),\n colorMode: 'light' as ColorMode,\n setColorMode: () => warnOnce(),\n toggleColorMode: () => warnOnce(),\n resolvedColorMode: 'light' as 'light' | 'dark',\n };\n }\n\n return context;\n}\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: ThemeName;\n defaultColorMode?: ColorMode;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme = 'default',\n defaultColorMode = 'system'\n}: ThemeProviderProps) {\n const [mounted, setMounted] = useState(false);\n\n // Initialize from defaults (will sync with actual values after mount)\n const [themeName, setThemeNameState] = useState<ThemeName>(defaultTheme);\n const [colorMode, setColorModeState] = useState<ColorMode>(defaultColorMode);\n const [resolvedColorMode, setResolvedColorMode] = useState<'light' | 'dark'>('light');\n\n // Sync with actual values after mount to avoid hydration mismatch\n useEffect(() => {\n setMounted(true);\n\n // Read actual values from localStorage and DOM\n const storedTheme = localStorage.getItem('lite-ui-theme') as ThemeName;\n const storedColorMode = localStorage.getItem('lite-ui-color-mode') as ColorMode;\n const currentColorMode = document.documentElement.getAttribute('data-color-mode') as 'light' | 'dark';\n\n if (storedTheme) setThemeNameState(storedTheme);\n if (storedColorMode) setColorModeState(storedColorMode);\n if (currentColorMode) setResolvedColorMode(currentColorMode);\n }, []);\n\n const theme = themes[themeName];\n\n // Update theme\n const setTheme = (newThemeName: ThemeName) => {\n setThemeNameState(newThemeName);\n if (typeof window !== 'undefined') {\n localStorage.setItem('lite-ui-theme', newThemeName);\n document.documentElement.setAttribute('data-theme', newThemeName);\n }\n };\n\n // Update color mode\n const setColorMode = (mode: ColorMode) => {\n if (typeof window === 'undefined') return;\n\n setColorModeState(mode);\n localStorage.setItem('lite-ui-color-mode', mode);\n\n let resolved: 'light' | 'dark';\n if (mode === 'system') {\n resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n } else {\n resolved = mode;\n }\n\n setResolvedColorMode(resolved);\n document.documentElement.setAttribute('data-color-mode', resolved);\n\n if (resolved === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n };\n\n // Toggle between light and dark mode\n const toggleColorMode = () => {\n if (colorMode === 'system') {\n // If currently system, toggle to opposite of current resolved mode\n setColorMode(resolvedColorMode === 'dark' ? 'light' : 'dark');\n } else {\n // Toggle between light and dark\n setColorMode(colorMode === 'dark' ? 'light' : 'dark');\n }\n };\n\n // Listen for system theme changes\n useEffect(() => {\n if (!mounted) return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = (e: MediaQueryListEvent) => {\n if (colorMode === 'system') {\n const resolved = e.matches ? 'dark' : 'light';\n setResolvedColorMode(resolved);\n document.documentElement.setAttribute('data-color-mode', resolved);\n\n if (resolved === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [mounted, colorMode]);\n\n return (\n <ThemeContext.Provider value={{\n theme,\n themeName,\n setTheme,\n colorMode,\n setColorMode,\n toggleColorMode,\n resolvedColorMode\n }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n","export type ThemeName = 'default' | 'minimalistic';\n\nexport interface ButtonTheme {\n primary: string;\n secondary: string;\n success: string;\n danger: string;\n warning: string;\n info: string;\n}\n\nexport interface SelectTheme {\n base: string;\n sizes: {\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n disabled: string;\n}\n\nexport interface Theme {\n name: ThemeName;\n button: {\n base: string;\n variants: ButtonTheme;\n sizes: {\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n disabled: string;\n };\n select: SelectTheme;\n}\n\nexport const themes: Record<ThemeName, Theme> = {\n default: {\n name: 'default',\n button: {\n base: 'font-semibold rounded-lg transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 active:scale-95 gap-2',\n variants: {\n primary: 'bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white shadow-sm hover:shadow-md dark:bg-blue-500 dark:hover:bg-blue-600 dark:active:bg-blue-700',\n secondary: 'bg-gray-600 hover:bg-gray-700 active:bg-gray-800 text-white shadow-sm hover:shadow-md dark:bg-gray-500 dark:hover:bg-gray-600 dark:active:bg-gray-700',\n success: 'bg-green-600 hover:bg-green-700 active:bg-green-800 text-white shadow-sm hover:shadow-md dark:bg-green-500 dark:hover:bg-green-600 dark:active:bg-green-700',\n danger: 'bg-red-600 hover:bg-red-700 active:bg-red-800 text-white shadow-sm hover:shadow-md dark:bg-red-500 dark:hover:bg-red-600 dark:active:bg-red-700',\n warning: 'bg-yellow-500 hover:bg-yellow-600 active:bg-yellow-700 text-white shadow-sm hover:shadow-md dark:bg-yellow-400 dark:hover:bg-yellow-500 dark:active:bg-yellow-600',\n info: 'bg-cyan-600 hover:bg-cyan-700 active:bg-cyan-800 text-white shadow-sm hover:shadow-md dark:bg-cyan-500 dark:hover:bg-cyan-600 dark:active:bg-cyan-700',\n },\n sizes: {\n sm: 'px-3 py-1.5 text-sm min-h-[30px]',\n md: 'px-4 py-2 text-base min-h-[38px]',\n lg: 'px-6 py-3 text-lg min-h-[48px]',\n xl: 'px-8 py-4 text-xl min-h-[60px]',\n },\n disabled: 'opacity-50 cursor-not-allowed hover:shadow-sm active:scale-100',\n },\n select: {\n base: 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 text-left transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 pr-10 cursor-pointer dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500',\n sizes: {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n xl: 'px-5 py-4 text-xl',\n },\n disabled: 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900',\n },\n },\n minimalistic: {\n name: 'minimalistic',\n button: {\n base: 'font-normal rounded-none transition-colors duration-200 focus:outline-none border-2 gap-2',\n variants: {\n primary: 'bg-transparent border-white text-white hover:bg-white hover:text-black',\n secondary: 'bg-transparent border-gray-400 text-gray-400 hover:bg-gray-400 hover:text-black',\n success: 'bg-transparent border-green-400 text-green-400 hover:bg-green-400 hover:text-black',\n danger: 'bg-transparent border-red-400 text-red-400 hover:bg-red-400 hover:text-black',\n warning: 'bg-transparent border-yellow-400 text-yellow-400 hover:bg-yellow-400 hover:text-black',\n info: 'bg-transparent border-blue-400 text-blue-400 hover:bg-blue-400 hover:text-black',\n },\n sizes: {\n sm: 'px-4 py-2 text-sm uppercase tracking-wide min-h-[36px]',\n md: 'px-6 py-3 text-base uppercase tracking-wide min-h-[48px]',\n lg: 'px-8 py-4 text-lg uppercase tracking-wider min-h-[60px]',\n xl: 'px-10 py-5 text-xl uppercase tracking-wider min-h-[72px]',\n },\n disabled: 'opacity-30 cursor-not-allowed hover:bg-transparent',\n },\n select: {\n base: 'w-full appearance-none rounded-none border-2 border-white bg-transparent text-white text-left transition-colors duration-200 focus:outline-none pr-10 cursor-pointer placeholder:text-gray-500',\n sizes: {\n sm: 'px-4 py-2 text-sm uppercase tracking-wide',\n md: 'px-4 py-3 text-base uppercase tracking-wide',\n lg: 'px-4 py-4 text-lg uppercase tracking-wider',\n xl: 'px-5 py-5 text-xl uppercase tracking-wider',\n },\n disabled: 'opacity-30 cursor-not-allowed',\n },\n },\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n size?: 'sm' | 'md' | 'lg' | 'xl';\n children: React.ReactNode;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n className = '',\n children,\n disabled,\n leftIcon,\n rightIcon,\n iconOnly = false,\n ...props\n}) => {\n const { theme } = useTheme();\n\n const baseStyles = theme.button.base;\n const variantStyles = theme.button.variants[variant];\n const sizeStyles = theme.button.sizes[size];\n const disabledStyles = disabled ? theme.button.disabled : '';\n\n // Adjust padding for icon-only buttons - remove horizontal padding and make square\n const iconOnlyStyles = iconOnly ? '!p-0 aspect-square' : '';\n\n const classes = `inline-flex items-center justify-center ${baseStyles} ${variantStyles} ${sizeStyles} ${disabledStyles} ${iconOnlyStyles} ${className}`.trim();\n\n return (\n <button\n className={classes}\n disabled={disabled}\n {...props}\n >\n {iconOnly ? (\n children\n ) : (\n <>\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children && <span className=\"inline-flex items-center\">{children}</span>}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'size' | 'onChange' | 'defaultValue'> {\n options: SelectOption[];\n size?: 'sm' | 'md' | 'lg' | 'xl';\n placeholder?: string;\n disabled?: boolean;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n label?: string;\n error?: string;\n helperText?: string;\n searchable?: boolean;\n searchPlaceholder?: string;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n options,\n size = 'md',\n placeholder,\n className = '',\n disabled,\n value: controlledValue,\n defaultValue,\n onChange,\n label,\n error,\n helperText,\n searchable = false,\n searchPlaceholder = 'Search...',\n ...props\n}) => {\n const { theme, themeName } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [searchQuery, setSearchQuery] = useState('');\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Find the selected option\n const selectedOption = options.find(opt => opt.value === value);\n const displayText = selectedOption ? selectedOption.label : placeholder || 'Select...';\n\n // Filter options based on search query\n const filteredOptions = searchable && searchQuery\n ? options.filter(option =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n const handleSelect = (optionValue: string) => {\n if (disabled) return;\n\n setInternalValue(optionValue);\n onChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n };\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const baseStyles = theme.select.base;\n const sizeStyles = theme.select.sizes[size];\n const disabledStyles = disabled ? theme.select.disabled : '';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n\n const buttonClasses = `${baseStyles} ${sizeStyles} ${disabledStyles} ${errorStyles}`.trim();\n\n // Icon color based on theme\n const iconColor = themeName === 'minimalistic'\n ? (disabled ? 'text-gray-600' : 'text-white')\n : (disabled ? 'text-gray-400' : 'text-gray-500');\n\n // Dropdown menu styles based on theme\n const dropdownBaseStyles = themeName === 'minimalistic'\n ? 'bg-black border-2 border-white'\n : 'bg-white border border-gray-300 shadow-lg dark:bg-gray-800 dark:border-gray-600';\n\n const optionBaseStyles = themeName === 'minimalistic'\n ? 'text-white hover:bg-white hover:text-black transition-colors duration-200'\n : 'text-gray-900 hover:bg-blue-50 transition-colors duration-150 dark:text-gray-100 dark:hover:bg-gray-700';\n\n const optionSizeStyles = {\n sm: 'px-4 py-2 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n xl: 'px-5 py-4 text-xl',\n }[size];\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative inline-block w-full\" ref={dropdownRef} {...props}>\n {/* Custom button that looks like select */}\n <button\n type=\"button\"\n className={buttonClasses}\n onClick={handleToggle}\n disabled={disabled}\n >\n <span className={!selectedOption && placeholder ? 'opacity-50' : ''}>\n {displayText}\n </span>\n </button>\n\n {/* Chevron icon */}\n <div className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-4\">\n <svg\n className={`h-5 w-5 transition-transform duration-200 ${iconColor} ${isOpen ? 'rotate-180' : ''}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n {/* Custom dropdown menu */}\n {isOpen && !disabled && (\n <div\n className={`absolute z-50 w-full mt-1 ${dropdownBaseStyles} rounded-lg overflow-hidden`}\n >\n {/* Search input */}\n {searchable && (\n <div className={`sticky top-0 ${themeName === 'minimalistic' ? 'bg-black border-b-2 border-white' : 'bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700'}`}>\n <input\n ref={searchInputRef}\n type=\"text\"\n className={`w-full ${optionSizeStyles} ${themeName === 'minimalistic' ? 'bg-black text-white placeholder-gray-600 focus:outline-none' : 'bg-transparent text-gray-900 dark:text-gray-100 placeholder-gray-400 focus:outline-none'}`}\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n {/* Options list */}\n <style>\n {`\n .select-dropdown-scroll {\n scrollbar-width: thin;\n scrollbar-color: rgba(156, 163, 175, 0.5) transparent;\n }\n .select-dropdown-scroll::-webkit-scrollbar {\n width: 8px;\n }\n .select-dropdown-scroll::-webkit-scrollbar-track {\n background: transparent;\n }\n .select-dropdown-scroll::-webkit-scrollbar-thumb {\n background-color: rgba(156, 163, 175, 0.5);\n border-radius: 4px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n .select-dropdown-scroll::-webkit-scrollbar-thumb:hover {\n background-color: rgba(156, 163, 175, 0.7);\n }\n .dark .select-dropdown-scroll {\n scrollbar-color: rgba(75, 85, 99, 0.6) transparent;\n }\n .dark .select-dropdown-scroll::-webkit-scrollbar-thumb {\n background-color: rgba(75, 85, 99, 0.6);\n }\n .dark .select-dropdown-scroll::-webkit-scrollbar-thumb:hover {\n background-color: rgba(75, 85, 99, 0.8);\n }\n `}\n </style>\n <div\n className=\"select-dropdown-scroll\"\n style={{ maxHeight: '300px', overflowY: 'auto' }}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <div\n key={option.value}\n className={`${optionBaseStyles} ${optionSizeStyles} cursor-pointer ${\n value === option.value ? (themeName === 'minimalistic' ? 'bg-white text-black' : 'bg-blue-50 dark:bg-gray-700') : ''\n }`}\n onClick={() => handleSelect(option.value)}\n >\n {option.label}\n </div>\n ))\n ) : (\n <div className={`${optionSizeStyles} ${themeName === 'minimalistic' ? 'text-gray-500' : 'text-gray-500 dark:text-gray-400'} text-center`}>\n No results found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n showCloseButton?: boolean;\n}\n\nconst sizeClasses = {\n sm: 'max-w-md',\n md: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n size = 'md',\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n // Prevent body scroll when modal is open\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'unset';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const sizeClass = sizeClasses[size];\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm transition-all duration-200\"\n onClick={onClose}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n <div\n className={`relative w-full ${sizeClass} bg-white dark:bg-gray-800 rounded-lg shadow-2xl transform transition-all duration-200 scale-100 animate-in`}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700\">\n {title && (\n <h3 id=\"modal-title\" className=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n {title}\n </h3>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n aria-label=\"Close modal\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n sticky?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n logo,\n children,\n className = '',\n sticky = false,\n}) => {\n const { theme } = useTheme();\n\n const baseClasses = sticky ? 'sticky top-0 z-40' : '';\n\n return (\n <nav className={`bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${baseClasses} ${className}`}>\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between items-center h-16\">\n {logo && (\n <div className=\"flex items-center\">\n {logo}\n </div>\n )}\n {children && (\n <div className=\"flex items-center gap-6\">\n {children}\n </div>\n )}\n </div>\n </div>\n </nav>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SidebarProps {\n children: React.ReactNode;\n className?: string;\n width?: 'sm' | 'md' | 'lg';\n position?: 'left' | 'right';\n}\n\nconst widthClasses = {\n sm: 'w-48',\n md: 'w-64',\n lg: 'w-80',\n};\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n children,\n className = '',\n width = 'md',\n position = 'left',\n}) => {\n const { theme } = useTheme();\n const widthClass = widthClasses[width];\n const borderClass = position === 'left' ? 'border-r' : 'border-l';\n\n return (\n <aside\n className={`${widthClass} bg-white dark:bg-gray-800 ${borderClass} border-gray-200 dark:border-gray-700 h-full overflow-y-auto ${className}`}\n >\n {children}\n </aside>\n );\n};\n","\"use client\";\n\nimport React, { createContext, useContext, useState, ReactNode } from 'react';\n\nexport interface SidebarContextValue {\n isOpen: boolean;\n isMobile: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setIsMobile: (isMobile: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | undefined>(undefined);\n\nexport interface SidebarProviderProps {\n children: ReactNode;\n defaultOpen?: boolean;\n}\n\nexport const SidebarProvider: React.FC<SidebarProviderProps> = ({\n children,\n defaultOpen = false,\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [isMobile, setIsMobile] = useState(false);\n\n const open = () => setIsOpen(true);\n const close = () => setIsOpen(false);\n const toggle = () => setIsOpen(prev => !prev);\n\n const value: SidebarContextValue = {\n isOpen,\n isMobile,\n open,\n close,\n toggle,\n setIsMobile,\n };\n\n return (\n <SidebarContext.Provider value={value}>\n {children}\n </SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = (): SidebarContextValue => {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { MenuIcon } from '../icons';\n\nexport interface AppShellProps {\n children: React.ReactNode;\n navbar?: {\n content: React.ReactNode;\n width?: 'sm' | 'md' | 'lg';\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl';\n position?: 'side' | 'top';\n };\n header?: React.ReactNode;\n navbarTitle?: string;\n navbarLogo?: React.ReactNode;\n defaultNavbarOpen?: boolean;\n responsive?: boolean;\n className?: string;\n}\n\nconst widthClasses = {\n sm: 'w-48',\n md: 'w-64',\n lg: 'w-80',\n};\n\nconst breakpointClasses = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n};\n\nexport const AppShell: React.FC<AppShellProps> = ({\n children,\n navbar,\n header,\n navbarTitle,\n navbarLogo,\n defaultNavbarOpen = false,\n responsive = true,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [isMobileNavbarOpen, setIsMobileNavbarOpen] = useState(defaultNavbarOpen);\n\n const navbarWidth = navbar?.width || 'md';\n const navbarBreakpoint = navbar?.breakpoint || 'md';\n const navbarPosition = navbar?.position || 'side';\n const widthClass = widthClasses[navbarWidth];\n const breakpoint = breakpointClasses[navbarBreakpoint];\n\n // Non-responsive mode: always show sidebar\n if (!responsive && navbar) {\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <div className=\"flex flex-1\">\n <aside className={`${widthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 h-full overflow-y-auto`}>\n {navbar.content}\n </aside>\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // Non-responsive mode without navbar\n if (!responsive) {\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n }\n\n // Responsive mode with TOP navbar\n if (navbar && navbarPosition === 'top') {\n const mobileMenuClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n const desktopNavClass = navbarBreakpoint === 'sm' ? 'sm:flex' :\n navbarBreakpoint === 'md' ? 'md:flex' :\n navbarBreakpoint === 'lg' ? 'lg:flex' : 'xl:flex';\n\n return (\n <div className={`min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`}>\n {/* Top Navbar */}\n <nav className=\"sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between items-center h-16\">\n {/* Logo/Title */}\n <div className=\"flex items-center\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n </div>\n\n {/* Desktop Navigation - Hidden on Mobile */}\n <div className={`hidden ${desktopNavClass} items-center gap-6`}>\n {navbar.content}\n </div>\n\n {/* Mobile Hamburger - Visible on Mobile */}\n <button\n className={`${mobileMenuClass} p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors`}\n onClick={() => setIsMobileNavbarOpen(!isMobileNavbarOpen)}\n aria-label=\"Toggle menu\"\n >\n <MenuIcon size=\"md\" />\n </button>\n </div>\n </div>\n </nav>\n\n {/* Header (optional, shows below top navbar) */}\n {header && <div className=\"w-full\">{header}</div>}\n\n {/* Mobile Drawer */}\n {isMobileNavbarOpen && (\n <>\n <div\n className={`${mobileMenuClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`}\n onClick={() => setIsMobileNavbarOpen(false)}\n />\n <div className={`${mobileMenuClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`}>\n <div className=\"p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(false)}\n aria-label=\"Close menu\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div\n className=\"p-4 flex flex-col gap-4\"\n onClick={() => setIsMobileNavbarOpen(false)}\n >\n {navbar.content}\n </div>\n </div>\n </>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n }\n\n // Responsive mode with SIDE navbar\n if (navbar) {\n // Build breakpoint classes statically\n const mobileHeaderClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n const desktopNavbarClass = navbarBreakpoint === 'sm' ? 'sm:block' :\n navbarBreakpoint === 'md' ? 'md:block' :\n navbarBreakpoint === 'lg' ? 'lg:block' : 'xl:block';\n\n const mobileDrawerClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n // Build width classes statically (Tailwind can't use dynamic classes)\n const sidebarWidthClass = navbarWidth === 'sm' ? 'w-48' :\n navbarWidth === 'lg' ? 'w-80' : 'w-64';\n\n return (\n <div className={`min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`}>\n {/* Mobile Header - Hidden on Desktop */}\n <div className={`${mobileHeaderClass} sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-3 flex items-center justify-between`}>\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(!isMobileNavbarOpen)}\n aria-label=\"Toggle menu\"\n >\n <MenuIcon size=\"md\" />\n </button>\n </div>\n\n {/* Header (optional, shows on all screen sizes) */}\n {header && <div className=\"w-full\">{header}</div>}\n\n {/* Main Layout */}\n <div className=\"flex flex-1 min-h-0\">\n {/* Desktop Navbar - Hidden on Mobile */}\n <aside className={`hidden ${desktopNavbarClass} ${sidebarWidthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 overflow-y-auto shrink-0`}>\n {navbar.content}\n </aside>\n\n {/* Mobile Drawer Overlay */}\n {isMobileNavbarOpen && (\n <>\n <div\n className={`${mobileDrawerClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`}\n onClick={() => setIsMobileNavbarOpen(false)}\n />\n <div className={`${mobileDrawerClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`}>\n <div className=\"p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(false)}\n aria-label=\"Close menu\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div\n className=\"overflow-y-auto h-[calc(100vh-73px)]\"\n onClick={() => setIsMobileNavbarOpen(false)}\n >\n {navbar.content}\n </div>\n </div>\n </>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto min-h-screen\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // Responsive mode without navbar\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface IconProps {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n color?: string;\n}\n\nconst sizeClasses = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n xl: 'w-8 h-8',\n};\n\nexport interface IconComponent extends React.FC<IconProps> {\n displayName?: string;\n}\n\nexport const createIcon = (\n displayName: string,\n path: React.ReactNode,\n filled = false\n): IconComponent => {\n const Icon: IconComponent = ({ size = 'md', className = '', color = 'currentColor' }) => {\n const sizeClass = sizeClasses[size];\n return (\n <svg\n className={`${sizeClass} ${className}`}\n fill={filled ? color : \"none\"}\n viewBox=\"0 0 24 24\"\n stroke={filled ? \"none\" : color}\n aria-hidden=\"true\"\n >\n {path}\n </svg>\n );\n };\n Icon.displayName = displayName;\n return Icon;\n};\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const HomeIcon = createIcon(\n 'HomeIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const UserIcon = createIcon(\n 'UserIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SearchIcon = createIcon(\n 'SearchIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const BellIcon = createIcon(\n 'BellIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SettingsIcon = createIcon(\n 'SettingsIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </>\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const MenuIcon = createIcon(\n 'MenuIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6h16M4 12h16M4 18h16\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CloseIcon = createIcon(\n 'CloseIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronDownIcon = createIcon(\n 'ChevronDownIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronRightIcon = createIcon(\n 'ChevronRightIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CheckIcon = createIcon(\n 'CheckIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const PlusIcon = createIcon(\n 'PlusIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const TrashIcon = createIcon(\n 'TrashIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const EditIcon = createIcon(\n 'EditIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const MailIcon = createIcon(\n 'MailIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const StarIcon = createIcon(\n 'StarIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const HeartIcon = createIcon(\n 'HeartIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const DownloadIcon = createIcon(\n 'DownloadIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const UploadIcon = createIcon(\n 'UploadIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CameraIcon = createIcon(\n 'CameraIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\" />\n </>\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const LockIcon = createIcon(\n 'LockIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CalendarIcon = createIcon(\n 'CalendarIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const GoogleIcon = createIcon(\n 'GoogleIcon',\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const GitHubIcon = createIcon(\n 'GitHubIcon',\n <path d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const TwitterIcon = createIcon(\n 'TwitterIcon',\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const FacebookIcon = createIcon(\n 'FacebookIcon',\n <path d=\"M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const AppleIcon = createIcon(\n 'AppleIcon',\n <path d=\"M17.05 20.28c-.98.95-2.05.88-3.08.4-1.09-.5-2.08-.48-3.24 0-1.44.62-2.2.44-3.06-.4C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const LinkedInIcon = createIcon(\n 'LinkedInIcon',\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const YouTubeIcon = createIcon(\n 'YouTubeIcon',\n <path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SlackIcon = createIcon(\n 'SlackIcon',\n <path d=\"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z\" />,\n true\n);\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n position?: 'left' | 'right' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n showCloseButton?: boolean;\n}\n\nconst sizeClasses = {\n left: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n },\n right: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n },\n top: {\n sm: 'h-48',\n md: 'h-64',\n lg: 'h-80',\n },\n bottom: {\n sm: 'h-48',\n md: 'h-64',\n lg: 'h-80',\n },\n};\n\nconst positionClasses = {\n left: 'left-0 top-0 h-full',\n right: 'right-0 top-0 h-full',\n top: 'top-0 left-0 w-full',\n bottom: 'bottom-0 left-0 w-full',\n};\n\nconst slideClasses = {\n left: 'transform transition-transform duration-300',\n right: 'transform transition-transform duration-300',\n top: 'transform transition-transform duration-300',\n bottom: 'transform transition-transform duration-300',\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n title,\n children,\n position = 'right',\n size = 'md',\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'unset';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const sizeClass = sizeClasses[position][size];\n const positionClass = positionClasses[position];\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-40 bg-black/60 backdrop-blur-sm transition-all duration-200\"\n onClick={onClose}\n />\n\n {/* Drawer */}\n <div\n className={`fixed z-50 ${positionClass} ${sizeClass} bg-white dark:bg-gray-800 shadow-2xl overflow-hidden flex flex-col ${slideClasses[position]}`}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700\">\n {title && (\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n {title}\n </h3>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n aria-label=\"Close drawer\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 p-6 overflow-y-auto\">\n {children}\n </div>\n </div>\n </>\n );\n};\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nconst sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n};\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n fullWidth = false,\n leftIcon,\n rightIcon,\n className = '',\n disabled,\n ...props\n },\n ref\n ) => {\n const { theme, themeName } = useTheme();\n\n const baseStyles = theme.select?.base || 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const sizeStyle = sizeClasses[size];\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n const widthStyle = fullWidth ? 'w-full' : '';\n const paddingWithIcon = leftIcon ? 'pl-10' : rightIcon ? 'pr-10' : '';\n\n return (\n <div className={`${widthStyle} ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && (\n <div className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500\">\n {leftIcon}\n </div>\n )}\n <input\n ref={ref}\n className={`${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithIcon}`.trim()}\n disabled={disabled}\n {...props}\n />\n {rightIcon && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500\">\n {rightIcon}\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n }\n);\n\nTextInput.displayName = 'TextInput';\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface NumberInputProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: number;\n onChange?: (value: number | undefined) => void;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n disabled?: boolean;\n hideControls?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n};\n\nexport const NumberInput: React.FC<NumberInputProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n min,\n max,\n step = 1,\n precision,\n disabled = false,\n hideControls = false,\n size = 'md',\n fullWidth = false,\n placeholder,\n className = '',\n}) => {\n const { theme } = useTheme();\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n if (precision !== undefined) {\n clamped = parseFloat(clamped.toFixed(precision));\n }\n return clamped;\n };\n\n const handleIncrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = clampValue(currentValue + step);\n onChange?.(newValue);\n };\n\n const handleDecrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = clampValue(currentValue - step);\n onChange?.(newValue);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n\n if (inputValue === '' || inputValue === '-') {\n onChange?.(undefined);\n return;\n }\n\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n const clamped = clampValue(numValue);\n onChange?.(clamped);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const sizeStyle = sizeClasses[size];\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n const widthStyle = fullWidth ? 'w-full' : '';\n const paddingWithControls = !hideControls ? 'pr-8' : '';\n\n const displayValue = value !== undefined ? value.toString() : '';\n\n return (\n <div className={`${widthStyle} ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={inputRef}\n type=\"number\"\n value={displayValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n placeholder={placeholder}\n min={min}\n max={max}\n step={step}\n className={`${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithControls} [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`.trim()}\n />\n {!hideControls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col\">\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={disabled || (max !== undefined && value !== undefined && value >= max)}\n className=\"px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed\"\n tabIndex={-1}\n >\n <svg className=\"w-3 h-3 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={disabled || (min !== undefined && value !== undefined && value <= min)}\n className=\"px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed\"\n tabIndex={-1}\n >\n <svg className=\"w-3 h-3 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n\nNumberInput.displayName = 'NumberInput';\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport type ActionMenuItem = {\n type?: 'item';\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n variant?: 'default' | 'danger';\n} | {\n type: 'divider';\n};\n\nexport interface ActionMenuProps {\n items: ActionMenuItem[];\n trigger?: React.ReactNode;\n position?: 'left' | 'right';\n placement?: 'top' | 'bottom' | 'left' | 'right';\n}\n\nexport const ActionMenu: React.FC<ActionMenuProps> = ({\n items,\n trigger,\n position = 'right',\n placement = 'bottom',\n}) => {\n const { themeName } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState<{ top: number; left: number } | null>(null);\n const [mounted, setMounted] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node) &&\n triggerRef.current && !triggerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n const menuWidth = 224; // 14rem\n const menuHeight = 300; // Approximate max height\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'top':\n top = rect.top - menuHeight - spacing;\n left = position === 'left' ? rect.left : rect.right - menuWidth;\n break;\n case 'bottom':\n top = rect.bottom + spacing;\n left = position === 'left' ? rect.left : rect.right - menuWidth;\n break;\n case 'left':\n top = rect.top;\n left = rect.left - menuWidth - spacing;\n break;\n case 'right':\n top = rect.top;\n left = rect.right + spacing;\n break;\n }\n\n setMenuPosition({ top, left });\n } else {\n setMenuPosition(null);\n }\n }, [isOpen, position, placement]);\n\n const handleItemClick = (item: ActionMenuItem) => {\n if (item.type === 'divider') return;\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n }\n };\n\n const defaultTrigger = (\n <button\n className=\"p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n aria-label=\"Open menu\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z\" />\n </svg>\n </button>\n );\n\n const menuBaseStyles = themeName === 'minimalistic'\n ? 'bg-black border-2 border-white'\n : 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-lg';\n\n const itemBaseStyles = themeName === 'minimalistic'\n ? 'text-white hover:bg-white hover:text-black transition-colors duration-200'\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors';\n\n const menu = isOpen && mounted && menuPosition ? (\n <div\n ref={menuRef}\n className={`fixed w-56 rounded-lg ${menuBaseStyles} z-[9999] max-h-[80vh] overflow-auto`}\n style={{\n minWidth: '14rem',\n top: `${menuPosition.top}px`,\n left: `${menuPosition.left}px`,\n }}\n >\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return (\n <div\n key={index}\n className=\"my-1 border-t border-gray-200 dark:border-gray-700\"\n />\n );\n }\n\n return (\n <button\n key={index}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={`w-full text-left px-4 py-3 flex items-center gap-3 ${itemBaseStyles} ${\n item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'\n } ${\n item.variant === 'danger' ? 'text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20' : ''\n }`}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n </button>\n );\n })}\n </div>\n ) : null;\n\n return (\n <>\n <div className=\"relative inline-block\" ref={triggerRef}>\n <div onClick={() => setIsOpen(!isOpen)}>\n {trigger || defaultTrigger}\n </div>\n </div>\n {mounted && createPortal(menu, document.body)}\n </>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n className?: string;\n padding?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n};\n\nexport const Card: React.FC<CardProps> = ({\n children,\n className = '',\n padding = 'md',\n hover = false,\n ...props\n}) => {\n const { theme } = useTheme();\n\n const paddingClass = paddingClasses[padding];\n const hoverClass = hover\n ? 'hover:shadow-xl hover:scale-[1.02] hover:border-blue-400 dark:hover:border-blue-500 cursor-pointer transition-all duration-200 ease-in-out'\n : '';\n\n return (\n <div\n className={`bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 ${paddingClass} ${hoverClass} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface AlertProps {\n variant?: 'info' | 'success' | 'warning' | 'error';\n title?: string;\n children: React.ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst variantStyles = {\n info: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100',\n success: 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-900 dark:text-yellow-100',\n error: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-900 dark:text-red-100',\n};\n\nconst iconStyles = {\n info: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n error: 'text-red-600 dark:text-red-400',\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n children,\n onClose,\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const variantClass = variantStyles[variant];\n const iconClass = iconStyles[variant];\n\n return (\n <div className={`rounded-lg border p-4 ${variantClass} ${className}`} role=\"alert\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex-shrink-0 ${iconClass}`}>\n {variant === 'info' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'success' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'warning' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'error' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </div>\n <div className=\"flex-1\">\n {title && <h3 className=\"font-semibold mb-1\">{title}</h3>}\n <div className=\"text-sm\">{children}</div>\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className={`flex-shrink-0 ${iconClass} hover:opacity-70 transition-opacity`}\n aria-label=\"Close alert\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n error?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, error, className = '', disabled, checked, ...props }, ref) => {\n const { theme } = useTheme();\n\n return (\n <div className={className}>\n <label className=\"flex items-center gap-2 cursor-pointer group\">\n <div className=\"relative inline-flex items-center\">\n <input\n ref={ref}\n type=\"checkbox\"\n disabled={disabled}\n checked={checked}\n className=\"sr-only peer\"\n {...props}\n />\n <div className={`w-4 h-4 border-2 rounded transition-all duration-200 flex items-center justify-center\n ${error\n ? 'border-red-500 dark:border-red-500'\n : 'border-gray-300 dark:border-gray-600'\n }\n ${disabled\n ? 'opacity-50 cursor-not-allowed bg-gray-100 dark:bg-gray-800'\n : 'peer-hover:border-gray-400 dark:peer-hover:border-gray-500'\n }\n peer-checked:bg-blue-600 peer-checked:border-blue-600\n peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2\n `}>\n {/* Checkmark SVG */}\n <svg\n className={`w-3 h-3 text-white transition-opacity duration-200 ${\n checked ? 'opacity-100' : 'opacity-0'\n }`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3L4.5 8.5L2 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n {label && (\n <span className={`text-sm text-gray-700 dark:text-gray-300 ${disabled ? 'opacity-50 cursor-not-allowed' : 'group-hover:text-gray-900 dark:group-hover:text-gray-100'}`}>\n {label}\n </span>\n )}\n </label>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ label, size = 'md', className = '', disabled, checked, ...props }, ref) => {\n const { theme } = useTheme();\n\n // Use complete class strings for Tailwind\n const toggleClasses = {\n sm: {\n switch: 'w-9 h-5',\n thumb: 'w-4 h-4 peer-checked:translate-x-4',\n },\n md: {\n switch: 'w-11 h-6',\n thumb: 'w-5 h-5 peer-checked:translate-x-5',\n },\n lg: {\n switch: 'w-14 h-7',\n thumb: 'w-6 h-6 peer-checked:translate-x-7',\n },\n };\n\n const currentSize = toggleClasses[size];\n\n return (\n <label className={`inline-flex items-center gap-3 cursor-pointer ${disabled ? 'opacity-50 cursor-not-allowed' : ''} ${className}`}>\n <div className=\"relative\">\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"sr-only peer\"\n disabled={disabled}\n checked={checked}\n {...props}\n />\n <div\n className={`${currentSize.switch} bg-gray-300 dark:bg-gray-700 peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 dark:peer-checked:bg-blue-500 transition-colors`}\n ></div>\n <div\n className={`${currentSize.thumb} bg-white rounded-full shadow-md absolute top-0.5 left-0.5 transition-transform`}\n ></div>\n </div>\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface BadgeProps {\n children: React.ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst variantStyles = {\n default: 'bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200',\n primary: 'bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200',\n success: 'bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-200',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-200',\n error: 'bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-200',\n info: 'bg-cyan-100 dark:bg-cyan-900/30 text-cyan-800 dark:text-cyan-200',\n};\n\nconst sizeStyles = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'md',\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const variantClass = variantStyles[variant];\n const sizeClass = sizeStyles[size];\n\n return (\n <span className={`inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`}>\n {children}\n </span>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SpinnerProps {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n color?: 'primary' | 'secondary' | 'white';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'w-4 h-4 border-2',\n md: 'w-8 h-8 border-2',\n lg: 'w-12 h-12 border-3',\n xl: 'w-16 h-16 border-4',\n};\n\nconst colorClasses = {\n primary: 'border-blue-600 border-t-transparent',\n secondary: 'border-gray-600 border-t-transparent',\n white: 'border-white border-t-transparent',\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color = 'primary',\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const sizeClass = sizeClasses[size];\n const colorClass = colorClasses[color];\n\n return (\n <div\n className={`inline-block rounded-full animate-spin ${sizeClass} ${colorClass} ${className}`}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface Tab {\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n defaultIndex?: number;\n onChange?: (index: number) => void;\n className?: string;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n defaultIndex = 0,\n onChange,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [activeIndex, setActiveIndex] = useState(defaultIndex);\n\n const handleTabClick = (index: number) => {\n if (tabs[index].disabled) return;\n setActiveIndex(index);\n onChange?.(index);\n };\n\n return (\n <div className={className}>\n {/* Tab Headers */}\n <div className=\"border-b border-gray-200 dark:border-gray-700\">\n <nav className=\"flex gap-8 px-6\" aria-label=\"Tabs\">\n {tabs.map((tab, index) => (\n <button\n key={index}\n onClick={() => handleTabClick(index)}\n disabled={tab.disabled}\n className={`py-4 px-1 border-b-2 font-medium text-sm transition-colors ${\n activeIndex === index\n ? 'border-blue-600 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:border-gray-300 dark:hover:border-gray-600'\n } ${tab.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n aria-current={activeIndex === index ? 'page' : undefined}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab Content */}\n <div>\n {tabs[activeIndex]?.content}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface Column<T = any> {\n key: string;\n title: string;\n render?: (value: any, row: T, index: number) => React.ReactNode;\n width?: string;\n}\n\nexport interface TableProps<T = any> {\n columns: Column<T>[];\n data: T[];\n keyField?: string;\n striped?: boolean;\n hoverable?: boolean;\n className?: string;\n}\n\nexport function Table<T extends Record<string, any>>({\n columns,\n data,\n keyField = 'id',\n striped = false,\n hoverable = true,\n className = '',\n}: TableProps<T>) {\n const { theme } = useTheme();\n\n return (\n <div className={`overflow-x-auto ${className}`}>\n <table className=\"w-full text-left\">\n <thead className=\"bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <tr>\n {columns.map((column, colIndex) => {\n const isLast = colIndex === columns.length - 1;\n return (\n <th\n key={column.key}\n className={\n isLast\n ? 'px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider relative'\n : 'px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'\n }\n style={{ width: column.width }}\n >\n {column.title}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700\">\n {data.map((row, rowIndex) => {\n const rowClasses = [\n striped && rowIndex % 2 === 1 ? 'bg-gray-50 dark:bg-gray-800/50' : '',\n hoverable ? 'hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors' : ''\n ].filter(Boolean).join(' ');\n\n return (\n <tr\n key={row[keyField] || rowIndex}\n className={rowClasses}\n >\n {columns.map((column, colIndex) => {\n const isLast = colIndex === columns.length - 1;\n return (\n <td\n key={column.key}\n className={\n isLast\n ? 'px-6 py-4 text-sm text-gray-900 dark:text-gray-100 overflow-visible'\n : 'px-6 py-4 text-sm text-gray-900 dark:text-gray-100'\n }\n >\n {column.render\n ? column.render(row[column.key], row, rowIndex)\n : row[column.key]}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n {data.length === 0 && (\n <div className=\"text-center py-8 text-gray-500 dark:text-gray-400\">\n No data available\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n className?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const range = (start: number, end: number) => {\n const length = end - start + 1;\n return Array.from({ length }, (_, idx) => idx + start);\n };\n\n const paginationRange = () => {\n const totalPageNumbers = siblingCount + 5;\n\n if (totalPageNumbers >= totalPages) {\n return range(1, totalPages);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = 3 + 2 * siblingCount;\n const leftRange = range(1, leftItemCount);\n return [...leftRange, '...', totalPages];\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = 3 + 2 * siblingCount;\n const rightRange = range(totalPages - rightItemCount + 1, totalPages);\n return [firstPageIndex, '...', ...rightRange];\n }\n\n if (shouldShowLeftDots && shouldShowRightDots) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\n }\n\n return range(1, totalPages);\n };\n\n const pages = paginationRange();\n\n return (\n <nav className={`flex items-center gap-1 ${className}`} aria-label=\"Pagination\">\n {/* Previous Button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label=\"Previous page\"\n >\n Previous\n </button>\n\n {/* Page Numbers */}\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <span\n key={`dots-${index}`}\n className=\"px-3 py-2 text-gray-700 dark:text-gray-300\"\n >\n ...\n </span>\n );\n }\n\n return (\n <button\n key={page}\n onClick={() => onPageChange(page as number)}\n className={`px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n currentPage === page\n ? 'bg-blue-600 text-white'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800'\n }`}\n aria-label={`Page ${page}`}\n aria-current={currentPage === page ? 'page' : undefined}\n >\n {page}\n </button>\n );\n })}\n\n {/* Next Button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label=\"Next page\"\n >\n Next\n </button>\n </nav>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DatePickerProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n minDate,\n maxDate,\n disabled,\n className = '',\n placeholder = 'Select date...',\n}) => {\n const { theme } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [mounted, setMounted] = useState(false);\n const [calendarPosition, setCalendarPosition] = useState<{ top: number; left: number } | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (calendarRef.current && !calendarRef.current.contains(event.target as Node) &&\n inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setCalendarPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n } else {\n setCalendarPosition(null);\n }\n }, [isOpen]);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const calendarDays: Date[] = [];\n\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n const remainingDays = 42 - calendarDays.length;\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n onChange?.(date);\n setIsOpen(false);\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const today = new Date();\n setViewDate(today);\n onChange?.(today);\n setIsOpen(false);\n };\n\n const formatDate = (date?: Date) => {\n if (!date) return '';\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n const calendar = isOpen && mounted && calendarPosition ? (\n <div\n ref={calendarRef}\n className=\"fixed z-[9999] bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-xl p-4\"\n style={{\n top: `${calendarPosition.top}px`,\n left: `${calendarPosition.left}px`,\n minWidth: '320px',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Today\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div key={day} className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((date, index) => {\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-1 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n ) : null;\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div\n ref={inputRef}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim()}\n >\n <span className={!value ? 'text-gray-500 dark:text-gray-400' : ''}>\n {value ? formatDate(value) : placeholder}\n </span>\n <svg className=\"w-5 h-5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n {mounted && createPortal(calendar, document.body)}\n </div>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface TimePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n error?: string;\n helperText?: string;\n}\n\nexport const TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n ({ label, error, helperText, className = '', disabled, ...props }, ref) => {\n const { theme } = useTheme();\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n type=\"time\"\n disabled={disabled}\n className={`${baseStyles} ${errorStyles} ${disabledStyles}`.trim()}\n {...props}\n />\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n </div>\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DateTimePickerProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n minDate,\n maxDate,\n disabled,\n className = '',\n placeholder = 'Select date and time...',\n}) => {\n const { theme } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [selectedTime, setSelectedTime] = useState(\n value ? { hours: value.getHours(), minutes: value.getMinutes() } : { hours: 12, minutes: 0 }\n );\n const [mounted, setMounted] = useState(false);\n const [pickerPosition, setPickerPosition] = useState<{ top: number; left: number } | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const pickerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(event.target as Node) &&\n inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPickerPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n } else {\n setPickerPosition(null);\n }\n }, [isOpen]);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const calendarDays: Date[] = [];\n\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n const remainingDays = 42 - calendarDays.length;\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n const newDateTime = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n selectedTime.hours,\n selectedTime.minutes\n );\n onChange?.(newDateTime);\n };\n\n const handleTimeChange = (hours: number, minutes: number) => {\n setSelectedTime({ hours, minutes });\n if (value) {\n const newDateTime = new Date(\n value.getFullYear(),\n value.getMonth(),\n value.getDate(),\n hours,\n minutes\n );\n onChange?.(newDateTime);\n }\n };\n\n const handleDone = () => {\n if (value) {\n setIsOpen(false);\n }\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const now = new Date();\n setViewDate(now);\n setSelectedTime({ hours: now.getHours(), minutes: now.getMinutes() });\n onChange?.(now);\n };\n\n const formatDateTime = (date?: Date) => {\n if (!date) return '';\n return date.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n };\n\n const formatTime = (hours: number, minutes: number) => {\n const period = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${period}`;\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n const picker = isOpen && mounted && pickerPosition ? (\n <div\n ref={pickerRef}\n className=\"fixed z-[9999] bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-xl p-4\"\n style={{\n top: `${pickerPosition.top}px`,\n left: `${pickerPosition.left}px`,\n minWidth: '360px',\n }}\n >\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Now\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div key={day} className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1 mb-4\">\n {calendarDays.map((date, index) => {\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-1 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Time Picker */}\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-4\">\n <div className=\"flex items-center justify-center gap-4 mb-4\">\n {/* Hours */}\n <div className=\"flex flex-col items-center\">\n <label className=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2\">Hour</label>\n <div className=\"flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => handleTimeChange((selectedTime.hours + 1) % 24, selectedTime.minutes)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <input\n type=\"number\"\n min=\"0\"\n max=\"23\"\n value={selectedTime.hours}\n onChange={(e) => {\n const val = parseInt(e.target.value);\n if (!isNaN(val) && val >= 0 && val <= 23) {\n handleTimeChange(val, selectedTime.minutes);\n }\n }}\n className=\"w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n onClick={() => handleTimeChange((selectedTime.hours - 1 + 24) % 24, selectedTime.minutes)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <span className=\"text-2xl font-bold text-gray-600 dark:text-gray-400 mt-8\">:</span>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center\">\n <label className=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2\">Minute</label>\n <div className=\"flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => handleTimeChange(selectedTime.hours, (selectedTime.minutes + 1) % 60)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n value={selectedTime.minutes}\n onChange={(e) => {\n const val = parseInt(e.target.value);\n if (!isNaN(val) && val >= 0 && val <= 59) {\n handleTimeChange(selectedTime.hours, val);\n }\n }}\n className=\"w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n onClick={() => handleTimeChange(selectedTime.hours, (selectedTime.minutes - 1 + 60) % 60)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div className=\"text-center text-sm text-gray-600 dark:text-gray-400 mb-4\">\n {formatTime(selectedTime.hours, selectedTime.minutes)}\n </div>\n <button\n onClick={handleDone}\n className=\"w-full px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium\"\n >\n Done\n </button>\n </div>\n </div>\n ) : null;\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div\n ref={inputRef}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim()}\n >\n <span className={!value ? 'text-gray-500 dark:text-gray-400' : ''}>\n {value ? formatDateTime(value) : placeholder}\n </span>\n <svg className=\"w-5 h-5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n {mounted && createPortal(picker, document.body)}\n </div>\n );\n};\n\nDateTimePicker.displayName = 'DateTimePicker';\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CalendarProps {\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [currentDate, setCurrentDate] = useState(value || new Date());\n const [viewDate, setViewDate] = useState(value || new Date());\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n // Get first day of month and number of days\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n // Build calendar grid\n const calendarDays: (Date | null)[] = [];\n\n // Previous month days\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n // Next month days to fill grid\n const remainingDays = 42 - calendarDays.length; // 6 rows * 7 days\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n setCurrentDate(date);\n onChange?.(date);\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const today = new Date();\n setViewDate(today);\n setCurrentDate(today);\n onChange?.(today);\n };\n\n return (\n <div className={`bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4 ${className}`}>\n {/* Header with month/year and navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-3 py-1 text-sm bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Today\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div\n key={day}\n className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-2\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((date, index) => {\n if (!date) return <div key={index} />;\n\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-2 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface RadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioProps {\n name: string;\n options: RadioOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n name,\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n orientation = 'vertical',\n className = '',\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue || '');\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n const handleChange = (optionValue: string) => {\n if (disabled) return;\n setInternalValue(optionValue);\n onChange?.(optionValue);\n };\n\n const containerClass = orientation === 'horizontal'\n ? 'flex flex-wrap gap-4'\n : 'flex flex-col gap-2';\n\n return (\n <div className={`${containerClass} ${className}`} role=\"radiogroup\">\n {options.map((option) => {\n const isDisabled = disabled || option.disabled;\n const isChecked = value === option.value;\n const id = `${name}-${option.value}`;\n\n return (\n <label\n key={option.value}\n htmlFor={id}\n className={`flex items-center gap-2 cursor-pointer group ${\n isDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n >\n <div className=\"relative inline-flex items-center\">\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={() => handleChange(option.value)}\n disabled={isDisabled}\n className=\"sr-only peer\"\n />\n <div className={`w-4 h-4 rounded-full border-2 transition-all duration-200 flex items-center justify-center\n border-gray-300 dark:border-gray-600\n ${isDisabled\n ? 'bg-gray-100 dark:bg-gray-800'\n : 'peer-hover:border-gray-400 dark:peer-hover:border-gray-500'\n }\n ${isChecked\n ? 'border-blue-600 bg-white dark:bg-gray-900'\n : ''\n }\n peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2\n `}>\n {/* Inner dot */}\n <div className={`w-2 h-2 rounded-full bg-blue-600 transition-all duration-200 ${\n isChecked ? 'scale-100' : 'scale-0'\n }`} />\n </div>\n </div>\n <span className={`text-sm font-medium text-gray-900 dark:text-gray-300 ${\n !isDisabled && 'group-hover:text-gray-700 dark:group-hover:text-gray-100'\n }`}>\n {option.label}\n </span>\n </label>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n label?: string;\n className?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n size = 'md',\n variant = 'default',\n showLabel = false,\n label,\n className = '',\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n const variantClasses = {\n default: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-500 dark:bg-yellow-400',\n danger: 'bg-red-600 dark:bg-red-500',\n };\n\n return (\n <div className={`w-full ${className}`}>\n {(showLabel || label) && (\n <div className=\"flex justify-between items-center mb-1\">\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </span>\n )}\n {showLabel && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n )}\n <div\n className={`w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden ${sizeClasses[size]}`}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n <div\n className={`${sizeClasses[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\n\nexport interface SliderProps {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number) => void;\n disabled?: boolean;\n showValue?: boolean;\n label?: string;\n className?: string;\n // Range slider props\n range?: boolean;\n rangeValue?: [number, number];\n defaultRangeValue?: [number, number];\n onRangeChange?: (value: [number, number]) => void;\n}\n\nexport const Slider: React.FC<SliderProps> = ({\n value: controlledValue,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n disabled = false,\n showValue = false,\n label,\n className = '',\n range = false,\n rangeValue: controlledRangeValue,\n defaultRangeValue = [25, 75],\n onRangeChange,\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [internalRangeValue, setInternalRangeValue] = React.useState<[number, number]>(defaultRangeValue);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = React.useState<'min' | 'max' | null>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const rangeValue = controlledRangeValue !== undefined ? controlledRangeValue : internalRangeValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = Number(e.target.value);\n setInternalValue(newValue);\n onChange?.(newValue);\n };\n\n const handleRangeMouseDown = (e: React.MouseEvent, handle: 'min' | 'max') => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(handle);\n };\n\n const handleRangeMouseMove = (e: MouseEvent) => {\n if (!isDragging || !trackRef.current || disabled) return;\n\n const rect = trackRef.current.getBoundingClientRect();\n const percentage = Math.max(0, Math.min(100, ((e.clientX - rect.left) / rect.width) * 100));\n const newValue = Math.round((percentage / 100) * (max - min) / step) * step + min;\n\n if (isDragging === 'min') {\n const newMin = Math.min(newValue, rangeValue[1] - step);\n const newRange: [number, number] = [newMin, rangeValue[1]];\n setInternalRangeValue(newRange);\n onRangeChange?.(newRange);\n } else {\n const newMax = Math.max(newValue, rangeValue[0] + step);\n const newRange: [number, number] = [rangeValue[0], newMax];\n setInternalRangeValue(newRange);\n onRangeChange?.(newRange);\n }\n };\n\n const handleRangeMouseUp = () => {\n setIsDragging(null);\n };\n\n React.useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleRangeMouseMove);\n document.addEventListener('mouseup', handleRangeMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleRangeMouseMove);\n document.removeEventListener('mouseup', handleRangeMouseUp);\n };\n }\n }, [isDragging, rangeValue]);\n\n const percentage = ((value - min) / (max - min)) * 100;\n const minPercentage = ((rangeValue[0] - min) / (max - min)) * 100;\n const maxPercentage = ((rangeValue[1] - min) / (max - min)) * 100;\n\n if (range) {\n return (\n <div className={`w-full ${className}`}>\n {(label || showValue) && (\n <div className=\"flex justify-between items-center mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {rangeValue[0]} - {rangeValue[1]}\n </span>\n )}\n </div>\n )}\n <div className=\"relative h-10 flex items-center\" ref={trackRef}>\n {/* Background track */}\n <div className=\"absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full\" />\n\n {/* Filled track between handles */}\n <div\n className=\"absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none\"\n style={{\n left: `${minPercentage}%`,\n width: `${maxPercentage - minPercentage}%`,\n }}\n />\n\n {/* Min handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n style={{ left: `${minPercentage}%` }}\n onMouseDown={(e) => handleRangeMouseDown(e, 'min')}\n role=\"slider\"\n aria-label={`${label ? label + ' ' : ''}minimum value`}\n aria-valuemin={min}\n aria-valuemax={rangeValue[1]}\n aria-valuenow={rangeValue[0]}\n tabIndex={disabled ? -1 : 0}\n />\n\n {/* Max handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleRangeMouseDown(e, 'max')}\n role=\"slider\"\n aria-label={`${label ? label + ' ' : ''}maximum value`}\n aria-valuemin={rangeValue[0]}\n aria-valuemax={max}\n aria-valuenow={rangeValue[1]}\n tabIndex={disabled ? -1 : 0}\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className={`w-full ${className}`}>\n {(label || showValue) && (\n <div className=\"flex justify-between items-center mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {value}\n </span>\n )}\n </div>\n )}\n <div className=\"relative h-10 flex items-center\">\n {/* Background track */}\n <div className=\"absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full\" />\n\n {/* Filled track */}\n <div\n className=\"absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none\"\n style={{ width: `${percentage}%` }}\n />\n\n {/* Custom handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md pointer-events-none z-10\n ${disabled ? 'opacity-50' : ''}\n `}\n style={{ left: `${percentage}%` }}\n />\n\n {/* Input slider (invisible but functional) */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className=\"relative w-full h-10 bg-transparent appearance-none cursor-pointer disabled:cursor-not-allowed z-20\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4\n [&::-webkit-slider-thumb]:rounded-sm [&::-webkit-slider-thumb]:bg-transparent [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-sm\n [&::-moz-range-thumb]:bg-transparent [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n name?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n shape?: 'circle' | 'square';\n className?: string;\n fallbackColor?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n className = '',\n fallbackColor = 'bg-blue-600',\n}) => {\n const [imageError, setImageError] = React.useState(false);\n\n const sizeClasses = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-8 h-8 text-sm',\n md: 'w-10 h-10 text-base',\n lg: 'w-12 h-12 text-lg',\n xl: 'w-16 h-16 text-2xl',\n };\n\n const shapeClass = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n\n const getInitials = (name: string): string => {\n const parts = name.trim().split(' ');\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n };\n\n const showImage = src && !imageError;\n const showInitials = !showImage && name;\n\n return (\n <div\n className={`${sizeClasses[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${\n showImage ? 'bg-gray-200 dark:bg-gray-700' : `${fallbackColor} text-white`\n } ${className}`}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt || name || 'Avatar'}\n className=\"w-full h-full object-cover\"\n onError={() => setImageError(true)}\n />\n ) : showInitials ? (\n <span className=\"font-semibold select-none\">{getInitials(name)}</span>\n ) : (\n <svg\n className=\"w-full h-full text-gray-400 dark:text-gray-600\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n size?: 'sm' | 'md' | 'lg';\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n label,\n error,\n helperText,\n size = 'md',\n resize = 'vertical',\n className = '',\n disabled,\n ...props\n}) => {\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm min-h-[80px]',\n md: 'px-4 py-2 text-base min-h-[100px]',\n lg: 'px-4 py-3 text-lg min-h-[120px]',\n };\n\n const resizeClasses = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n };\n\n const baseClasses = `w-full rounded-lg border transition-colors duration-150 focus:outline-none focus:ring-2\n ${error\n ? 'border-red-500 focus:ring-red-500 focus:border-red-500 dark:border-red-400 dark:focus:ring-red-400'\n : 'border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:border-gray-600 dark:focus:ring-blue-400'\n }\n bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100\n placeholder:text-gray-500 dark:placeholder:text-gray-400\n disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-50 dark:disabled:bg-gray-900`;\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <textarea\n className={`${baseClasses} ${sizeClasses[size]} ${resizeClasses[resize]}`}\n disabled={disabled}\n {...props}\n />\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useRef, useCallback, useState, useEffect, useLayoutEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Modal } from './Modal';\nimport { Button } from './Button';\nimport { TextInput } from './TextInput';\n\nexport interface RichTextEditorProps {\n value?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n className?: string;\n minHeight?: string;\n maxHeight?: string;\n disabled?: boolean;\n label?: string;\n error?: string;\n helperText?: string;\n}\n\ntype FormatCommand = 'bold' | 'italic' | 'underline' | 'strikeThrough';\ntype BlockCommand = 'insertUnorderedList' | 'insertOrderedList' | 'formatBlock';\ntype HeadingLevel = 'h1' | 'h2' | 'h3' | 'p';\n\nexport const RichTextEditor: React.FC<RichTextEditorProps> = ({\n value = '',\n onChange,\n placeholder = 'Start typing...',\n className = '',\n minHeight = '200px',\n maxHeight = '500px',\n disabled = false,\n label,\n error,\n helperText,\n}) => {\n const { themeName } = useTheme();\n const editorRef = useRef<HTMLDivElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n const [activeFormats, setActiveFormats] = useState<Set<string>>(new Set());\n const [showLinkModal, setShowLinkModal] = useState(false);\n const [linkUrl, setLinkUrl] = useState('');\n const [showImageModal, setShowImageModal] = useState(false);\n const [imageUrl, setImageUrl] = useState('');\n const [imageAlt, setImageAlt] = useState('');\n\n // Inject global styles for contenteditable SYNCHRONOUSLY before paint\n useLayoutEffect(() => {\n const styleId = 'rich-text-editor-styles';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n [contenteditable]:empty:before {\n content: attr(data-placeholder);\n color: #9ca3af;\n pointer-events: none;\n }\n [contenteditable] h1 {\n font-size: 2em;\n font-weight: bold;\n margin: 0.67em 0;\n }\n [contenteditable] h2 {\n font-size: 1.5em;\n font-weight: bold;\n margin: 0.75em 0;\n }\n [contenteditable] h3 {\n font-size: 1.17em;\n font-weight: bold;\n margin: 0.83em 0;\n }\n [contenteditable] ul, [contenteditable] ol {\n margin: 1em 0;\n padding-left: 2em;\n }\n [contenteditable] a {\n color: #3b82f6;\n text-decoration: underline;\n }\n .dark [contenteditable] a {\n color: #60a5fa;\n }\n [contenteditable] img {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 1em 0;\n }\n [contenteditable] video {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 1em 0;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n // Track if this is the initial render\n const isInitialRender = useRef(true);\n\n // Update content when value changes (but not on initial render)\n useEffect(() => {\n if (!isInitialRender.current && editorRef.current && editorRef.current.innerHTML !== value) {\n editorRef.current.innerHTML = value;\n }\n isInitialRender.current = false;\n }, [value]);\n\n // Update active formats\n const updateActiveFormats = useCallback(() => {\n const formats = new Set<string>();\n\n if (document.queryCommandState('bold')) formats.add('bold');\n if (document.queryCommandState('italic')) formats.add('italic');\n if (document.queryCommandState('underline')) formats.add('underline');\n if (document.queryCommandState('strikeThrough')) formats.add('strikeThrough');\n if (document.queryCommandState('insertUnorderedList')) formats.add('ul');\n if (document.queryCommandState('insertOrderedList')) formats.add('ol');\n\n // Check heading level\n const parentNode = window.getSelection()?.anchorNode?.parentElement;\n if (parentNode) {\n const tagName = parentNode.tagName.toLowerCase();\n if (['h1', 'h2', 'h3'].includes(tagName)) {\n formats.add(tagName);\n }\n }\n\n setActiveFormats(formats);\n }, []);\n\n const handleInput = useCallback(() => {\n if (editorRef.current && onChange) {\n onChange(editorRef.current.innerHTML);\n }\n updateActiveFormats();\n }, [onChange, updateActiveFormats]);\n\n const handleFormat = useCallback((command: FormatCommand) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleList = useCallback((command: BlockCommand) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleHeading = useCallback((level: HeadingLevel) => {\n if (disabled) return;\n document.execCommand('formatBlock', false, level);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleLink = useCallback(() => {\n if (disabled) return;\n setShowLinkModal(true);\n }, [disabled]);\n\n const insertLink = useCallback(() => {\n if (linkUrl) {\n document.execCommand('createLink', false, linkUrl);\n setShowLinkModal(false);\n setLinkUrl('');\n editorRef.current?.focus();\n handleInput();\n }\n }, [linkUrl, handleInput]);\n\n const handleCode = useCallback(() => {\n if (disabled) return;\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const code = document.createElement('code');\n code.className = 'bg-gray-100 dark:bg-gray-700 px-1.5 py-0.5 rounded text-sm font-mono';\n\n try {\n range.surroundContents(code);\n handleInput();\n } catch (e) {\n console.warn('Could not apply code formatting');\n }\n }\n editorRef.current?.focus();\n }, [disabled, handleInput]);\n\n const handleImage = useCallback(() => {\n if (disabled) return;\n setShowImageModal(true);\n }, [disabled]);\n\n const insertImage = useCallback(() => {\n if (!imageUrl) return;\n\n const img = document.createElement('img');\n img.src = imageUrl;\n img.alt = imageAlt || '';\n img.style.maxWidth = '100%';\n img.style.height = 'auto';\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(img);\n\n // Move cursor after image\n range.setStartAfter(img);\n range.setEndAfter(img);\n selection.removeAllRanges();\n selection.addRange(range);\n } else if (editorRef.current) {\n editorRef.current.appendChild(img);\n }\n\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n editorRef.current?.focus();\n handleInput();\n }, [imageUrl, imageAlt, handleInput, disabled]);\n\n // Toolbar button base styles\n const getButtonClass = (isActive: boolean) => {\n const baseClass = themeName === 'minimalistic'\n ? 'border border-white text-white transition-colors'\n : 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 transition-colors';\n\n const activeClass = themeName === 'minimalistic'\n ? 'bg-white text-black'\n : 'bg-blue-100 dark:bg-blue-900 border-blue-500 dark:border-blue-400';\n\n const hoverClass = themeName === 'minimalistic'\n ? 'hover:bg-white hover:text-black'\n : 'hover:bg-gray-100 dark:hover:bg-gray-700';\n\n const disabledClass = disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer';\n\n return `px-2.5 py-1.5 rounded text-sm font-medium ${baseClass} ${isActive ? activeClass : hoverClass} ${disabledClass}`;\n };\n\n // Editor base styles\n const editorBaseClass = themeName === 'minimalistic'\n ? 'bg-transparent border-2 border-white text-white placeholder:text-gray-500'\n : 'bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-900 dark:text-gray-100';\n\n const focusClass = isFocused && !disabled\n ? themeName === 'minimalistic'\n ? 'border-white'\n : 'border-blue-500 dark:border-blue-400 ring-2 ring-blue-500/20'\n : '';\n\n const errorClass = error\n ? 'border-red-500 dark:border-red-400'\n : '';\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n {label}\n </label>\n )}\n\n {/* Toolbar */}\n <div className={`rounded-t-lg border-b ${editorBaseClass} p-2 flex flex-wrap gap-1`}>\n {/* Text Formatting */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleFormat('bold')}\n className={getButtonClass(activeFormats.has('bold'))}\n disabled={disabled}\n title=\"Bold (Ctrl+B)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M12.78 4c1.09 0 2.04.38 2.84 1.14.8.76 1.2 1.74 1.2 2.94 0 .9-.25 1.68-.76 2.36-.51.68-1.2 1.14-2.04 1.38v.08c1.06.22 1.89.7 2.48 1.44.59.74.88 1.64.88 2.7 0 1.34-.47 2.43-1.41 3.27C14.96 19.77 13.74 20 12.24 20H4V4h8.78zm-.66 7.14c.62 0 1.12-.18 1.5-.54.38-.36.57-.84.57-1.44 0-.6-.19-1.08-.57-1.44-.38-.36-.88-.54-1.5-.54H7.5v3.96h4.62zm.24 6.86c.68 0 1.24-.19 1.68-.57.44-.38.66-.9.66-1.56 0-.66-.22-1.18-.66-1.56-.44-.38-1-.57-1.68-.57H7.5v4.26h4.86z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('italic')}\n className={getButtonClass(activeFormats.has('italic'))}\n disabled={disabled}\n title=\"Italic (Ctrl+I)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M11.59 4H16v2h-1.71l-3.58 8H13v2H8v-2h1.71l3.58-8H11.59V4z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('underline')}\n className={getButtonClass(activeFormats.has('underline'))}\n disabled={disabled}\n title=\"Underline (Ctrl+U)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 16c-2.21 0-4-1.79-4-4V4h2v8c0 1.1.9 2 2 2s2-.9 2-2V4h2v8c0 2.21-1.79 4-4 4zM4 18h12v2H4v-2z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('strikeThrough')}\n className={getButtonClass(activeFormats.has('strikeThrough'))}\n disabled={disabled}\n title=\"Strikethrough\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 4c-2 0-3.5.5-4.5 1.5S4 7.5 4 9h2c0-.7.2-1.2.6-1.6.4-.4 1-.6 1.9-.6.8 0 1.4.2 1.8.5.4.3.7.8.7 1.4 0 .5-.2.9-.5 1.2-.3.3-.9.6-1.8.9l-.7.2c-1.2.3-2.1.7-2.7 1.2C4.2 12.7 4 13.5 4 14.5c0 1.1.4 2 1.1 2.6.7.6 1.7.9 3 .9 2.1 0 3.6-.5 4.6-1.5.9-1 1.3-2.3 1.3-3.8h-2c0 .9-.2 1.6-.7 2.1-.5.5-1.2.7-2.2.7-.8 0-1.4-.2-1.8-.5-.4-.3-.6-.8-.6-1.4 0-.5.2-.9.5-1.2.3-.3.9-.6 1.8-.9l.7-.2c1.2-.3 2.1-.7 2.7-1.2.6-.5.9-1.3.9-2.3 0-1.2-.4-2.1-1.2-2.8-.8-.7-1.9-1-3.3-1zM2 10h16v1H2v-1z\"/>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Headings */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleHeading('h1')}\n className={getButtonClass(activeFormats.has('h1'))}\n disabled={disabled}\n title=\"Heading 1\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H1</text>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleHeading('h2')}\n className={getButtonClass(activeFormats.has('h2'))}\n disabled={disabled}\n title=\"Heading 2\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H2</text>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleHeading('h3')}\n className={getButtonClass(activeFormats.has('h3'))}\n disabled={disabled}\n title=\"Heading 3\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H3</text>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Lists */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleList('insertUnorderedList')}\n className={getButtonClass(activeFormats.has('ul'))}\n disabled={disabled}\n title=\"Bullet List\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M4 4h2v2H4V4zm4 0h8v2H8V4zM4 8h2v2H4V8zm4 0h8v2H8V8zm-4 4h2v2H4v-2zm4 0h8v2H8v-2zm-4 4h2v2H4v-2zm4 0h8v2H8v-2z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleList('insertOrderedList')}\n className={getButtonClass(activeFormats.has('ol'))}\n disabled={disabled}\n title=\"Numbered List\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M4 4h1v3H4V4zm0 4h1v1H3V8h2v1H4zm1 2H3v1h2v1H3v1h2v-3zM8 4h8v2H8V4zm0 4h8v2H8V8zm0 4h8v2H8v-2zm0 4h8v2H8v-2z\"/>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Link & Code */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={handleLink}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Insert Link\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleImage}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Insert Image/Video\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleCode}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Code\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Editor Content */}\n <div\n ref={editorRef}\n contentEditable={!disabled}\n onInput={handleInput}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onMouseUp={updateActiveFormats}\n onKeyUp={updateActiveFormats}\n dangerouslySetInnerHTML={{ __html: value }}\n className={`\n w-full px-4 py-3 rounded-b-lg outline-none overflow-y-auto\n ${editorBaseClass} ${focusClass} ${errorClass}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n prose prose-sm dark:prose-invert max-w-none\n `}\n style={{\n minHeight,\n maxHeight,\n }}\n data-placeholder={placeholder}\n suppressContentEditableWarning\n />\n\n {/* Helper/Error Text */}\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n\n {/* Link Modal */}\n <Modal\n isOpen={showLinkModal}\n onClose={() => {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n title=\"Insert Link\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <TextInput\n label=\"URL\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n placeholder=\"https://example.com\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n insertLink();\n }\n }}\n />\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={insertLink}\n disabled={!linkUrl}\n >\n Insert\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Image Modal */}\n <Modal\n isOpen={showImageModal}\n onClose={() => {\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n }}\n title=\"Insert Image\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <TextInput\n label=\"Image URL\"\n value={imageUrl}\n onChange={(e) => setImageUrl(e.target.value)}\n placeholder=\"https://example.com/image.jpg\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n insertImage();\n }\n }}\n />\n\n <TextInput\n label=\"Alt Text (optional)\"\n value={imageAlt}\n onChange={(e) => setImageAlt(e.target.value)}\n placeholder=\"Describe the image\"\n />\n\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={insertImage}\n disabled={!imageUrl}\n >\n Insert\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { createContext, useContext, useState, useCallback } from 'react';\nimport { CheckIcon, CloseIcon } from '../icons';\n\nexport interface Toast {\n id: string;\n message: string;\n type?: 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: Toast[];\n addToast: (toast: Omit<Toast, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n};\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({ children, position = 'top-right' }) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const addToast = useCallback((toast: Omit<Toast, 'id'>) => {\n const id = Math.random().toString(36).substring(7);\n const newToast = { ...toast, id };\n setToasts((prev) => [...prev, newToast]);\n\n // Auto-remove after duration\n const duration = toast.duration || 5000;\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }, []);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n };\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n <div className={`fixed ${positionClasses[position]} z-50 flex flex-col gap-2 max-w-md`}>\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onClose={() => removeToast(toast.id)} />\n ))}\n </div>\n </ToastContext.Provider>\n );\n};\n\ninterface ToastItemProps {\n toast: Toast;\n onClose: () => void;\n}\n\nconst ToastItem: React.FC<ToastItemProps> = ({ toast, onClose }) => {\n const typeStyles = {\n success: 'bg-green-50 dark:bg-green-900/30 border-green-500 text-green-800 dark:text-green-200',\n error: 'bg-red-50 dark:bg-red-900/30 border-red-500 text-red-800 dark:text-red-200',\n warning: 'bg-yellow-50 dark:bg-yellow-900/30 border-yellow-500 text-yellow-800 dark:text-yellow-200',\n info: 'bg-blue-50 dark:bg-blue-900/30 border-blue-500 text-blue-800 dark:text-blue-200',\n };\n\n const typeIcons = {\n success: <CheckIcon size=\"sm\" className=\"text-green-600 dark:text-green-400\" />,\n error: <CloseIcon size=\"sm\" className=\"text-red-600 dark:text-red-400\" />,\n warning: (\n <svg className=\"w-4 h-4 text-yellow-600 dark:text-yellow-400\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n ),\n info: (\n <svg className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n ),\n };\n\n const type = toast.type || 'info';\n\n return (\n <div\n className={`flex items-start gap-3 p-4 rounded-lg border-l-4 shadow-lg backdrop-blur-sm ${typeStyles[type]} animate-slide-in`}\n role=\"alert\"\n >\n <div className=\"flex-shrink-0 mt-0.5\">{typeIcons[type]}</div>\n <p className=\"flex-1 text-sm font-medium\">{toast.message}</p>\n <button\n onClick={onClose}\n className=\"flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 transition-colors\"\n aria-label=\"Close\"\n >\n <CloseIcon size=\"sm\" />\n </button>\n </div>\n );\n};\n\n// Helper function to easily show toasts\nexport const toast = {\n success: (message: string, duration?: number) => ({\n message,\n type: 'success' as const,\n duration,\n }),\n error: (message: string, duration?: number) => ({\n message,\n type: 'error' as const,\n duration,\n }),\n warning: (message: string, duration?: number) => ({\n message,\n type: 'warning' as const,\n duration,\n }),\n info: (message: string, duration?: number) => ({\n message,\n type: 'info' as const,\n duration,\n }),\n};\n","\"use client\";\n\nimport React from 'react';\nimport { CheckIcon } from '../icons';\n\nexport interface Step {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps {\n steps: Step[];\n currentStep: number;\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport const Stepper: React.FC<StepperProps> = ({\n steps,\n currentStep,\n orientation = 'horizontal',\n className = '',\n}) => {\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <div className={`${isHorizontal ? 'flex items-center' : 'flex flex-col'} ${className}`}>\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isActive = stepNumber === currentStep;\n const isCompleted = stepNumber < currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <React.Fragment key={index}>\n {/* Step */}\n <div className={`flex ${isHorizontal ? 'flex-col items-center' : 'flex-row items-start'} ${isHorizontal ? '' : 'flex-1'}`}>\n <div className=\"flex items-center\">\n {/* Circle/Check */}\n <div\n className={`flex items-center justify-center w-10 h-10 rounded-full border-2 transition-all ${\n isCompleted\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : isActive\n ? 'border-blue-600 bg-white dark:border-blue-500 dark:bg-gray-800'\n : 'border-gray-300 bg-white dark:border-gray-600 dark:bg-gray-800'\n }`}\n >\n {isCompleted ? (\n <CheckIcon size=\"sm\" className=\"text-white\" />\n ) : (\n <span\n className={`text-sm font-semibold ${\n isActive\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-500 dark:text-gray-400'\n }`}\n >\n {stepNumber}\n </span>\n )}\n </div>\n </div>\n\n {/* Label */}\n <div className={`${isHorizontal ? 'mt-2 text-center' : 'ml-4 pb-8'} ${isLast && !isHorizontal ? 'pb-0' : ''}`}>\n <p\n className={`text-sm font-medium ${\n isActive || isCompleted\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-500 dark:text-gray-400'\n }`}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`${\n isHorizontal\n ? 'flex-1 h-0.5 mx-4'\n : 'w-0.5 h-full ml-5 -mt-8'\n } ${\n isCompleted || (isActive && stepNumber < currentStep)\n ? 'bg-blue-600 dark:bg-blue-500'\n : 'bg-gray-300 dark:bg-gray-600'\n }`}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n className?: string;\n label?: string;\n labelPosition?: 'left' | 'center' | 'right';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n variant = 'solid',\n className = '',\n label,\n labelPosition = 'center',\n}) => {\n const variantClasses = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n };\n\n if (label && orientation === 'horizontal') {\n const alignmentClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n };\n\n return (\n <div className={`flex items-center ${alignmentClasses[labelPosition]} ${className}`} role=\"separator\">\n {labelPosition !== 'left' && (\n <div className={`flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600`} />\n )}\n <span className=\"px-4 text-sm text-gray-500 dark:text-gray-400\">\n {label}\n </span>\n {labelPosition !== 'right' && (\n <div className={`flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600`} />\n )}\n </div>\n );\n }\n\n if (orientation === 'vertical') {\n return (\n <div\n className={`inline-block h-full border-l ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`}\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n );\n }\n\n return (\n <hr\n className={`border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`}\n role=\"separator\"\n />\n );\n};\n","\"use client\";\n\nimport React, { useRef, useState } from 'react';\nimport { UploadIcon, CloseIcon } from '../icons';\n\nexport interface FileUploadProps {\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // in bytes\n maxFiles?: number;\n disabled?: boolean;\n onChange?: (files: File[]) => void;\n onError?: (error: string) => void;\n className?: string;\n label?: string;\n helperText?: string;\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n accept,\n multiple = false,\n maxSize,\n maxFiles = 10,\n disabled = false,\n onChange,\n onError,\n className = '',\n label,\n helperText,\n}) => {\n const [files, setFiles] = useState<File[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n };\n\n const validateFiles = (fileList: FileList): File[] => {\n const validFiles: File[] = [];\n const filesArray = Array.from(fileList);\n\n // Check max files\n if (filesArray.length + files.length > maxFiles) {\n onError?.(`Maximum ${maxFiles} files allowed`);\n return validFiles;\n }\n\n for (const file of filesArray) {\n // Check file size\n if (maxSize && file.size > maxSize) {\n onError?.(`File ${file.name} exceeds maximum size of ${formatFileSize(maxSize)}`);\n continue;\n }\n\n validFiles.push(file);\n }\n\n return validFiles;\n };\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList || disabled) return;\n\n const validFiles = validateFiles(fileList);\n if (validFiles.length > 0) {\n const newFiles = multiple ? [...files, ...validFiles] : validFiles;\n setFiles(newFiles);\n onChange?.(newFiles);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (!disabled) {\n setIsDragging(true);\n }\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n };\n\n const handleClick = () => {\n if (!disabled) {\n fileInputRef.current?.click();\n }\n };\n\n const handleRemoveFile = (index: number) => {\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onChange?.(newFiles);\n };\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n {label}\n </label>\n )}\n\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={`relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all ${\n isDragging\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500'\n } ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={(e) => handleFiles(e.target.files)}\n disabled={disabled}\n className=\"hidden\"\n />\n\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"w-12 h-12 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center\">\n <UploadIcon size=\"lg\" className=\"text-gray-400 dark:text-gray-500\" />\n </div>\n <div>\n <p className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n <span className=\"text-blue-600 dark:text-blue-400\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {accept ? `Accepted: ${accept}` : 'Any file type'}\n {maxSize && ` • Max size: ${formatFileSize(maxSize)}`}\n </p>\n </div>\n </div>\n </div>\n\n {helperText && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n\n {/* File List */}\n {files.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n {files.map((file, index) => (\n <div\n key={index}\n className=\"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-gray-100 truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {formatFileSize(file.size)}\n </p>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveFile(index);\n }}\n className=\"ml-4 text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors\"\n aria-label=\"Remove file\"\n >\n <CloseIcon size=\"sm\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n","/**\n * Theme initialization script that runs before React hydration\n * This prevents flickering by setting the theme before the page renders\n * Must be inlined in the HTML <head> as a blocking script\n */\n\nexport const themeScript = `\n(function() {\n try {\n // Get stored preferences\n const storedTheme = localStorage.getItem('lite-ui-theme') || 'default';\n const storedColorMode = localStorage.getItem('lite-ui-color-mode');\n\n // Determine color mode (system, light, or dark)\n let colorMode = storedColorMode;\n if (!colorMode || colorMode === 'system') {\n colorMode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Set attributes before render\n document.documentElement.setAttribute('data-theme', storedTheme);\n document.documentElement.setAttribute('data-color-mode', colorMode);\n\n // Add dark class for Tailwind\n if (colorMode === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n } catch (e) {\n console.error('Failed to initialize theme:', e);\n }\n})();\n`;\n\nexport function getThemeScript() {\n return themeScript;\n}\n"],"mappings":"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","names":["import_jsx_runtime","variantStyles","sizeStyles","import_react","import_jsx_runtime","sizeStyles","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","sizeClasses","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","widthClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","DAYS","MONTHS","import_react","import_jsx_runtime","DAYS","MONTHS","import_react","import_jsx_runtime","React","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","React","percentage","import_react","import_jsx_runtime","React","sizeClasses","name","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_react","import_jsx_runtime","toast","positionClasses","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/theme/ThemeProvider.tsx","../src/theme/themes.ts","../src/components/Button.tsx","../src/components/Select.tsx","../src/components/Modal.tsx","../src/components/Navbar.tsx","../src/components/Sidebar.tsx","../src/components/SidebarProvider.tsx","../src/components/AppShell.tsx","../src/icons/icon-utils.tsx","../src/icons/HomeIcon.tsx","../src/icons/UserIcon.tsx","../src/icons/SearchIcon.tsx","../src/icons/BellIcon.tsx","../src/icons/SettingsIcon.tsx","../src/icons/MenuIcon.tsx","../src/icons/CloseIcon.tsx","../src/icons/PlusIcon.tsx","../src/icons/ArrowLeftIcon.tsx","../src/icons/ArrowRightIcon.tsx","../src/icons/ChevronDownIcon.tsx","../src/icons/ChevronUpIcon.tsx","../src/icons/ChevronLeftIcon.tsx","../src/icons/ChevronRightIcon.tsx","../src/icons/ExternalLinkIcon.tsx","../src/icons/CheckIcon.tsx","../src/icons/CheckCircleIcon.tsx","../src/icons/AlertCircleIcon.tsx","../src/icons/InfoCircleIcon.tsx","../src/icons/TrashIcon.tsx","../src/icons/EditIcon.tsx","../src/icons/CopyIcon.tsx","../src/icons/SaveIcon.tsx","../src/icons/DownloadIcon.tsx","../src/icons/UploadIcon.tsx","../src/icons/RefreshIcon.tsx","../src/icons/EyeIcon.tsx","../src/icons/EyeOffIcon.tsx","../src/icons/PlayIcon.tsx","../src/icons/PauseIcon.tsx","../src/icons/StopIcon.tsx","../src/icons/SkipBackIcon.tsx","../src/icons/SkipForwardIcon.tsx","../src/icons/VolumeUpIcon.tsx","../src/icons/VolumeOffIcon.tsx","../src/icons/MailIcon.tsx","../src/icons/ChatIcon.tsx","../src/icons/StarIcon.tsx","../src/icons/HeartIcon.tsx","../src/icons/CameraIcon.tsx","../src/icons/CalendarIcon.tsx","../src/icons/BookIcon.tsx","../src/icons/FileIcon.tsx","../src/icons/FolderIcon.tsx","../src/icons/ImageIcon.tsx","../src/icons/CodeIcon.tsx","../src/icons/TerminalIcon.tsx","../src/icons/DatabaseIcon.tsx","../src/icons/CloudIcon.tsx","../src/icons/PlugIcon.tsx","../src/icons/KeyIcon.tsx","../src/icons/LockIcon.tsx","../src/icons/ShieldIcon.tsx","../src/icons/SparklesIcon.tsx","../src/icons/BrainIcon.tsx","../src/icons/GlobeIcon.tsx","../src/icons/BeakerIcon.tsx","../src/icons/GoogleIcon.tsx","../src/icons/GitHubIcon.tsx","../src/icons/TwitterIcon.tsx","../src/icons/FacebookIcon.tsx","../src/icons/AppleIcon.tsx","../src/icons/LinkedInIcon.tsx","../src/icons/YouTubeIcon.tsx","../src/icons/SlackIcon.tsx","../src/components/Drawer.tsx","../src/components/TextInput.tsx","../src/components/NumberInput.tsx","../src/components/ActionMenu.tsx","../src/components/Card.tsx","../src/components/Alert.tsx","../src/components/Checkbox.tsx","../src/components/Toggle.tsx","../src/components/Badge.tsx","../src/components/Spinner.tsx","../src/components/Tabs.tsx","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/DatePicker.tsx","../src/components/TimePicker.tsx","../src/components/DateTimePicker.tsx","../src/components/Calendar.tsx","../src/components/Radio.tsx","../src/components/ProgressBar.tsx","../src/components/Slider.tsx","../src/components/Avatar.tsx","../src/components/Textarea.tsx","../src/components/RichTextEditor.tsx","../src/components/Toast.tsx","../src/components/Stepper.tsx","../src/components/Divider.tsx","../src/components/FileUpload.tsx","../src/components/AudioPlayer.tsx","../src/utils/theme-script.ts"],"sourcesContent":["export { Button } from './components/Button';\nexport type { ButtonProps } from './components/Button';\n\nexport { Select } from './components/Select';\nexport type { SelectProps, SelectOption } from './components/Select';\n\nexport { Modal } from './components/Modal';\nexport type { ModalProps } from './components/Modal';\n\nexport { Navbar } from './components/Navbar';\nexport type { NavbarProps } from './components/Navbar';\n\nexport { Sidebar } from './components/Sidebar';\nexport type { SidebarProps } from './components/Sidebar';\n\nexport { SidebarProvider, useSidebar } from './components/SidebarProvider';\nexport type { SidebarProviderProps, SidebarContextValue } from './components/SidebarProvider';\n\nexport { AppShell } from './components/AppShell';\nexport type { AppShellProps } from './components/AppShell';\n\nexport { Drawer } from './components/Drawer';\nexport type { DrawerProps } from './components/Drawer';\n\nexport { TextInput } from './components/TextInput';\nexport type { TextInputProps } from './components/TextInput';\n\nexport { NumberInput } from './components/NumberInput';\nexport type { NumberInputProps } from './components/NumberInput';\n\nexport { ActionMenu } from './components/ActionMenu';\nexport type { ActionMenuProps, ActionMenuItem } from './components/ActionMenu';\n\nexport { Card } from './components/Card';\nexport type { CardProps } from './components/Card';\n\nexport { Alert } from './components/Alert';\nexport type { AlertProps } from './components/Alert';\n\nexport { Checkbox } from './components/Checkbox';\nexport type { CheckboxProps } from './components/Checkbox';\n\nexport { Toggle } from './components/Toggle';\nexport type { ToggleProps } from './components/Toggle';\n\nexport { Badge } from './components/Badge';\nexport type { BadgeProps } from './components/Badge';\n\nexport { Spinner } from './components/Spinner';\nexport type { SpinnerProps } from './components/Spinner';\n\nexport { Tabs } from './components/Tabs';\nexport type { TabsProps, Tab } from './components/Tabs';\n\nexport { Table } from './components/Table';\nexport type { TableProps, Column } from './components/Table';\n\nexport { Pagination } from './components/Pagination';\nexport type { PaginationProps } from './components/Pagination';\n\nexport { DatePicker } from './components/DatePicker';\nexport type { DatePickerProps } from './components/DatePicker';\n\nexport { TimePicker } from './components/TimePicker';\nexport type { TimePickerProps } from './components/TimePicker';\n\nexport { DateTimePicker } from './components/DateTimePicker';\nexport type { DateTimePickerProps } from './components/DateTimePicker';\n\nexport { Calendar } from './components/Calendar';\nexport type { CalendarProps } from './components/Calendar';\n\nexport { Radio } from './components/Radio';\nexport type { RadioProps, RadioOption } from './components/Radio';\n\nexport { ProgressBar } from './components/ProgressBar';\nexport type { ProgressBarProps } from './components/ProgressBar';\n\nexport { Slider } from './components/Slider';\nexport type { SliderProps } from './components/Slider';\n\nexport { Avatar } from './components/Avatar';\nexport type { AvatarProps } from './components/Avatar';\n\nexport { Textarea } from './components/Textarea';\nexport type { TextareaProps } from './components/Textarea';\n\nexport { RichTextEditor } from './components/RichTextEditor';\nexport type { RichTextEditorProps } from './components/RichTextEditor';\n\nexport { ToastProvider, useToast, toast } from './components/Toast';\nexport type { Toast, ToastProviderProps } from './components/Toast';\n\nexport { Stepper } from './components/Stepper';\nexport type { StepperProps, Step } from './components/Stepper';\n\nexport { Divider } from './components/Divider';\nexport type { DividerProps } from './components/Divider';\n\nexport { FileUpload } from './components/FileUpload';\nexport type { FileUploadProps } from './components/FileUpload';\n\nexport { AudioPlayer } from './components/AudioPlayer';\nexport type { AudioPlayerProps } from './components/AudioPlayer';\n\nexport { ThemeProvider, useTheme } from './theme/ThemeProvider';\nexport type { ColorMode } from './theme/ThemeProvider';\nexport { themes } from './theme/themes';\nexport type { ThemeName, Theme, ButtonTheme, SelectTheme } from './theme/themes';\n\nexport { themeScript, getThemeScript } from './utils/theme-script';\n\nexport * from './icons';\n","\"use client\";\n\nimport React, { createContext, useContext, useState, useEffect } from 'react';\nimport { themes, ThemeName, Theme } from './themes';\n\nexport type ColorMode = 'light' | 'dark' | 'system';\n\ninterface ThemeContextValue {\n theme: Theme;\n themeName: ThemeName;\n setTheme: (themeName: ThemeName) => void;\n colorMode: ColorMode;\n setColorMode: (mode: ColorMode) => void;\n toggleColorMode: () => void;\n resolvedColorMode: 'light' | 'dark';\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n\n // Return default values if no ThemeProvider is present (graceful fallback)\n if (!context) {\n const warnOnce = () => {\n if (process.env.NODE_ENV === 'development') {\n console.warn('useTheme: Component used outside ThemeProvider. Using default theme. Wrap your app with <ThemeProvider> for full functionality.');\n }\n };\n\n return {\n theme: themes.default,\n themeName: 'default' as ThemeName,\n setTheme: () => warnOnce(),\n colorMode: 'light' as ColorMode,\n setColorMode: () => warnOnce(),\n toggleColorMode: () => warnOnce(),\n resolvedColorMode: 'light' as 'light' | 'dark',\n };\n }\n\n return context;\n}\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: ThemeName;\n defaultColorMode?: ColorMode;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme = 'default',\n defaultColorMode = 'system'\n}: ThemeProviderProps) {\n const [mounted, setMounted] = useState(false);\n\n // Initialize from defaults (will sync with actual values after mount)\n const [themeName, setThemeNameState] = useState<ThemeName>(defaultTheme);\n const [colorMode, setColorModeState] = useState<ColorMode>(defaultColorMode);\n const [resolvedColorMode, setResolvedColorMode] = useState<'light' | 'dark'>('light');\n\n // Sync with actual values after mount to avoid hydration mismatch\n useEffect(() => {\n setMounted(true);\n\n // Read actual values from localStorage and DOM\n const storedTheme = localStorage.getItem('lite-ui-theme') as ThemeName;\n const storedColorMode = localStorage.getItem('lite-ui-color-mode') as ColorMode;\n const currentColorMode = document.documentElement.getAttribute('data-color-mode') as 'light' | 'dark';\n\n if (storedTheme) setThemeNameState(storedTheme);\n if (storedColorMode) setColorModeState(storedColorMode);\n if (currentColorMode) setResolvedColorMode(currentColorMode);\n }, []);\n\n const theme = themes[themeName];\n\n // Update theme\n const setTheme = (newThemeName: ThemeName) => {\n setThemeNameState(newThemeName);\n if (typeof window !== 'undefined') {\n localStorage.setItem('lite-ui-theme', newThemeName);\n document.documentElement.setAttribute('data-theme', newThemeName);\n }\n };\n\n // Update color mode\n const setColorMode = (mode: ColorMode) => {\n if (typeof window === 'undefined') return;\n\n setColorModeState(mode);\n localStorage.setItem('lite-ui-color-mode', mode);\n\n let resolved: 'light' | 'dark';\n if (mode === 'system') {\n resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n } else {\n resolved = mode;\n }\n\n setResolvedColorMode(resolved);\n document.documentElement.setAttribute('data-color-mode', resolved);\n\n if (resolved === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n };\n\n // Toggle between light and dark mode\n const toggleColorMode = () => {\n if (colorMode === 'system') {\n // If currently system, toggle to opposite of current resolved mode\n setColorMode(resolvedColorMode === 'dark' ? 'light' : 'dark');\n } else {\n // Toggle between light and dark\n setColorMode(colorMode === 'dark' ? 'light' : 'dark');\n }\n };\n\n // Listen for system theme changes\n useEffect(() => {\n if (!mounted) return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = (e: MediaQueryListEvent) => {\n if (colorMode === 'system') {\n const resolved = e.matches ? 'dark' : 'light';\n setResolvedColorMode(resolved);\n document.documentElement.setAttribute('data-color-mode', resolved);\n\n if (resolved === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [mounted, colorMode]);\n\n return (\n <ThemeContext.Provider value={{\n theme,\n themeName,\n setTheme,\n colorMode,\n setColorMode,\n toggleColorMode,\n resolvedColorMode\n }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n","export type ThemeName = 'default' | 'minimalistic';\n\nexport interface ButtonTheme {\n primary: string;\n secondary: string;\n success: string;\n danger: string;\n warning: string;\n info: string;\n}\n\nexport interface SelectTheme {\n base: string;\n sizes: {\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n disabled: string;\n}\n\nexport interface Theme {\n name: ThemeName;\n button: {\n base: string;\n variants: ButtonTheme;\n sizes: {\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n disabled: string;\n };\n select: SelectTheme;\n}\n\nexport const themes: Record<ThemeName, Theme> = {\n default: {\n name: 'default',\n button: {\n base: 'font-semibold rounded-lg transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 active:scale-95 gap-2',\n variants: {\n primary: 'bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white shadow-sm hover:shadow-md dark:bg-blue-500 dark:hover:bg-blue-600 dark:active:bg-blue-700',\n secondary: 'bg-gray-600 hover:bg-gray-700 active:bg-gray-800 text-white shadow-sm hover:shadow-md dark:bg-gray-500 dark:hover:bg-gray-600 dark:active:bg-gray-700',\n success: 'bg-green-600 hover:bg-green-700 active:bg-green-800 text-white shadow-sm hover:shadow-md dark:bg-green-500 dark:hover:bg-green-600 dark:active:bg-green-700',\n danger: 'bg-red-600 hover:bg-red-700 active:bg-red-800 text-white shadow-sm hover:shadow-md dark:bg-red-500 dark:hover:bg-red-600 dark:active:bg-red-700',\n warning: 'bg-yellow-500 hover:bg-yellow-600 active:bg-yellow-700 text-white shadow-sm hover:shadow-md dark:bg-yellow-400 dark:hover:bg-yellow-500 dark:active:bg-yellow-600',\n info: 'bg-cyan-600 hover:bg-cyan-700 active:bg-cyan-800 text-white shadow-sm hover:shadow-md dark:bg-cyan-500 dark:hover:bg-cyan-600 dark:active:bg-cyan-700',\n },\n sizes: {\n sm: 'px-3 py-1.5 text-sm min-h-[30px]',\n md: 'px-4 py-2 text-base min-h-[38px]',\n lg: 'px-6 py-3 text-lg min-h-[48px]',\n xl: 'px-8 py-4 text-xl min-h-[60px]',\n },\n disabled: 'opacity-50 cursor-not-allowed hover:shadow-sm active:scale-100',\n },\n select: {\n base: 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 text-left transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 pr-10 cursor-pointer dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500',\n sizes: {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n xl: 'px-5 py-4 text-xl',\n },\n disabled: 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900',\n },\n },\n minimalistic: {\n name: 'minimalistic',\n button: {\n base: 'font-normal rounded-none transition-colors duration-200 focus:outline-none border-2 gap-2',\n variants: {\n primary: 'bg-transparent border-white text-white hover:bg-white hover:text-black',\n secondary: 'bg-transparent border-gray-400 text-gray-400 hover:bg-gray-400 hover:text-black',\n success: 'bg-transparent border-green-400 text-green-400 hover:bg-green-400 hover:text-black',\n danger: 'bg-transparent border-red-400 text-red-400 hover:bg-red-400 hover:text-black',\n warning: 'bg-transparent border-yellow-400 text-yellow-400 hover:bg-yellow-400 hover:text-black',\n info: 'bg-transparent border-blue-400 text-blue-400 hover:bg-blue-400 hover:text-black',\n },\n sizes: {\n sm: 'px-4 py-2 text-sm uppercase tracking-wide min-h-[36px]',\n md: 'px-6 py-3 text-base uppercase tracking-wide min-h-[48px]',\n lg: 'px-8 py-4 text-lg uppercase tracking-wider min-h-[60px]',\n xl: 'px-10 py-5 text-xl uppercase tracking-wider min-h-[72px]',\n },\n disabled: 'opacity-30 cursor-not-allowed hover:bg-transparent',\n },\n select: {\n base: 'w-full appearance-none rounded-none border-2 border-white bg-transparent text-white text-left transition-colors duration-200 focus:outline-none pr-10 cursor-pointer placeholder:text-gray-500',\n sizes: {\n sm: 'px-4 py-2 text-sm uppercase tracking-wide',\n md: 'px-4 py-3 text-base uppercase tracking-wide',\n lg: 'px-4 py-4 text-lg uppercase tracking-wider',\n xl: 'px-5 py-5 text-xl uppercase tracking-wider',\n },\n disabled: 'opacity-30 cursor-not-allowed',\n },\n },\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n size?: 'sm' | 'md' | 'lg' | 'xl';\n children: React.ReactNode;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n className = '',\n children,\n disabled,\n leftIcon,\n rightIcon,\n iconOnly = false,\n ...props\n}) => {\n const { theme } = useTheme();\n\n const baseStyles = theme.button.base;\n const variantStyles = theme.button.variants[variant];\n const sizeStyles = theme.button.sizes[size];\n const disabledStyles = disabled ? theme.button.disabled : '';\n\n // Adjust padding for icon-only buttons - remove horizontal padding and make square\n const iconOnlyStyles = iconOnly ? '!p-0 aspect-square' : '';\n\n const classes = `inline-flex items-center justify-center ${baseStyles} ${variantStyles} ${sizeStyles} ${disabledStyles} ${iconOnlyStyles} ${className}`.trim();\n\n return (\n <button\n className={classes}\n disabled={disabled}\n {...props}\n >\n {iconOnly ? (\n children\n ) : (\n <>\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children && <span className=\"inline-flex items-center\">{children}</span>}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'size' | 'onChange' | 'defaultValue'> {\n options: SelectOption[];\n size?: 'sm' | 'md' | 'lg' | 'xl';\n placeholder?: string;\n disabled?: boolean;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n label?: string;\n error?: string;\n helperText?: string;\n searchable?: boolean;\n searchPlaceholder?: string;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n options,\n size = 'md',\n placeholder,\n className = '',\n disabled,\n value: controlledValue,\n defaultValue,\n onChange,\n label,\n error,\n helperText,\n searchable = false,\n searchPlaceholder = 'Search...',\n ...props\n}) => {\n const { theme, themeName } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [searchQuery, setSearchQuery] = useState('');\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Find the selected option\n const selectedOption = options.find(opt => opt.value === value);\n const displayText = selectedOption ? selectedOption.label : placeholder || 'Select...';\n\n // Filter options based on search query\n const filteredOptions = searchable && searchQuery\n ? options.filter(option =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n const handleSelect = (optionValue: string) => {\n if (disabled) return;\n\n setInternalValue(optionValue);\n onChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n };\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const baseStyles = theme.select.base;\n const sizeStyles = theme.select.sizes[size];\n const disabledStyles = disabled ? theme.select.disabled : '';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n\n const buttonClasses = `${baseStyles} ${sizeStyles} ${disabledStyles} ${errorStyles}`.trim();\n\n // Icon color based on theme\n const iconColor = themeName === 'minimalistic'\n ? (disabled ? 'text-gray-600' : 'text-white')\n : (disabled ? 'text-gray-400' : 'text-gray-500');\n\n // Dropdown menu styles based on theme\n const dropdownBaseStyles = themeName === 'minimalistic'\n ? 'bg-black border-2 border-white'\n : 'bg-white border border-gray-300 shadow-lg dark:bg-gray-800 dark:border-gray-600';\n\n const optionBaseStyles = themeName === 'minimalistic'\n ? 'text-white hover:bg-white hover:text-black transition-colors duration-200'\n : 'text-gray-900 hover:bg-blue-50 transition-colors duration-150 dark:text-gray-100 dark:hover:bg-gray-700';\n\n const optionSizeStyles = {\n sm: 'px-4 py-2 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n xl: 'px-5 py-4 text-xl',\n }[size];\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative inline-block w-full\" ref={dropdownRef} {...props}>\n {/* Custom button that looks like select */}\n <button\n type=\"button\"\n className={buttonClasses}\n onClick={handleToggle}\n disabled={disabled}\n >\n <span className={!selectedOption && placeholder ? 'opacity-50' : ''}>\n {displayText}\n </span>\n </button>\n\n {/* Chevron icon */}\n <div className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-4\">\n <svg\n className={`h-5 w-5 transition-transform duration-200 ${iconColor} ${isOpen ? 'rotate-180' : ''}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n {/* Custom dropdown menu */}\n {isOpen && !disabled && (\n <div\n className={`absolute z-50 w-full mt-1 ${dropdownBaseStyles} rounded-lg overflow-hidden`}\n >\n {/* Search input */}\n {searchable && (\n <div className={`sticky top-0 ${themeName === 'minimalistic' ? 'bg-black border-b-2 border-white' : 'bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700'}`}>\n <input\n ref={searchInputRef}\n type=\"text\"\n className={`w-full ${optionSizeStyles} ${themeName === 'minimalistic' ? 'bg-black text-white placeholder-gray-600 focus:outline-none' : 'bg-transparent text-gray-900 dark:text-gray-100 placeholder-gray-400 focus:outline-none'}`}\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n {/* Options list */}\n <style>\n {`\n .select-dropdown-scroll {\n scrollbar-width: thin;\n scrollbar-color: rgba(156, 163, 175, 0.5) transparent;\n }\n .select-dropdown-scroll::-webkit-scrollbar {\n width: 8px;\n }\n .select-dropdown-scroll::-webkit-scrollbar-track {\n background: transparent;\n }\n .select-dropdown-scroll::-webkit-scrollbar-thumb {\n background-color: rgba(156, 163, 175, 0.5);\n border-radius: 4px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n .select-dropdown-scroll::-webkit-scrollbar-thumb:hover {\n background-color: rgba(156, 163, 175, 0.7);\n }\n .dark .select-dropdown-scroll {\n scrollbar-color: rgba(75, 85, 99, 0.6) transparent;\n }\n .dark .select-dropdown-scroll::-webkit-scrollbar-thumb {\n background-color: rgba(75, 85, 99, 0.6);\n }\n .dark .select-dropdown-scroll::-webkit-scrollbar-thumb:hover {\n background-color: rgba(75, 85, 99, 0.8);\n }\n `}\n </style>\n <div\n className=\"select-dropdown-scroll\"\n style={{ maxHeight: '300px', overflowY: 'auto' }}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <div\n key={option.value}\n className={`${optionBaseStyles} ${optionSizeStyles} cursor-pointer ${\n value === option.value ? (themeName === 'minimalistic' ? 'bg-white text-black' : 'bg-blue-50 dark:bg-gray-700') : ''\n }`}\n onClick={() => handleSelect(option.value)}\n >\n {option.label}\n </div>\n ))\n ) : (\n <div className={`${optionSizeStyles} ${themeName === 'minimalistic' ? 'text-gray-500' : 'text-gray-500 dark:text-gray-400'} text-center`}>\n No results found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n showCloseButton?: boolean;\n}\n\nconst sizeClasses = {\n sm: 'max-w-md',\n md: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n size = 'md',\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n // Prevent body scroll when modal is open\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'unset';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const sizeClass = sizeClasses[size];\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm transition-all duration-200\"\n onClick={onClose}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n <div\n className={`relative w-full ${sizeClass} bg-white dark:bg-gray-800 rounded-lg shadow-2xl transform transition-all duration-200 scale-100 animate-in`}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700\">\n {title && (\n <h3 id=\"modal-title\" className=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n {title}\n </h3>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n aria-label=\"Close modal\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n sticky?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n logo,\n children,\n className = '',\n sticky = false,\n}) => {\n const { theme } = useTheme();\n\n const baseClasses = sticky ? 'sticky top-0 z-40' : '';\n\n return (\n <nav className={`bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${baseClasses} ${className}`}>\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between items-center h-16\">\n {logo && (\n <div className=\"flex items-center\">\n {logo}\n </div>\n )}\n {children && (\n <div className=\"flex items-center gap-6\">\n {children}\n </div>\n )}\n </div>\n </div>\n </nav>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SidebarProps {\n children: React.ReactNode;\n className?: string;\n width?: 'sm' | 'md' | 'lg';\n position?: 'left' | 'right';\n}\n\nconst widthClasses = {\n sm: 'w-48',\n md: 'w-64',\n lg: 'w-80',\n};\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n children,\n className = '',\n width = 'md',\n position = 'left',\n}) => {\n const { theme } = useTheme();\n const widthClass = widthClasses[width];\n const borderClass = position === 'left' ? 'border-r' : 'border-l';\n\n return (\n <aside\n className={`${widthClass} bg-white dark:bg-gray-800 ${borderClass} border-gray-200 dark:border-gray-700 h-full overflow-y-auto ${className}`}\n >\n {children}\n </aside>\n );\n};\n","\"use client\";\n\nimport React, { createContext, useContext, useState, ReactNode } from 'react';\n\nexport interface SidebarContextValue {\n isOpen: boolean;\n isMobile: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setIsMobile: (isMobile: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | undefined>(undefined);\n\nexport interface SidebarProviderProps {\n children: ReactNode;\n defaultOpen?: boolean;\n}\n\nexport const SidebarProvider: React.FC<SidebarProviderProps> = ({\n children,\n defaultOpen = false,\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [isMobile, setIsMobile] = useState(false);\n\n const open = () => setIsOpen(true);\n const close = () => setIsOpen(false);\n const toggle = () => setIsOpen(prev => !prev);\n\n const value: SidebarContextValue = {\n isOpen,\n isMobile,\n open,\n close,\n toggle,\n setIsMobile,\n };\n\n return (\n <SidebarContext.Provider value={value}>\n {children}\n </SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = (): SidebarContextValue => {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { MenuIcon } from '../icons';\n\nexport interface AppShellProps {\n children: React.ReactNode;\n navbar?: {\n content: React.ReactNode;\n width?: 'sm' | 'md' | 'lg';\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl';\n position?: 'side' | 'top';\n };\n header?: React.ReactNode;\n navbarTitle?: string;\n navbarLogo?: React.ReactNode;\n defaultNavbarOpen?: boolean;\n responsive?: boolean;\n className?: string;\n}\n\nconst widthClasses = {\n sm: 'w-48',\n md: 'w-64',\n lg: 'w-80',\n};\n\nconst breakpointClasses = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n};\n\nexport const AppShell: React.FC<AppShellProps> = ({\n children,\n navbar,\n header,\n navbarTitle,\n navbarLogo,\n defaultNavbarOpen = false,\n responsive = true,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [isMobileNavbarOpen, setIsMobileNavbarOpen] = useState(defaultNavbarOpen);\n\n const navbarWidth = navbar?.width || 'md';\n const navbarBreakpoint = navbar?.breakpoint || 'md';\n const navbarPosition = navbar?.position || 'side';\n const widthClass = widthClasses[navbarWidth];\n const breakpoint = breakpointClasses[navbarBreakpoint];\n\n // Non-responsive mode: always show sidebar\n if (!responsive && navbar) {\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <div className=\"flex flex-1\">\n <aside className={`${widthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 h-full overflow-y-auto`}>\n {navbar.content}\n </aside>\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // Non-responsive mode without navbar\n if (!responsive) {\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n }\n\n // Responsive mode with TOP navbar\n if (navbar && navbarPosition === 'top') {\n const mobileMenuClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n const desktopNavClass = navbarBreakpoint === 'sm' ? 'sm:flex' :\n navbarBreakpoint === 'md' ? 'md:flex' :\n navbarBreakpoint === 'lg' ? 'lg:flex' : 'xl:flex';\n\n return (\n <div className={`min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`}>\n {/* Top Navbar */}\n <nav className=\"sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between items-center h-16\">\n {/* Logo/Title */}\n <div className=\"flex items-center\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n </div>\n\n {/* Desktop Navigation - Hidden on Mobile */}\n <div className={`hidden ${desktopNavClass} items-center gap-6`}>\n {navbar.content}\n </div>\n\n {/* Mobile Hamburger - Visible on Mobile */}\n <button\n className={`${mobileMenuClass} p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors`}\n onClick={() => setIsMobileNavbarOpen(!isMobileNavbarOpen)}\n aria-label=\"Toggle menu\"\n >\n <MenuIcon size=\"md\" />\n </button>\n </div>\n </div>\n </nav>\n\n {/* Header (optional, shows below top navbar) */}\n {header && <div className=\"w-full\">{header}</div>}\n\n {/* Mobile Drawer */}\n {isMobileNavbarOpen && (\n <>\n <div\n className={`${mobileMenuClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`}\n onClick={() => setIsMobileNavbarOpen(false)}\n />\n <div className={`${mobileMenuClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`}>\n <div className=\"p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(false)}\n aria-label=\"Close menu\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div\n className=\"p-4 flex flex-col gap-4\"\n onClick={() => setIsMobileNavbarOpen(false)}\n >\n {navbar.content}\n </div>\n </div>\n </>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n }\n\n // Responsive mode with SIDE navbar\n if (navbar) {\n // Build breakpoint classes statically\n const mobileHeaderClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n const desktopNavbarClass = navbarBreakpoint === 'sm' ? 'sm:block' :\n navbarBreakpoint === 'md' ? 'md:block' :\n navbarBreakpoint === 'lg' ? 'lg:block' : 'xl:block';\n\n const mobileDrawerClass = navbarBreakpoint === 'sm' ? 'sm:hidden' :\n navbarBreakpoint === 'md' ? 'md:hidden' :\n navbarBreakpoint === 'lg' ? 'lg:hidden' : 'xl:hidden';\n\n // Build width classes statically (Tailwind can't use dynamic classes)\n const sidebarWidthClass = navbarWidth === 'sm' ? 'w-48' :\n navbarWidth === 'lg' ? 'w-80' : 'w-64';\n\n return (\n <div className={`min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`}>\n {/* Mobile Header - Hidden on Desktop */}\n <div className={`${mobileHeaderClass} sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-3 flex items-center justify-between`}>\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(!isMobileNavbarOpen)}\n aria-label=\"Toggle menu\"\n >\n <MenuIcon size=\"md\" />\n </button>\n </div>\n\n {/* Header (optional, shows on all screen sizes) */}\n {header && <div className=\"w-full\">{header}</div>}\n\n {/* Main Layout */}\n <div className=\"flex flex-1 min-h-0\">\n {/* Desktop Navbar - Hidden on Mobile */}\n <aside className={`hidden ${desktopNavbarClass} ${sidebarWidthClass} bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 overflow-y-auto shrink-0`}>\n {navbar.content}\n </aside>\n\n {/* Mobile Drawer Overlay */}\n {isMobileNavbarOpen && (\n <>\n <div\n className={`${mobileDrawerClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`}\n onClick={() => setIsMobileNavbarOpen(false)}\n />\n <div className={`${mobileDrawerClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`}>\n <div className=\"p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between\">\n {navbarLogo ? (\n <div>{navbarLogo}</div>\n ) : navbarTitle ? (\n <span className=\"text-xl font-bold text-gray-900 dark:text-gray-100\">\n {navbarTitle}\n </span>\n ) : null}\n <button\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={() => setIsMobileNavbarOpen(false)}\n aria-label=\"Close menu\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div\n className=\"overflow-y-auto h-[calc(100vh-73px)]\"\n onClick={() => setIsMobileNavbarOpen(false)}\n >\n {navbar.content}\n </div>\n </div>\n </>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto min-h-screen\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // Responsive mode without navbar\n return (\n <div className={`min-h-screen flex flex-col ${className}`}>\n {header && <div className=\"w-full\">{header}</div>}\n <main className=\"flex-1 overflow-y-auto\">\n {children}\n </main>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface IconProps {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n color?: string;\n}\n\nconst sizeClasses = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n xl: 'w-8 h-8',\n};\n\nexport interface IconComponent extends React.FC<IconProps> {\n displayName?: string;\n}\n\nexport const createIcon = (\n displayName: string,\n path: React.ReactNode,\n filled = false\n): IconComponent => {\n const Icon: IconComponent = ({ size = 'md', className = '', color = 'currentColor' }) => {\n const sizeClass = sizeClasses[size];\n return (\n <svg\n className={`${sizeClass} ${className}`}\n fill={filled ? color : \"none\"}\n viewBox=\"0 0 24 24\"\n stroke={filled ? \"none\" : color}\n aria-hidden=\"true\"\n >\n {path}\n </svg>\n );\n };\n Icon.displayName = displayName;\n return Icon;\n};\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const HomeIcon = createIcon(\n 'HomeIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const UserIcon = createIcon(\n 'UserIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SearchIcon = createIcon(\n 'SearchIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const BellIcon = createIcon(\n 'BellIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SettingsIcon = createIcon(\n 'SettingsIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </>\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const MenuIcon = createIcon(\n 'MenuIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6h16M4 12h16M4 18h16\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CloseIcon = createIcon(\n 'CloseIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const PlusIcon = createIcon(\n 'PlusIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ArrowLeftIcon = createIcon(\n 'ArrowLeftIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ArrowRightIcon = createIcon(\n 'ArrowRightIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronDownIcon = createIcon(\n 'ChevronDownIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronUpIcon = createIcon(\n 'ChevronUpIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronLeftIcon = createIcon(\n 'ChevronLeftIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChevronRightIcon = createIcon(\n 'ChevronRightIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ExternalLinkIcon = createIcon(\n 'ExternalLinkIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CheckIcon = createIcon(\n 'CheckIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CheckCircleIcon = createIcon(\n 'CheckCircleIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const AlertCircleIcon = createIcon(\n 'AlertCircleIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const InfoCircleIcon = createIcon(\n 'InfoCircleIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const TrashIcon = createIcon(\n 'TrashIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const EditIcon = createIcon(\n 'EditIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CopyIcon = createIcon(\n 'CopyIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SaveIcon = createIcon(\n 'SaveIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const DownloadIcon = createIcon(\n 'DownloadIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const UploadIcon = createIcon(\n 'UploadIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const RefreshIcon = createIcon(\n 'RefreshIcon',\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);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const EyeIcon = createIcon(\n 'EyeIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const EyeOffIcon = createIcon(\n 'EyeOffIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const PlayIcon = createIcon(\n 'PlayIcon',\n <path d=\"M8 5v14l11-7z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const PauseIcon = createIcon(\n 'PauseIcon',\n <>\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n </>,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const StopIcon = createIcon(\n 'StopIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SkipBackIcon = createIcon(\n 'SkipBackIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0019 16V8a1 1 0 00-1.6-.8l-5.333 4zM4.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0011 16V8a1 1 0 00-1.6-.8l-5.334 4z\" />\n </>,\n false\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SkipForwardIcon = createIcon(\n 'SkipForwardIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.933 12.8a1 1 0 000-1.6L6.6 7.2A1 1 0 005 8v8a1 1 0 001.6.8l5.333-4zM19.933 12.8a1 1 0 000-1.6l-5.333-4A1 1 0 0013 8v8a1 1 0 001.6.8l5.333-4z\" />\n </>,\n false\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const VolumeUpIcon = createIcon(\n 'VolumeUpIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\" />\n </>,\n false\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const VolumeOffIcon = createIcon(\n 'VolumeOffIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\" clipRule=\"evenodd\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2\" />\n </>,\n false\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const MailIcon = createIcon(\n 'MailIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ChatIcon = createIcon(\n 'ChatIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const StarIcon = createIcon(\n 'StarIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const HeartIcon = createIcon(\n 'HeartIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CameraIcon = createIcon(\n 'CameraIcon',\n <>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\" />\n </>\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CalendarIcon = createIcon(\n 'CalendarIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const BookIcon = createIcon(\n 'BookIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const FileIcon = createIcon(\n 'FileIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const FolderIcon = createIcon(\n 'FolderIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ImageIcon = createIcon(\n 'ImageIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CodeIcon = createIcon(\n 'CodeIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const TerminalIcon = createIcon(\n 'TerminalIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const DatabaseIcon = createIcon(\n 'DatabaseIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const CloudIcon = createIcon(\n 'CloudIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const PlugIcon = createIcon(\n 'PlugIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const KeyIcon = createIcon(\n 'KeyIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const LockIcon = createIcon(\n 'LockIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const ShieldIcon = createIcon(\n 'ShieldIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SparklesIcon = createIcon(\n 'SparklesIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const BrainIcon = createIcon(\n 'BrainIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const GlobeIcon = createIcon(\n 'GlobeIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const BeakerIcon = createIcon(\n 'BeakerIcon',\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const GoogleIcon = createIcon(\n 'GoogleIcon',\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const GitHubIcon = createIcon(\n 'GitHubIcon',\n <path d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const TwitterIcon = createIcon(\n 'TwitterIcon',\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const FacebookIcon = createIcon(\n 'FacebookIcon',\n <path d=\"M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const AppleIcon = createIcon(\n 'AppleIcon',\n <path d=\"M17.05 20.28c-.98.95-2.05.88-3.08.4-1.09-.5-2.08-.48-3.24 0-1.44.62-2.2.44-3.06-.4C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const LinkedInIcon = createIcon(\n 'LinkedInIcon',\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const YouTubeIcon = createIcon(\n 'YouTubeIcon',\n <path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />,\n true\n);\n","\"use client\";\n\nimport { createIcon } from './icon-utils';\n\nexport const SlackIcon = createIcon(\n 'SlackIcon',\n <path d=\"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z\" />,\n true\n);\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n position?: 'left' | 'right' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n showCloseButton?: boolean;\n}\n\nconst sizeClasses = {\n left: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n },\n right: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n },\n top: {\n sm: 'h-48',\n md: 'h-64',\n lg: 'h-80',\n },\n bottom: {\n sm: 'h-48',\n md: 'h-64',\n lg: 'h-80',\n },\n};\n\nconst positionClasses = {\n left: 'left-0 top-0 h-full',\n right: 'right-0 top-0 h-full',\n top: 'top-0 left-0 w-full',\n bottom: 'bottom-0 left-0 w-full',\n};\n\nconst slideClasses = {\n left: 'transform transition-transform duration-300',\n right: 'transform transition-transform duration-300',\n top: 'transform transition-transform duration-300',\n bottom: 'transform transition-transform duration-300',\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n title,\n children,\n position = 'right',\n size = 'md',\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'unset';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const sizeClass = sizeClasses[position][size];\n const positionClass = positionClasses[position];\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-40 bg-black/60 backdrop-blur-sm transition-all duration-200\"\n onClick={onClose}\n />\n\n {/* Drawer */}\n <div\n className={`fixed z-50 ${positionClass} ${sizeClass} bg-white dark:bg-gray-800 shadow-2xl overflow-hidden flex flex-col ${slideClasses[position]}`}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700\">\n {title && (\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n {title}\n </h3>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"ml-auto text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n aria-label=\"Close drawer\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 p-6 overflow-y-auto\">\n {children}\n </div>\n </div>\n </>\n );\n};\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nconst sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n};\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n fullWidth = false,\n leftIcon,\n rightIcon,\n className = '',\n disabled,\n ...props\n },\n ref\n ) => {\n const { theme, themeName } = useTheme();\n\n const baseStyles = theme.select?.base || 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const sizeStyle = sizeClasses[size];\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n const widthStyle = fullWidth ? 'w-full' : '';\n const paddingWithIcon = leftIcon ? 'pl-10' : rightIcon ? 'pr-10' : '';\n\n return (\n <div className={`${widthStyle} ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && (\n <div className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500\">\n {leftIcon}\n </div>\n )}\n <input\n ref={ref}\n className={`${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithIcon}`.trim()}\n disabled={disabled}\n {...props}\n />\n {rightIcon && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500\">\n {rightIcon}\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n }\n);\n\nTextInput.displayName = 'TextInput';\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface NumberInputProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: number;\n onChange?: (value: number | undefined) => void;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n disabled?: boolean;\n hideControls?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2.5 text-base',\n lg: 'px-4 py-3 text-lg',\n};\n\nexport const NumberInput: React.FC<NumberInputProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n min,\n max,\n step = 1,\n precision,\n disabled = false,\n hideControls = false,\n size = 'md',\n fullWidth = false,\n placeholder,\n className = '',\n}) => {\n const { theme } = useTheme();\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n if (precision !== undefined) {\n clamped = parseFloat(clamped.toFixed(precision));\n }\n return clamped;\n };\n\n const handleIncrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = clampValue(currentValue + step);\n onChange?.(newValue);\n };\n\n const handleDecrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = clampValue(currentValue - step);\n onChange?.(newValue);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n\n if (inputValue === '' || inputValue === '-') {\n onChange?.(undefined);\n return;\n }\n\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n const clamped = clampValue(numValue);\n onChange?.(clamped);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const sizeStyle = sizeClasses[size];\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n const widthStyle = fullWidth ? 'w-full' : '';\n const paddingWithControls = !hideControls ? 'pr-8' : '';\n\n const displayValue = value !== undefined ? value.toString() : '';\n\n return (\n <div className={`${widthStyle} ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={inputRef}\n type=\"number\"\n value={displayValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n placeholder={placeholder}\n min={min}\n max={max}\n step={step}\n className={`${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithControls} [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`.trim()}\n />\n {!hideControls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col\">\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={disabled || (max !== undefined && value !== undefined && value >= max)}\n className=\"px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed\"\n tabIndex={-1}\n >\n <svg className=\"w-3 h-3 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={disabled || (min !== undefined && value !== undefined && value <= min)}\n className=\"px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed\"\n tabIndex={-1}\n >\n <svg className=\"w-3 h-3 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n\nNumberInput.displayName = 'NumberInput';\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport type ActionMenuItem = {\n type?: 'item';\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n variant?: 'default' | 'danger';\n} | {\n type: 'divider';\n};\n\nexport interface ActionMenuProps {\n items: ActionMenuItem[];\n trigger?: React.ReactNode;\n position?: 'left' | 'right';\n placement?: 'top' | 'bottom' | 'left' | 'right';\n}\n\nexport const ActionMenu: React.FC<ActionMenuProps> = ({\n items,\n trigger,\n position = 'right',\n placement = 'bottom',\n}) => {\n const { themeName } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState<{ top: number; left: number } | null>(null);\n const [mounted, setMounted] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node) &&\n triggerRef.current && !triggerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n const menuWidth = 224; // 14rem\n const menuHeight = 300; // Approximate max height\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'top':\n top = rect.top - menuHeight - spacing;\n left = position === 'left' ? rect.left : rect.right - menuWidth;\n break;\n case 'bottom':\n top = rect.bottom + spacing;\n left = position === 'left' ? rect.left : rect.right - menuWidth;\n break;\n case 'left':\n top = rect.top;\n left = rect.left - menuWidth - spacing;\n break;\n case 'right':\n top = rect.top;\n left = rect.right + spacing;\n break;\n }\n\n setMenuPosition({ top, left });\n } else {\n setMenuPosition(null);\n }\n }, [isOpen, position, placement]);\n\n const handleItemClick = (item: ActionMenuItem) => {\n if (item.type === 'divider') return;\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n }\n };\n\n const defaultTrigger = (\n <button\n className=\"p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n aria-label=\"Open menu\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z\" />\n </svg>\n </button>\n );\n\n const menuBaseStyles = themeName === 'minimalistic'\n ? 'bg-black border-2 border-white'\n : 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-lg';\n\n const itemBaseStyles = themeName === 'minimalistic'\n ? 'text-white hover:bg-white hover:text-black transition-colors duration-200'\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors';\n\n const menu = isOpen && mounted && menuPosition ? (\n <div\n ref={menuRef}\n className={`fixed w-56 rounded-lg ${menuBaseStyles} z-[9999] max-h-[80vh] overflow-auto`}\n style={{\n minWidth: '14rem',\n top: `${menuPosition.top}px`,\n left: `${menuPosition.left}px`,\n }}\n >\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return (\n <div\n key={index}\n className=\"my-1 border-t border-gray-200 dark:border-gray-700\"\n />\n );\n }\n\n return (\n <button\n key={index}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={`w-full text-left px-4 py-3 flex items-center gap-3 ${itemBaseStyles} ${\n item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'\n } ${\n item.variant === 'danger' ? 'text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20' : ''\n }`}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n </button>\n );\n })}\n </div>\n ) : null;\n\n return (\n <>\n <div className=\"relative inline-block\" ref={triggerRef}>\n <div onClick={() => setIsOpen(!isOpen)}>\n {trigger || defaultTrigger}\n </div>\n </div>\n {mounted && createPortal(menu, document.body)}\n </>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n className?: string;\n padding?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n};\n\nexport const Card: React.FC<CardProps> = ({\n children,\n className = '',\n padding = 'md',\n hover = false,\n ...props\n}) => {\n const { theme } = useTheme();\n\n const paddingClass = paddingClasses[padding];\n const hoverClass = hover\n ? 'hover:shadow-xl hover:scale-[1.02] hover:border-blue-400 dark:hover:border-blue-500 cursor-pointer transition-all duration-200 ease-in-out'\n : '';\n\n return (\n <div\n className={`bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 ${paddingClass} ${hoverClass} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface AlertProps {\n variant?: 'info' | 'success' | 'warning' | 'error';\n title?: string;\n children: React.ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst variantStyles = {\n info: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100',\n success: 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-900 dark:text-yellow-100',\n error: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-900 dark:text-red-100',\n};\n\nconst iconStyles = {\n info: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n error: 'text-red-600 dark:text-red-400',\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n children,\n onClose,\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const variantClass = variantStyles[variant];\n const iconClass = iconStyles[variant];\n\n return (\n <div className={`rounded-lg border p-4 ${variantClass} ${className}`} role=\"alert\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex-shrink-0 ${iconClass}`}>\n {variant === 'info' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'success' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'warning' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n )}\n {variant === 'error' && (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </div>\n <div className=\"flex-1\">\n {title && <h3 className=\"font-semibold mb-1\">{title}</h3>}\n <div className=\"text-sm\">{children}</div>\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className={`flex-shrink-0 ${iconClass} hover:opacity-70 transition-opacity`}\n aria-label=\"Close alert\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n error?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, error, className = '', disabled, checked, ...props }, ref) => {\n const { theme } = useTheme();\n\n return (\n <div className={className}>\n <label className=\"flex items-center gap-2 cursor-pointer group\">\n <div className=\"relative inline-flex items-center\">\n <input\n ref={ref}\n type=\"checkbox\"\n disabled={disabled}\n checked={checked}\n className=\"sr-only peer\"\n {...props}\n />\n <div className={`w-4 h-4 border-2 rounded transition-all duration-200 flex items-center justify-center\n ${error\n ? 'border-red-500 dark:border-red-500'\n : 'border-gray-300 dark:border-gray-600'\n }\n ${disabled\n ? 'opacity-50 cursor-not-allowed bg-gray-100 dark:bg-gray-800'\n : 'peer-hover:border-gray-400 dark:peer-hover:border-gray-500'\n }\n peer-checked:bg-blue-600 peer-checked:border-blue-600\n peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2\n `}>\n {/* Checkmark SVG */}\n <svg\n className={`w-3 h-3 text-white transition-opacity duration-200 ${\n checked ? 'opacity-100' : 'opacity-0'\n }`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3L4.5 8.5L2 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n {label && (\n <span className={`text-sm text-gray-700 dark:text-gray-300 ${disabled ? 'opacity-50 cursor-not-allowed' : 'group-hover:text-gray-900 dark:group-hover:text-gray-100'}`}>\n {label}\n </span>\n )}\n </label>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ label, size = 'md', className = '', disabled, checked, ...props }, ref) => {\n const { theme } = useTheme();\n\n // Use complete class strings for Tailwind\n const toggleClasses = {\n sm: {\n switch: 'w-9 h-5',\n thumb: 'w-4 h-4 peer-checked:translate-x-4',\n },\n md: {\n switch: 'w-11 h-6',\n thumb: 'w-5 h-5 peer-checked:translate-x-5',\n },\n lg: {\n switch: 'w-14 h-7',\n thumb: 'w-6 h-6 peer-checked:translate-x-7',\n },\n };\n\n const currentSize = toggleClasses[size];\n\n return (\n <label className={`inline-flex items-center gap-3 cursor-pointer ${disabled ? 'opacity-50 cursor-not-allowed' : ''} ${className}`}>\n <div className=\"relative\">\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"sr-only peer\"\n disabled={disabled}\n checked={checked}\n {...props}\n />\n <div\n className={`${currentSize.switch} bg-gray-300 dark:bg-gray-700 peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 dark:peer-checked:bg-blue-500 transition-colors`}\n ></div>\n <div\n className={`${currentSize.thumb} bg-white rounded-full shadow-md absolute top-0.5 left-0.5 transition-transform`}\n ></div>\n </div>\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface BadgeProps {\n children: React.ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst variantStyles = {\n default: 'bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200',\n primary: 'bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200',\n success: 'bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-200',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-200',\n error: 'bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-200',\n info: 'bg-cyan-100 dark:bg-cyan-900/30 text-cyan-800 dark:text-cyan-200',\n};\n\nconst sizeStyles = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'md',\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const variantClass = variantStyles[variant];\n const sizeClass = sizeStyles[size];\n\n return (\n <span className={`inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`}>\n {children}\n </span>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SpinnerProps {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n color?: 'primary' | 'secondary' | 'white';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'w-4 h-4 border-2',\n md: 'w-8 h-8 border-2',\n lg: 'w-12 h-12 border-3',\n xl: 'w-16 h-16 border-4',\n};\n\nconst colorClasses = {\n primary: 'border-blue-600 border-t-transparent',\n secondary: 'border-gray-600 border-t-transparent',\n white: 'border-white border-t-transparent',\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color = 'primary',\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const sizeClass = sizeClasses[size];\n const colorClass = colorClasses[color];\n\n return (\n <div\n className={`inline-block rounded-full animate-spin ${sizeClass} ${colorClass} ${className}`}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface Tab {\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n defaultIndex?: number;\n onChange?: (index: number) => void;\n className?: string;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n defaultIndex = 0,\n onChange,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [activeIndex, setActiveIndex] = useState(defaultIndex);\n\n const handleTabClick = (index: number) => {\n if (tabs[index].disabled) return;\n setActiveIndex(index);\n onChange?.(index);\n };\n\n return (\n <div className={className}>\n {/* Tab Headers */}\n <div className=\"border-b border-gray-200 dark:border-gray-700\">\n <nav className=\"flex gap-8 px-6\" aria-label=\"Tabs\">\n {tabs.map((tab, index) => (\n <button\n key={index}\n onClick={() => handleTabClick(index)}\n disabled={tab.disabled}\n className={`py-4 px-1 border-b-2 font-medium text-sm transition-colors ${\n activeIndex === index\n ? 'border-blue-600 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:border-gray-300 dark:hover:border-gray-600'\n } ${tab.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n aria-current={activeIndex === index ? 'page' : undefined}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab Content */}\n <div>\n {tabs[activeIndex]?.content}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface Column<T = any> {\n key: string;\n title: string;\n render?: (value: any, row: T, index: number) => React.ReactNode;\n width?: string;\n}\n\nexport interface TableProps<T = any> {\n columns: Column<T>[];\n data: T[];\n keyField?: string;\n striped?: boolean;\n hoverable?: boolean;\n className?: string;\n}\n\nexport function Table<T extends Record<string, any>>({\n columns,\n data,\n keyField = 'id',\n striped = false,\n hoverable = true,\n className = '',\n}: TableProps<T>) {\n const { theme } = useTheme();\n\n return (\n <div className={`overflow-x-auto ${className}`}>\n <table className=\"w-full text-left\">\n <thead className=\"bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <tr>\n {columns.map((column, colIndex) => {\n const isLast = colIndex === columns.length - 1;\n return (\n <th\n key={column.key}\n className={\n isLast\n ? 'px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider relative'\n : 'px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'\n }\n style={{ width: column.width }}\n >\n {column.title}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700\">\n {data.map((row, rowIndex) => {\n const rowClasses = [\n striped && rowIndex % 2 === 1 ? 'bg-gray-50 dark:bg-gray-800/50' : '',\n hoverable ? 'hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors' : ''\n ].filter(Boolean).join(' ');\n\n return (\n <tr\n key={row[keyField] || rowIndex}\n className={rowClasses}\n >\n {columns.map((column, colIndex) => {\n const isLast = colIndex === columns.length - 1;\n return (\n <td\n key={column.key}\n className={\n isLast\n ? 'px-6 py-4 text-sm text-gray-900 dark:text-gray-100 overflow-visible'\n : 'px-6 py-4 text-sm text-gray-900 dark:text-gray-100'\n }\n >\n {column.render\n ? column.render(row[column.key], row, rowIndex)\n : row[column.key]}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n {data.length === 0 && (\n <div className=\"text-center py-8 text-gray-500 dark:text-gray-400\">\n No data available\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n className?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className = '',\n}) => {\n const { theme } = useTheme();\n\n const range = (start: number, end: number) => {\n const length = end - start + 1;\n return Array.from({ length }, (_, idx) => idx + start);\n };\n\n const paginationRange = () => {\n const totalPageNumbers = siblingCount + 5;\n\n if (totalPageNumbers >= totalPages) {\n return range(1, totalPages);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = 3 + 2 * siblingCount;\n const leftRange = range(1, leftItemCount);\n return [...leftRange, '...', totalPages];\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = 3 + 2 * siblingCount;\n const rightRange = range(totalPages - rightItemCount + 1, totalPages);\n return [firstPageIndex, '...', ...rightRange];\n }\n\n if (shouldShowLeftDots && shouldShowRightDots) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\n }\n\n return range(1, totalPages);\n };\n\n const pages = paginationRange();\n\n return (\n <nav className={`flex items-center gap-1 ${className}`} aria-label=\"Pagination\">\n {/* Previous Button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label=\"Previous page\"\n >\n Previous\n </button>\n\n {/* Page Numbers */}\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <span\n key={`dots-${index}`}\n className=\"px-3 py-2 text-gray-700 dark:text-gray-300\"\n >\n ...\n </span>\n );\n }\n\n return (\n <button\n key={page}\n onClick={() => onPageChange(page as number)}\n className={`px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n currentPage === page\n ? 'bg-blue-600 text-white'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800'\n }`}\n aria-label={`Page ${page}`}\n aria-current={currentPage === page ? 'page' : undefined}\n >\n {page}\n </button>\n );\n })}\n\n {/* Next Button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-2 rounded-md text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label=\"Next page\"\n >\n Next\n </button>\n </nav>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DatePickerProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n minDate,\n maxDate,\n disabled,\n className = '',\n placeholder = 'Select date...',\n}) => {\n const { theme } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [mounted, setMounted] = useState(false);\n const [calendarPosition, setCalendarPosition] = useState<{ top: number; left: number } | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (calendarRef.current && !calendarRef.current.contains(event.target as Node) &&\n inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setCalendarPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n } else {\n setCalendarPosition(null);\n }\n }, [isOpen]);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const calendarDays: Date[] = [];\n\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n const remainingDays = 42 - calendarDays.length;\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n onChange?.(date);\n setIsOpen(false);\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const today = new Date();\n setViewDate(today);\n onChange?.(today);\n setIsOpen(false);\n };\n\n const formatDate = (date?: Date) => {\n if (!date) return '';\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n const calendar = isOpen && mounted && calendarPosition ? (\n <div\n ref={calendarRef}\n className=\"fixed z-[9999] bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-xl p-4\"\n style={{\n top: `${calendarPosition.top}px`,\n left: `${calendarPosition.left}px`,\n minWidth: '320px',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Today\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div key={day} className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((date, index) => {\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-1 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n ) : null;\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div\n ref={inputRef}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim()}\n >\n <span className={!value ? 'text-gray-500 dark:text-gray-400' : ''}>\n {value ? formatDate(value) : placeholder}\n </span>\n <svg className=\"w-5 h-5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n {mounted && createPortal(calendar, document.body)}\n </div>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n","\"use client\";\n\nimport React, { forwardRef } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface TimePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n error?: string;\n helperText?: string;\n}\n\nexport const TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n ({ label, error, helperText, className = '', disabled, ...props }, ref) => {\n const { theme } = useTheme();\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n type=\"time\"\n disabled={disabled}\n className={`${baseStyles} ${errorStyles} ${disabledStyles}`.trim()}\n {...props}\n />\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n </div>\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DateTimePickerProps {\n label?: string;\n error?: string;\n helperText?: string;\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n label,\n error,\n helperText,\n value,\n onChange,\n minDate,\n maxDate,\n disabled,\n className = '',\n placeholder = 'Select date and time...',\n}) => {\n const { theme } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [selectedTime, setSelectedTime] = useState(\n value ? { hours: value.getHours(), minutes: value.getMinutes() } : { hours: 12, minutes: 0 }\n );\n const [mounted, setMounted] = useState(false);\n const [pickerPosition, setPickerPosition] = useState<{ top: number; left: number } | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const pickerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(event.target as Node) &&\n inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPickerPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n } else {\n setPickerPosition(null);\n }\n }, [isOpen]);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const calendarDays: Date[] = [];\n\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n const remainingDays = 42 - calendarDays.length;\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n const newDateTime = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n selectedTime.hours,\n selectedTime.minutes\n );\n onChange?.(newDateTime);\n };\n\n const handleTimeChange = (hours: number, minutes: number) => {\n setSelectedTime({ hours, minutes });\n if (value) {\n const newDateTime = new Date(\n value.getFullYear(),\n value.getMonth(),\n value.getDate(),\n hours,\n minutes\n );\n onChange?.(newDateTime);\n }\n };\n\n const handleDone = () => {\n if (value) {\n setIsOpen(false);\n }\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const now = new Date();\n setViewDate(now);\n setSelectedTime({ hours: now.getHours(), minutes: now.getMinutes() });\n onChange?.(now);\n };\n\n const formatDateTime = (date?: Date) => {\n if (!date) return '';\n return date.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n };\n\n const formatTime = (hours: number, minutes: number) => {\n const period = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${period}`;\n };\n\n const baseStyles = 'w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer';\n const errorStyles = error ? 'border-red-500 focus:ring-red-500 dark:border-red-500' : '';\n const disabledStyles = disabled ? 'opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900' : '';\n\n const picker = isOpen && mounted && pickerPosition ? (\n <div\n ref={pickerRef}\n className=\"fixed z-[9999] bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-xl p-4\"\n style={{\n top: `${pickerPosition.top}px`,\n left: `${pickerPosition.left}px`,\n minWidth: '360px',\n }}\n >\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Now\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div key={day} className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1 mb-4\">\n {calendarDays.map((date, index) => {\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-1 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Time Picker */}\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-4\">\n <div className=\"flex items-center justify-center gap-4 mb-4\">\n {/* Hours */}\n <div className=\"flex flex-col items-center\">\n <label className=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2\">Hour</label>\n <div className=\"flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => handleTimeChange((selectedTime.hours + 1) % 24, selectedTime.minutes)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <input\n type=\"number\"\n min=\"0\"\n max=\"23\"\n value={selectedTime.hours}\n onChange={(e) => {\n const val = parseInt(e.target.value);\n if (!isNaN(val) && val >= 0 && val <= 23) {\n handleTimeChange(val, selectedTime.minutes);\n }\n }}\n className=\"w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n onClick={() => handleTimeChange((selectedTime.hours - 1 + 24) % 24, selectedTime.minutes)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <span className=\"text-2xl font-bold text-gray-600 dark:text-gray-400 mt-8\">:</span>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center\">\n <label className=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2\">Minute</label>\n <div className=\"flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => handleTimeChange(selectedTime.hours, (selectedTime.minutes + 1) % 60)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n <input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n value={selectedTime.minutes}\n onChange={(e) => {\n const val = parseInt(e.target.value);\n if (!isNaN(val) && val >= 0 && val <= 59) {\n handleTimeChange(selectedTime.hours, val);\n }\n }}\n className=\"w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n onClick={() => handleTimeChange(selectedTime.hours, (selectedTime.minutes - 1 + 60) % 60)}\n className=\"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div className=\"text-center text-sm text-gray-600 dark:text-gray-400 mb-4\">\n {formatTime(selectedTime.hours, selectedTime.minutes)}\n </div>\n <button\n onClick={handleDone}\n className=\"w-full px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium\"\n >\n Done\n </button>\n </div>\n </div>\n ) : null;\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <div\n ref={inputRef}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim()}\n >\n <span className={!value ? 'text-gray-500 dark:text-gray-400' : ''}>\n {value ? formatDateTime(value) : placeholder}\n </span>\n <svg className=\"w-5 h-5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>}\n {helperText && !error && <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>}\n {mounted && createPortal(picker, document.body)}\n </div>\n );\n};\n\nDateTimePicker.displayName = 'DateTimePicker';\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CalendarProps {\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n}\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n className = '',\n}) => {\n const { theme } = useTheme();\n const [currentDate, setCurrentDate] = useState(value || new Date());\n const [viewDate, setViewDate] = useState(value || new Date());\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n // Get first day of month and number of days\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n // Build calendar grid\n const calendarDays: (Date | null)[] = [];\n\n // Previous month days\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n calendarDays.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(new Date(year, month, i));\n }\n\n // Next month days to fill grid\n const remainingDays = 42 - calendarDays.length; // 6 rows * 7 days\n for (let i = 1; i <= remainingDays; i++) {\n calendarDays.push(new Date(year, month + 1, i));\n }\n\n const isSameDay = (date1: Date, date2: Date) => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n const isToday = (date: Date) => {\n return isSameDay(date, new Date());\n };\n\n const isSelected = (date: Date) => {\n return value && isSameDay(date, value);\n };\n\n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === month;\n };\n\n const isDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const handleDateClick = (date: Date) => {\n if (isDisabled(date)) return;\n setCurrentDate(date);\n onChange?.(date);\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(year, month - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(year, month + 1, 1));\n };\n\n const handleToday = () => {\n const today = new Date();\n setViewDate(today);\n setCurrentDate(today);\n onChange?.(today);\n };\n\n return (\n <div className={`bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4 ${className}`}>\n {/* Header with month/year and navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Previous month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100\">\n {MONTHS[month]} {year}\n </h2>\n <button\n onClick={handleToday}\n className=\"px-3 py-1 text-sm bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n >\n Today\n </button>\n </div>\n\n <button\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n aria-label=\"Next month\"\n >\n <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div\n key={day}\n className=\"text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-2\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((date, index) => {\n if (!date) return <div key={index} />;\n\n const isCurrentMonthDay = isCurrentMonth(date);\n const isTodayDay = isToday(date);\n const isSelectedDay = isSelected(date);\n const isDisabledDay = isDisabled(date);\n\n return (\n <button\n key={index}\n onClick={() => handleDateClick(date)}\n disabled={isDisabledDay}\n className={`\n aspect-square p-2 rounded-lg text-sm font-medium transition-all\n ${!isCurrentMonthDay ? 'text-gray-400 dark:text-gray-600' : 'text-gray-900 dark:text-gray-100'}\n ${isTodayDay && !isSelectedDay ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-bold' : ''}\n ${isSelectedDay ? 'bg-blue-600 text-white hover:bg-blue-700' : ''}\n ${!isSelectedDay && !isDisabledDay ? 'hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isDisabledDay ? 'opacity-30 cursor-not-allowed' : 'cursor-pointer'}\n `}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface RadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioProps {\n name: string;\n options: RadioOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n name,\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n orientation = 'vertical',\n className = '',\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue || '');\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n const handleChange = (optionValue: string) => {\n if (disabled) return;\n setInternalValue(optionValue);\n onChange?.(optionValue);\n };\n\n const containerClass = orientation === 'horizontal'\n ? 'flex flex-wrap gap-4'\n : 'flex flex-col gap-2';\n\n return (\n <div className={`${containerClass} ${className}`} role=\"radiogroup\">\n {options.map((option) => {\n const isDisabled = disabled || option.disabled;\n const isChecked = value === option.value;\n const id = `${name}-${option.value}`;\n\n return (\n <label\n key={option.value}\n htmlFor={id}\n className={`flex items-center gap-2 cursor-pointer group ${\n isDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n >\n <div className=\"relative inline-flex items-center\">\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={() => handleChange(option.value)}\n disabled={isDisabled}\n className=\"sr-only peer\"\n />\n <div className={`w-4 h-4 rounded-full border-2 transition-all duration-200 flex items-center justify-center\n border-gray-300 dark:border-gray-600\n ${isDisabled\n ? 'bg-gray-100 dark:bg-gray-800'\n : 'peer-hover:border-gray-400 dark:peer-hover:border-gray-500'\n }\n ${isChecked\n ? 'border-blue-600 bg-white dark:bg-gray-900'\n : ''\n }\n peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2\n `}>\n {/* Inner dot */}\n <div className={`w-2 h-2 rounded-full bg-blue-600 transition-all duration-200 ${\n isChecked ? 'scale-100' : 'scale-0'\n }`} />\n </div>\n </div>\n <span className={`text-sm font-medium text-gray-900 dark:text-gray-300 ${\n !isDisabled && 'group-hover:text-gray-700 dark:group-hover:text-gray-100'\n }`}>\n {option.label}\n </span>\n </label>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n label?: string;\n className?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n size = 'md',\n variant = 'default',\n showLabel = false,\n label,\n className = '',\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n const variantClasses = {\n default: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-500 dark:bg-yellow-400',\n danger: 'bg-red-600 dark:bg-red-500',\n };\n\n return (\n <div className={`w-full ${className}`}>\n {(showLabel || label) && (\n <div className=\"flex justify-between items-center mb-1\">\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </span>\n )}\n {showLabel && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n )}\n <div\n className={`w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden ${sizeClasses[size]}`}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n <div\n className={`${sizeClasses[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\n\nexport interface SliderProps {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number) => void;\n disabled?: boolean;\n showValue?: boolean;\n label?: string;\n className?: string;\n // Range slider props\n range?: boolean;\n rangeValue?: [number, number];\n defaultRangeValue?: [number, number];\n onRangeChange?: (value: [number, number]) => void;\n}\n\nexport const Slider: React.FC<SliderProps> = ({\n value: controlledValue,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n disabled = false,\n showValue = false,\n label,\n className = '',\n range = false,\n rangeValue: controlledRangeValue,\n defaultRangeValue = [25, 75],\n onRangeChange,\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [internalRangeValue, setInternalRangeValue] = React.useState<[number, number]>(defaultRangeValue);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = React.useState<'min' | 'max' | null>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const rangeValue = controlledRangeValue !== undefined ? controlledRangeValue : internalRangeValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = Number(e.target.value);\n setInternalValue(newValue);\n onChange?.(newValue);\n };\n\n const handleRangeMouseDown = (e: React.MouseEvent, handle: 'min' | 'max') => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(handle);\n };\n\n const handleRangeMouseMove = (e: MouseEvent) => {\n if (!isDragging || !trackRef.current || disabled) return;\n\n const rect = trackRef.current.getBoundingClientRect();\n const percentage = Math.max(0, Math.min(100, ((e.clientX - rect.left) / rect.width) * 100));\n const newValue = Math.round((percentage / 100) * (max - min) / step) * step + min;\n\n if (isDragging === 'min') {\n const newMin = Math.min(newValue, rangeValue[1] - step);\n const newRange: [number, number] = [newMin, rangeValue[1]];\n setInternalRangeValue(newRange);\n onRangeChange?.(newRange);\n } else {\n const newMax = Math.max(newValue, rangeValue[0] + step);\n const newRange: [number, number] = [rangeValue[0], newMax];\n setInternalRangeValue(newRange);\n onRangeChange?.(newRange);\n }\n };\n\n const handleRangeMouseUp = () => {\n setIsDragging(null);\n };\n\n React.useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleRangeMouseMove);\n document.addEventListener('mouseup', handleRangeMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleRangeMouseMove);\n document.removeEventListener('mouseup', handleRangeMouseUp);\n };\n }\n }, [isDragging, rangeValue]);\n\n const percentage = ((value - min) / (max - min)) * 100;\n const minPercentage = ((rangeValue[0] - min) / (max - min)) * 100;\n const maxPercentage = ((rangeValue[1] - min) / (max - min)) * 100;\n\n if (range) {\n return (\n <div className={`w-full ${className}`}>\n {(label || showValue) && (\n <div className=\"flex justify-between items-center mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {rangeValue[0]} - {rangeValue[1]}\n </span>\n )}\n </div>\n )}\n <div className=\"relative h-10 flex items-center\" ref={trackRef}>\n {/* Background track */}\n <div className=\"absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full\" />\n\n {/* Filled track between handles */}\n <div\n className=\"absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none\"\n style={{\n left: `${minPercentage}%`,\n width: `${maxPercentage - minPercentage}%`,\n }}\n />\n\n {/* Min handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n style={{ left: `${minPercentage}%` }}\n onMouseDown={(e) => handleRangeMouseDown(e, 'min')}\n role=\"slider\"\n aria-label={`${label ? label + ' ' : ''}minimum value`}\n aria-valuemin={min}\n aria-valuemax={rangeValue[1]}\n aria-valuenow={rangeValue[0]}\n tabIndex={disabled ? -1 : 0}\n />\n\n {/* Max handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md cursor-pointer z-10\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleRangeMouseDown(e, 'max')}\n role=\"slider\"\n aria-label={`${label ? label + ' ' : ''}maximum value`}\n aria-valuemin={rangeValue[0]}\n aria-valuemax={max}\n aria-valuenow={rangeValue[1]}\n tabIndex={disabled ? -1 : 0}\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className={`w-full ${className}`}>\n {(label || showValue) && (\n <div className=\"flex justify-between items-center mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {value}\n </span>\n )}\n </div>\n )}\n <div className=\"relative h-10 flex items-center\">\n {/* Background track */}\n <div className=\"absolute w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full\" />\n\n {/* Filled track */}\n <div\n className=\"absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full pointer-events-none\"\n style={{ width: `${percentage}%` }}\n />\n\n {/* Custom handle */}\n <div\n className={`absolute w-4 h-4 -ml-2 rounded-sm bg-white dark:bg-gray-800 border-2 border-blue-600 shadow-md pointer-events-none z-10\n ${disabled ? 'opacity-50' : ''}\n `}\n style={{ left: `${percentage}%` }}\n />\n\n {/* Input slider (invisible but functional) */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className=\"relative w-full h-10 bg-transparent appearance-none cursor-pointer disabled:cursor-not-allowed z-20\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4\n [&::-webkit-slider-thumb]:rounded-sm [&::-webkit-slider-thumb]:bg-transparent [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-sm\n [&::-moz-range-thumb]:bg-transparent [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n name?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n shape?: 'circle' | 'square';\n className?: string;\n fallbackColor?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n className = '',\n fallbackColor = 'bg-blue-600',\n}) => {\n const [imageError, setImageError] = React.useState(false);\n\n const sizeClasses = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-8 h-8 text-sm',\n md: 'w-10 h-10 text-base',\n lg: 'w-12 h-12 text-lg',\n xl: 'w-16 h-16 text-2xl',\n };\n\n const shapeClass = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n\n const getInitials = (name: string): string => {\n const parts = name.trim().split(' ');\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n };\n\n const showImage = src && !imageError;\n const showInitials = !showImage && name;\n\n return (\n <div\n className={`${sizeClasses[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${\n showImage ? 'bg-gray-200 dark:bg-gray-700' : `${fallbackColor} text-white`\n } ${className}`}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt || name || 'Avatar'}\n className=\"w-full h-full object-cover\"\n onError={() => setImageError(true)}\n />\n ) : showInitials ? (\n <span className=\"font-semibold select-none\">{getInitials(name)}</span>\n ) : (\n <svg\n className=\"w-full h-full text-gray-400 dark:text-gray-600\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n size?: 'sm' | 'md' | 'lg';\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n label,\n error,\n helperText,\n size = 'md',\n resize = 'vertical',\n className = '',\n disabled,\n ...props\n}) => {\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm min-h-[80px]',\n md: 'px-4 py-2 text-base min-h-[100px]',\n lg: 'px-4 py-3 text-lg min-h-[120px]',\n };\n\n const resizeClasses = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n };\n\n const baseClasses = `w-full rounded-lg border transition-colors duration-150 focus:outline-none focus:ring-2\n ${error\n ? 'border-red-500 focus:ring-red-500 focus:border-red-500 dark:border-red-400 dark:focus:ring-red-400'\n : 'border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:border-gray-600 dark:focus:ring-blue-400'\n }\n bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100\n placeholder:text-gray-500 dark:placeholder:text-gray-400\n disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-50 dark:disabled:bg-gray-900`;\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {label}\n </label>\n )}\n <textarea\n className={`${baseClasses} ${sizeClasses[size]} ${resizeClasses[resize]}`}\n disabled={disabled}\n {...props}\n />\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useRef, useCallback, useState, useEffect, useLayoutEffect } from 'react';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Modal } from './Modal';\nimport { Button } from './Button';\nimport { TextInput } from './TextInput';\n\nexport interface RichTextEditorProps {\n value?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n className?: string;\n minHeight?: string;\n maxHeight?: string;\n disabled?: boolean;\n label?: string;\n error?: string;\n helperText?: string;\n}\n\ntype FormatCommand = 'bold' | 'italic' | 'underline' | 'strikeThrough';\ntype BlockCommand = 'insertUnorderedList' | 'insertOrderedList' | 'formatBlock';\ntype HeadingLevel = 'h1' | 'h2' | 'h3' | 'p';\n\nexport const RichTextEditor: React.FC<RichTextEditorProps> = ({\n value = '',\n onChange,\n placeholder = 'Start typing...',\n className = '',\n minHeight = '200px',\n maxHeight = '500px',\n disabled = false,\n label,\n error,\n helperText,\n}) => {\n const { themeName } = useTheme();\n const editorRef = useRef<HTMLDivElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n const [activeFormats, setActiveFormats] = useState<Set<string>>(new Set());\n const [showLinkModal, setShowLinkModal] = useState(false);\n const [linkUrl, setLinkUrl] = useState('');\n const [showImageModal, setShowImageModal] = useState(false);\n const [imageUrl, setImageUrl] = useState('');\n const [imageAlt, setImageAlt] = useState('');\n\n // Inject global styles for contenteditable SYNCHRONOUSLY before paint\n useLayoutEffect(() => {\n const styleId = 'rich-text-editor-styles';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n [contenteditable]:empty:before {\n content: attr(data-placeholder);\n color: #9ca3af;\n pointer-events: none;\n }\n [contenteditable] h1 {\n font-size: 2em;\n font-weight: bold;\n margin: 0.67em 0;\n }\n [contenteditable] h2 {\n font-size: 1.5em;\n font-weight: bold;\n margin: 0.75em 0;\n }\n [contenteditable] h3 {\n font-size: 1.17em;\n font-weight: bold;\n margin: 0.83em 0;\n }\n [contenteditable] ul, [contenteditable] ol {\n margin: 1em 0;\n padding-left: 2em;\n }\n [contenteditable] a {\n color: #3b82f6;\n text-decoration: underline;\n }\n .dark [contenteditable] a {\n color: #60a5fa;\n }\n [contenteditable] img {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 1em 0;\n }\n [contenteditable] video {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 1em 0;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n // Track if this is the initial render\n const isInitialRender = useRef(true);\n\n // Update content when value changes (but not on initial render)\n useEffect(() => {\n if (!isInitialRender.current && editorRef.current && editorRef.current.innerHTML !== value) {\n editorRef.current.innerHTML = value;\n }\n isInitialRender.current = false;\n }, [value]);\n\n // Update active formats\n const updateActiveFormats = useCallback(() => {\n const formats = new Set<string>();\n\n if (document.queryCommandState('bold')) formats.add('bold');\n if (document.queryCommandState('italic')) formats.add('italic');\n if (document.queryCommandState('underline')) formats.add('underline');\n if (document.queryCommandState('strikeThrough')) formats.add('strikeThrough');\n if (document.queryCommandState('insertUnorderedList')) formats.add('ul');\n if (document.queryCommandState('insertOrderedList')) formats.add('ol');\n\n // Check heading level\n const parentNode = window.getSelection()?.anchorNode?.parentElement;\n if (parentNode) {\n const tagName = parentNode.tagName.toLowerCase();\n if (['h1', 'h2', 'h3'].includes(tagName)) {\n formats.add(tagName);\n }\n }\n\n setActiveFormats(formats);\n }, []);\n\n const handleInput = useCallback(() => {\n if (editorRef.current && onChange) {\n onChange(editorRef.current.innerHTML);\n }\n updateActiveFormats();\n }, [onChange, updateActiveFormats]);\n\n const handleFormat = useCallback((command: FormatCommand) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleList = useCallback((command: BlockCommand) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleHeading = useCallback((level: HeadingLevel) => {\n if (disabled) return;\n document.execCommand('formatBlock', false, level);\n editorRef.current?.focus();\n updateActiveFormats();\n handleInput();\n }, [disabled, updateActiveFormats, handleInput]);\n\n const handleLink = useCallback(() => {\n if (disabled) return;\n setShowLinkModal(true);\n }, [disabled]);\n\n const insertLink = useCallback(() => {\n if (linkUrl) {\n document.execCommand('createLink', false, linkUrl);\n setShowLinkModal(false);\n setLinkUrl('');\n editorRef.current?.focus();\n handleInput();\n }\n }, [linkUrl, handleInput]);\n\n const handleCode = useCallback(() => {\n if (disabled) return;\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const code = document.createElement('code');\n code.className = 'bg-gray-100 dark:bg-gray-700 px-1.5 py-0.5 rounded text-sm font-mono';\n\n try {\n range.surroundContents(code);\n handleInput();\n } catch (e) {\n console.warn('Could not apply code formatting');\n }\n }\n editorRef.current?.focus();\n }, [disabled, handleInput]);\n\n const handleImage = useCallback(() => {\n if (disabled) return;\n setShowImageModal(true);\n }, [disabled]);\n\n const insertImage = useCallback(() => {\n if (!imageUrl) return;\n\n const img = document.createElement('img');\n img.src = imageUrl;\n img.alt = imageAlt || '';\n img.style.maxWidth = '100%';\n img.style.height = 'auto';\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(img);\n\n // Move cursor after image\n range.setStartAfter(img);\n range.setEndAfter(img);\n selection.removeAllRanges();\n selection.addRange(range);\n } else if (editorRef.current) {\n editorRef.current.appendChild(img);\n }\n\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n editorRef.current?.focus();\n handleInput();\n }, [imageUrl, imageAlt, handleInput, disabled]);\n\n // Toolbar button base styles\n const getButtonClass = (isActive: boolean) => {\n const baseClass = themeName === 'minimalistic'\n ? 'border border-white text-white transition-colors'\n : 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 transition-colors';\n\n const activeClass = themeName === 'minimalistic'\n ? 'bg-white text-black'\n : 'bg-blue-100 dark:bg-blue-900 border-blue-500 dark:border-blue-400';\n\n const hoverClass = themeName === 'minimalistic'\n ? 'hover:bg-white hover:text-black'\n : 'hover:bg-gray-100 dark:hover:bg-gray-700';\n\n const disabledClass = disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer';\n\n return `px-2.5 py-1.5 rounded text-sm font-medium ${baseClass} ${isActive ? activeClass : hoverClass} ${disabledClass}`;\n };\n\n // Editor base styles\n const editorBaseClass = themeName === 'minimalistic'\n ? 'bg-transparent border-2 border-white text-white placeholder:text-gray-500'\n : 'bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-900 dark:text-gray-100';\n\n const focusClass = isFocused && !disabled\n ? themeName === 'minimalistic'\n ? 'border-white'\n : 'border-blue-500 dark:border-blue-400 ring-2 ring-blue-500/20'\n : '';\n\n const errorClass = error\n ? 'border-red-500 dark:border-red-400'\n : '';\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n {label}\n </label>\n )}\n\n {/* Toolbar */}\n <div className={`rounded-t-lg border-b ${editorBaseClass} p-2 flex flex-wrap gap-1`}>\n {/* Text Formatting */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleFormat('bold')}\n className={getButtonClass(activeFormats.has('bold'))}\n disabled={disabled}\n title=\"Bold (Ctrl+B)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M12.78 4c1.09 0 2.04.38 2.84 1.14.8.76 1.2 1.74 1.2 2.94 0 .9-.25 1.68-.76 2.36-.51.68-1.2 1.14-2.04 1.38v.08c1.06.22 1.89.7 2.48 1.44.59.74.88 1.64.88 2.7 0 1.34-.47 2.43-1.41 3.27C14.96 19.77 13.74 20 12.24 20H4V4h8.78zm-.66 7.14c.62 0 1.12-.18 1.5-.54.38-.36.57-.84.57-1.44 0-.6-.19-1.08-.57-1.44-.38-.36-.88-.54-1.5-.54H7.5v3.96h4.62zm.24 6.86c.68 0 1.24-.19 1.68-.57.44-.38.66-.9.66-1.56 0-.66-.22-1.18-.66-1.56-.44-.38-1-.57-1.68-.57H7.5v4.26h4.86z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('italic')}\n className={getButtonClass(activeFormats.has('italic'))}\n disabled={disabled}\n title=\"Italic (Ctrl+I)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M11.59 4H16v2h-1.71l-3.58 8H13v2H8v-2h1.71l3.58-8H11.59V4z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('underline')}\n className={getButtonClass(activeFormats.has('underline'))}\n disabled={disabled}\n title=\"Underline (Ctrl+U)\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 16c-2.21 0-4-1.79-4-4V4h2v8c0 1.1.9 2 2 2s2-.9 2-2V4h2v8c0 2.21-1.79 4-4 4zM4 18h12v2H4v-2z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFormat('strikeThrough')}\n className={getButtonClass(activeFormats.has('strikeThrough'))}\n disabled={disabled}\n title=\"Strikethrough\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 4c-2 0-3.5.5-4.5 1.5S4 7.5 4 9h2c0-.7.2-1.2.6-1.6.4-.4 1-.6 1.9-.6.8 0 1.4.2 1.8.5.4.3.7.8.7 1.4 0 .5-.2.9-.5 1.2-.3.3-.9.6-1.8.9l-.7.2c-1.2.3-2.1.7-2.7 1.2C4.2 12.7 4 13.5 4 14.5c0 1.1.4 2 1.1 2.6.7.6 1.7.9 3 .9 2.1 0 3.6-.5 4.6-1.5.9-1 1.3-2.3 1.3-3.8h-2c0 .9-.2 1.6-.7 2.1-.5.5-1.2.7-2.2.7-.8 0-1.4-.2-1.8-.5-.4-.3-.6-.8-.6-1.4 0-.5.2-.9.5-1.2.3-.3.9-.6 1.8-.9l.7-.2c1.2-.3 2.1-.7 2.7-1.2.6-.5.9-1.3.9-2.3 0-1.2-.4-2.1-1.2-2.8-.8-.7-1.9-1-3.3-1zM2 10h16v1H2v-1z\"/>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Headings */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleHeading('h1')}\n className={getButtonClass(activeFormats.has('h1'))}\n disabled={disabled}\n title=\"Heading 1\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H1</text>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleHeading('h2')}\n className={getButtonClass(activeFormats.has('h2'))}\n disabled={disabled}\n title=\"Heading 2\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H2</text>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleHeading('h3')}\n className={getButtonClass(activeFormats.has('h3'))}\n disabled={disabled}\n title=\"Heading 3\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <text x=\"2\" y=\"16\" fontSize=\"14\" fontWeight=\"bold\">H3</text>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Lists */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => handleList('insertUnorderedList')}\n className={getButtonClass(activeFormats.has('ul'))}\n disabled={disabled}\n title=\"Bullet List\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M4 4h2v2H4V4zm4 0h8v2H8V4zM4 8h2v2H4V8zm4 0h8v2H8V8zm-4 4h2v2H4v-2zm4 0h8v2H8v-2zm-4 4h2v2H4v-2zm4 0h8v2H8v-2z\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleList('insertOrderedList')}\n className={getButtonClass(activeFormats.has('ol'))}\n disabled={disabled}\n title=\"Numbered List\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M4 4h1v3H4V4zm0 4h1v1H3V8h2v1H4zm1 2H3v1h2v1H3v1h2v-3zM8 4h8v2H8V4zm0 4h8v2H8V8zm0 4h8v2H8v-2zm0 4h8v2H8v-2z\"/>\n </svg>\n </button>\n </div>\n\n <div className=\"w-px bg-gray-300 dark:bg-gray-600 mx-1\" />\n\n {/* Link & Code */}\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={handleLink}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Insert Link\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleImage}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Insert Image/Video\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleCode}\n className={getButtonClass(false)}\n disabled={disabled}\n title=\"Code\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Editor Content */}\n <div\n ref={editorRef}\n contentEditable={!disabled}\n onInput={handleInput}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onMouseUp={updateActiveFormats}\n onKeyUp={updateActiveFormats}\n dangerouslySetInnerHTML={{ __html: value }}\n className={`\n w-full px-4 py-3 rounded-b-lg outline-none overflow-y-auto\n ${editorBaseClass} ${focusClass} ${errorClass}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n prose prose-sm dark:prose-invert max-w-none\n `}\n style={{\n minHeight,\n maxHeight,\n }}\n data-placeholder={placeholder}\n suppressContentEditableWarning\n />\n\n {/* Helper/Error Text */}\n {error && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n\n {/* Link Modal */}\n <Modal\n isOpen={showLinkModal}\n onClose={() => {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n title=\"Insert Link\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <TextInput\n label=\"URL\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n placeholder=\"https://example.com\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n insertLink();\n }\n }}\n />\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={insertLink}\n disabled={!linkUrl}\n >\n Insert\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Image Modal */}\n <Modal\n isOpen={showImageModal}\n onClose={() => {\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n }}\n title=\"Insert Image\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <TextInput\n label=\"Image URL\"\n value={imageUrl}\n onChange={(e) => setImageUrl(e.target.value)}\n placeholder=\"https://example.com/image.jpg\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n insertImage();\n }\n }}\n />\n\n <TextInput\n label=\"Alt Text (optional)\"\n value={imageAlt}\n onChange={(e) => setImageAlt(e.target.value)}\n placeholder=\"Describe the image\"\n />\n\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setShowImageModal(false);\n setImageUrl('');\n setImageAlt('');\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={insertImage}\n disabled={!imageUrl}\n >\n Insert\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { createContext, useContext, useState, useCallback } from 'react';\nimport { CheckIcon, CloseIcon } from '../icons';\n\nexport interface Toast {\n id: string;\n message: string;\n type?: 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: Toast[];\n addToast: (toast: Omit<Toast, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n};\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({ children, position = 'top-right' }) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const addToast = useCallback((toast: Omit<Toast, 'id'>) => {\n const id = Math.random().toString(36).substring(7);\n const newToast = { ...toast, id };\n setToasts((prev) => [...prev, newToast]);\n\n // Auto-remove after duration\n const duration = toast.duration || 5000;\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }, []);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n };\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n <div className={`fixed ${positionClasses[position]} z-50 flex flex-col gap-2 max-w-md`}>\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onClose={() => removeToast(toast.id)} />\n ))}\n </div>\n </ToastContext.Provider>\n );\n};\n\ninterface ToastItemProps {\n toast: Toast;\n onClose: () => void;\n}\n\nconst ToastItem: React.FC<ToastItemProps> = ({ toast, onClose }) => {\n const typeStyles = {\n success: 'bg-green-50 dark:bg-green-900/30 border-green-500 text-green-800 dark:text-green-200',\n error: 'bg-red-50 dark:bg-red-900/30 border-red-500 text-red-800 dark:text-red-200',\n warning: 'bg-yellow-50 dark:bg-yellow-900/30 border-yellow-500 text-yellow-800 dark:text-yellow-200',\n info: 'bg-blue-50 dark:bg-blue-900/30 border-blue-500 text-blue-800 dark:text-blue-200',\n };\n\n const typeIcons = {\n success: <CheckIcon size=\"sm\" className=\"text-green-600 dark:text-green-400\" />,\n error: <CloseIcon size=\"sm\" className=\"text-red-600 dark:text-red-400\" />,\n warning: (\n <svg className=\"w-4 h-4 text-yellow-600 dark:text-yellow-400\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n ),\n info: (\n <svg className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n ),\n };\n\n const type = toast.type || 'info';\n\n return (\n <div\n className={`flex items-start gap-3 p-4 rounded-lg border-l-4 shadow-lg backdrop-blur-sm ${typeStyles[type]} animate-slide-in`}\n role=\"alert\"\n >\n <div className=\"flex-shrink-0 mt-0.5\">{typeIcons[type]}</div>\n <p className=\"flex-1 text-sm font-medium\">{toast.message}</p>\n <button\n onClick={onClose}\n className=\"flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 transition-colors\"\n aria-label=\"Close\"\n >\n <CloseIcon size=\"sm\" />\n </button>\n </div>\n );\n};\n\n// Helper function to easily show toasts\nexport const toast = {\n success: (message: string, duration?: number) => ({\n message,\n type: 'success' as const,\n duration,\n }),\n error: (message: string, duration?: number) => ({\n message,\n type: 'error' as const,\n duration,\n }),\n warning: (message: string, duration?: number) => ({\n message,\n type: 'warning' as const,\n duration,\n }),\n info: (message: string, duration?: number) => ({\n message,\n type: 'info' as const,\n duration,\n }),\n};\n","\"use client\";\n\nimport React from 'react';\nimport { CheckIcon } from '../icons';\n\nexport interface Step {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps {\n steps: Step[];\n currentStep: number;\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport const Stepper: React.FC<StepperProps> = ({\n steps,\n currentStep,\n orientation = 'horizontal',\n className = '',\n}) => {\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <div className={`${isHorizontal ? 'flex items-center' : 'flex flex-col'} ${className}`}>\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isActive = stepNumber === currentStep;\n const isCompleted = stepNumber < currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <React.Fragment key={index}>\n {/* Step */}\n <div className={`flex ${isHorizontal ? 'flex-col items-center' : 'flex-row items-start'} ${isHorizontal ? '' : 'flex-1'}`}>\n <div className=\"flex items-center\">\n {/* Circle/Check */}\n <div\n className={`flex items-center justify-center w-10 h-10 rounded-full border-2 transition-all ${\n isCompleted\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : isActive\n ? 'border-blue-600 bg-white dark:border-blue-500 dark:bg-gray-800'\n : 'border-gray-300 bg-white dark:border-gray-600 dark:bg-gray-800'\n }`}\n >\n {isCompleted ? (\n <CheckIcon size=\"sm\" className=\"text-white\" />\n ) : (\n <span\n className={`text-sm font-semibold ${\n isActive\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-500 dark:text-gray-400'\n }`}\n >\n {stepNumber}\n </span>\n )}\n </div>\n </div>\n\n {/* Label */}\n <div className={`${isHorizontal ? 'mt-2 text-center' : 'ml-4 pb-8'} ${isLast && !isHorizontal ? 'pb-0' : ''}`}>\n <p\n className={`text-sm font-medium ${\n isActive || isCompleted\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-500 dark:text-gray-400'\n }`}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`${\n isHorizontal\n ? 'flex-1 h-0.5 mx-4'\n : 'w-0.5 h-full ml-5 -mt-8'\n } ${\n isCompleted || (isActive && stepNumber < currentStep)\n ? 'bg-blue-600 dark:bg-blue-500'\n : 'bg-gray-300 dark:bg-gray-600'\n }`}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n className?: string;\n label?: string;\n labelPosition?: 'left' | 'center' | 'right';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n variant = 'solid',\n className = '',\n label,\n labelPosition = 'center',\n}) => {\n const variantClasses = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n };\n\n if (label && orientation === 'horizontal') {\n const alignmentClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n };\n\n return (\n <div className={`flex items-center ${alignmentClasses[labelPosition]} ${className}`} role=\"separator\">\n {labelPosition !== 'left' && (\n <div className={`flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600`} />\n )}\n <span className=\"px-4 text-sm text-gray-500 dark:text-gray-400\">\n {label}\n </span>\n {labelPosition !== 'right' && (\n <div className={`flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600`} />\n )}\n </div>\n );\n }\n\n if (orientation === 'vertical') {\n return (\n <div\n className={`inline-block h-full border-l ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`}\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n );\n }\n\n return (\n <hr\n className={`border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`}\n role=\"separator\"\n />\n );\n};\n","\"use client\";\n\nimport React, { useRef, useState } from 'react';\nimport { UploadIcon, CloseIcon } from '../icons';\n\nexport interface FileUploadProps {\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // in bytes\n maxFiles?: number;\n disabled?: boolean;\n onChange?: (files: File[]) => void;\n onError?: (error: string) => void;\n className?: string;\n label?: string;\n helperText?: string;\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n accept,\n multiple = false,\n maxSize,\n maxFiles = 10,\n disabled = false,\n onChange,\n onError,\n className = '',\n label,\n helperText,\n}) => {\n const [files, setFiles] = useState<File[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n };\n\n const validateFiles = (fileList: FileList): File[] => {\n const validFiles: File[] = [];\n const filesArray = Array.from(fileList);\n\n // Check max files\n if (filesArray.length + files.length > maxFiles) {\n onError?.(`Maximum ${maxFiles} files allowed`);\n return validFiles;\n }\n\n for (const file of filesArray) {\n // Check file size\n if (maxSize && file.size > maxSize) {\n onError?.(`File ${file.name} exceeds maximum size of ${formatFileSize(maxSize)}`);\n continue;\n }\n\n validFiles.push(file);\n }\n\n return validFiles;\n };\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList || disabled) return;\n\n const validFiles = validateFiles(fileList);\n if (validFiles.length > 0) {\n const newFiles = multiple ? [...files, ...validFiles] : validFiles;\n setFiles(newFiles);\n onChange?.(newFiles);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (!disabled) {\n setIsDragging(true);\n }\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n };\n\n const handleClick = () => {\n if (!disabled) {\n fileInputRef.current?.click();\n }\n };\n\n const handleRemoveFile = (index: number) => {\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onChange?.(newFiles);\n };\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n {label}\n </label>\n )}\n\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={`relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all ${\n isDragging\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500'\n } ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={(e) => handleFiles(e.target.files)}\n disabled={disabled}\n className=\"hidden\"\n />\n\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"w-12 h-12 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center\">\n <UploadIcon size=\"lg\" className=\"text-gray-400 dark:text-gray-500\" />\n </div>\n <div>\n <p className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n <span className=\"text-blue-600 dark:text-blue-400\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {accept ? `Accepted: ${accept}` : 'Any file type'}\n {maxSize && ` • Max size: ${formatFileSize(maxSize)}`}\n </p>\n </div>\n </div>\n </div>\n\n {helperText && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n\n {/* File List */}\n {files.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n {files.map((file, index) => (\n <div\n key={index}\n className=\"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-gray-100 truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {formatFileSize(file.size)}\n </p>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveFile(index);\n }}\n className=\"ml-4 text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors\"\n aria-label=\"Remove file\"\n >\n <CloseIcon size=\"sm\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useRef, useState, useEffect } from 'react';\nimport { PlayIcon } from '../icons/PlayIcon';\nimport { PauseIcon } from '../icons/PauseIcon';\nimport { SkipBackIcon } from '../icons/SkipBackIcon';\nimport { SkipForwardIcon } from '../icons/SkipForwardIcon';\nimport { VolumeUpIcon } from '../icons/VolumeUpIcon';\nimport { VolumeOffIcon } from '../icons/VolumeOffIcon';\nimport { Button } from './Button';\n\nexport interface AudioPlayerProps {\n src: string;\n title?: string;\n artist?: string;\n album?: string;\n coverArt?: string;\n variant?: 'default' | 'compact' | 'mini';\n autoPlay?: boolean;\n loop?: boolean;\n preload?: 'none' | 'metadata' | 'auto';\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onTimeUpdate?: (currentTime: number) => void;\n className?: string;\n showSkipButtons?: boolean;\n onSkipBack?: () => void;\n onSkipForward?: () => void;\n}\n\nexport const AudioPlayer: React.FC<AudioPlayerProps> = ({\n src,\n title,\n artist,\n album,\n coverArt,\n variant = 'default',\n autoPlay = false,\n loop = false,\n preload = 'metadata',\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n className = '',\n showSkipButtons = false,\n onSkipBack,\n onSkipForward,\n}) => {\n const audioRef = useRef<HTMLAudioElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(1);\n const [isMuted, setIsMuted] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const handleLoadedMetadata = () => {\n setDuration(audio.duration);\n setIsLoading(false);\n };\n\n const handleCanPlay = () => {\n setIsLoading(false);\n };\n\n const handleTimeUpdate = () => {\n setCurrentTime(audio.currentTime);\n onTimeUpdate?.(audio.currentTime);\n };\n\n const handleEnded = () => {\n setIsPlaying(false);\n onEnded?.();\n };\n\n const handlePlay = () => {\n setIsPlaying(true);\n onPlay?.();\n };\n\n const handlePause = () => {\n setIsPlaying(false);\n onPause?.();\n };\n\n const handleError = (e: Event) => {\n console.error('Audio error:', e);\n setIsPlaying(false);\n setIsLoading(false);\n };\n\n const handleLoadStart = () => {\n setIsLoading(true);\n };\n\n audio.addEventListener('loadstart', handleLoadStart);\n audio.addEventListener('loadedmetadata', handleLoadedMetadata);\n audio.addEventListener('canplay', handleCanPlay);\n audio.addEventListener('timeupdate', handleTimeUpdate);\n audio.addEventListener('ended', handleEnded);\n audio.addEventListener('play', handlePlay);\n audio.addEventListener('pause', handlePause);\n audio.addEventListener('error', handleError);\n\n // Trigger load if audio is ready\n if (audio.readyState >= 2) {\n setIsLoading(false);\n setDuration(audio.duration);\n }\n\n return () => {\n audio.removeEventListener('loadstart', handleLoadStart);\n audio.removeEventListener('loadedmetadata', handleLoadedMetadata);\n audio.removeEventListener('canplay', handleCanPlay);\n audio.removeEventListener('timeupdate', handleTimeUpdate);\n audio.removeEventListener('ended', handleEnded);\n audio.removeEventListener('play', handlePlay);\n audio.removeEventListener('pause', handlePause);\n audio.removeEventListener('error', handleError);\n };\n }, [onPlay, onPause, onEnded, onTimeUpdate]);\n\n // Separate effect for src changes\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n // Load the new audio source\n audio.load();\n }, [src]);\n\n const togglePlayPause = async () => {\n const audio = audioRef.current;\n if (!audio) return;\n\n try {\n if (isPlaying) {\n audio.pause();\n } else {\n await audio.play();\n }\n } catch (error) {\n console.error('Playback error:', error);\n setIsPlaying(false);\n }\n };\n\n const handleSeek = (e: React.ChangeEvent<HTMLInputElement>) => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const time = parseFloat(e.target.value);\n audio.currentTime = time;\n setCurrentTime(time);\n };\n\n const handleVolumeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const vol = parseFloat(e.target.value);\n audio.volume = vol;\n setVolume(vol);\n setIsMuted(vol === 0);\n };\n\n const toggleMute = () => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (isMuted) {\n audio.volume = volume || 0.5;\n setIsMuted(false);\n } else {\n audio.volume = 0;\n setIsMuted(true);\n }\n };\n\n const formatTime = (time: number): string => {\n if (!isFinite(time)) return '0:00';\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n };\n\n const handleSkipBack = () => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (onSkipBack) {\n onSkipBack();\n } else {\n audio.currentTime = Math.max(0, audio.currentTime - 10);\n }\n };\n\n const handleSkipForward = () => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (onSkipForward) {\n onSkipForward();\n } else {\n audio.currentTime = Math.min(duration, audio.currentTime + 10);\n }\n };\n\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n // Mini variant - just play button and title\n if (variant === 'mini') {\n return (\n <div className={`flex items-center gap-2 p-2 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 ${className}`}>\n <audio ref={audioRef} src={src} preload={preload} loop={loop} autoPlay={autoPlay} />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"primary\"\n onClick={togglePlayPause}\n disabled={isLoading}\n aria-label={isPlaying ? 'Pause' : 'Play'}\n >\n {isPlaying ? <PauseIcon size=\"sm\" /> : <PlayIcon size=\"sm\" />}\n </Button>\n {title && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300 truncate\">\n {title}\n </span>\n )}\n </div>\n );\n }\n\n // Compact variant - single row layout\n if (variant === 'compact') {\n return (\n <div className={`flex items-center gap-3 p-3 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm ${className}`}>\n <audio ref={audioRef} src={src} preload={preload} loop={loop} autoPlay={autoPlay} />\n\n {/* Play/Pause Button */}\n <Button\n iconOnly\n size=\"md\"\n variant=\"primary\"\n onClick={togglePlayPause}\n disabled={isLoading}\n aria-label={isPlaying ? 'Pause' : 'Play'}\n >\n {isPlaying ? <PauseIcon size=\"md\" /> : <PlayIcon size=\"md\" />}\n </Button>\n\n {/* Track Info */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"text-sm font-medium text-gray-900 dark:text-gray-100 truncate\">\n {title}\n </div>\n )}\n {artist && (\n <div className=\"text-xs text-gray-500 dark:text-gray-400 truncate\">\n {artist}\n </div>\n )}\n </div>\n\n {/* Progress Bar */}\n <div className=\"flex items-center gap-2 flex-1\">\n <span className=\"text-xs text-gray-500 dark:text-gray-400 tabular-nums\">\n {formatTime(currentTime)}\n </span>\n <div className=\"relative flex-1 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden\">\n <div\n className=\"absolute h-full bg-blue-600 dark:bg-blue-500 rounded-full transition-all\"\n style={{ width: `${progress}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n value={currentTime}\n onChange={handleSeek}\n disabled={isLoading}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n aria-label=\"Seek\"\n />\n </div>\n <span className=\"text-xs text-gray-500 dark:text-gray-400 tabular-nums\">\n {formatTime(duration)}\n </span>\n </div>\n\n {/* Volume */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={toggleMute}\n className=\"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n aria-label={isMuted ? 'Unmute' : 'Mute'}\n >\n {isMuted ? <VolumeOffIcon size=\"sm\" /> : <VolumeUpIcon size=\"sm\" />}\n </button>\n <input\n type=\"range\"\n min={0}\n max={1}\n step={0.01}\n value={isMuted ? 0 : volume}\n onChange={handleVolumeChange}\n className=\"w-16 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full appearance-none cursor-pointer\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3\n [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:rounded-full\n [&::-moz-range-thumb]:bg-blue-600 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none\"\n aria-label=\"Volume\"\n />\n </div>\n </div>\n );\n }\n\n // Default variant - full featured player\n return (\n <div className={`bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-md overflow-hidden ${className}`}>\n <audio ref={audioRef} src={src} preload={preload} loop={loop} autoPlay={autoPlay} />\n\n {/* Header with artwork and track info */}\n <div className=\"flex items-center gap-4 p-4 border-b border-gray-200 dark:border-gray-700\">\n {coverArt && (\n <div className=\"w-16 h-16 flex-shrink-0 rounded-md overflow-hidden bg-gray-100 dark:bg-gray-700\">\n <img\n src={coverArt}\n alt={`${title || 'Track'} cover art`}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className=\"text-base font-semibold text-gray-900 dark:text-gray-100 truncate\">\n {title}\n </h3>\n )}\n {artist && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400 truncate\">\n {artist}\n </p>\n )}\n {album && (\n <p className=\"text-xs text-gray-500 dark:text-gray-500 truncate\">\n {album}\n </p>\n )}\n </div>\n </div>\n\n {/* Progress Bar */}\n <div className=\"px-4 pt-4\">\n <div className=\"relative h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden\">\n <div\n className=\"absolute h-full bg-blue-600 dark:bg-blue-500 rounded-full transition-all\"\n style={{ width: `${progress}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n value={currentTime}\n onChange={handleSeek}\n disabled={isLoading}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n aria-label=\"Seek\"\n />\n </div>\n <div className=\"flex justify-between items-center mt-1 text-xs text-gray-500 dark:text-gray-400 tabular-nums\">\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n\n {/* Controls */}\n <div className=\"flex items-center justify-between px-4 py-4\">\n {/* Left side - Volume */}\n <div className=\"flex items-center gap-2 flex-1\">\n <button\n onClick={toggleMute}\n className=\"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n aria-label={isMuted ? 'Unmute' : 'Mute'}\n >\n {isMuted ? <VolumeOffIcon size=\"md\" /> : <VolumeUpIcon size=\"md\" />}\n </button>\n <input\n type=\"range\"\n min={0}\n max={1}\n step={0.01}\n value={isMuted ? 0 : volume}\n onChange={handleVolumeChange}\n className=\"w-20 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full appearance-none cursor-pointer\n [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3\n [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:cursor-pointer\n [&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:rounded-full\n [&::-moz-range-thumb]:bg-blue-600 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-none\"\n aria-label=\"Volume\"\n />\n </div>\n\n {/* Center - Playback Controls */}\n <div className=\"flex items-center gap-2\">\n {showSkipButtons && (\n <Button\n iconOnly\n size=\"md\"\n variant=\"secondary\"\n onClick={handleSkipBack}\n disabled={isLoading}\n aria-label=\"Skip back 10 seconds\"\n >\n <SkipBackIcon size=\"md\" />\n </Button>\n )}\n\n <Button\n iconOnly\n size=\"lg\"\n variant=\"primary\"\n onClick={togglePlayPause}\n disabled={isLoading}\n aria-label={isPlaying ? 'Pause' : 'Play'}\n >\n {isPlaying ? <PauseIcon size=\"lg\" /> : <PlayIcon size=\"lg\" />}\n </Button>\n\n {showSkipButtons && (\n <Button\n iconOnly\n size=\"md\"\n variant=\"secondary\"\n onClick={handleSkipForward}\n disabled={isLoading}\n aria-label=\"Skip forward 10 seconds\"\n >\n <SkipForwardIcon size=\"md\" />\n </Button>\n )}\n </div>\n\n {/* Right side - Spacer for balance */}\n <div className=\"flex-1\" />\n </div>\n </div>\n );\n};\n","/**\n * Theme initialization script that runs before React hydration\n * This prevents flickering by setting the theme before the page renders\n * Must be inlined in the HTML <head> as a blocking script\n */\n\nexport const themeScript = `\n(function() {\n try {\n // Get stored preferences\n const storedTheme = localStorage.getItem('lite-ui-theme') || 'default';\n const storedColorMode = localStorage.getItem('lite-ui-color-mode');\n\n // Determine color mode (system, light, or dark)\n let colorMode = storedColorMode;\n if (!colorMode || colorMode === 'system') {\n colorMode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Set attributes before render\n document.documentElement.setAttribute('data-theme', storedTheme);\n document.documentElement.setAttribute('data-color-mode', colorMode);\n\n // Add dark class for Tailwind\n if (colorMode === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n } catch (e) {\n console.error('Failed to initialize theme:', e);\n }\n})();\n`;\n\nexport function getThemeScript() {\n return themeScript;\n}\n"],"mappings":"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","names":["import_jsx_runtime","variantStyles","sizeStyles","import_react","import_jsx_runtime","sizeStyles","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","sizeClasses","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","widthClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","DAYS","MONTHS","import_react","import_jsx_runtime","DAYS","MONTHS","import_react","import_jsx_runtime","React","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","React","percentage","import_react","import_jsx_runtime","React","sizeClasses","name","import_jsx_runtime","sizeClasses","import_react","import_jsx_runtime","import_react","import_jsx_runtime","toast","positionClasses","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}