@exyconn/common 1.0.0 → 2.1.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/README.md +121 -36
- package/dist/client/index.d.mts +3 -2
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +5059 -231
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +4951 -232
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/utils/index.d.mts +123 -1
- package/dist/client/utils/index.d.ts +123 -1
- package/dist/client/utils/index.js +207 -0
- package/dist/client/utils/index.js.map +1 -1
- package/dist/client/utils/index.mjs +204 -1
- package/dist/client/utils/index.mjs.map +1 -1
- package/dist/index-BcxL4_V4.d.ts +2946 -0
- package/dist/{index-iTKxFa78.d.ts → index-DEzgM15j.d.ts} +10 -2
- package/dist/{index-ClWtDfwk.d.ts → index-DNFVgQx8.d.ts} +544 -2
- package/dist/{index-CcrANHAQ.d.mts → index-DbV04Dx8.d.mts} +10 -2
- package/dist/{index-DSW6JfD-.d.mts → index-DfqEP6Oe.d.mts} +544 -2
- package/dist/index-bvvCev9Q.d.mts +2946 -0
- package/dist/index.d.mts +433 -7
- package/dist/index.d.ts +433 -7
- package/dist/index.js +6101 -220
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6083 -221
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +197 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +194 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/utils/index.d.mts +73 -1
- package/dist/server/utils/index.d.ts +73 -1
- package/dist/server/utils/index.js +199 -0
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +195 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +296 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +274 -1
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +41 -4
- package/dist/index-BNdT-2X4.d.ts +0 -229
- package/dist/index-Du0LLt9f.d.mts +0 -229
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/http/axios-instance.ts","../../src/client/http/response-parser.ts","../../src/client/logger/client-logger.ts","../../src/client/utils/date.ts","../../src/client/utils/clipboard.ts","../../src/client/utils/slug.ts","../../src/client/utils/events.ts","../../src/client/utils/api-urls.ts","../../src/client/utils/response-parser.ts","../../src/client/hooks/useLocalStorage.ts","../../src/client/hooks/useDebounce.ts","../../src/client/hooks/useCopyToClipboard.ts","../../src/client/hooks/usePageTitle.ts","../../src/client/hooks/useInterval.ts","../../src/client/hooks/useThemeDetector.ts","../../src/client/hooks/useSnackbar.ts","../../src/client/hooks/useMediaQuery.ts","../../src/client/hooks/useOnClickOutside.ts","../../src/client/hooks/useWindowSize.ts"],"names":["axios","useCallback","useState","useEffect","useRef","query"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\r\n\r\n/**\r\n * HTTP Client Configuration Options\r\n */\r\nexport interface HttpClientOptions {\r\n baseURL: string;\r\n timeout?: number;\r\n withCredentials?: boolean;\r\n getAuthToken?: () => string | null;\r\n onUnauthorized?: () => void;\r\n onServerError?: (error: AxiosError) => void;\r\n}\r\n\r\n/**\r\n * Create configured Axios instance\r\n */\r\nexport const createHttpClient = (options: HttpClientOptions): AxiosInstance => {\r\n const {\r\n baseURL,\r\n timeout = 30000,\r\n withCredentials = true,\r\n getAuthToken,\r\n onUnauthorized,\r\n onServerError,\r\n } = options;\r\n\r\n const instance = axios.create({\r\n baseURL,\r\n timeout,\r\n withCredentials,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Request interceptor - add auth token\r\n instance.interceptors.request.use(\r\n (config: InternalAxiosRequestConfig) => {\r\n if (getAuthToken) {\r\n const token = getAuthToken();\r\n if (token && config.headers) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n }\r\n return config;\r\n },\r\n (error: unknown) => Promise.reject(error)\r\n );\r\n\r\n // Response interceptor - handle errors\r\n instance.interceptors.response.use(\r\n (response: AxiosResponse) => response,\r\n (error: AxiosError) => {\r\n if (error.response) {\r\n const status = error.response.status;\r\n\r\n // Handle 401 Unauthorized\r\n if (status === 401 && onUnauthorized) {\r\n onUnauthorized();\r\n }\r\n\r\n // Handle 5xx Server Errors\r\n if (status >= 500 && onServerError) {\r\n onServerError(error);\r\n }\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n return instance;\r\n};\r\n\r\n/**\r\n * Default request config helpers\r\n */\r\nexport const withFormData = (): AxiosRequestConfig => ({\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n});\r\n\r\nexport const withTimeout = (ms: number): AxiosRequestConfig => ({\r\n timeout: ms,\r\n});\r\n\r\nexport const withAbortSignal = (signal: AbortSignal): AxiosRequestConfig => ({\r\n signal,\r\n});\r\n\r\nexport default {\r\n createHttpClient,\r\n withFormData,\r\n withTimeout,\r\n withAbortSignal,\r\n};\r\n","import { AxiosResponse, AxiosError } from 'axios';\r\n\r\n/**\r\n * Standard API Response Structure\r\n */\r\nexport interface ApiResponse<T = unknown> {\r\n success: boolean;\r\n message: string;\r\n data?: T;\r\n error?: string;\r\n statusCode?: number;\r\n}\r\n\r\n/**\r\n * Paginated Response Structure\r\n */\r\nexport interface PaginatedResponse<T = unknown> extends ApiResponse<T[]> {\r\n pagination: {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Parse successful API response\r\n */\r\nexport const parseResponse = <T>(response: AxiosResponse<ApiResponse<T>>): T | null => {\r\n if (response.data?.success && response.data?.data !== undefined) {\r\n return response.data.data;\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Parse API response with full metadata\r\n */\r\nexport const parseFullResponse = <T>(response: AxiosResponse<ApiResponse<T>>): ApiResponse<T> => {\r\n return response.data;\r\n};\r\n\r\n/**\r\n * Parse error from API response\r\n */\r\nexport const parseError = (error: AxiosError<ApiResponse>): string => {\r\n // Check for API error message\r\n if (error.response?.data?.message) {\r\n return error.response.data.message;\r\n }\r\n\r\n if (error.response?.data?.error) {\r\n return error.response.data.error;\r\n }\r\n\r\n // Check for network error\r\n if (error.code === 'ERR_NETWORK') {\r\n return 'Network error. Please check your connection.';\r\n }\r\n\r\n // Check for timeout\r\n if (error.code === 'ECONNABORTED') {\r\n return 'Request timed out. Please try again.';\r\n }\r\n\r\n // Default error message\r\n return error.message || 'An unexpected error occurred.';\r\n};\r\n\r\n/**\r\n * Check if response is successful\r\n */\r\nexport const isSuccess = <T>(response: AxiosResponse<ApiResponse<T>>): boolean => {\r\n return response.data?.success === true;\r\n};\r\n\r\n/**\r\n * Check if error is a specific status code\r\n */\r\nexport const isStatusError = (error: AxiosError, statusCode: number): boolean => {\r\n return error.response?.status === statusCode;\r\n};\r\n\r\n/**\r\n * Check if error is unauthorized (401)\r\n */\r\nexport const isUnauthorized = (error: AxiosError): boolean => {\r\n return isStatusError(error, 401);\r\n};\r\n\r\n/**\r\n * Check if error is forbidden (403)\r\n */\r\nexport const isForbidden = (error: AxiosError): boolean => {\r\n return isStatusError(error, 403);\r\n};\r\n\r\n/**\r\n * Check if error is not found (404)\r\n */\r\nexport const isNotFound = (error: AxiosError): boolean => {\r\n return isStatusError(error, 404);\r\n};\r\n\r\n/**\r\n * Check if error is server error (5xx)\r\n */\r\nexport const isServerError = (error: AxiosError): boolean => {\r\n const status = error.response?.status;\r\n return status !== undefined && status >= 500;\r\n};\r\n\r\nexport default {\r\n parseResponse,\r\n parseFullResponse,\r\n parseError,\r\n isSuccess,\r\n isStatusError,\r\n isUnauthorized,\r\n isForbidden,\r\n isNotFound,\r\n isServerError,\r\n};\r\n","/**\r\n * Log Levels\r\n */\r\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\r\n\r\n/**\r\n * Client Logger Configuration\r\n */\r\nexport interface ClientLoggerConfig {\r\n enabled?: boolean;\r\n minLevel?: LogLevel;\r\n prefix?: string;\r\n includeTimestamp?: boolean;\r\n remoteLogging?: {\r\n enabled: boolean;\r\n endpoint: string;\r\n batchSize?: number;\r\n flushInterval?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Log Entry\r\n */\r\ninterface LogEntry {\r\n level: LogLevel;\r\n message: string;\r\n data?: unknown;\r\n timestamp: string;\r\n prefix?: string;\r\n}\r\n\r\nconst LOG_LEVELS: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n};\r\n\r\n/**\r\n * Client-side logger with optional remote logging\r\n */\r\nexport class ClientLogger {\r\n private config: Required<Omit<ClientLoggerConfig, 'remoteLogging'>> & {\r\n remoteLogging?: ClientLoggerConfig['remoteLogging'];\r\n };\r\n private buffer: LogEntry[] = [];\r\n private flushTimer?: ReturnType<typeof setInterval>;\r\n\r\n constructor(config: ClientLoggerConfig = {}) {\r\n this.config = {\r\n enabled: config.enabled ?? (process.env.NODE_ENV !== 'production'),\r\n minLevel: config.minLevel ?? 'debug',\r\n prefix: config.prefix ?? '[App]',\r\n includeTimestamp: config.includeTimestamp ?? true,\r\n remoteLogging: config.remoteLogging,\r\n };\r\n\r\n // Setup remote logging flush interval\r\n if (this.config.remoteLogging?.enabled) {\r\n const interval = this.config.remoteLogging.flushInterval ?? 30000;\r\n this.flushTimer = setInterval(() => this.flush(), interval);\r\n }\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n if (!this.config.enabled) return false;\r\n return LOG_LEVELS[level] >= LOG_LEVELS[this.config.minLevel];\r\n }\r\n\r\n private formatMessage(level: LogLevel, message: string): string {\r\n const parts: string[] = [];\r\n \r\n if (this.config.includeTimestamp) {\r\n parts.push(`[${new Date().toISOString()}]`);\r\n }\r\n \r\n parts.push(this.config.prefix);\r\n parts.push(`[${level.toUpperCase()}]`);\r\n parts.push(message);\r\n \r\n return parts.join(' ');\r\n }\r\n\r\n private log(level: LogLevel, message: string, data?: unknown): void {\r\n if (!this.shouldLog(level)) return;\r\n\r\n const formattedMessage = this.formatMessage(level, message);\r\n const entry: LogEntry = {\r\n level,\r\n message,\r\n data,\r\n timestamp: new Date().toISOString(),\r\n prefix: this.config.prefix,\r\n };\r\n\r\n // Console output\r\n switch (level) {\r\n case 'debug':\r\n console.debug(formattedMessage, data ?? '');\r\n break;\r\n case 'info':\r\n console.info(formattedMessage, data ?? '');\r\n break;\r\n case 'warn':\r\n console.warn(formattedMessage, data ?? '');\r\n break;\r\n case 'error':\r\n console.error(formattedMessage, data ?? '');\r\n break;\r\n }\r\n\r\n // Buffer for remote logging\r\n if (this.config.remoteLogging?.enabled) {\r\n this.buffer.push(entry);\r\n const batchSize = this.config.remoteLogging.batchSize ?? 10;\r\n if (this.buffer.length >= batchSize) {\r\n this.flush();\r\n }\r\n }\r\n }\r\n\r\n debug(message: string, data?: unknown): void {\r\n this.log('debug', message, data);\r\n }\r\n\r\n info(message: string, data?: unknown): void {\r\n this.log('info', message, data);\r\n }\r\n\r\n warn(message: string, data?: unknown): void {\r\n this.log('warn', message, data);\r\n }\r\n\r\n error(message: string, data?: unknown): void {\r\n this.log('error', message, data);\r\n }\r\n\r\n /**\r\n * Flush buffered logs to remote endpoint\r\n */\r\n async flush(): Promise<void> {\r\n if (!this.config.remoteLogging?.enabled || this.buffer.length === 0) return;\r\n\r\n const logs = [...this.buffer];\r\n this.buffer = [];\r\n\r\n try {\r\n await fetch(this.config.remoteLogging.endpoint, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ logs }),\r\n });\r\n } catch (error) {\r\n // Re-add logs to buffer on failure (but limit size)\r\n this.buffer = [...logs, ...this.buffer].slice(0, 100);\r\n console.error('Failed to send logs to remote endpoint', error);\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup logger (clear intervals)\r\n */\r\n destroy(): void {\r\n if (this.flushTimer) {\r\n clearInterval(this.flushTimer);\r\n }\r\n this.flush();\r\n }\r\n}\r\n\r\n/**\r\n * Create a new logger instance\r\n */\r\nexport const createClientLogger = (config?: ClientLoggerConfig): ClientLogger => {\r\n return new ClientLogger(config);\r\n};\r\n\r\n/**\r\n * Default logger instance\r\n */\r\nexport const clientLogger = new ClientLogger();\r\n\r\nexport default clientLogger;\r\n","/**\r\n * Format date to readable string\r\n * @param date - Date to format\r\n * @param locale - Locale for formatting (default: 'en-US')\r\n */\r\nexport const formatDate = (\r\n date: Date | string | number,\r\n locale: string = 'en-US'\r\n): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toLocaleDateString(locale, {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n};\r\n\r\n/**\r\n * Format date with time\r\n */\r\nexport const formatDateTime = (\r\n date: Date | string | number,\r\n locale: string = 'en-US'\r\n): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toLocaleDateString(locale, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n};\r\n\r\n/**\r\n * Format date as relative time (e.g., \"2 hours ago\")\r\n */\r\nexport const formatRelativeTime = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n const now = new Date();\r\n const diffInSeconds = Math.floor((now.getTime() - dateObj.getTime()) / 1000);\r\n\r\n const intervals: { label: string; seconds: number }[] = [\r\n { label: 'year', seconds: 31536000 },\r\n { label: 'month', seconds: 2592000 },\r\n { label: 'week', seconds: 604800 },\r\n { label: 'day', seconds: 86400 },\r\n { label: 'hour', seconds: 3600 },\r\n { label: 'minute', seconds: 60 },\r\n { label: 'second', seconds: 1 },\r\n ];\r\n\r\n for (const interval of intervals) {\r\n const count = Math.floor(diffInSeconds / interval.seconds);\r\n if (count >= 1) {\r\n return `${count} ${interval.label}${count !== 1 ? 's' : ''} ago`;\r\n }\r\n }\r\n\r\n return 'just now';\r\n};\r\n\r\n/**\r\n * Format date for input[type=\"date\"]\r\n */\r\nexport const formatDateForInput = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toISOString().split('T')[0];\r\n};\r\n\r\n/**\r\n * Format date for input[type=\"datetime-local\"]\r\n */\r\nexport const formatDateTimeForInput = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toISOString().slice(0, 16);\r\n};\r\n\r\n/**\r\n * Check if date is today\r\n */\r\nexport const isToday = (date: Date | string | number): boolean => {\r\n const dateObj = new Date(date);\r\n const today = new Date();\r\n return (\r\n dateObj.getDate() === today.getDate() &&\r\n dateObj.getMonth() === today.getMonth() &&\r\n dateObj.getFullYear() === today.getFullYear()\r\n );\r\n};\r\n\r\n/**\r\n * Check if date is in the past\r\n */\r\nexport const isPast = (date: Date | string | number): boolean => {\r\n return new Date(date).getTime() < Date.now();\r\n};\r\n\r\n/**\r\n * Check if date is in the future\r\n */\r\nexport const isFuture = (date: Date | string | number): boolean => {\r\n return new Date(date).getTime() > Date.now();\r\n};\r\n\r\n/**\r\n * Add days to a date\r\n */\r\nexport const addDays = (date: Date | string | number, days: number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setDate(dateObj.getDate() + days);\r\n return dateObj;\r\n};\r\n\r\n/**\r\n * Get start of day\r\n */\r\nexport const startOfDay = (date: Date | string | number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setHours(0, 0, 0, 0);\r\n return dateObj;\r\n};\r\n\r\n/**\r\n * Get end of day\r\n */\r\nexport const endOfDay = (date: Date | string | number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setHours(23, 59, 59, 999);\r\n return dateObj;\r\n};\r\n\r\nexport default {\r\n formatDate,\r\n formatDateTime,\r\n formatRelativeTime,\r\n formatDateForInput,\r\n formatDateTimeForInput,\r\n isToday,\r\n isPast,\r\n isFuture,\r\n addDays,\r\n startOfDay,\r\n endOfDay,\r\n};\r\n","/**\r\n * Copy text to clipboard\r\n * @returns Promise<boolean> - true if successful\r\n */\r\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\r\n try {\r\n // Modern API (preferred)\r\n if (navigator.clipboard && window.isSecureContext) {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n\r\n // Fallback for older browsers or non-secure contexts\r\n const textArea = document.createElement('textarea');\r\n textArea.value = text;\r\n textArea.style.position = 'fixed';\r\n textArea.style.left = '-999999px';\r\n textArea.style.top = '-999999px';\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n const success = document.execCommand('copy');\r\n document.body.removeChild(textArea);\r\n return success;\r\n } catch (error) {\r\n console.error('Failed to copy to clipboard:', error);\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * Read text from clipboard\r\n * @returns Promise<string | null>\r\n */\r\nexport const readFromClipboard = async (): Promise<string | null> => {\r\n try {\r\n if (navigator.clipboard && window.isSecureContext) {\r\n return await navigator.clipboard.readText();\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('Failed to read from clipboard:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Check if clipboard API is available\r\n */\r\nexport const isClipboardAvailable = (): boolean => {\r\n return !!(navigator.clipboard && window.isSecureContext);\r\n};\r\n\r\nexport default {\r\n copyToClipboard,\r\n readFromClipboard,\r\n isClipboardAvailable,\r\n};\r\n","/**\r\n * Generate URL-friendly slug from text\r\n */\r\nexport const slugify = (text: string): string => {\r\n return text\r\n .toString()\r\n .toLowerCase()\r\n .trim()\r\n .replace(/\\s+/g, '-') // Replace spaces with -\r\n .replace(/[^\\w\\-]+/g, '') // Remove non-word chars\r\n .replace(/\\-\\-+/g, '-') // Replace multiple - with single -\r\n .replace(/^-+/, '') // Trim - from start\r\n .replace(/-+$/, ''); // Trim - from end\r\n};\r\n\r\n/**\r\n * Generate slug with unique suffix\r\n */\r\nexport const slugifyUnique = (text: string): string => {\r\n const baseSlug = slugify(text);\r\n const uniqueSuffix = Date.now().toString(36) + Math.random().toString(36).substring(2, 5);\r\n return `${baseSlug}-${uniqueSuffix}`;\r\n};\r\n\r\n/**\r\n * Convert slug back to readable text\r\n */\r\nexport const unslugify = (slug: string): string => {\r\n return slug\r\n .replace(/-/g, ' ')\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n};\r\n\r\n/**\r\n * Truncate text to specified length with ellipsis\r\n */\r\nexport const truncate = (\r\n text: string,\r\n maxLength: number,\r\n suffix: string = '...'\r\n): string => {\r\n if (text.length <= maxLength) return text;\r\n return text.substring(0, maxLength - suffix.length).trim() + suffix;\r\n};\r\n\r\n/**\r\n * Truncate text by words\r\n */\r\nexport const truncateWords = (\r\n text: string,\r\n maxWords: number,\r\n suffix: string = '...'\r\n): string => {\r\n const words = text.split(/\\s+/);\r\n if (words.length <= maxWords) return text;\r\n return words.slice(0, maxWords).join(' ') + suffix;\r\n};\r\n\r\n/**\r\n * Capitalize first letter of each word\r\n */\r\nexport const capitalizeWords = (text: string): string => {\r\n return text.replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n};\r\n\r\n/**\r\n * Capitalize first letter only\r\n */\r\nexport const capitalize = (text: string): string => {\r\n if (!text) return '';\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n};\r\n\r\n/**\r\n * Convert camelCase to kebab-case\r\n */\r\nexport const camelToKebab = (text: string): string => {\r\n return text.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\r\n};\r\n\r\n/**\r\n * Convert kebab-case to camelCase\r\n */\r\nexport const kebabToCamel = (text: string): string => {\r\n return text.replace(/-([a-z])/g, (_, char) => char.toUpperCase());\r\n};\r\n\r\nexport default {\r\n slugify,\r\n slugifyUnique,\r\n unslugify,\r\n truncate,\r\n truncateWords,\r\n capitalizeWords,\r\n capitalize,\r\n camelToKebab,\r\n kebabToCamel,\r\n};\r\n","/**\r\n * Event Emitter for client-side event handling\r\n */\r\n\r\ntype EventHandler<T = unknown> = (data: T) => void;\r\n\r\ninterface EventMap {\r\n [event: string]: unknown;\r\n}\r\n\r\n/**\r\n * Simple typed event emitter for browser use\r\n */\r\nexport class EventEmitter<Events extends EventMap = EventMap> {\r\n private handlers: Map<keyof Events, Set<EventHandler<unknown>>> = new Map();\r\n\r\n /**\r\n * Subscribe to an event\r\n * @returns Unsubscribe function\r\n */\r\n on<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): () => void {\r\n if (!this.handlers.has(event)) {\r\n this.handlers.set(event, new Set());\r\n }\r\n this.handlers.get(event)!.add(handler as EventHandler<unknown>);\r\n\r\n // Return unsubscribe function\r\n return () => this.off(event, handler);\r\n }\r\n\r\n /**\r\n * Subscribe to an event once\r\n */\r\n once<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): () => void {\r\n const wrappedHandler: EventHandler<Events[K]> = (data) => {\r\n this.off(event, wrappedHandler);\r\n handler(data);\r\n };\r\n return this.on(event, wrappedHandler);\r\n }\r\n\r\n /**\r\n * Unsubscribe from an event\r\n */\r\n off<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): void {\r\n const eventHandlers = this.handlers.get(event);\r\n if (eventHandlers) {\r\n eventHandlers.delete(handler as EventHandler<unknown>);\r\n }\r\n }\r\n\r\n /**\r\n * Emit an event\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n const eventHandlers = this.handlers.get(event);\r\n if (eventHandlers) {\r\n eventHandlers.forEach((handler) => {\r\n try {\r\n handler(data);\r\n } catch (error) {\r\n console.error(`Error in event handler for \"${String(event)}\":`, error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Remove all handlers for an event (or all events)\r\n */\r\n removeAllListeners(event?: keyof Events): void {\r\n if (event) {\r\n this.handlers.delete(event);\r\n } else {\r\n this.handlers.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Get count of listeners for an event\r\n */\r\n listenerCount(event: keyof Events): number {\r\n return this.handlers.get(event)?.size ?? 0;\r\n }\r\n}\r\n\r\n/**\r\n * Create a new event emitter instance\r\n */\r\nexport const createEventEmitter = <Events extends EventMap = EventMap>(): EventEmitter<Events> => {\r\n return new EventEmitter<Events>();\r\n};\r\n\r\n/**\r\n * Global app event emitter (singleton)\r\n */\r\nexport const appEvents = new EventEmitter<{\r\n 'auth:login': { userId: string };\r\n 'auth:logout': void;\r\n 'notification:show': { message: string; type: 'success' | 'error' | 'warning' | 'info' };\r\n 'theme:change': 'light' | 'dark';\r\n [key: string]: unknown;\r\n}>();\r\n\r\nexport default {\r\n EventEmitter,\r\n createEventEmitter,\r\n appEvents,\r\n};\r\n","/**\r\n * API URL Builder\r\n * Centralized API endpoint management\r\n */\r\n\r\nexport interface ApiUrlConfig {\r\n baseUrl: string;\r\n version?: string;\r\n}\r\n\r\n/**\r\n * API URL builder class\r\n */\r\nexport class ApiUrlBuilder {\r\n private baseUrl: string;\r\n private version: string;\r\n\r\n constructor(config: ApiUrlConfig) {\r\n this.baseUrl = config.baseUrl.replace(/\\/$/, ''); // Remove trailing slash\r\n this.version = config.version || '';\r\n }\r\n\r\n /**\r\n * Build full URL from path\r\n */\r\n build(path: string): string {\r\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\r\n const versionPath = this.version ? `/${this.version}` : '';\r\n return `${this.baseUrl}${versionPath}${normalizedPath}`;\r\n }\r\n\r\n /**\r\n * Build URL with query parameters\r\n */\r\n buildWithParams(path: string, params: Record<string, string | number | boolean | undefined>): string {\r\n const url = this.build(path);\r\n const filteredParams = Object.entries(params)\r\n .filter(([, value]) => value !== undefined)\r\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\r\n .join('&');\r\n\r\n return filteredParams ? `${url}?${filteredParams}` : url;\r\n }\r\n\r\n /**\r\n * Build URL with path parameters\r\n */\r\n buildWithPathParams(template: string, params: Record<string, string | number>): string {\r\n let path = template;\r\n Object.entries(params).forEach(([key, value]) => {\r\n path = path.replace(`:${key}`, String(value));\r\n path = path.replace(`{${key}}`, String(value));\r\n });\r\n return this.build(path);\r\n }\r\n\r\n /**\r\n * Get base URL\r\n */\r\n getBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n\r\n /**\r\n * Set new base URL\r\n */\r\n setBaseUrl(baseUrl: string): void {\r\n this.baseUrl = baseUrl.replace(/\\/$/, '');\r\n }\r\n}\r\n\r\n/**\r\n * Create API URL builder\r\n */\r\nexport const createApiUrlBuilder = (config: ApiUrlConfig): ApiUrlBuilder => {\r\n return new ApiUrlBuilder(config);\r\n};\r\n\r\n/**\r\n * Common API endpoints factory\r\n */\r\nexport const createApiEndpoints = (builder: ApiUrlBuilder) => ({\r\n // Auth endpoints\r\n auth: {\r\n login: () => builder.build('/auth/login'),\r\n register: () => builder.build('/auth/register'),\r\n logout: () => builder.build('/auth/logout'),\r\n refresh: () => builder.build('/auth/refresh'),\r\n me: () => builder.build('/auth/me'),\r\n forgotPassword: () => builder.build('/auth/forgot-password'),\r\n resetPassword: () => builder.build('/auth/reset-password'),\r\n },\r\n\r\n // User endpoints\r\n users: {\r\n list: () => builder.build('/users'),\r\n get: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n create: () => builder.build('/users'),\r\n update: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n delete: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n },\r\n\r\n // Generic CRUD factory\r\n crud: (resource: string) => ({\r\n list: () => builder.build(`/${resource}`),\r\n get: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n create: () => builder.build(`/${resource}`),\r\n update: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n delete: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n }),\r\n});\r\n\r\nexport default {\r\n ApiUrlBuilder,\r\n createApiUrlBuilder,\r\n createApiEndpoints,\r\n};\r\n","/**\n * Response Parser Utilities\n * Common patterns for parsing API responses\n */\nimport type { ApiResponse, PaginatedResponse, PaginationMeta } from '../../shared/types';\n\n/**\n * Check if response is successful\n */\nexport const isSuccessResponse = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { success: true } => {\n return response.success === true;\n};\n\n/**\n * Check if response is an error\n */\nexport const isErrorResponse = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { success: false } => {\n return response.success === false;\n};\n\n/**\n * Extract data from response or return default\n */\nexport const getResponseData = <T>(response: ApiResponse<T>, defaultValue: T): T => {\n if (isSuccessResponse(response) && response.data !== undefined) {\n return response.data;\n }\n return defaultValue;\n};\n\n/**\n * Extract error message from response\n */\nexport const getErrorMessage = <T>(response: ApiResponse<T>, defaultMessage: string = 'An error occurred'): string => {\n if (response.error) {\n return response.error;\n }\n if (response.message) {\n return response.message;\n }\n return defaultMessage;\n};\n\n/**\n * Check if response has data\n */\nexport const hasData = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { data: NonNullable<T> } => {\n return response.data !== null && response.data !== undefined;\n};\n\n/**\n * Check if paginated response has more pages\n */\nexport const hasMorePages = <T>(response: PaginatedResponse<T>): boolean => {\n return response.pagination.hasNextPage;\n};\n\n/**\n * Get next page number from paginated response\n */\nexport const getNextPage = <T>(response: PaginatedResponse<T>): number | null => {\n if (response.pagination.hasNextPage) {\n return response.pagination.page + 1;\n }\n return null;\n};\n\n/**\n * Get previous page number from paginated response\n */\nexport const getPrevPage = <T>(response: PaginatedResponse<T>): number | null => {\n if (response.pagination.hasPrevPage) {\n return response.pagination.page - 1;\n }\n return null;\n};\n\n/**\n * Create empty pagination meta\n */\nexport const createEmptyPaginationMeta = (): PaginationMeta => ({\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n hasNextPage: false,\n hasPrevPage: false,\n});\n\n/**\n * Create success response\n */\nexport const createSuccessResponse = <T>(data: T, message: string = 'Success'): ApiResponse<T> => ({\n success: true,\n message,\n data,\n statusCode: 200,\n});\n\n/**\n * Create error response\n */\nexport const createErrorResponse = (\n message: string,\n statusCode: number = 400,\n error?: string\n): ApiResponse<never> => ({\n success: false,\n message,\n error,\n statusCode,\n});\n\nexport default {\n isSuccessResponse,\n isErrorResponse,\n getResponseData,\n getErrorMessage,\n hasData,\n hasMorePages,\n getNextPage,\n getPrevPage,\n createEmptyPaginationMeta,\n createSuccessResponse,\n createErrorResponse,\n};\n","/**\r\n * useLocalStorage Hook\r\n * Syncs state with localStorage, supports cross-tab synchronization\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport type SetValue<T> = T | ((prevValue: T) => T);\r\n\r\nexport interface UseLocalStorageOptions<T> {\r\n /** Serialize function (default: JSON.stringify) */\r\n serializer?: (value: T) => string;\r\n /** Deserialize function (default: JSON.parse) */\r\n deserializer?: (value: string) => T;\r\n /** Enable cross-tab synchronization (default: true) */\r\n syncTabs?: boolean;\r\n /** Enable logging (default: false) */\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * Hook to persist state in localStorage with cross-tab sync\r\n * @param key - localStorage key\r\n * @param initialValue - initial/fallback value\r\n * @param options - configuration options\r\n */\r\nexport function useLocalStorage<T>(\r\n key: string,\r\n initialValue: T,\r\n options: UseLocalStorageOptions<T> = {}\r\n): [T, (value: SetValue<T>) => void, () => void] {\r\n const {\r\n serializer = JSON.stringify,\r\n deserializer = JSON.parse,\r\n syncTabs = true,\r\n debug = false,\r\n } = options;\r\n\r\n const log = useCallback(\r\n (...args: unknown[]) => {\r\n if (debug) console.log(`[useLocalStorage:${key}]`, ...args);\r\n },\r\n [debug, key]\r\n );\r\n\r\n // Get initial value from localStorage or use initialValue\r\n const readValue = useCallback((): T => {\r\n if (typeof window === 'undefined') {\r\n return initialValue;\r\n }\r\n\r\n try {\r\n const item = window.localStorage.getItem(key);\r\n if (item === null) {\r\n return initialValue;\r\n }\r\n const parsed = deserializer(item);\r\n log('Read value:', parsed);\r\n return parsed;\r\n } catch (error) {\r\n console.warn(`Error reading localStorage key \"${key}\":`, error);\r\n return initialValue;\r\n }\r\n }, [key, initialValue, deserializer, log]);\r\n\r\n const [storedValue, setStoredValue] = useState<T>(readValue);\r\n\r\n // Return a wrapped version of useState's setter function\r\n const setValue = useCallback(\r\n (value: SetValue<T>) => {\r\n if (typeof window === 'undefined') {\r\n console.warn(`Cannot set localStorage key \"${key}\" in non-browser environment`);\r\n return;\r\n }\r\n\r\n try {\r\n // Allow value to be a function (same API as useState)\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n\r\n setStoredValue(valueToStore);\r\n window.localStorage.setItem(key, serializer(valueToStore));\r\n log('Set value:', valueToStore);\r\n\r\n // Dispatch storage event for cross-tab sync (same tab doesn't receive storage events)\r\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: serializer(valueToStore) }));\r\n } catch (error) {\r\n console.warn(`Error setting localStorage key \"${key}\":`, error);\r\n }\r\n },\r\n [key, storedValue, serializer, log]\r\n );\r\n\r\n // Remove value from localStorage\r\n const removeValue = useCallback(() => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n try {\r\n window.localStorage.removeItem(key);\r\n setStoredValue(initialValue);\r\n log('Removed value');\r\n\r\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: null }));\r\n } catch (error) {\r\n console.warn(`Error removing localStorage key \"${key}\":`, error);\r\n }\r\n }, [key, initialValue, log]);\r\n\r\n // Cross-tab synchronization\r\n useEffect(() => {\r\n if (!syncTabs || typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n const handleStorageChange = (event: StorageEvent) => {\r\n if (event.key !== key) {\r\n return;\r\n }\r\n\r\n log('Storage event received:', event.newValue);\r\n\r\n if (event.newValue === null) {\r\n setStoredValue(initialValue);\r\n } else {\r\n try {\r\n setStoredValue(deserializer(event.newValue));\r\n } catch {\r\n console.warn(`Error parsing localStorage change for key \"${key}\"`);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener('storage', handleStorageChange);\r\n return () => window.removeEventListener('storage', handleStorageChange);\r\n }, [key, initialValue, syncTabs, deserializer, log]);\r\n\r\n return [storedValue, setValue, removeValue];\r\n}\r\n\r\nexport default useLocalStorage;\r\n","/**\r\n * useDebounce Hook\r\n * Returns a debounced version of the value that only updates after delay\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Debounce a value with configurable delay\r\n * @param value - Value to debounce\r\n * @param delay - Delay in milliseconds (default: 500)\r\n */\r\nexport function useDebounce<T>(value: T, delay: number = 500): T {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n return () => {\r\n clearTimeout(timer);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n}\r\n\r\nexport default useDebounce;\r\n","/**\r\n * useCopyToClipboard Hook\r\n * Copy text to clipboard with status tracking\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseCopyToClipboardReturn {\r\n /** Copy text to clipboard */\r\n copy: (text: string) => Promise<boolean>;\r\n /** Whether copy was successful (resets after timeout) */\r\n copied: boolean;\r\n /** Error message if copy failed */\r\n error: string | null;\r\n /** Reset state */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Copy text to clipboard with feedback\r\n * @param resetDelay - Time in ms before copied state resets (default: 2000)\r\n */\r\nexport function useCopyToClipboard(resetDelay: number = 2000): UseCopyToClipboardReturn {\r\n const [copied, setCopied] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reset = useCallback(() => {\r\n setCopied(false);\r\n setError(null);\r\n }, []);\r\n\r\n const copy = useCallback(\r\n async (text: string): Promise<boolean> => {\r\n if (!navigator?.clipboard) {\r\n // Fallback for older browsers\r\n try {\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.style.position = 'fixed';\r\n textarea.style.left = '-999999px';\r\n textarea.style.top = '-999999px';\r\n document.body.appendChild(textarea);\r\n textarea.focus();\r\n textarea.select();\r\n\r\n const successful = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n\r\n if (successful) {\r\n setCopied(true);\r\n setError(null);\r\n setTimeout(reset, resetDelay);\r\n return true;\r\n } else {\r\n throw new Error('execCommand failed');\r\n }\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Failed to copy to clipboard';\r\n setError(message);\r\n setCopied(false);\r\n return false;\r\n }\r\n }\r\n\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setError(null);\r\n setTimeout(reset, resetDelay);\r\n return true;\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Failed to copy to clipboard';\r\n setError(message);\r\n setCopied(false);\r\n return false;\r\n }\r\n },\r\n [resetDelay, reset]\r\n );\r\n\r\n return { copy, copied, error, reset };\r\n}\r\n\r\nexport default useCopyToClipboard;\r\n","/**\r\n * usePageTitle Hook\r\n * Dynamically set the document title\r\n */\r\nimport { useEffect } from 'react';\r\n\r\nexport interface UsePageTitleOptions {\r\n /** Suffix to append to the title (e.g., organization name) */\r\n suffix?: string;\r\n /** Separator between title and suffix (default: ' | ') */\r\n separator?: string;\r\n /** Whether to restore original title on unmount (default: true) */\r\n restoreOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Set the document title with optional suffix\r\n * @param title - Page title\r\n * @param options - Configuration options\r\n */\r\nexport function usePageTitle(title: string, options: UsePageTitleOptions = {}): void {\r\n const { suffix, separator = ' | ', restoreOnUnmount = true } = options;\r\n\r\n useEffect(() => {\r\n const originalTitle = document.title;\r\n const newTitle = suffix ? `${title}${separator}${suffix}` : title;\r\n document.title = newTitle;\r\n\r\n return () => {\r\n if (restoreOnUnmount) {\r\n document.title = originalTitle;\r\n }\r\n };\r\n }, [title, suffix, separator, restoreOnUnmount]);\r\n}\r\n\r\nexport default usePageTitle;\r\n","/**\r\n * useInterval Hook\r\n * Set up a recurring interval that properly cleans up\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Run a callback on an interval\r\n * @param callback - Function to call on each interval\r\n * @param delay - Interval delay in ms (null to pause)\r\n */\r\nexport function useInterval(callback: () => void, delay: number | null): void {\r\n const savedCallback = useRef(callback);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n // Set up the interval\r\n useEffect(() => {\r\n if (delay === null) {\r\n return;\r\n }\r\n\r\n const tick = () => savedCallback.current();\r\n const id = setInterval(tick, delay);\r\n\r\n return () => clearInterval(id);\r\n }, [delay]);\r\n}\r\n\r\nexport default useInterval;\r\n","/**\r\n * useThemeDetector Hook\r\n * Detect system color scheme (light/dark mode)\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport type ThemeMode = 'light' | 'dark';\r\n\r\n/**\r\n * Detect and track system color scheme preference\r\n * @returns Current theme mode based on system preference\r\n */\r\nexport function useThemeDetector(): ThemeMode {\r\n const getCurrentTheme = (): ThemeMode => {\r\n if (typeof window === 'undefined') return 'light';\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n };\r\n\r\n const [theme, setTheme] = useState<ThemeMode>(getCurrentTheme);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setTheme(e.matches ? 'dark' : 'light');\r\n };\r\n\r\n mediaQuery.addEventListener('change', handleChange);\r\n return () => mediaQuery.removeEventListener('change', handleChange);\r\n }, []);\r\n\r\n return theme;\r\n}\r\n\r\nexport default useThemeDetector;\r\n","/**\r\n * useSnackbar Hook\r\n * Show toast/snackbar notifications\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport type SnackbarSeverity = 'success' | 'error' | 'warning' | 'info';\r\n\r\nexport interface SnackbarState {\r\n open: boolean;\r\n message: string;\r\n severity: SnackbarSeverity;\r\n autoHideDuration?: number;\r\n}\r\n\r\nexport interface UseSnackbarReturn {\r\n /** Current snackbar state */\r\n state: SnackbarState;\r\n /** Show snackbar with message */\r\n show: (message: string, severity?: SnackbarSeverity, duration?: number) => void;\r\n /** Show success snackbar */\r\n success: (message: string, duration?: number) => void;\r\n /** Show error snackbar */\r\n error: (message: string, duration?: number) => void;\r\n /** Show warning snackbar */\r\n warning: (message: string, duration?: number) => void;\r\n /** Show info snackbar */\r\n info: (message: string, duration?: number) => void;\r\n /** Close snackbar */\r\n close: () => void;\r\n}\r\n\r\nconst DEFAULT_DURATION = 4000;\r\n\r\n/**\r\n * Manage snackbar/toast notification state\r\n * @param defaultDuration - Default auto-hide duration in ms\r\n */\r\nexport function useSnackbar(defaultDuration: number = DEFAULT_DURATION): UseSnackbarReturn {\r\n const [state, setState] = useState<SnackbarState>({\r\n open: false,\r\n message: '',\r\n severity: 'info',\r\n autoHideDuration: defaultDuration,\r\n });\r\n\r\n const show = useCallback(\r\n (message: string, severity: SnackbarSeverity = 'info', duration?: number) => {\r\n setState({\r\n open: true,\r\n message,\r\n severity,\r\n autoHideDuration: duration ?? defaultDuration,\r\n });\r\n },\r\n [defaultDuration]\r\n );\r\n\r\n const success = useCallback(\r\n (message: string, duration?: number) => show(message, 'success', duration),\r\n [show]\r\n );\r\n\r\n const error = useCallback(\r\n (message: string, duration?: number) => show(message, 'error', duration),\r\n [show]\r\n );\r\n\r\n const warning = useCallback(\r\n (message: string, duration?: number) => show(message, 'warning', duration),\r\n [show]\r\n );\r\n\r\n const info = useCallback(\r\n (message: string, duration?: number) => show(message, 'info', duration),\r\n [show]\r\n );\r\n\r\n const close = useCallback(() => {\r\n setState((prev) => ({ ...prev, open: false }));\r\n }, []);\r\n\r\n return { state, show, success, error, warning, info, close };\r\n}\r\n\r\nexport default useSnackbar;\r\n","/**\r\n * useMediaQuery Hook\r\n * Track media query matches\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Track a media query match\r\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\r\n */\r\nexport function useMediaQuery(query: string): boolean {\r\n const getMatches = (query: string): boolean => {\r\n if (typeof window === 'undefined') return false;\r\n return window.matchMedia(query).matches;\r\n };\r\n\r\n const [matches, setMatches] = useState<boolean>(getMatches(query));\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const mediaQuery = window.matchMedia(query);\r\n const handleChange = () => setMatches(mediaQuery.matches);\r\n\r\n // Set initial value\r\n handleChange();\r\n\r\n mediaQuery.addEventListener('change', handleChange);\r\n return () => mediaQuery.removeEventListener('change', handleChange);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n\r\n// Preset breakpoint hooks\r\nexport const useIsMobile = () => useMediaQuery('(max-width: 767px)');\r\nexport const useIsTablet = () => useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\r\nexport const useIsDesktop = () => useMediaQuery('(min-width: 1024px)');\r\nexport const useIsMobileOrTablet = () => useMediaQuery('(max-width: 1023px)');\r\n\r\nexport default useMediaQuery;\r\n","/**\r\n * useOnClickOutside Hook\r\n * Detect clicks outside of a referenced element\r\n */\r\nimport { useEffect, RefObject } from 'react';\r\n\r\ntype Handler = (event: MouseEvent | TouchEvent) => void;\r\n\r\n/**\r\n * Detect clicks outside of a referenced element\r\n * @param ref - React ref to the element\r\n * @param handler - Callback when click outside occurs\r\n * @param enabled - Whether the hook is enabled (default: true)\r\n */\r\nexport function useOnClickOutside<T extends HTMLElement = HTMLElement>(\r\n ref: RefObject<T>,\r\n handler: Handler,\r\n enabled: boolean = true\r\n): void {\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const listener = (event: MouseEvent | TouchEvent) => {\r\n const el = ref?.current;\r\n\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!el || el.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n document.addEventListener('mousedown', listener);\r\n document.addEventListener('touchstart', listener);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', listener);\r\n document.removeEventListener('touchstart', listener);\r\n };\r\n }, [ref, handler, enabled]);\r\n}\r\n\r\nexport default useOnClickOutside;\r\n","/**\r\n * useWindowSize Hook\r\n * Track window dimensions\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface WindowSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Track window dimensions with resize updates\r\n * @param debounceMs - Debounce resize events (default: 100ms)\r\n */\r\nexport function useWindowSize(debounceMs: number = 100): WindowSize {\r\n const getSize = (): WindowSize => ({\r\n width: typeof window !== 'undefined' ? window.innerWidth : 0,\r\n height: typeof window !== 'undefined' ? window.innerHeight : 0,\r\n });\r\n\r\n const [windowSize, setWindowSize] = useState<WindowSize>(getSize);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n let timeoutId: NodeJS.Timeout;\r\n\r\n const handleResize = () => {\r\n clearTimeout(timeoutId);\r\n timeoutId = setTimeout(() => {\r\n setWindowSize(getSize());\r\n }, debounceMs);\r\n };\r\n\r\n // Set initial size\r\n setWindowSize(getSize());\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, [debounceMs]);\r\n\r\n return windowSize;\r\n}\r\n\r\nexport default useWindowSize;\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client/http/axios-instance.ts","../../src/client/http/response-parser.ts","../../src/client/logger/client-logger.ts","../../src/client/utils/date.ts","../../src/client/utils/clipboard.ts","../../src/client/utils/slug.ts","../../src/client/utils/events.ts","../../src/client/utils/api-urls.ts","../../src/client/utils/response-parser.ts","../../src/client/utils/packageCheck.ts","../../src/client/hooks/useToggle.ts","../../src/client/hooks/useCounter.ts","../../src/client/hooks/useDefault.ts","../../src/client/hooks/usePrevious.ts","../../src/client/hooks/useObjectState.ts","../../src/client/hooks/useHistoryState.ts","../../src/client/hooks/useQueue.ts","../../src/client/hooks/useList.ts","../../src/client/hooks/useMap.ts","../../src/client/hooks/useSet.ts","../../src/client/hooks/useDebounce.ts","../../src/client/hooks/useThrottle.ts","../../src/client/hooks/useTimeout.ts","../../src/client/hooks/useInterval.ts","../../src/client/hooks/useIntervalWhen.ts","../../src/client/hooks/useRandomInterval.ts","../../src/client/hooks/useCountdown.ts","../../src/client/hooks/useContinuousRetry.ts","../../src/client/hooks/useWindowSize.ts","../../src/client/hooks/useWindowScroll.ts","../../src/client/hooks/useDocumentTitle.ts","../../src/client/hooks/usePageTitle.ts","../../src/client/hooks/useFavicon.ts","../../src/client/hooks/useVisibilityChange.ts","../../src/client/hooks/usePageLeave.ts","../../src/client/hooks/useLockBodyScroll.ts","../../src/client/hooks/useIsClient.ts","../../src/client/hooks/useIsFirstRender.ts","../../src/client/hooks/useEventListener.ts","../../src/client/hooks/useKeyPress.ts","../../src/client/hooks/useHover.ts","../../src/client/hooks/useClickAway.ts","../../src/client/hooks/useOnClickOutside.ts","../../src/client/hooks/useLongPress.ts","../../src/client/hooks/useMouse.ts","../../src/client/hooks/useCopyToClipboard.ts","../../src/client/hooks/useMediaQuery.ts","../../src/client/hooks/useOrientation.ts","../../src/client/hooks/useBattery.ts","../../src/client/hooks/useNetworkState.ts","../../src/client/hooks/useIdle.ts","../../src/client/hooks/useGeolocation.ts","../../src/client/hooks/usePreferredLanguage.ts","../../src/client/hooks/useThemeDetector.ts","../../src/client/hooks/useLocalStorage.ts","../../src/client/hooks/useSessionStorage.ts","../../src/client/hooks/useFetch.ts","../../src/client/hooks/useScript.ts","../../src/client/hooks/useRenderInfo.ts","../../src/client/hooks/useRenderCount.ts","../../src/client/hooks/useLogger.ts","../../src/client/hooks/useMeasure.ts","../../src/client/hooks/useIntersectionObserver.ts","../../src/client/hooks/useSnackbar.ts","../../src/client/web/theme/default-light-theme.ts","../../src/client/web/theme/default-dark-theme.ts","../../src/client/web/theme/theme-utils.ts","../../src/client/web/theme/ThemeProvider.tsx","../../src/client/web/astro/types.ts","../../src/client/web/forms/types.ts","../../src/client/web/forms/validation.ts","../../src/client/web/forms/ContactForm.tsx","../../src/client/web/forms/NewsletterForm.tsx","../../src/client/web/forms/LoginForm.tsx","../../src/client/web/forms/RegisterForm.tsx"],"names":["axios","useState","useCallback","useMemo","ref","useRef","useEffect","entries","keys","isSuccess","query","battery","rect","createContext","useContext","theme","jsxs","jsx","capitalize","Yup","Formik","Form","Field","ErrorMessage","defaultInitialValues"],"mappings":"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","file":"index.js","sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\r\n\r\n/**\r\n * HTTP Client Configuration Options\r\n */\r\nexport interface HttpClientOptions {\r\n baseURL: string;\r\n timeout?: number;\r\n withCredentials?: boolean;\r\n getAuthToken?: () => string | null;\r\n onUnauthorized?: () => void;\r\n onServerError?: (error: AxiosError) => void;\r\n}\r\n\r\n/**\r\n * Create configured Axios instance\r\n */\r\nexport const createHttpClient = (options: HttpClientOptions): AxiosInstance => {\r\n const {\r\n baseURL,\r\n timeout = 30000,\r\n withCredentials = true,\r\n getAuthToken,\r\n onUnauthorized,\r\n onServerError,\r\n } = options;\r\n\r\n const instance = axios.create({\r\n baseURL,\r\n timeout,\r\n withCredentials,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Request interceptor - add auth token\r\n instance.interceptors.request.use(\r\n (config: InternalAxiosRequestConfig) => {\r\n if (getAuthToken) {\r\n const token = getAuthToken();\r\n if (token && config.headers) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n }\r\n return config;\r\n },\r\n (error: unknown) => Promise.reject(error)\r\n );\r\n\r\n // Response interceptor - handle errors\r\n instance.interceptors.response.use(\r\n (response: AxiosResponse) => response,\r\n (error: AxiosError) => {\r\n if (error.response) {\r\n const status = error.response.status;\r\n\r\n // Handle 401 Unauthorized\r\n if (status === 401 && onUnauthorized) {\r\n onUnauthorized();\r\n }\r\n\r\n // Handle 5xx Server Errors\r\n if (status >= 500 && onServerError) {\r\n onServerError(error);\r\n }\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n return instance;\r\n};\r\n\r\n/**\r\n * Default request config helpers\r\n */\r\nexport const withFormData = (): AxiosRequestConfig => ({\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n});\r\n\r\nexport const withTimeout = (ms: number): AxiosRequestConfig => ({\r\n timeout: ms,\r\n});\r\n\r\nexport const withAbortSignal = (signal: AbortSignal): AxiosRequestConfig => ({\r\n signal,\r\n});\r\n\r\nexport default {\r\n createHttpClient,\r\n withFormData,\r\n withTimeout,\r\n withAbortSignal,\r\n};\r\n","import { AxiosResponse, AxiosError } from 'axios';\r\n\r\n/**\r\n * Standard API Response Structure\r\n */\r\nexport interface ApiResponse<T = unknown> {\r\n success: boolean;\r\n message: string;\r\n data?: T;\r\n error?: string;\r\n statusCode?: number;\r\n}\r\n\r\n/**\r\n * Paginated Response Structure\r\n */\r\nexport interface PaginatedResponse<T = unknown> extends ApiResponse<T[]> {\r\n pagination: {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Parse successful API response\r\n */\r\nexport const parseResponse = <T>(response: AxiosResponse<ApiResponse<T>>): T | null => {\r\n if (response.data?.success && response.data?.data !== undefined) {\r\n return response.data.data;\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Parse API response with full metadata\r\n */\r\nexport const parseFullResponse = <T>(response: AxiosResponse<ApiResponse<T>>): ApiResponse<T> => {\r\n return response.data;\r\n};\r\n\r\n/**\r\n * Parse error from API response\r\n */\r\nexport const parseError = (error: AxiosError<ApiResponse>): string => {\r\n // Check for API error message\r\n if (error.response?.data?.message) {\r\n return error.response.data.message;\r\n }\r\n\r\n if (error.response?.data?.error) {\r\n return error.response.data.error;\r\n }\r\n\r\n // Check for network error\r\n if (error.code === 'ERR_NETWORK') {\r\n return 'Network error. Please check your connection.';\r\n }\r\n\r\n // Check for timeout\r\n if (error.code === 'ECONNABORTED') {\r\n return 'Request timed out. Please try again.';\r\n }\r\n\r\n // Default error message\r\n return error.message || 'An unexpected error occurred.';\r\n};\r\n\r\n/**\r\n * Check if response is successful\r\n */\r\nexport const isSuccess = <T>(response: AxiosResponse<ApiResponse<T>>): boolean => {\r\n return response.data?.success === true;\r\n};\r\n\r\n/**\r\n * Check if error is a specific status code\r\n */\r\nexport const isStatusError = (error: AxiosError, statusCode: number): boolean => {\r\n return error.response?.status === statusCode;\r\n};\r\n\r\n/**\r\n * Check if error is unauthorized (401)\r\n */\r\nexport const isUnauthorized = (error: AxiosError): boolean => {\r\n return isStatusError(error, 401);\r\n};\r\n\r\n/**\r\n * Check if error is forbidden (403)\r\n */\r\nexport const isForbidden = (error: AxiosError): boolean => {\r\n return isStatusError(error, 403);\r\n};\r\n\r\n/**\r\n * Check if error is not found (404)\r\n */\r\nexport const isNotFound = (error: AxiosError): boolean => {\r\n return isStatusError(error, 404);\r\n};\r\n\r\n/**\r\n * Check if error is server error (5xx)\r\n */\r\nexport const isServerError = (error: AxiosError): boolean => {\r\n const status = error.response?.status;\r\n return status !== undefined && status >= 500;\r\n};\r\n\r\nexport default {\r\n parseResponse,\r\n parseFullResponse,\r\n parseError,\r\n isSuccess,\r\n isStatusError,\r\n isUnauthorized,\r\n isForbidden,\r\n isNotFound,\r\n isServerError,\r\n};\r\n","/**\r\n * Log Levels\r\n */\r\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\r\n\r\n/**\r\n * Client Logger Configuration\r\n */\r\nexport interface ClientLoggerConfig {\r\n enabled?: boolean;\r\n minLevel?: LogLevel;\r\n prefix?: string;\r\n includeTimestamp?: boolean;\r\n remoteLogging?: {\r\n enabled: boolean;\r\n endpoint: string;\r\n batchSize?: number;\r\n flushInterval?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Log Entry\r\n */\r\ninterface LogEntry {\r\n level: LogLevel;\r\n message: string;\r\n data?: unknown;\r\n timestamp: string;\r\n prefix?: string;\r\n}\r\n\r\nconst LOG_LEVELS: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n};\r\n\r\n/**\r\n * Client-side logger with optional remote logging\r\n */\r\nexport class ClientLogger {\r\n private config: Required<Omit<ClientLoggerConfig, 'remoteLogging'>> & {\r\n remoteLogging?: ClientLoggerConfig['remoteLogging'];\r\n };\r\n private buffer: LogEntry[] = [];\r\n private flushTimer?: ReturnType<typeof setInterval>;\r\n\r\n constructor(config: ClientLoggerConfig = {}) {\r\n this.config = {\r\n enabled: config.enabled ?? (process.env.NODE_ENV !== 'production'),\r\n minLevel: config.minLevel ?? 'debug',\r\n prefix: config.prefix ?? '[App]',\r\n includeTimestamp: config.includeTimestamp ?? true,\r\n remoteLogging: config.remoteLogging,\r\n };\r\n\r\n // Setup remote logging flush interval\r\n if (this.config.remoteLogging?.enabled) {\r\n const interval = this.config.remoteLogging.flushInterval ?? 30000;\r\n this.flushTimer = setInterval(() => this.flush(), interval);\r\n }\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n if (!this.config.enabled) return false;\r\n return LOG_LEVELS[level] >= LOG_LEVELS[this.config.minLevel];\r\n }\r\n\r\n private formatMessage(level: LogLevel, message: string): string {\r\n const parts: string[] = [];\r\n \r\n if (this.config.includeTimestamp) {\r\n parts.push(`[${new Date().toISOString()}]`);\r\n }\r\n \r\n parts.push(this.config.prefix);\r\n parts.push(`[${level.toUpperCase()}]`);\r\n parts.push(message);\r\n \r\n return parts.join(' ');\r\n }\r\n\r\n private log(level: LogLevel, message: string, data?: unknown): void {\r\n if (!this.shouldLog(level)) return;\r\n\r\n const formattedMessage = this.formatMessage(level, message);\r\n const entry: LogEntry = {\r\n level,\r\n message,\r\n data,\r\n timestamp: new Date().toISOString(),\r\n prefix: this.config.prefix,\r\n };\r\n\r\n // Console output\r\n switch (level) {\r\n case 'debug':\r\n console.debug(formattedMessage, data ?? '');\r\n break;\r\n case 'info':\r\n console.info(formattedMessage, data ?? '');\r\n break;\r\n case 'warn':\r\n console.warn(formattedMessage, data ?? '');\r\n break;\r\n case 'error':\r\n console.error(formattedMessage, data ?? '');\r\n break;\r\n }\r\n\r\n // Buffer for remote logging\r\n if (this.config.remoteLogging?.enabled) {\r\n this.buffer.push(entry);\r\n const batchSize = this.config.remoteLogging.batchSize ?? 10;\r\n if (this.buffer.length >= batchSize) {\r\n this.flush();\r\n }\r\n }\r\n }\r\n\r\n debug(message: string, data?: unknown): void {\r\n this.log('debug', message, data);\r\n }\r\n\r\n info(message: string, data?: unknown): void {\r\n this.log('info', message, data);\r\n }\r\n\r\n warn(message: string, data?: unknown): void {\r\n this.log('warn', message, data);\r\n }\r\n\r\n error(message: string, data?: unknown): void {\r\n this.log('error', message, data);\r\n }\r\n\r\n /**\r\n * Flush buffered logs to remote endpoint\r\n */\r\n async flush(): Promise<void> {\r\n if (!this.config.remoteLogging?.enabled || this.buffer.length === 0) return;\r\n\r\n const logs = [...this.buffer];\r\n this.buffer = [];\r\n\r\n try {\r\n await fetch(this.config.remoteLogging.endpoint, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ logs }),\r\n });\r\n } catch (error) {\r\n // Re-add logs to buffer on failure (but limit size)\r\n this.buffer = [...logs, ...this.buffer].slice(0, 100);\r\n console.error('Failed to send logs to remote endpoint', error);\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup logger (clear intervals)\r\n */\r\n destroy(): void {\r\n if (this.flushTimer) {\r\n clearInterval(this.flushTimer);\r\n }\r\n this.flush();\r\n }\r\n}\r\n\r\n/**\r\n * Create a new logger instance\r\n */\r\nexport const createClientLogger = (config?: ClientLoggerConfig): ClientLogger => {\r\n return new ClientLogger(config);\r\n};\r\n\r\n/**\r\n * Default logger instance\r\n */\r\nexport const clientLogger = new ClientLogger();\r\n\r\nexport default clientLogger;\r\n","/**\r\n * Format date to readable string\r\n * @param date - Date to format\r\n * @param locale - Locale for formatting (default: 'en-US')\r\n */\r\nexport const formatDate = (\r\n date: Date | string | number,\r\n locale: string = 'en-US'\r\n): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toLocaleDateString(locale, {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n};\r\n\r\n/**\r\n * Format date with time\r\n */\r\nexport const formatDateTime = (\r\n date: Date | string | number,\r\n locale: string = 'en-US'\r\n): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toLocaleDateString(locale, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n};\r\n\r\n/**\r\n * Format date as relative time (e.g., \"2 hours ago\")\r\n */\r\nexport const formatRelativeTime = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n const now = new Date();\r\n const diffInSeconds = Math.floor((now.getTime() - dateObj.getTime()) / 1000);\r\n\r\n const intervals: { label: string; seconds: number }[] = [\r\n { label: 'year', seconds: 31536000 },\r\n { label: 'month', seconds: 2592000 },\r\n { label: 'week', seconds: 604800 },\r\n { label: 'day', seconds: 86400 },\r\n { label: 'hour', seconds: 3600 },\r\n { label: 'minute', seconds: 60 },\r\n { label: 'second', seconds: 1 },\r\n ];\r\n\r\n for (const interval of intervals) {\r\n const count = Math.floor(diffInSeconds / interval.seconds);\r\n if (count >= 1) {\r\n return `${count} ${interval.label}${count !== 1 ? 's' : ''} ago`;\r\n }\r\n }\r\n\r\n return 'just now';\r\n};\r\n\r\n/**\r\n * Format date for input[type=\"date\"]\r\n */\r\nexport const formatDateForInput = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toISOString().split('T')[0];\r\n};\r\n\r\n/**\r\n * Format date for input[type=\"datetime-local\"]\r\n */\r\nexport const formatDateTimeForInput = (date: Date | string | number): string => {\r\n const dateObj = new Date(date);\r\n return dateObj.toISOString().slice(0, 16);\r\n};\r\n\r\n/**\r\n * Check if date is today\r\n */\r\nexport const isToday = (date: Date | string | number): boolean => {\r\n const dateObj = new Date(date);\r\n const today = new Date();\r\n return (\r\n dateObj.getDate() === today.getDate() &&\r\n dateObj.getMonth() === today.getMonth() &&\r\n dateObj.getFullYear() === today.getFullYear()\r\n );\r\n};\r\n\r\n/**\r\n * Check if date is in the past\r\n */\r\nexport const isPast = (date: Date | string | number): boolean => {\r\n return new Date(date).getTime() < Date.now();\r\n};\r\n\r\n/**\r\n * Check if date is in the future\r\n */\r\nexport const isFuture = (date: Date | string | number): boolean => {\r\n return new Date(date).getTime() > Date.now();\r\n};\r\n\r\n/**\r\n * Add days to a date\r\n */\r\nexport const addDays = (date: Date | string | number, days: number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setDate(dateObj.getDate() + days);\r\n return dateObj;\r\n};\r\n\r\n/**\r\n * Get start of day\r\n */\r\nexport const startOfDay = (date: Date | string | number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setHours(0, 0, 0, 0);\r\n return dateObj;\r\n};\r\n\r\n/**\r\n * Get end of day\r\n */\r\nexport const endOfDay = (date: Date | string | number): Date => {\r\n const dateObj = new Date(date);\r\n dateObj.setHours(23, 59, 59, 999);\r\n return dateObj;\r\n};\r\n\r\nexport default {\r\n formatDate,\r\n formatDateTime,\r\n formatRelativeTime,\r\n formatDateForInput,\r\n formatDateTimeForInput,\r\n isToday,\r\n isPast,\r\n isFuture,\r\n addDays,\r\n startOfDay,\r\n endOfDay,\r\n};\r\n","/**\r\n * Copy text to clipboard\r\n * @returns Promise<boolean> - true if successful\r\n */\r\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\r\n try {\r\n // Modern API (preferred)\r\n if (navigator.clipboard && window.isSecureContext) {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n\r\n // Fallback for older browsers or non-secure contexts\r\n const textArea = document.createElement('textarea');\r\n textArea.value = text;\r\n textArea.style.position = 'fixed';\r\n textArea.style.left = '-999999px';\r\n textArea.style.top = '-999999px';\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n const success = document.execCommand('copy');\r\n document.body.removeChild(textArea);\r\n return success;\r\n } catch (error) {\r\n console.error('Failed to copy to clipboard:', error);\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * Read text from clipboard\r\n * @returns Promise<string | null>\r\n */\r\nexport const readFromClipboard = async (): Promise<string | null> => {\r\n try {\r\n if (navigator.clipboard && window.isSecureContext) {\r\n return await navigator.clipboard.readText();\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('Failed to read from clipboard:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Check if clipboard API is available\r\n */\r\nexport const isClipboardAvailable = (): boolean => {\r\n return !!(navigator.clipboard && window.isSecureContext);\r\n};\r\n\r\nexport default {\r\n copyToClipboard,\r\n readFromClipboard,\r\n isClipboardAvailable,\r\n};\r\n","/**\r\n * Generate URL-friendly slug from text\r\n */\r\nexport const slugify = (text: string): string => {\r\n return text\r\n .toString()\r\n .toLowerCase()\r\n .trim()\r\n .replace(/\\s+/g, '-') // Replace spaces with -\r\n .replace(/[^\\w\\-]+/g, '') // Remove non-word chars\r\n .replace(/\\-\\-+/g, '-') // Replace multiple - with single -\r\n .replace(/^-+/, '') // Trim - from start\r\n .replace(/-+$/, ''); // Trim - from end\r\n};\r\n\r\n/**\r\n * Generate slug with unique suffix\r\n */\r\nexport const slugifyUnique = (text: string): string => {\r\n const baseSlug = slugify(text);\r\n const uniqueSuffix = Date.now().toString(36) + Math.random().toString(36).substring(2, 5);\r\n return `${baseSlug}-${uniqueSuffix}`;\r\n};\r\n\r\n/**\r\n * Convert slug back to readable text\r\n */\r\nexport const unslugify = (slug: string): string => {\r\n return slug\r\n .replace(/-/g, ' ')\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n};\r\n\r\n/**\r\n * Truncate text to specified length with ellipsis\r\n */\r\nexport const truncate = (\r\n text: string,\r\n maxLength: number,\r\n suffix: string = '...'\r\n): string => {\r\n if (text.length <= maxLength) return text;\r\n return text.substring(0, maxLength - suffix.length).trim() + suffix;\r\n};\r\n\r\n/**\r\n * Truncate text by words\r\n */\r\nexport const truncateWords = (\r\n text: string,\r\n maxWords: number,\r\n suffix: string = '...'\r\n): string => {\r\n const words = text.split(/\\s+/);\r\n if (words.length <= maxWords) return text;\r\n return words.slice(0, maxWords).join(' ') + suffix;\r\n};\r\n\r\n/**\r\n * Capitalize first letter of each word\r\n */\r\nexport const capitalizeWords = (text: string): string => {\r\n return text.replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n};\r\n\r\n/**\r\n * Capitalize first letter only\r\n */\r\nexport const capitalize = (text: string): string => {\r\n if (!text) return '';\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n};\r\n\r\n/**\r\n * Convert camelCase to kebab-case\r\n */\r\nexport const camelToKebab = (text: string): string => {\r\n return text.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\r\n};\r\n\r\n/**\r\n * Convert kebab-case to camelCase\r\n */\r\nexport const kebabToCamel = (text: string): string => {\r\n return text.replace(/-([a-z])/g, (_, char) => char.toUpperCase());\r\n};\r\n\r\nexport default {\r\n slugify,\r\n slugifyUnique,\r\n unslugify,\r\n truncate,\r\n truncateWords,\r\n capitalizeWords,\r\n capitalize,\r\n camelToKebab,\r\n kebabToCamel,\r\n};\r\n","/**\r\n * Event Emitter for client-side event handling\r\n */\r\n\r\ntype EventHandler<T = unknown> = (data: T) => void;\r\n\r\ninterface EventMap {\r\n [event: string]: unknown;\r\n}\r\n\r\n/**\r\n * Simple typed event emitter for browser use\r\n */\r\nexport class EventEmitter<Events extends EventMap = EventMap> {\r\n private handlers: Map<keyof Events, Set<EventHandler<unknown>>> = new Map();\r\n\r\n /**\r\n * Subscribe to an event\r\n * @returns Unsubscribe function\r\n */\r\n on<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): () => void {\r\n if (!this.handlers.has(event)) {\r\n this.handlers.set(event, new Set());\r\n }\r\n this.handlers.get(event)!.add(handler as EventHandler<unknown>);\r\n\r\n // Return unsubscribe function\r\n return () => this.off(event, handler);\r\n }\r\n\r\n /**\r\n * Subscribe to an event once\r\n */\r\n once<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): () => void {\r\n const wrappedHandler: EventHandler<Events[K]> = (data) => {\r\n this.off(event, wrappedHandler);\r\n handler(data);\r\n };\r\n return this.on(event, wrappedHandler);\r\n }\r\n\r\n /**\r\n * Unsubscribe from an event\r\n */\r\n off<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): void {\r\n const eventHandlers = this.handlers.get(event);\r\n if (eventHandlers) {\r\n eventHandlers.delete(handler as EventHandler<unknown>);\r\n }\r\n }\r\n\r\n /**\r\n * Emit an event\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n const eventHandlers = this.handlers.get(event);\r\n if (eventHandlers) {\r\n eventHandlers.forEach((handler) => {\r\n try {\r\n handler(data);\r\n } catch (error) {\r\n console.error(`Error in event handler for \"${String(event)}\":`, error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Remove all handlers for an event (or all events)\r\n */\r\n removeAllListeners(event?: keyof Events): void {\r\n if (event) {\r\n this.handlers.delete(event);\r\n } else {\r\n this.handlers.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Get count of listeners for an event\r\n */\r\n listenerCount(event: keyof Events): number {\r\n return this.handlers.get(event)?.size ?? 0;\r\n }\r\n}\r\n\r\n/**\r\n * Create a new event emitter instance\r\n */\r\nexport const createEventEmitter = <Events extends EventMap = EventMap>(): EventEmitter<Events> => {\r\n return new EventEmitter<Events>();\r\n};\r\n\r\n/**\r\n * Global app event emitter (singleton)\r\n */\r\nexport const appEvents = new EventEmitter<{\r\n 'auth:login': { userId: string };\r\n 'auth:logout': void;\r\n 'notification:show': { message: string; type: 'success' | 'error' | 'warning' | 'info' };\r\n 'theme:change': 'light' | 'dark';\r\n [key: string]: unknown;\r\n}>();\r\n\r\nexport default {\r\n EventEmitter,\r\n createEventEmitter,\r\n appEvents,\r\n};\r\n","/**\r\n * API URL Builder\r\n * Centralized API endpoint management\r\n */\r\n\r\nexport interface ApiUrlConfig {\r\n baseUrl: string;\r\n version?: string;\r\n}\r\n\r\n/**\r\n * API URL builder class\r\n */\r\nexport class ApiUrlBuilder {\r\n private baseUrl: string;\r\n private version: string;\r\n\r\n constructor(config: ApiUrlConfig) {\r\n this.baseUrl = config.baseUrl.replace(/\\/$/, ''); // Remove trailing slash\r\n this.version = config.version || '';\r\n }\r\n\r\n /**\r\n * Build full URL from path\r\n */\r\n build(path: string): string {\r\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\r\n const versionPath = this.version ? `/${this.version}` : '';\r\n return `${this.baseUrl}${versionPath}${normalizedPath}`;\r\n }\r\n\r\n /**\r\n * Build URL with query parameters\r\n */\r\n buildWithParams(path: string, params: Record<string, string | number | boolean | undefined>): string {\r\n const url = this.build(path);\r\n const filteredParams = Object.entries(params)\r\n .filter(([, value]) => value !== undefined)\r\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\r\n .join('&');\r\n\r\n return filteredParams ? `${url}?${filteredParams}` : url;\r\n }\r\n\r\n /**\r\n * Build URL with path parameters\r\n */\r\n buildWithPathParams(template: string, params: Record<string, string | number>): string {\r\n let path = template;\r\n Object.entries(params).forEach(([key, value]) => {\r\n path = path.replace(`:${key}`, String(value));\r\n path = path.replace(`{${key}}`, String(value));\r\n });\r\n return this.build(path);\r\n }\r\n\r\n /**\r\n * Get base URL\r\n */\r\n getBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n\r\n /**\r\n * Set new base URL\r\n */\r\n setBaseUrl(baseUrl: string): void {\r\n this.baseUrl = baseUrl.replace(/\\/$/, '');\r\n }\r\n}\r\n\r\n/**\r\n * Create API URL builder\r\n */\r\nexport const createApiUrlBuilder = (config: ApiUrlConfig): ApiUrlBuilder => {\r\n return new ApiUrlBuilder(config);\r\n};\r\n\r\n/**\r\n * Common API endpoints factory\r\n */\r\nexport const createApiEndpoints = (builder: ApiUrlBuilder) => ({\r\n // Auth endpoints\r\n auth: {\r\n login: () => builder.build('/auth/login'),\r\n register: () => builder.build('/auth/register'),\r\n logout: () => builder.build('/auth/logout'),\r\n refresh: () => builder.build('/auth/refresh'),\r\n me: () => builder.build('/auth/me'),\r\n forgotPassword: () => builder.build('/auth/forgot-password'),\r\n resetPassword: () => builder.build('/auth/reset-password'),\r\n },\r\n\r\n // User endpoints\r\n users: {\r\n list: () => builder.build('/users'),\r\n get: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n create: () => builder.build('/users'),\r\n update: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n delete: (id: string) => builder.buildWithPathParams('/users/:id', { id }),\r\n },\r\n\r\n // Generic CRUD factory\r\n crud: (resource: string) => ({\r\n list: () => builder.build(`/${resource}`),\r\n get: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n create: () => builder.build(`/${resource}`),\r\n update: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n delete: (id: string) => builder.buildWithPathParams(`/${resource}/:id`, { id }),\r\n }),\r\n});\r\n\r\nexport default {\r\n ApiUrlBuilder,\r\n createApiUrlBuilder,\r\n createApiEndpoints,\r\n};\r\n","/**\n * Response Parser Utilities\n * Common patterns for parsing API responses\n */\nimport type { ApiResponse, PaginatedResponse, PaginationMeta } from '../../shared/types';\n\n/**\n * Check if response is successful\n */\nexport const isSuccessResponse = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { success: true } => {\n return response.success === true;\n};\n\n/**\n * Check if response is an error\n */\nexport const isErrorResponse = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { success: false } => {\n return response.success === false;\n};\n\n/**\n * Extract data from response or return default\n */\nexport const getResponseData = <T>(response: ApiResponse<T>, defaultValue: T): T => {\n if (isSuccessResponse(response) && response.data !== undefined) {\n return response.data;\n }\n return defaultValue;\n};\n\n/**\n * Extract error message from response\n */\nexport const getErrorMessage = <T>(response: ApiResponse<T>, defaultMessage: string = 'An error occurred'): string => {\n if (response.error) {\n return response.error;\n }\n if (response.message) {\n return response.message;\n }\n return defaultMessage;\n};\n\n/**\n * Check if response has data\n */\nexport const hasData = <T>(response: ApiResponse<T>): response is ApiResponse<T> & { data: NonNullable<T> } => {\n return response.data !== null && response.data !== undefined;\n};\n\n/**\n * Check if paginated response has more pages\n */\nexport const hasMorePages = <T>(response: PaginatedResponse<T>): boolean => {\n return response.pagination.hasNextPage;\n};\n\n/**\n * Get next page number from paginated response\n */\nexport const getNextPage = <T>(response: PaginatedResponse<T>): number | null => {\n if (response.pagination.hasNextPage) {\n return response.pagination.page + 1;\n }\n return null;\n};\n\n/**\n * Get previous page number from paginated response\n */\nexport const getPrevPage = <T>(response: PaginatedResponse<T>): number | null => {\n if (response.pagination.hasPrevPage) {\n return response.pagination.page - 1;\n }\n return null;\n};\n\n/**\n * Create empty pagination meta\n */\nexport const createEmptyPaginationMeta = (): PaginationMeta => ({\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n hasNextPage: false,\n hasPrevPage: false,\n});\n\n/**\n * Create success response\n */\nexport const createSuccessResponse = <T>(data: T, message: string = 'Success'): ApiResponse<T> => ({\n success: true,\n message,\n data,\n statusCode: 200,\n});\n\n/**\n * Create error response\n */\nexport const createErrorResponse = (\n message: string,\n statusCode: number = 400,\n error?: string\n): ApiResponse<never> => ({\n success: false,\n message,\n error,\n statusCode,\n});\n\nexport default {\n isSuccessResponse,\n isErrorResponse,\n getResponseData,\n getErrorMessage,\n hasData,\n hasMorePages,\n getNextPage,\n getPrevPage,\n createEmptyPaginationMeta,\n createSuccessResponse,\n createErrorResponse,\n};\n","/**\r\n * Package Check Utility\r\n * Analyzes package.json dependencies and checks for updates\r\n * \r\n * Features:\r\n * - Fetches package.json from URL or file path\r\n * - Checks all dependency types (dependencies, devDependencies, peerDependencies, optionalDependencies)\r\n * - Compares versions with npm registry\r\n * - Provides update suggestions\r\n * - Supports auto mode with npm-check-updates\r\n */\r\n\r\nexport interface PackageVersion {\r\n /** Package name */\r\n name: string;\r\n /** Current version in package.json */\r\n current: string;\r\n /** Latest version available on npm */\r\n latest: string;\r\n /** Is update available? */\r\n hasUpdate: boolean;\r\n /** Update type: major, minor, patch, or none */\r\n updateType: 'major' | 'minor' | 'patch' | 'prerelease' | 'none';\r\n /** Dependency type */\r\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\r\n}\r\n\r\nexport interface PackageCheckResult {\r\n /** Package name from package.json */\r\n packageName: string;\r\n /** Current package version */\r\n packageVersion: string;\r\n /** Total dependencies checked */\r\n totalDependencies: number;\r\n /** Dependencies with updates available */\r\n outdatedCount: number;\r\n /** All dependency information */\r\n dependencies: PackageVersion[];\r\n /** Dependencies grouped by type */\r\n byType: {\r\n dependencies: PackageVersion[];\r\n devDependencies: PackageVersion[];\r\n peerDependencies: PackageVersion[];\r\n optionalDependencies: PackageVersion[];\r\n };\r\n /** Dependencies grouped by update type */\r\n byUpdateType: {\r\n major: PackageVersion[];\r\n minor: PackageVersion[];\r\n patch: PackageVersion[];\r\n prerelease: PackageVersion[];\r\n };\r\n /** Timestamp of check */\r\n checkedAt: Date;\r\n /** Errors encountered */\r\n errors: string[];\r\n}\r\n\r\nexport interface PackageJson {\r\n name?: string;\r\n version?: string;\r\n dependencies?: Record<string, string>;\r\n devDependencies?: Record<string, string>;\r\n peerDependencies?: Record<string, string>;\r\n optionalDependencies?: Record<string, string>;\r\n}\r\n\r\nexport interface NpmRegistryResponse {\r\n 'dist-tags': {\r\n latest: string;\r\n [key: string]: string;\r\n };\r\n versions: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Parse version string, removing range operators\r\n */\r\nfunction parseVersion(version: string): string {\r\n // Remove range operators: ^, ~, >=, <=, >, <, =, ||, etc.\r\n return version.replace(/[\\^~>=<|*x\\s]/g, '').split(' ')[0] || '0.0.0';\r\n}\r\n\r\n/**\r\n * Compare two semver versions\r\n */\r\nfunction compareVersions(current: string, latest: string): 'major' | 'minor' | 'patch' | 'prerelease' | 'none' {\r\n const currentClean = parseVersion(current);\r\n const latestClean = parseVersion(latest);\r\n\r\n if (currentClean === latestClean) return 'none';\r\n\r\n const [curMajor, curMinor, curPatch] = currentClean.split('.').map(Number);\r\n const [latMajor, latMinor, latPatch] = latestClean.split('.').map(Number);\r\n\r\n // Check for prerelease\r\n if (latest.includes('-')) return 'prerelease';\r\n\r\n if (latMajor > curMajor) return 'major';\r\n if (latMinor > curMinor) return 'minor';\r\n if (latPatch > curPatch) return 'patch';\r\n\r\n return 'none';\r\n}\r\n\r\n/**\r\n * Fetch latest version from npm registry\r\n */\r\nasync function fetchLatestVersion(packageName: string): Promise<string | null> {\r\n try {\r\n // Handle scoped packages\r\n const encodedName = packageName.startsWith('@')\r\n ? `@${encodeURIComponent(packageName.slice(1))}`\r\n : encodeURIComponent(packageName);\r\n\r\n const response = await fetch(`https://registry.npmjs.org/${encodedName}`);\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n const data = (await response.json()) as NpmRegistryResponse;\r\n return data['dist-tags']?.latest || null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Fetch package.json from URL or return parsed object\r\n */\r\nasync function fetchPackageJson(source: string | PackageJson): Promise<PackageJson> {\r\n if (typeof source === 'object') {\r\n return source;\r\n }\r\n\r\n // If it's a URL, fetch it\r\n if (source.startsWith('http://') || source.startsWith('https://')) {\r\n const response = await fetch(source);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch package.json from ${source}: ${response.status}`);\r\n }\r\n return response.json() as Promise<PackageJson>;\r\n }\r\n\r\n // For file paths, we need to use dynamic import or Node.js fs\r\n // In browser context, this won't work - throw helpful error\r\n throw new Error(\r\n 'File path support requires Node.js environment. Use URL or pass package.json object directly.'\r\n );\r\n}\r\n\r\n/**\r\n * Check a single dependency type\r\n */\r\nasync function checkDependencyType(\r\n deps: Record<string, string> | undefined,\r\n type: PackageVersion['dependencyType'],\r\n errors: string[]\r\n): Promise<PackageVersion[]> {\r\n if (!deps) return [];\r\n\r\n const results: PackageVersion[] = [];\r\n const entries = Object.entries(deps);\r\n\r\n // Process in parallel with concurrency limit\r\n const concurrencyLimit = 10;\r\n for (let i = 0; i < entries.length; i += concurrencyLimit) {\r\n const batch = entries.slice(i, i + concurrencyLimit);\r\n const batchResults = await Promise.all(\r\n batch.map(async ([name, currentVersion]) => {\r\n try {\r\n const latest = await fetchLatestVersion(name);\r\n\r\n if (!latest) {\r\n errors.push(`Could not fetch latest version for ${name}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'unknown',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n\r\n const updateType = compareVersions(currentVersion, latest);\r\n\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest,\r\n hasUpdate: updateType !== 'none',\r\n updateType,\r\n dependencyType: type,\r\n };\r\n } catch (err) {\r\n errors.push(`Error checking ${name}: ${err}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'error',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n })\r\n );\r\n results.push(...batchResults);\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Main function to check package.json for updates\r\n * \r\n * @example\r\n * // From URL\r\n * const result = await checkPackage('https://raw.githubusercontent.com/user/repo/main/package.json');\r\n * \r\n * @example\r\n * // From object\r\n * const result = await checkPackage({\r\n * name: 'my-package',\r\n * dependencies: { 'lodash': '^4.17.0' }\r\n * });\r\n * \r\n * @example\r\n * // In Node.js, read file first\r\n * import fs from 'fs';\r\n * const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf-8'));\r\n * const result = await checkPackage(pkg);\r\n */\r\nexport async function checkPackage(\r\n source: string | PackageJson\r\n): Promise<PackageCheckResult> {\r\n const errors: string[] = [];\r\n\r\n // Fetch package.json\r\n let pkg: PackageJson;\r\n try {\r\n pkg = await fetchPackageJson(source);\r\n } catch (err) {\r\n throw new Error(`Failed to load package.json: ${err}`);\r\n }\r\n\r\n // Check all dependency types in parallel\r\n const [dependencies, devDependencies, peerDependencies, optionalDependencies] =\r\n await Promise.all([\r\n checkDependencyType(pkg.dependencies, 'dependencies', errors),\r\n checkDependencyType(pkg.devDependencies, 'devDependencies', errors),\r\n checkDependencyType(pkg.peerDependencies, 'peerDependencies', errors),\r\n checkDependencyType(pkg.optionalDependencies, 'optionalDependencies', errors),\r\n ]);\r\n\r\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies, ...optionalDependencies];\r\n\r\n return {\r\n packageName: pkg.name || 'unknown',\r\n packageVersion: pkg.version || '0.0.0',\r\n totalDependencies: allDeps.length,\r\n outdatedCount: allDeps.filter((d) => d.hasUpdate).length,\r\n dependencies: allDeps,\r\n byType: {\r\n dependencies,\r\n devDependencies,\r\n peerDependencies,\r\n optionalDependencies,\r\n },\r\n byUpdateType: {\r\n major: allDeps.filter((d) => d.updateType === 'major'),\r\n minor: allDeps.filter((d) => d.updateType === 'minor'),\r\n patch: allDeps.filter((d) => d.updateType === 'patch'),\r\n prerelease: allDeps.filter((d) => d.updateType === 'prerelease'),\r\n },\r\n checkedAt: new Date(),\r\n errors,\r\n };\r\n}\r\n\r\n/**\r\n * Format check result as human-readable string\r\n */\r\nexport function formatPackageCheckResult(result: PackageCheckResult): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(`📦 Package: ${result.packageName}@${result.packageVersion}`);\r\n lines.push(`📅 Checked: ${result.checkedAt.toISOString()}`);\r\n lines.push(`📊 Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}`);\r\n lines.push('');\r\n\r\n if (result.byUpdateType.major.length > 0) {\r\n lines.push('🔴 MAJOR Updates:');\r\n result.byUpdateType.major.forEach((d) => {\r\n lines.push(` ${d.name}: ${d.current} → ${d.latest}`);\r\n });\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.minor.length > 0) {\r\n lines.push('🟡 MINOR Updates:');\r\n result.byUpdateType.minor.forEach((d) => {\r\n lines.push(` ${d.name}: ${d.current} → ${d.latest}`);\r\n });\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n lines.push('🟢 PATCH Updates:');\r\n result.byUpdateType.patch.forEach((d) => {\r\n lines.push(` ${d.name}: ${d.current} → ${d.latest}`);\r\n });\r\n lines.push('');\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n lines.push('⚠️ Errors:');\r\n result.errors.forEach((e) => {\r\n lines.push(` ${e}`);\r\n });\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Generate ncu (npm-check-updates) command\r\n */\r\nexport function generateNcuCommand(\r\n result: PackageCheckResult,\r\n options: {\r\n updateType?: 'major' | 'minor' | 'patch' | 'all';\r\n interactive?: boolean;\r\n upgrade?: boolean;\r\n } = {}\r\n): string {\r\n const { updateType = 'all', interactive = false, upgrade = false } = options;\r\n\r\n let packages: string[] = [];\r\n\r\n switch (updateType) {\r\n case 'major':\r\n packages = result.byUpdateType.major.map((d) => d.name);\r\n break;\r\n case 'minor':\r\n packages = result.byUpdateType.minor.map((d) => d.name);\r\n break;\r\n case 'patch':\r\n packages = result.byUpdateType.patch.map((d) => d.name);\r\n break;\r\n default:\r\n packages = result.dependencies.filter((d) => d.hasUpdate).map((d) => d.name);\r\n }\r\n\r\n if (packages.length === 0) {\r\n return '# No updates available';\r\n }\r\n\r\n let cmd = 'npx npm-check-updates';\r\n\r\n if (packages.length > 0 && packages.length < result.dependencies.length) {\r\n cmd += ` --filter \"${packages.join(',')}\"`;\r\n }\r\n\r\n if (interactive) {\r\n cmd += ' --interactive';\r\n }\r\n\r\n if (upgrade) {\r\n cmd += ' --upgrade';\r\n }\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Package check utilities for client-side usage\r\n */\r\nexport const packageCheck = {\r\n check: checkPackage,\r\n format: formatPackageCheckResult,\r\n generateNcuCommand,\r\n parseVersion,\r\n compareVersions,\r\n} as const;\r\n\r\nexport default packageCheck;\r\n","/**\r\n * useToggle Hook\r\n * Manages boolean state with toggle functionality\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseToggleReturn {\r\n /** Current boolean value */\r\n value: boolean;\r\n /** Toggle the value */\r\n toggle: () => void;\r\n /** Set to true */\r\n setTrue: () => void;\r\n /** Set to false */\r\n setFalse: () => void;\r\n /** Set to specific value */\r\n setValue: (value: boolean) => void;\r\n}\r\n\r\n/**\r\n * Hook to manage boolean state with toggle functionality\r\n * @param initialValue - Initial boolean value (default: false)\r\n */\r\nexport function useToggle(initialValue: boolean = false): UseToggleReturn {\r\n const [value, setValue] = useState<boolean>(initialValue);\r\n\r\n const toggle = useCallback(() => setValue((v) => !v), []);\r\n const setTrue = useCallback(() => setValue(true), []);\r\n const setFalse = useCallback(() => setValue(false), []);\r\n\r\n return {\r\n value,\r\n toggle,\r\n setTrue,\r\n setFalse,\r\n setValue,\r\n };\r\n}\r\n\r\nexport default useToggle;\r\n","/**\r\n * useCounter Hook\r\n * Manages numeric counter state with increment/decrement functionality\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseCounterOptions {\r\n /** Minimum value */\r\n min?: number;\r\n /** Maximum value */\r\n max?: number;\r\n /** Step value for increment/decrement */\r\n step?: number;\r\n}\r\n\r\nexport interface UseCounterReturn {\r\n /** Current count value */\r\n count: number;\r\n /** Increment by step */\r\n increment: () => void;\r\n /** Decrement by step */\r\n decrement: () => void;\r\n /** Set to specific value */\r\n set: (value: number) => void;\r\n /** Reset to initial value */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Hook to manage numeric counter with min/max bounds\r\n * @param initialValue - Initial counter value (default: 0)\r\n * @param options - Configuration options\r\n */\r\nexport function useCounter(\r\n initialValue: number = 0,\r\n options: UseCounterOptions = {}\r\n): UseCounterReturn {\r\n const { min = -Infinity, max = Infinity, step = 1 } = options;\r\n\r\n const clamp = useCallback(\r\n (value: number) => Math.min(Math.max(value, min), max),\r\n [min, max]\r\n );\r\n\r\n const [count, setCount] = useState<number>(clamp(initialValue));\r\n\r\n const increment = useCallback(() => {\r\n setCount((c) => clamp(c + step));\r\n }, [clamp, step]);\r\n\r\n const decrement = useCallback(() => {\r\n setCount((c) => clamp(c - step));\r\n }, [clamp, step]);\r\n\r\n const set = useCallback(\r\n (value: number) => {\r\n setCount(clamp(value));\r\n },\r\n [clamp]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setCount(clamp(initialValue));\r\n }, [clamp, initialValue]);\r\n\r\n return { count, increment, decrement, set, reset };\r\n}\r\n\r\nexport default useCounter;\r\n","/**\r\n * useDefault Hook\r\n * Returns default value when state is null or undefined\r\n */\r\nimport { useState, useCallback, useMemo } from 'react';\r\n\r\n/**\r\n * Hook that returns a default value when state is null or undefined\r\n * @param initialValue - Initial value (can be null/undefined)\r\n * @param defaultValue - Default value to use when state is null/undefined\r\n */\r\nexport function useDefault<T>(\r\n initialValue: T | null | undefined,\r\n defaultValue: T\r\n): [T, (value: T | null | undefined) => void] {\r\n const [state, setState] = useState<T | null | undefined>(initialValue);\r\n\r\n const value = useMemo(() => {\r\n return state === null || state === undefined ? defaultValue : state;\r\n }, [state, defaultValue]);\r\n\r\n const setValue = useCallback((newValue: T | null | undefined) => {\r\n setState(newValue);\r\n }, []);\r\n\r\n return [value, setValue];\r\n}\r\n\r\nexport default useDefault;\r\n","/**\r\n * usePrevious Hook\r\n * Tracks the previous value of a state\r\n */\r\nimport { useRef, useEffect } from 'react';\r\n\r\n/**\r\n * Hook to get the previous value of a state or prop\r\n * @param value - Current value to track\r\n * @param initialValue - Optional initial previous value\r\n */\r\nexport function usePrevious<T>(value: T, initialValue?: T): T | undefined {\r\n const ref = useRef<T | undefined>(initialValue);\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n\r\nexport default usePrevious;\r\n","/**\r\n * useObjectState Hook\r\n * Manages object state with partial updates (like class component setState)\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport type ObjectStateUpdate<T> = Partial<T> | ((prevState: T) => Partial<T>);\r\n\r\nexport interface UseObjectStateReturn<T extends object> {\r\n /** Current state object */\r\n state: T;\r\n /** Update state with partial object (merges with existing) */\r\n setState: (update: ObjectStateUpdate<T>) => void;\r\n /** Reset to initial state */\r\n resetState: () => void;\r\n /** Set a single property */\r\n setProperty: <K extends keyof T>(key: K, value: T[K]) => void;\r\n /** Remove a property (sets to undefined) */\r\n removeProperty: <K extends keyof T>(key: K) => void;\r\n}\r\n\r\n/**\r\n * Hook to manage object state with partial updates\r\n * @param initialState - Initial state object\r\n */\r\nexport function useObjectState<T extends object>(\r\n initialState: T\r\n): UseObjectStateReturn<T> {\r\n const [state, setStateInternal] = useState<T>(initialState);\r\n\r\n const setState = useCallback((update: ObjectStateUpdate<T>) => {\r\n setStateInternal((prev) => {\r\n const newState = typeof update === 'function' ? update(prev) : update;\r\n return { ...prev, ...newState };\r\n });\r\n }, []);\r\n\r\n const resetState = useCallback(() => {\r\n setStateInternal(initialState);\r\n }, [initialState]);\r\n\r\n const setProperty = useCallback(<K extends keyof T>(key: K, value: T[K]) => {\r\n setStateInternal((prev) => ({ ...prev, [key]: value }));\r\n }, []);\r\n\r\n const removeProperty = useCallback(<K extends keyof T>(key: K) => {\r\n setStateInternal((prev) => {\r\n const newState = { ...prev };\r\n delete newState[key];\r\n return newState;\r\n });\r\n }, []);\r\n\r\n return { state, setState, resetState, setProperty, removeProperty };\r\n}\r\n\r\nexport default useObjectState;\r\n","/**\r\n * useHistoryState Hook\r\n * Manages state with undo/redo history functionality\r\n */\r\nimport { useState, useCallback, useMemo } from 'react';\r\n\r\nexport interface UseHistoryStateReturn<T> {\r\n /** Current state value */\r\n state: T;\r\n /** Set new state (adds to history) */\r\n setState: (value: T | ((prev: T) => T)) => void;\r\n /** Undo to previous state */\r\n undo: () => void;\r\n /** Redo to next state */\r\n redo: () => void;\r\n /** Clear all history and reset to current or initial */\r\n clear: (value?: T) => void;\r\n /** Can undo? */\r\n canUndo: boolean;\r\n /** Can redo? */\r\n canRedo: boolean;\r\n /** Full history array */\r\n history: T[];\r\n /** Current position in history */\r\n pointer: number;\r\n /** Go to specific position in history */\r\n go: (index: number) => void;\r\n}\r\n\r\nexport interface UseHistoryStateOptions {\r\n /** Maximum history length (default: 100) */\r\n maxLength?: number;\r\n}\r\n\r\n/**\r\n * Hook to manage state with undo/redo functionality\r\n * @param initialValue - Initial state value\r\n * @param options - Configuration options\r\n */\r\nexport function useHistoryState<T>(\r\n initialValue: T,\r\n options: UseHistoryStateOptions = {}\r\n): UseHistoryStateReturn<T> {\r\n const { maxLength = 100 } = options;\r\n\r\n const [history, setHistory] = useState<T[]>([initialValue]);\r\n const [pointer, setPointer] = useState<number>(0);\r\n\r\n const state = useMemo(() => history[pointer], [history, pointer]);\r\n\r\n const setState = useCallback(\r\n (value: T | ((prev: T) => T)) => {\r\n setHistory((prev) => {\r\n const currentValue = prev[pointer];\r\n const newValue = typeof value === 'function' ? (value as (prev: T) => T)(currentValue) : value;\r\n \r\n // Remove any future history after current pointer\r\n const newHistory = prev.slice(0, pointer + 1);\r\n newHistory.push(newValue);\r\n \r\n // Trim if exceeds maxLength\r\n if (newHistory.length > maxLength) {\r\n newHistory.shift();\r\n return newHistory;\r\n }\r\n \r\n return newHistory;\r\n });\r\n setPointer((prev) => Math.min(prev + 1, maxLength - 1));\r\n },\r\n [pointer, maxLength]\r\n );\r\n\r\n const undo = useCallback(() => {\r\n setPointer((prev) => Math.max(0, prev - 1));\r\n }, []);\r\n\r\n const redo = useCallback(() => {\r\n setPointer((prev) => Math.min(history.length - 1, prev + 1));\r\n }, [history.length]);\r\n\r\n const go = useCallback(\r\n (index: number) => {\r\n const targetIndex = Math.max(0, Math.min(history.length - 1, index));\r\n setPointer(targetIndex);\r\n },\r\n [history.length]\r\n );\r\n\r\n const clear = useCallback(\r\n (value?: T) => {\r\n const resetValue = value ?? initialValue;\r\n setHistory([resetValue]);\r\n setPointer(0);\r\n },\r\n [initialValue]\r\n );\r\n\r\n const canUndo = pointer > 0;\r\n const canRedo = pointer < history.length - 1;\r\n\r\n return {\r\n state,\r\n setState,\r\n undo,\r\n redo,\r\n clear,\r\n canUndo,\r\n canRedo,\r\n history,\r\n pointer,\r\n go,\r\n };\r\n}\r\n\r\nexport default useHistoryState;\r\n","/**\r\n * useQueue Hook\r\n * Manages a FIFO (First In, First Out) queue\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseQueueReturn<T> {\r\n /** Current queue items */\r\n queue: T[];\r\n /** Add item to end of queue */\r\n enqueue: (item: T) => void;\r\n /** Add multiple items to end of queue */\r\n enqueueAll: (items: T[]) => void;\r\n /** Remove and return first item */\r\n dequeue: () => T | undefined;\r\n /** Peek at first item without removing */\r\n peek: () => T | undefined;\r\n /** Clear the queue */\r\n clear: () => void;\r\n /** Queue size */\r\n size: number;\r\n /** Is queue empty? */\r\n isEmpty: boolean;\r\n /** First item in queue */\r\n first: T | undefined;\r\n /** Last item in queue */\r\n last: T | undefined;\r\n}\r\n\r\n/**\r\n * Hook to manage a FIFO queue\r\n * @param initialValue - Initial queue items (default: [])\r\n */\r\nexport function useQueue<T>(initialValue: T[] = []): UseQueueReturn<T> {\r\n const [queue, setQueue] = useState<T[]>(initialValue);\r\n\r\n const enqueue = useCallback((item: T) => {\r\n setQueue((prev) => [...prev, item]);\r\n }, []);\r\n\r\n const enqueueAll = useCallback((items: T[]) => {\r\n setQueue((prev) => [...prev, ...items]);\r\n }, []);\r\n\r\n const dequeue = useCallback((): T | undefined => {\r\n let dequeuedItem: T | undefined;\r\n setQueue((prev) => {\r\n if (prev.length === 0) return prev;\r\n dequeuedItem = prev[0];\r\n return prev.slice(1);\r\n });\r\n return dequeuedItem;\r\n }, []);\r\n\r\n const peek = useCallback((): T | undefined => {\r\n return queue[0];\r\n }, [queue]);\r\n\r\n const clear = useCallback(() => {\r\n setQueue([]);\r\n }, []);\r\n\r\n const size = queue.length;\r\n const isEmpty = size === 0;\r\n const first = queue[0];\r\n const last = queue[queue.length - 1];\r\n\r\n return {\r\n queue,\r\n enqueue,\r\n enqueueAll,\r\n dequeue,\r\n peek,\r\n clear,\r\n size,\r\n isEmpty,\r\n first,\r\n last,\r\n };\r\n}\r\n\r\nexport default useQueue;\r\n","/**\r\n * useList Hook\r\n * Manages array/list state with utility methods\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseListReturn<T> {\r\n /** Current list items */\r\n list: T[];\r\n /** Set entire list */\r\n set: (newList: T[]) => void;\r\n /** Add item to end */\r\n push: (item: T) => void;\r\n /** Add item to beginning */\r\n unshift: (item: T) => void;\r\n /** Remove item at index */\r\n removeAt: (index: number) => void;\r\n /** Remove first matching item */\r\n remove: (item: T) => void;\r\n /** Remove items matching predicate */\r\n removeWhere: (predicate: (item: T) => boolean) => void;\r\n /** Update item at index */\r\n updateAt: (index: number, item: T) => void;\r\n /** Update item at index with function */\r\n updateWhere: (predicate: (item: T) => boolean, updater: (item: T) => T) => void;\r\n /** Insert item at index */\r\n insertAt: (index: number, item: T) => void;\r\n /** Move item from one index to another */\r\n move: (fromIndex: number, toIndex: number) => void;\r\n /** Clear the list */\r\n clear: () => void;\r\n /** Reset to initial value */\r\n reset: () => void;\r\n /** Filter items */\r\n filter: (predicate: (item: T) => boolean) => void;\r\n /** Sort items */\r\n sort: (compareFn?: (a: T, b: T) => number) => void;\r\n /** Reverse items */\r\n reverse: () => void;\r\n /** List size */\r\n size: number;\r\n /** Is list empty? */\r\n isEmpty: boolean;\r\n /** First item */\r\n first: T | undefined;\r\n /** Last item */\r\n last: T | undefined;\r\n}\r\n\r\n/**\r\n * Hook to manage array/list with utility methods\r\n * @param initialValue - Initial list items (default: [])\r\n */\r\nexport function useList<T>(initialValue: T[] = []): UseListReturn<T> {\r\n const [list, setList] = useState<T[]>(initialValue);\r\n\r\n const set = useCallback((newList: T[]) => {\r\n setList(newList);\r\n }, []);\r\n\r\n const push = useCallback((item: T) => {\r\n setList((prev) => [...prev, item]);\r\n }, []);\r\n\r\n const unshift = useCallback((item: T) => {\r\n setList((prev) => [item, ...prev]);\r\n }, []);\r\n\r\n const removeAt = useCallback((index: number) => {\r\n setList((prev) => prev.filter((_, i) => i !== index));\r\n }, []);\r\n\r\n const remove = useCallback((item: T) => {\r\n setList((prev) => {\r\n const index = prev.indexOf(item);\r\n if (index === -1) return prev;\r\n return prev.filter((_, i) => i !== index);\r\n });\r\n }, []);\r\n\r\n const removeWhere = useCallback((predicate: (item: T) => boolean) => {\r\n setList((prev) => prev.filter((item) => !predicate(item)));\r\n }, []);\r\n\r\n const updateAt = useCallback((index: number, item: T) => {\r\n setList((prev) => prev.map((v, i) => (i === index ? item : v)));\r\n }, []);\r\n\r\n const updateWhere = useCallback(\r\n (predicate: (item: T) => boolean, updater: (item: T) => T) => {\r\n setList((prev) => prev.map((item) => (predicate(item) ? updater(item) : item)));\r\n },\r\n []\r\n );\r\n\r\n const insertAt = useCallback((index: number, item: T) => {\r\n setList((prev) => [...prev.slice(0, index), item, ...prev.slice(index)]);\r\n }, []);\r\n\r\n const move = useCallback((fromIndex: number, toIndex: number) => {\r\n setList((prev) => {\r\n const newList = [...prev];\r\n const [item] = newList.splice(fromIndex, 1);\r\n newList.splice(toIndex, 0, item);\r\n return newList;\r\n });\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setList([]);\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setList(initialValue);\r\n }, [initialValue]);\r\n\r\n const filter = useCallback((predicate: (item: T) => boolean) => {\r\n setList((prev) => prev.filter(predicate));\r\n }, []);\r\n\r\n const sort = useCallback((compareFn?: (a: T, b: T) => number) => {\r\n setList((prev) => [...prev].sort(compareFn));\r\n }, []);\r\n\r\n const reverse = useCallback(() => {\r\n setList((prev) => [...prev].reverse());\r\n }, []);\r\n\r\n const size = list.length;\r\n const isEmpty = size === 0;\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n return {\r\n list,\r\n set,\r\n push,\r\n unshift,\r\n removeAt,\r\n remove,\r\n removeWhere,\r\n updateAt,\r\n updateWhere,\r\n insertAt,\r\n move,\r\n clear,\r\n reset,\r\n filter,\r\n sort,\r\n reverse,\r\n size,\r\n isEmpty,\r\n first,\r\n last,\r\n };\r\n}\r\n\r\nexport default useList;\r\n","/**\r\n * useMap Hook\r\n * Manages Map state with utility methods\r\n */\r\nimport { useState, useCallback, useMemo } from 'react';\r\n\r\nexport interface UseMapReturn<K, V> {\r\n /** Current map */\r\n map: Map<K, V>;\r\n /** Get value by key */\r\n get: (key: K) => V | undefined;\r\n /** Set key-value pair */\r\n set: (key: K, value: V) => void;\r\n /** Set multiple entries */\r\n setAll: (entries: Iterable<[K, V]>) => void;\r\n /** Check if key exists */\r\n has: (key: K) => boolean;\r\n /** Delete by key */\r\n remove: (key: K) => void;\r\n /** Delete multiple keys */\r\n removeAll: (keys: K[]) => void;\r\n /** Clear the map */\r\n clear: () => void;\r\n /** Reset to initial value */\r\n reset: () => void;\r\n /** Map size */\r\n size: number;\r\n /** All keys */\r\n keys: K[];\r\n /** All values */\r\n values: V[];\r\n /** All entries */\r\n entries: [K, V][];\r\n /** Is map empty? */\r\n isEmpty: boolean;\r\n}\r\n\r\n/**\r\n * Hook to manage Map state with utility methods\r\n * @param initialValue - Initial entries (default: [])\r\n */\r\nexport function useMap<K, V>(\r\n initialValue: Iterable<[K, V]> = []\r\n): UseMapReturn<K, V> {\r\n const [map, setMap] = useState<Map<K, V>>(() => new Map(initialValue));\r\n\r\n const get = useCallback((key: K): V | undefined => {\r\n return map.get(key);\r\n }, [map]);\r\n\r\n const set = useCallback((key: K, value: V) => {\r\n setMap((prev) => {\r\n const newMap = new Map(prev);\r\n newMap.set(key, value);\r\n return newMap;\r\n });\r\n }, []);\r\n\r\n const setAll = useCallback((entries: Iterable<[K, V]>) => {\r\n setMap((prev) => {\r\n const newMap = new Map(prev);\r\n for (const [key, value] of entries) {\r\n newMap.set(key, value);\r\n }\r\n return newMap;\r\n });\r\n }, []);\r\n\r\n const has = useCallback((key: K): boolean => {\r\n return map.has(key);\r\n }, [map]);\r\n\r\n const remove = useCallback((key: K) => {\r\n setMap((prev) => {\r\n const newMap = new Map(prev);\r\n newMap.delete(key);\r\n return newMap;\r\n });\r\n }, []);\r\n\r\n const removeAll = useCallback((keys: K[]) => {\r\n setMap((prev) => {\r\n const newMap = new Map(prev);\r\n keys.forEach((key) => newMap.delete(key));\r\n return newMap;\r\n });\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setMap(new Map());\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setMap(new Map(initialValue));\r\n }, [initialValue]);\r\n\r\n const size = map.size;\r\n const keys = useMemo(() => Array.from(map.keys()), [map]);\r\n const values = useMemo(() => Array.from(map.values()), [map]);\r\n const entries = useMemo(() => Array.from(map.entries()), [map]);\r\n const isEmpty = size === 0;\r\n\r\n return {\r\n map,\r\n get,\r\n set,\r\n setAll,\r\n has,\r\n remove,\r\n removeAll,\r\n clear,\r\n reset,\r\n size,\r\n keys,\r\n values,\r\n entries,\r\n isEmpty,\r\n };\r\n}\r\n\r\nexport default useMap;\r\n","/**\r\n * useSet Hook\r\n * Manages Set state with utility methods\r\n */\r\nimport { useState, useCallback, useMemo } from 'react';\r\n\r\nexport interface UseSetReturn<T> {\r\n /** Current set */\r\n set: Set<T>;\r\n /** Add item to set */\r\n add: (item: T) => void;\r\n /** Add multiple items */\r\n addAll: (items: Iterable<T>) => void;\r\n /** Check if item exists */\r\n has: (item: T) => boolean;\r\n /** Remove item from set */\r\n remove: (item: T) => void;\r\n /** Remove multiple items */\r\n removeAll: (items: Iterable<T>) => void;\r\n /** Toggle item (add if not exists, remove if exists) */\r\n toggle: (item: T) => void;\r\n /** Clear the set */\r\n clear: () => void;\r\n /** Reset to initial value */\r\n reset: () => void;\r\n /** Set size */\r\n size: number;\r\n /** All values as array */\r\n values: T[];\r\n /** Is set empty? */\r\n isEmpty: boolean;\r\n}\r\n\r\n/**\r\n * Hook to manage Set state with utility methods\r\n * @param initialValue - Initial items (default: [])\r\n */\r\nexport function useSet<T>(initialValue: Iterable<T> = []): UseSetReturn<T> {\r\n const [set, setSet] = useState<Set<T>>(() => new Set(initialValue));\r\n\r\n const add = useCallback((item: T) => {\r\n setSet((prev) => new Set([...prev, item]));\r\n }, []);\r\n\r\n const addAll = useCallback((items: Iterable<T>) => {\r\n setSet((prev) => new Set([...prev, ...items]));\r\n }, []);\r\n\r\n const has = useCallback((item: T): boolean => {\r\n return set.has(item);\r\n }, [set]);\r\n\r\n const remove = useCallback((item: T) => {\r\n setSet((prev) => {\r\n const newSet = new Set(prev);\r\n newSet.delete(item);\r\n return newSet;\r\n });\r\n }, []);\r\n\r\n const removeAll = useCallback((items: Iterable<T>) => {\r\n setSet((prev) => {\r\n const newSet = new Set(prev);\r\n for (const item of items) {\r\n newSet.delete(item);\r\n }\r\n return newSet;\r\n });\r\n }, []);\r\n\r\n const toggle = useCallback((item: T) => {\r\n setSet((prev) => {\r\n const newSet = new Set(prev);\r\n if (newSet.has(item)) {\r\n newSet.delete(item);\r\n } else {\r\n newSet.add(item);\r\n }\r\n return newSet;\r\n });\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setSet(new Set());\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setSet(new Set(initialValue));\r\n }, [initialValue]);\r\n\r\n const size = set.size;\r\n const values = useMemo(() => Array.from(set), [set]);\r\n const isEmpty = size === 0;\r\n\r\n return {\r\n set,\r\n add,\r\n addAll,\r\n has,\r\n remove,\r\n removeAll,\r\n toggle,\r\n clear,\r\n reset,\r\n size,\r\n values,\r\n isEmpty,\r\n };\r\n}\r\n\r\nexport default useSet;\r\n","/**\r\n * useDebounce Hook\r\n * Returns a debounced version of the value that only updates after delay\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Debounce a value with configurable delay\r\n * @param value - Value to debounce\r\n * @param delay - Delay in milliseconds (default: 500)\r\n */\r\nexport function useDebounce<T>(value: T, delay: number = 500): T {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n return () => {\r\n clearTimeout(timer);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n}\r\n\r\nexport default useDebounce;\r\n","/**\r\n * useThrottle Hook\r\n * Returns a throttled version of the value that only updates at most once per interval\r\n */\r\nimport { useState, useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Throttle a value with configurable interval\r\n * @param value - Value to throttle\r\n * @param interval - Minimum interval between updates in milliseconds (default: 500)\r\n */\r\nexport function useThrottle<T>(value: T, interval: number = 500): T {\r\n const [throttledValue, setThrottledValue] = useState<T>(value);\r\n const lastUpdated = useRef<number>(Date.now());\r\n\r\n useEffect(() => {\r\n const now = Date.now();\r\n const timeSinceLastUpdate = now - lastUpdated.current;\r\n\r\n if (timeSinceLastUpdate >= interval) {\r\n lastUpdated.current = now;\r\n setThrottledValue(value);\r\n return;\r\n } else {\r\n const timeoutId = setTimeout(() => {\r\n lastUpdated.current = Date.now();\r\n setThrottledValue(value);\r\n }, interval - timeSinceLastUpdate);\r\n\r\n return () => clearTimeout(timeoutId);\r\n }\r\n }, [value, interval]);\r\n\r\n return throttledValue;\r\n}\r\n\r\nexport default useThrottle;\r\n","/**\r\n * useTimeout Hook\r\n * Manages setTimeout with declarative API\r\n */\r\nimport { useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface UseTimeoutReturn {\r\n /** Reset the timeout */\r\n reset: () => void;\r\n /** Clear/cancel the timeout */\r\n clear: () => void;\r\n}\r\n\r\n/**\r\n * Hook to manage setTimeout declaratively\r\n * @param callback - Function to call after timeout\r\n * @param delay - Delay in milliseconds (null to disable)\r\n */\r\nexport function useTimeout(\r\n callback: () => void,\r\n delay: number | null\r\n): UseTimeoutReturn {\r\n const savedCallback = useRef<() => void>(callback);\r\n const timeoutId = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n const clear = useCallback(() => {\r\n if (timeoutId.current) {\r\n clearTimeout(timeoutId.current);\r\n timeoutId.current = null;\r\n }\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n clear();\r\n if (delay !== null) {\r\n timeoutId.current = setTimeout(() => {\r\n savedCallback.current();\r\n }, delay);\r\n }\r\n }, [delay, clear]);\r\n\r\n // Set up the timeout\r\n useEffect(() => {\r\n if (delay === null) {\r\n return;\r\n }\r\n\r\n timeoutId.current = setTimeout(() => {\r\n savedCallback.current();\r\n }, delay);\r\n\r\n return clear;\r\n }, [delay, clear]);\r\n\r\n return { reset, clear };\r\n}\r\n\r\nexport default useTimeout;\r\n","/**\r\n * useInterval Hook\r\n * Set up a recurring interval that properly cleans up\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Run a callback on an interval\r\n * @param callback - Function to call on each interval\r\n * @param delay - Interval delay in ms (null to pause)\r\n */\r\nexport function useInterval(callback: () => void, delay: number | null): void {\r\n const savedCallback = useRef(callback);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n // Set up the interval\r\n useEffect(() => {\r\n if (delay === null) {\r\n return;\r\n }\r\n\r\n const tick = () => savedCallback.current();\r\n const id = setInterval(tick, delay);\r\n\r\n return () => clearInterval(id);\r\n }, [delay]);\r\n}\r\n\r\nexport default useInterval;\r\n","/**\r\n * useIntervalWhen Hook\r\n * Runs interval only when condition is true\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook to run interval conditionally\r\n * @param callback - Function to call on each interval\r\n * @param delay - Interval delay in milliseconds\r\n * @param when - Condition to run the interval\r\n * @param immediate - Run callback immediately when condition becomes true\r\n */\r\nexport function useIntervalWhen(\r\n callback: () => void,\r\n delay: number,\r\n when: boolean,\r\n immediate: boolean = false\r\n): void {\r\n const savedCallback = useRef<() => void>(callback);\r\n const hasRunImmediate = useRef<boolean>(false);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n useEffect(() => {\r\n if (!when) {\r\n hasRunImmediate.current = false;\r\n return;\r\n }\r\n\r\n // Run immediately if requested and hasn't run yet\r\n if (immediate && !hasRunImmediate.current) {\r\n hasRunImmediate.current = true;\r\n savedCallback.current();\r\n }\r\n\r\n const id = setInterval(() => {\r\n savedCallback.current();\r\n }, delay);\r\n\r\n return () => clearInterval(id);\r\n }, [delay, when, immediate]);\r\n}\r\n\r\nexport default useIntervalWhen;\r\n","/**\r\n * useRandomInterval Hook\r\n * Runs callback at random intervals within min/max range\r\n */\r\nimport { useEffect, useRef, useCallback } from 'react';\r\n\r\n/**\r\n * Hook to run callback at random intervals\r\n * @param callback - Function to call on each interval\r\n * @param minDelay - Minimum delay in milliseconds\r\n * @param maxDelay - Maximum delay in milliseconds\r\n * @param enabled - Whether the interval is enabled (default: true)\r\n */\r\nexport function useRandomInterval(\r\n callback: () => void,\r\n minDelay: number,\r\n maxDelay: number,\r\n enabled: boolean = true\r\n): void {\r\n const savedCallback = useRef<() => void>(callback);\r\n const timeoutId = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n const getRandomDelay = useCallback(() => {\r\n return Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay;\r\n }, [minDelay, maxDelay]);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n return;\r\n }\r\n\r\n const tick = () => {\r\n savedCallback.current();\r\n timeoutId.current = setTimeout(tick, getRandomDelay());\r\n };\r\n\r\n timeoutId.current = setTimeout(tick, getRandomDelay());\r\n\r\n return () => {\r\n if (timeoutId.current) {\r\n clearTimeout(timeoutId.current);\r\n }\r\n };\r\n }, [enabled, getRandomDelay]);\r\n}\r\n\r\nexport default useRandomInterval;\r\n","/**\r\n * useCountdown Hook\r\n * Manages a countdown timer\r\n */\r\nimport { useState, useCallback, useRef, useEffect } from 'react';\r\n\r\nexport interface UseCountdownOptions {\r\n /** Interval in milliseconds (default: 1000) */\r\n interval?: number;\r\n /** Callback when countdown reaches zero */\r\n onComplete?: () => void;\r\n /** Auto-start the countdown (default: false) */\r\n autoStart?: boolean;\r\n}\r\n\r\nexport interface UseCountdownReturn {\r\n /** Current countdown value in milliseconds */\r\n count: number;\r\n /** Start the countdown */\r\n start: () => void;\r\n /** Pause the countdown */\r\n pause: () => void;\r\n /** Resume the countdown */\r\n resume: () => void;\r\n /** Reset to initial value */\r\n reset: (newCount?: number) => void;\r\n /** Is countdown running? */\r\n isRunning: boolean;\r\n /** Is countdown complete? */\r\n isComplete: boolean;\r\n /** Formatted time { days, hours, minutes, seconds } */\r\n formatted: {\r\n days: number;\r\n hours: number;\r\n minutes: number;\r\n seconds: number;\r\n };\r\n}\r\n\r\n/**\r\n * Hook to manage countdown timer\r\n * @param initialCount - Initial countdown value in milliseconds\r\n * @param options - Configuration options\r\n */\r\nexport function useCountdown(\r\n initialCount: number,\r\n options: UseCountdownOptions = {}\r\n): UseCountdownReturn {\r\n const { interval = 1000, onComplete, autoStart = false } = options;\r\n\r\n const [count, setCount] = useState<number>(initialCount);\r\n const [isRunning, setIsRunning] = useState<boolean>(autoStart);\r\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n const onCompleteRef = useRef(onComplete);\r\n\r\n // Update onComplete ref\r\n useEffect(() => {\r\n onCompleteRef.current = onComplete;\r\n }, [onComplete]);\r\n\r\n const isComplete = count <= 0;\r\n\r\n const clear = useCallback(() => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n intervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n const start = useCallback(() => {\r\n if (count <= 0) return;\r\n setIsRunning(true);\r\n }, [count]);\r\n\r\n const pause = useCallback(() => {\r\n setIsRunning(false);\r\n clear();\r\n }, [clear]);\r\n\r\n const resume = useCallback(() => {\r\n if (count > 0) {\r\n setIsRunning(true);\r\n }\r\n }, [count]);\r\n\r\n const reset = useCallback(\r\n (newCount?: number) => {\r\n clear();\r\n setCount(newCount ?? initialCount);\r\n setIsRunning(false);\r\n },\r\n [clear, initialCount]\r\n );\r\n\r\n // Handle countdown logic\r\n useEffect(() => {\r\n if (!isRunning || count <= 0) {\r\n clear();\r\n return;\r\n }\r\n\r\n intervalRef.current = setInterval(() => {\r\n setCount((prev) => {\r\n const newCount = prev - interval;\r\n if (newCount <= 0) {\r\n setIsRunning(false);\r\n onCompleteRef.current?.();\r\n return 0;\r\n }\r\n return newCount;\r\n });\r\n }, interval);\r\n\r\n return clear;\r\n }, [isRunning, interval, clear, count]);\r\n\r\n // Calculate formatted time\r\n const formatted = {\r\n days: Math.floor(count / (1000 * 60 * 60 * 24)),\r\n hours: Math.floor((count % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),\r\n minutes: Math.floor((count % (1000 * 60 * 60)) / (1000 * 60)),\r\n seconds: Math.floor((count % (1000 * 60)) / 1000),\r\n };\r\n\r\n return {\r\n count,\r\n start,\r\n pause,\r\n resume,\r\n reset,\r\n isRunning,\r\n isComplete,\r\n formatted,\r\n };\r\n}\r\n\r\nexport default useCountdown;\r\n","/**\r\n * useContinuousRetry Hook\r\n * Continuously retries a function until it succeeds or max attempts reached\r\n */\r\nimport { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface UseContinuousRetryOptions {\r\n /** Maximum number of retry attempts (default: Infinity) */\r\n maxAttempts?: number;\r\n /** Delay between retries in milliseconds (default: 1000) */\r\n delay?: number;\r\n /** Whether to use exponential backoff (default: false) */\r\n exponentialBackoff?: boolean;\r\n /** Maximum delay when using exponential backoff (default: 30000) */\r\n maxDelay?: number;\r\n /** Auto-start retrying (default: true) */\r\n autoStart?: boolean;\r\n}\r\n\r\nexport interface UseContinuousRetryReturn {\r\n /** Number of attempts made */\r\n attempts: number;\r\n /** Last error encountered */\r\n error: Error | null;\r\n /** Is currently retrying? */\r\n isRetrying: boolean;\r\n /** Has succeeded? */\r\n isSuccess: boolean;\r\n /** Has reached max attempts? */\r\n isMaxAttempts: boolean;\r\n /** Start/restart retrying */\r\n start: () => void;\r\n /** Stop retrying */\r\n stop: () => void;\r\n /** Reset state */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Hook to continuously retry a function until success\r\n * @param callback - Async function to retry (return true for success, false for retry)\r\n * @param options - Configuration options\r\n */\r\nexport function useContinuousRetry(\r\n callback: () => Promise<boolean> | boolean,\r\n options: UseContinuousRetryOptions = {}\r\n): UseContinuousRetryReturn {\r\n const {\r\n maxAttempts = Infinity,\r\n delay = 1000,\r\n exponentialBackoff = false,\r\n maxDelay = 30000,\r\n autoStart = true,\r\n } = options;\r\n\r\n const [attempts, setAttempts] = useState<number>(0);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [isRetrying, setIsRetrying] = useState<boolean>(autoStart);\r\n const [isSuccess, setIsSuccess] = useState<boolean>(false);\r\n\r\n const callbackRef = useRef(callback);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Update callback ref\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n }, [callback]);\r\n\r\n const isMaxAttempts = attempts >= maxAttempts;\r\n\r\n const calculateDelay = useCallback(\r\n (attempt: number) => {\r\n if (!exponentialBackoff) return delay;\r\n const exponentialDelay = delay * Math.pow(2, attempt);\r\n return Math.min(exponentialDelay, maxDelay);\r\n },\r\n [delay, exponentialBackoff, maxDelay]\r\n );\r\n\r\n const clear = useCallback(() => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = null;\r\n }\r\n }, []);\r\n\r\n const stop = useCallback(() => {\r\n clear();\r\n setIsRetrying(false);\r\n }, [clear]);\r\n\r\n const reset = useCallback(() => {\r\n clear();\r\n setAttempts(0);\r\n setError(null);\r\n setIsRetrying(false);\r\n setIsSuccess(false);\r\n }, [clear]);\r\n\r\n const start = useCallback(() => {\r\n reset();\r\n setIsRetrying(true);\r\n }, [reset]);\r\n\r\n // Retry logic\r\n useEffect(() => {\r\n if (!isRetrying || isSuccess || isMaxAttempts) {\r\n return;\r\n }\r\n\r\n const attemptCallback = async () => {\r\n try {\r\n setAttempts((prev) => prev + 1);\r\n const result = await callbackRef.current();\r\n\r\n if (result) {\r\n setIsSuccess(true);\r\n setIsRetrying(false);\r\n } else {\r\n // Schedule next retry\r\n const currentDelay = calculateDelay(attempts);\r\n timeoutRef.current = setTimeout(attemptCallback, currentDelay);\r\n }\r\n } catch (err) {\r\n setError(err instanceof Error ? err : new Error(String(err)));\r\n // Schedule next retry\r\n const currentDelay = calculateDelay(attempts);\r\n timeoutRef.current = setTimeout(attemptCallback, currentDelay);\r\n }\r\n };\r\n\r\n // Start first attempt\r\n if (attempts === 0) {\r\n attemptCallback();\r\n }\r\n\r\n return clear;\r\n }, [isRetrying, isSuccess, isMaxAttempts, attempts, calculateDelay, clear]);\r\n\r\n return {\r\n attempts,\r\n error,\r\n isRetrying,\r\n isSuccess,\r\n isMaxAttempts,\r\n start,\r\n stop,\r\n reset,\r\n };\r\n}\r\n\r\nexport default useContinuousRetry;\r\n","/**\r\n * useWindowSize Hook\r\n * Track window dimensions\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface WindowSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Track window dimensions with resize updates\r\n * @param debounceMs - Debounce resize events (default: 100ms)\r\n */\r\nexport function useWindowSize(debounceMs: number = 100): WindowSize {\r\n const getSize = (): WindowSize => ({\r\n width: typeof window !== 'undefined' ? window.innerWidth : 0,\r\n height: typeof window !== 'undefined' ? window.innerHeight : 0,\r\n });\r\n\r\n const [windowSize, setWindowSize] = useState<WindowSize>(getSize);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n let timeoutId: NodeJS.Timeout;\r\n\r\n const handleResize = () => {\r\n clearTimeout(timeoutId);\r\n timeoutId = setTimeout(() => {\r\n setWindowSize(getSize());\r\n }, debounceMs);\r\n };\r\n\r\n // Set initial size\r\n setWindowSize(getSize());\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, [debounceMs]);\r\n\r\n return windowSize;\r\n}\r\n\r\nexport default useWindowSize;\r\n","/**\r\n * useWindowScroll Hook\r\n * Tracks window scroll position\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport interface WindowScrollPosition {\r\n /** Horizontal scroll position */\r\n x: number;\r\n /** Vertical scroll position */\r\n y: number;\r\n /** Scroll direction (up, down, left, right, or null) */\r\n direction: 'up' | 'down' | 'left' | 'right' | null;\r\n /** Is scrolling? */\r\n isScrolling: boolean;\r\n}\r\n\r\nexport interface UseWindowScrollReturn extends WindowScrollPosition {\r\n /** Scroll to position */\r\n scrollTo: (options: ScrollToOptions) => void;\r\n /** Scroll to top */\r\n scrollToTop: (behavior?: ScrollBehavior) => void;\r\n /** Scroll to bottom */\r\n scrollToBottom: (behavior?: ScrollBehavior) => void;\r\n}\r\n\r\n/**\r\n * Hook to track and control window scroll position\r\n */\r\nexport function useWindowScroll(): UseWindowScrollReturn {\r\n const [scroll, setScroll] = useState<WindowScrollPosition>({\r\n x: typeof window !== 'undefined' ? window.scrollX : 0,\r\n y: typeof window !== 'undefined' ? window.scrollY : 0,\r\n direction: null,\r\n isScrolling: false,\r\n });\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n let prevX = window.scrollX;\r\n let prevY = window.scrollY;\r\n let scrollTimeout: ReturnType<typeof setTimeout>;\r\n\r\n const handleScroll = () => {\r\n const x = window.scrollX;\r\n const y = window.scrollY;\r\n\r\n let direction: 'up' | 'down' | 'left' | 'right' | null = null;\r\n if (y > prevY) direction = 'down';\r\n else if (y < prevY) direction = 'up';\r\n else if (x > prevX) direction = 'right';\r\n else if (x < prevX) direction = 'left';\r\n\r\n prevX = x;\r\n prevY = y;\r\n\r\n setScroll({ x, y, direction, isScrolling: true });\r\n\r\n // Reset isScrolling after scroll ends\r\n clearTimeout(scrollTimeout);\r\n scrollTimeout = setTimeout(() => {\r\n setScroll((prev) => ({ ...prev, isScrolling: false }));\r\n }, 150);\r\n };\r\n\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n\r\n return () => {\r\n window.removeEventListener('scroll', handleScroll);\r\n clearTimeout(scrollTimeout);\r\n };\r\n }, []);\r\n\r\n const scrollTo = useCallback((options: ScrollToOptions) => {\r\n if (typeof window !== 'undefined') {\r\n window.scrollTo(options);\r\n }\r\n }, []);\r\n\r\n const scrollToTop = useCallback((behavior: ScrollBehavior = 'smooth') => {\r\n if (typeof window !== 'undefined') {\r\n window.scrollTo({ top: 0, behavior });\r\n }\r\n }, []);\r\n\r\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'smooth') => {\r\n if (typeof window !== 'undefined') {\r\n window.scrollTo({\r\n top: document.documentElement.scrollHeight,\r\n behavior,\r\n });\r\n }\r\n }, []);\r\n\r\n return {\r\n ...scroll,\r\n scrollTo,\r\n scrollToTop,\r\n scrollToBottom,\r\n };\r\n}\r\n\r\nexport default useWindowScroll;\r\n","/**\r\n * useDocumentTitle Hook\r\n * Sets and manages document title\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport interface UseDocumentTitleOptions {\r\n /** Restore previous title on unmount (default: true) */\r\n restoreOnUnmount?: boolean;\r\n /** Title template, use %s for title placeholder */\r\n template?: string;\r\n}\r\n\r\n/**\r\n * Hook to set document title\r\n * @param title - Document title\r\n * @param options - Configuration options\r\n */\r\nexport function useDocumentTitle(\r\n title: string,\r\n options: UseDocumentTitleOptions = {}\r\n): void {\r\n const { restoreOnUnmount = true, template } = options;\r\n const previousTitle = useRef<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return;\r\n\r\n // Store previous title\r\n if (previousTitle.current === null) {\r\n previousTitle.current = document.title;\r\n }\r\n\r\n // Apply template if provided\r\n const finalTitle = template ? template.replace('%s', title) : title;\r\n document.title = finalTitle;\r\n\r\n return () => {\r\n if (restoreOnUnmount && previousTitle.current !== null) {\r\n document.title = previousTitle.current;\r\n }\r\n };\r\n }, [title, template, restoreOnUnmount]);\r\n}\r\n\r\nexport default useDocumentTitle;\r\n","/**\r\n * usePageTitle Hook\r\n * Dynamically set the document title\r\n */\r\nimport { useEffect } from 'react';\r\n\r\nexport interface UsePageTitleOptions {\r\n /** Suffix to append to the title (e.g., organization name) */\r\n suffix?: string;\r\n /** Separator between title and suffix (default: ' | ') */\r\n separator?: string;\r\n /** Whether to restore original title on unmount (default: true) */\r\n restoreOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Set the document title with optional suffix\r\n * @param title - Page title\r\n * @param options - Configuration options\r\n */\r\nexport function usePageTitle(title: string, options: UsePageTitleOptions = {}): void {\r\n const { suffix, separator = ' | ', restoreOnUnmount = true } = options;\r\n\r\n useEffect(() => {\r\n const originalTitle = document.title;\r\n const newTitle = suffix ? `${title}${separator}${suffix}` : title;\r\n document.title = newTitle;\r\n\r\n return () => {\r\n if (restoreOnUnmount) {\r\n document.title = originalTitle;\r\n }\r\n };\r\n }, [title, suffix, separator, restoreOnUnmount]);\r\n}\r\n\r\nexport default usePageTitle;\r\n","/**\r\n * useFavicon Hook\r\n * Dynamically changes the favicon\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook to dynamically change favicon\r\n * @param href - URL of the favicon image\r\n * @param restoreOnUnmount - Whether to restore original favicon on unmount (default: true)\r\n */\r\nexport function useFavicon(href: string, restoreOnUnmount: boolean = true): void {\r\n const originalHref = useRef<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return;\r\n\r\n const link: HTMLLinkElement =\r\n document.querySelector(\"link[rel*='icon']\") ||\r\n document.createElement('link');\r\n\r\n // Store original href\r\n if (originalHref.current === null) {\r\n originalHref.current = link.href;\r\n }\r\n\r\n link.type = 'image/x-icon';\r\n link.rel = 'shortcut icon';\r\n link.href = href;\r\n\r\n document.head.appendChild(link);\r\n\r\n return () => {\r\n if (restoreOnUnmount && originalHref.current) {\r\n link.href = originalHref.current;\r\n }\r\n };\r\n }, [href, restoreOnUnmount]);\r\n}\r\n\r\nexport default useFavicon;\r\n","/**\r\n * useVisibilityChange Hook\r\n * Tracks document visibility state\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport interface UseVisibilityChangeReturn {\r\n /** Is document visible? */\r\n isVisible: boolean;\r\n /** Visibility state ('visible', 'hidden', 'prerender') */\r\n visibilityState: DocumentVisibilityState;\r\n /** Time when visibility last changed */\r\n lastChanged: Date | null;\r\n}\r\n\r\n/**\r\n * Hook to track document visibility state\r\n * @param onVisibilityChange - Optional callback when visibility changes\r\n */\r\nexport function useVisibilityChange(\r\n onVisibilityChange?: (isVisible: boolean) => void\r\n): UseVisibilityChangeReturn {\r\n const [state, setState] = useState<UseVisibilityChangeReturn>(() => ({\r\n isVisible: typeof document !== 'undefined' ? !document.hidden : true,\r\n visibilityState:\r\n typeof document !== 'undefined' ? document.visibilityState : 'visible',\r\n lastChanged: null,\r\n }));\r\n\r\n const handleVisibilityChange = useCallback(() => {\r\n const isVisible = !document.hidden;\r\n const visibilityState = document.visibilityState;\r\n\r\n setState({\r\n isVisible,\r\n visibilityState,\r\n lastChanged: new Date(),\r\n });\r\n\r\n onVisibilityChange?.(isVisible);\r\n }, [onVisibilityChange]);\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return;\r\n\r\n document.addEventListener('visibilitychange', handleVisibilityChange);\r\n\r\n return () => {\r\n document.removeEventListener('visibilitychange', handleVisibilityChange);\r\n };\r\n }, [handleVisibilityChange]);\r\n\r\n return state;\r\n}\r\n\r\nexport default useVisibilityChange;\r\n","/**\r\n * usePageLeave Hook\r\n * Detects when user is about to leave the page\r\n */\r\nimport { useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface UsePageLeaveOptions {\r\n /** Show confirmation dialog on page leave (default: false) */\r\n showConfirmation?: boolean;\r\n /** Custom confirmation message (browser may override) */\r\n confirmationMessage?: string;\r\n}\r\n\r\n/**\r\n * Hook to detect when user is leaving the page\r\n * @param onLeave - Callback when user attempts to leave\r\n * @param options - Configuration options\r\n */\r\nexport function usePageLeave(\r\n onLeave?: () => void,\r\n options: UsePageLeaveOptions = {}\r\n): void {\r\n const { showConfirmation = false, confirmationMessage = '' } = options;\r\n const onLeaveRef = useRef(onLeave);\r\n\r\n // Update callback ref\r\n useEffect(() => {\r\n onLeaveRef.current = onLeave;\r\n }, [onLeave]);\r\n\r\n // Handle mouse leave (cursor leaves viewport)\r\n const handleMouseLeave = useCallback((e: MouseEvent) => {\r\n // Only trigger when mouse leaves from the top\r\n if (e.clientY <= 0) {\r\n onLeaveRef.current?.();\r\n }\r\n }, []);\r\n\r\n // Handle beforeunload (page close/refresh/navigate away)\r\n const handleBeforeUnload = useCallback(\r\n (e: BeforeUnloadEvent): string | void => {\r\n onLeaveRef.current?.();\r\n\r\n if (showConfirmation) {\r\n e.preventDefault();\r\n e.returnValue = confirmationMessage;\r\n return confirmationMessage;\r\n }\r\n },\r\n [showConfirmation, confirmationMessage]\r\n );\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n document.addEventListener('mouseleave', handleMouseLeave);\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n document.removeEventListener('mouseleave', handleMouseLeave);\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [handleMouseLeave, handleBeforeUnload]);\r\n}\r\n\r\nexport default usePageLeave;\r\n","/**\r\n * useLockBodyScroll Hook\r\n * Locks body scroll (useful for modals)\r\n */\r\nimport { useEffect } from 'react';\r\n\r\n/**\r\n * Hook to lock body scroll\r\n * @param locked - Whether scroll should be locked (default: true)\r\n */\r\nexport function useLockBodyScroll(locked: boolean = true): void {\r\n useEffect(() => {\r\n if (typeof document === 'undefined' || !locked) return;\r\n\r\n const originalStyle = window.getComputedStyle(document.body).overflow;\r\n const originalPaddingRight = window.getComputedStyle(document.body).paddingRight;\r\n \r\n // Calculate scrollbar width\r\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\r\n\r\n // Lock scroll\r\n document.body.style.overflow = 'hidden';\r\n \r\n // Prevent layout shift when scrollbar disappears\r\n if (scrollbarWidth > 0) {\r\n document.body.style.paddingRight = `${scrollbarWidth}px`;\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = originalStyle;\r\n document.body.style.paddingRight = originalPaddingRight;\r\n };\r\n }, [locked]);\r\n}\r\n\r\nexport default useLockBodyScroll;\r\n","/**\r\n * useIsClient Hook\r\n * Detects if code is running on client side\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Hook to check if rendering on client side\r\n * Useful for SSR/SSG environments\r\n */\r\nexport function useIsClient(): boolean {\r\n const [isClient, setIsClient] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n setIsClient(true);\r\n }, []);\r\n\r\n return isClient;\r\n}\r\n\r\nexport default useIsClient;\r\n","/**\r\n * useIsFirstRender Hook\r\n * Detects if it's the first render\r\n */\r\nimport { useRef } from 'react';\r\n\r\n/**\r\n * Hook to check if it's the first render\r\n */\r\nexport function useIsFirstRender(): boolean {\r\n const isFirst = useRef<boolean>(true);\r\n\r\n if (isFirst.current) {\r\n isFirst.current = false;\r\n return true;\r\n }\r\n\r\n return isFirst.current;\r\n}\r\n\r\nexport default useIsFirstRender;\r\n","/**\r\n * useEventListener Hook\r\n * Declarative event listener management\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\ntype EventMap = WindowEventMap & DocumentEventMap & HTMLElementEventMap;\r\n\r\n/**\r\n * Hook to attach event listeners declaratively\r\n * @param eventName - Name of the event to listen for\r\n * @param handler - Event handler function\r\n * @param element - Target element (default: window)\r\n * @param options - AddEventListener options\r\n */\r\nexport function useEventListener<K extends keyof EventMap>(\r\n eventName: K,\r\n handler: (event: EventMap[K]) => void,\r\n element?: HTMLElement | Window | Document | null,\r\n options?: boolean | AddEventListenerOptions\r\n): void {\r\n const savedHandler = useRef(handler);\r\n\r\n // Update ref when handler changes\r\n useEffect(() => {\r\n savedHandler.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n // Get target element\r\n const targetElement = element ?? (typeof window !== 'undefined' ? window : null);\r\n\r\n if (!targetElement?.addEventListener) {\r\n return;\r\n }\r\n\r\n const eventListener = (event: Event) => {\r\n savedHandler.current(event as EventMap[K]);\r\n };\r\n\r\n targetElement.addEventListener(eventName, eventListener, options);\r\n\r\n return () => {\r\n targetElement.removeEventListener(eventName, eventListener, options);\r\n };\r\n }, [eventName, element, options]);\r\n}\r\n\r\nexport default useEventListener;\r\n","/**\r\n * useKeyPress Hook\r\n * Detects when specific keys are pressed\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport interface UseKeyPressOptions {\r\n /** Target element (default: document) */\r\n target?: HTMLElement | Document | Window | null;\r\n /** Event type: 'keydown' | 'keyup' | 'keypress' */\r\n event?: 'keydown' | 'keyup' | 'keypress';\r\n /** Prevent default behavior */\r\n preventDefault?: boolean;\r\n /** Stop event propagation */\r\n stopPropagation?: boolean;\r\n}\r\n\r\nexport interface UseKeyPressReturn {\r\n /** Is the key currently pressed? */\r\n pressed: boolean;\r\n /** Event object from last press */\r\n event: KeyboardEvent | null;\r\n}\r\n\r\n/**\r\n * Hook to detect key press\r\n * @param targetKey - Key to detect (e.g., 'Enter', 'Escape', 'a')\r\n * @param callback - Optional callback when key is pressed\r\n * @param options - Configuration options\r\n */\r\nexport function useKeyPress(\r\n targetKey: string | string[],\r\n callback?: (event: KeyboardEvent) => void,\r\n options: UseKeyPressOptions = {}\r\n): UseKeyPressReturn {\r\n const {\r\n target,\r\n event: eventType = 'keydown',\r\n preventDefault = false,\r\n stopPropagation = false,\r\n } = options;\r\n\r\n const [pressed, setPressed] = useState<boolean>(false);\r\n const [event, setEvent] = useState<KeyboardEvent | null>(null);\r\n\r\n const keys = Array.isArray(targetKey) ? targetKey : [targetKey];\r\n\r\n const downHandler = useCallback(\r\n (e: KeyboardEvent) => {\r\n if (keys.includes(e.key)) {\r\n if (preventDefault) e.preventDefault();\r\n if (stopPropagation) e.stopPropagation();\r\n\r\n setPressed(true);\r\n setEvent(e);\r\n callback?.(e);\r\n }\r\n },\r\n [keys, callback, preventDefault, stopPropagation]\r\n );\r\n\r\n const upHandler = useCallback(\r\n (e: KeyboardEvent) => {\r\n if (keys.includes(e.key)) {\r\n setPressed(false);\r\n }\r\n },\r\n [keys]\r\n );\r\n\r\n useEffect(() => {\r\n const targetElement = target ?? (typeof document !== 'undefined' ? document : null);\r\n\r\n if (!targetElement) return;\r\n\r\n targetElement.addEventListener(eventType, downHandler as EventListener);\r\n targetElement.addEventListener('keyup', upHandler as EventListener);\r\n\r\n return () => {\r\n targetElement.removeEventListener(eventType, downHandler as EventListener);\r\n targetElement.removeEventListener('keyup', upHandler as EventListener);\r\n };\r\n }, [target, eventType, downHandler, upHandler]);\r\n\r\n return { pressed, event };\r\n}\r\n\r\nexport default useKeyPress;\r\n","/**\r\n * useHover Hook\r\n * Detects hover state on an element\r\n */\r\nimport { useState, useCallback, useRef } from 'react';\r\n\r\nexport interface UseHoverReturn<T extends HTMLElement = HTMLElement> {\r\n /** Ref to attach to the target element */\r\n ref: React.RefObject<T | null>;\r\n /** Is element being hovered? */\r\n isHovered: boolean;\r\n /** Bind props to spread on element */\r\n bind: {\r\n onMouseEnter: () => void;\r\n onMouseLeave: () => void;\r\n };\r\n}\r\n\r\n/**\r\n * Hook to detect hover state\r\n * @param onHoverChange - Optional callback when hover state changes\r\n */\r\nexport function useHover<T extends HTMLElement = HTMLElement>(\r\n onHoverChange?: (isHovered: boolean) => void\r\n): UseHoverReturn<T> {\r\n const [isHovered, setIsHovered] = useState<boolean>(false);\r\n const ref = useRef<T | null>(null);\r\n\r\n const onMouseEnter = useCallback(() => {\r\n setIsHovered(true);\r\n onHoverChange?.(true);\r\n }, [onHoverChange]);\r\n\r\n const onMouseLeave = useCallback(() => {\r\n setIsHovered(false);\r\n onHoverChange?.(false);\r\n }, [onHoverChange]);\r\n\r\n return {\r\n ref,\r\n isHovered,\r\n bind: {\r\n onMouseEnter,\r\n onMouseLeave,\r\n },\r\n };\r\n}\r\n\r\nexport default useHover;\r\n","/**\r\n * useClickAway Hook\r\n * Detects clicks outside of an element\r\n */\r\nimport { useEffect, useRef, useCallback } from 'react';\r\n\r\ntype EventType = 'mousedown' | 'mouseup' | 'touchstart' | 'touchend';\r\n\r\n/**\r\n * Hook to detect clicks outside of an element\r\n * @param callback - Function to call when click outside occurs\r\n * @param events - Event types to listen for (default: ['mousedown', 'touchstart'])\r\n */\r\nexport function useClickAway<T extends HTMLElement = HTMLElement>(\r\n callback: (event: MouseEvent | TouchEvent) => void,\r\n events: EventType[] = ['mousedown', 'touchstart']\r\n): React.RefObject<T | null> {\r\n const ref = useRef<T | null>(null);\r\n const savedCallback = useRef(callback);\r\n\r\n // Update callback ref\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n const handleClickAway = useCallback((event: MouseEvent | TouchEvent) => {\r\n const el = ref.current;\r\n if (!el || el.contains(event.target as Node)) {\r\n return;\r\n }\r\n savedCallback.current(event);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return;\r\n\r\n events.forEach((eventType) => {\r\n document.addEventListener(eventType, handleClickAway);\r\n });\r\n\r\n return () => {\r\n events.forEach((eventType) => {\r\n document.removeEventListener(eventType, handleClickAway);\r\n });\r\n };\r\n }, [events, handleClickAway]);\r\n\r\n return ref;\r\n}\r\n\r\nexport default useClickAway;\r\n","/**\r\n * useOnClickOutside Hook\r\n * Detect clicks outside of a referenced element\r\n */\r\nimport { useEffect, RefObject } from 'react';\r\n\r\ntype Handler = (event: MouseEvent | TouchEvent) => void;\r\n\r\n/**\r\n * Detect clicks outside of a referenced element\r\n * @param ref - React ref to the element\r\n * @param handler - Callback when click outside occurs\r\n * @param enabled - Whether the hook is enabled (default: true)\r\n */\r\nexport function useOnClickOutside<T extends HTMLElement = HTMLElement>(\r\n ref: RefObject<T>,\r\n handler: Handler,\r\n enabled: boolean = true\r\n): void {\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const listener = (event: MouseEvent | TouchEvent) => {\r\n const el = ref?.current;\r\n\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!el || el.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n document.addEventListener('mousedown', listener);\r\n document.addEventListener('touchstart', listener);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', listener);\r\n document.removeEventListener('touchstart', listener);\r\n };\r\n }, [ref, handler, enabled]);\r\n}\r\n\r\nexport default useOnClickOutside;\r\n","/**\r\n * useLongPress Hook\r\n * Detects long press on an element\r\n */\r\nimport { useState, useCallback, useRef } from 'react';\r\n\r\nexport interface UseLongPressOptions {\r\n /** Threshold in milliseconds (default: 400) */\r\n threshold?: number;\r\n /** Callback on long press */\r\n onLongPress?: (event: React.MouseEvent | React.TouchEvent) => void;\r\n /** Callback on regular click */\r\n onClick?: (event: React.MouseEvent | React.TouchEvent) => void;\r\n /** Callback when press starts */\r\n onStart?: (event: React.MouseEvent | React.TouchEvent) => void;\r\n /** Callback when press ends */\r\n onFinish?: (event: React.MouseEvent | React.TouchEvent) => void;\r\n /** Callback when press is cancelled */\r\n onCancel?: (event: React.MouseEvent | React.TouchEvent) => void;\r\n}\r\n\r\nexport interface UseLongPressReturn {\r\n /** Is currently pressing? */\r\n isPressed: boolean;\r\n /** Is long press achieved? */\r\n isLongPress: boolean;\r\n /** Bind props to spread on element */\r\n bind: {\r\n onMouseDown: (e: React.MouseEvent) => void;\r\n onMouseUp: (e: React.MouseEvent) => void;\r\n onMouseLeave: (e: React.MouseEvent) => void;\r\n onTouchStart: (e: React.TouchEvent) => void;\r\n onTouchEnd: (e: React.TouchEvent) => void;\r\n };\r\n}\r\n\r\n/**\r\n * Hook to detect long press gesture\r\n * @param options - Configuration options\r\n */\r\nexport function useLongPress(options: UseLongPressOptions = {}): UseLongPressReturn {\r\n const {\r\n threshold = 400,\r\n onLongPress,\r\n onClick,\r\n onStart,\r\n onFinish,\r\n onCancel,\r\n } = options;\r\n\r\n const [isPressed, setIsPressed] = useState<boolean>(false);\r\n const [isLongPress, setIsLongPress] = useState<boolean>(false);\r\n\r\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const isLongPressRef = useRef<boolean>(false);\r\n\r\n const start = useCallback(\r\n (event: React.MouseEvent | React.TouchEvent) => {\r\n setIsPressed(true);\r\n setIsLongPress(false);\r\n isLongPressRef.current = false;\r\n\r\n onStart?.(event);\r\n\r\n timerRef.current = setTimeout(() => {\r\n isLongPressRef.current = true;\r\n setIsLongPress(true);\r\n onLongPress?.(event);\r\n }, threshold);\r\n },\r\n [threshold, onLongPress, onStart]\r\n );\r\n\r\n const cancel = useCallback(\r\n (event: React.MouseEvent | React.TouchEvent) => {\r\n setIsPressed(false);\r\n\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n timerRef.current = null;\r\n }\r\n\r\n if (!isLongPressRef.current) {\r\n onCancel?.(event);\r\n }\r\n },\r\n [onCancel]\r\n );\r\n\r\n const end = useCallback(\r\n (event: React.MouseEvent | React.TouchEvent) => {\r\n setIsPressed(false);\r\n\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n timerRef.current = null;\r\n }\r\n\r\n if (isLongPressRef.current) {\r\n onFinish?.(event);\r\n } else {\r\n onClick?.(event);\r\n }\r\n },\r\n [onClick, onFinish]\r\n );\r\n\r\n return {\r\n isPressed,\r\n isLongPress,\r\n bind: {\r\n onMouseDown: start,\r\n onMouseUp: end,\r\n onMouseLeave: cancel,\r\n onTouchStart: start,\r\n onTouchEnd: end,\r\n },\r\n };\r\n}\r\n\r\nexport default useLongPress;\r\n","/**\r\n * useMouse Hook\r\n * Tracks mouse position\r\n */\r\nimport { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport interface MousePosition {\r\n /** X position relative to viewport */\r\n x: number;\r\n /** Y position relative to viewport */\r\n y: number;\r\n /** X position relative to page */\r\n pageX: number;\r\n /** Y position relative to page */\r\n pageY: number;\r\n /** X position relative to element (if ref provided) */\r\n elementX: number;\r\n /** Y position relative to element (if ref provided) */\r\n elementY: number;\r\n /** Is mouse within element bounds? */\r\n isInElement: boolean;\r\n}\r\n\r\nexport interface UseMouseOptions {\r\n /** Whether to track (default: true) */\r\n enabled?: boolean;\r\n}\r\n\r\nexport interface UseMouseReturn<T extends HTMLElement = HTMLElement> extends MousePosition {\r\n /** Ref to attach to element for relative positioning */\r\n ref: React.RefObject<T | null>;\r\n}\r\n\r\n/**\r\n * Hook to track mouse position\r\n * @param options - Configuration options\r\n */\r\nexport function useMouse<T extends HTMLElement = HTMLElement>(\r\n options: UseMouseOptions = {}\r\n): UseMouseReturn<T> {\r\n const { enabled = true } = options;\r\n const ref = useRef<T | null>(null);\r\n\r\n const [position, setPosition] = useState<MousePosition>({\r\n x: 0,\r\n y: 0,\r\n pageX: 0,\r\n pageY: 0,\r\n elementX: 0,\r\n elementY: 0,\r\n isInElement: false,\r\n });\r\n\r\n const handleMouseMove = useCallback((event: MouseEvent) => {\r\n let elementX = 0;\r\n let elementY = 0;\r\n let isInElement = false;\r\n\r\n if (ref.current) {\r\n const rect = ref.current.getBoundingClientRect();\r\n elementX = event.clientX - rect.left;\r\n elementY = event.clientY - rect.top;\r\n isInElement =\r\n elementX >= 0 &&\r\n elementX <= rect.width &&\r\n elementY >= 0 &&\r\n elementY <= rect.height;\r\n }\r\n\r\n setPosition({\r\n x: event.clientX,\r\n y: event.clientY,\r\n pageX: event.pageX,\r\n pageY: event.pageY,\r\n elementX,\r\n elementY,\r\n isInElement,\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!enabled || typeof window === 'undefined') return;\r\n\r\n window.addEventListener('mousemove', handleMouseMove);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n };\r\n }, [enabled, handleMouseMove]);\r\n\r\n return {\r\n ref,\r\n ...position,\r\n };\r\n}\r\n\r\nexport default useMouse;\r\n","/**\r\n * useCopyToClipboard Hook\r\n * Copy text to clipboard with status tracking\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport interface UseCopyToClipboardReturn {\r\n /** Copy text to clipboard */\r\n copy: (text: string) => Promise<boolean>;\r\n /** Whether copy was successful (resets after timeout) */\r\n copied: boolean;\r\n /** Error message if copy failed */\r\n error: string | null;\r\n /** Reset state */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Copy text to clipboard with feedback\r\n * @param resetDelay - Time in ms before copied state resets (default: 2000)\r\n */\r\nexport function useCopyToClipboard(resetDelay: number = 2000): UseCopyToClipboardReturn {\r\n const [copied, setCopied] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reset = useCallback(() => {\r\n setCopied(false);\r\n setError(null);\r\n }, []);\r\n\r\n const copy = useCallback(\r\n async (text: string): Promise<boolean> => {\r\n if (!navigator?.clipboard) {\r\n // Fallback for older browsers\r\n try {\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.style.position = 'fixed';\r\n textarea.style.left = '-999999px';\r\n textarea.style.top = '-999999px';\r\n document.body.appendChild(textarea);\r\n textarea.focus();\r\n textarea.select();\r\n\r\n const successful = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n\r\n if (successful) {\r\n setCopied(true);\r\n setError(null);\r\n setTimeout(reset, resetDelay);\r\n return true;\r\n } else {\r\n throw new Error('execCommand failed');\r\n }\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Failed to copy to clipboard';\r\n setError(message);\r\n setCopied(false);\r\n return false;\r\n }\r\n }\r\n\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setError(null);\r\n setTimeout(reset, resetDelay);\r\n return true;\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Failed to copy to clipboard';\r\n setError(message);\r\n setCopied(false);\r\n return false;\r\n }\r\n },\r\n [resetDelay, reset]\r\n );\r\n\r\n return { copy, copied, error, reset };\r\n}\r\n\r\nexport default useCopyToClipboard;\r\n","/**\r\n * useMediaQuery Hook\r\n * Track media query matches\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Track a media query match\r\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\r\n */\r\nexport function useMediaQuery(query: string): boolean {\r\n const getMatches = (query: string): boolean => {\r\n if (typeof window === 'undefined') return false;\r\n return window.matchMedia(query).matches;\r\n };\r\n\r\n const [matches, setMatches] = useState<boolean>(getMatches(query));\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const mediaQuery = window.matchMedia(query);\r\n const handleChange = () => setMatches(mediaQuery.matches);\r\n\r\n // Set initial value\r\n handleChange();\r\n\r\n mediaQuery.addEventListener('change', handleChange);\r\n return () => mediaQuery.removeEventListener('change', handleChange);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n\r\n// Preset breakpoint hooks\r\nexport const useIsMobile = () => useMediaQuery('(max-width: 767px)');\r\nexport const useIsTablet = () => useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\r\nexport const useIsDesktop = () => useMediaQuery('(min-width: 1024px)');\r\nexport const useIsMobileOrTablet = () => useMediaQuery('(max-width: 1023px)');\r\n\r\nexport default useMediaQuery;\r\n","/**\r\n * useOrientation Hook\r\n * Tracks device orientation\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface OrientationState {\r\n /** Device orientation angle */\r\n angle: number;\r\n /** Orientation type */\r\n type: OrientationType;\r\n /** Is portrait? */\r\n isPortrait: boolean;\r\n /** Is landscape? */\r\n isLandscape: boolean;\r\n}\r\n\r\n/**\r\n * Hook to track device/screen orientation\r\n */\r\nexport function useOrientation(): OrientationState {\r\n const getOrientation = (): OrientationState => {\r\n if (typeof window === 'undefined' || !window.screen?.orientation) {\r\n return {\r\n angle: 0,\r\n type: 'portrait-primary',\r\n isPortrait: true,\r\n isLandscape: false,\r\n };\r\n }\r\n\r\n const { angle, type } = window.screen.orientation;\r\n const isPortrait = type.includes('portrait');\r\n const isLandscape = type.includes('landscape');\r\n\r\n return { angle, type, isPortrait, isLandscape };\r\n };\r\n\r\n const [orientation, setOrientation] = useState<OrientationState>(getOrientation);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const handleOrientationChange = () => {\r\n setOrientation(getOrientation());\r\n };\r\n\r\n // Modern API\r\n if (window.screen?.orientation) {\r\n window.screen.orientation.addEventListener('change', handleOrientationChange);\r\n }\r\n\r\n // Fallback for older browsers\r\n window.addEventListener('orientationchange', handleOrientationChange);\r\n window.addEventListener('resize', handleOrientationChange);\r\n\r\n return () => {\r\n if (window.screen?.orientation) {\r\n window.screen.orientation.removeEventListener('change', handleOrientationChange);\r\n }\r\n window.removeEventListener('orientationchange', handleOrientationChange);\r\n window.removeEventListener('resize', handleOrientationChange);\r\n };\r\n }, []);\r\n\r\n return orientation;\r\n}\r\n\r\nexport default useOrientation;\r\n","/**\r\n * useBattery Hook\r\n * Tracks device battery status\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface BatteryState {\r\n /** Is battery API supported? */\r\n isSupported: boolean;\r\n /** Is device charging? */\r\n charging: boolean;\r\n /** Time until fully charged (seconds), Infinity if not charging */\r\n chargingTime: number;\r\n /** Time until discharged (seconds), Infinity if charging */\r\n dischargingTime: number;\r\n /** Battery level (0 to 1) */\r\n level: number;\r\n /** Battery percentage (0 to 100) */\r\n percentage: number;\r\n}\r\n\r\ninterface BatteryManager extends EventTarget {\r\n charging: boolean;\r\n chargingTime: number;\r\n dischargingTime: number;\r\n level: number;\r\n}\r\n\r\ninterface NavigatorWithBattery extends Navigator {\r\n getBattery?: () => Promise<BatteryManager>;\r\n}\r\n\r\n/**\r\n * Hook to track battery status\r\n */\r\nexport function useBattery(): BatteryState {\r\n const [battery, setBattery] = useState<BatteryState>({\r\n isSupported: false,\r\n charging: false,\r\n chargingTime: Infinity,\r\n dischargingTime: Infinity,\r\n level: 1,\r\n percentage: 100,\r\n });\r\n\r\n useEffect(() => {\r\n if (typeof navigator === 'undefined') return;\r\n\r\n const nav = navigator as NavigatorWithBattery;\r\n\r\n if (!nav.getBattery) {\r\n setBattery((prev) => ({ ...prev, isSupported: false }));\r\n return;\r\n }\r\n\r\n let batteryManager: BatteryManager | null = null;\r\n\r\n const updateBattery = (battery: BatteryManager) => {\r\n setBattery({\r\n isSupported: true,\r\n charging: battery.charging,\r\n chargingTime: battery.chargingTime,\r\n dischargingTime: battery.dischargingTime,\r\n level: battery.level,\r\n percentage: Math.round(battery.level * 100),\r\n });\r\n };\r\n\r\n const handleChange = () => {\r\n if (batteryManager) {\r\n updateBattery(batteryManager);\r\n }\r\n };\r\n\r\n nav.getBattery().then((battery) => {\r\n batteryManager = battery;\r\n updateBattery(battery);\r\n\r\n battery.addEventListener('chargingchange', handleChange);\r\n battery.addEventListener('chargingtimechange', handleChange);\r\n battery.addEventListener('dischargingtimechange', handleChange);\r\n battery.addEventListener('levelchange', handleChange);\r\n });\r\n\r\n return () => {\r\n if (batteryManager) {\r\n batteryManager.removeEventListener('chargingchange', handleChange);\r\n batteryManager.removeEventListener('chargingtimechange', handleChange);\r\n batteryManager.removeEventListener('dischargingtimechange', handleChange);\r\n batteryManager.removeEventListener('levelchange', handleChange);\r\n }\r\n };\r\n }, []);\r\n\r\n return battery;\r\n}\r\n\r\nexport default useBattery;\r\n","/**\r\n * useNetworkState Hook\r\n * Tracks network/connection status\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface NetworkState {\r\n /** Is online? */\r\n online: boolean;\r\n /** Is offline? */\r\n offline: boolean;\r\n /** Connection downlink speed (Mbps) */\r\n downlink?: number;\r\n /** Effective connection type */\r\n effectiveType?: 'slow-2g' | '2g' | '3g' | '4g';\r\n /** Round-trip time (ms) */\r\n rtt?: number;\r\n /** Is data saver enabled? */\r\n saveData?: boolean;\r\n /** Connection type */\r\n type?: string;\r\n /** Time when status last changed */\r\n since?: Date;\r\n}\r\n\r\ninterface NetworkInformation extends EventTarget {\r\n downlink?: number;\r\n effectiveType?: 'slow-2g' | '2g' | '3g' | '4g';\r\n rtt?: number;\r\n saveData?: boolean;\r\n type?: string;\r\n}\r\n\r\ninterface NavigatorWithConnection extends Navigator {\r\n connection?: NetworkInformation;\r\n mozConnection?: NetworkInformation;\r\n webkitConnection?: NetworkInformation;\r\n}\r\n\r\n/**\r\n * Hook to track network status\r\n */\r\nexport function useNetworkState(): NetworkState {\r\n const getConnection = (): NetworkInformation | undefined => {\r\n if (typeof navigator === 'undefined') return undefined;\r\n const nav = navigator as NavigatorWithConnection;\r\n return nav.connection || nav.mozConnection || nav.webkitConnection;\r\n };\r\n\r\n const getNetworkState = (): NetworkState => {\r\n const online = typeof navigator !== 'undefined' ? navigator.onLine : true;\r\n const connection = getConnection();\r\n\r\n return {\r\n online,\r\n offline: !online,\r\n downlink: connection?.downlink,\r\n effectiveType: connection?.effectiveType,\r\n rtt: connection?.rtt,\r\n saveData: connection?.saveData,\r\n type: connection?.type,\r\n since: new Date(),\r\n };\r\n };\r\n\r\n const [state, setState] = useState<NetworkState>(getNetworkState);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const handleOnline = () => {\r\n setState((prev) => ({ ...prev, online: true, offline: false, since: new Date() }));\r\n };\r\n\r\n const handleOffline = () => {\r\n setState((prev) => ({ ...prev, online: false, offline: true, since: new Date() }));\r\n };\r\n\r\n const handleConnectionChange = () => {\r\n setState(getNetworkState());\r\n };\r\n\r\n window.addEventListener('online', handleOnline);\r\n window.addEventListener('offline', handleOffline);\r\n\r\n const connection = getConnection();\r\n if (connection) {\r\n connection.addEventListener('change', handleConnectionChange);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('online', handleOnline);\r\n window.removeEventListener('offline', handleOffline);\r\n\r\n if (connection) {\r\n connection.removeEventListener('change', handleConnectionChange);\r\n }\r\n };\r\n }, []);\r\n\r\n return state;\r\n}\r\n\r\nexport default useNetworkState;\r\n","/**\r\n * useIdle Hook\r\n * Detects user idle state\r\n */\r\nimport { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport interface UseIdleOptions {\r\n /** Idle timeout in milliseconds (default: 60000 = 1 minute) */\r\n timeout?: number;\r\n /** Events to consider as activity */\r\n events?: string[];\r\n /** Initial idle state */\r\n initialState?: boolean;\r\n /** Callback when user becomes idle */\r\n onIdle?: () => void;\r\n /** Callback when user becomes active */\r\n onActive?: () => void;\r\n}\r\n\r\nexport interface UseIdleReturn {\r\n /** Is user idle? */\r\n isIdle: boolean;\r\n /** Last active timestamp */\r\n lastActive: Date;\r\n /** Reset idle timer */\r\n reset: () => void;\r\n /** Start tracking */\r\n start: () => void;\r\n /** Stop tracking */\r\n stop: () => void;\r\n}\r\n\r\nconst DEFAULT_EVENTS = [\r\n 'mousemove',\r\n 'mousedown',\r\n 'keydown',\r\n 'touchstart',\r\n 'scroll',\r\n 'wheel',\r\n];\r\n\r\n/**\r\n * Hook to detect user idle state\r\n * @param options - Configuration options\r\n */\r\nexport function useIdle(options: UseIdleOptions = {}): UseIdleReturn {\r\n const {\r\n timeout = 60000,\r\n events = DEFAULT_EVENTS,\r\n initialState = false,\r\n onIdle,\r\n onActive,\r\n } = options;\r\n\r\n const [isIdle, setIsIdle] = useState<boolean>(initialState);\r\n const [lastActive, setLastActive] = useState<Date>(new Date());\r\n const [isTracking, setIsTracking] = useState<boolean>(true);\r\n\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const onIdleRef = useRef(onIdle);\r\n const onActiveRef = useRef(onActive);\r\n\r\n // Update callback refs\r\n useEffect(() => {\r\n onIdleRef.current = onIdle;\r\n onActiveRef.current = onActive;\r\n }, [onIdle, onActive]);\r\n\r\n const handleActivity = useCallback(() => {\r\n if (!isTracking) return;\r\n\r\n setLastActive(new Date());\r\n\r\n if (isIdle) {\r\n setIsIdle(false);\r\n onActiveRef.current?.();\r\n }\r\n\r\n // Clear existing timeout\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n\r\n // Set new timeout\r\n timeoutRef.current = setTimeout(() => {\r\n setIsIdle(true);\r\n onIdleRef.current?.();\r\n }, timeout);\r\n }, [isIdle, isTracking, timeout]);\r\n\r\n const reset = useCallback(() => {\r\n handleActivity();\r\n }, [handleActivity]);\r\n\r\n const start = useCallback(() => {\r\n setIsTracking(true);\r\n handleActivity();\r\n }, [handleActivity]);\r\n\r\n const stop = useCallback(() => {\r\n setIsTracking(false);\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = null;\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined' || !isTracking) return;\r\n\r\n // Initial timeout\r\n timeoutRef.current = setTimeout(() => {\r\n setIsIdle(true);\r\n onIdleRef.current?.();\r\n }, timeout);\r\n\r\n // Add event listeners\r\n events.forEach((event) => {\r\n window.addEventListener(event, handleActivity, { passive: true });\r\n });\r\n\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n events.forEach((event) => {\r\n window.removeEventListener(event, handleActivity);\r\n });\r\n };\r\n }, [events, handleActivity, isTracking, timeout]);\r\n\r\n return {\r\n isIdle,\r\n lastActive,\r\n reset,\r\n start,\r\n stop,\r\n };\r\n}\r\n\r\nexport default useIdle;\r\n","/**\r\n * useGeolocation Hook\r\n * Tracks user geolocation\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport interface GeolocationState {\r\n /** Is loading? */\r\n loading: boolean;\r\n /** Error message */\r\n error: string | null;\r\n /** Latitude */\r\n latitude: number | null;\r\n /** Longitude */\r\n longitude: number | null;\r\n /** Accuracy in meters */\r\n accuracy: number | null;\r\n /** Altitude in meters */\r\n altitude: number | null;\r\n /** Altitude accuracy in meters */\r\n altitudeAccuracy: number | null;\r\n /** Heading in degrees */\r\n heading: number | null;\r\n /** Speed in m/s */\r\n speed: number | null;\r\n /** Timestamp */\r\n timestamp: number | null;\r\n}\r\n\r\nexport interface UseGeolocationOptions {\r\n /** Enable high accuracy mode */\r\n enableHighAccuracy?: boolean;\r\n /** Maximum age of cached position (ms) */\r\n maximumAge?: number;\r\n /** Timeout for getting position (ms) */\r\n timeout?: number;\r\n /** Watch position continuously */\r\n watch?: boolean;\r\n}\r\n\r\nexport interface UseGeolocationReturn extends GeolocationState {\r\n /** Refresh position */\r\n refresh: () => void;\r\n /** Is geolocation supported? */\r\n isSupported: boolean;\r\n}\r\n\r\n/**\r\n * Hook to track geolocation\r\n * @param options - Configuration options\r\n */\r\nexport function useGeolocation(\r\n options: UseGeolocationOptions = {}\r\n): UseGeolocationReturn {\r\n const {\r\n enableHighAccuracy = false,\r\n maximumAge = 0,\r\n timeout = Infinity,\r\n watch = false,\r\n } = options;\r\n\r\n const isSupported = typeof navigator !== 'undefined' && 'geolocation' in navigator;\r\n\r\n const [state, setState] = useState<GeolocationState>({\r\n loading: true,\r\n error: null,\r\n latitude: null,\r\n longitude: null,\r\n accuracy: null,\r\n altitude: null,\r\n altitudeAccuracy: null,\r\n heading: null,\r\n speed: null,\r\n timestamp: null,\r\n });\r\n\r\n const handleSuccess = useCallback((position: GeolocationPosition) => {\r\n setState({\r\n loading: false,\r\n error: null,\r\n latitude: position.coords.latitude,\r\n longitude: position.coords.longitude,\r\n accuracy: position.coords.accuracy,\r\n altitude: position.coords.altitude,\r\n altitudeAccuracy: position.coords.altitudeAccuracy,\r\n heading: position.coords.heading,\r\n speed: position.coords.speed,\r\n timestamp: position.timestamp,\r\n });\r\n }, []);\r\n\r\n const handleError = useCallback((error: GeolocationPositionError) => {\r\n setState((prev) => ({\r\n ...prev,\r\n loading: false,\r\n error: error.message,\r\n }));\r\n }, []);\r\n\r\n const refresh = useCallback(() => {\r\n if (!isSupported) return;\r\n\r\n setState((prev) => ({ ...prev, loading: true }));\r\n\r\n navigator.geolocation.getCurrentPosition(handleSuccess, handleError, {\r\n enableHighAccuracy,\r\n maximumAge,\r\n timeout,\r\n });\r\n }, [isSupported, enableHighAccuracy, maximumAge, timeout, handleSuccess, handleError]);\r\n\r\n useEffect(() => {\r\n if (!isSupported) {\r\n setState((prev) => ({\r\n ...prev,\r\n loading: false,\r\n error: 'Geolocation is not supported',\r\n }));\r\n return;\r\n }\r\n\r\n const positionOptions: PositionOptions = {\r\n enableHighAccuracy,\r\n maximumAge,\r\n timeout,\r\n };\r\n\r\n // Get initial position\r\n navigator.geolocation.getCurrentPosition(\r\n handleSuccess,\r\n handleError,\r\n positionOptions\r\n );\r\n\r\n // Watch position if enabled\r\n let watchId: number | null = null;\r\n if (watch) {\r\n watchId = navigator.geolocation.watchPosition(\r\n handleSuccess,\r\n handleError,\r\n positionOptions\r\n );\r\n }\r\n\r\n return () => {\r\n if (watchId !== null) {\r\n navigator.geolocation.clearWatch(watchId);\r\n }\r\n };\r\n }, [isSupported, enableHighAccuracy, maximumAge, timeout, watch, handleSuccess, handleError]);\r\n\r\n return {\r\n ...state,\r\n refresh,\r\n isSupported,\r\n };\r\n}\r\n\r\nexport default useGeolocation;\r\n","/**\r\n * usePreferredLanguage Hook\r\n * Gets user's preferred language\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface UsePreferredLanguageReturn {\r\n /** Primary preferred language */\r\n language: string;\r\n /** All preferred languages */\r\n languages: readonly string[];\r\n}\r\n\r\n/**\r\n * Hook to get user's preferred language\r\n */\r\nexport function usePreferredLanguage(): UsePreferredLanguageReturn {\r\n const getLanguageState = (): UsePreferredLanguageReturn => {\r\n if (typeof navigator === 'undefined') {\r\n return { language: 'en', languages: ['en'] };\r\n }\r\n\r\n return {\r\n language: navigator.language || 'en',\r\n languages: navigator.languages || [navigator.language || 'en'],\r\n };\r\n };\r\n\r\n const [state, setState] = useState<UsePreferredLanguageReturn>(getLanguageState);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const handleLanguageChange = () => {\r\n setState(getLanguageState());\r\n };\r\n\r\n window.addEventListener('languagechange', handleLanguageChange);\r\n\r\n return () => {\r\n window.removeEventListener('languagechange', handleLanguageChange);\r\n };\r\n }, []);\r\n\r\n return state;\r\n}\r\n\r\nexport default usePreferredLanguage;\r\n","/**\r\n * useThemeDetector Hook\r\n * Detect system color scheme (light/dark mode)\r\n */\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport type ThemeMode = 'light' | 'dark';\r\n\r\n/**\r\n * Detect and track system color scheme preference\r\n * @returns Current theme mode based on system preference\r\n */\r\nexport function useThemeDetector(): ThemeMode {\r\n const getCurrentTheme = (): ThemeMode => {\r\n if (typeof window === 'undefined') return 'light';\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n };\r\n\r\n const [theme, setTheme] = useState<ThemeMode>(getCurrentTheme);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setTheme(e.matches ? 'dark' : 'light');\r\n };\r\n\r\n mediaQuery.addEventListener('change', handleChange);\r\n return () => mediaQuery.removeEventListener('change', handleChange);\r\n }, []);\r\n\r\n return theme;\r\n}\r\n\r\nexport default useThemeDetector;\r\n","/**\r\n * useLocalStorage Hook\r\n * Syncs state with localStorage, supports cross-tab synchronization\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport type SetValue<T> = T | ((prevValue: T) => T);\r\n\r\nexport interface UseLocalStorageOptions<T> {\r\n /** Serialize function (default: JSON.stringify) */\r\n serializer?: (value: T) => string;\r\n /** Deserialize function (default: JSON.parse) */\r\n deserializer?: (value: string) => T;\r\n /** Enable cross-tab synchronization (default: true) */\r\n syncTabs?: boolean;\r\n /** Enable logging (default: false) */\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * Hook to persist state in localStorage with cross-tab sync\r\n * @param key - localStorage key\r\n * @param initialValue - initial/fallback value\r\n * @param options - configuration options\r\n */\r\nexport function useLocalStorage<T>(\r\n key: string,\r\n initialValue: T,\r\n options: UseLocalStorageOptions<T> = {}\r\n): [T, (value: SetValue<T>) => void, () => void] {\r\n const {\r\n serializer = JSON.stringify,\r\n deserializer = JSON.parse,\r\n syncTabs = true,\r\n debug = false,\r\n } = options;\r\n\r\n const log = useCallback(\r\n (...args: unknown[]) => {\r\n if (debug) console.log(`[useLocalStorage:${key}]`, ...args);\r\n },\r\n [debug, key]\r\n );\r\n\r\n // Get initial value from localStorage or use initialValue\r\n const readValue = useCallback((): T => {\r\n if (typeof window === 'undefined') {\r\n return initialValue;\r\n }\r\n\r\n try {\r\n const item = window.localStorage.getItem(key);\r\n if (item === null) {\r\n return initialValue;\r\n }\r\n const parsed = deserializer(item);\r\n log('Read value:', parsed);\r\n return parsed;\r\n } catch (error) {\r\n console.warn(`Error reading localStorage key \"${key}\":`, error);\r\n return initialValue;\r\n }\r\n }, [key, initialValue, deserializer, log]);\r\n\r\n const [storedValue, setStoredValue] = useState<T>(readValue);\r\n\r\n // Return a wrapped version of useState's setter function\r\n const setValue = useCallback(\r\n (value: SetValue<T>) => {\r\n if (typeof window === 'undefined') {\r\n console.warn(`Cannot set localStorage key \"${key}\" in non-browser environment`);\r\n return;\r\n }\r\n\r\n try {\r\n // Allow value to be a function (same API as useState)\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n\r\n setStoredValue(valueToStore);\r\n window.localStorage.setItem(key, serializer(valueToStore));\r\n log('Set value:', valueToStore);\r\n\r\n // Dispatch storage event for cross-tab sync (same tab doesn't receive storage events)\r\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: serializer(valueToStore) }));\r\n } catch (error) {\r\n console.warn(`Error setting localStorage key \"${key}\":`, error);\r\n }\r\n },\r\n [key, storedValue, serializer, log]\r\n );\r\n\r\n // Remove value from localStorage\r\n const removeValue = useCallback(() => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n try {\r\n window.localStorage.removeItem(key);\r\n setStoredValue(initialValue);\r\n log('Removed value');\r\n\r\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: null }));\r\n } catch (error) {\r\n console.warn(`Error removing localStorage key \"${key}\":`, error);\r\n }\r\n }, [key, initialValue, log]);\r\n\r\n // Cross-tab synchronization\r\n useEffect(() => {\r\n if (!syncTabs || typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n const handleStorageChange = (event: StorageEvent) => {\r\n if (event.key !== key) {\r\n return;\r\n }\r\n\r\n log('Storage event received:', event.newValue);\r\n\r\n if (event.newValue === null) {\r\n setStoredValue(initialValue);\r\n } else {\r\n try {\r\n setStoredValue(deserializer(event.newValue));\r\n } catch {\r\n console.warn(`Error parsing localStorage change for key \"${key}\"`);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener('storage', handleStorageChange);\r\n return () => window.removeEventListener('storage', handleStorageChange);\r\n }, [key, initialValue, syncTabs, deserializer, log]);\r\n\r\n return [storedValue, setValue, removeValue];\r\n}\r\n\r\nexport default useLocalStorage;\r\n","/**\r\n * useSessionStorage Hook\r\n * Syncs state with sessionStorage\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport type { SetValue } from './useLocalStorage';\r\n\r\nexport interface UseSessionStorageOptions<T> {\r\n /** Serialize function (default: JSON.stringify) */\r\n serializer?: (value: T) => string;\r\n /** Deserialize function (default: JSON.parse) */\r\n deserializer?: (value: string) => T;\r\n /** Enable logging (default: false) */\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * Hook to persist state in sessionStorage\r\n * @param key - sessionStorage key\r\n * @param initialValue - initial/fallback value\r\n * @param options - configuration options\r\n */\r\nexport function useSessionStorage<T>(\r\n key: string,\r\n initialValue: T,\r\n options: UseSessionStorageOptions<T> = {}\r\n): [T, (value: SetValue<T>) => void, () => void] {\r\n const {\r\n serializer = JSON.stringify,\r\n deserializer = JSON.parse,\r\n debug = false,\r\n } = options;\r\n\r\n const log = useCallback(\r\n (...args: unknown[]) => {\r\n if (debug) console.log(`[useSessionStorage:${key}]`, ...args);\r\n },\r\n [debug, key]\r\n );\r\n\r\n // Get initial value from sessionStorage or use initialValue\r\n const readValue = useCallback((): T => {\r\n if (typeof window === 'undefined') {\r\n return initialValue;\r\n }\r\n\r\n try {\r\n const item = window.sessionStorage.getItem(key);\r\n if (item === null) {\r\n return initialValue;\r\n }\r\n const parsed = deserializer(item);\r\n log('Read value:', parsed);\r\n return parsed;\r\n } catch (error) {\r\n console.warn(`Error reading sessionStorage key \"${key}\":`, error);\r\n return initialValue;\r\n }\r\n }, [key, initialValue, deserializer, log]);\r\n\r\n const [storedValue, setStoredValue] = useState<T>(readValue);\r\n\r\n // Return a wrapped version of useState's setter function\r\n const setValue = useCallback(\r\n (value: SetValue<T>) => {\r\n if (typeof window === 'undefined') {\r\n console.warn(`Cannot set sessionStorage key \"${key}\" in non-browser environment`);\r\n return;\r\n }\r\n\r\n try {\r\n // Allow value to be a function (same API as useState)\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n\r\n setStoredValue(valueToStore);\r\n window.sessionStorage.setItem(key, serializer(valueToStore));\r\n log('Set value:', valueToStore);\r\n } catch (error) {\r\n console.warn(`Error setting sessionStorage key \"${key}\":`, error);\r\n }\r\n },\r\n [key, storedValue, serializer, log]\r\n );\r\n\r\n // Remove value from sessionStorage\r\n const removeValue = useCallback(() => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n try {\r\n window.sessionStorage.removeItem(key);\r\n setStoredValue(initialValue);\r\n log('Removed value');\r\n } catch (error) {\r\n console.warn(`Error removing sessionStorage key \"${key}\":`, error);\r\n }\r\n }, [key, initialValue, log]);\r\n\r\n // Handle storage events (for cross-tab in same session - rare but possible)\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const handleStorageChange = (e: StorageEvent) => {\r\n if (e.storageArea !== sessionStorage || e.key !== key) {\r\n return;\r\n }\r\n\r\n try {\r\n if (e.newValue === null) {\r\n setStoredValue(initialValue);\r\n } else {\r\n setStoredValue(deserializer(e.newValue));\r\n }\r\n } catch (error) {\r\n console.warn(`Error handling storage event for key \"${key}\":`, error);\r\n }\r\n };\r\n\r\n window.addEventListener('storage', handleStorageChange);\r\n\r\n return () => {\r\n window.removeEventListener('storage', handleStorageChange);\r\n };\r\n }, [key, initialValue, deserializer]);\r\n\r\n return [storedValue, setValue, removeValue];\r\n}\r\n\r\nexport default useSessionStorage;\r\n","/**\r\n * useFetch Hook\r\n * Data fetching with loading and error states\r\n */\r\nimport { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport interface UseFetchOptions<T> extends Omit<RequestInit, 'body'> {\r\n /** Request body (will be JSON.stringify'd if object) */\r\n body?: BodyInit | object | null;\r\n /** Skip initial fetch */\r\n skip?: boolean;\r\n /** Transform response data */\r\n transform?: (data: unknown) => T;\r\n /** Retry count on failure */\r\n retries?: number;\r\n /** Retry delay in ms */\r\n retryDelay?: number;\r\n /** Cache key (default: url) */\r\n cacheKey?: string;\r\n /** Cache time in ms */\r\n cacheTime?: number;\r\n /** Callback on success */\r\n onSuccess?: (data: T) => void;\r\n /** Callback on error */\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseFetchReturn<T> {\r\n /** Response data */\r\n data: T | null;\r\n /** Is loading? */\r\n loading: boolean;\r\n /** Error */\r\n error: Error | null;\r\n /** Refetch data */\r\n refetch: () => Promise<T | null>;\r\n /** Abort current request */\r\n abort: () => void;\r\n /** Is fetching? (includes refetch) */\r\n isFetching: boolean;\r\n /** HTTP status code */\r\n status: number | null;\r\n}\r\n\r\n// Simple in-memory cache\r\nconst cache = new Map<string, { data: unknown; timestamp: number }>();\r\n\r\n/**\r\n * Hook for data fetching with caching and retry support\r\n * @param url - URL to fetch\r\n * @param options - Fetch options\r\n */\r\nexport function useFetch<T = unknown>(\r\n url: string | null,\r\n options: UseFetchOptions<T> = {}\r\n): UseFetchReturn<T> {\r\n const {\r\n skip = false,\r\n transform,\r\n retries = 0,\r\n retryDelay = 1000,\r\n cacheKey,\r\n cacheTime = 0,\r\n onSuccess,\r\n onError,\r\n body,\r\n ...fetchOptions\r\n } = options;\r\n\r\n const [data, setData] = useState<T | null>(null);\r\n const [loading, setLoading] = useState<boolean>(!skip && !!url);\r\n const [isFetching, setIsFetching] = useState<boolean>(!skip && !!url);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [status, setStatus] = useState<number | null>(null);\r\n\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n const retriesRef = useRef<number>(0);\r\n\r\n const fetchData = useCallback(async (): Promise<T | null> => {\r\n if (!url) return null;\r\n\r\n // Check cache\r\n const key = cacheKey || url;\r\n if (cacheTime > 0) {\r\n const cached = cache.get(key);\r\n if (cached && Date.now() - cached.timestamp < cacheTime) {\r\n const cachedData = cached.data as T;\r\n setData(cachedData);\r\n setLoading(false);\r\n setIsFetching(false);\r\n return cachedData;\r\n }\r\n }\r\n\r\n // Abort previous request\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n\r\n abortControllerRef.current = new AbortController();\r\n\r\n setIsFetching(true);\r\n setError(null);\r\n\r\n try {\r\n // Prepare body\r\n let processedBody: BodyInit | undefined;\r\n if (body !== null && body !== undefined) {\r\n if (typeof body === 'object' && !(body instanceof FormData) && !(body instanceof Blob)) {\r\n processedBody = JSON.stringify(body);\r\n fetchOptions.headers = {\r\n 'Content-Type': 'application/json',\r\n ...fetchOptions.headers,\r\n };\r\n } else {\r\n processedBody = body as BodyInit;\r\n }\r\n }\r\n\r\n const response = await fetch(url, {\r\n ...fetchOptions,\r\n body: processedBody,\r\n signal: abortControllerRef.current.signal,\r\n });\r\n\r\n setStatus(response.status);\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const responseData = await response.json();\r\n const transformedData = transform ? transform(responseData) : (responseData as T);\r\n\r\n // Update cache\r\n if (cacheTime > 0) {\r\n cache.set(key, { data: transformedData, timestamp: Date.now() });\r\n }\r\n\r\n setData(transformedData);\r\n setError(null);\r\n setLoading(false);\r\n setIsFetching(false);\r\n retriesRef.current = 0;\r\n onSuccess?.(transformedData);\r\n\r\n return transformedData;\r\n } catch (err) {\r\n if ((err as Error).name === 'AbortError') {\r\n return null;\r\n }\r\n\r\n const fetchError = err instanceof Error ? err : new Error(String(err));\r\n\r\n // Retry logic\r\n if (retriesRef.current < retries) {\r\n retriesRef.current++;\r\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\r\n return fetchData();\r\n }\r\n\r\n setError(fetchError);\r\n setLoading(false);\r\n setIsFetching(false);\r\n retriesRef.current = 0;\r\n onError?.(fetchError);\r\n\r\n return null;\r\n }\r\n }, [url, cacheKey, cacheTime, transform, retries, retryDelay, body, fetchOptions, onSuccess, onError]);\r\n\r\n const abort = useCallback(() => {\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n }, []);\r\n\r\n const refetch = useCallback(async (): Promise<T | null> => {\r\n // Clear cache for this key\r\n const key = cacheKey || url || '';\r\n cache.delete(key);\r\n\r\n setLoading(true);\r\n return fetchData();\r\n }, [fetchData, cacheKey, url]);\r\n\r\n // Initial fetch\r\n useEffect(() => {\r\n if (skip || !url) {\r\n setLoading(false);\r\n setIsFetching(false);\r\n return;\r\n }\r\n\r\n fetchData();\r\n\r\n return () => {\r\n abort();\r\n };\r\n }, [url, skip]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return {\r\n data,\r\n loading,\r\n error,\r\n refetch,\r\n abort,\r\n isFetching,\r\n status,\r\n };\r\n}\r\n\r\nexport default useFetch;\r\n","/**\r\n * useScript Hook\r\n * Dynamically loads external scripts\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nexport type ScriptStatus = 'idle' | 'loading' | 'ready' | 'error';\r\n\r\nexport interface UseScriptOptions {\r\n /** Should load script immediately (default: true) */\r\n shouldLoad?: boolean;\r\n /** Remove script on unmount (default: false) */\r\n removeOnUnmount?: boolean;\r\n /** Script attributes */\r\n attributes?: Record<string, string>;\r\n}\r\n\r\nexport interface UseScriptReturn {\r\n /** Script loading status */\r\n status: ScriptStatus;\r\n /** Is script ready? */\r\n ready: boolean;\r\n /** Is loading? */\r\n loading: boolean;\r\n /** Has error? */\r\n error: boolean;\r\n /** Load script manually */\r\n load: () => void;\r\n /** Remove script */\r\n remove: () => void;\r\n}\r\n\r\n// Cache of script statuses\r\nconst scriptCache = new Map<string, ScriptStatus>();\r\n\r\n/**\r\n * Hook to dynamically load external scripts\r\n * @param src - Script source URL\r\n * @param options - Configuration options\r\n */\r\nexport function useScript(\r\n src: string,\r\n options: UseScriptOptions = {}\r\n): UseScriptReturn {\r\n const { shouldLoad = true, removeOnUnmount = false, attributes = {} } = options;\r\n\r\n const [status, setStatus] = useState<ScriptStatus>(() => {\r\n if (!src) return 'idle';\r\n if (typeof window === 'undefined') return 'idle';\r\n\r\n // Check if script already exists\r\n const existingScript = document.querySelector(`script[src=\"${src}\"]`);\r\n if (existingScript) {\r\n return scriptCache.get(src) || 'ready';\r\n }\r\n\r\n return 'idle';\r\n });\r\n\r\n const load = useCallback(() => {\r\n if (!src || typeof document === 'undefined') return;\r\n\r\n // Check if already loading or loaded\r\n const existingScript = document.querySelector(`script[src=\"${src}\"]`);\r\n if (existingScript) {\r\n const cachedStatus = scriptCache.get(src);\r\n if (cachedStatus) {\r\n setStatus(cachedStatus);\r\n }\r\n return;\r\n }\r\n\r\n setStatus('loading');\r\n scriptCache.set(src, 'loading');\r\n\r\n const script = document.createElement('script');\r\n script.src = src;\r\n script.async = true;\r\n\r\n // Apply custom attributes\r\n Object.entries(attributes).forEach(([key, value]) => {\r\n script.setAttribute(key, value);\r\n });\r\n\r\n const handleLoad = () => {\r\n setStatus('ready');\r\n scriptCache.set(src, 'ready');\r\n };\r\n\r\n const handleError = () => {\r\n setStatus('error');\r\n scriptCache.set(src, 'error');\r\n };\r\n\r\n script.addEventListener('load', handleLoad);\r\n script.addEventListener('error', handleError);\r\n\r\n document.body.appendChild(script);\r\n }, [src, attributes]);\r\n\r\n const remove = useCallback(() => {\r\n if (!src || typeof document === 'undefined') return;\r\n\r\n const existingScript = document.querySelector(`script[src=\"${src}\"]`);\r\n if (existingScript) {\r\n document.body.removeChild(existingScript);\r\n scriptCache.delete(src);\r\n setStatus('idle');\r\n }\r\n }, [src]);\r\n\r\n // Load script on mount if shouldLoad is true\r\n useEffect(() => {\r\n if (shouldLoad && status === 'idle') {\r\n load();\r\n }\r\n }, [shouldLoad, status, load]);\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (removeOnUnmount) {\r\n remove();\r\n }\r\n };\r\n }, [removeOnUnmount, remove]);\r\n\r\n return {\r\n status,\r\n ready: status === 'ready',\r\n loading: status === 'loading',\r\n error: status === 'error',\r\n load,\r\n remove,\r\n };\r\n}\r\n\r\nexport default useScript;\r\n","/**\r\n * useRenderInfo Hook\r\n * Tracks render information for debugging\r\n */\r\nimport { useRef, useEffect } from 'react';\r\n\r\nexport interface RenderInfo {\r\n /** Component name (if provided) */\r\n name: string;\r\n /** Total render count */\r\n renders: number;\r\n /** Time since last render (ms) */\r\n sinceLastRender: number;\r\n /** Timestamp of last render */\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Hook to track render information for debugging\r\n * @param componentName - Optional component name for identification\r\n */\r\nexport function useRenderInfo(componentName: string = 'Component'): RenderInfo {\r\n const renderCount = useRef<number>(0);\r\n const lastRenderTime = useRef<number>(Date.now());\r\n const currentTime = Date.now();\r\n\r\n const sinceLastRender = currentTime - lastRenderTime.current;\r\n\r\n // Update refs\r\n renderCount.current++;\r\n const renders = renderCount.current;\r\n\r\n useEffect(() => {\r\n lastRenderTime.current = currentTime;\r\n });\r\n\r\n const info: RenderInfo = {\r\n name: componentName,\r\n renders,\r\n sinceLastRender,\r\n timestamp: currentTime,\r\n };\r\n\r\n // Log in development\r\n if (process.env.NODE_ENV === 'development') {\r\n console.log(`[${componentName}] Render #${renders} (${sinceLastRender}ms since last)`);\r\n }\r\n\r\n return info;\r\n}\r\n\r\nexport default useRenderInfo;\r\n","/**\r\n * useRenderCount Hook\r\n * Counts component renders\r\n */\r\nimport { useRef } from 'react';\r\n\r\n/**\r\n * Hook to count component renders\r\n */\r\nexport function useRenderCount(): number {\r\n const renderCount = useRef<number>(0);\r\n renderCount.current++;\r\n\r\n return renderCount.current;\r\n}\r\n\r\nexport default useRenderCount;\r\n","/**\r\n * useLogger Hook\r\n * Logs component lifecycle and prop/state changes\r\n */\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport interface UseLoggerOptions {\r\n /** Log props changes */\r\n logProps?: boolean;\r\n /** Log lifecycle events */\r\n logLifecycle?: boolean;\r\n /** Custom logger function */\r\n logger?: (...args: unknown[]) => void;\r\n}\r\n\r\n/**\r\n * Hook to log component lifecycle and changes\r\n * @param componentName - Name of the component\r\n * @param props - Props to track changes\r\n * @param options - Configuration options\r\n */\r\nexport function useLogger(\r\n componentName: string,\r\n props?: Record<string, unknown>,\r\n options: UseLoggerOptions = {}\r\n): void {\r\n const {\r\n logProps = true,\r\n logLifecycle = true,\r\n logger = console.log,\r\n } = options;\r\n\r\n const previousProps = useRef<Record<string, unknown> | undefined>(props);\r\n const renderCount = useRef<number>(0);\r\n renderCount.current++;\r\n\r\n // Log mount/unmount\r\n useEffect(() => {\r\n if (logLifecycle) {\r\n logger(`[${componentName}] Mounted`);\r\n }\r\n\r\n return () => {\r\n if (logLifecycle) {\r\n logger(`[${componentName}] Unmounted (rendered ${renderCount.current} times)`);\r\n }\r\n };\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n // Log prop changes\r\n useEffect(() => {\r\n if (!logProps || !props || !previousProps.current) {\r\n previousProps.current = props;\r\n return;\r\n }\r\n\r\n const changedProps: Record<string, { from: unknown; to: unknown }> = {};\r\n let hasChanges = false;\r\n\r\n // Check for changed and new props\r\n Object.keys(props).forEach((key) => {\r\n if (previousProps.current?.[key] !== props[key]) {\r\n changedProps[key] = {\r\n from: previousProps.current?.[key],\r\n to: props[key],\r\n };\r\n hasChanges = true;\r\n }\r\n });\r\n\r\n // Check for removed props\r\n if (previousProps.current) {\r\n Object.keys(previousProps.current).forEach((key) => {\r\n if (!(key in props)) {\r\n changedProps[key] = {\r\n from: previousProps.current?.[key],\r\n to: undefined,\r\n };\r\n hasChanges = true;\r\n }\r\n });\r\n }\r\n\r\n if (hasChanges) {\r\n logger(`[${componentName}] Props changed:`, changedProps);\r\n }\r\n\r\n previousProps.current = props;\r\n }, [componentName, props, logProps, logger]);\r\n\r\n // Log each render\r\n if (process.env.NODE_ENV === 'development') {\r\n logger(`[${componentName}] Render #${renderCount.current}`);\r\n }\r\n}\r\n\r\nexport default useLogger;\r\n","/**\r\n * useMeasure Hook\r\n * Measures element dimensions using ResizeObserver\r\n */\r\nimport { useState, useCallback, useRef, useEffect } from 'react';\r\n\r\nexport interface Dimensions {\r\n /** Element width */\r\n width: number;\r\n /** Element height */\r\n height: number;\r\n /** Top position relative to viewport */\r\n top: number;\r\n /** Left position relative to viewport */\r\n left: number;\r\n /** Bottom position relative to viewport */\r\n bottom: number;\r\n /** Right position relative to viewport */\r\n right: number;\r\n /** X position (same as left) */\r\n x: number;\r\n /** Y position (same as top) */\r\n y: number;\r\n}\r\n\r\nexport interface UseMeasureReturn<T extends HTMLElement = HTMLElement> {\r\n /** Ref to attach to element */\r\n ref: React.RefCallback<T>;\r\n /** Element dimensions */\r\n dimensions: Dimensions;\r\n /** Manually trigger measurement */\r\n measure: () => void;\r\n}\r\n\r\nconst defaultDimensions: Dimensions = {\r\n width: 0,\r\n height: 0,\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Hook to measure element dimensions\r\n */\r\nexport function useMeasure<T extends HTMLElement = HTMLElement>(): UseMeasureReturn<T> {\r\n const [dimensions, setDimensions] = useState<Dimensions>(defaultDimensions);\r\n const elementRef = useRef<T | null>(null);\r\n const observerRef = useRef<ResizeObserver | null>(null);\r\n\r\n const measure = useCallback(() => {\r\n if (!elementRef.current) return;\r\n\r\n const rect = elementRef.current.getBoundingClientRect();\r\n setDimensions({\r\n width: rect.width,\r\n height: rect.height,\r\n top: rect.top,\r\n left: rect.left,\r\n bottom: rect.bottom,\r\n right: rect.right,\r\n x: rect.x,\r\n y: rect.y,\r\n });\r\n }, []);\r\n\r\n const ref = useCallback((node: T | null) => {\r\n // Cleanup previous observer\r\n if (observerRef.current) {\r\n observerRef.current.disconnect();\r\n observerRef.current = null;\r\n }\r\n\r\n if (node) {\r\n elementRef.current = node;\r\n\r\n // Create new observer\r\n if (typeof ResizeObserver !== 'undefined') {\r\n observerRef.current = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n const rect = entries[0].target.getBoundingClientRect();\r\n setDimensions({\r\n width: rect.width,\r\n height: rect.height,\r\n top: rect.top,\r\n left: rect.left,\r\n bottom: rect.bottom,\r\n right: rect.right,\r\n x: rect.x,\r\n y: rect.y,\r\n });\r\n }\r\n });\r\n\r\n observerRef.current.observe(node);\r\n }\r\n\r\n // Initial measurement\r\n const rect = node.getBoundingClientRect();\r\n setDimensions({\r\n width: rect.width,\r\n height: rect.height,\r\n top: rect.top,\r\n left: rect.left,\r\n bottom: rect.bottom,\r\n right: rect.right,\r\n x: rect.x,\r\n y: rect.y,\r\n });\r\n } else {\r\n elementRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (observerRef.current) {\r\n observerRef.current.disconnect();\r\n }\r\n };\r\n }, []);\r\n\r\n return { ref, dimensions, measure };\r\n}\r\n\r\nexport default useMeasure;\r\n","/**\r\n * useIntersectionObserver Hook\r\n * Tracks element intersection with viewport\r\n */\r\nimport { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface UseIntersectionObserverOptions {\r\n /** Root element (default: viewport) */\r\n root?: Element | null;\r\n /** Root margin (default: '0px') */\r\n rootMargin?: string;\r\n /** Intersection threshold(s) (default: 0) */\r\n threshold?: number | number[];\r\n /** Freeze after first intersection */\r\n freezeOnceVisible?: boolean;\r\n /** Initial visibility state */\r\n initialIsIntersecting?: boolean;\r\n /** Callback when intersection changes */\r\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\r\n}\r\n\r\nexport interface UseIntersectionObserverReturn<T extends Element = Element> {\r\n /** Ref to attach to element */\r\n ref: React.RefCallback<T>;\r\n /** Is element intersecting? */\r\n isIntersecting: boolean;\r\n /** Full intersection entry */\r\n entry: IntersectionObserverEntry | null;\r\n}\r\n\r\n/**\r\n * Hook to observe element intersection with viewport\r\n * @param options - IntersectionObserver options\r\n */\r\nexport function useIntersectionObserver<T extends Element = Element>(\r\n options: UseIntersectionObserverOptions = {}\r\n): UseIntersectionObserverReturn<T> {\r\n const {\r\n root = null,\r\n rootMargin = '0px',\r\n threshold = 0,\r\n freezeOnceVisible = false,\r\n initialIsIntersecting = false,\r\n onChange,\r\n } = options;\r\n\r\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null);\r\n const [isIntersecting, setIsIntersecting] = useState<boolean>(initialIsIntersecting);\r\n\r\n const elementRef = useRef<T | null>(null);\r\n const observerRef = useRef<IntersectionObserver | null>(null);\r\n const frozen = useRef<boolean>(false);\r\n\r\n const ref = useCallback(\r\n (node: T | null) => {\r\n // Cleanup previous observer\r\n if (observerRef.current) {\r\n observerRef.current.disconnect();\r\n observerRef.current = null;\r\n }\r\n\r\n if (frozen.current) return;\r\n\r\n if (node && typeof IntersectionObserver !== 'undefined') {\r\n elementRef.current = node;\r\n\r\n observerRef.current = new IntersectionObserver(\r\n ([observerEntry]) => {\r\n const newIsIntersecting = observerEntry.isIntersecting;\r\n\r\n setEntry(observerEntry);\r\n setIsIntersecting(newIsIntersecting);\r\n onChange?.(newIsIntersecting, observerEntry);\r\n\r\n // Freeze if needed\r\n if (freezeOnceVisible && newIsIntersecting) {\r\n frozen.current = true;\r\n observerRef.current?.disconnect();\r\n }\r\n },\r\n { root, rootMargin, threshold }\r\n );\r\n\r\n observerRef.current.observe(node);\r\n } else {\r\n elementRef.current = null;\r\n }\r\n },\r\n [root, rootMargin, threshold, freezeOnceVisible, onChange]\r\n );\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (observerRef.current) {\r\n observerRef.current.disconnect();\r\n }\r\n };\r\n }, []);\r\n\r\n return { ref, isIntersecting, entry };\r\n}\r\n\r\nexport default useIntersectionObserver;\r\n","/**\r\n * useSnackbar Hook\r\n * Show toast/snackbar notifications\r\n */\r\nimport { useState, useCallback } from 'react';\r\n\r\nexport type SnackbarSeverity = 'success' | 'error' | 'warning' | 'info';\r\n\r\nexport interface SnackbarState {\r\n open: boolean;\r\n message: string;\r\n severity: SnackbarSeverity;\r\n autoHideDuration?: number;\r\n}\r\n\r\nexport interface UseSnackbarReturn {\r\n /** Current snackbar state */\r\n state: SnackbarState;\r\n /** Show snackbar with message */\r\n show: (message: string, severity?: SnackbarSeverity, duration?: number) => void;\r\n /** Show success snackbar */\r\n success: (message: string, duration?: number) => void;\r\n /** Show error snackbar */\r\n error: (message: string, duration?: number) => void;\r\n /** Show warning snackbar */\r\n warning: (message: string, duration?: number) => void;\r\n /** Show info snackbar */\r\n info: (message: string, duration?: number) => void;\r\n /** Close snackbar */\r\n close: () => void;\r\n}\r\n\r\nconst DEFAULT_DURATION = 4000;\r\n\r\n/**\r\n * Manage snackbar/toast notification state\r\n * @param defaultDuration - Default auto-hide duration in ms\r\n */\r\nexport function useSnackbar(defaultDuration: number = DEFAULT_DURATION): UseSnackbarReturn {\r\n const [state, setState] = useState<SnackbarState>({\r\n open: false,\r\n message: '',\r\n severity: 'info',\r\n autoHideDuration: defaultDuration,\r\n });\r\n\r\n const show = useCallback(\r\n (message: string, severity: SnackbarSeverity = 'info', duration?: number) => {\r\n setState({\r\n open: true,\r\n message,\r\n severity,\r\n autoHideDuration: duration ?? defaultDuration,\r\n });\r\n },\r\n [defaultDuration]\r\n );\r\n\r\n const success = useCallback(\r\n (message: string, duration?: number) => show(message, 'success', duration),\r\n [show]\r\n );\r\n\r\n const error = useCallback(\r\n (message: string, duration?: number) => show(message, 'error', duration),\r\n [show]\r\n );\r\n\r\n const warning = useCallback(\r\n (message: string, duration?: number) => show(message, 'warning', duration),\r\n [show]\r\n );\r\n\r\n const info = useCallback(\r\n (message: string, duration?: number) => show(message, 'info', duration),\r\n [show]\r\n );\r\n\r\n const close = useCallback(() => {\r\n setState((prev) => ({ ...prev, open: false }));\r\n }, []);\r\n\r\n return { state, show, success, error, warning, info, close };\r\n}\r\n\r\nexport default useSnackbar;\r\n","/**\r\n * Default Light Theme\r\n * Complete theme definition with all micro-level customizations\r\n */\r\n\r\nimport type { Theme } from './theme.types';\r\n\r\nexport const defaultLightTheme: Theme = {\r\n name: 'default-light',\r\n mode: 'light',\r\n\r\n colors: {\r\n brand: {\r\n primary: '#3b82f6',\r\n secondary: '#6366f1',\r\n accent: '#f59e0b',\r\n background: '#ffffff',\r\n foreground: '#111827',\r\n },\r\n\r\n semantic: {\r\n primary: '#3b82f6',\r\n primaryHover: '#2563eb',\r\n primaryActive: '#1d4ed8',\r\n primaryDisabled: '#93c5fd',\r\n secondary: '#6366f1',\r\n secondaryHover: '#4f46e5',\r\n secondaryActive: '#4338ca',\r\n secondaryDisabled: '#a5b4fc',\r\n accent: '#f59e0b',\r\n accentHover: '#d97706',\r\n success: '#22c55e',\r\n successHover: '#16a34a',\r\n warning: '#f59e0b',\r\n warningHover: '#d97706',\r\n error: '#ef4444',\r\n errorHover: '#dc2626',\r\n info: '#3b82f6',\r\n infoHover: '#2563eb',\r\n },\r\n\r\n background: {\r\n default: '#ffffff',\r\n paper: '#f9fafb',\r\n card: '#ffffff',\r\n overlay: 'rgba(0, 0, 0, 0.5)',\r\n input: '#ffffff',\r\n disabled: '#f3f4f6',\r\n hover: '#f3f4f6',\r\n selected: '#eff6ff',\r\n },\r\n\r\n surface: {\r\n light: '#f9fafb',\r\n main: '#f3f4f6',\r\n dark: '#e5e7eb',\r\n },\r\n\r\n text: {\r\n primary: '#111827',\r\n secondary: '#6b7280',\r\n disabled: '#9ca3af',\r\n placeholder: '#9ca3af',\r\n link: '#3b82f6',\r\n linkHover: '#2563eb',\r\n inverse: '#ffffff',\r\n onPrimary: '#ffffff',\r\n onSecondary: '#ffffff',\r\n },\r\n\r\n border: {\r\n default: '#e5e7eb',\r\n light: '#f3f4f6',\r\n dark: '#d1d5db',\r\n focus: '#3b82f6',\r\n error: '#ef4444',\r\n success: '#22c55e',\r\n disabled: '#e5e7eb',\r\n },\r\n },\r\n\r\n shadows: {\r\n none: 'none',\r\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\r\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\r\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\r\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\r\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\r\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\r\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\r\n button: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\r\n buttonHover: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\r\n card: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\r\n cardHover: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\r\n modal: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\r\n dropdown: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\r\n },\r\n\r\n typography: {\r\n fontFamily: {\r\n sans: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n serif: 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\r\n mono: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\r\n heading: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n body: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n fontSize: {\r\n xs: '0.75rem',\r\n sm: '0.875rem',\r\n base: '1rem',\r\n lg: '1.125rem',\r\n xl: '1.25rem',\r\n '2xl': '1.5rem',\r\n '3xl': '1.875rem',\r\n '4xl': '2.25rem',\r\n '5xl': '3rem',\r\n '6xl': '3.75rem',\r\n },\r\n fontWeight: {\r\n light: 300,\r\n normal: 400,\r\n medium: 500,\r\n semibold: 600,\r\n bold: 700,\r\n extrabold: 800,\r\n },\r\n lineHeight: {\r\n none: 1,\r\n tight: 1.25,\r\n snug: 1.375,\r\n normal: 1.5,\r\n relaxed: 1.625,\r\n loose: 2,\r\n },\r\n },\r\n\r\n spacing: {\r\n 0: '0',\r\n px: '1px',\r\n 0.5: '0.125rem',\r\n 1: '0.25rem',\r\n 1.5: '0.375rem',\r\n 2: '0.5rem',\r\n 2.5: '0.625rem',\r\n 3: '0.75rem',\r\n 3.5: '0.875rem',\r\n 4: '1rem',\r\n 5: '1.25rem',\r\n 6: '1.5rem',\r\n 7: '1.75rem',\r\n 8: '2rem',\r\n 9: '2.25rem',\r\n 10: '2.5rem',\r\n 11: '2.75rem',\r\n 12: '3rem',\r\n 14: '3.5rem',\r\n 16: '4rem',\r\n 20: '5rem',\r\n 24: '6rem',\r\n 28: '7rem',\r\n 32: '8rem',\r\n 36: '9rem',\r\n 40: '10rem',\r\n 44: '11rem',\r\n 48: '12rem',\r\n 52: '13rem',\r\n 56: '14rem',\r\n 60: '15rem',\r\n 64: '16rem',\r\n 72: '18rem',\r\n 80: '20rem',\r\n 96: '24rem',\r\n },\r\n\r\n borderRadius: {\r\n none: '0',\r\n sm: '0.125rem',\r\n default: '0.25rem',\r\n md: '0.375rem',\r\n lg: '0.5rem',\r\n xl: '0.75rem',\r\n '2xl': '1rem',\r\n '3xl': '1.5rem',\r\n full: '9999px',\r\n },\r\n\r\n breakpoints: {\r\n xs: '475px',\r\n sm: '640px',\r\n md: '768px',\r\n lg: '1024px',\r\n xl: '1280px',\r\n '2xl': '1536px',\r\n },\r\n\r\n zIndex: {\r\n hide: -1,\r\n auto: 'auto',\r\n base: 0,\r\n dropdown: 1000,\r\n sticky: 1020,\r\n fixed: 1030,\r\n modalBackdrop: 1040,\r\n modal: 1050,\r\n popover: 1060,\r\n tooltip: 1070,\r\n toast: 1080,\r\n },\r\n\r\n transitions: {\r\n none: 'none',\r\n fast: '150ms ease-in-out',\r\n normal: '200ms ease-in-out',\r\n slow: '300ms ease-in-out',\r\n slower: '500ms ease-in-out',\r\n colors: 'color 200ms ease-in-out, background-color 200ms ease-in-out, border-color 200ms ease-in-out',\r\n transform: 'transform 200ms ease-in-out',\r\n opacity: 'opacity 200ms ease-in-out',\r\n shadow: 'box-shadow 200ms ease-in-out',\r\n all: 'all 200ms ease-in-out',\r\n },\r\n\r\n components: {\r\n button: {\r\n bg: '#3b82f6',\r\n bgHover: '#2563eb',\r\n bgActive: '#1d4ed8',\r\n bgDisabled: '#93c5fd',\r\n color: '#ffffff',\r\n colorHover: '#ffffff',\r\n colorDisabled: '#ffffff',\r\n border: 'transparent',\r\n borderHover: 'transparent',\r\n borderWidth: '1px',\r\n borderRadius: '0.375rem',\r\n shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1)',\r\n shadowHover: '0 4px 6px -1px rgb(0 0 0 / 0.1)',\r\n paddingX: '1rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n variants: {\r\n primary: {\r\n bg: '#3b82f6',\r\n bgHover: '#2563eb',\r\n color: '#ffffff',\r\n },\r\n secondary: {\r\n bg: '#6366f1',\r\n bgHover: '#4f46e5',\r\n color: '#ffffff',\r\n },\r\n outline: {\r\n bg: 'transparent',\r\n bgHover: '#f3f4f6',\r\n color: '#374151',\r\n border: '#d1d5db',\r\n borderHover: '#9ca3af',\r\n },\r\n ghost: {\r\n bg: 'transparent',\r\n bgHover: '#f3f4f6',\r\n color: '#374151',\r\n shadow: 'none',\r\n shadowHover: 'none',\r\n },\r\n link: {\r\n bg: 'transparent',\r\n bgHover: 'transparent',\r\n color: '#3b82f6',\r\n colorHover: '#2563eb',\r\n shadow: 'none',\r\n shadowHover: 'none',\r\n paddingX: '0',\r\n paddingY: '0',\r\n },\r\n danger: {\r\n bg: '#ef4444',\r\n bgHover: '#dc2626',\r\n color: '#ffffff',\r\n },\r\n success: {\r\n bg: '#22c55e',\r\n bgHover: '#16a34a',\r\n color: '#ffffff',\r\n },\r\n },\r\n sizes: {\r\n xs: {\r\n paddingX: '0.5rem',\r\n paddingY: '0.25rem',\r\n fontSize: '0.75rem',\r\n },\r\n sm: {\r\n paddingX: '0.75rem',\r\n paddingY: '0.375rem',\r\n fontSize: '0.875rem',\r\n },\r\n md: {\r\n paddingX: '1rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n },\r\n lg: {\r\n paddingX: '1.25rem',\r\n paddingY: '0.625rem',\r\n fontSize: '1rem',\r\n },\r\n xl: {\r\n paddingX: '1.5rem',\r\n paddingY: '0.75rem',\r\n fontSize: '1.125rem',\r\n },\r\n },\r\n },\r\n\r\n input: {\r\n bg: '#ffffff',\r\n bgFocus: '#ffffff',\r\n bgDisabled: '#f3f4f6',\r\n bgError: '#fef2f2',\r\n color: '#111827',\r\n colorPlaceholder: '#9ca3af',\r\n colorDisabled: '#9ca3af',\r\n border: '#d1d5db',\r\n borderFocus: '#3b82f6',\r\n borderError: '#ef4444',\r\n borderWidth: '1px',\r\n borderRadius: '0.375rem',\r\n shadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\r\n shadowFocus: '0 0 0 3px rgb(59 130 246 / 0.1)',\r\n paddingX: '0.75rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n labelColor: '#374151',\r\n labelFontSize: '0.875rem',\r\n labelFontWeight: 500,\r\n helperColor: '#6b7280',\r\n errorColor: '#ef4444',\r\n sizes: {\r\n sm: {\r\n paddingX: '0.5rem',\r\n paddingY: '0.375rem',\r\n fontSize: '0.75rem',\r\n },\r\n md: {\r\n paddingX: '0.75rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n },\r\n lg: {\r\n paddingX: '1rem',\r\n paddingY: '0.625rem',\r\n fontSize: '1rem',\r\n },\r\n },\r\n },\r\n\r\n card: {\r\n bg: '#ffffff',\r\n bgHover: '#ffffff',\r\n border: '#e5e7eb',\r\n borderWidth: '1px',\r\n borderRadius: '0.5rem',\r\n shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1)',\r\n shadowHover: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\r\n padding: '1.5rem',\r\n headerBg: '#f9fafb',\r\n headerBorder: '#e5e7eb',\r\n headerPadding: '1rem 1.5rem',\r\n footerBg: '#f9fafb',\r\n footerBorder: '#e5e7eb',\r\n footerPadding: '1rem 1.5rem',\r\n },\r\n\r\n header: {\r\n bg: '#ffffff',\r\n bgScrolled: 'rgba(255, 255, 255, 0.95)',\r\n color: '#111827',\r\n border: '#e5e7eb',\r\n shadow: 'none',\r\n shadowScrolled: '0 1px 3px 0 rgb(0 0 0 / 0.1)',\r\n height: '4rem',\r\n paddingX: '1.5rem',\r\n logoHeight: '2rem',\r\n navColor: '#374151',\r\n navColorHover: '#111827',\r\n navColorActive: '#3b82f6',\r\n navFontSize: '0.875rem',\r\n navFontWeight: 500,\r\n mobileMenuBg: '#ffffff',\r\n mobileMenuShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\r\n },\r\n\r\n footer: {\r\n bg: '#111827',\r\n color: '#d1d5db',\r\n colorMuted: '#9ca3af',\r\n border: '#374151',\r\n padding: '4rem 1.5rem',\r\n linkColor: '#d1d5db',\r\n linkColorHover: '#ffffff',\r\n headingColor: '#ffffff',\r\n headingFontSize: '1rem',\r\n headingFontWeight: 600,\r\n copyrightBg: '#0f172a',\r\n copyrightColor: '#9ca3af',\r\n },\r\n\r\n banner: {\r\n bg: '#eff6ff',\r\n color: '#1e40af',\r\n border: '#bfdbfe',\r\n borderRadius: '0.5rem',\r\n padding: '1rem 1.5rem',\r\n shadow: 'none',\r\n closeBg: 'transparent',\r\n closeColor: '#1e40af',\r\n variants: {\r\n info: {\r\n bg: '#eff6ff',\r\n color: '#1e40af',\r\n border: '#bfdbfe',\r\n },\r\n success: {\r\n bg: '#f0fdf4',\r\n color: '#166534',\r\n border: '#bbf7d0',\r\n },\r\n warning: {\r\n bg: '#fffbeb',\r\n color: '#92400e',\r\n border: '#fde68a',\r\n },\r\n error: {\r\n bg: '#fef2f2',\r\n color: '#991b1b',\r\n border: '#fecaca',\r\n },\r\n promo: {\r\n bg: '#faf5ff',\r\n color: '#6b21a8',\r\n border: '#e9d5ff',\r\n },\r\n },\r\n },\r\n\r\n loader: {\r\n color: '#3b82f6',\r\n colorSecondary: '#e5e7eb',\r\n size: '2.5rem',\r\n borderWidth: '3px',\r\n overlayBg: 'rgba(255, 255, 255, 0.8)',\r\n overlayOpacity: 1,\r\n sizes: {\r\n xs: '1rem',\r\n sm: '1.5rem',\r\n md: '2.5rem',\r\n lg: '3.5rem',\r\n xl: '5rem',\r\n },\r\n },\r\n\r\n modal: {\r\n bg: '#ffffff',\r\n color: '#111827',\r\n border: '#e5e7eb',\r\n borderRadius: '0.5rem',\r\n shadow: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\r\n padding: '1.5rem',\r\n overlayBg: 'rgba(0, 0, 0, 0.5)',\r\n overlayOpacity: 1,\r\n headerBg: '#ffffff',\r\n headerBorder: '#e5e7eb',\r\n headerPadding: '1rem 1.5rem',\r\n footerBg: '#f9fafb',\r\n footerBorder: '#e5e7eb',\r\n footerPadding: '1rem 1.5rem',\r\n closeBg: 'transparent',\r\n closeColor: '#6b7280',\r\n closeHoverBg: '#f3f4f6',\r\n sizes: {\r\n sm: '24rem',\r\n md: '32rem',\r\n lg: '48rem',\r\n xl: '64rem',\r\n full: '100%',\r\n },\r\n },\r\n\r\n toast: {\r\n bg: '#ffffff',\r\n color: '#111827',\r\n border: '#e5e7eb',\r\n borderRadius: '0.5rem',\r\n shadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\r\n padding: '1rem',\r\n variants: {\r\n success: {\r\n bg: '#f0fdf4',\r\n color: '#166534',\r\n border: '#bbf7d0',\r\n },\r\n error: {\r\n bg: '#fef2f2',\r\n color: '#991b1b',\r\n border: '#fecaca',\r\n },\r\n warning: {\r\n bg: '#fffbeb',\r\n color: '#92400e',\r\n border: '#fde68a',\r\n },\r\n info: {\r\n bg: '#eff6ff',\r\n color: '#1e40af',\r\n border: '#bfdbfe',\r\n },\r\n },\r\n },\r\n\r\n newsletter: {\r\n bg: '#f9fafb',\r\n color: '#111827',\r\n border: '#e5e7eb',\r\n borderRadius: '0.5rem',\r\n padding: '2rem',\r\n titleColor: '#111827',\r\n titleFontSize: '1.5rem',\r\n descColor: '#6b7280',\r\n descFontSize: '1rem',\r\n inputBg: '#ffffff',\r\n inputBorder: '#d1d5db',\r\n buttonBg: '#3b82f6',\r\n buttonColor: '#ffffff',\r\n },\r\n },\r\n};\r\n\r\nexport default defaultLightTheme;\r\n","/**\r\n * Default Dark Theme\r\n * Complete dark theme with all micro-level customizations\r\n */\r\n\r\nimport type { Theme } from './theme.types';\r\n\r\nexport const defaultDarkTheme: Theme = {\r\n name: 'default-dark',\r\n mode: 'dark',\r\n\r\n colors: {\r\n brand: {\r\n primary: '#60a5fa',\r\n secondary: '#818cf8',\r\n accent: '#fbbf24',\r\n background: '#0f172a',\r\n foreground: '#f8fafc',\r\n },\r\n\r\n semantic: {\r\n primary: '#60a5fa',\r\n primaryHover: '#3b82f6',\r\n primaryActive: '#2563eb',\r\n primaryDisabled: '#1e3a5f',\r\n secondary: '#818cf8',\r\n secondaryHover: '#6366f1',\r\n secondaryActive: '#4f46e5',\r\n secondaryDisabled: '#312e81',\r\n accent: '#fbbf24',\r\n accentHover: '#f59e0b',\r\n success: '#4ade80',\r\n successHover: '#22c55e',\r\n warning: '#fbbf24',\r\n warningHover: '#f59e0b',\r\n error: '#f87171',\r\n errorHover: '#ef4444',\r\n info: '#60a5fa',\r\n infoHover: '#3b82f6',\r\n },\r\n\r\n background: {\r\n default: '#0f172a',\r\n paper: '#1e293b',\r\n card: '#1e293b',\r\n overlay: 'rgba(0, 0, 0, 0.7)',\r\n input: '#1e293b',\r\n disabled: '#334155',\r\n hover: '#334155',\r\n selected: '#1e3a5f',\r\n },\r\n\r\n surface: {\r\n light: '#334155',\r\n main: '#1e293b',\r\n dark: '#0f172a',\r\n },\r\n\r\n text: {\r\n primary: '#f8fafc',\r\n secondary: '#94a3b8',\r\n disabled: '#64748b',\r\n placeholder: '#64748b',\r\n link: '#60a5fa',\r\n linkHover: '#3b82f6',\r\n inverse: '#0f172a',\r\n onPrimary: '#0f172a',\r\n onSecondary: '#0f172a',\r\n },\r\n\r\n border: {\r\n default: '#334155',\r\n light: '#475569',\r\n dark: '#1e293b',\r\n focus: '#60a5fa',\r\n error: '#f87171',\r\n success: '#4ade80',\r\n disabled: '#334155',\r\n },\r\n },\r\n\r\n shadows: {\r\n none: 'none',\r\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.3)',\r\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.4)',\r\n md: '0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4)',\r\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4)',\r\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4)',\r\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.6)',\r\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.3)',\r\n button: '0 1px 3px 0 rgb(0 0 0 / 0.4)',\r\n buttonHover: '0 4px 6px -1px rgb(0 0 0 / 0.4)',\r\n card: '0 1px 3px 0 rgb(0 0 0 / 0.4)',\r\n cardHover: '0 10px 15px -3px rgb(0 0 0 / 0.4)',\r\n modal: '0 25px 50px -12px rgb(0 0 0 / 0.6)',\r\n dropdown: '0 10px 15px -3px rgb(0 0 0 / 0.4)',\r\n },\r\n\r\n typography: {\r\n fontFamily: {\r\n sans: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\r\n serif: 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\r\n mono: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\r\n heading: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n body: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n fontSize: {\r\n xs: '0.75rem',\r\n sm: '0.875rem',\r\n base: '1rem',\r\n lg: '1.125rem',\r\n xl: '1.25rem',\r\n '2xl': '1.5rem',\r\n '3xl': '1.875rem',\r\n '4xl': '2.25rem',\r\n '5xl': '3rem',\r\n '6xl': '3.75rem',\r\n },\r\n fontWeight: {\r\n light: 300,\r\n normal: 400,\r\n medium: 500,\r\n semibold: 600,\r\n bold: 700,\r\n extrabold: 800,\r\n },\r\n lineHeight: {\r\n none: 1,\r\n tight: 1.25,\r\n snug: 1.375,\r\n normal: 1.5,\r\n relaxed: 1.625,\r\n loose: 2,\r\n },\r\n },\r\n\r\n spacing: {\r\n 0: '0',\r\n px: '1px',\r\n 0.5: '0.125rem',\r\n 1: '0.25rem',\r\n 1.5: '0.375rem',\r\n 2: '0.5rem',\r\n 2.5: '0.625rem',\r\n 3: '0.75rem',\r\n 3.5: '0.875rem',\r\n 4: '1rem',\r\n 5: '1.25rem',\r\n 6: '1.5rem',\r\n 7: '1.75rem',\r\n 8: '2rem',\r\n 9: '2.25rem',\r\n 10: '2.5rem',\r\n 11: '2.75rem',\r\n 12: '3rem',\r\n 14: '3.5rem',\r\n 16: '4rem',\r\n 20: '5rem',\r\n 24: '6rem',\r\n 28: '7rem',\r\n 32: '8rem',\r\n 36: '9rem',\r\n 40: '10rem',\r\n 44: '11rem',\r\n 48: '12rem',\r\n 52: '13rem',\r\n 56: '14rem',\r\n 60: '15rem',\r\n 64: '16rem',\r\n 72: '18rem',\r\n 80: '20rem',\r\n 96: '24rem',\r\n },\r\n\r\n borderRadius: {\r\n none: '0',\r\n sm: '0.125rem',\r\n default: '0.25rem',\r\n md: '0.375rem',\r\n lg: '0.5rem',\r\n xl: '0.75rem',\r\n '2xl': '1rem',\r\n '3xl': '1.5rem',\r\n full: '9999px',\r\n },\r\n\r\n breakpoints: {\r\n xs: '475px',\r\n sm: '640px',\r\n md: '768px',\r\n lg: '1024px',\r\n xl: '1280px',\r\n '2xl': '1536px',\r\n },\r\n\r\n zIndex: {\r\n hide: -1,\r\n auto: 'auto',\r\n base: 0,\r\n dropdown: 1000,\r\n sticky: 1020,\r\n fixed: 1030,\r\n modalBackdrop: 1040,\r\n modal: 1050,\r\n popover: 1060,\r\n tooltip: 1070,\r\n toast: 1080,\r\n },\r\n\r\n transitions: {\r\n none: 'none',\r\n fast: '150ms ease-in-out',\r\n normal: '200ms ease-in-out',\r\n slow: '300ms ease-in-out',\r\n slower: '500ms ease-in-out',\r\n colors: 'color 200ms ease-in-out, background-color 200ms ease-in-out, border-color 200ms ease-in-out',\r\n transform: 'transform 200ms ease-in-out',\r\n opacity: 'opacity 200ms ease-in-out',\r\n shadow: 'box-shadow 200ms ease-in-out',\r\n all: 'all 200ms ease-in-out',\r\n },\r\n\r\n components: {\r\n button: {\r\n bg: '#60a5fa',\r\n bgHover: '#3b82f6',\r\n bgActive: '#2563eb',\r\n bgDisabled: '#1e3a5f',\r\n color: '#0f172a',\r\n colorHover: '#0f172a',\r\n colorDisabled: '#64748b',\r\n border: 'transparent',\r\n borderHover: 'transparent',\r\n borderWidth: '1px',\r\n borderRadius: '0.375rem',\r\n shadow: '0 1px 3px 0 rgb(0 0 0 / 0.4)',\r\n shadowHover: '0 4px 6px -1px rgb(0 0 0 / 0.4)',\r\n paddingX: '1rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n variants: {\r\n primary: {\r\n bg: '#60a5fa',\r\n bgHover: '#3b82f6',\r\n color: '#0f172a',\r\n },\r\n secondary: {\r\n bg: '#818cf8',\r\n bgHover: '#6366f1',\r\n color: '#0f172a',\r\n },\r\n outline: {\r\n bg: 'transparent',\r\n bgHover: '#334155',\r\n color: '#f8fafc',\r\n border: '#475569',\r\n borderHover: '#64748b',\r\n },\r\n ghost: {\r\n bg: 'transparent',\r\n bgHover: '#334155',\r\n color: '#f8fafc',\r\n shadow: 'none',\r\n shadowHover: 'none',\r\n },\r\n link: {\r\n bg: 'transparent',\r\n bgHover: 'transparent',\r\n color: '#60a5fa',\r\n colorHover: '#3b82f6',\r\n shadow: 'none',\r\n shadowHover: 'none',\r\n paddingX: '0',\r\n paddingY: '0',\r\n },\r\n danger: {\r\n bg: '#f87171',\r\n bgHover: '#ef4444',\r\n color: '#0f172a',\r\n },\r\n success: {\r\n bg: '#4ade80',\r\n bgHover: '#22c55e',\r\n color: '#0f172a',\r\n },\r\n },\r\n sizes: {\r\n xs: {\r\n paddingX: '0.5rem',\r\n paddingY: '0.25rem',\r\n fontSize: '0.75rem',\r\n },\r\n sm: {\r\n paddingX: '0.75rem',\r\n paddingY: '0.375rem',\r\n fontSize: '0.875rem',\r\n },\r\n md: {\r\n paddingX: '1rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n },\r\n lg: {\r\n paddingX: '1.25rem',\r\n paddingY: '0.625rem',\r\n fontSize: '1rem',\r\n },\r\n xl: {\r\n paddingX: '1.5rem',\r\n paddingY: '0.75rem',\r\n fontSize: '1.125rem',\r\n },\r\n },\r\n },\r\n\r\n input: {\r\n bg: '#1e293b',\r\n bgFocus: '#1e293b',\r\n bgDisabled: '#334155',\r\n bgError: '#450a0a',\r\n color: '#f8fafc',\r\n colorPlaceholder: '#64748b',\r\n colorDisabled: '#64748b',\r\n border: '#475569',\r\n borderFocus: '#60a5fa',\r\n borderError: '#f87171',\r\n borderWidth: '1px',\r\n borderRadius: '0.375rem',\r\n shadow: '0 1px 2px 0 rgb(0 0 0 / 0.3)',\r\n shadowFocus: '0 0 0 3px rgb(96 165 250 / 0.2)',\r\n paddingX: '0.75rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n labelColor: '#e2e8f0',\r\n labelFontSize: '0.875rem',\r\n labelFontWeight: 500,\r\n helperColor: '#94a3b8',\r\n errorColor: '#f87171',\r\n sizes: {\r\n sm: {\r\n paddingX: '0.5rem',\r\n paddingY: '0.375rem',\r\n fontSize: '0.75rem',\r\n },\r\n md: {\r\n paddingX: '0.75rem',\r\n paddingY: '0.5rem',\r\n fontSize: '0.875rem',\r\n },\r\n lg: {\r\n paddingX: '1rem',\r\n paddingY: '0.625rem',\r\n fontSize: '1rem',\r\n },\r\n },\r\n },\r\n\r\n card: {\r\n bg: '#1e293b',\r\n bgHover: '#1e293b',\r\n border: '#334155',\r\n borderWidth: '1px',\r\n borderRadius: '0.5rem',\r\n shadow: '0 1px 3px 0 rgb(0 0 0 / 0.4)',\r\n shadowHover: '0 10px 15px -3px rgb(0 0 0 / 0.4)',\r\n padding: '1.5rem',\r\n headerBg: '#0f172a',\r\n headerBorder: '#334155',\r\n headerPadding: '1rem 1.5rem',\r\n footerBg: '#0f172a',\r\n footerBorder: '#334155',\r\n footerPadding: '1rem 1.5rem',\r\n },\r\n\r\n header: {\r\n bg: '#0f172a',\r\n bgScrolled: 'rgba(15, 23, 42, 0.95)',\r\n color: '#f8fafc',\r\n border: '#334155',\r\n shadow: 'none',\r\n shadowScrolled: '0 1px 3px 0 rgb(0 0 0 / 0.4)',\r\n height: '4rem',\r\n paddingX: '1.5rem',\r\n logoHeight: '2rem',\r\n navColor: '#94a3b8',\r\n navColorHover: '#f8fafc',\r\n navColorActive: '#60a5fa',\r\n navFontSize: '0.875rem',\r\n navFontWeight: 500,\r\n mobileMenuBg: '#1e293b',\r\n mobileMenuShadow: '0 10px 15px -3px rgb(0 0 0 / 0.4)',\r\n },\r\n\r\n footer: {\r\n bg: '#020617',\r\n color: '#94a3b8',\r\n colorMuted: '#64748b',\r\n border: '#1e293b',\r\n padding: '4rem 1.5rem',\r\n linkColor: '#94a3b8',\r\n linkColorHover: '#f8fafc',\r\n headingColor: '#f8fafc',\r\n headingFontSize: '1rem',\r\n headingFontWeight: 600,\r\n copyrightBg: '#0f172a',\r\n copyrightColor: '#64748b',\r\n },\r\n\r\n banner: {\r\n bg: '#1e3a5f',\r\n color: '#bfdbfe',\r\n border: '#3b82f6',\r\n borderRadius: '0.5rem',\r\n padding: '1rem 1.5rem',\r\n shadow: 'none',\r\n closeBg: 'transparent',\r\n closeColor: '#bfdbfe',\r\n variants: {\r\n info: {\r\n bg: '#1e3a5f',\r\n color: '#bfdbfe',\r\n border: '#3b82f6',\r\n },\r\n success: {\r\n bg: '#14532d',\r\n color: '#bbf7d0',\r\n border: '#22c55e',\r\n },\r\n warning: {\r\n bg: '#78350f',\r\n color: '#fde68a',\r\n border: '#f59e0b',\r\n },\r\n error: {\r\n bg: '#7f1d1d',\r\n color: '#fecaca',\r\n border: '#ef4444',\r\n },\r\n promo: {\r\n bg: '#581c87',\r\n color: '#e9d5ff',\r\n border: '#a855f7',\r\n },\r\n },\r\n },\r\n\r\n loader: {\r\n color: '#60a5fa',\r\n colorSecondary: '#334155',\r\n size: '2.5rem',\r\n borderWidth: '3px',\r\n overlayBg: 'rgba(15, 23, 42, 0.8)',\r\n overlayOpacity: 1,\r\n sizes: {\r\n xs: '1rem',\r\n sm: '1.5rem',\r\n md: '2.5rem',\r\n lg: '3.5rem',\r\n xl: '5rem',\r\n },\r\n },\r\n\r\n modal: {\r\n bg: '#1e293b',\r\n color: '#f8fafc',\r\n border: '#334155',\r\n borderRadius: '0.5rem',\r\n shadow: '0 25px 50px -12px rgb(0 0 0 / 0.6)',\r\n padding: '1.5rem',\r\n overlayBg: 'rgba(0, 0, 0, 0.7)',\r\n overlayOpacity: 1,\r\n headerBg: '#1e293b',\r\n headerBorder: '#334155',\r\n headerPadding: '1rem 1.5rem',\r\n footerBg: '#0f172a',\r\n footerBorder: '#334155',\r\n footerPadding: '1rem 1.5rem',\r\n closeBg: 'transparent',\r\n closeColor: '#94a3b8',\r\n closeHoverBg: '#334155',\r\n sizes: {\r\n sm: '24rem',\r\n md: '32rem',\r\n lg: '48rem',\r\n xl: '64rem',\r\n full: '100%',\r\n },\r\n },\r\n\r\n toast: {\r\n bg: '#1e293b',\r\n color: '#f8fafc',\r\n border: '#334155',\r\n borderRadius: '0.5rem',\r\n shadow: '0 10px 15px -3px rgb(0 0 0 / 0.4)',\r\n padding: '1rem',\r\n variants: {\r\n success: {\r\n bg: '#14532d',\r\n color: '#bbf7d0',\r\n border: '#22c55e',\r\n },\r\n error: {\r\n bg: '#7f1d1d',\r\n color: '#fecaca',\r\n border: '#ef4444',\r\n },\r\n warning: {\r\n bg: '#78350f',\r\n color: '#fde68a',\r\n border: '#f59e0b',\r\n },\r\n info: {\r\n bg: '#1e3a5f',\r\n color: '#bfdbfe',\r\n border: '#3b82f6',\r\n },\r\n },\r\n },\r\n\r\n newsletter: {\r\n bg: '#1e293b',\r\n color: '#f8fafc',\r\n border: '#334155',\r\n borderRadius: '0.5rem',\r\n padding: '2rem',\r\n titleColor: '#f8fafc',\r\n titleFontSize: '1.5rem',\r\n descColor: '#94a3b8',\r\n descFontSize: '1rem',\r\n inputBg: '#0f172a',\r\n inputBorder: '#475569',\r\n buttonBg: '#60a5fa',\r\n buttonColor: '#0f172a',\r\n },\r\n },\r\n};\r\n\r\nexport default defaultDarkTheme;\r\n","/**\r\n * Theme Utilities\r\n * Functions for theme manipulation, loading, and CSS variable generation\r\n */\r\n\r\nimport type { Theme, ThemeConfig, DeepPartial, ThemeMode } from './theme.types';\r\nimport type { BrandIdentity } from '../../../data/brand-identity';\r\nimport { defaultLightTheme } from './default-light-theme';\r\nimport { defaultDarkTheme } from './default-dark-theme';\r\n\r\n// ==========================================\r\n// DEEP MERGE UTILITY\r\n// ==========================================\r\n\r\n/**\r\n * Deep merge two objects\r\n */\r\nexport function deepMerge<T extends object>(target: T, source: DeepPartial<T>): T {\r\n const output = { ...target };\r\n\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n\r\n if (\r\n sourceValue &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (output as Record<string, unknown>)[key] = deepMerge(\r\n targetValue as object,\r\n sourceValue as DeepPartial<object>\r\n );\r\n } else if (sourceValue !== undefined) {\r\n (output as Record<string, unknown>)[key] = sourceValue;\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\n// ==========================================\r\n// THEME FROM BRAND IDENTITY\r\n// ==========================================\r\n\r\n/**\r\n * Generate theme colors from brand identity\r\n */\r\nexport function createThemeFromBrand(\r\n brand: BrandIdentity,\r\n baseTheme: Theme = defaultLightTheme\r\n): Theme {\r\n const { colors } = brand;\r\n\r\n const brandOverrides: DeepPartial<Theme> = {\r\n brand,\r\n colors: {\r\n brand: {\r\n primary: colors.primary,\r\n secondary: colors.secondary,\r\n accent: colors.accent || colors.primary,\r\n background: colors.background || baseTheme.colors.background.default,\r\n foreground: colors.foreground || baseTheme.colors.text.primary,\r\n },\r\n semantic: {\r\n primary: colors.primary,\r\n primaryHover: adjustColor(colors.primary, -10),\r\n primaryActive: adjustColor(colors.primary, -20),\r\n primaryDisabled: adjustColor(colors.primary, 40),\r\n secondary: colors.secondary,\r\n secondaryHover: adjustColor(colors.secondary, -10),\r\n secondaryActive: adjustColor(colors.secondary, -20),\r\n secondaryDisabled: adjustColor(colors.secondary, 40),\r\n accent: colors.accent || colors.primary,\r\n accentHover: adjustColor(colors.accent || colors.primary, -10),\r\n },\r\n },\r\n components: {\r\n button: {\r\n bg: colors.primary,\r\n bgHover: adjustColor(colors.primary, -10),\r\n bgActive: adjustColor(colors.primary, -20),\r\n variants: {\r\n primary: {\r\n bg: colors.primary,\r\n bgHover: adjustColor(colors.primary, -10),\r\n },\r\n secondary: {\r\n bg: colors.secondary,\r\n bgHover: adjustColor(colors.secondary, -10),\r\n },\r\n },\r\n },\r\n input: {\r\n borderFocus: colors.primary,\r\n },\r\n header: {\r\n navColorActive: colors.primary,\r\n },\r\n loader: {\r\n color: colors.primary,\r\n },\r\n newsletter: {\r\n buttonBg: colors.primary,\r\n },\r\n },\r\n };\r\n\r\n return deepMerge(baseTheme, brandOverrides);\r\n}\r\n\r\n// ==========================================\r\n// COLOR UTILITIES\r\n// ==========================================\r\n\r\n/**\r\n * Adjust color brightness\r\n * @param hex - Hex color\r\n * @param percent - Positive to lighten, negative to darken\r\n */\r\nexport function adjustColor(hex: string, percent: number): string {\r\n // Remove # if present\r\n hex = hex.replace(/^#/, '');\r\n\r\n // Parse hex\r\n let r = parseInt(hex.substring(0, 2), 16);\r\n let g = parseInt(hex.substring(2, 4), 16);\r\n let b = parseInt(hex.substring(4, 6), 16);\r\n\r\n // Adjust\r\n r = Math.min(255, Math.max(0, r + (r * percent) / 100));\r\n g = Math.min(255, Math.max(0, g + (g * percent) / 100));\r\n b = Math.min(255, Math.max(0, b + (b * percent) / 100));\r\n\r\n // Convert back to hex\r\n const toHex = (n: number) => Math.round(n).toString(16).padStart(2, '0');\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\n/**\r\n * Convert hex to rgba\r\n */\r\nexport function hexToRgba(hex: string, alpha: number = 1): string {\r\n hex = hex.replace(/^#/, '');\r\n\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n}\r\n\r\n/**\r\n * Get contrasting text color (black or white)\r\n */\r\nexport function getContrastColor(hex: string): string {\r\n hex = hex.replace(/^#/, '');\r\n\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n\r\n // Calculate relative luminance\r\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n\r\n return luminance > 0.5 ? '#000000' : '#ffffff';\r\n}\r\n\r\n// ==========================================\r\n// CSS VARIABLE GENERATION\r\n// ==========================================\r\n\r\n/**\r\n * Flatten nested object to CSS variables\r\n */\r\nexport function flattenToCssVars(\r\n obj: Record<string, unknown>,\r\n prefix: string = '--ec'\r\n): Record<string, string> {\r\n const result: Record<string, string> = {};\r\n\r\n function flatten(current: Record<string, unknown>, path: string[] = []) {\r\n for (const key in current) {\r\n if (Object.prototype.hasOwnProperty.call(current, key)) {\r\n const value = current[key];\r\n const newPath = [...path, key];\r\n const varName = `${prefix}-${newPath.join('-')}`;\r\n\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n !Array.isArray(value)\r\n ) {\r\n flatten(value as Record<string, unknown>, newPath);\r\n } else if (typeof value === 'string' || typeof value === 'number') {\r\n result[varName] = String(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n flatten(obj);\r\n return result;\r\n}\r\n\r\n/**\r\n * Generate CSS variables string from theme\r\n */\r\nexport function generateCssVars(theme: Theme, prefix: string = '--ec'): string {\r\n const cssVars = flattenToCssVars(theme as unknown as Record<string, unknown>, prefix);\r\n\r\n return Object.entries(cssVars)\r\n .map(([key, value]) => `${key}: ${value};`)\r\n .join('\\n');\r\n}\r\n\r\n/**\r\n * Inject CSS variables into document\r\n */\r\nexport function injectCssVars(theme: Theme, prefix: string = '--ec'): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n const cssVars = flattenToCssVars(theme as unknown as Record<string, unknown>, prefix);\r\n const root = document.documentElement;\r\n\r\n for (const [key, value] of Object.entries(cssVars)) {\r\n root.style.setProperty(key, value);\r\n }\r\n}\r\n\r\n/**\r\n * Remove CSS variables from document\r\n */\r\nexport function removeCssVars(prefix: string = '--ec'): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n const root = document.documentElement;\r\n const style = root.style;\r\n\r\n for (let i = style.length - 1; i >= 0; i--) {\r\n const name = style[i];\r\n if (name.startsWith(prefix)) {\r\n root.style.removeProperty(name);\r\n }\r\n }\r\n}\r\n\r\n// ==========================================\r\n// THEME LOADING\r\n// ==========================================\r\n\r\n/**\r\n * Load theme from URL\r\n */\r\nexport async function loadThemeFromUrl(url: string): Promise<DeepPartial<Theme> | null> {\r\n try {\r\n const response = await fetch(url, {\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n console.error(`Failed to load theme from ${url}: ${response.status}`);\r\n return null;\r\n }\r\n\r\n const themeData = await response.json();\r\n return themeData as DeepPartial<Theme>;\r\n } catch (error) {\r\n console.error(`Error loading theme from ${url}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Create theme with config\r\n */\r\nexport async function createTheme(config: ThemeConfig = {}): Promise<{\r\n light: Theme;\r\n dark: Theme;\r\n}> {\r\n let lightTheme = { ...defaultLightTheme };\r\n let darkTheme = { ...defaultDarkTheme };\r\n\r\n // Load theme from URL if provided\r\n if (config.themeUrl) {\r\n const urlTheme = await loadThemeFromUrl(config.themeUrl);\r\n if (urlTheme) {\r\n lightTheme = deepMerge(lightTheme, urlTheme);\r\n darkTheme = deepMerge(darkTheme, urlTheme);\r\n }\r\n }\r\n\r\n // Apply brand identity if provided\r\n if (config.brandIdentity) {\r\n lightTheme = createThemeFromBrand(config.brandIdentity, lightTheme);\r\n darkTheme = createThemeFromBrand(config.brandIdentity, darkTheme);\r\n }\r\n\r\n // Apply custom light overrides\r\n if (config.light) {\r\n lightTheme = deepMerge(lightTheme, config.light);\r\n }\r\n\r\n // Apply custom dark overrides\r\n if (config.dark) {\r\n darkTheme = deepMerge(darkTheme, config.dark);\r\n }\r\n\r\n return { light: lightTheme, dark: darkTheme };\r\n}\r\n\r\n// ==========================================\r\n// THEME PERSISTENCE\r\n// ==========================================\r\n\r\nconst DEFAULT_STORAGE_KEY = 'ec-theme-mode';\r\n\r\n/**\r\n * Save theme mode to storage\r\n */\r\nexport function saveThemeMode(mode: ThemeMode, storageKey: string = DEFAULT_STORAGE_KEY): void {\r\n if (typeof localStorage === 'undefined') return;\r\n\r\n try {\r\n localStorage.setItem(storageKey, mode);\r\n } catch (error) {\r\n console.error('Failed to save theme mode:', error);\r\n }\r\n}\r\n\r\n/**\r\n * Load theme mode from storage\r\n */\r\nexport function loadThemeMode(storageKey: string = DEFAULT_STORAGE_KEY): ThemeMode | null {\r\n if (typeof localStorage === 'undefined') return null;\r\n\r\n try {\r\n const mode = localStorage.getItem(storageKey);\r\n if (mode === 'light' || mode === 'dark' || mode === 'system') {\r\n return mode;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('Failed to load theme mode:', error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Get system preferred color scheme\r\n */\r\nexport function getSystemColorScheme(): 'light' | 'dark' {\r\n if (typeof window === 'undefined') return 'light';\r\n\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n}\r\n\r\n/**\r\n * Resolve theme mode (handle 'system')\r\n */\r\nexport function resolveThemeMode(mode: ThemeMode): 'light' | 'dark' {\r\n if (mode === 'system') {\r\n return getSystemColorScheme();\r\n }\r\n return mode;\r\n}\r\n\r\n// ==========================================\r\n// EXPORTS\r\n// ==========================================\r\n\r\nexport { defaultLightTheme, defaultDarkTheme };\r\n","/**\r\n * ThemeProvider Component\r\n * Global theme provider with light/dark mode support and brand identity integration\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n} from 'react';\r\n\r\nimport type {\r\n Theme,\r\n ThemeConfig,\r\n ThemeContextValue,\r\n ThemeMode,\r\n DeepPartial,\r\n} from './theme.types';\r\n\r\nimport {\r\n defaultLightTheme,\r\n defaultDarkTheme,\r\n deepMerge,\r\n createThemeFromBrand,\r\n loadThemeFromUrl,\r\n saveThemeMode,\r\n loadThemeMode,\r\n resolveThemeMode,\r\n injectCssVars,\r\n} from './theme-utils';\r\n\r\n// ==========================================\r\n// CONTEXT\r\n// ==========================================\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\r\n\r\n// ==========================================\r\n// HOOK\r\n// ==========================================\r\n\r\n/**\r\n * Hook to access theme context\r\n */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext);\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider');\r\n }\r\n\r\n return context;\r\n}\r\n\r\n// ==========================================\r\n// PROVIDER PROPS\r\n// ==========================================\r\n\r\nexport interface ThemeProviderProps {\r\n children: React.ReactNode;\r\n config?: ThemeConfig;\r\n /** Initial theme (overrides config) */\r\n initialTheme?: Theme;\r\n}\r\n\r\n// ==========================================\r\n// PROVIDER COMPONENT\r\n// ==========================================\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config = {},\r\n initialTheme,\r\n}: ThemeProviderProps): React.ReactElement {\r\n const {\r\n defaultMode = 'system',\r\n themeUrl,\r\n light: lightOverrides,\r\n dark: darkOverrides,\r\n brandIdentity,\r\n enableSystemTheme = true,\r\n persistTheme = true,\r\n storageKey = 'ec-theme-mode',\r\n cssVarPrefix = '--ec',\r\n } = config;\r\n\r\n // State\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n // Try to load from storage first\r\n if (persistTheme && typeof window !== 'undefined') {\r\n const savedMode = loadThemeMode(storageKey);\r\n if (savedMode) return savedMode;\r\n }\r\n return defaultMode;\r\n });\r\n\r\n const [lightTheme, setLightTheme] = useState<Theme>(() => {\r\n if (initialTheme && initialTheme.mode === 'light') return initialTheme;\r\n\r\n let theme = defaultLightTheme;\r\n\r\n // Apply brand identity\r\n if (brandIdentity) {\r\n theme = createThemeFromBrand(brandIdentity, theme);\r\n }\r\n\r\n // Apply overrides\r\n if (lightOverrides) {\r\n theme = deepMerge(theme, lightOverrides);\r\n }\r\n\r\n return theme;\r\n });\r\n\r\n const [darkTheme, setDarkTheme] = useState<Theme>(() => {\r\n if (initialTheme && initialTheme.mode === 'dark') return initialTheme;\r\n\r\n let theme = defaultDarkTheme;\r\n\r\n // Apply brand identity\r\n if (brandIdentity) {\r\n theme = createThemeFromBrand(brandIdentity, theme);\r\n }\r\n\r\n // Apply overrides\r\n if (darkOverrides) {\r\n theme = deepMerge(theme, darkOverrides);\r\n }\r\n\r\n return theme;\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(!!themeUrl);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // Computed values\r\n const resolvedMode = useMemo(() => resolveThemeMode(mode), [mode]);\r\n const theme = useMemo(\r\n () => (resolvedMode === 'dark' ? darkTheme : lightTheme),\r\n [resolvedMode, lightTheme, darkTheme]\r\n );\r\n const isDark = resolvedMode === 'dark';\r\n const isLight = resolvedMode === 'light';\r\n\r\n // Load theme from URL\r\n useEffect(() => {\r\n if (!themeUrl) return;\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n loadThemeFromUrl(themeUrl)\r\n .then((urlTheme) => {\r\n if (urlTheme) {\r\n setLightTheme((prev) => deepMerge(prev, urlTheme));\r\n setDarkTheme((prev) => deepMerge(prev, urlTheme));\r\n }\r\n })\r\n .catch((err) => {\r\n setError(err instanceof Error ? err.message : 'Failed to load theme');\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [themeUrl]);\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (typeof window !== 'undefined') {\r\n injectCssVars(theme, cssVarPrefix);\r\n }\r\n }, [theme, cssVarPrefix]);\r\n\r\n // Update document color scheme\r\n useEffect(() => {\r\n if (typeof document !== 'undefined') {\r\n document.documentElement.setAttribute('data-theme', resolvedMode);\r\n document.documentElement.style.colorScheme = resolvedMode;\r\n }\r\n }, [resolvedMode]);\r\n\r\n // Listen for system theme changes\r\n useEffect(() => {\r\n if (!enableSystemTheme || typeof window === 'undefined') return;\r\n\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n const handleChange = () => {\r\n if (mode === 'system') {\r\n // Force re-render by updating state\r\n setModeState('system');\r\n }\r\n };\r\n\r\n mediaQuery.addEventListener('change', handleChange);\r\n return () => mediaQuery.removeEventListener('change', handleChange);\r\n }, [mode, enableSystemTheme]);\r\n\r\n // Save mode to storage\r\n useEffect(() => {\r\n if (persistTheme && typeof window !== 'undefined') {\r\n saveThemeMode(mode, storageKey);\r\n }\r\n }, [mode, persistTheme, storageKey]);\r\n\r\n // Methods\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode);\r\n }, []);\r\n\r\n const toggleMode = useCallback(() => {\r\n setModeState((prev) => {\r\n const current = resolveThemeMode(prev);\r\n return current === 'dark' ? 'light' : 'dark';\r\n });\r\n }, []);\r\n\r\n const updateTheme = useCallback((updates: DeepPartial<Theme>) => {\r\n setLightTheme((prev) => deepMerge(prev, updates));\r\n setDarkTheme((prev) => deepMerge(prev, updates));\r\n }, []);\r\n\r\n const resetTheme = useCallback(() => {\r\n let light = defaultLightTheme;\r\n let dark = defaultDarkTheme;\r\n\r\n if (brandIdentity) {\r\n light = createThemeFromBrand(brandIdentity, light);\r\n dark = createThemeFromBrand(brandIdentity, dark);\r\n }\r\n\r\n if (lightOverrides) {\r\n light = deepMerge(light, lightOverrides);\r\n }\r\n\r\n if (darkOverrides) {\r\n dark = deepMerge(dark, darkOverrides);\r\n }\r\n\r\n setLightTheme(light);\r\n setDarkTheme(dark);\r\n }, [brandIdentity, lightOverrides, darkOverrides]);\r\n\r\n // Context value\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n setMode,\r\n toggleMode,\r\n updateTheme,\r\n resetTheme,\r\n isDark,\r\n isLight,\r\n isLoading,\r\n error,\r\n }),\r\n [theme, mode, setMode, toggleMode, updateTheme, resetTheme, isDark, isLight, isLoading, error]\r\n );\r\n\r\n return (\r\n <ThemeContext.Provider value={contextValue}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n}\r\n\r\n// ==========================================\r\n// STYLED WRAPPER (CSS-in-JS style)\r\n// ==========================================\r\n\r\n/**\r\n * Get CSS variable value from theme path\r\n * @example cssVar('colors.brand.primary') => 'var(--ec-colors-brand-primary)'\r\n */\r\nexport function cssVar(path: string, prefix: string = '--ec'): string {\r\n return `var(${prefix}-${path.replace(/\\./g, '-')})`;\r\n}\r\n\r\n/**\r\n * Get theme value directly\r\n */\r\nexport function useThemeValue<T>(\r\n selector: (theme: Theme) => T\r\n): T {\r\n const { theme } = useTheme();\r\n return selector(theme);\r\n}\r\n\r\n// ==========================================\r\n// THEME TOGGLE COMPONENT\r\n// ==========================================\r\n\r\nexport interface ThemeToggleProps {\r\n className?: string;\r\n size?: number;\r\n showLabel?: boolean;\r\n lightLabel?: string;\r\n darkLabel?: string;\r\n}\r\n\r\nexport function ThemeToggle({\r\n className = '',\r\n size = 24,\r\n showLabel = false,\r\n lightLabel = 'Light',\r\n darkLabel = 'Dark',\r\n}: ThemeToggleProps): React.ReactElement {\r\n const { isDark, toggleMode } = useTheme();\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={toggleMode}\r\n className={`ec-theme-toggle ${className}`}\r\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '0.5rem',\r\n borderRadius: '0.375rem',\r\n transition: 'background-color 200ms ease-in-out',\r\n }}\r\n >\r\n {isDark ? (\r\n // Sun icon for dark mode (click to go light)\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\r\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\r\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\r\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\r\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\r\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\r\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\r\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\r\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\r\n </svg>\r\n ) : (\r\n // Moon icon for light mode (click to go dark)\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\r\n </svg>\r\n )}\r\n {showLabel && <span>{isDark ? darkLabel : lightLabel}</span>}\r\n </button>\r\n );\r\n}\r\n\r\n// ==========================================\r\n// EXPORTS\r\n// ==========================================\r\n\r\nexport { ThemeContext };\r\n","/**\r\n * Astro Component Types\r\n * Highly typed props for all Astro components with Tailwind class support\r\n */\r\n\r\n// ==========================================\r\n// BASE TYPES\r\n// ==========================================\r\n\r\n/** Common Tailwind text colors */\r\nexport type TailwindTextColor =\r\n | 'text-white' | 'text-black'\r\n | 'text-gray-50' | 'text-gray-100' | 'text-gray-200' | 'text-gray-300' | 'text-gray-400'\r\n | 'text-gray-500' | 'text-gray-600' | 'text-gray-700' | 'text-gray-800' | 'text-gray-900'\r\n | 'text-slate-50' | 'text-slate-100' | 'text-slate-200' | 'text-slate-300' | 'text-slate-400'\r\n | 'text-slate-500' | 'text-slate-600' | 'text-slate-700' | 'text-slate-800' | 'text-slate-900'\r\n | 'text-blue-500' | 'text-blue-600' | 'text-blue-700'\r\n | 'text-green-500' | 'text-green-600' | 'text-green-700'\r\n | 'text-red-500' | 'text-red-600' | 'text-red-700'\r\n | 'text-yellow-500' | 'text-yellow-600' | 'text-yellow-700'\r\n | 'text-purple-500' | 'text-purple-600' | 'text-purple-700'\r\n | 'text-pink-500' | 'text-pink-600' | 'text-pink-700'\r\n | 'text-indigo-500' | 'text-indigo-600' | 'text-indigo-700'\r\n | string;\r\n\r\n/** Common Tailwind background colors */\r\nexport type TailwindBgColor =\r\n | 'bg-white' | 'bg-black' | 'bg-transparent'\r\n | 'bg-gray-50' | 'bg-gray-100' | 'bg-gray-200' | 'bg-gray-300' | 'bg-gray-400'\r\n | 'bg-gray-500' | 'bg-gray-600' | 'bg-gray-700' | 'bg-gray-800' | 'bg-gray-900'\r\n | 'bg-slate-50' | 'bg-slate-100' | 'bg-slate-200' | 'bg-slate-300' | 'bg-slate-400'\r\n | 'bg-slate-500' | 'bg-slate-600' | 'bg-slate-700' | 'bg-slate-800' | 'bg-slate-900'\r\n | 'bg-blue-500' | 'bg-blue-600' | 'bg-blue-700'\r\n | 'bg-green-500' | 'bg-green-600' | 'bg-green-700'\r\n | 'bg-red-500' | 'bg-red-600' | 'bg-red-700'\r\n | 'bg-yellow-500' | 'bg-yellow-600' | 'bg-yellow-700'\r\n | 'bg-purple-500' | 'bg-purple-600' | 'bg-purple-700'\r\n | 'bg-gradient-to-r' | 'bg-gradient-to-l' | 'bg-gradient-to-t' | 'bg-gradient-to-b'\r\n | 'bg-gradient-to-br' | 'bg-gradient-to-bl' | 'bg-gradient-to-tr' | 'bg-gradient-to-tl'\r\n | string;\r\n\r\n/** Common Tailwind padding */\r\nexport type TailwindPadding =\r\n | 'p-0' | 'p-1' | 'p-2' | 'p-3' | 'p-4' | 'p-5' | 'p-6' | 'p-8' | 'p-10' | 'p-12' | 'p-16' | 'p-20' | 'p-24'\r\n | 'px-0' | 'px-1' | 'px-2' | 'px-3' | 'px-4' | 'px-5' | 'px-6' | 'px-8' | 'px-10' | 'px-12' | 'px-16'\r\n | 'py-0' | 'py-1' | 'py-2' | 'py-3' | 'py-4' | 'py-5' | 'py-6' | 'py-8' | 'py-10' | 'py-12' | 'py-16' | 'py-20' | 'py-24'\r\n | 'pt-0' | 'pt-4' | 'pt-8' | 'pt-12' | 'pt-16' | 'pt-20' | 'pt-24'\r\n | 'pb-0' | 'pb-4' | 'pb-8' | 'pb-12' | 'pb-16' | 'pb-20' | 'pb-24'\r\n | string;\r\n\r\n/** Common Tailwind margin */\r\nexport type TailwindMargin =\r\n | 'm-0' | 'm-1' | 'm-2' | 'm-3' | 'm-4' | 'm-5' | 'm-6' | 'm-8' | 'm-auto'\r\n | 'mx-auto' | 'mx-0' | 'mx-4' | 'mx-6' | 'mx-8'\r\n | 'my-0' | 'my-4' | 'my-6' | 'my-8' | 'my-10' | 'my-12' | 'my-16'\r\n | 'mt-0' | 'mt-2' | 'mt-4' | 'mt-6' | 'mt-8' | 'mt-10' | 'mt-12' | 'mt-16'\r\n | 'mb-0' | 'mb-2' | 'mb-4' | 'mb-6' | 'mb-8' | 'mb-10' | 'mb-12' | 'mb-16'\r\n | 'ml-auto' | 'mr-auto'\r\n | string;\r\n\r\n/** Common Tailwind font sizes */\r\nexport type TailwindFontSize =\r\n | 'text-xs' | 'text-sm' | 'text-base' | 'text-lg' | 'text-xl'\r\n | 'text-2xl' | 'text-3xl' | 'text-4xl' | 'text-5xl' | 'text-6xl'\r\n | 'text-7xl' | 'text-8xl' | 'text-9xl'\r\n | string;\r\n\r\n/** Common Tailwind font weights */\r\nexport type TailwindFontWeight =\r\n | 'font-thin' | 'font-extralight' | 'font-light' | 'font-normal'\r\n | 'font-medium' | 'font-semibold' | 'font-bold' | 'font-extrabold' | 'font-black'\r\n | string;\r\n\r\n/** Common Tailwind border radius */\r\nexport type TailwindBorderRadius =\r\n | 'rounded-none' | 'rounded-sm' | 'rounded' | 'rounded-md'\r\n | 'rounded-lg' | 'rounded-xl' | 'rounded-2xl' | 'rounded-3xl' | 'rounded-full'\r\n | string;\r\n\r\n/** Common Tailwind shadow */\r\nexport type TailwindShadow =\r\n | 'shadow-none' | 'shadow-sm' | 'shadow' | 'shadow-md'\r\n | 'shadow-lg' | 'shadow-xl' | 'shadow-2xl' | 'shadow-inner'\r\n | string;\r\n\r\n/** Common Tailwind width */\r\nexport type TailwindWidth =\r\n | 'w-full' | 'w-screen' | 'w-auto' | 'w-fit' | 'w-max' | 'w-min'\r\n | 'w-1/2' | 'w-1/3' | 'w-2/3' | 'w-1/4' | 'w-3/4' | 'w-1/5' | 'w-2/5' | 'w-3/5' | 'w-4/5'\r\n | 'w-8' | 'w-10' | 'w-12' | 'w-16' | 'w-20' | 'w-24' | 'w-32' | 'w-40' | 'w-48' | 'w-56' | 'w-64'\r\n | 'max-w-sm' | 'max-w-md' | 'max-w-lg' | 'max-w-xl' | 'max-w-2xl' | 'max-w-3xl' | 'max-w-4xl' | 'max-w-5xl' | 'max-w-6xl' | 'max-w-7xl' | 'max-w-full'\r\n | string;\r\n\r\n/** Common Tailwind height */\r\nexport type TailwindHeight =\r\n | 'h-full' | 'h-screen' | 'h-auto' | 'h-fit' | 'h-max' | 'h-min'\r\n | 'h-8' | 'h-10' | 'h-12' | 'h-16' | 'h-20' | 'h-24' | 'h-32' | 'h-40' | 'h-48' | 'h-56' | 'h-64'\r\n | 'min-h-screen' | 'min-h-full'\r\n | string;\r\n\r\n/** Common Tailwind gap */\r\nexport type TailwindGap =\r\n | 'gap-0' | 'gap-1' | 'gap-2' | 'gap-3' | 'gap-4' | 'gap-5' | 'gap-6' | 'gap-8' | 'gap-10' | 'gap-12'\r\n | 'gap-x-0' | 'gap-x-2' | 'gap-x-4' | 'gap-x-6' | 'gap-x-8'\r\n | 'gap-y-0' | 'gap-y-2' | 'gap-y-4' | 'gap-y-6' | 'gap-y-8'\r\n | string;\r\n\r\n/** Custom class string */\r\nexport type TailwindClasses = string;\r\n\r\n// ==========================================\r\n// BUTTON COMPONENT\r\n// ==========================================\r\n\r\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'danger' | 'success';\r\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface ButtonProps {\r\n /** Button text content */\r\n text: string;\r\n /** Button variant */\r\n variant?: ButtonVariant;\r\n /** Button size */\r\n size?: ButtonSize;\r\n /** Full width button */\r\n fullWidth?: boolean;\r\n /** Disabled state */\r\n disabled?: boolean;\r\n /** Button type */\r\n type?: 'button' | 'submit' | 'reset';\r\n /** Link href (renders as anchor) */\r\n href?: string;\r\n /** Open in new tab */\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n /** Left icon (SVG string or component) */\r\n leftIcon?: string;\r\n /** Right icon (SVG string or component) */\r\n rightIcon?: string;\r\n /** Additional class override */\r\n class?: TailwindClasses;\r\n /** Container class */\r\n containerClass?: TailwindClasses;\r\n /** ID attribute */\r\n id?: string;\r\n /** Aria label */\r\n ariaLabel?: string;\r\n}\r\n\r\n// ==========================================\r\n// LOADER COMPONENT\r\n// ==========================================\r\n\r\nexport type LoaderVariant = 'spinner' | 'dots' | 'pulse' | 'bars';\r\nexport type LoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface LoaderProps {\r\n /** Loader variant */\r\n variant?: LoaderVariant;\r\n /** Loader size */\r\n size?: LoaderSize;\r\n /** Custom color */\r\n color?: TailwindTextColor;\r\n /** Label text */\r\n label?: string;\r\n /** Show label */\r\n showLabel?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// GRID/LAYOUT COMPONENTS\r\n// ==========================================\r\n\r\nexport interface ContainerProps {\r\n /** Max width */\r\n maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full';\r\n /** Padding */\r\n padding?: TailwindPadding;\r\n /** Center content */\r\n centered?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\nexport interface RowProps {\r\n /** Gap between columns */\r\n gap?: TailwindGap;\r\n /** Vertical alignment */\r\n alignItems?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\r\n /** Horizontal alignment */\r\n justifyContent?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\r\n /** Wrap behavior */\r\n wrap?: boolean;\r\n /** Reverse order */\r\n reverse?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\nexport interface ColProps {\r\n /** Column span (1-12) */\r\n span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full';\r\n /** Span on sm screens */\r\n sm?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full';\r\n /** Span on md screens */\r\n md?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full';\r\n /** Span on lg screens */\r\n lg?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full';\r\n /** Span on xl screens */\r\n xl?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full';\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\nexport interface TwoColumnProps {\r\n /** Left column content ratio */\r\n leftRatio?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;\r\n /** Gap between columns */\r\n gap?: TailwindGap;\r\n /** Reverse on mobile */\r\n reverseMobile?: boolean;\r\n /** Vertical alignment */\r\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Left column class */\r\n leftClass?: TailwindClasses;\r\n /** Right column class */\r\n rightClass?: TailwindClasses;\r\n}\r\n\r\nexport interface ThreeColumnProps {\r\n /** Gap between columns */\r\n gap?: TailwindGap;\r\n /** Vertical alignment */\r\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Column 1 class */\r\n col1Class?: TailwindClasses;\r\n /** Column 2 class */\r\n col2Class?: TailwindClasses;\r\n /** Column 3 class */\r\n col3Class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// HEADER COMPONENT\r\n// ==========================================\r\n\r\nexport interface NavLink {\r\n /** Link text */\r\n text: string;\r\n /** Link URL */\r\n href: string;\r\n /** Active state */\r\n active?: boolean;\r\n /** Open in new tab */\r\n external?: boolean;\r\n /** Dropdown items */\r\n children?: NavLink[];\r\n /** Icon SVG string */\r\n icon?: string;\r\n}\r\n\r\nexport interface HeaderProps {\r\n /** Logo image URL */\r\n logo?: string;\r\n /** Logo alt text */\r\n logoAlt?: string;\r\n /** Logo text (if no image) */\r\n logoText?: string;\r\n /** Navigation links */\r\n navLinks?: NavLink[];\r\n /** CTA button */\r\n cta?: {\r\n text: string;\r\n href: string;\r\n variant?: ButtonVariant;\r\n };\r\n /** Sticky header */\r\n sticky?: boolean;\r\n /** Transparent background */\r\n transparent?: boolean;\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color class */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Logo class */\r\n logoClass?: TailwindClasses;\r\n /** Nav class */\r\n navClass?: TailwindClasses;\r\n /** Container max width */\r\n maxWidth?: ContainerProps['maxWidth'];\r\n}\r\n\r\n// ==========================================\r\n// FOOTER COMPONENT\r\n// ==========================================\r\n\r\nexport interface FooterColumn {\r\n /** Column title */\r\n title: string;\r\n /** Column links */\r\n links: NavLink[];\r\n}\r\n\r\nexport interface SocialLink {\r\n /** Platform name */\r\n platform: 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'youtube' | 'github' | 'discord' | 'tiktok';\r\n /** Profile URL */\r\n href: string;\r\n /** Icon SVG (optional, defaults based on platform) */\r\n icon?: string;\r\n}\r\n\r\nexport interface FooterProps {\r\n /** Logo image URL */\r\n logo?: string;\r\n /** Logo alt text */\r\n logoAlt?: string;\r\n /** Logo text */\r\n logoText?: string;\r\n /** Company description */\r\n description?: string;\r\n /** Footer columns */\r\n columns?: FooterColumn[];\r\n /** Social links */\r\n socialLinks?: SocialLink[];\r\n /** Copyright text */\r\n copyright?: string;\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color class */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Container max width */\r\n maxWidth?: ContainerProps['maxWidth'];\r\n /** Show newsletter signup */\r\n showNewsletter?: boolean;\r\n /** Newsletter title */\r\n newsletterTitle?: string;\r\n /** Newsletter description */\r\n newsletterDescription?: string;\r\n}\r\n\r\n// ==========================================\r\n// BANNER/HERO COMPONENT\r\n// ==========================================\r\n\r\nexport interface BannerProps {\r\n /** Main heading */\r\n title: string;\r\n /** Subtitle/description */\r\n subtitle?: string;\r\n /** Background image URL */\r\n backgroundImage?: string;\r\n /** Background gradient/color */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Overlay opacity (0-100) */\r\n overlayOpacity?: number;\r\n /** Overlay color class */\r\n overlayClass?: string;\r\n /** Primary CTA */\r\n primaryCta?: {\r\n text: string;\r\n href: string;\r\n variant?: ButtonVariant;\r\n };\r\n /** Secondary CTA */\r\n secondaryCta?: {\r\n text: string;\r\n href: string;\r\n variant?: ButtonVariant;\r\n };\r\n /** Banner height */\r\n height?: 'sm' | 'md' | 'lg' | 'xl' | 'screen';\r\n /** Content alignment */\r\n align?: 'left' | 'center' | 'right';\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Title class */\r\n titleClass?: TailwindClasses;\r\n /** Subtitle class */\r\n subtitleClass?: TailwindClasses;\r\n /** Content container class */\r\n contentClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// CTA SECTION COMPONENT\r\n// ==========================================\r\n\r\nexport interface CtaSectionProps {\r\n /** Main heading */\r\n title: string;\r\n /** Description text */\r\n description?: string;\r\n /** Primary button */\r\n primaryButton?: {\r\n text: string;\r\n href: string;\r\n variant?: ButtonVariant;\r\n };\r\n /** Secondary button */\r\n secondaryButton?: {\r\n text: string;\r\n href: string;\r\n variant?: ButtonVariant;\r\n };\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Content alignment */\r\n align?: 'left' | 'center' | 'right';\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Padding */\r\n padding?: TailwindPadding;\r\n}\r\n\r\n// ==========================================\r\n// NEWSLETTER SECTION COMPONENT\r\n// ==========================================\r\n\r\nexport interface NewsletterSectionProps {\r\n /** Main heading */\r\n title?: string;\r\n /** Description text */\r\n description?: string;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Submit button text */\r\n buttonText?: string;\r\n /** Success message */\r\n successMessage?: string;\r\n /** Error message */\r\n errorMessage?: string;\r\n /** Form action URL */\r\n actionUrl?: string;\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Input class */\r\n inputClass?: TailwindClasses;\r\n /** Button class */\r\n buttonClass?: TailwindClasses;\r\n /** Show privacy note */\r\n showPrivacyNote?: boolean;\r\n /** Privacy note text */\r\n privacyNote?: string;\r\n}\r\n\r\n// ==========================================\r\n// CARD COMPONENT\r\n// ==========================================\r\n\r\nexport interface CardProps {\r\n /** Card title */\r\n title?: string;\r\n /** Card description */\r\n description?: string;\r\n /** Card image URL */\r\n image?: string;\r\n /** Image alt text */\r\n imageAlt?: string;\r\n /** Image position */\r\n imagePosition?: 'top' | 'bottom' | 'left' | 'right';\r\n /** Card link */\r\n href?: string;\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Border radius */\r\n rounded?: TailwindBorderRadius;\r\n /** Shadow */\r\n shadow?: TailwindShadow;\r\n /** Hover effect */\r\n hoverEffect?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Image class */\r\n imageClass?: TailwindClasses;\r\n /** Content class */\r\n contentClass?: TailwindClasses;\r\n /** Title class */\r\n titleClass?: TailwindClasses;\r\n /** Description class */\r\n descriptionClass?: TailwindClasses;\r\n /** Padding */\r\n padding?: TailwindPadding;\r\n}\r\n\r\n// ==========================================\r\n// FEATURE SECTION COMPONENT\r\n// ==========================================\r\n\r\nexport interface Feature {\r\n /** Feature title */\r\n title: string;\r\n /** Feature description */\r\n description: string;\r\n /** Feature icon (SVG string) */\r\n icon?: string;\r\n /** Feature image */\r\n image?: string;\r\n /** Feature link */\r\n href?: string;\r\n}\r\n\r\nexport interface FeatureSectionProps {\r\n /** Section title */\r\n title?: string;\r\n /** Section subtitle */\r\n subtitle?: string;\r\n /** Features array */\r\n features: Feature[];\r\n /** Layout columns */\r\n columns?: 2 | 3 | 4;\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Feature card class */\r\n featureClass?: TailwindClasses;\r\n /** Icon class */\r\n iconClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// TESTIMONIAL COMPONENT\r\n// ==========================================\r\n\r\nexport interface Testimonial {\r\n /** Author name */\r\n name: string;\r\n /** Author role/title */\r\n role?: string;\r\n /** Author company */\r\n company?: string;\r\n /** Author avatar URL */\r\n avatar?: string;\r\n /** Testimonial text */\r\n text: string;\r\n /** Rating (1-5) */\r\n rating?: 1 | 2 | 3 | 4 | 5;\r\n}\r\n\r\nexport interface TestimonialSectionProps {\r\n /** Section title */\r\n title?: string;\r\n /** Section subtitle */\r\n subtitle?: string;\r\n /** Testimonials array */\r\n testimonials: Testimonial[];\r\n /** Layout style */\r\n layout?: 'grid' | 'carousel' | 'single';\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Testimonial card class */\r\n cardClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// PRICING COMPONENT\r\n// ==========================================\r\n\r\nexport interface PricingFeature {\r\n /** Feature text */\r\n text: string;\r\n /** Included or not */\r\n included: boolean;\r\n}\r\n\r\nexport interface PricingPlan {\r\n /** Plan name */\r\n name: string;\r\n /** Plan description */\r\n description?: string;\r\n /** Price */\r\n price: string;\r\n /** Price period */\r\n period?: string;\r\n /** Features list */\r\n features: PricingFeature[];\r\n /** CTA button text */\r\n ctaText: string;\r\n /** CTA button href */\r\n ctaHref: string;\r\n /** Highlighted/popular plan */\r\n popular?: boolean;\r\n /** Badge text */\r\n badge?: string;\r\n}\r\n\r\nexport interface PricingSectionProps {\r\n /** Section title */\r\n title?: string;\r\n /** Section subtitle */\r\n subtitle?: string;\r\n /** Pricing plans */\r\n plans: PricingPlan[];\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n /** Plan card class */\r\n planClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// FAQ COMPONENT\r\n// ==========================================\r\n\r\nexport interface FaqItem {\r\n /** Question */\r\n question: string;\r\n /** Answer */\r\n answer: string;\r\n}\r\n\r\nexport interface FaqSectionProps {\r\n /** Section title */\r\n title?: string;\r\n /** Section subtitle */\r\n subtitle?: string;\r\n /** FAQ items */\r\n items: FaqItem[];\r\n /** Layout style */\r\n layout?: 'accordion' | 'grid' | 'list';\r\n /** Background class */\r\n bgClass?: TailwindBgColor;\r\n /** Text color */\r\n textClass?: TailwindTextColor;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// IMAGE COMPONENT\r\n// ==========================================\r\n\r\nexport interface ImageProps {\r\n /** Image source URL */\r\n src: string;\r\n /** Alt text */\r\n alt: string;\r\n /** Width */\r\n width?: number;\r\n /** Height */\r\n height?: number;\r\n /** Lazy loading */\r\n loading?: 'lazy' | 'eager';\r\n /** Object fit */\r\n objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\r\n /** Border radius */\r\n rounded?: TailwindBorderRadius;\r\n /** Shadow */\r\n shadow?: TailwindShadow;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// BADGE COMPONENT\r\n// ==========================================\r\n\r\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'outline';\r\n\r\nexport interface BadgeProps {\r\n /** Badge text */\r\n text: string;\r\n /** Badge variant */\r\n variant?: BadgeVariant;\r\n /** Size */\r\n size?: 'sm' | 'md' | 'lg';\r\n /** Rounded pill style */\r\n pill?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// DIVIDER COMPONENT\r\n// ==========================================\r\n\r\nexport interface DividerProps {\r\n /** Divider style */\r\n variant?: 'solid' | 'dashed' | 'dotted';\r\n /** Divider color */\r\n color?: string;\r\n /** Thickness */\r\n thickness?: string;\r\n /** Margin */\r\n margin?: TailwindMargin;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// SPACER COMPONENT\r\n// ==========================================\r\n\r\nexport interface SpacerProps {\r\n /** Spacer height */\r\n height?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\r\n /** Responsive height */\r\n responsive?: boolean;\r\n /** Additional classes */\r\n class?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// DUMMY DATA HELPERS\r\n// ==========================================\r\n\r\n/** Generate dummy image URL */\r\nexport function dummyImage(\r\n width: number,\r\n height: number,\r\n text?: string,\r\n bgColor: string = 'cccccc',\r\n textColor: string = '969696'\r\n): string {\r\n const label = text ? `&text=${encodeURIComponent(text)}` : '';\r\n return `https://dummyimage.com/${width}x${height}/${bgColor}/${textColor}${label}`;\r\n}\r\n\r\n/** Lorem ipsum generator */\r\nexport function loremIpsum(\r\n type: 'word' | 'sentence' | 'paragraph' = 'paragraph',\r\n count: number = 1\r\n): string {\r\n const words = [\r\n 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',\r\n 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore',\r\n 'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud',\r\n 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo',\r\n 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate',\r\n 'velit', 'esse', 'cillum', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint',\r\n 'occaecat', 'cupidatat', 'non', 'proident', 'sunt', 'culpa', 'qui', 'officia',\r\n 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum',\r\n ];\r\n\r\n const getWords = (n: number) => {\r\n const result: string[] = [];\r\n for (let i = 0; i < n; i++) {\r\n result.push(words[Math.floor(Math.random() * words.length)]);\r\n }\r\n return result;\r\n };\r\n\r\n const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\r\n\r\n if (type === 'word') {\r\n return getWords(count).join(' ');\r\n }\r\n\r\n if (type === 'sentence') {\r\n const sentences: string[] = [];\r\n for (let i = 0; i < count; i++) {\r\n const sentence = capitalize(getWords(Math.floor(Math.random() * 10) + 5).join(' ')) + '.';\r\n sentences.push(sentence);\r\n }\r\n return sentences.join(' ');\r\n }\r\n\r\n // paragraph\r\n const paragraphs: string[] = [];\r\n for (let i = 0; i < count; i++) {\r\n const sentences: string[] = [];\r\n const sentenceCount = Math.floor(Math.random() * 4) + 3;\r\n for (let j = 0; j < sentenceCount; j++) {\r\n sentences.push(capitalize(getWords(Math.floor(Math.random() * 10) + 5).join(' ')) + '.');\r\n }\r\n paragraphs.push(sentences.join(' '));\r\n }\r\n return paragraphs.join('\\n\\n');\r\n}\r\n\r\n// ==========================================\r\n// DEFAULT DUMMY DATA\r\n// ==========================================\r\n\r\nexport const dummyHeaderData: HeaderProps = {\r\n logo: dummyImage(120, 40, 'Logo'),\r\n logoAlt: 'Company Logo',\r\n navLinks: [\r\n { text: 'Home', href: '/', active: true },\r\n { text: 'About', href: '/about' },\r\n { text: 'Services', href: '/services' },\r\n { text: 'Blog', href: '/blog' },\r\n { text: 'Contact', href: '/contact' },\r\n ],\r\n cta: {\r\n text: 'Get Started',\r\n href: '/signup',\r\n variant: 'primary',\r\n },\r\n sticky: true,\r\n};\r\n\r\nexport const dummyFooterData: FooterProps = {\r\n logo: dummyImage(120, 40, 'Logo'),\r\n logoAlt: 'Company Logo',\r\n description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.',\r\n columns: [\r\n {\r\n title: 'Product',\r\n links: [\r\n { text: 'Features', href: '/features' },\r\n { text: 'Pricing', href: '/pricing' },\r\n { text: 'Integrations', href: '/integrations' },\r\n { text: 'API', href: '/api' },\r\n ],\r\n },\r\n {\r\n title: 'Company',\r\n links: [\r\n { text: 'About', href: '/about' },\r\n { text: 'Blog', href: '/blog' },\r\n { text: 'Careers', href: '/careers' },\r\n { text: 'Contact', href: '/contact' },\r\n ],\r\n },\r\n {\r\n title: 'Legal',\r\n links: [\r\n { text: 'Privacy Policy', href: '/privacy' },\r\n { text: 'Terms of Service', href: '/terms' },\r\n { text: 'Cookie Policy', href: '/cookies' },\r\n ],\r\n },\r\n ],\r\n socialLinks: [\r\n { platform: 'twitter', href: 'https://twitter.com' },\r\n { platform: 'facebook', href: 'https://facebook.com' },\r\n { platform: 'instagram', href: 'https://instagram.com' },\r\n { platform: 'linkedin', href: 'https://linkedin.com' },\r\n { platform: 'github', href: 'https://github.com' },\r\n ],\r\n copyright: `© ${new Date().getFullYear()} Company Name. All rights reserved.`,\r\n};\r\n\r\nexport const dummyBannerData: BannerProps = {\r\n title: 'Build Something Amazing Today',\r\n subtitle: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n backgroundImage: dummyImage(1920, 800, 'Hero+Background', '1e293b', '334155'),\r\n primaryCta: {\r\n text: 'Get Started Free',\r\n href: '/signup',\r\n variant: 'primary',\r\n },\r\n secondaryCta: {\r\n text: 'Learn More',\r\n href: '/about',\r\n variant: 'outline',\r\n },\r\n height: 'lg',\r\n align: 'center',\r\n};\r\n\r\nexport const dummyFeatures: Feature[] = [\r\n {\r\n title: 'Lightning Fast',\r\n description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\" /></svg>',\r\n },\r\n {\r\n title: 'Secure & Reliable',\r\n description: 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"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\" /></svg>',\r\n },\r\n {\r\n title: 'Easy to Use',\r\n description: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco.',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"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\" /></svg>',\r\n },\r\n];\r\n\r\nexport const dummyTestimonials: Testimonial[] = [\r\n {\r\n name: 'John Doe',\r\n role: 'CEO',\r\n company: 'Tech Corp',\r\n avatar: dummyImage(80, 80, 'JD', '3b82f6', 'ffffff'),\r\n text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n rating: 5,\r\n },\r\n {\r\n name: 'Jane Smith',\r\n role: 'CTO',\r\n company: 'Startup Inc',\r\n avatar: dummyImage(80, 80, 'JS', '10b981', 'ffffff'),\r\n text: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',\r\n rating: 5,\r\n },\r\n {\r\n name: 'Bob Wilson',\r\n role: 'Product Manager',\r\n company: 'Enterprise Co',\r\n avatar: dummyImage(80, 80, 'BW', 'f59e0b', 'ffffff'),\r\n text: 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',\r\n rating: 4,\r\n },\r\n];\r\n\r\nexport const dummyPricingPlans: PricingPlan[] = [\r\n {\r\n name: 'Starter',\r\n description: 'Perfect for individuals',\r\n price: '$9',\r\n period: '/month',\r\n features: [\r\n { text: '5 Projects', included: true },\r\n { text: '10GB Storage', included: true },\r\n { text: 'Email Support', included: true },\r\n { text: 'API Access', included: false },\r\n { text: 'Custom Domain', included: false },\r\n ],\r\n ctaText: 'Start Free Trial',\r\n ctaHref: '/signup?plan=starter',\r\n },\r\n {\r\n name: 'Professional',\r\n description: 'Best for growing teams',\r\n price: '$29',\r\n period: '/month',\r\n features: [\r\n { text: 'Unlimited Projects', included: true },\r\n { text: '100GB Storage', included: true },\r\n { text: 'Priority Support', included: true },\r\n { text: 'API Access', included: true },\r\n { text: 'Custom Domain', included: false },\r\n ],\r\n ctaText: 'Start Free Trial',\r\n ctaHref: '/signup?plan=pro',\r\n popular: true,\r\n badge: 'Most Popular',\r\n },\r\n {\r\n name: 'Enterprise',\r\n description: 'For large organizations',\r\n price: '$99',\r\n period: '/month',\r\n features: [\r\n { text: 'Unlimited Projects', included: true },\r\n { text: 'Unlimited Storage', included: true },\r\n { text: '24/7 Support', included: true },\r\n { text: 'API Access', included: true },\r\n { text: 'Custom Domain', included: true },\r\n ],\r\n ctaText: 'Contact Sales',\r\n ctaHref: '/contact?plan=enterprise',\r\n },\r\n];\r\n\r\nexport const dummyFaqItems: FaqItem[] = [\r\n {\r\n question: 'What is your refund policy?',\r\n answer: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n },\r\n {\r\n question: 'How do I cancel my subscription?',\r\n answer: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',\r\n },\r\n {\r\n question: 'Can I change my plan later?',\r\n answer: 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',\r\n },\r\n {\r\n question: 'Do you offer discounts for non-profits?',\r\n answer: 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',\r\n },\r\n];\r\n","/**\r\n * Form Types\r\n * Types for all form components\r\n */\r\n\r\n// ==========================================\r\n// COMMON TYPES\r\n// ==========================================\r\n\r\nexport type TailwindClasses = string;\r\n\r\nexport interface FormFieldError {\r\n field: string;\r\n message: string;\r\n}\r\n\r\nexport interface FormSubmitResult {\r\n success: boolean;\r\n message?: string;\r\n errors?: FormFieldError[];\r\n data?: Record<string, unknown>;\r\n}\r\n\r\n// ==========================================\r\n// CONTACT FORM\r\n// ==========================================\r\n\r\nexport interface ContactFormValues {\r\n name: string;\r\n email: string;\r\n phone?: string;\r\n subject?: string;\r\n message: string;\r\n}\r\n\r\nexport interface ContactFormProps {\r\n /** Form action URL */\r\n actionUrl?: string;\r\n /** Submit handler */\r\n onSubmit?: (values: ContactFormValues) => Promise<FormSubmitResult>;\r\n /** Initial values */\r\n initialValues?: Partial<ContactFormValues>;\r\n /** Show phone field */\r\n showPhone?: boolean;\r\n /** Show subject field */\r\n showSubject?: boolean;\r\n /** Subject options (if select) */\r\n subjectOptions?: string[];\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Success message */\r\n successMessage?: string;\r\n /** Container class */\r\n className?: TailwindClasses;\r\n /** Form class */\r\n formClass?: TailwindClasses;\r\n /** Input class */\r\n inputClass?: TailwindClasses;\r\n /** Label class */\r\n labelClass?: TailwindClasses;\r\n /** Button class */\r\n buttonClass?: TailwindClasses;\r\n /** Error class */\r\n errorClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// NEWSLETTER FORM\r\n// ==========================================\r\n\r\nexport interface NewsletterFormValues {\r\n email: string;\r\n firstName?: string;\r\n lastName?: string;\r\n}\r\n\r\nexport interface NewsletterFormProps {\r\n /** Form action URL */\r\n actionUrl?: string;\r\n /** Submit handler */\r\n onSubmit?: (values: NewsletterFormValues) => Promise<FormSubmitResult>;\r\n /** Initial values */\r\n initialValues?: Partial<NewsletterFormValues>;\r\n /** Show name fields */\r\n showName?: boolean;\r\n /** Placeholder */\r\n placeholder?: string;\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Success message */\r\n successMessage?: string;\r\n /** Layout */\r\n layout?: 'inline' | 'stacked';\r\n /** Container class */\r\n className?: TailwindClasses;\r\n /** Form class */\r\n formClass?: TailwindClasses;\r\n /** Input class */\r\n inputClass?: TailwindClasses;\r\n /** Button class */\r\n buttonClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// LOGIN FORM\r\n// ==========================================\r\n\r\nexport interface LoginFormValues {\r\n email: string;\r\n password: string;\r\n rememberMe?: boolean;\r\n}\r\n\r\nexport interface LoginFormProps {\r\n /** Form action URL */\r\n actionUrl?: string;\r\n /** Submit handler */\r\n onSubmit?: (values: LoginFormValues) => Promise<FormSubmitResult>;\r\n /** Initial values */\r\n initialValues?: Partial<LoginFormValues>;\r\n /** Show remember me */\r\n showRememberMe?: boolean;\r\n /** Forgot password link */\r\n forgotPasswordLink?: string;\r\n /** Register link */\r\n registerLink?: string;\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Success redirect URL */\r\n successRedirect?: string;\r\n /** Container class */\r\n className?: TailwindClasses;\r\n /** Form class */\r\n formClass?: TailwindClasses;\r\n /** Input class */\r\n inputClass?: TailwindClasses;\r\n /** Button class */\r\n buttonClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// REGISTER FORM\r\n// ==========================================\r\n\r\nexport interface RegisterFormValues {\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n password: string;\r\n confirmPassword: string;\r\n acceptTerms: boolean;\r\n}\r\n\r\nexport interface RegisterFormProps {\r\n /** Form action URL */\r\n actionUrl?: string;\r\n /** Submit handler */\r\n onSubmit?: (values: RegisterFormValues) => Promise<FormSubmitResult>;\r\n /** Initial values */\r\n initialValues?: Partial<RegisterFormValues>;\r\n /** Terms link */\r\n termsLink?: string;\r\n /** Privacy link */\r\n privacyLink?: string;\r\n /** Login link */\r\n loginLink?: string;\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Success redirect URL */\r\n successRedirect?: string;\r\n /** Password requirements */\r\n passwordRequirements?: {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecial?: boolean;\r\n };\r\n /** Container class */\r\n className?: TailwindClasses;\r\n /** Form class */\r\n formClass?: TailwindClasses;\r\n /** Input class */\r\n inputClass?: TailwindClasses;\r\n /** Button class */\r\n buttonClass?: TailwindClasses;\r\n}\r\n\r\n// ==========================================\r\n// VALIDATION SCHEMAS (for reference)\r\n// ==========================================\r\n\r\nexport const VALIDATION_MESSAGES = {\r\n required: 'This field is required',\r\n email: 'Please enter a valid email address',\r\n phone: 'Please enter a valid phone number',\r\n minLength: (min: number) => `Must be at least ${min} characters`,\r\n maxLength: (max: number) => `Must be no more than ${max} characters`,\r\n passwordMatch: 'Passwords must match',\r\n acceptTerms: 'You must accept the terms and conditions',\r\n passwordUppercase: 'Password must contain at least one uppercase letter',\r\n passwordLowercase: 'Password must contain at least one lowercase letter',\r\n passwordNumber: 'Password must contain at least one number',\r\n passwordSpecial: 'Password must contain at least one special character',\r\n} as const;\r\n","/**\r\n * Form Validation Schemas\r\n * Yup validation schemas for all forms\r\n */\r\n\r\nimport * as Yup from 'yup';\r\nimport { VALIDATION_MESSAGES } from './types';\r\n\r\n// ==========================================\r\n// CONTACT FORM SCHEMA\r\n// ==========================================\r\n\r\nexport const contactFormSchema = Yup.object().shape({\r\n name: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(2, VALIDATION_MESSAGES.minLength(2))\r\n .max(100, VALIDATION_MESSAGES.maxLength(100)),\r\n email: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .email(VALIDATION_MESSAGES.email),\r\n phone: Yup.string()\r\n .matches(\r\n /^[+]?[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/,\r\n VALIDATION_MESSAGES.phone\r\n )\r\n .nullable(),\r\n subject: Yup.string()\r\n .max(200, VALIDATION_MESSAGES.maxLength(200))\r\n .nullable(),\r\n message: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(10, VALIDATION_MESSAGES.minLength(10))\r\n .max(2000, VALIDATION_MESSAGES.maxLength(2000)),\r\n});\r\n\r\n// ==========================================\r\n// NEWSLETTER FORM SCHEMA\r\n// ==========================================\r\n\r\nexport const newsletterFormSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .email(VALIDATION_MESSAGES.email),\r\n firstName: Yup.string()\r\n .min(2, VALIDATION_MESSAGES.minLength(2))\r\n .max(50, VALIDATION_MESSAGES.maxLength(50))\r\n .nullable(),\r\n lastName: Yup.string()\r\n .min(2, VALIDATION_MESSAGES.minLength(2))\r\n .max(50, VALIDATION_MESSAGES.maxLength(50))\r\n .nullable(),\r\n});\r\n\r\n// ==========================================\r\n// LOGIN FORM SCHEMA\r\n// ==========================================\r\n\r\nexport const loginFormSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .email(VALIDATION_MESSAGES.email),\r\n password: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(8, VALIDATION_MESSAGES.minLength(8)),\r\n rememberMe: Yup.boolean(),\r\n});\r\n\r\n// ==========================================\r\n// REGISTER FORM SCHEMA\r\n// ==========================================\r\n\r\nexport interface PasswordRequirements {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecial?: boolean;\r\n}\r\n\r\nexport function createRegisterFormSchema(requirements: PasswordRequirements = {}) {\r\n const {\r\n minLength = 8,\r\n requireUppercase = true,\r\n requireLowercase = true,\r\n requireNumber = true,\r\n requireSpecial = false,\r\n } = requirements;\r\n\r\n let passwordSchema = Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(minLength, VALIDATION_MESSAGES.minLength(minLength));\r\n\r\n if (requireUppercase) {\r\n passwordSchema = passwordSchema.matches(\r\n /[A-Z]/,\r\n VALIDATION_MESSAGES.passwordUppercase\r\n );\r\n }\r\n\r\n if (requireLowercase) {\r\n passwordSchema = passwordSchema.matches(\r\n /[a-z]/,\r\n VALIDATION_MESSAGES.passwordLowercase\r\n );\r\n }\r\n\r\n if (requireNumber) {\r\n passwordSchema = passwordSchema.matches(\r\n /[0-9]/,\r\n VALIDATION_MESSAGES.passwordNumber\r\n );\r\n }\r\n\r\n if (requireSpecial) {\r\n passwordSchema = passwordSchema.matches(\r\n /[!@#$%^&*(),.?\":{}|<>]/,\r\n VALIDATION_MESSAGES.passwordSpecial\r\n );\r\n }\r\n\r\n return Yup.object().shape({\r\n firstName: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(2, VALIDATION_MESSAGES.minLength(2))\r\n .max(50, VALIDATION_MESSAGES.maxLength(50)),\r\n lastName: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .min(2, VALIDATION_MESSAGES.minLength(2))\r\n .max(50, VALIDATION_MESSAGES.maxLength(50)),\r\n email: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .email(VALIDATION_MESSAGES.email),\r\n password: passwordSchema,\r\n confirmPassword: Yup.string()\r\n .required(VALIDATION_MESSAGES.required)\r\n .oneOf([Yup.ref('password')], VALIDATION_MESSAGES.passwordMatch),\r\n acceptTerms: Yup.boolean()\r\n .oneOf([true], VALIDATION_MESSAGES.acceptTerms),\r\n });\r\n}\r\n\r\nexport const registerFormSchema = createRegisterFormSchema();\r\n","/**\r\n * Contact Form Component\r\n * React form with Formik and Yup validation\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Formik, Form, Field, ErrorMessage, FormikHelpers } from 'formik';\r\nimport type { ContactFormProps, ContactFormValues, FormSubmitResult } from './types';\r\nimport { contactFormSchema } from './validation';\r\n\r\nconst defaultInitialValues: ContactFormValues = {\r\n name: '',\r\n email: '',\r\n phone: '',\r\n subject: '',\r\n message: '',\r\n};\r\n\r\nconst defaultSubjectOptions = [\r\n 'General Inquiry',\r\n 'Support Request',\r\n 'Sales Question',\r\n 'Partnership',\r\n 'Feedback',\r\n 'Other',\r\n];\r\n\r\nexport function ContactForm({\r\n actionUrl,\r\n onSubmit,\r\n initialValues,\r\n showPhone = true,\r\n showSubject = true,\r\n subjectOptions = defaultSubjectOptions,\r\n submitText = 'Send Message',\r\n successMessage = 'Thank you! Your message has been sent successfully.',\r\n className = '',\r\n formClass = '',\r\n inputClass = '',\r\n labelClass = '',\r\n buttonClass = '',\r\n errorClass = '',\r\n}: ContactFormProps): React.ReactElement {\r\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n\r\n const mergedInitialValues: ContactFormValues = {\r\n ...defaultInitialValues,\r\n ...initialValues,\r\n };\r\n\r\n const baseInputClass = 'w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors';\r\n const baseLabelClass = 'block text-sm font-medium text-gray-700 mb-1';\r\n const baseErrorClass = 'text-sm text-red-600 mt-1';\r\n const baseButtonClass = 'w-full px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed';\r\n\r\n const handleSubmit = async (\r\n values: ContactFormValues,\r\n { setSubmitting, resetForm }: FormikHelpers<ContactFormValues>\r\n ) => {\r\n try {\r\n let result: FormSubmitResult;\r\n\r\n if (onSubmit) {\r\n result = await onSubmit(values);\r\n } else if (actionUrl) {\r\n const response = await fetch(actionUrl, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(values),\r\n });\r\n result = await response.json();\r\n } else {\r\n // Demo mode - simulate success\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n result = { success: true };\r\n }\r\n\r\n if (result.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || successMessage);\r\n resetForm();\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result.message || 'Something went wrong. Please try again.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage('An error occurred. Please try again later.');\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`ec-contact-form ${className}`}>\r\n {submitStatus === 'success' ? (\r\n <div className=\"p-6 bg-green-50 border border-green-200 rounded-lg text-center\">\r\n <svg className=\"w-12 h-12 text-green-500 mx-auto mb-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\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\" />\r\n </svg>\r\n <p className=\"text-green-800 font-medium\">{submitMessage}</p>\r\n <button\r\n type=\"button\"\r\n onClick={() => setSubmitStatus('idle')}\r\n className=\"mt-4 text-green-600 hover:text-green-700 text-sm font-medium\"\r\n >\r\n Send another message\r\n </button>\r\n </div>\r\n ) : (\r\n <Formik\r\n initialValues={mergedInitialValues}\r\n validationSchema={contactFormSchema}\r\n onSubmit={handleSubmit}\r\n >\r\n {({ isSubmitting, errors, touched }) => (\r\n <Form className={`space-y-4 ${formClass}`} noValidate>\r\n {/* Name Field */}\r\n <div>\r\n <label htmlFor=\"contact-name\" className={`${baseLabelClass} ${labelClass}`}>\r\n Name <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n type=\"text\"\r\n id=\"contact-name\"\r\n name=\"name\"\r\n placeholder=\"John Doe\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.name && touched.name ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"name\" component=\"p\" className={`${baseErrorClass} ${errorClass}`} />\r\n </div>\r\n\r\n {/* Email Field */}\r\n <div>\r\n <label htmlFor=\"contact-email\" className={`${baseLabelClass} ${labelClass}`}>\r\n Email <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n type=\"email\"\r\n id=\"contact-email\"\r\n name=\"email\"\r\n placeholder=\"john@example.com\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.email && touched.email ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"email\" component=\"p\" className={`${baseErrorClass} ${errorClass}`} />\r\n </div>\r\n\r\n {/* Phone Field */}\r\n {showPhone && (\r\n <div>\r\n <label htmlFor=\"contact-phone\" className={`${baseLabelClass} ${labelClass}`}>\r\n Phone\r\n </label>\r\n <Field\r\n type=\"tel\"\r\n id=\"contact-phone\"\r\n name=\"phone\"\r\n placeholder=\"+1 (555) 000-0000\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.phone && touched.phone ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"phone\" component=\"p\" className={`${baseErrorClass} ${errorClass}`} />\r\n </div>\r\n )}\r\n\r\n {/* Subject Field */}\r\n {showSubject && (\r\n <div>\r\n <label htmlFor=\"contact-subject\" className={`${baseLabelClass} ${labelClass}`}>\r\n Subject\r\n </label>\r\n <Field\r\n as=\"select\"\r\n id=\"contact-subject\"\r\n name=\"subject\"\r\n className={`${baseInputClass} ${inputClass}`}\r\n >\r\n <option value=\"\">Select a subject...</option>\r\n {subjectOptions.map((option) => (\r\n <option key={option} value={option}>\r\n {option}\r\n </option>\r\n ))}\r\n </Field>\r\n <ErrorMessage name=\"subject\" component=\"p\" className={`${baseErrorClass} ${errorClass}`} />\r\n </div>\r\n )}\r\n\r\n {/* Message Field */}\r\n <div>\r\n <label htmlFor=\"contact-message\" className={`${baseLabelClass} ${labelClass}`}>\r\n Message <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n as=\"textarea\"\r\n id=\"contact-message\"\r\n name=\"message\"\r\n rows={5}\r\n placeholder=\"Your message...\"\r\n className={`${baseInputClass} ${inputClass} resize-none ${\r\n errors.message && touched.message ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"message\" component=\"p\" className={`${baseErrorClass} ${errorClass}`} />\r\n </div>\r\n\r\n {/* Error Message */}\r\n {submitStatus === 'error' && (\r\n <div className=\"p-4 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-sm\">{submitMessage}</p>\r\n </div>\r\n )}\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n className={`${baseButtonClass} ${buttonClass}`}\r\n >\r\n {isSubmitting ? (\r\n <span className=\"flex items-center justify-center gap-2\">\r\n <svg className=\"animate-spin w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\r\n </svg>\r\n Sending...\r\n </span>\r\n ) : (\r\n submitText\r\n )}\r\n </button>\r\n </Form>\r\n )}\r\n </Formik>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ContactForm;\r\n","/**\r\n * Newsletter Form Component\r\n * React form with Formik and Yup validation\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Formik, Form, Field, ErrorMessage, FormikHelpers } from 'formik';\r\nimport type { NewsletterFormProps, NewsletterFormValues, FormSubmitResult } from './types';\r\nimport { newsletterFormSchema } from './validation';\r\n\r\nconst defaultInitialValues: NewsletterFormValues = {\r\n email: '',\r\n firstName: '',\r\n lastName: '',\r\n};\r\n\r\nexport function NewsletterForm({\r\n actionUrl,\r\n onSubmit,\r\n initialValues,\r\n showName = false,\r\n placeholder = 'Enter your email',\r\n submitText = 'Subscribe',\r\n successMessage = 'Thank you for subscribing!',\r\n layout = 'inline',\r\n className = '',\r\n formClass = '',\r\n inputClass = '',\r\n buttonClass = '',\r\n}: NewsletterFormProps): React.ReactElement {\r\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n\r\n const mergedInitialValues: NewsletterFormValues = {\r\n ...defaultInitialValues,\r\n ...initialValues,\r\n };\r\n\r\n const baseInputClass = 'px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors';\r\n const baseButtonClass = 'px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed';\r\n\r\n const handleSubmit = async (\r\n values: NewsletterFormValues,\r\n { setSubmitting, resetForm }: FormikHelpers<NewsletterFormValues>\r\n ) => {\r\n try {\r\n let result: FormSubmitResult;\r\n\r\n if (onSubmit) {\r\n result = await onSubmit(values);\r\n } else if (actionUrl) {\r\n const response = await fetch(actionUrl, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(values),\r\n });\r\n result = await response.json();\r\n } else {\r\n // Demo mode - simulate success\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n result = { success: true };\r\n }\r\n\r\n if (result.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || successMessage);\r\n resetForm();\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result.message || 'Something went wrong. Please try again.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage('An error occurred. Please try again later.');\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n };\r\n\r\n if (submitStatus === 'success') {\r\n return (\r\n <div className={`ec-newsletter-form ${className}`}>\r\n <div className=\"p-4 bg-green-50 border border-green-200 rounded-lg text-center\">\r\n <p className=\"text-green-800 font-medium\">{submitMessage}</p>\r\n <button\r\n type=\"button\"\r\n onClick={() => setSubmitStatus('idle')}\r\n className=\"mt-2 text-green-600 hover:text-green-700 text-sm\"\r\n >\r\n Subscribe another email\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`ec-newsletter-form ${className}`}>\r\n <Formik\r\n initialValues={mergedInitialValues}\r\n validationSchema={newsletterFormSchema}\r\n onSubmit={handleSubmit}\r\n >\r\n {({ isSubmitting, errors, touched }) => (\r\n <Form\r\n className={`${layout === 'inline' ? 'flex flex-col sm:flex-row gap-3' : 'space-y-4'} ${formClass}`}\r\n noValidate\r\n >\r\n {/* Name Fields */}\r\n {showName && (\r\n <div className={layout === 'inline' ? 'flex gap-3 flex-1' : 'grid grid-cols-2 gap-4'}>\r\n <div className=\"flex-1\">\r\n <Field\r\n type=\"text\"\r\n name=\"firstName\"\r\n placeholder=\"First name\"\r\n className={`w-full ${baseInputClass} ${inputClass} ${\r\n errors.firstName && touched.firstName ? 'border-red-500' : ''\r\n }`}\r\n />\r\n {layout === 'stacked' && (\r\n <ErrorMessage name=\"firstName\" component=\"p\" className=\"text-sm text-red-600 mt-1\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <Field\r\n type=\"text\"\r\n name=\"lastName\"\r\n placeholder=\"Last name\"\r\n className={`w-full ${baseInputClass} ${inputClass} ${\r\n errors.lastName && touched.lastName ? 'border-red-500' : ''\r\n }`}\r\n />\r\n {layout === 'stacked' && (\r\n <ErrorMessage name=\"lastName\" component=\"p\" className=\"text-sm text-red-600 mt-1\" />\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Email Field */}\r\n <div className={layout === 'inline' ? 'flex-1' : ''}>\r\n <Field\r\n type=\"email\"\r\n name=\"email\"\r\n placeholder={placeholder}\r\n className={`w-full ${baseInputClass} ${inputClass} ${\r\n errors.email && touched.email ? 'border-red-500' : ''\r\n }`}\r\n />\r\n {layout === 'stacked' && (\r\n <ErrorMessage name=\"email\" component=\"p\" className=\"text-sm text-red-600 mt-1\" />\r\n )}\r\n </div>\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n className={`${baseButtonClass} ${buttonClass} ${layout === 'stacked' ? 'w-full' : ''}`}\r\n >\r\n {isSubmitting ? (\r\n <span className=\"flex items-center justify-center gap-2\">\r\n <svg className=\"animate-spin w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\r\n </svg>\r\n Subscribing...\r\n </span>\r\n ) : (\r\n submitText\r\n )}\r\n </button>\r\n\r\n {/* Inline Error */}\r\n {layout === 'inline' && errors.email && touched.email && (\r\n <div className=\"w-full sm:w-auto\">\r\n <p className=\"text-sm text-red-600\">{errors.email}</p>\r\n </div>\r\n )}\r\n </Form>\r\n )}\r\n </Formik>\r\n\r\n {/* Error Message */}\r\n {submitStatus === 'error' && (\r\n <div className=\"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-sm\">{submitMessage}</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default NewsletterForm;\r\n","/**\r\n * Login Form Component\r\n * React form with Formik and Yup validation\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Formik, Form, Field, ErrorMessage, FormikHelpers } from 'formik';\r\nimport type { LoginFormProps, LoginFormValues, FormSubmitResult } from './types';\r\nimport { loginFormSchema } from './validation';\r\n\r\nconst defaultInitialValues: LoginFormValues = {\r\n email: '',\r\n password: '',\r\n rememberMe: false,\r\n};\r\n\r\nexport function LoginForm({\r\n actionUrl,\r\n onSubmit,\r\n initialValues,\r\n showRememberMe = true,\r\n forgotPasswordLink = '/forgot-password',\r\n registerLink = '/register',\r\n submitText = 'Sign In',\r\n successRedirect,\r\n className = '',\r\n formClass = '',\r\n inputClass = '',\r\n buttonClass = '',\r\n}: LoginFormProps): React.ReactElement {\r\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const mergedInitialValues: LoginFormValues = {\r\n ...defaultInitialValues,\r\n ...initialValues,\r\n };\r\n\r\n const baseInputClass = 'w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors';\r\n const baseLabelClass = 'block text-sm font-medium text-gray-700 mb-1';\r\n const baseErrorClass = 'text-sm text-red-600 mt-1';\r\n const baseButtonClass = 'w-full px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed';\r\n\r\n const handleSubmit = async (\r\n values: LoginFormValues,\r\n { setSubmitting }: FormikHelpers<LoginFormValues>\r\n ) => {\r\n try {\r\n let result: FormSubmitResult;\r\n\r\n if (onSubmit) {\r\n result = await onSubmit(values);\r\n } else if (actionUrl) {\r\n const response = await fetch(actionUrl, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(values),\r\n });\r\n result = await response.json();\r\n } else {\r\n // Demo mode - simulate success\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n result = { success: true };\r\n }\r\n\r\n if (result.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || 'Login successful!');\r\n if (successRedirect && typeof window !== 'undefined') {\r\n window.location.href = successRedirect;\r\n }\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result.message || 'Invalid email or password.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage('An error occurred. Please try again later.');\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`ec-login-form ${className}`}>\r\n <Formik\r\n initialValues={mergedInitialValues}\r\n validationSchema={loginFormSchema}\r\n onSubmit={handleSubmit}\r\n >\r\n {({ isSubmitting, errors, touched }) => (\r\n <Form className={`space-y-4 ${formClass}`} noValidate>\r\n {/* Email Field */}\r\n <div>\r\n <label htmlFor=\"login-email\" className={baseLabelClass}>\r\n Email\r\n </label>\r\n <Field\r\n type=\"email\"\r\n id=\"login-email\"\r\n name=\"email\"\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.email && touched.email ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"email\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n\r\n {/* Password Field */}\r\n <div>\r\n <label htmlFor=\"login-password\" className={baseLabelClass}>\r\n Password\r\n </label>\r\n <div className=\"relative\">\r\n <Field\r\n type={showPassword ? 'text' : 'password'}\r\n id=\"login-password\"\r\n name=\"password\"\r\n placeholder=\"••••••••\"\r\n autoComplete=\"current-password\"\r\n className={`${baseInputClass} ${inputClass} pr-12 ${\r\n errors.password && touched.password ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowPassword(!showPassword)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700\"\r\n tabIndex={-1}\r\n >\r\n {showPassword ? (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\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\" />\r\n </svg>\r\n ) : (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"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\" />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n <ErrorMessage name=\"password\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n\r\n {/* Remember Me & Forgot Password */}\r\n <div className=\"flex items-center justify-between\">\r\n {showRememberMe && (\r\n <label className=\"flex items-center gap-2 cursor-pointer\">\r\n <Field\r\n type=\"checkbox\"\r\n name=\"rememberMe\"\r\n className=\"w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\r\n />\r\n <span className=\"text-sm text-gray-600\">Remember me</span>\r\n </label>\r\n )}\r\n {forgotPasswordLink && (\r\n <a\r\n href={forgotPasswordLink}\r\n className=\"text-sm text-blue-600 hover:text-blue-700 font-medium\"\r\n >\r\n Forgot password?\r\n </a>\r\n )}\r\n </div>\r\n\r\n {/* Error Message */}\r\n {submitStatus === 'error' && (\r\n <div className=\"p-4 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-sm\">{submitMessage}</p>\r\n </div>\r\n )}\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n className={`${baseButtonClass} ${buttonClass}`}\r\n >\r\n {isSubmitting ? (\r\n <span className=\"flex items-center justify-center gap-2\">\r\n <svg className=\"animate-spin w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\r\n </svg>\r\n Signing in...\r\n </span>\r\n ) : (\r\n submitText\r\n )}\r\n </button>\r\n\r\n {/* Register Link */}\r\n {registerLink && (\r\n <p className=\"text-center text-sm text-gray-600\">\r\n Don't have an account?{' '}\r\n <a href={registerLink} className=\"text-blue-600 hover:text-blue-700 font-medium\">\r\n Sign up\r\n </a>\r\n </p>\r\n )}\r\n </Form>\r\n )}\r\n </Formik>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoginForm;\r\n","/**\r\n * Register Form Component\r\n * React form with Formik and Yup validation\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Formik, Form, Field, ErrorMessage, FormikHelpers } from 'formik';\r\nimport type { RegisterFormProps, RegisterFormValues, FormSubmitResult } from './types';\r\nimport { createRegisterFormSchema } from './validation';\r\n\r\nconst defaultInitialValues: RegisterFormValues = {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n password: '',\r\n confirmPassword: '',\r\n acceptTerms: false,\r\n};\r\n\r\nexport function RegisterForm({\r\n actionUrl,\r\n onSubmit,\r\n initialValues,\r\n termsLink = '/terms',\r\n privacyLink = '/privacy',\r\n loginLink = '/login',\r\n submitText = 'Create Account',\r\n successRedirect,\r\n passwordRequirements = {\r\n minLength: 8,\r\n requireUppercase: true,\r\n requireLowercase: true,\r\n requireNumber: true,\r\n requireSpecial: false,\r\n },\r\n className = '',\r\n formClass = '',\r\n inputClass = '',\r\n buttonClass = '',\r\n}: RegisterFormProps): React.ReactElement {\r\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\r\n const [submitMessage, setSubmitMessage] = useState('');\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\r\n\r\n const mergedInitialValues: RegisterFormValues = {\r\n ...defaultInitialValues,\r\n ...initialValues,\r\n };\r\n\r\n const validationSchema = createRegisterFormSchema(passwordRequirements);\r\n\r\n const baseInputClass = 'w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors';\r\n const baseLabelClass = 'block text-sm font-medium text-gray-700 mb-1';\r\n const baseErrorClass = 'text-sm text-red-600 mt-1';\r\n const baseButtonClass = 'w-full px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed';\r\n\r\n const handleSubmit = async (\r\n values: RegisterFormValues,\r\n { setSubmitting }: FormikHelpers<RegisterFormValues>\r\n ) => {\r\n try {\r\n let result: FormSubmitResult;\r\n\r\n if (onSubmit) {\r\n result = await onSubmit(values);\r\n } else if (actionUrl) {\r\n const response = await fetch(actionUrl, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(values),\r\n });\r\n result = await response.json();\r\n } else {\r\n // Demo mode - simulate success\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n result = { success: true };\r\n }\r\n\r\n if (result.success) {\r\n setSubmitStatus('success');\r\n setSubmitMessage(result.message || 'Account created successfully!');\r\n if (successRedirect && typeof window !== 'undefined') {\r\n window.location.href = successRedirect;\r\n }\r\n } else {\r\n setSubmitStatus('error');\r\n setSubmitMessage(result.message || 'Registration failed. Please try again.');\r\n }\r\n } catch (error) {\r\n setSubmitStatus('error');\r\n setSubmitMessage('An error occurred. Please try again later.');\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n };\r\n\r\n if (submitStatus === 'success') {\r\n return (\r\n <div className={`ec-register-form ${className}`}>\r\n <div className=\"p-6 bg-green-50 border border-green-200 rounded-lg text-center\">\r\n <svg className=\"w-12 h-12 text-green-500 mx-auto mb-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\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\" />\r\n </svg>\r\n <p className=\"text-green-800 font-medium\">{submitMessage}</p>\r\n {loginLink && (\r\n <a\r\n href={loginLink}\r\n className=\"inline-block mt-4 text-green-600 hover:text-green-700 font-medium\"\r\n >\r\n Sign in to your account\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`ec-register-form ${className}`}>\r\n <Formik\r\n initialValues={mergedInitialValues}\r\n validationSchema={validationSchema}\r\n onSubmit={handleSubmit}\r\n >\r\n {({ isSubmitting, errors, touched }) => (\r\n <Form className={`space-y-4 ${formClass}`} noValidate>\r\n {/* Name Fields */}\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\r\n <div>\r\n <label htmlFor=\"register-firstName\" className={baseLabelClass}>\r\n First Name <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n type=\"text\"\r\n id=\"register-firstName\"\r\n name=\"firstName\"\r\n placeholder=\"John\"\r\n autoComplete=\"given-name\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.firstName && touched.firstName ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"firstName\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n <div>\r\n <label htmlFor=\"register-lastName\" className={baseLabelClass}>\r\n Last Name <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n type=\"text\"\r\n id=\"register-lastName\"\r\n name=\"lastName\"\r\n placeholder=\"Doe\"\r\n autoComplete=\"family-name\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.lastName && touched.lastName ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"lastName\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n </div>\r\n\r\n {/* Email Field */}\r\n <div>\r\n <label htmlFor=\"register-email\" className={baseLabelClass}>\r\n Email <span className=\"text-red-500\">*</span>\r\n </label>\r\n <Field\r\n type=\"email\"\r\n id=\"register-email\"\r\n name=\"email\"\r\n placeholder=\"you@example.com\"\r\n autoComplete=\"email\"\r\n className={`${baseInputClass} ${inputClass} ${\r\n errors.email && touched.email ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <ErrorMessage name=\"email\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n\r\n {/* Password Field */}\r\n <div>\r\n <label htmlFor=\"register-password\" className={baseLabelClass}>\r\n Password <span className=\"text-red-500\">*</span>\r\n </label>\r\n <div className=\"relative\">\r\n <Field\r\n type={showPassword ? 'text' : 'password'}\r\n id=\"register-password\"\r\n name=\"password\"\r\n placeholder=\"••••••••\"\r\n autoComplete=\"new-password\"\r\n className={`${baseInputClass} ${inputClass} pr-12 ${\r\n errors.password && touched.password ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowPassword(!showPassword)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700\"\r\n tabIndex={-1}\r\n >\r\n {showPassword ? (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\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\" />\r\n </svg>\r\n ) : (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"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\" />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n <ErrorMessage name=\"password\" component=\"p\" className={baseErrorClass} />\r\n <p className=\"text-xs text-gray-500 mt-1\">\r\n Min {passwordRequirements.minLength} characters\r\n {passwordRequirements.requireUppercase && ', uppercase'}\r\n {passwordRequirements.requireLowercase && ', lowercase'}\r\n {passwordRequirements.requireNumber && ', number'}\r\n {passwordRequirements.requireSpecial && ', special character'}\r\n </p>\r\n </div>\r\n\r\n {/* Confirm Password Field */}\r\n <div>\r\n <label htmlFor=\"register-confirmPassword\" className={baseLabelClass}>\r\n Confirm Password <span className=\"text-red-500\">*</span>\r\n </label>\r\n <div className=\"relative\">\r\n <Field\r\n type={showConfirmPassword ? 'text' : 'password'}\r\n id=\"register-confirmPassword\"\r\n name=\"confirmPassword\"\r\n placeholder=\"••••••••\"\r\n autoComplete=\"new-password\"\r\n className={`${baseInputClass} ${inputClass} pr-12 ${\r\n errors.confirmPassword && touched.confirmPassword ? 'border-red-500 focus:ring-red-500' : ''\r\n }`}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700\"\r\n tabIndex={-1}\r\n >\r\n {showConfirmPassword ? (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\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\" />\r\n </svg>\r\n ) : (\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"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\" />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n <ErrorMessage name=\"confirmPassword\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n\r\n {/* Terms Checkbox */}\r\n <div>\r\n <label className=\"flex items-start gap-2 cursor-pointer\">\r\n <Field\r\n type=\"checkbox\"\r\n name=\"acceptTerms\"\r\n className=\"w-4 h-4 mt-1 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\r\n />\r\n <span className=\"text-sm text-gray-600\">\r\n I agree to the{' '}\r\n <a href={termsLink} className=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n Terms of Service\r\n </a>{' '}\r\n and{' '}\r\n <a href={privacyLink} className=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n Privacy Policy\r\n </a>\r\n <span className=\"text-red-500\"> *</span>\r\n </span>\r\n </label>\r\n <ErrorMessage name=\"acceptTerms\" component=\"p\" className={baseErrorClass} />\r\n </div>\r\n\r\n {/* Error Message */}\r\n {submitStatus === 'error' && (\r\n <div className=\"p-4 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-sm\">{submitMessage}</p>\r\n </div>\r\n )}\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n className={`${baseButtonClass} ${buttonClass}`}\r\n >\r\n {isSubmitting ? (\r\n <span className=\"flex items-center justify-center gap-2\">\r\n <svg className=\"animate-spin w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\r\n </svg>\r\n Creating account...\r\n </span>\r\n ) : (\r\n submitText\r\n )}\r\n </button>\r\n\r\n {/* Login Link */}\r\n {loginLink && (\r\n <p className=\"text-center text-sm text-gray-600\">\r\n Already have an account?{' '}\r\n <a href={loginLink} className=\"text-blue-600 hover:text-blue-700 font-medium\">\r\n Sign in\r\n </a>\r\n </p>\r\n )}\r\n </Form>\r\n )}\r\n </Formik>\r\n </div>\r\n );\r\n}\r\n\r\nexport default RegisterForm;\r\n"]}
|