@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.
Files changed (46) hide show
  1. package/README.md +121 -36
  2. package/dist/client/index.d.mts +3 -2
  3. package/dist/client/index.d.ts +3 -2
  4. package/dist/client/index.js +5059 -231
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/index.mjs +4951 -232
  7. package/dist/client/index.mjs.map +1 -1
  8. package/dist/client/utils/index.d.mts +123 -1
  9. package/dist/client/utils/index.d.ts +123 -1
  10. package/dist/client/utils/index.js +207 -0
  11. package/dist/client/utils/index.js.map +1 -1
  12. package/dist/client/utils/index.mjs +204 -1
  13. package/dist/client/utils/index.mjs.map +1 -1
  14. package/dist/index-BcxL4_V4.d.ts +2946 -0
  15. package/dist/{index-iTKxFa78.d.ts → index-DEzgM15j.d.ts} +10 -2
  16. package/dist/{index-ClWtDfwk.d.ts → index-DNFVgQx8.d.ts} +544 -2
  17. package/dist/{index-CcrANHAQ.d.mts → index-DbV04Dx8.d.mts} +10 -2
  18. package/dist/{index-DSW6JfD-.d.mts → index-DfqEP6Oe.d.mts} +544 -2
  19. package/dist/index-bvvCev9Q.d.mts +2946 -0
  20. package/dist/index.d.mts +433 -7
  21. package/dist/index.d.ts +433 -7
  22. package/dist/index.js +6101 -220
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +6083 -221
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/server/index.d.mts +1 -1
  27. package/dist/server/index.d.ts +1 -1
  28. package/dist/server/index.js +197 -0
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/index.mjs +194 -2
  31. package/dist/server/index.mjs.map +1 -1
  32. package/dist/server/utils/index.d.mts +73 -1
  33. package/dist/server/utils/index.d.ts +73 -1
  34. package/dist/server/utils/index.js +199 -0
  35. package/dist/server/utils/index.js.map +1 -1
  36. package/dist/server/utils/index.mjs +195 -1
  37. package/dist/server/utils/index.mjs.map +1 -1
  38. package/dist/shared/index.d.mts +1 -1
  39. package/dist/shared/index.d.ts +1 -1
  40. package/dist/shared/index.js +296 -0
  41. package/dist/shared/index.js.map +1 -1
  42. package/dist/shared/index.mjs +274 -1
  43. package/dist/shared/index.mjs.map +1 -1
  44. package/package.json +41 -4
  45. package/dist/index-BNdT-2X4.d.ts +0 -229
  46. package/dist/index-Du0LLt9f.d.mts +0 -229
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/index.ts","../src/server/enums/status.ts","../src/server/response/response-object.ts","../src/server/logger/winston-logger.ts","../src/server/db/mongoose-connect.ts","../src/server/middleware/auth.middleware.ts","../src/server/utils/filter-builder.ts","../src/server/utils/sanitize.ts","../src/client/index.ts","../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","../src/shared/index.ts","../src/shared/config/env.ts","../src/shared/constants/status-codes.ts","../src/shared/utils/date-time.ts","../src/shared/validation/index.ts","../src/data/index.ts","../src/data/countries.ts","../src/data/phone-codes.ts","../src/data/currencies.ts","../src/data/timezones.ts","../src/data/logos.ts"],"names":["StatusCode","StatusMessage","logger","statusCode","path","useState","useEffect","useCallback","query","addDays","endOfDay","formatDate","formatDateTime","formatRelativeTime","isFuture","isPast","isToday","startOfDay","format"],"mappings":"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","file":"index.mjs","sourcesContent":["// Server-side exports\r\nexport * from './response';\r\nexport * from './enums';\r\nexport * from './logger';\r\nexport * from './db';\r\nexport * from './middleware';\r\nexport * from './utils';\r\n","/**\r\n * HTTP Status Codes\r\n * Standard HTTP status codes used across all projects\r\n */\r\nexport enum StatusCode {\r\n // Success\r\n SUCCESS = 200,\r\n CREATED = 201,\r\n ACCEPTED = 202,\r\n NO_CONTENT = 204,\r\n\r\n // Client Errors\r\n BAD_REQUEST = 400,\r\n UNAUTHORIZED = 401,\r\n FORBIDDEN = 403,\r\n NOT_FOUND = 404,\r\n CONFLICT = 409,\r\n UNPROCESSABLE_ENTITY = 422,\r\n TOO_MANY_REQUESTS = 429,\r\n\r\n // Server Errors\r\n INTERNAL_ERROR = 500,\r\n NOT_IMPLEMENTED = 501,\r\n BAD_GATEWAY = 502,\r\n SERVICE_UNAVAILABLE = 503,\r\n}\r\n\r\n/**\r\n * Status Messages\r\n * Human-readable status messages\r\n */\r\nexport enum StatusMessage {\r\n SUCCESS = 'success',\r\n CREATED = 'created',\r\n ACCEPTED = 'accepted',\r\n NO_CONTENT = 'no-data-found',\r\n BAD_REQUEST = 'bad-request',\r\n UNAUTHORIZED = 'unauthorized',\r\n FORBIDDEN = 'forbidden',\r\n NOT_FOUND = 'not-found',\r\n CONFLICT = 'conflict',\r\n UNPROCESSABLE_ENTITY = 'validation-error',\r\n TOO_MANY_REQUESTS = 'rate-limit-exceeded',\r\n INTERNAL_ERROR = 'error',\r\n NOT_IMPLEMENTED = 'not-implemented',\r\n BAD_GATEWAY = 'bad-gateway',\r\n SERVICE_UNAVAILABLE = 'service-unavailable',\r\n}\r\n\r\n// Legacy aliases for backward compatibility\r\nexport const statusCode = StatusCode;\r\nexport const statusMessage = StatusMessage;\r\n\r\nexport default {\r\n StatusCode,\r\n StatusMessage,\r\n statusCode,\r\n statusMessage,\r\n};\r\n","import type { Response } from 'express';\r\nimport { StatusCode, StatusMessage } from '../enums/status';\r\n\r\n/**\r\n * Standard API Response Interface\r\n */\r\nexport interface ApiResponse<T = unknown> {\r\n message: string;\r\n data: T | null;\r\n status: string;\r\n statusCode: number;\r\n paginationData?: PaginationData;\r\n columns?: ColumnMetadata[];\r\n}\r\n\r\n/**\r\n * Pagination Data Interface\r\n */\r\nexport interface PaginationData {\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 * Column Metadata Interface (for dynamic tables)\r\n */\r\nexport interface ColumnMetadata {\r\n name: string;\r\n datatype: string;\r\n required: boolean;\r\n}\r\n\r\n/**\r\n * Extract column metadata from data array\r\n */\r\nexport const extractColumns = <T extends Record<string, unknown>>(\r\n data: T[]\r\n): ColumnMetadata[] => {\r\n if (!Array.isArray(data) || data.length === 0) {\r\n return [];\r\n }\r\n\r\n const sample = data[0];\r\n return Object.entries(sample).map(([key, value]) => {\r\n let datatype: string = typeof value;\r\n\r\n if (value === null) {\r\n datatype = 'null';\r\n } else if (Array.isArray(value)) {\r\n datatype = 'array';\r\n } else if (value instanceof Date) {\r\n datatype = 'date';\r\n } else if (typeof value === 'object') {\r\n datatype = 'object';\r\n }\r\n\r\n return {\r\n name: key,\r\n datatype,\r\n required: value !== null && value !== undefined,\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * Success Response (200)\r\n */\r\nexport const successResponse = <T>(\r\n res: Response,\r\n data: T,\r\n message = 'Operation successful'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n status: StatusMessage.SUCCESS,\r\n statusCode: StatusCode.SUCCESS,\r\n });\r\n};\r\n\r\n/**\r\n * Success Response with Array & Pagination (200)\r\n */\r\nexport const successResponseArr = <T>(\r\n res: Response,\r\n data: T[],\r\n paginationData: PaginationData = {},\r\n message = 'Operation successful'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n columns: extractColumns(data as Record<string, unknown>[]),\r\n paginationData,\r\n status: StatusMessage.SUCCESS,\r\n statusCode: StatusCode.SUCCESS,\r\n });\r\n};\r\n\r\n/**\r\n * Created Response (201)\r\n */\r\nexport const createdResponse = <T>(\r\n res: Response,\r\n data: T,\r\n message = 'Resource created successfully'\r\n): Response => {\r\n return res.status(StatusCode.CREATED).json({\r\n message,\r\n data,\r\n status: StatusMessage.CREATED,\r\n statusCode: StatusCode.CREATED,\r\n });\r\n};\r\n\r\n/**\r\n * No Content Response (204 as 200 with message)\r\n */\r\nexport const noContentResponse = <T = null>(\r\n res: Response,\r\n data: T = null as T,\r\n message = 'No data found'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n status: StatusMessage.NO_CONTENT,\r\n statusCode: StatusCode.NO_CONTENT,\r\n });\r\n};\r\n\r\n/**\r\n * Bad Request Response (400)\r\n */\r\nexport const badRequestResponse = (\r\n res: Response,\r\n message = 'Bad request',\r\n errors: unknown = null\r\n): Response => {\r\n return res.status(StatusCode.BAD_REQUEST).json({\r\n message,\r\n data: errors,\r\n status: StatusMessage.BAD_REQUEST,\r\n statusCode: StatusCode.BAD_REQUEST,\r\n });\r\n};\r\n\r\n/**\r\n * Unauthorized Response (401)\r\n */\r\nexport const unauthorizedResponse = (\r\n res: Response,\r\n message = 'Unauthorized access'\r\n): Response => {\r\n return res.status(StatusCode.UNAUTHORIZED).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.UNAUTHORIZED,\r\n statusCode: StatusCode.UNAUTHORIZED,\r\n });\r\n};\r\n\r\n/**\r\n * Forbidden Response (403)\r\n */\r\nexport const forbiddenResponse = (\r\n res: Response,\r\n message = 'Access forbidden'\r\n): Response => {\r\n return res.status(StatusCode.FORBIDDEN).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.FORBIDDEN,\r\n statusCode: StatusCode.FORBIDDEN,\r\n });\r\n};\r\n\r\n/**\r\n * Not Found Response (404)\r\n */\r\nexport const notFoundResponse = (\r\n res: Response,\r\n message = 'Resource not found'\r\n): Response => {\r\n return res.status(StatusCode.NOT_FOUND).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.NOT_FOUND,\r\n statusCode: StatusCode.NOT_FOUND,\r\n });\r\n};\r\n\r\n/**\r\n * Conflict Response (409)\r\n */\r\nexport const conflictResponse = (\r\n res: Response,\r\n message = 'Resource conflict'\r\n): Response => {\r\n return res.status(StatusCode.CONFLICT).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.CONFLICT,\r\n statusCode: StatusCode.CONFLICT,\r\n });\r\n};\r\n\r\n/**\r\n * Validation Error Response (422)\r\n */\r\nexport const validationErrorResponse = (\r\n res: Response,\r\n errors: unknown,\r\n message = 'Validation failed'\r\n): Response => {\r\n return res.status(StatusCode.UNPROCESSABLE_ENTITY).json({\r\n message,\r\n data: errors,\r\n status: StatusMessage.UNPROCESSABLE_ENTITY,\r\n statusCode: StatusCode.UNPROCESSABLE_ENTITY,\r\n });\r\n};\r\n\r\n/**\r\n * Error Response (500)\r\n */\r\nexport const errorResponse = (\r\n res: Response,\r\n error: unknown = null,\r\n message = 'Something went wrong'\r\n): Response => {\r\n return res.status(StatusCode.INTERNAL_ERROR).json({\r\n message,\r\n data: error,\r\n status: StatusMessage.INTERNAL_ERROR,\r\n statusCode: StatusCode.INTERNAL_ERROR,\r\n });\r\n};\r\n\r\n/**\r\n * Rate Limit Response (429)\r\n */\r\nexport const rateLimitResponse = (\r\n res: Response,\r\n message = 'Too many requests, please try again later'\r\n): Response => {\r\n return res.status(StatusCode.TOO_MANY_REQUESTS).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.TOO_MANY_REQUESTS,\r\n statusCode: StatusCode.TOO_MANY_REQUESTS,\r\n });\r\n};\r\n\r\nexport default {\r\n successResponse,\r\n successResponseArr,\r\n createdResponse,\r\n noContentResponse,\r\n badRequestResponse,\r\n unauthorizedResponse,\r\n forbiddenResponse,\r\n notFoundResponse,\r\n conflictResponse,\r\n validationErrorResponse,\r\n errorResponse,\r\n rateLimitResponse,\r\n extractColumns,\r\n};\r\n","import winston from 'winston';\r\nimport DailyRotateFile from 'winston-daily-rotate-file';\r\nimport path from 'path';\r\n\r\n/**\r\n * Logger Configuration Options\r\n */\r\nexport interface LoggerConfig {\r\n level?: string;\r\n logsDir?: string;\r\n maxSize?: string;\r\n maxFiles?: string;\r\n errorMaxFiles?: string;\r\n}\r\n\r\n/**\r\n * Default logger configuration\r\n */\r\nconst defaultConfig: LoggerConfig = {\r\n level: process.env.LOG_LEVEL || 'info',\r\n logsDir: 'logs',\r\n maxSize: '20m',\r\n maxFiles: '14d',\r\n errorMaxFiles: '30d',\r\n};\r\n\r\n// Define log levels\r\nconst levels = {\r\n error: 0,\r\n warn: 1,\r\n info: 2,\r\n http: 3,\r\n debug: 4,\r\n};\r\n\r\n// Define colors for each level\r\nconst colors = {\r\n error: 'red',\r\n warn: 'yellow',\r\n info: 'green',\r\n http: 'magenta',\r\n debug: 'blue',\r\n};\r\n\r\nwinston.addColors(colors);\r\n\r\n// JSON format for file logs\r\nconst fileFormat = winston.format.combine(\r\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\r\n winston.format.errors({ stack: true }),\r\n winston.format.splat(),\r\n winston.format.json()\r\n);\r\n\r\n// Colorized format for console\r\nconst consoleFormat = winston.format.combine(\r\n winston.format.colorize({ all: true }),\r\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\r\n winston.format.printf((info) => {\r\n const timestamp = info.timestamp as string | undefined;\r\n const level = info.level as string;\r\n const message = info.message as string;\r\n const stack = info.stack as string | undefined;\r\n return `${timestamp} [${level}]: ${message}${stack ? '\\n' + stack : ''}`;\r\n })\r\n);\r\n\r\n/**\r\n * Create a configured Winston logger instance\r\n */\r\nexport const createLogger = (config: LoggerConfig = {}) => {\r\n const finalConfig = { ...defaultConfig, ...config };\r\n\r\n const transports: winston.transport[] = [\r\n // Console transport\r\n new winston.transports.Console({\r\n format: consoleFormat,\r\n }),\r\n\r\n // Combined logs (all levels)\r\n new DailyRotateFile({\r\n filename: path.join(finalConfig.logsDir!, 'combined-%DATE%.log'),\r\n datePattern: 'YYYY-MM-DD',\r\n maxSize: finalConfig.maxSize,\r\n maxFiles: finalConfig.maxFiles,\r\n format: fileFormat,\r\n }),\r\n\r\n // Error logs only\r\n new DailyRotateFile({\r\n filename: path.join(finalConfig.logsDir!, 'error-%DATE%.log'),\r\n datePattern: 'YYYY-MM-DD',\r\n level: 'error',\r\n maxSize: finalConfig.maxSize,\r\n maxFiles: finalConfig.errorMaxFiles,\r\n format: fileFormat,\r\n }),\r\n ];\r\n\r\n return winston.createLogger({\r\n level: finalConfig.level,\r\n levels,\r\n format: fileFormat,\r\n transports,\r\n exitOnError: false,\r\n });\r\n};\r\n\r\n// Default logger instance\r\nexport const logger = createLogger();\r\n\r\n/**\r\n * Create a stream for Morgan HTTP logger\r\n */\r\nexport const createMorganStream = (loggerInstance: winston.Logger) => ({\r\n write: (message: string) => {\r\n loggerInstance.http(message.trim());\r\n },\r\n});\r\n\r\nexport const stream = createMorganStream(logger);\r\n\r\n/**\r\n * Simple logger for development (no file output)\r\n */\r\nconst serializeMeta = (meta: unknown): string => {\r\n if (meta === undefined || meta === null) return '';\r\n if (meta instanceof Error) {\r\n return JSON.stringify({ message: meta.message, stack: meta.stack }, null, 2);\r\n }\r\n try {\r\n return JSON.stringify(meta, null, 2);\r\n } catch {\r\n return String(meta);\r\n }\r\n};\r\n\r\nexport const simpleLogger = {\r\n info: (message: string, meta?: unknown) => {\r\n console.log(`[INFO] ${message}`, serializeMeta(meta));\r\n },\r\n error: (message: string, meta?: unknown) => {\r\n console.error(`[ERROR] ${message}`, serializeMeta(meta));\r\n },\r\n warn: (message: string, meta?: unknown) => {\r\n console.warn(`[WARN] ${message}`, serializeMeta(meta));\r\n },\r\n debug: (message: string, meta?: unknown) => {\r\n console.debug(`[DEBUG] ${message}`, serializeMeta(meta));\r\n },\r\n};\r\n\r\nexport default logger;\r\n","import mongoose, { ConnectOptions } from 'mongoose';\r\n\r\n/**\r\n * Database Connection Options\r\n */\r\nexport interface DbConnectionOptions {\r\n maxPoolSize?: number;\r\n minPoolSize?: number;\r\n socketTimeoutMS?: number;\r\n serverSelectionTimeoutMS?: number;\r\n maxIdleTimeMS?: number;\r\n retryWrites?: boolean;\r\n retryReads?: boolean;\r\n w?: 'majority' | number;\r\n}\r\n\r\n/**\r\n * Default connection options\r\n */\r\nconst defaultOptions: DbConnectionOptions = {\r\n maxPoolSize: process.env.NODE_ENV === 'production' ? 50 : 10,\r\n minPoolSize: process.env.NODE_ENV === 'production' ? 10 : 5,\r\n socketTimeoutMS: 45000,\r\n serverSelectionTimeoutMS: 10000,\r\n maxIdleTimeMS: 10000,\r\n retryWrites: true,\r\n retryReads: true,\r\n w: 'majority',\r\n};\r\n\r\n/**\r\n * Connect to MongoDB with mongoose\r\n * @param mongoUri - MongoDB connection string\r\n * @param options - Connection options\r\n * @param logger - Optional logger instance\r\n */\r\nexport const connectDB = async (\r\n mongoUri: string,\r\n options: DbConnectionOptions = {},\r\n logger?: { info: (msg: string, meta?: unknown) => void; error: (msg: string, meta?: unknown) => void }\r\n): Promise<typeof mongoose> => {\r\n // Check if already connected\r\n if (mongoose.connection.readyState === 1) {\r\n logger?.info('Database already connected, reusing connection');\r\n return mongoose;\r\n }\r\n\r\n const finalOptions: ConnectOptions = { ...defaultOptions, ...options };\r\n\r\n try {\r\n await mongoose.connect(mongoUri, finalOptions);\r\n logger?.info('MongoDB connected successfully');\r\n\r\n // Handle connection events\r\n mongoose.connection.on('error', (err: Error) => {\r\n logger?.error('MongoDB connection error', err);\r\n });\r\n\r\n mongoose.connection.on('disconnected', () => {\r\n logger?.info('MongoDB disconnected');\r\n });\r\n\r\n mongoose.connection.on('reconnected', () => {\r\n logger?.info('MongoDB reconnected');\r\n });\r\n\r\n return mongoose;\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n logger?.error('MongoDB connection failed', { error: errorMessage });\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Disconnect from MongoDB\r\n */\r\nexport const disconnectDB = async (\r\n logger?: { info: (msg: string) => void; error: (msg: string, meta?: unknown) => void }\r\n): Promise<void> => {\r\n try {\r\n await mongoose.disconnect();\r\n logger?.info('MongoDB disconnected successfully');\r\n } catch (error) {\r\n logger?.error('Error disconnecting from MongoDB', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get connection status\r\n */\r\nexport const getConnectionStatus = (): string => {\r\n const states: Record<number, string> = {\r\n 0: 'disconnected',\r\n 1: 'connected',\r\n 2: 'connecting',\r\n 3: 'disconnecting',\r\n };\r\n return states[mongoose.connection.readyState] || 'unknown';\r\n};\r\n\r\nexport default {\r\n connectDB,\r\n disconnectDB,\r\n getConnectionStatus,\r\n};\r\n","import type { Request, Response, NextFunction } from 'express';\r\nimport jwt from 'jsonwebtoken';\r\nimport { unauthorizedResponse, forbiddenResponse } from '../response/response-object';\r\n\r\n/**\r\n * Extended Request with auth information\r\n */\r\nexport interface AuthRequest extends Request {\r\n userId?: string;\r\n organizationId?: string;\r\n apiKey?: { _id: string; name: string };\r\n user?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * JWT Payload Interface\r\n */\r\nexport interface JWTPayload {\r\n userId: string;\r\n organizationId?: string;\r\n email?: string;\r\n role?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * JWT Authentication Middleware\r\n * Validates Bearer token from Authorization header\r\n */\r\nexport const authenticateJWT = (secretKey: string) => {\r\n return (req: AuthRequest, res: Response, next: NextFunction): void => {\r\n const authHeader = req.headers.authorization;\r\n\r\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\r\n unauthorizedResponse(res, 'Authorization header missing or malformed');\r\n return;\r\n }\r\n\r\n const token = authHeader.split(' ')[1];\r\n\r\n try {\r\n const decoded = jwt.verify(token, secretKey) as JWTPayload;\r\n\r\n req.userId = decoded.userId;\r\n req.organizationId = decoded.organizationId;\r\n req.user = decoded as Record<string, unknown>;\r\n\r\n if (!decoded.userId) {\r\n unauthorizedResponse(res, 'User ID not found in token');\r\n return;\r\n }\r\n\r\n next();\r\n } catch (err) {\r\n if (err instanceof jwt.TokenExpiredError) {\r\n unauthorizedResponse(res, 'Token has expired');\r\n return;\r\n }\r\n if (err instanceof jwt.JsonWebTokenError) {\r\n forbiddenResponse(res, 'Invalid token');\r\n return;\r\n }\r\n unauthorizedResponse(res, 'Token validation failed');\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Optional JWT Authentication Middleware\r\n * Validates token if present, but doesn't require it\r\n */\r\nexport const optionalAuthenticateJWT = (secretKey: string) => {\r\n return (req: AuthRequest, _res: Response, next: NextFunction): void => {\r\n const authHeader = req.headers.authorization;\r\n\r\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\r\n next();\r\n return;\r\n }\r\n\r\n const token = authHeader.split(' ')[1];\r\n\r\n try {\r\n const decoded = jwt.verify(token, secretKey) as JWTPayload;\r\n req.userId = decoded.userId;\r\n req.organizationId = decoded.organizationId;\r\n req.user = decoded as Record<string, unknown>;\r\n } catch {\r\n // Token invalid, but continue without auth\r\n }\r\n\r\n next();\r\n };\r\n};\r\n\r\n/**\r\n * API Key Authentication Middleware\r\n * Validates x-api-key header\r\n */\r\nexport const authenticateApiKey = (\r\n validateKeyFn: (key: string) => Promise<{\r\n valid: boolean;\r\n organizationId?: string;\r\n keyId?: string;\r\n keyName?: string;\r\n }>\r\n) => {\r\n return async (req: AuthRequest, res: Response, next: NextFunction): Promise<void> => {\r\n try {\r\n const apiKey = req.headers['x-api-key'] as string;\r\n\r\n if (!apiKey) {\r\n unauthorizedResponse(res, 'API key is required. Please provide x-api-key header');\r\n return;\r\n }\r\n\r\n const validation = await validateKeyFn(apiKey);\r\n\r\n if (!validation.valid) {\r\n unauthorizedResponse(res, 'Invalid or inactive API key');\r\n return;\r\n }\r\n\r\n if (validation.organizationId) {\r\n req.organizationId = validation.organizationId;\r\n }\r\n if (validation.keyId && validation.keyName) {\r\n req.apiKey = {\r\n _id: validation.keyId,\r\n name: validation.keyName,\r\n };\r\n }\r\n\r\n next();\r\n } catch {\r\n unauthorizedResponse(res, 'API key validation failed');\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Organization Header Middleware\r\n * Extracts organization ID from x-organization-id header\r\n */\r\nexport const extractOrganization = (req: AuthRequest, _res: Response, next: NextFunction): void => {\r\n const orgId = req.headers['x-organization-id'] as string;\r\n\r\n if (orgId) {\r\n req.organizationId = orgId;\r\n }\r\n\r\n next();\r\n};\r\n\r\n/**\r\n * Require Organization Middleware\r\n * Ensures organizationId is present in request\r\n */\r\nexport const requireOrganization = (req: AuthRequest, res: Response, next: NextFunction): void => {\r\n if (!req.organizationId) {\r\n unauthorizedResponse(res, 'Organization ID is required');\r\n return;\r\n }\r\n next();\r\n};\r\n\r\nexport default {\r\n authenticateJWT,\r\n optionalAuthenticateJWT,\r\n authenticateApiKey,\r\n extractOrganization,\r\n requireOrganization,\r\n};\r\n","/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\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 const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n","// Client-side exports\r\nexport * from './http';\r\nexport * from './logger';\r\nexport * from './utils';\r\nexport * from './hooks';\r\n","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","// Shared exports (used by both server and client)\r\nexport * from './types';\r\nexport * from './config';\r\nexport * from './constants';\r\nexport * from './utils';\r\nexport * from './validation';\r\n","/**\r\n * Environment Configuration\r\n * Shared config helpers for both client and server\r\n */\r\n\r\nexport interface EnvConfig {\r\n NODE_ENV: 'development' | 'production' | 'test';\r\n PORT?: number;\r\n API_URL?: string;\r\n DATABASE_URL?: string;\r\n JWT_SECRET?: string;\r\n JWT_EXPIRES_IN?: string;\r\n LOG_LEVEL?: string;\r\n [key: string]: string | number | boolean | undefined;\r\n}\r\n\r\n/**\r\n * Get environment variable with type safety\r\n */\r\nexport const getEnv = <T extends string | number | boolean>(\r\n key: string,\r\n defaultValue?: T\r\n): T => {\r\n const value = process.env[key];\r\n \r\n if (value === undefined) {\r\n if (defaultValue !== undefined) {\r\n return defaultValue;\r\n }\r\n throw new Error(`Environment variable ${key} is required but not defined`);\r\n }\r\n\r\n // Type inference based on default value\r\n if (typeof defaultValue === 'number') {\r\n return Number(value) as T;\r\n }\r\n if (typeof defaultValue === 'boolean') {\r\n return (value === 'true' || value === '1') as unknown as T;\r\n }\r\n \r\n return value as T;\r\n};\r\n\r\n/**\r\n * Get optional environment variable\r\n */\r\nexport const getEnvOptional = <T extends string | number | boolean>(\r\n key: string,\r\n defaultValue?: T\r\n): T | undefined => {\r\n const value = process.env[key];\r\n \r\n if (value === undefined) {\r\n return defaultValue;\r\n }\r\n\r\n if (typeof defaultValue === 'number') {\r\n return Number(value) as T;\r\n }\r\n if (typeof defaultValue === 'boolean') {\r\n return (value === 'true' || value === '1') as unknown as T;\r\n }\r\n \r\n return value as T;\r\n};\r\n\r\n/**\r\n * Check if environment is production\r\n */\r\nexport const isProd = (): boolean => {\r\n return process.env.NODE_ENV === 'production';\r\n};\r\n\r\n/**\r\n * Check if environment is development\r\n */\r\nexport const isDev = (): boolean => {\r\n return process.env.NODE_ENV === 'development';\r\n};\r\n\r\n/**\r\n * Check if environment is test\r\n */\r\nexport const isTest = (): boolean => {\r\n return process.env.NODE_ENV === 'test';\r\n};\r\n\r\n/**\r\n * Validate required environment variables\r\n */\r\nexport const validateEnv = (requiredVars: string[]): void => {\r\n const missing = requiredVars.filter((key) => !process.env[key]);\r\n \r\n if (missing.length > 0) {\r\n throw new Error(\r\n `Missing required environment variables: ${missing.join(', ')}`\r\n );\r\n }\r\n};\r\n\r\nexport default {\r\n getEnv,\r\n getEnvOptional,\r\n isProd,\r\n isDev,\r\n isTest,\r\n validateEnv,\r\n};\r\n","/**\r\n * HTTP Status Codes\r\n */\r\nexport const HTTP_STATUS = {\r\n // Success\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NO_CONTENT: 204,\r\n\r\n // Redirection\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n NOT_MODIFIED: 304,\r\n TEMPORARY_REDIRECT: 307,\r\n PERMANENT_REDIRECT: 308,\r\n\r\n // Client Errors\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n UNPROCESSABLE_ENTITY: 422,\r\n TOO_MANY_REQUESTS: 429,\r\n\r\n // Server Errors\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n} as const;\r\n\r\nexport type HttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\r\n\r\n/**\r\n * HTTP Status Messages\r\n */\r\nexport const HTTP_STATUS_MESSAGES: Record<number, string> = {\r\n [HTTP_STATUS.OK]: 'OK',\r\n [HTTP_STATUS.CREATED]: 'Created',\r\n [HTTP_STATUS.ACCEPTED]: 'Accepted',\r\n [HTTP_STATUS.NO_CONTENT]: 'No Content',\r\n [HTTP_STATUS.BAD_REQUEST]: 'Bad Request',\r\n [HTTP_STATUS.UNAUTHORIZED]: 'Unauthorized',\r\n [HTTP_STATUS.FORBIDDEN]: 'Forbidden',\r\n [HTTP_STATUS.NOT_FOUND]: 'Not Found',\r\n [HTTP_STATUS.METHOD_NOT_ALLOWED]: 'Method Not Allowed',\r\n [HTTP_STATUS.CONFLICT]: 'Conflict',\r\n [HTTP_STATUS.UNPROCESSABLE_ENTITY]: 'Unprocessable Entity',\r\n [HTTP_STATUS.TOO_MANY_REQUESTS]: 'Too Many Requests',\r\n [HTTP_STATUS.INTERNAL_SERVER_ERROR]: 'Internal Server Error',\r\n [HTTP_STATUS.SERVICE_UNAVAILABLE]: 'Service Unavailable',\r\n};\r\n\r\n/**\r\n * Common Status Values\r\n */\r\nexport const STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n APPROVED: 'approved',\r\n REJECTED: 'rejected',\r\n DELETED: 'deleted',\r\n ARCHIVED: 'archived',\r\n DRAFT: 'draft',\r\n PUBLISHED: 'published',\r\n SUSPENDED: 'suspended',\r\n} as const;\r\n\r\nexport type StatusValue = (typeof STATUS)[keyof typeof STATUS];\r\n\r\n/**\r\n * User Status Values\r\n */\r\nexport const USER_STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n SUSPENDED: 'suspended',\r\n BANNED: 'banned',\r\n} as const;\r\n\r\nexport type UserStatusValue = (typeof USER_STATUS)[keyof typeof USER_STATUS];\r\n\r\n/**\r\n * Common Roles\r\n */\r\nexport const ROLES = {\r\n ADMIN: 'admin',\r\n USER: 'user',\r\n MODERATOR: 'moderator',\r\n GUEST: 'guest',\r\n SUPER_ADMIN: 'super_admin',\r\n} as const;\r\n\r\nexport type RoleValue = (typeof ROLES)[keyof typeof ROLES];\r\n\r\n/**\r\n * Pagination Defaults\r\n */\r\nexport const PAGINATION = {\r\n DEFAULT_PAGE: 1,\r\n DEFAULT_LIMIT: 10,\r\n MAX_LIMIT: 100,\r\n} as const;\r\n\r\n/**\r\n * Token Types\r\n */\r\nexport const TOKEN_TYPES = {\r\n ACCESS: 'access',\r\n REFRESH: 'refresh',\r\n RESET_PASSWORD: 'reset_password',\r\n EMAIL_VERIFICATION: 'email_verification',\r\n} as const;\r\n\r\nexport type TokenType = (typeof TOKEN_TYPES)[keyof typeof TOKEN_TYPES];\r\n\r\nexport default {\r\n HTTP_STATUS,\r\n HTTP_STATUS_MESSAGES,\r\n STATUS,\r\n USER_STATUS,\r\n ROLES,\r\n PAGINATION,\r\n TOKEN_TYPES,\r\n};\r\n","/**\r\n * Enhanced Date/Time utilities using date-fns with timezone support\r\n * Deep level date handling for all common operations\r\n */\r\nimport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n} from 'date-fns';\r\n\r\nimport { formatInTimeZone, toZonedTime, fromZonedTime } from 'date-fns-tz';\r\n\r\n// Re-export all date-fns functions for convenience\r\nexport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n formatInTimeZone,\r\n toZonedTime,\r\n fromZonedTime,\r\n};\r\n\r\n/**\r\n * Date input type - accepts Date, string (ISO), or timestamp\r\n */\r\nexport type DateInput = Date | string | number;\r\n\r\n/**\r\n * Parse any date input to Date object\r\n */\r\nexport const parseDate = (date: DateInput): Date => {\r\n if (date instanceof Date) return date;\r\n if (typeof date === 'string') return parseISO(date);\r\n return new Date(date);\r\n};\r\n\r\n/**\r\n * Check if date input is valid\r\n */\r\nexport const isValidDate = (date: DateInput): boolean => {\r\n const parsed = parseDate(date);\r\n return isValid(parsed);\r\n};\r\n\r\n// ==========================================\r\n// FORMAT FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Format presets for common date formats\r\n */\r\nexport const DATE_FORMATS = {\r\n // Date only\r\n DATE_SHORT: 'MM/dd/yyyy', // 01/15/2026\r\n DATE_MEDIUM: 'MMM d, yyyy', // Jan 15, 2026\r\n DATE_LONG: 'MMMM d, yyyy', // January 15, 2026\r\n DATE_FULL: 'EEEE, MMMM d, yyyy', // Friday, January 15, 2026\r\n DATE_ISO: 'yyyy-MM-dd', // 2026-01-15\r\n\r\n // Time only\r\n TIME_SHORT: 'h:mm a', // 3:30 PM\r\n TIME_MEDIUM: 'h:mm:ss a', // 3:30:45 PM\r\n TIME_24H: 'HH:mm', // 15:30\r\n TIME_24H_FULL: 'HH:mm:ss', // 15:30:45\r\n\r\n // Date and time\r\n DATETIME_SHORT: 'MM/dd/yyyy h:mm a', // 01/15/2026 3:30 PM\r\n DATETIME_MEDIUM: 'MMM d, yyyy h:mm a', // Jan 15, 2026 3:30 PM\r\n DATETIME_LONG: 'MMMM d, yyyy h:mm a', // January 15, 2026 3:30 PM\r\n DATETIME_FULL: 'EEEE, MMMM d, yyyy h:mm a', // Friday, January 15, 2026 3:30 PM\r\n DATETIME_ISO: \"yyyy-MM-dd'T'HH:mm:ss\", // 2026-01-15T15:30:45\r\n\r\n // Special formats\r\n MONTH_YEAR: 'MMMM yyyy', // January 2026\r\n MONTH_DAY: 'MMM d', // Jan 15\r\n DAY_MONTH: 'd MMM', // 15 Jan\r\n WEEKDAY: 'EEEE', // Friday\r\n WEEKDAY_SHORT: 'EEE', // Fri\r\n} as const;\r\n\r\n/**\r\n * Format date with preset or custom format\r\n */\r\nexport const formatDate = (date: DateInput, formatStr: string = DATE_FORMATS.DATE_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date with time\r\n */\r\nexport const formatDateTime = (date: DateInput, formatStr: string = DATE_FORMATS.DATETIME_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date in a specific timezone\r\n */\r\nexport const formatDateInTimezone = (\r\n date: DateInput,\r\n timezone: string,\r\n formatStr: string = DATE_FORMATS.DATETIME_MEDIUM\r\n): string => {\r\n return formatInTimeZone(parseDate(date), timezone, formatStr);\r\n};\r\n\r\n/**\r\n * Format date as relative time (e.g., \"2 hours ago\", \"in 3 days\")\r\n */\r\nexport const formatRelativeTime = (date: DateInput, baseDate?: DateInput): string => {\r\n const parsed = parseDate(date);\r\n if (baseDate) {\r\n return formatDistance(parsed, parseDate(baseDate), { addSuffix: true });\r\n }\r\n return formatDistanceToNow(parsed, { addSuffix: true });\r\n};\r\n\r\n/**\r\n * Format date as smart relative (Today at 3:30 PM, Yesterday, etc.)\r\n */\r\nexport const formatSmartDate = (date: DateInput): string => {\r\n const parsed = parseDate(date);\r\n\r\n if (isToday(parsed)) {\r\n return `Today at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isYesterday(parsed)) {\r\n return `Yesterday at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isTomorrow(parsed)) {\r\n return `Tomorrow at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isThisWeek(parsed)) {\r\n return format(parsed, 'EEEE \\'at\\' h:mm a'); // Friday at 3:30 PM\r\n }\r\n if (isThisYear(parsed)) {\r\n return format(parsed, 'MMM d \\'at\\' h:mm a'); // Jan 15 at 3:30 PM\r\n }\r\n return format(parsed, DATE_FORMATS.DATETIME_MEDIUM);\r\n};\r\n\r\n/**\r\n * Format duration between two dates in human readable form\r\n */\r\nexport const formatDateRange = (start: DateInput, end: DateInput): string => {\r\n const duration = intervalToDuration({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n\r\n return formatDuration(duration, {\r\n format: ['years', 'months', 'days', 'hours', 'minutes'],\r\n });\r\n};\r\n\r\n// ==========================================\r\n// TIMEZONE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Convert date to a specific timezone\r\n */\r\nexport const toTimezone = (date: DateInput, timezone: string): Date => {\r\n return toZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Convert date from a specific timezone to UTC\r\n */\r\nexport const fromTimezone = (date: DateInput, timezone: string): Date => {\r\n return fromZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Get current time in a specific timezone\r\n */\r\nexport const nowInTimezone = (timezone: string): Date => {\r\n return toZonedTime(new Date(), timezone);\r\n};\r\n\r\n/**\r\n * Format time difference between timezones\r\n */\r\nexport const getTimezoneDifference = (timezone1: string, timezone2: string): string => {\r\n const now = new Date();\r\n const time1 = toZonedTime(now, timezone1);\r\n const time2 = toZonedTime(now, timezone2);\r\n const diffMinutes = differenceInMinutes(time1, time2);\r\n const hours = Math.floor(Math.abs(diffMinutes) / 60);\r\n const minutes = Math.abs(diffMinutes) % 60;\r\n const sign = diffMinutes >= 0 ? '+' : '-';\r\n\r\n if (minutes === 0) {\r\n return `${sign}${hours}h`;\r\n }\r\n return `${sign}${hours}h ${minutes}m`;\r\n};\r\n\r\n// ==========================================\r\n// DATE ARITHMETIC\r\n// ==========================================\r\n\r\n/**\r\n * Add time to a date\r\n */\r\nexport const addTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return addMinutes(parsed, amount);\r\n case 'hours':\r\n return addHours(parsed, amount);\r\n case 'days':\r\n return addDays(parsed, amount);\r\n case 'weeks':\r\n return addWeeks(parsed, amount);\r\n case 'months':\r\n return addMonths(parsed, amount);\r\n case 'years':\r\n return addYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Subtract time from a date\r\n */\r\nexport const subtractTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return subMinutes(parsed, amount);\r\n case 'hours':\r\n return subHours(parsed, amount);\r\n case 'days':\r\n return subDays(parsed, amount);\r\n case 'weeks':\r\n return subWeeks(parsed, amount);\r\n case 'months':\r\n return subMonths(parsed, amount);\r\n case 'years':\r\n return subYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Get difference between two dates\r\n */\r\nexport const getDateDifference = (\r\n date1: DateInput,\r\n date2: DateInput,\r\n unit: 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): number => {\r\n const d1 = parseDate(date1);\r\n const d2 = parseDate(date2);\r\n switch (unit) {\r\n case 'seconds':\r\n return differenceInSeconds(d1, d2);\r\n case 'minutes':\r\n return differenceInMinutes(d1, d2);\r\n case 'hours':\r\n return differenceInHours(d1, d2);\r\n case 'days':\r\n return differenceInDays(d1, d2);\r\n case 'weeks':\r\n return differenceInWeeks(d1, d2);\r\n case 'months':\r\n return differenceInMonths(d1, d2);\r\n case 'years':\r\n return differenceInYears(d1, d2);\r\n }\r\n};\r\n\r\n// ==========================================\r\n// DATE RANGE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get all days in a range\r\n */\r\nexport const getDaysInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachDayOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all weeks in a range\r\n */\r\nexport const getWeeksInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachWeekOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all months in a range\r\n */\r\nexport const getMonthsInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachMonthOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n// ==========================================\r\n// DATE BOUNDARIES\r\n// ==========================================\r\n\r\n/**\r\n * Get start and end of day\r\n */\r\nexport const getDayBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfDay(parsed),\r\n end: endOfDay(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of week\r\n */\r\nexport const getWeekBoundaries = (date: DateInput, weekStartsOn: 0 | 1 = 0): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfWeek(parsed, { weekStartsOn }),\r\n end: endOfWeek(parsed, { weekStartsOn }),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of month\r\n */\r\nexport const getMonthBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfMonth(parsed),\r\n end: endOfMonth(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of year\r\n */\r\nexport const getYearBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfYear(parsed),\r\n end: endOfYear(parsed),\r\n };\r\n};\r\n\r\n// ==========================================\r\n// DATE COMPARISON\r\n// ==========================================\r\n\r\n/**\r\n * Check if date is between two dates (inclusive)\r\n */\r\nexport const isDateBetween = (date: DateInput, start: DateInput, end: DateInput): boolean => {\r\n const d = parseDate(date);\r\n const s = parseDate(start);\r\n const e = parseDate(end);\r\n return (isAfter(d, s) || isEqual(d, s)) && (isBefore(d, e) || isEqual(d, e));\r\n};\r\n\r\n/**\r\n * Check if two date ranges overlap\r\n */\r\nexport const doDateRangesOverlap = (\r\n range1Start: DateInput,\r\n range1End: DateInput,\r\n range2Start: DateInput,\r\n range2End: DateInput\r\n): boolean => {\r\n const r1s = parseDate(range1Start);\r\n const r1e = parseDate(range1End);\r\n const r2s = parseDate(range2Start);\r\n const r2e = parseDate(range2End);\r\n\r\n return isBefore(r1s, r2e) && isAfter(r1e, r2s);\r\n};\r\n\r\n// ==========================================\r\n// UTILITY FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get age from birthdate\r\n */\r\nexport const getAge = (birthDate: DateInput): number => {\r\n return differenceInYears(new Date(), parseDate(birthDate));\r\n};\r\n\r\n/**\r\n * Check if date is a weekend\r\n */\r\nexport const isWeekend = (date: DateInput): boolean => {\r\n const day = getDay(parseDate(date));\r\n return day === 0 || day === 6;\r\n};\r\n\r\n/**\r\n * Check if date is a weekday\r\n */\r\nexport const isWeekday = (date: DateInput): boolean => {\r\n return !isWeekend(date);\r\n};\r\n\r\n/**\r\n * Get days until a date\r\n */\r\nexport const daysUntil = (date: DateInput): number => {\r\n return differenceInDays(parseDate(date), new Date());\r\n};\r\n\r\n/**\r\n * Get days since a date\r\n */\r\nexport const daysSince = (date: DateInput): number => {\r\n return differenceInDays(new Date(), parseDate(date));\r\n};\r\n\r\n/**\r\n * Format for HTML date input (yyyy-MM-dd)\r\n */\r\nexport const toDateInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.DATE_ISO);\r\n};\r\n\r\n/**\r\n * Format for HTML datetime-local input\r\n */\r\nexport const toDateTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), \"yyyy-MM-dd'T'HH:mm\");\r\n};\r\n\r\n/**\r\n * Format for HTML time input (HH:mm)\r\n */\r\nexport const toTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.TIME_24H);\r\n};\r\n\r\n/**\r\n * Set time on a date\r\n */\r\nexport const setTime = (date: DateInput, hours: number, minutes: number, seconds: number = 0): Date => {\r\n let result = parseDate(date);\r\n result = setHours(result, hours);\r\n result = setMinutes(result, minutes);\r\n result = setSeconds(result, seconds);\r\n return result;\r\n};\r\n\r\n/**\r\n * Combine date from one input and time from another\r\n */\r\nexport const combineDateAndTime = (dateInput: DateInput, timeInput: DateInput): Date => {\r\n const date = parseDate(dateInput);\r\n const time = parseDate(timeInput);\r\n return setTime(date, getHours(time), getMinutes(time), getSeconds(time));\r\n};\r\n\r\nexport default {\r\n // Core\r\n parseDate,\r\n isValidDate,\r\n DATE_FORMATS,\r\n\r\n // Format\r\n formatDate,\r\n formatDateTime,\r\n formatDateInTimezone,\r\n formatRelativeTime,\r\n formatSmartDate,\r\n formatDateRange,\r\n\r\n // Timezone\r\n toTimezone,\r\n fromTimezone,\r\n nowInTimezone,\r\n getTimezoneDifference,\r\n\r\n // Arithmetic\r\n addTime,\r\n subtractTime,\r\n getDateDifference,\r\n\r\n // Ranges\r\n getDaysInRange,\r\n getWeeksInRange,\r\n getMonthsInRange,\r\n\r\n // Boundaries\r\n getDayBoundaries,\r\n getWeekBoundaries,\r\n getMonthBoundaries,\r\n getYearBoundaries,\r\n\r\n // Comparison\r\n isDateBetween,\r\n doDateRangesOverlap,\r\n\r\n // Utilities\r\n getAge,\r\n isWeekend,\r\n isWeekday,\r\n daysUntil,\r\n daysSince,\r\n toDateInputValue,\r\n toDateTimeInputValue,\r\n toTimeInputValue,\r\n setTime,\r\n combineDateAndTime,\r\n};\r\n","/**\r\n * Common Validation Rules & Patterns\r\n * Use with Yup, Zod, or custom validators\r\n */\r\n\r\n// ==========================================\r\n// REGEX PATTERNS\r\n// ==========================================\r\n\r\nexport const VALIDATION_PATTERNS = {\r\n /** Email pattern (RFC 5322 simplified) */\r\n EMAIL: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\r\n\r\n /** Strong password: min 8 chars, uppercase, lowercase, number, special char */\r\n PASSWORD_STRONG:\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$/,\r\n\r\n /** Medium password: min 8 chars, uppercase, lowercase, number */\r\n PASSWORD_MEDIUM: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d@$!%*?&]{8,}$/,\r\n\r\n /** Basic password: min 8 chars */\r\n PASSWORD_BASIC: /^.{8,}$/,\r\n\r\n /** Phone number (international) */\r\n PHONE_INTERNATIONAL: /^\\+?[\\d\\s\\-().]{10,}$/,\r\n\r\n /** Phone number (US) */\r\n PHONE_US: /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\r\n\r\n /** Phone number (India) */\r\n PHONE_INDIA: /^[6-9]\\d{9}$/,\r\n\r\n /** URL pattern */\r\n URL: /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/,\r\n\r\n /** URL with required protocol */\r\n URL_STRICT: /^https?:\\/\\/([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/,\r\n\r\n /** Alphanumeric only */\r\n ALPHANUMERIC: /^[a-zA-Z0-9]+$/,\r\n\r\n /** Letters only */\r\n LETTERS_ONLY: /^[a-zA-Z]+$/,\r\n\r\n /** Numbers only */\r\n NUMBERS_ONLY: /^\\d+$/,\r\n\r\n /** Slug pattern (kebab-case) */\r\n SLUG: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\r\n\r\n /** Username pattern (alphanumeric, underscore, hyphen) */\r\n USERNAME: /^[a-zA-Z0-9_-]{3,30}$/,\r\n\r\n /** Credit card (basic validation) */\r\n CREDIT_CARD: /^\\d{13,19}$/,\r\n\r\n /** CVV (3 or 4 digits) */\r\n CVV: /^\\d{3,4}$/,\r\n\r\n /** ZIP code (US) */\r\n ZIP_US: /^\\d{5}(-\\d{4})?$/,\r\n\r\n /** Postal code (India) */\r\n POSTAL_INDIA: /^\\d{6}$/,\r\n\r\n /** IP Address (IPv4) */\r\n IPV4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\r\n\r\n /** Hex color */\r\n HEX_COLOR: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,\r\n\r\n /** Date (YYYY-MM-DD) */\r\n DATE_ISO: /^\\d{4}-\\d{2}-\\d{2}$/,\r\n\r\n /** Time (HH:MM or HH:MM:SS) */\r\n TIME: /^([01]\\d|2[0-3]):([0-5]\\d)(:[0-5]\\d)?$/,\r\n} as const;\r\n\r\n// ==========================================\r\n// VALIDATION FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport const isValidEmail = (email: string): boolean => {\r\n return VALIDATION_PATTERNS.EMAIL.test(email.trim());\r\n};\r\n\r\n/**\r\n * Validate password strength\r\n */\r\nexport const isValidPassword = (\r\n password: string,\r\n strength: 'basic' | 'medium' | 'strong' = 'medium'\r\n): boolean => {\r\n switch (strength) {\r\n case 'strong':\r\n return VALIDATION_PATTERNS.PASSWORD_STRONG.test(password);\r\n case 'medium':\r\n return VALIDATION_PATTERNS.PASSWORD_MEDIUM.test(password);\r\n case 'basic':\r\n default:\r\n return VALIDATION_PATTERNS.PASSWORD_BASIC.test(password);\r\n }\r\n};\r\n\r\n/**\r\n * Validate phone number\r\n */\r\nexport const isValidPhone = (\r\n phone: string,\r\n format: 'international' | 'us' | 'india' = 'international'\r\n): boolean => {\r\n const cleaned = phone.replace(/\\s/g, '');\r\n switch (format) {\r\n case 'us':\r\n return VALIDATION_PATTERNS.PHONE_US.test(cleaned);\r\n case 'india':\r\n return VALIDATION_PATTERNS.PHONE_INDIA.test(cleaned);\r\n case 'international':\r\n default:\r\n return VALIDATION_PATTERNS.PHONE_INTERNATIONAL.test(cleaned);\r\n }\r\n};\r\n\r\n/**\r\n * Validate URL format\r\n */\r\nexport const isValidUrl = (url: string, requireProtocol: boolean = false): boolean => {\r\n if (requireProtocol) {\r\n return VALIDATION_PATTERNS.URL_STRICT.test(url);\r\n }\r\n return VALIDATION_PATTERNS.URL.test(url);\r\n};\r\n\r\n/**\r\n * Validate username format\r\n */\r\nexport const isValidUsername = (username: string): boolean => {\r\n return VALIDATION_PATTERNS.USERNAME.test(username);\r\n};\r\n\r\n/**\r\n * Validate slug format\r\n */\r\nexport const isValidSlug = (slug: string): boolean => {\r\n return VALIDATION_PATTERNS.SLUG.test(slug);\r\n};\r\n\r\n// ==========================================\r\n// VALIDATION MESSAGES\r\n// ==========================================\r\n\r\nexport const VALIDATION_MESSAGES = {\r\n // Required fields\r\n REQUIRED: 'This field is required',\r\n REQUIRED_FIELD: (field: string) => `${field} is required`,\r\n\r\n // Email\r\n EMAIL_INVALID: 'Please enter a valid email address',\r\n EMAIL_REQUIRED: 'Email is required',\r\n\r\n // Password\r\n PASSWORD_REQUIRED: 'Password is required',\r\n PASSWORD_MIN_LENGTH: (length: number) => `Password must be at least ${length} characters`,\r\n PASSWORD_WEAK: 'Password is too weak',\r\n PASSWORD_MEDIUM: 'Password must contain uppercase, lowercase, and number',\r\n PASSWORD_STRONG: 'Password must contain uppercase, lowercase, number, and special character',\r\n PASSWORD_MISMATCH: 'Passwords do not match',\r\n\r\n // Name\r\n NAME_REQUIRED: 'Name is required',\r\n FIRST_NAME_REQUIRED: 'First name is required',\r\n LAST_NAME_REQUIRED: 'Last name is required',\r\n NAME_MIN_LENGTH: (length: number) => `Name must be at least ${length} characters`,\r\n NAME_MAX_LENGTH: (length: number) => `Name must be at most ${length} characters`,\r\n\r\n // Phone\r\n PHONE_INVALID: 'Please enter a valid phone number',\r\n PHONE_REQUIRED: 'Phone number is required',\r\n\r\n // URL\r\n URL_INVALID: 'Please enter a valid URL',\r\n\r\n // Username\r\n USERNAME_INVALID: 'Username can only contain letters, numbers, underscores, and hyphens',\r\n USERNAME_MIN_LENGTH: 'Username must be at least 3 characters',\r\n USERNAME_MAX_LENGTH: 'Username must be at most 30 characters',\r\n USERNAME_TAKEN: 'This username is already taken',\r\n\r\n // General\r\n MIN_LENGTH: (field: string, length: number) => `${field} must be at least ${length} characters`,\r\n MAX_LENGTH: (field: string, length: number) => `${field} must be at most ${length} characters`,\r\n MIN_VALUE: (field: string, value: number) => `${field} must be at least ${value}`,\r\n MAX_VALUE: (field: string, value: number) => `${field} must be at most ${value}`,\r\n INVALID_FORMAT: 'Invalid format',\r\n TERMS_REQUIRED: 'You must accept the terms and conditions',\r\n} as const;\r\n\r\n// ==========================================\r\n// COMMON VALIDATION RULES (for schema builders)\r\n// ==========================================\r\n\r\nexport const VALIDATION_RULES = {\r\n email: {\r\n pattern: VALIDATION_PATTERNS.EMAIL,\r\n message: VALIDATION_MESSAGES.EMAIL_INVALID,\r\n },\r\n password: {\r\n minLength: 8,\r\n pattern: VALIDATION_PATTERNS.PASSWORD_MEDIUM,\r\n message: VALIDATION_MESSAGES.PASSWORD_MEDIUM,\r\n },\r\n passwordStrong: {\r\n minLength: 8,\r\n pattern: VALIDATION_PATTERNS.PASSWORD_STRONG,\r\n message: VALIDATION_MESSAGES.PASSWORD_STRONG,\r\n },\r\n name: {\r\n minLength: 2,\r\n maxLength: 50,\r\n },\r\n username: {\r\n minLength: 3,\r\n maxLength: 30,\r\n pattern: VALIDATION_PATTERNS.USERNAME,\r\n message: VALIDATION_MESSAGES.USERNAME_INVALID,\r\n },\r\n phone: {\r\n pattern: VALIDATION_PATTERNS.PHONE_INTERNATIONAL,\r\n message: VALIDATION_MESSAGES.PHONE_INVALID,\r\n },\r\n url: {\r\n pattern: VALIDATION_PATTERNS.URL,\r\n message: VALIDATION_MESSAGES.URL_INVALID,\r\n },\r\n} as const;\r\n\r\nexport default {\r\n VALIDATION_PATTERNS,\r\n VALIDATION_MESSAGES,\r\n VALIDATION_RULES,\r\n isValidEmail,\r\n isValidPassword,\r\n isValidPhone,\r\n isValidUrl,\r\n isValidUsername,\r\n isValidSlug,\r\n};\r\n","export * from './countries';\r\nexport * from './phone-codes';\r\nexport * from './currencies';\r\nexport * from './timezones';\r\nexport * from './logos';\r\n\r\n// Re-export default arrays for convenience\r\nexport { default as countries } from './countries';\r\nexport { default as phoneCodes } from './phone-codes';\r\nexport { default as currencies } from './currencies';\r\nexport { default as timezones } from './timezones';\r\nexport { default as brands } from './logos';\r\n","/**\r\n * Country with nested cities data\r\n */\r\nexport interface City {\r\n name: string;\r\n stateCode?: string;\r\n}\r\n\r\nexport interface State {\r\n name: string;\r\n code: string;\r\n cities: City[];\r\n}\r\n\r\nexport interface Country {\r\n name: string;\r\n code: string; // ISO 3166-1 alpha-2\r\n code3: string; // ISO 3166-1 alpha-3\r\n phoneCode: string;\r\n currency: string;\r\n currencySymbol: string;\r\n continent: string;\r\n capital: string;\r\n timezone: string;\r\n states: State[];\r\n}\r\n\r\nexport const countries: Country[] = [\r\n {\r\n name: 'Afghanistan',\r\n code: 'AF',\r\n code3: 'AFG',\r\n phoneCode: '+93',\r\n currency: 'AFN',\r\n currencySymbol: '؋',\r\n continent: 'Asia',\r\n capital: 'Kabul',\r\n timezone: 'Asia/Kabul',\r\n states: [\r\n { name: 'Kabul', code: 'KBL', cities: [{ name: 'Kabul' }] },\r\n { name: 'Kandahar', code: 'KDH', cities: [{ name: 'Kandahar' }] },\r\n { name: 'Herat', code: 'HER', cities: [{ name: 'Herat' }] },\r\n ],\r\n },\r\n {\r\n name: 'Albania',\r\n code: 'AL',\r\n code3: 'ALB',\r\n phoneCode: '+355',\r\n currency: 'ALL',\r\n currencySymbol: 'L',\r\n continent: 'Europe',\r\n capital: 'Tirana',\r\n timezone: 'Europe/Tirane',\r\n states: [\r\n { name: 'Tirana', code: 'TR', cities: [{ name: 'Tirana' }] },\r\n { name: 'Durrës', code: 'DR', cities: [{ name: 'Durrës' }] },\r\n ],\r\n },\r\n {\r\n name: 'Algeria',\r\n code: 'DZ',\r\n code3: 'DZA',\r\n phoneCode: '+213',\r\n currency: 'DZD',\r\n currencySymbol: 'د.ج',\r\n continent: 'Africa',\r\n capital: 'Algiers',\r\n timezone: 'Africa/Algiers',\r\n states: [\r\n { name: 'Algiers', code: 'ALG', cities: [{ name: 'Algiers' }] },\r\n { name: 'Oran', code: 'ORA', cities: [{ name: 'Oran' }] },\r\n ],\r\n },\r\n {\r\n name: 'Argentina',\r\n code: 'AR',\r\n code3: 'ARG',\r\n phoneCode: '+54',\r\n currency: 'ARS',\r\n currencySymbol: '$',\r\n continent: 'South America',\r\n capital: 'Buenos Aires',\r\n timezone: 'America/Argentina/Buenos_Aires',\r\n states: [\r\n { name: 'Buenos Aires', code: 'BA', cities: [{ name: 'Buenos Aires' }, { name: 'La Plata' }] },\r\n { name: 'Córdoba', code: 'CO', cities: [{ name: 'Córdoba' }] },\r\n { name: 'Santa Fe', code: 'SF', cities: [{ name: 'Rosario' }, { name: 'Santa Fe' }] },\r\n ],\r\n },\r\n {\r\n name: 'Australia',\r\n code: 'AU',\r\n code3: 'AUS',\r\n phoneCode: '+61',\r\n currency: 'AUD',\r\n currencySymbol: '$',\r\n continent: 'Oceania',\r\n capital: 'Canberra',\r\n timezone: 'Australia/Sydney',\r\n states: [\r\n { name: 'New South Wales', code: 'NSW', cities: [{ name: 'Sydney' }, { name: 'Newcastle' }, { name: 'Wollongong' }] },\r\n { name: 'Victoria', code: 'VIC', cities: [{ name: 'Melbourne' }, { name: 'Geelong' }] },\r\n { name: 'Queensland', code: 'QLD', cities: [{ name: 'Brisbane' }, { name: 'Gold Coast' }, { name: 'Cairns' }] },\r\n { name: 'Western Australia', code: 'WA', cities: [{ name: 'Perth' }, { name: 'Fremantle' }] },\r\n { name: 'South Australia', code: 'SA', cities: [{ name: 'Adelaide' }] },\r\n { name: 'Tasmania', code: 'TAS', cities: [{ name: 'Hobart' }, { name: 'Launceston' }] },\r\n { name: 'Australian Capital Territory', code: 'ACT', cities: [{ name: 'Canberra' }] },\r\n { name: 'Northern Territory', code: 'NT', cities: [{ name: 'Darwin' }] },\r\n ],\r\n },\r\n {\r\n name: 'Austria',\r\n code: 'AT',\r\n code3: 'AUT',\r\n phoneCode: '+43',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Vienna',\r\n timezone: 'Europe/Vienna',\r\n states: [\r\n { name: 'Vienna', code: 'VIE', cities: [{ name: 'Vienna' }] },\r\n { name: 'Salzburg', code: 'SBG', cities: [{ name: 'Salzburg' }] },\r\n { name: 'Tyrol', code: 'TYR', cities: [{ name: 'Innsbruck' }] },\r\n ],\r\n },\r\n {\r\n name: 'Bangladesh',\r\n code: 'BD',\r\n code3: 'BGD',\r\n phoneCode: '+880',\r\n currency: 'BDT',\r\n currencySymbol: '৳',\r\n continent: 'Asia',\r\n capital: 'Dhaka',\r\n timezone: 'Asia/Dhaka',\r\n states: [\r\n { name: 'Dhaka', code: 'DHA', cities: [{ name: 'Dhaka' }, { name: 'Gazipur' }, { name: 'Narayanganj' }] },\r\n { name: 'Chittagong', code: 'CTG', cities: [{ name: 'Chittagong' }, { name: \"Cox's Bazar\" }] },\r\n { name: 'Khulna', code: 'KHL', cities: [{ name: 'Khulna' }] },\r\n { name: 'Rajshahi', code: 'RAJ', cities: [{ name: 'Rajshahi' }] },\r\n { name: 'Sylhet', code: 'SYL', cities: [{ name: 'Sylhet' }] },\r\n ],\r\n },\r\n {\r\n name: 'Belgium',\r\n code: 'BE',\r\n code3: 'BEL',\r\n phoneCode: '+32',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Brussels',\r\n timezone: 'Europe/Brussels',\r\n states: [\r\n { name: 'Brussels', code: 'BRU', cities: [{ name: 'Brussels' }] },\r\n { name: 'Flanders', code: 'FLA', cities: [{ name: 'Antwerp' }, { name: 'Ghent' }, { name: 'Bruges' }] },\r\n { name: 'Wallonia', code: 'WAL', cities: [{ name: 'Liège' }, { name: 'Charleroi' }] },\r\n ],\r\n },\r\n {\r\n name: 'Brazil',\r\n code: 'BR',\r\n code3: 'BRA',\r\n phoneCode: '+55',\r\n currency: 'BRL',\r\n currencySymbol: 'R$',\r\n continent: 'South America',\r\n capital: 'Brasília',\r\n timezone: 'America/Sao_Paulo',\r\n states: [\r\n { name: 'São Paulo', code: 'SP', cities: [{ name: 'São Paulo' }, { name: 'Campinas' }, { name: 'Santos' }] },\r\n { name: 'Rio de Janeiro', code: 'RJ', cities: [{ name: 'Rio de Janeiro' }, { name: 'Niterói' }] },\r\n { name: 'Minas Gerais', code: 'MG', cities: [{ name: 'Belo Horizonte' }, { name: 'Uberlândia' }] },\r\n { name: 'Bahia', code: 'BA', cities: [{ name: 'Salvador' }] },\r\n { name: 'Paraná', code: 'PR', cities: [{ name: 'Curitiba' }] },\r\n { name: 'Rio Grande do Sul', code: 'RS', cities: [{ name: 'Porto Alegre' }] },\r\n { name: 'Federal District', code: 'DF', cities: [{ name: 'Brasília' }] },\r\n ],\r\n },\r\n {\r\n name: 'Canada',\r\n code: 'CA',\r\n code3: 'CAN',\r\n phoneCode: '+1',\r\n currency: 'CAD',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Ottawa',\r\n timezone: 'America/Toronto',\r\n states: [\r\n { name: 'Ontario', code: 'ON', cities: [{ name: 'Toronto' }, { name: 'Ottawa' }, { name: 'Mississauga' }, { name: 'Hamilton' }] },\r\n { name: 'Quebec', code: 'QC', cities: [{ name: 'Montreal' }, { name: 'Quebec City' }, { name: 'Laval' }] },\r\n { name: 'British Columbia', code: 'BC', cities: [{ name: 'Vancouver' }, { name: 'Victoria' }, { name: 'Surrey' }] },\r\n { name: 'Alberta', code: 'AB', cities: [{ name: 'Calgary' }, { name: 'Edmonton' }] },\r\n { name: 'Manitoba', code: 'MB', cities: [{ name: 'Winnipeg' }] },\r\n { name: 'Saskatchewan', code: 'SK', cities: [{ name: 'Saskatoon' }, { name: 'Regina' }] },\r\n { name: 'Nova Scotia', code: 'NS', cities: [{ name: 'Halifax' }] },\r\n { name: 'New Brunswick', code: 'NB', cities: [{ name: 'Moncton' }, { name: 'Saint John' }] },\r\n ],\r\n },\r\n {\r\n name: 'China',\r\n code: 'CN',\r\n code3: 'CHN',\r\n phoneCode: '+86',\r\n currency: 'CNY',\r\n currencySymbol: '¥',\r\n continent: 'Asia',\r\n capital: 'Beijing',\r\n timezone: 'Asia/Shanghai',\r\n states: [\r\n { name: 'Beijing', code: 'BJ', cities: [{ name: 'Beijing' }] },\r\n { name: 'Shanghai', code: 'SH', cities: [{ name: 'Shanghai' }] },\r\n { name: 'Guangdong', code: 'GD', cities: [{ name: 'Guangzhou' }, { name: 'Shenzhen' }, { name: 'Dongguan' }] },\r\n { name: 'Jiangsu', code: 'JS', cities: [{ name: 'Nanjing' }, { name: 'Suzhou' }, { name: 'Wuxi' }] },\r\n { name: 'Zhejiang', code: 'ZJ', cities: [{ name: 'Hangzhou' }, { name: 'Ningbo' }] },\r\n { name: 'Sichuan', code: 'SC', cities: [{ name: 'Chengdu' }, { name: 'Chongqing' }] },\r\n { name: 'Hubei', code: 'HB', cities: [{ name: 'Wuhan' }] },\r\n ],\r\n },\r\n {\r\n name: 'Denmark',\r\n code: 'DK',\r\n code3: 'DNK',\r\n phoneCode: '+45',\r\n currency: 'DKK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Copenhagen',\r\n timezone: 'Europe/Copenhagen',\r\n states: [\r\n { name: 'Capital Region', code: 'HO', cities: [{ name: 'Copenhagen' }] },\r\n { name: 'Central Denmark', code: 'MJ', cities: [{ name: 'Aarhus' }] },\r\n { name: 'Southern Denmark', code: 'SD', cities: [{ name: 'Odense' }] },\r\n ],\r\n },\r\n {\r\n name: 'Egypt',\r\n code: 'EG',\r\n code3: 'EGY',\r\n phoneCode: '+20',\r\n currency: 'EGP',\r\n currencySymbol: '£',\r\n continent: 'Africa',\r\n capital: 'Cairo',\r\n timezone: 'Africa/Cairo',\r\n states: [\r\n { name: 'Cairo', code: 'CAI', cities: [{ name: 'Cairo' }, { name: 'Giza' }] },\r\n { name: 'Alexandria', code: 'ALX', cities: [{ name: 'Alexandria' }] },\r\n { name: 'Luxor', code: 'LXR', cities: [{ name: 'Luxor' }] },\r\n ],\r\n },\r\n {\r\n name: 'Finland',\r\n code: 'FI',\r\n code3: 'FIN',\r\n phoneCode: '+358',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Helsinki',\r\n timezone: 'Europe/Helsinki',\r\n states: [\r\n { name: 'Uusimaa', code: 'UUS', cities: [{ name: 'Helsinki' }, { name: 'Espoo' }, { name: 'Vantaa' }] },\r\n { name: 'Pirkanmaa', code: 'PIR', cities: [{ name: 'Tampere' }] },\r\n { name: 'Southwest Finland', code: 'VAR', cities: [{ name: 'Turku' }] },\r\n ],\r\n },\r\n {\r\n name: 'France',\r\n code: 'FR',\r\n code3: 'FRA',\r\n phoneCode: '+33',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Paris',\r\n timezone: 'Europe/Paris',\r\n states: [\r\n { name: 'Île-de-France', code: 'IDF', cities: [{ name: 'Paris' }, { name: 'Versailles' }, { name: 'Boulogne-Billancourt' }] },\r\n { name: 'Provence-Alpes-Côte d\\'Azur', code: 'PAC', cities: [{ name: 'Marseille' }, { name: 'Nice' }, { name: 'Cannes' }] },\r\n { name: 'Auvergne-Rhône-Alpes', code: 'ARA', cities: [{ name: 'Lyon' }, { name: 'Grenoble' }] },\r\n { name: 'Nouvelle-Aquitaine', code: 'NAQ', cities: [{ name: 'Bordeaux' }] },\r\n { name: 'Occitanie', code: 'OCC', cities: [{ name: 'Toulouse' }, { name: 'Montpellier' }] },\r\n ],\r\n },\r\n {\r\n name: 'Germany',\r\n code: 'DE',\r\n code3: 'DEU',\r\n phoneCode: '+49',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Berlin',\r\n timezone: 'Europe/Berlin',\r\n states: [\r\n { name: 'Berlin', code: 'BE', cities: [{ name: 'Berlin' }] },\r\n { name: 'Bavaria', code: 'BY', cities: [{ name: 'Munich' }, { name: 'Nuremberg' }, { name: 'Augsburg' }] },\r\n { name: 'North Rhine-Westphalia', code: 'NW', cities: [{ name: 'Cologne' }, { name: 'Düsseldorf' }, { name: 'Dortmund' }, { name: 'Essen' }] },\r\n { name: 'Baden-Württemberg', code: 'BW', cities: [{ name: 'Stuttgart' }, { name: 'Mannheim' }, { name: 'Karlsruhe' }] },\r\n { name: 'Hesse', code: 'HE', cities: [{ name: 'Frankfurt' }, { name: 'Wiesbaden' }] },\r\n { name: 'Hamburg', code: 'HH', cities: [{ name: 'Hamburg' }] },\r\n { name: 'Saxony', code: 'SN', cities: [{ name: 'Dresden' }, { name: 'Leipzig' }] },\r\n ],\r\n },\r\n {\r\n name: 'Greece',\r\n code: 'GR',\r\n code3: 'GRC',\r\n phoneCode: '+30',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Athens',\r\n timezone: 'Europe/Athens',\r\n states: [\r\n { name: 'Attica', code: 'AT', cities: [{ name: 'Athens' }, { name: 'Piraeus' }] },\r\n { name: 'Central Macedonia', code: 'CM', cities: [{ name: 'Thessaloniki' }] },\r\n { name: 'Crete', code: 'CR', cities: [{ name: 'Heraklion' }, { name: 'Chania' }] },\r\n ],\r\n },\r\n {\r\n name: 'Hong Kong',\r\n code: 'HK',\r\n code3: 'HKG',\r\n phoneCode: '+852',\r\n currency: 'HKD',\r\n currencySymbol: '$',\r\n continent: 'Asia',\r\n capital: 'Hong Kong',\r\n timezone: 'Asia/Hong_Kong',\r\n states: [\r\n { name: 'Hong Kong Island', code: 'HKI', cities: [{ name: 'Central' }, { name: 'Wan Chai' }] },\r\n { name: 'Kowloon', code: 'KLN', cities: [{ name: 'Tsim Sha Tsui' }, { name: 'Mong Kok' }] },\r\n { name: 'New Territories', code: 'NT', cities: [{ name: 'Sha Tin' }, { name: 'Tsuen Wan' }] },\r\n ],\r\n },\r\n {\r\n name: 'India',\r\n code: 'IN',\r\n code3: 'IND',\r\n phoneCode: '+91',\r\n currency: 'INR',\r\n currencySymbol: '₹',\r\n continent: 'Asia',\r\n capital: 'New Delhi',\r\n timezone: 'Asia/Kolkata',\r\n states: [\r\n { name: 'Delhi', code: 'DL', cities: [{ name: 'New Delhi' }, { name: 'Delhi' }] },\r\n { name: 'Maharashtra', code: 'MH', cities: [{ name: 'Mumbai' }, { name: 'Pune' }, { name: 'Nagpur' }, { name: 'Nashik' }] },\r\n { name: 'Karnataka', code: 'KA', cities: [{ name: 'Bangalore' }, { name: 'Mysore' }, { name: 'Mangalore' }] },\r\n { name: 'Tamil Nadu', code: 'TN', cities: [{ name: 'Chennai' }, { name: 'Coimbatore' }, { name: 'Madurai' }] },\r\n { name: 'Telangana', code: 'TG', cities: [{ name: 'Hyderabad' }, { name: 'Warangal' }] },\r\n { name: 'West Bengal', code: 'WB', cities: [{ name: 'Kolkata' }, { name: 'Howrah' }] },\r\n { name: 'Gujarat', code: 'GJ', cities: [{ name: 'Ahmedabad' }, { name: 'Surat' }, { name: 'Vadodara' }] },\r\n { name: 'Rajasthan', code: 'RJ', cities: [{ name: 'Jaipur' }, { name: 'Jodhpur' }, { name: 'Udaipur' }] },\r\n { name: 'Uttar Pradesh', code: 'UP', cities: [{ name: 'Lucknow' }, { name: 'Kanpur' }, { name: 'Varanasi' }, { name: 'Agra' }, { name: 'Noida' }] },\r\n { name: 'Kerala', code: 'KL', cities: [{ name: 'Thiruvananthapuram' }, { name: 'Kochi' }, { name: 'Kozhikode' }] },\r\n { name: 'Punjab', code: 'PB', cities: [{ name: 'Chandigarh' }, { name: 'Ludhiana' }, { name: 'Amritsar' }] },\r\n { name: 'Haryana', code: 'HR', cities: [{ name: 'Gurugram' }, { name: 'Faridabad' }] },\r\n { name: 'Madhya Pradesh', code: 'MP', cities: [{ name: 'Bhopal' }, { name: 'Indore' }] },\r\n { name: 'Bihar', code: 'BR', cities: [{ name: 'Patna' }] },\r\n { name: 'Odisha', code: 'OR', cities: [{ name: 'Bhubaneswar' }] },\r\n { name: 'Goa', code: 'GA', cities: [{ name: 'Panaji' }, { name: 'Margao' }] },\r\n ],\r\n },\r\n {\r\n name: 'Indonesia',\r\n code: 'ID',\r\n code3: 'IDN',\r\n phoneCode: '+62',\r\n currency: 'IDR',\r\n currencySymbol: 'Rp',\r\n continent: 'Asia',\r\n capital: 'Jakarta',\r\n timezone: 'Asia/Jakarta',\r\n states: [\r\n { name: 'Jakarta', code: 'JK', cities: [{ name: 'Jakarta' }] },\r\n { name: 'West Java', code: 'JB', cities: [{ name: 'Bandung' }, { name: 'Bekasi' }] },\r\n { name: 'East Java', code: 'JI', cities: [{ name: 'Surabaya' }, { name: 'Malang' }] },\r\n { name: 'Bali', code: 'BA', cities: [{ name: 'Denpasar' }, { name: 'Ubud' }] },\r\n ],\r\n },\r\n {\r\n name: 'Ireland',\r\n code: 'IE',\r\n code3: 'IRL',\r\n phoneCode: '+353',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Dublin',\r\n timezone: 'Europe/Dublin',\r\n states: [\r\n { name: 'Leinster', code: 'L', cities: [{ name: 'Dublin' }] },\r\n { name: 'Munster', code: 'M', cities: [{ name: 'Cork' }, { name: 'Limerick' }] },\r\n { name: 'Connacht', code: 'C', cities: [{ name: 'Galway' }] },\r\n ],\r\n },\r\n {\r\n name: 'Israel',\r\n code: 'IL',\r\n code3: 'ISR',\r\n phoneCode: '+972',\r\n currency: 'ILS',\r\n currencySymbol: '₪',\r\n continent: 'Asia',\r\n capital: 'Jerusalem',\r\n timezone: 'Asia/Jerusalem',\r\n states: [\r\n { name: 'Tel Aviv', code: 'TA', cities: [{ name: 'Tel Aviv' }] },\r\n { name: 'Jerusalem', code: 'JM', cities: [{ name: 'Jerusalem' }] },\r\n { name: 'Haifa', code: 'HA', cities: [{ name: 'Haifa' }] },\r\n ],\r\n },\r\n {\r\n name: 'Italy',\r\n code: 'IT',\r\n code3: 'ITA',\r\n phoneCode: '+39',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Rome',\r\n timezone: 'Europe/Rome',\r\n states: [\r\n { name: 'Lazio', code: 'LAZ', cities: [{ name: 'Rome' }] },\r\n { name: 'Lombardy', code: 'LOM', cities: [{ name: 'Milan' }, { name: 'Bergamo' }] },\r\n { name: 'Veneto', code: 'VEN', cities: [{ name: 'Venice' }, { name: 'Verona' }, { name: 'Padua' }] },\r\n { name: 'Tuscany', code: 'TOS', cities: [{ name: 'Florence' }, { name: 'Pisa' }, { name: 'Siena' }] },\r\n { name: 'Campania', code: 'CAM', cities: [{ name: 'Naples' }] },\r\n { name: 'Sicily', code: 'SIC', cities: [{ name: 'Palermo' }, { name: 'Catania' }] },\r\n ],\r\n },\r\n {\r\n name: 'Japan',\r\n code: 'JP',\r\n code3: 'JPN',\r\n phoneCode: '+81',\r\n currency: 'JPY',\r\n currencySymbol: '¥',\r\n continent: 'Asia',\r\n capital: 'Tokyo',\r\n timezone: 'Asia/Tokyo',\r\n states: [\r\n { name: 'Tokyo', code: 'TK', cities: [{ name: 'Tokyo' }, { name: 'Shibuya' }, { name: 'Shinjuku' }] },\r\n { name: 'Osaka', code: 'OS', cities: [{ name: 'Osaka' }] },\r\n { name: 'Kyoto', code: 'KY', cities: [{ name: 'Kyoto' }] },\r\n { name: 'Kanagawa', code: 'KN', cities: [{ name: 'Yokohama' }, { name: 'Kawasaki' }] },\r\n { name: 'Aichi', code: 'AI', cities: [{ name: 'Nagoya' }] },\r\n { name: 'Hokkaido', code: 'HK', cities: [{ name: 'Sapporo' }] },\r\n { name: 'Fukuoka', code: 'FK', cities: [{ name: 'Fukuoka' }] },\r\n { name: 'Hiroshima', code: 'HS', cities: [{ name: 'Hiroshima' }] },\r\n ],\r\n },\r\n {\r\n name: 'Malaysia',\r\n code: 'MY',\r\n code3: 'MYS',\r\n phoneCode: '+60',\r\n currency: 'MYR',\r\n currencySymbol: 'RM',\r\n continent: 'Asia',\r\n capital: 'Kuala Lumpur',\r\n timezone: 'Asia/Kuala_Lumpur',\r\n states: [\r\n { name: 'Kuala Lumpur', code: 'KL', cities: [{ name: 'Kuala Lumpur' }] },\r\n { name: 'Selangor', code: 'SL', cities: [{ name: 'Shah Alam' }, { name: 'Petaling Jaya' }] },\r\n { name: 'Penang', code: 'PG', cities: [{ name: 'George Town' }] },\r\n { name: 'Johor', code: 'JH', cities: [{ name: 'Johor Bahru' }] },\r\n ],\r\n },\r\n {\r\n name: 'Mexico',\r\n code: 'MX',\r\n code3: 'MEX',\r\n phoneCode: '+52',\r\n currency: 'MXN',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Mexico City',\r\n timezone: 'America/Mexico_City',\r\n states: [\r\n { name: 'Mexico City', code: 'CMX', cities: [{ name: 'Mexico City' }] },\r\n { name: 'Jalisco', code: 'JAL', cities: [{ name: 'Guadalajara' }] },\r\n { name: 'Nuevo León', code: 'NLE', cities: [{ name: 'Monterrey' }] },\r\n { name: 'Quintana Roo', code: 'ROO', cities: [{ name: 'Cancún' }, { name: 'Playa del Carmen' }] },\r\n ],\r\n },\r\n {\r\n name: 'Netherlands',\r\n code: 'NL',\r\n code3: 'NLD',\r\n phoneCode: '+31',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Amsterdam',\r\n timezone: 'Europe/Amsterdam',\r\n states: [\r\n { name: 'North Holland', code: 'NH', cities: [{ name: 'Amsterdam' }, { name: 'Haarlem' }] },\r\n { name: 'South Holland', code: 'ZH', cities: [{ name: 'Rotterdam' }, { name: 'The Hague' }, { name: 'Leiden' }] },\r\n { name: 'Utrecht', code: 'UT', cities: [{ name: 'Utrecht' }] },\r\n { name: 'North Brabant', code: 'NB', cities: [{ name: 'Eindhoven' }, { name: 'Tilburg' }] },\r\n ],\r\n },\r\n {\r\n name: 'New Zealand',\r\n code: 'NZ',\r\n code3: 'NZL',\r\n phoneCode: '+64',\r\n currency: 'NZD',\r\n currencySymbol: '$',\r\n continent: 'Oceania',\r\n capital: 'Wellington',\r\n timezone: 'Pacific/Auckland',\r\n states: [\r\n { name: 'Auckland', code: 'AUK', cities: [{ name: 'Auckland' }] },\r\n { name: 'Wellington', code: 'WGN', cities: [{ name: 'Wellington' }] },\r\n { name: 'Canterbury', code: 'CAN', cities: [{ name: 'Christchurch' }] },\r\n { name: 'Otago', code: 'OTA', cities: [{ name: 'Dunedin' }, { name: 'Queenstown' }] },\r\n ],\r\n },\r\n {\r\n name: 'Nigeria',\r\n code: 'NG',\r\n code3: 'NGA',\r\n phoneCode: '+234',\r\n currency: 'NGN',\r\n currencySymbol: '₦',\r\n continent: 'Africa',\r\n capital: 'Abuja',\r\n timezone: 'Africa/Lagos',\r\n states: [\r\n { name: 'Lagos', code: 'LA', cities: [{ name: 'Lagos' }, { name: 'Ikeja' }] },\r\n { name: 'FCT', code: 'FC', cities: [{ name: 'Abuja' }] },\r\n { name: 'Kano', code: 'KN', cities: [{ name: 'Kano' }] },\r\n { name: 'Rivers', code: 'RI', cities: [{ name: 'Port Harcourt' }] },\r\n ],\r\n },\r\n {\r\n name: 'Norway',\r\n code: 'NO',\r\n code3: 'NOR',\r\n phoneCode: '+47',\r\n currency: 'NOK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Oslo',\r\n timezone: 'Europe/Oslo',\r\n states: [\r\n { name: 'Oslo', code: 'OSL', cities: [{ name: 'Oslo' }] },\r\n { name: 'Vestland', code: 'VES', cities: [{ name: 'Bergen' }] },\r\n { name: 'Trøndelag', code: 'TRO', cities: [{ name: 'Trondheim' }] },\r\n ],\r\n },\r\n {\r\n name: 'Pakistan',\r\n code: 'PK',\r\n code3: 'PAK',\r\n phoneCode: '+92',\r\n currency: 'PKR',\r\n currencySymbol: '₨',\r\n continent: 'Asia',\r\n capital: 'Islamabad',\r\n timezone: 'Asia/Karachi',\r\n states: [\r\n { name: 'Punjab', code: 'PB', cities: [{ name: 'Lahore' }, { name: 'Faisalabad' }, { name: 'Rawalpindi' }] },\r\n { name: 'Sindh', code: 'SD', cities: [{ name: 'Karachi' }, { name: 'Hyderabad' }] },\r\n { name: 'Islamabad', code: 'IS', cities: [{ name: 'Islamabad' }] },\r\n { name: 'Khyber Pakhtunkhwa', code: 'KP', cities: [{ name: 'Peshawar' }] },\r\n ],\r\n },\r\n {\r\n name: 'Philippines',\r\n code: 'PH',\r\n code3: 'PHL',\r\n phoneCode: '+63',\r\n currency: 'PHP',\r\n currencySymbol: '₱',\r\n continent: 'Asia',\r\n capital: 'Manila',\r\n timezone: 'Asia/Manila',\r\n states: [\r\n { name: 'Metro Manila', code: 'NCR', cities: [{ name: 'Manila' }, { name: 'Quezon City' }, { name: 'Makati' }] },\r\n { name: 'Cebu', code: 'CEB', cities: [{ name: 'Cebu City' }] },\r\n { name: 'Davao', code: 'DAV', cities: [{ name: 'Davao City' }] },\r\n ],\r\n },\r\n {\r\n name: 'Poland',\r\n code: 'PL',\r\n code3: 'POL',\r\n phoneCode: '+48',\r\n currency: 'PLN',\r\n currencySymbol: 'zł',\r\n continent: 'Europe',\r\n capital: 'Warsaw',\r\n timezone: 'Europe/Warsaw',\r\n states: [\r\n { name: 'Masovian', code: 'MZ', cities: [{ name: 'Warsaw' }] },\r\n { name: 'Lesser Poland', code: 'MA', cities: [{ name: 'Krakow' }] },\r\n { name: 'Greater Poland', code: 'WP', cities: [{ name: 'Poznań' }] },\r\n { name: 'Lower Silesian', code: 'DS', cities: [{ name: 'Wrocław' }] },\r\n ],\r\n },\r\n {\r\n name: 'Portugal',\r\n code: 'PT',\r\n code3: 'PRT',\r\n phoneCode: '+351',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Lisbon',\r\n timezone: 'Europe/Lisbon',\r\n states: [\r\n { name: 'Lisbon', code: 'LIS', cities: [{ name: 'Lisbon' }] },\r\n { name: 'Porto', code: 'POR', cities: [{ name: 'Porto' }] },\r\n { name: 'Faro', code: 'FAR', cities: [{ name: 'Faro' }] },\r\n ],\r\n },\r\n {\r\n name: 'Qatar',\r\n code: 'QA',\r\n code3: 'QAT',\r\n phoneCode: '+974',\r\n currency: 'QAR',\r\n currencySymbol: 'ر.ق',\r\n continent: 'Asia',\r\n capital: 'Doha',\r\n timezone: 'Asia/Qatar',\r\n states: [\r\n { name: 'Doha', code: 'DA', cities: [{ name: 'Doha' }] },\r\n { name: 'Al Wakrah', code: 'WA', cities: [{ name: 'Al Wakrah' }] },\r\n ],\r\n },\r\n {\r\n name: 'Russia',\r\n code: 'RU',\r\n code3: 'RUS',\r\n phoneCode: '+7',\r\n currency: 'RUB',\r\n currencySymbol: '₽',\r\n continent: 'Europe',\r\n capital: 'Moscow',\r\n timezone: 'Europe/Moscow',\r\n states: [\r\n { name: 'Moscow', code: 'MOW', cities: [{ name: 'Moscow' }] },\r\n { name: 'Saint Petersburg', code: 'SPE', cities: [{ name: 'Saint Petersburg' }] },\r\n { name: 'Novosibirsk Oblast', code: 'NVS', cities: [{ name: 'Novosibirsk' }] },\r\n { name: 'Sverdlovsk Oblast', code: 'SVE', cities: [{ name: 'Yekaterinburg' }] },\r\n ],\r\n },\r\n {\r\n name: 'Saudi Arabia',\r\n code: 'SA',\r\n code3: 'SAU',\r\n phoneCode: '+966',\r\n currency: 'SAR',\r\n currencySymbol: 'ر.س',\r\n continent: 'Asia',\r\n capital: 'Riyadh',\r\n timezone: 'Asia/Riyadh',\r\n states: [\r\n { name: 'Riyadh', code: 'RIY', cities: [{ name: 'Riyadh' }] },\r\n { name: 'Makkah', code: 'MKK', cities: [{ name: 'Jeddah' }, { name: 'Mecca' }] },\r\n { name: 'Eastern Province', code: 'ASH', cities: [{ name: 'Dammam' }, { name: 'Dhahran' }] },\r\n ],\r\n },\r\n {\r\n name: 'Singapore',\r\n code: 'SG',\r\n code3: 'SGP',\r\n phoneCode: '+65',\r\n currency: 'SGD',\r\n currencySymbol: '$',\r\n continent: 'Asia',\r\n capital: 'Singapore',\r\n timezone: 'Asia/Singapore',\r\n states: [\r\n { name: 'Central Region', code: 'CEN', cities: [{ name: 'Singapore' }] },\r\n ],\r\n },\r\n {\r\n name: 'South Africa',\r\n code: 'ZA',\r\n code3: 'ZAF',\r\n phoneCode: '+27',\r\n currency: 'ZAR',\r\n currencySymbol: 'R',\r\n continent: 'Africa',\r\n capital: 'Pretoria',\r\n timezone: 'Africa/Johannesburg',\r\n states: [\r\n { name: 'Gauteng', code: 'GP', cities: [{ name: 'Johannesburg' }, { name: 'Pretoria' }] },\r\n { name: 'Western Cape', code: 'WC', cities: [{ name: 'Cape Town' }] },\r\n { name: 'KwaZulu-Natal', code: 'KZN', cities: [{ name: 'Durban' }] },\r\n ],\r\n },\r\n {\r\n name: 'South Korea',\r\n code: 'KR',\r\n code3: 'KOR',\r\n phoneCode: '+82',\r\n currency: 'KRW',\r\n currencySymbol: '₩',\r\n continent: 'Asia',\r\n capital: 'Seoul',\r\n timezone: 'Asia/Seoul',\r\n states: [\r\n { name: 'Seoul', code: 'SEO', cities: [{ name: 'Seoul' }] },\r\n { name: 'Busan', code: 'BUS', cities: [{ name: 'Busan' }] },\r\n { name: 'Incheon', code: 'INC', cities: [{ name: 'Incheon' }] },\r\n { name: 'Gyeonggi', code: 'GGI', cities: [{ name: 'Suwon' }, { name: 'Seongnam' }] },\r\n ],\r\n },\r\n {\r\n name: 'Spain',\r\n code: 'ES',\r\n code3: 'ESP',\r\n phoneCode: '+34',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Madrid',\r\n timezone: 'Europe/Madrid',\r\n states: [\r\n { name: 'Madrid', code: 'MD', cities: [{ name: 'Madrid' }] },\r\n { name: 'Catalonia', code: 'CT', cities: [{ name: 'Barcelona' }] },\r\n { name: 'Andalusia', code: 'AN', cities: [{ name: 'Seville' }, { name: 'Malaga' }, { name: 'Granada' }] },\r\n { name: 'Valencia', code: 'VC', cities: [{ name: 'Valencia' }] },\r\n { name: 'Basque Country', code: 'PV', cities: [{ name: 'Bilbao' }, { name: 'San Sebastián' }] },\r\n ],\r\n },\r\n {\r\n name: 'Sri Lanka',\r\n code: 'LK',\r\n code3: 'LKA',\r\n phoneCode: '+94',\r\n currency: 'LKR',\r\n currencySymbol: '₨',\r\n continent: 'Asia',\r\n capital: 'Colombo',\r\n timezone: 'Asia/Colombo',\r\n states: [\r\n { name: 'Western', code: 'WP', cities: [{ name: 'Colombo' }] },\r\n { name: 'Central', code: 'CP', cities: [{ name: 'Kandy' }] },\r\n { name: 'Southern', code: 'SP', cities: [{ name: 'Galle' }] },\r\n ],\r\n },\r\n {\r\n name: 'Sweden',\r\n code: 'SE',\r\n code3: 'SWE',\r\n phoneCode: '+46',\r\n currency: 'SEK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Stockholm',\r\n timezone: 'Europe/Stockholm',\r\n states: [\r\n { name: 'Stockholm', code: 'AB', cities: [{ name: 'Stockholm' }] },\r\n { name: 'Västra Götaland', code: 'VG', cities: [{ name: 'Gothenburg' }] },\r\n { name: 'Skåne', code: 'SK', cities: [{ name: 'Malmö' }] },\r\n ],\r\n },\r\n {\r\n name: 'Switzerland',\r\n code: 'CH',\r\n code3: 'CHE',\r\n phoneCode: '+41',\r\n currency: 'CHF',\r\n currencySymbol: 'CHF',\r\n continent: 'Europe',\r\n capital: 'Bern',\r\n timezone: 'Europe/Zurich',\r\n states: [\r\n { name: 'Zürich', code: 'ZH', cities: [{ name: 'Zürich' }] },\r\n { name: 'Geneva', code: 'GE', cities: [{ name: 'Geneva' }] },\r\n { name: 'Bern', code: 'BE', cities: [{ name: 'Bern' }] },\r\n { name: 'Basel-Stadt', code: 'BS', cities: [{ name: 'Basel' }] },\r\n ],\r\n },\r\n {\r\n name: 'Taiwan',\r\n code: 'TW',\r\n code3: 'TWN',\r\n phoneCode: '+886',\r\n currency: 'TWD',\r\n currencySymbol: 'NT$',\r\n continent: 'Asia',\r\n capital: 'Taipei',\r\n timezone: 'Asia/Taipei',\r\n states: [\r\n { name: 'Taipei', code: 'TPE', cities: [{ name: 'Taipei' }, { name: 'New Taipei' }] },\r\n { name: 'Taichung', code: 'TXG', cities: [{ name: 'Taichung' }] },\r\n { name: 'Kaohsiung', code: 'KHH', cities: [{ name: 'Kaohsiung' }] },\r\n ],\r\n },\r\n {\r\n name: 'Thailand',\r\n code: 'TH',\r\n code3: 'THA',\r\n phoneCode: '+66',\r\n currency: 'THB',\r\n currencySymbol: '฿',\r\n continent: 'Asia',\r\n capital: 'Bangkok',\r\n timezone: 'Asia/Bangkok',\r\n states: [\r\n { name: 'Bangkok', code: 'BKK', cities: [{ name: 'Bangkok' }] },\r\n { name: 'Chiang Mai', code: 'CNX', cities: [{ name: 'Chiang Mai' }] },\r\n { name: 'Phuket', code: 'PKT', cities: [{ name: 'Phuket' }] },\r\n { name: 'Chonburi', code: 'CBI', cities: [{ name: 'Pattaya' }] },\r\n ],\r\n },\r\n {\r\n name: 'Turkey',\r\n code: 'TR',\r\n code3: 'TUR',\r\n phoneCode: '+90',\r\n currency: 'TRY',\r\n currencySymbol: '₺',\r\n continent: 'Asia',\r\n capital: 'Ankara',\r\n timezone: 'Europe/Istanbul',\r\n states: [\r\n { name: 'Istanbul', code: 'IST', cities: [{ name: 'Istanbul' }] },\r\n { name: 'Ankara', code: 'ANK', cities: [{ name: 'Ankara' }] },\r\n { name: 'Izmir', code: 'IZM', cities: [{ name: 'Izmir' }] },\r\n { name: 'Antalya', code: 'ANT', cities: [{ name: 'Antalya' }] },\r\n ],\r\n },\r\n {\r\n name: 'Ukraine',\r\n code: 'UA',\r\n code3: 'UKR',\r\n phoneCode: '+380',\r\n currency: 'UAH',\r\n currencySymbol: '₴',\r\n continent: 'Europe',\r\n capital: 'Kyiv',\r\n timezone: 'Europe/Kyiv',\r\n states: [\r\n { name: 'Kyiv', code: 'KY', cities: [{ name: 'Kyiv' }] },\r\n { name: 'Kharkiv', code: 'KH', cities: [{ name: 'Kharkiv' }] },\r\n { name: 'Odessa', code: 'OD', cities: [{ name: 'Odessa' }] },\r\n { name: 'Lviv', code: 'LV', cities: [{ name: 'Lviv' }] },\r\n ],\r\n },\r\n {\r\n name: 'United Arab Emirates',\r\n code: 'AE',\r\n code3: 'ARE',\r\n phoneCode: '+971',\r\n currency: 'AED',\r\n currencySymbol: 'د.إ',\r\n continent: 'Asia',\r\n capital: 'Abu Dhabi',\r\n timezone: 'Asia/Dubai',\r\n states: [\r\n { name: 'Dubai', code: 'DU', cities: [{ name: 'Dubai' }] },\r\n { name: 'Abu Dhabi', code: 'AZ', cities: [{ name: 'Abu Dhabi' }] },\r\n { name: 'Sharjah', code: 'SH', cities: [{ name: 'Sharjah' }] },\r\n { name: 'Ajman', code: 'AJ', cities: [{ name: 'Ajman' }] },\r\n ],\r\n },\r\n {\r\n name: 'United Kingdom',\r\n code: 'GB',\r\n code3: 'GBR',\r\n phoneCode: '+44',\r\n currency: 'GBP',\r\n currencySymbol: '£',\r\n continent: 'Europe',\r\n capital: 'London',\r\n timezone: 'Europe/London',\r\n states: [\r\n { name: 'England', code: 'ENG', cities: [{ name: 'London' }, { name: 'Manchester' }, { name: 'Birmingham' }, { name: 'Liverpool' }, { name: 'Leeds' }, { name: 'Bristol' }] },\r\n { name: 'Scotland', code: 'SCT', cities: [{ name: 'Edinburgh' }, { name: 'Glasgow' }] },\r\n { name: 'Wales', code: 'WLS', cities: [{ name: 'Cardiff' }, { name: 'Swansea' }] },\r\n { name: 'Northern Ireland', code: 'NIR', cities: [{ name: 'Belfast' }] },\r\n ],\r\n },\r\n {\r\n name: 'United States',\r\n code: 'US',\r\n code3: 'USA',\r\n phoneCode: '+1',\r\n currency: 'USD',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Washington, D.C.',\r\n timezone: 'America/New_York',\r\n states: [\r\n { name: 'California', code: 'CA', cities: [{ name: 'Los Angeles' }, { name: 'San Francisco' }, { name: 'San Diego' }, { name: 'San Jose' }, { name: 'Sacramento' }] },\r\n { name: 'New York', code: 'NY', cities: [{ name: 'New York City' }, { name: 'Buffalo' }, { name: 'Albany' }] },\r\n { name: 'Texas', code: 'TX', cities: [{ name: 'Houston' }, { name: 'Dallas' }, { name: 'Austin' }, { name: 'San Antonio' }] },\r\n { name: 'Florida', code: 'FL', cities: [{ name: 'Miami' }, { name: 'Orlando' }, { name: 'Tampa' }, { name: 'Jacksonville' }] },\r\n { name: 'Illinois', code: 'IL', cities: [{ name: 'Chicago' }] },\r\n { name: 'Pennsylvania', code: 'PA', cities: [{ name: 'Philadelphia' }, { name: 'Pittsburgh' }] },\r\n { name: 'Ohio', code: 'OH', cities: [{ name: 'Columbus' }, { name: 'Cleveland' }, { name: 'Cincinnati' }] },\r\n { name: 'Georgia', code: 'GA', cities: [{ name: 'Atlanta' }] },\r\n { name: 'North Carolina', code: 'NC', cities: [{ name: 'Charlotte' }, { name: 'Raleigh' }] },\r\n { name: 'Michigan', code: 'MI', cities: [{ name: 'Detroit' }] },\r\n { name: 'Washington', code: 'WA', cities: [{ name: 'Seattle' }] },\r\n { name: 'Arizona', code: 'AZ', cities: [{ name: 'Phoenix' }, { name: 'Tucson' }] },\r\n { name: 'Massachusetts', code: 'MA', cities: [{ name: 'Boston' }, { name: 'Cambridge' }] },\r\n { name: 'Colorado', code: 'CO', cities: [{ name: 'Denver' }, { name: 'Colorado Springs' }] },\r\n { name: 'Nevada', code: 'NV', cities: [{ name: 'Las Vegas' }, { name: 'Reno' }] },\r\n { name: 'Oregon', code: 'OR', cities: [{ name: 'Portland' }] },\r\n { name: 'District of Columbia', code: 'DC', cities: [{ name: 'Washington' }] },\r\n ],\r\n },\r\n {\r\n name: 'Vietnam',\r\n code: 'VN',\r\n code3: 'VNM',\r\n phoneCode: '+84',\r\n currency: 'VND',\r\n currencySymbol: '₫',\r\n continent: 'Asia',\r\n capital: 'Hanoi',\r\n timezone: 'Asia/Ho_Chi_Minh',\r\n states: [\r\n { name: 'Ho Chi Minh City', code: 'HCM', cities: [{ name: 'Ho Chi Minh City' }] },\r\n { name: 'Hanoi', code: 'HAN', cities: [{ name: 'Hanoi' }] },\r\n { name: 'Da Nang', code: 'DAN', cities: [{ name: 'Da Nang' }] },\r\n ],\r\n },\r\n];\r\n\r\n// Helper functions\r\nexport const getCountryByCode = (code: string): Country | undefined => {\r\n return countries.find((c) => c.code === code || c.code3 === code);\r\n};\r\n\r\nexport const getCountryByName = (name: string): Country | undefined => {\r\n return countries.find((c) => c.name.toLowerCase() === name.toLowerCase());\r\n};\r\n\r\nexport const getStatesByCountry = (countryCode: string): State[] => {\r\n const country = getCountryByCode(countryCode);\r\n return country?.states || [];\r\n};\r\n\r\nexport const getCitiesByState = (countryCode: string, stateCode: string): City[] => {\r\n const states = getStatesByCountry(countryCode);\r\n const state = states.find((s) => s.code === stateCode);\r\n return state?.cities || [];\r\n};\r\n\r\nexport const getAllCities = (countryCode: string): City[] => {\r\n const states = getStatesByCountry(countryCode);\r\n return states.flatMap((s) => s.cities);\r\n};\r\n\r\nexport const getCountriesByContinent = (continent: string): Country[] => {\r\n return countries.filter((c) => c.continent.toLowerCase() === continent.toLowerCase());\r\n};\r\n\r\nexport const searchCountries = (query: string): Country[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return countries.filter(\r\n (c) =>\r\n c.name.toLowerCase().includes(lowerQuery) ||\r\n c.code.toLowerCase() === lowerQuery ||\r\n c.code3.toLowerCase() === lowerQuery\r\n );\r\n};\r\n\r\nexport default countries;\r\n","/**\r\n * Phone codes by country\r\n */\r\nexport interface PhoneCode {\r\n country: string;\r\n code: string;\r\n phoneCode: string;\r\n flag: string;\r\n}\r\n\r\nexport const phoneCodes: PhoneCode[] = [\r\n { country: 'Afghanistan', code: 'AF', phoneCode: '+93', flag: '🇦🇫' },\r\n { country: 'Albania', code: 'AL', phoneCode: '+355', flag: '🇦🇱' },\r\n { country: 'Algeria', code: 'DZ', phoneCode: '+213', flag: '🇩🇿' },\r\n { country: 'American Samoa', code: 'AS', phoneCode: '+1684', flag: '🇦🇸' },\r\n { country: 'Andorra', code: 'AD', phoneCode: '+376', flag: '🇦🇩' },\r\n { country: 'Angola', code: 'AO', phoneCode: '+244', flag: '🇦🇴' },\r\n { country: 'Anguilla', code: 'AI', phoneCode: '+1264', flag: '🇦🇮' },\r\n { country: 'Argentina', code: 'AR', phoneCode: '+54', flag: '🇦🇷' },\r\n { country: 'Armenia', code: 'AM', phoneCode: '+374', flag: '🇦🇲' },\r\n { country: 'Australia', code: 'AU', phoneCode: '+61', flag: '🇦🇺' },\r\n { country: 'Austria', code: 'AT', phoneCode: '+43', flag: '🇦🇹' },\r\n { country: 'Azerbaijan', code: 'AZ', phoneCode: '+994', flag: '🇦🇿' },\r\n { country: 'Bahamas', code: 'BS', phoneCode: '+1242', flag: '🇧🇸' },\r\n { country: 'Bahrain', code: 'BH', phoneCode: '+973', flag: '🇧🇭' },\r\n { country: 'Bangladesh', code: 'BD', phoneCode: '+880', flag: '🇧🇩' },\r\n { country: 'Barbados', code: 'BB', phoneCode: '+1246', flag: '🇧🇧' },\r\n { country: 'Belarus', code: 'BY', phoneCode: '+375', flag: '🇧🇾' },\r\n { country: 'Belgium', code: 'BE', phoneCode: '+32', flag: '🇧🇪' },\r\n { country: 'Belize', code: 'BZ', phoneCode: '+501', flag: '🇧🇿' },\r\n { country: 'Benin', code: 'BJ', phoneCode: '+229', flag: '🇧🇯' },\r\n { country: 'Bermuda', code: 'BM', phoneCode: '+1441', flag: '🇧🇲' },\r\n { country: 'Bhutan', code: 'BT', phoneCode: '+975', flag: '🇧🇹' },\r\n { country: 'Bolivia', code: 'BO', phoneCode: '+591', flag: '🇧🇴' },\r\n { country: 'Bosnia and Herzegovina', code: 'BA', phoneCode: '+387', flag: '🇧🇦' },\r\n { country: 'Botswana', code: 'BW', phoneCode: '+267', flag: '🇧🇼' },\r\n { country: 'Brazil', code: 'BR', phoneCode: '+55', flag: '🇧🇷' },\r\n { country: 'Brunei', code: 'BN', phoneCode: '+673', flag: '🇧🇳' },\r\n { country: 'Bulgaria', code: 'BG', phoneCode: '+359', flag: '🇧🇬' },\r\n { country: 'Burkina Faso', code: 'BF', phoneCode: '+226', flag: '🇧🇫' },\r\n { country: 'Burundi', code: 'BI', phoneCode: '+257', flag: '🇧🇮' },\r\n { country: 'Cambodia', code: 'KH', phoneCode: '+855', flag: '🇰🇭' },\r\n { country: 'Cameroon', code: 'CM', phoneCode: '+237', flag: '🇨🇲' },\r\n { country: 'Canada', code: 'CA', phoneCode: '+1', flag: '🇨🇦' },\r\n { country: 'Cape Verde', code: 'CV', phoneCode: '+238', flag: '🇨🇻' },\r\n { country: 'Cayman Islands', code: 'KY', phoneCode: '+1345', flag: '🇰🇾' },\r\n { country: 'Central African Republic', code: 'CF', phoneCode: '+236', flag: '🇨🇫' },\r\n { country: 'Chad', code: 'TD', phoneCode: '+235', flag: '🇹🇩' },\r\n { country: 'Chile', code: 'CL', phoneCode: '+56', flag: '🇨🇱' },\r\n { country: 'China', code: 'CN', phoneCode: '+86', flag: '🇨🇳' },\r\n { country: 'Colombia', code: 'CO', phoneCode: '+57', flag: '🇨🇴' },\r\n { country: 'Comoros', code: 'KM', phoneCode: '+269', flag: '🇰🇲' },\r\n { country: 'Congo', code: 'CG', phoneCode: '+242', flag: '🇨🇬' },\r\n { country: 'Costa Rica', code: 'CR', phoneCode: '+506', flag: '🇨🇷' },\r\n { country: 'Croatia', code: 'HR', phoneCode: '+385', flag: '🇭🇷' },\r\n { country: 'Cuba', code: 'CU', phoneCode: '+53', flag: '🇨🇺' },\r\n { country: 'Cyprus', code: 'CY', phoneCode: '+357', flag: '🇨🇾' },\r\n { country: 'Czech Republic', code: 'CZ', phoneCode: '+420', flag: '🇨🇿' },\r\n { country: 'Denmark', code: 'DK', phoneCode: '+45', flag: '🇩🇰' },\r\n { country: 'Djibouti', code: 'DJ', phoneCode: '+253', flag: '🇩🇯' },\r\n { country: 'Dominica', code: 'DM', phoneCode: '+1767', flag: '🇩🇲' },\r\n { country: 'Dominican Republic', code: 'DO', phoneCode: '+1809', flag: '🇩🇴' },\r\n { country: 'Ecuador', code: 'EC', phoneCode: '+593', flag: '🇪🇨' },\r\n { country: 'Egypt', code: 'EG', phoneCode: '+20', flag: '🇪🇬' },\r\n { country: 'El Salvador', code: 'SV', phoneCode: '+503', flag: '🇸🇻' },\r\n { country: 'Equatorial Guinea', code: 'GQ', phoneCode: '+240', flag: '🇬🇶' },\r\n { country: 'Eritrea', code: 'ER', phoneCode: '+291', flag: '🇪🇷' },\r\n { country: 'Estonia', code: 'EE', phoneCode: '+372', flag: '🇪🇪' },\r\n { country: 'Ethiopia', code: 'ET', phoneCode: '+251', flag: '🇪🇹' },\r\n { country: 'Fiji', code: 'FJ', phoneCode: '+679', flag: '🇫🇯' },\r\n { country: 'Finland', code: 'FI', phoneCode: '+358', flag: '🇫🇮' },\r\n { country: 'France', code: 'FR', phoneCode: '+33', flag: '🇫🇷' },\r\n { country: 'Gabon', code: 'GA', phoneCode: '+241', flag: '🇬🇦' },\r\n { country: 'Gambia', code: 'GM', phoneCode: '+220', flag: '🇬🇲' },\r\n { country: 'Georgia', code: 'GE', phoneCode: '+995', flag: '🇬🇪' },\r\n { country: 'Germany', code: 'DE', phoneCode: '+49', flag: '🇩🇪' },\r\n { country: 'Ghana', code: 'GH', phoneCode: '+233', flag: '🇬🇭' },\r\n { country: 'Greece', code: 'GR', phoneCode: '+30', flag: '🇬🇷' },\r\n { country: 'Greenland', code: 'GL', phoneCode: '+299', flag: '🇬🇱' },\r\n { country: 'Grenada', code: 'GD', phoneCode: '+1473', flag: '🇬🇩' },\r\n { country: 'Guam', code: 'GU', phoneCode: '+1671', flag: '🇬🇺' },\r\n { country: 'Guatemala', code: 'GT', phoneCode: '+502', flag: '🇬🇹' },\r\n { country: 'Guinea', code: 'GN', phoneCode: '+224', flag: '🇬🇳' },\r\n { country: 'Guyana', code: 'GY', phoneCode: '+592', flag: '🇬🇾' },\r\n { country: 'Haiti', code: 'HT', phoneCode: '+509', flag: '🇭🇹' },\r\n { country: 'Honduras', code: 'HN', phoneCode: '+504', flag: '🇭🇳' },\r\n { country: 'Hong Kong', code: 'HK', phoneCode: '+852', flag: '🇭🇰' },\r\n { country: 'Hungary', code: 'HU', phoneCode: '+36', flag: '🇭🇺' },\r\n { country: 'Iceland', code: 'IS', phoneCode: '+354', flag: '🇮🇸' },\r\n { country: 'India', code: 'IN', phoneCode: '+91', flag: '🇮🇳' },\r\n { country: 'Indonesia', code: 'ID', phoneCode: '+62', flag: '🇮🇩' },\r\n { country: 'Iran', code: 'IR', phoneCode: '+98', flag: '🇮🇷' },\r\n { country: 'Iraq', code: 'IQ', phoneCode: '+964', flag: '🇮🇶' },\r\n { country: 'Ireland', code: 'IE', phoneCode: '+353', flag: '🇮🇪' },\r\n { country: 'Israel', code: 'IL', phoneCode: '+972', flag: '🇮🇱' },\r\n { country: 'Italy', code: 'IT', phoneCode: '+39', flag: '🇮🇹' },\r\n { country: 'Jamaica', code: 'JM', phoneCode: '+1876', flag: '🇯🇲' },\r\n { country: 'Japan', code: 'JP', phoneCode: '+81', flag: '🇯🇵' },\r\n { country: 'Jordan', code: 'JO', phoneCode: '+962', flag: '🇯🇴' },\r\n { country: 'Kazakhstan', code: 'KZ', phoneCode: '+7', flag: '🇰🇿' },\r\n { country: 'Kenya', code: 'KE', phoneCode: '+254', flag: '🇰🇪' },\r\n { country: 'Kiribati', code: 'KI', phoneCode: '+686', flag: '🇰🇮' },\r\n { country: 'Kuwait', code: 'KW', phoneCode: '+965', flag: '🇰🇼' },\r\n { country: 'Kyrgyzstan', code: 'KG', phoneCode: '+996', flag: '🇰🇬' },\r\n { country: 'Laos', code: 'LA', phoneCode: '+856', flag: '🇱🇦' },\r\n { country: 'Latvia', code: 'LV', phoneCode: '+371', flag: '🇱🇻' },\r\n { country: 'Lebanon', code: 'LB', phoneCode: '+961', flag: '🇱🇧' },\r\n { country: 'Lesotho', code: 'LS', phoneCode: '+266', flag: '🇱🇸' },\r\n { country: 'Liberia', code: 'LR', phoneCode: '+231', flag: '🇱🇷' },\r\n { country: 'Libya', code: 'LY', phoneCode: '+218', flag: '🇱🇾' },\r\n { country: 'Liechtenstein', code: 'LI', phoneCode: '+423', flag: '🇱🇮' },\r\n { country: 'Lithuania', code: 'LT', phoneCode: '+370', flag: '🇱🇹' },\r\n { country: 'Luxembourg', code: 'LU', phoneCode: '+352', flag: '🇱🇺' },\r\n { country: 'Macau', code: 'MO', phoneCode: '+853', flag: '🇲🇴' },\r\n { country: 'Madagascar', code: 'MG', phoneCode: '+261', flag: '🇲🇬' },\r\n { country: 'Malawi', code: 'MW', phoneCode: '+265', flag: '🇲🇼' },\r\n { country: 'Malaysia', code: 'MY', phoneCode: '+60', flag: '🇲🇾' },\r\n { country: 'Maldives', code: 'MV', phoneCode: '+960', flag: '🇲🇻' },\r\n { country: 'Mali', code: 'ML', phoneCode: '+223', flag: '🇲🇱' },\r\n { country: 'Malta', code: 'MT', phoneCode: '+356', flag: '🇲🇹' },\r\n { country: 'Mauritania', code: 'MR', phoneCode: '+222', flag: '🇲🇷' },\r\n { country: 'Mauritius', code: 'MU', phoneCode: '+230', flag: '🇲🇺' },\r\n { country: 'Mexico', code: 'MX', phoneCode: '+52', flag: '🇲🇽' },\r\n { country: 'Moldova', code: 'MD', phoneCode: '+373', flag: '🇲🇩' },\r\n { country: 'Monaco', code: 'MC', phoneCode: '+377', flag: '🇲🇨' },\r\n { country: 'Mongolia', code: 'MN', phoneCode: '+976', flag: '🇲🇳' },\r\n { country: 'Montenegro', code: 'ME', phoneCode: '+382', flag: '🇲🇪' },\r\n { country: 'Morocco', code: 'MA', phoneCode: '+212', flag: '🇲🇦' },\r\n { country: 'Mozambique', code: 'MZ', phoneCode: '+258', flag: '🇲🇿' },\r\n { country: 'Myanmar', code: 'MM', phoneCode: '+95', flag: '🇲🇲' },\r\n { country: 'Namibia', code: 'NA', phoneCode: '+264', flag: '🇳🇦' },\r\n { country: 'Nauru', code: 'NR', phoneCode: '+674', flag: '🇳🇷' },\r\n { country: 'Nepal', code: 'NP', phoneCode: '+977', flag: '🇳🇵' },\r\n { country: 'Netherlands', code: 'NL', phoneCode: '+31', flag: '🇳🇱' },\r\n { country: 'New Zealand', code: 'NZ', phoneCode: '+64', flag: '🇳🇿' },\r\n { country: 'Nicaragua', code: 'NI', phoneCode: '+505', flag: '🇳🇮' },\r\n { country: 'Niger', code: 'NE', phoneCode: '+227', flag: '🇳🇪' },\r\n { country: 'Nigeria', code: 'NG', phoneCode: '+234', flag: '🇳🇬' },\r\n { country: 'North Korea', code: 'KP', phoneCode: '+850', flag: '🇰🇵' },\r\n { country: 'North Macedonia', code: 'MK', phoneCode: '+389', flag: '🇲🇰' },\r\n { country: 'Norway', code: 'NO', phoneCode: '+47', flag: '🇳🇴' },\r\n { country: 'Oman', code: 'OM', phoneCode: '+968', flag: '🇴🇲' },\r\n { country: 'Pakistan', code: 'PK', phoneCode: '+92', flag: '🇵🇰' },\r\n { country: 'Palau', code: 'PW', phoneCode: '+680', flag: '🇵🇼' },\r\n { country: 'Palestine', code: 'PS', phoneCode: '+970', flag: '🇵🇸' },\r\n { country: 'Panama', code: 'PA', phoneCode: '+507', flag: '🇵🇦' },\r\n { country: 'Papua New Guinea', code: 'PG', phoneCode: '+675', flag: '🇵🇬' },\r\n { country: 'Paraguay', code: 'PY', phoneCode: '+595', flag: '🇵🇾' },\r\n { country: 'Peru', code: 'PE', phoneCode: '+51', flag: '🇵🇪' },\r\n { country: 'Philippines', code: 'PH', phoneCode: '+63', flag: '🇵🇭' },\r\n { country: 'Poland', code: 'PL', phoneCode: '+48', flag: '🇵🇱' },\r\n { country: 'Portugal', code: 'PT', phoneCode: '+351', flag: '🇵🇹' },\r\n { country: 'Puerto Rico', code: 'PR', phoneCode: '+1787', flag: '🇵🇷' },\r\n { country: 'Qatar', code: 'QA', phoneCode: '+974', flag: '🇶🇦' },\r\n { country: 'Romania', code: 'RO', phoneCode: '+40', flag: '🇷🇴' },\r\n { country: 'Russia', code: 'RU', phoneCode: '+7', flag: '🇷🇺' },\r\n { country: 'Rwanda', code: 'RW', phoneCode: '+250', flag: '🇷🇼' },\r\n { country: 'Saudi Arabia', code: 'SA', phoneCode: '+966', flag: '🇸🇦' },\r\n { country: 'Senegal', code: 'SN', phoneCode: '+221', flag: '🇸🇳' },\r\n { country: 'Serbia', code: 'RS', phoneCode: '+381', flag: '🇷🇸' },\r\n { country: 'Seychelles', code: 'SC', phoneCode: '+248', flag: '🇸🇨' },\r\n { country: 'Sierra Leone', code: 'SL', phoneCode: '+232', flag: '🇸🇱' },\r\n { country: 'Singapore', code: 'SG', phoneCode: '+65', flag: '🇸🇬' },\r\n { country: 'Slovakia', code: 'SK', phoneCode: '+421', flag: '🇸🇰' },\r\n { country: 'Slovenia', code: 'SI', phoneCode: '+386', flag: '🇸🇮' },\r\n { country: 'Solomon Islands', code: 'SB', phoneCode: '+677', flag: '🇸🇧' },\r\n { country: 'Somalia', code: 'SO', phoneCode: '+252', flag: '🇸🇴' },\r\n { country: 'South Africa', code: 'ZA', phoneCode: '+27', flag: '🇿🇦' },\r\n { country: 'South Korea', code: 'KR', phoneCode: '+82', flag: '🇰🇷' },\r\n { country: 'South Sudan', code: 'SS', phoneCode: '+211', flag: '🇸🇸' },\r\n { country: 'Spain', code: 'ES', phoneCode: '+34', flag: '🇪🇸' },\r\n { country: 'Sri Lanka', code: 'LK', phoneCode: '+94', flag: '🇱🇰' },\r\n { country: 'Sudan', code: 'SD', phoneCode: '+249', flag: '🇸🇩' },\r\n { country: 'Suriname', code: 'SR', phoneCode: '+597', flag: '🇸🇷' },\r\n { country: 'Sweden', code: 'SE', phoneCode: '+46', flag: '🇸🇪' },\r\n { country: 'Switzerland', code: 'CH', phoneCode: '+41', flag: '🇨🇭' },\r\n { country: 'Syria', code: 'SY', phoneCode: '+963', flag: '🇸🇾' },\r\n { country: 'Taiwan', code: 'TW', phoneCode: '+886', flag: '🇹🇼' },\r\n { country: 'Tajikistan', code: 'TJ', phoneCode: '+992', flag: '🇹🇯' },\r\n { country: 'Tanzania', code: 'TZ', phoneCode: '+255', flag: '🇹🇿' },\r\n { country: 'Thailand', code: 'TH', phoneCode: '+66', flag: '🇹🇭' },\r\n { country: 'Togo', code: 'TG', phoneCode: '+228', flag: '🇹🇬' },\r\n { country: 'Tonga', code: 'TO', phoneCode: '+676', flag: '🇹🇴' },\r\n { country: 'Trinidad and Tobago', code: 'TT', phoneCode: '+1868', flag: '🇹🇹' },\r\n { country: 'Tunisia', code: 'TN', phoneCode: '+216', flag: '🇹🇳' },\r\n { country: 'Turkey', code: 'TR', phoneCode: '+90', flag: '🇹🇷' },\r\n { country: 'Turkmenistan', code: 'TM', phoneCode: '+993', flag: '🇹🇲' },\r\n { country: 'Tuvalu', code: 'TV', phoneCode: '+688', flag: '🇹🇻' },\r\n { country: 'Uganda', code: 'UG', phoneCode: '+256', flag: '🇺🇬' },\r\n { country: 'Ukraine', code: 'UA', phoneCode: '+380', flag: '🇺🇦' },\r\n { country: 'United Arab Emirates', code: 'AE', phoneCode: '+971', flag: '🇦🇪' },\r\n { country: 'United Kingdom', code: 'GB', phoneCode: '+44', flag: '🇬🇧' },\r\n { country: 'United States', code: 'US', phoneCode: '+1', flag: '🇺🇸' },\r\n { country: 'Uruguay', code: 'UY', phoneCode: '+598', flag: '🇺🇾' },\r\n { country: 'Uzbekistan', code: 'UZ', phoneCode: '+998', flag: '🇺🇿' },\r\n { country: 'Vanuatu', code: 'VU', phoneCode: '+678', flag: '🇻🇺' },\r\n { country: 'Vatican City', code: 'VA', phoneCode: '+379', flag: '🇻🇦' },\r\n { country: 'Venezuela', code: 'VE', phoneCode: '+58', flag: '🇻🇪' },\r\n { country: 'Vietnam', code: 'VN', phoneCode: '+84', flag: '🇻🇳' },\r\n { country: 'Yemen', code: 'YE', phoneCode: '+967', flag: '🇾🇪' },\r\n { country: 'Zambia', code: 'ZM', phoneCode: '+260', flag: '🇿🇲' },\r\n { country: 'Zimbabwe', code: 'ZW', phoneCode: '+263', flag: '🇿🇼' },\r\n];\r\n\r\n// Helper functions\r\nexport const getPhoneCodeByCountry = (countryCode: string): PhoneCode | undefined => {\r\n return phoneCodes.find((p) => p.code === countryCode);\r\n};\r\n\r\nexport const searchPhoneCodes = (query: string): PhoneCode[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return phoneCodes.filter(\r\n (p) =>\r\n p.country.toLowerCase().includes(lowerQuery) ||\r\n p.code.toLowerCase() === lowerQuery ||\r\n p.phoneCode.includes(query)\r\n );\r\n};\r\n\r\nexport const getPhoneCodesByPrefix = (prefix: string): PhoneCode[] => {\r\n return phoneCodes.filter((p) => p.phoneCode.startsWith(prefix));\r\n};\r\n\r\nexport default phoneCodes;\r\n","/**\r\n * Currency data with symbols and formatting\r\n */\r\nexport interface Currency {\r\n code: string; // ISO 4217 currency code\r\n name: string;\r\n symbol: string;\r\n symbolNative: string;\r\n decimalDigits: number;\r\n rounding: number;\r\n namePlural: string;\r\n}\r\n\r\nexport const currencies: Currency[] = [\r\n { code: 'AED', name: 'UAE Dirham', symbol: 'AED', symbolNative: 'د.إ', decimalDigits: 2, rounding: 0, namePlural: 'UAE dirhams' },\r\n { code: 'AFN', name: 'Afghan Afghani', symbol: 'Af', symbolNative: '؋', decimalDigits: 0, rounding: 0, namePlural: 'Afghan Afghanis' },\r\n { code: 'ALL', name: 'Albanian Lek', symbol: 'ALL', symbolNative: 'Lek', decimalDigits: 0, rounding: 0, namePlural: 'Albanian lekë' },\r\n { code: 'AMD', name: 'Armenian Dram', symbol: 'AMD', symbolNative: 'դր.', decimalDigits: 0, rounding: 0, namePlural: 'Armenian drams' },\r\n { code: 'ARS', name: 'Argentine Peso', symbol: 'AR$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Argentine pesos' },\r\n { code: 'AUD', name: 'Australian Dollar', symbol: 'AU$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Australian dollars' },\r\n { code: 'AZN', name: 'Azerbaijani Manat', symbol: 'man.', symbolNative: 'ман.', decimalDigits: 2, rounding: 0, namePlural: 'Azerbaijani manats' },\r\n { code: 'BAM', name: 'Bosnia-Herzegovina Convertible Mark', symbol: 'KM', symbolNative: 'KM', decimalDigits: 2, rounding: 0, namePlural: 'Bosnia-Herzegovina convertible marks' },\r\n { code: 'BDT', name: 'Bangladeshi Taka', symbol: 'Tk', symbolNative: '৳', decimalDigits: 2, rounding: 0, namePlural: 'Bangladeshi takas' },\r\n { code: 'BGN', name: 'Bulgarian Lev', symbol: 'BGN', symbolNative: 'лв.', decimalDigits: 2, rounding: 0, namePlural: 'Bulgarian leva' },\r\n { code: 'BHD', name: 'Bahraini Dinar', symbol: 'BD', symbolNative: 'د.ب.', decimalDigits: 3, rounding: 0, namePlural: 'Bahraini dinars' },\r\n { code: 'BIF', name: 'Burundian Franc', symbol: 'FBu', symbolNative: 'FBu', decimalDigits: 0, rounding: 0, namePlural: 'Burundian francs' },\r\n { code: 'BND', name: 'Brunei Dollar', symbol: 'BN$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Brunei dollars' },\r\n { code: 'BOB', name: 'Bolivian Boliviano', symbol: 'Bs', symbolNative: 'Bs', decimalDigits: 2, rounding: 0, namePlural: 'Bolivian bolivianos' },\r\n { code: 'BRL', name: 'Brazilian Real', symbol: 'R$', symbolNative: 'R$', decimalDigits: 2, rounding: 0, namePlural: 'Brazilian reals' },\r\n { code: 'BWP', name: 'Botswanan Pula', symbol: 'BWP', symbolNative: 'P', decimalDigits: 2, rounding: 0, namePlural: 'Botswanan pulas' },\r\n { code: 'BYN', name: 'Belarusian Ruble', symbol: 'Br', symbolNative: 'руб.', decimalDigits: 2, rounding: 0, namePlural: 'Belarusian rubles' },\r\n { code: 'BZD', name: 'Belize Dollar', symbol: 'BZ$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Belize dollars' },\r\n { code: 'CAD', name: 'Canadian Dollar', symbol: 'CA$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Canadian dollars' },\r\n { code: 'CDF', name: 'Congolese Franc', symbol: 'CDF', symbolNative: 'FrCD', decimalDigits: 2, rounding: 0, namePlural: 'Congolese francs' },\r\n { code: 'CHF', name: 'Swiss Franc', symbol: 'CHF', symbolNative: 'CHF', decimalDigits: 2, rounding: 0.05, namePlural: 'Swiss francs' },\r\n { code: 'CLP', name: 'Chilean Peso', symbol: 'CL$', symbolNative: '$', decimalDigits: 0, rounding: 0, namePlural: 'Chilean pesos' },\r\n { code: 'CNY', name: 'Chinese Yuan', symbol: 'CN¥', symbolNative: '¥', decimalDigits: 2, rounding: 0, namePlural: 'Chinese yuan' },\r\n { code: 'COP', name: 'Colombian Peso', symbol: 'CO$', symbolNative: '$', decimalDigits: 0, rounding: 0, namePlural: 'Colombian pesos' },\r\n { code: 'CRC', name: 'Costa Rican Colón', symbol: '₡', symbolNative: '₡', decimalDigits: 0, rounding: 0, namePlural: 'Costa Rican colóns' },\r\n { code: 'CZK', name: 'Czech Koruna', symbol: 'Kč', symbolNative: 'Kč', decimalDigits: 2, rounding: 0, namePlural: 'Czech korunas' },\r\n { code: 'DKK', name: 'Danish Krone', symbol: 'Dkr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Danish kroner' },\r\n { code: 'DOP', name: 'Dominican Peso', symbol: 'RD$', symbolNative: 'RD$', decimalDigits: 2, rounding: 0, namePlural: 'Dominican pesos' },\r\n { code: 'DZD', name: 'Algerian Dinar', symbol: 'DA', symbolNative: 'د.ج.', decimalDigits: 2, rounding: 0, namePlural: 'Algerian dinars' },\r\n { code: 'EGP', name: 'Egyptian Pound', symbol: 'EGP', symbolNative: 'ج.م.', decimalDigits: 2, rounding: 0, namePlural: 'Egyptian pounds' },\r\n { code: 'ETB', name: 'Ethiopian Birr', symbol: 'Br', symbolNative: 'Br', decimalDigits: 2, rounding: 0, namePlural: 'Ethiopian birrs' },\r\n { code: 'EUR', name: 'Euro', symbol: '€', symbolNative: '€', decimalDigits: 2, rounding: 0, namePlural: 'euros' },\r\n { code: 'GBP', name: 'British Pound', symbol: '£', symbolNative: '£', decimalDigits: 2, rounding: 0, namePlural: 'British pounds' },\r\n { code: 'GEL', name: 'Georgian Lari', symbol: 'GEL', symbolNative: 'GEL', decimalDigits: 2, rounding: 0, namePlural: 'Georgian laris' },\r\n { code: 'GHS', name: 'Ghanaian Cedi', symbol: 'GH₵', symbolNative: 'GH₵', decimalDigits: 2, rounding: 0, namePlural: 'Ghanaian cedis' },\r\n { code: 'GNF', name: 'Guinean Franc', symbol: 'FG', symbolNative: 'FG', decimalDigits: 0, rounding: 0, namePlural: 'Guinean francs' },\r\n { code: 'GTQ', name: 'Guatemalan Quetzal', symbol: 'GTQ', symbolNative: 'Q', decimalDigits: 2, rounding: 0, namePlural: 'Guatemalan quetzals' },\r\n { code: 'HKD', name: 'Hong Kong Dollar', symbol: 'HK$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Hong Kong dollars' },\r\n { code: 'HNL', name: 'Honduran Lempira', symbol: 'HNL', symbolNative: 'L', decimalDigits: 2, rounding: 0, namePlural: 'Honduran lempiras' },\r\n { code: 'HRK', name: 'Croatian Kuna', symbol: 'kn', symbolNative: 'kn', decimalDigits: 2, rounding: 0, namePlural: 'Croatian kunas' },\r\n { code: 'HUF', name: 'Hungarian Forint', symbol: 'Ft', symbolNative: 'Ft', decimalDigits: 0, rounding: 0, namePlural: 'Hungarian forints' },\r\n { code: 'IDR', name: 'Indonesian Rupiah', symbol: 'Rp', symbolNative: 'Rp', decimalDigits: 0, rounding: 0, namePlural: 'Indonesian rupiahs' },\r\n { code: 'ILS', name: 'Israeli New Shekel', symbol: '₪', symbolNative: '₪', decimalDigits: 2, rounding: 0, namePlural: 'Israeli new shekels' },\r\n { code: 'INR', name: 'Indian Rupee', symbol: '₹', symbolNative: '₹', decimalDigits: 2, rounding: 0, namePlural: 'Indian rupees' },\r\n { code: 'IQD', name: 'Iraqi Dinar', symbol: 'IQD', symbolNative: 'د.ع.', decimalDigits: 0, rounding: 0, namePlural: 'Iraqi dinars' },\r\n { code: 'IRR', name: 'Iranian Rial', symbol: 'IRR', symbolNative: '﷼', decimalDigits: 0, rounding: 0, namePlural: 'Iranian rials' },\r\n { code: 'ISK', name: 'Icelandic Króna', symbol: 'Ikr', symbolNative: 'kr', decimalDigits: 0, rounding: 0, namePlural: 'Icelandic krónur' },\r\n { code: 'JMD', name: 'Jamaican Dollar', symbol: 'J$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Jamaican dollars' },\r\n { code: 'JOD', name: 'Jordanian Dinar', symbol: 'JD', symbolNative: 'د.أ.', decimalDigits: 3, rounding: 0, namePlural: 'Jordanian dinars' },\r\n { code: 'JPY', name: 'Japanese Yen', symbol: '¥', symbolNative: '¥', decimalDigits: 0, rounding: 0, namePlural: 'Japanese yen' },\r\n { code: 'KES', name: 'Kenyan Shilling', symbol: 'Ksh', symbolNative: 'Ksh', decimalDigits: 2, rounding: 0, namePlural: 'Kenyan shillings' },\r\n { code: 'KHR', name: 'Cambodian Riel', symbol: 'KHR', symbolNative: '៛', decimalDigits: 2, rounding: 0, namePlural: 'Cambodian riels' },\r\n { code: 'KRW', name: 'South Korean Won', symbol: '₩', symbolNative: '₩', decimalDigits: 0, rounding: 0, namePlural: 'South Korean won' },\r\n { code: 'KWD', name: 'Kuwaiti Dinar', symbol: 'KD', symbolNative: 'د.ك.', decimalDigits: 3, rounding: 0, namePlural: 'Kuwaiti dinars' },\r\n { code: 'KZT', name: 'Kazakhstani Tenge', symbol: 'KZT', symbolNative: 'тңг.', decimalDigits: 2, rounding: 0, namePlural: 'Kazakhstani tenges' },\r\n { code: 'LAK', name: 'Lao Kip', symbol: '₭', symbolNative: '₭', decimalDigits: 0, rounding: 0, namePlural: 'Lao kip' },\r\n { code: 'LBP', name: 'Lebanese Pound', symbol: 'LB£', symbolNative: 'ل.ل.', decimalDigits: 0, rounding: 0, namePlural: 'Lebanese pounds' },\r\n { code: 'LKR', name: 'Sri Lankan Rupee', symbol: 'SLRs', symbolNative: 'රු', decimalDigits: 2, rounding: 0, namePlural: 'Sri Lankan rupees' },\r\n { code: 'LYD', name: 'Libyan Dinar', symbol: 'LD', symbolNative: 'د.ل.', decimalDigits: 3, rounding: 0, namePlural: 'Libyan dinars' },\r\n { code: 'MAD', name: 'Moroccan Dirham', symbol: 'MAD', symbolNative: 'د.م.', decimalDigits: 2, rounding: 0, namePlural: 'Moroccan dirhams' },\r\n { code: 'MDL', name: 'Moldovan Leu', symbol: 'MDL', symbolNative: 'MDL', decimalDigits: 2, rounding: 0, namePlural: 'Moldovan lei' },\r\n { code: 'MGA', name: 'Malagasy Ariary', symbol: 'MGA', symbolNative: 'MGA', decimalDigits: 0, rounding: 0, namePlural: 'Malagasy ariaries' },\r\n { code: 'MKD', name: 'Macedonian Denar', symbol: 'MKD', symbolNative: 'MKD', decimalDigits: 2, rounding: 0, namePlural: 'Macedonian denari' },\r\n { code: 'MMK', name: 'Myanmar Kyat', symbol: 'MMK', symbolNative: 'K', decimalDigits: 0, rounding: 0, namePlural: 'Myanmar kyats' },\r\n { code: 'MNT', name: 'Mongolian Tugrik', symbol: '₮', symbolNative: '₮', decimalDigits: 0, rounding: 0, namePlural: 'Mongolian tugriks' },\r\n { code: 'MOP', name: 'Macanese Pataca', symbol: 'MOP$', symbolNative: 'MOP$', decimalDigits: 2, rounding: 0, namePlural: 'Macanese patacas' },\r\n { code: 'MUR', name: 'Mauritian Rupee', symbol: 'MURs', symbolNative: 'MURs', decimalDigits: 0, rounding: 0, namePlural: 'Mauritian rupees' },\r\n { code: 'MXN', name: 'Mexican Peso', symbol: 'MX$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Mexican pesos' },\r\n { code: 'MYR', name: 'Malaysian Ringgit', symbol: 'RM', symbolNative: 'RM', decimalDigits: 2, rounding: 0, namePlural: 'Malaysian ringgits' },\r\n { code: 'MZN', name: 'Mozambican Metical', symbol: 'MTn', symbolNative: 'MTn', decimalDigits: 2, rounding: 0, namePlural: 'Mozambican meticals' },\r\n { code: 'NAD', name: 'Namibian Dollar', symbol: 'N$', symbolNative: 'N$', decimalDigits: 2, rounding: 0, namePlural: 'Namibian dollars' },\r\n { code: 'NGN', name: 'Nigerian Naira', symbol: '₦', symbolNative: '₦', decimalDigits: 2, rounding: 0, namePlural: 'Nigerian nairas' },\r\n { code: 'NIO', name: 'Nicaraguan Córdoba', symbol: 'C$', symbolNative: 'C$', decimalDigits: 2, rounding: 0, namePlural: 'Nicaraguan córdobas' },\r\n { code: 'NOK', name: 'Norwegian Krone', symbol: 'Nkr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Norwegian kroner' },\r\n { code: 'NPR', name: 'Nepalese Rupee', symbol: 'NPRs', symbolNative: 'नेरू', decimalDigits: 2, rounding: 0, namePlural: 'Nepalese rupees' },\r\n { code: 'NZD', name: 'New Zealand Dollar', symbol: 'NZ$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'New Zealand dollars' },\r\n { code: 'OMR', name: 'Omani Rial', symbol: 'OMR', symbolNative: 'ر.ع.', decimalDigits: 3, rounding: 0, namePlural: 'Omani rials' },\r\n { code: 'PAB', name: 'Panamanian Balboa', symbol: 'B/.', symbolNative: 'B/.', decimalDigits: 2, rounding: 0, namePlural: 'Panamanian balboas' },\r\n { code: 'PEN', name: 'Peruvian Sol', symbol: 'S/', symbolNative: 'S/', decimalDigits: 2, rounding: 0, namePlural: 'Peruvian soles' },\r\n { code: 'PHP', name: 'Philippine Peso', symbol: '₱', symbolNative: '₱', decimalDigits: 2, rounding: 0, namePlural: 'Philippine pesos' },\r\n { code: 'PKR', name: 'Pakistani Rupee', symbol: 'PKRs', symbolNative: '₨', decimalDigits: 0, rounding: 0, namePlural: 'Pakistani rupees' },\r\n { code: 'PLN', name: 'Polish Zloty', symbol: 'zł', symbolNative: 'zł', decimalDigits: 2, rounding: 0, namePlural: 'Polish zlotys' },\r\n { code: 'PYG', name: 'Paraguayan Guarani', symbol: '₲', symbolNative: '₲', decimalDigits: 0, rounding: 0, namePlural: 'Paraguayan guaranis' },\r\n { code: 'QAR', name: 'Qatari Rial', symbol: 'QR', symbolNative: 'ر.ق.', decimalDigits: 2, rounding: 0, namePlural: 'Qatari rials' },\r\n { code: 'RON', name: 'Romanian Leu', symbol: 'RON', symbolNative: 'RON', decimalDigits: 2, rounding: 0, namePlural: 'Romanian lei' },\r\n { code: 'RSD', name: 'Serbian Dinar', symbol: 'din.', symbolNative: 'дин.', decimalDigits: 0, rounding: 0, namePlural: 'Serbian dinars' },\r\n { code: 'RUB', name: 'Russian Ruble', symbol: 'RUB', symbolNative: '₽', decimalDigits: 2, rounding: 0, namePlural: 'Russian rubles' },\r\n { code: 'RWF', name: 'Rwandan Franc', symbol: 'RWF', symbolNative: 'FR', decimalDigits: 0, rounding: 0, namePlural: 'Rwandan francs' },\r\n { code: 'SAR', name: 'Saudi Riyal', symbol: 'SR', symbolNative: 'ر.س.', decimalDigits: 2, rounding: 0, namePlural: 'Saudi riyals' },\r\n { code: 'SEK', name: 'Swedish Krona', symbol: 'Skr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Swedish kronor' },\r\n { code: 'SGD', name: 'Singapore Dollar', symbol: 'S$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Singapore dollars' },\r\n { code: 'SOS', name: 'Somali Shilling', symbol: 'Ssh', symbolNative: 'Ssh', decimalDigits: 0, rounding: 0, namePlural: 'Somali shillings' },\r\n { code: 'SYP', name: 'Syrian Pound', symbol: 'SY£', symbolNative: 'ل.س.', decimalDigits: 0, rounding: 0, namePlural: 'Syrian pounds' },\r\n { code: 'THB', name: 'Thai Baht', symbol: '฿', symbolNative: '฿', decimalDigits: 2, rounding: 0, namePlural: 'Thai baht' },\r\n { code: 'TND', name: 'Tunisian Dinar', symbol: 'DT', symbolNative: 'د.ت.', decimalDigits: 3, rounding: 0, namePlural: 'Tunisian dinars' },\r\n { code: 'TOP', name: 'Tongan Pa\\'anga', symbol: 'T$', symbolNative: 'T$', decimalDigits: 2, rounding: 0, namePlural: 'Tongan pa\\'anga' },\r\n { code: 'TRY', name: 'Turkish Lira', symbol: 'TL', symbolNative: '₺', decimalDigits: 2, rounding: 0, namePlural: 'Turkish liras' },\r\n { code: 'TTD', name: 'Trinidad & Tobago Dollar', symbol: 'TT$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Trinidad & Tobago dollars' },\r\n { code: 'TWD', name: 'New Taiwan Dollar', symbol: 'NT$', symbolNative: 'NT$', decimalDigits: 2, rounding: 0, namePlural: 'New Taiwan dollars' },\r\n { code: 'TZS', name: 'Tanzanian Shilling', symbol: 'TSh', symbolNative: 'TSh', decimalDigits: 0, rounding: 0, namePlural: 'Tanzanian shillings' },\r\n { code: 'UAH', name: 'Ukrainian Hryvnia', symbol: '₴', symbolNative: '₴', decimalDigits: 2, rounding: 0, namePlural: 'Ukrainian hryvnias' },\r\n { code: 'UGX', name: 'Ugandan Shilling', symbol: 'USh', symbolNative: 'USh', decimalDigits: 0, rounding: 0, namePlural: 'Ugandan shillings' },\r\n { code: 'USD', name: 'US Dollar', symbol: '$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'US dollars' },\r\n { code: 'UYU', name: 'Uruguayan Peso', symbol: '$U', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Uruguayan pesos' },\r\n { code: 'UZS', name: 'Uzbekistani Som', symbol: 'UZS', symbolNative: 'UZS', decimalDigits: 0, rounding: 0, namePlural: 'Uzbekistani som' },\r\n { code: 'VES', name: 'Venezuelan Bolívar', symbol: 'Bs', symbolNative: 'Bs', decimalDigits: 2, rounding: 0, namePlural: 'Venezuelan bolívars' },\r\n { code: 'VND', name: 'Vietnamese Dong', symbol: '₫', symbolNative: '₫', decimalDigits: 0, rounding: 0, namePlural: 'Vietnamese dong' },\r\n { code: 'XAF', name: 'Central African CFA Franc', symbol: 'FCFA', symbolNative: 'FCFA', decimalDigits: 0, rounding: 0, namePlural: 'Central African CFA francs' },\r\n { code: 'XOF', name: 'West African CFA Franc', symbol: 'CFA', symbolNative: 'CFA', decimalDigits: 0, rounding: 0, namePlural: 'West African CFA francs' },\r\n { code: 'YER', name: 'Yemeni Rial', symbol: 'YR', symbolNative: 'ر.ي.', decimalDigits: 0, rounding: 0, namePlural: 'Yemeni rials' },\r\n { code: 'ZAR', name: 'South African Rand', symbol: 'R', symbolNative: 'R', decimalDigits: 2, rounding: 0, namePlural: 'South African rand' },\r\n { code: 'ZMW', name: 'Zambian Kwacha', symbol: 'ZK', symbolNative: 'ZK', decimalDigits: 0, rounding: 0, namePlural: 'Zambian kwachas' },\r\n { code: 'ZWL', name: 'Zimbabwean Dollar', symbol: 'ZWL$', symbolNative: 'ZWL$', decimalDigits: 0, rounding: 0, namePlural: 'Zimbabwean dollars' },\r\n];\r\n\r\n// Helper functions\r\nexport const getCurrencyByCode = (code: string): Currency | undefined => {\r\n return currencies.find((c) => c.code === code.toUpperCase());\r\n};\r\n\r\nexport const searchCurrencies = (query: string): Currency[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return currencies.filter(\r\n (c) =>\r\n c.code.toLowerCase().includes(lowerQuery) ||\r\n c.name.toLowerCase().includes(lowerQuery)\r\n );\r\n};\r\n\r\nexport const formatCurrency = (\r\n amount: number,\r\n currencyCode: string,\r\n locale: string = 'en-US'\r\n): string => {\r\n const currency = getCurrencyByCode(currencyCode);\r\n if (!currency) {\r\n return amount.toFixed(2);\r\n }\r\n\r\n try {\r\n return new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currency: currency.code,\r\n minimumFractionDigits: currency.decimalDigits,\r\n maximumFractionDigits: currency.decimalDigits,\r\n }).format(amount);\r\n } catch {\r\n return `${currency.symbol}${amount.toFixed(currency.decimalDigits)}`;\r\n }\r\n};\r\n\r\nexport const formatCurrencyNative = (amount: number, currencyCode: string): string => {\r\n const currency = getCurrencyByCode(currencyCode);\r\n if (!currency) {\r\n return amount.toFixed(2);\r\n }\r\n return `${currency.symbolNative}${amount.toFixed(currency.decimalDigits)}`;\r\n};\r\n\r\nexport default currencies;\r\n","/**\r\n * Timezones data with UTC offsets\r\n */\r\nexport interface Timezone {\r\n name: string;\r\n label: string;\r\n offset: string;\r\n offsetMinutes: number;\r\n}\r\n\r\nexport const timezones: Timezone[] = [\r\n { name: 'Pacific/Midway', label: '(UTC-11:00) Midway Island', offset: '-11:00', offsetMinutes: -660 },\r\n { name: 'Pacific/Honolulu', label: '(UTC-10:00) Hawaii', offset: '-10:00', offsetMinutes: -600 },\r\n { name: 'America/Anchorage', label: '(UTC-09:00) Alaska', offset: '-09:00', offsetMinutes: -540 },\r\n { name: 'America/Los_Angeles', label: '(UTC-08:00) Pacific Time (US & Canada)', offset: '-08:00', offsetMinutes: -480 },\r\n { name: 'America/Phoenix', label: '(UTC-07:00) Arizona', offset: '-07:00', offsetMinutes: -420 },\r\n { name: 'America/Denver', label: '(UTC-07:00) Mountain Time (US & Canada)', offset: '-07:00', offsetMinutes: -420 },\r\n { name: 'America/Chicago', label: '(UTC-06:00) Central Time (US & Canada)', offset: '-06:00', offsetMinutes: -360 },\r\n { name: 'America/Mexico_City', label: '(UTC-06:00) Mexico City', offset: '-06:00', offsetMinutes: -360 },\r\n { name: 'America/New_York', label: '(UTC-05:00) Eastern Time (US & Canada)', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Bogota', label: '(UTC-05:00) Bogota', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Lima', label: '(UTC-05:00) Lima', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Caracas', label: '(UTC-04:00) Caracas', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Halifax', label: '(UTC-04:00) Atlantic Time (Canada)', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Santiago', label: '(UTC-04:00) Santiago', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Sao_Paulo', label: '(UTC-03:00) Brasilia', offset: '-03:00', offsetMinutes: -180 },\r\n { name: 'America/Buenos_Aires', label: '(UTC-03:00) Buenos Aires', offset: '-03:00', offsetMinutes: -180 },\r\n { name: 'Atlantic/South_Georgia', label: '(UTC-02:00) Mid-Atlantic', offset: '-02:00', offsetMinutes: -120 },\r\n { name: 'Atlantic/Azores', label: '(UTC-01:00) Azores', offset: '-01:00', offsetMinutes: -60 },\r\n { name: 'Europe/London', label: '(UTC+00:00) London, Dublin', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'UTC', label: '(UTC+00:00) UTC', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'Africa/Casablanca', label: '(UTC+00:00) Casablanca', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'Europe/Paris', label: '(UTC+01:00) Paris, Berlin, Rome', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Europe/Amsterdam', label: '(UTC+01:00) Amsterdam, Brussels', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Africa/Lagos', label: '(UTC+01:00) West Central Africa', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Europe/Athens', label: '(UTC+02:00) Athens, Istanbul', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Europe/Kiev', label: '(UTC+02:00) Kyiv', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Africa/Cairo', label: '(UTC+02:00) Cairo', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Africa/Johannesburg', label: '(UTC+02:00) Johannesburg', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Asia/Jerusalem', label: '(UTC+02:00) Jerusalem', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Europe/Moscow', label: '(UTC+03:00) Moscow', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Asia/Kuwait', label: '(UTC+03:00) Kuwait, Riyadh', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Africa/Nairobi', label: '(UTC+03:00) Nairobi', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Asia/Tehran', label: '(UTC+03:30) Tehran', offset: '+03:30', offsetMinutes: 210 },\r\n { name: 'Asia/Dubai', label: '(UTC+04:00) Dubai, Abu Dhabi', offset: '+04:00', offsetMinutes: 240 },\r\n { name: 'Asia/Baku', label: '(UTC+04:00) Baku', offset: '+04:00', offsetMinutes: 240 },\r\n { name: 'Asia/Kabul', label: '(UTC+04:30) Kabul', offset: '+04:30', offsetMinutes: 270 },\r\n { name: 'Asia/Karachi', label: '(UTC+05:00) Karachi', offset: '+05:00', offsetMinutes: 300 },\r\n { name: 'Asia/Tashkent', label: '(UTC+05:00) Tashkent', offset: '+05:00', offsetMinutes: 300 },\r\n { name: 'Asia/Kolkata', label: '(UTC+05:30) Mumbai, New Delhi', offset: '+05:30', offsetMinutes: 330 },\r\n { name: 'Asia/Colombo', label: '(UTC+05:30) Sri Lanka', offset: '+05:30', offsetMinutes: 330 },\r\n { name: 'Asia/Kathmandu', label: '(UTC+05:45) Kathmandu', offset: '+05:45', offsetMinutes: 345 },\r\n { name: 'Asia/Dhaka', label: '(UTC+06:00) Dhaka', offset: '+06:00', offsetMinutes: 360 },\r\n { name: 'Asia/Almaty', label: '(UTC+06:00) Almaty', offset: '+06:00', offsetMinutes: 360 },\r\n { name: 'Asia/Yangon', label: '(UTC+06:30) Yangon', offset: '+06:30', offsetMinutes: 390 },\r\n { name: 'Asia/Bangkok', label: '(UTC+07:00) Bangkok', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Jakarta', label: '(UTC+07:00) Jakarta', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Ho_Chi_Minh', label: '(UTC+07:00) Ho Chi Minh City', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Singapore', label: '(UTC+08:00) Singapore', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Hong_Kong', label: '(UTC+08:00) Hong Kong', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Shanghai', label: '(UTC+08:00) Beijing, Shanghai', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Taipei', label: '(UTC+08:00) Taipei', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Kuala_Lumpur', label: '(UTC+08:00) Kuala Lumpur', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Australia/Perth', label: '(UTC+08:00) Perth', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Seoul', label: '(UTC+09:00) Seoul', offset: '+09:00', offsetMinutes: 540 },\r\n { name: 'Asia/Tokyo', label: '(UTC+09:00) Tokyo', offset: '+09:00', offsetMinutes: 540 },\r\n { name: 'Australia/Darwin', label: '(UTC+09:30) Darwin', offset: '+09:30', offsetMinutes: 570 },\r\n { name: 'Australia/Adelaide', label: '(UTC+09:30) Adelaide', offset: '+09:30', offsetMinutes: 570 },\r\n { name: 'Australia/Sydney', label: '(UTC+10:00) Sydney, Melbourne', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Australia/Brisbane', label: '(UTC+10:00) Brisbane', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Pacific/Guam', label: '(UTC+10:00) Guam', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Pacific/Noumea', label: '(UTC+11:00) New Caledonia', offset: '+11:00', offsetMinutes: 660 },\r\n { name: 'Pacific/Fiji', label: '(UTC+12:00) Fiji', offset: '+12:00', offsetMinutes: 720 },\r\n { name: 'Pacific/Auckland', label: '(UTC+12:00) Auckland, Wellington', offset: '+12:00', offsetMinutes: 720 },\r\n { name: 'Pacific/Tongatapu', label: '(UTC+13:00) Nuku\\'alofa', offset: '+13:00', offsetMinutes: 780 },\r\n];\r\n\r\n// Helper functions\r\nexport const getTimezoneByName = (name: string): Timezone | undefined => {\r\n return timezones.find((tz) => tz.name === name);\r\n};\r\n\r\nexport const searchTimezones = (query: string): Timezone[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return timezones.filter(\r\n (tz) =>\r\n tz.name.toLowerCase().includes(lowerQuery) ||\r\n tz.label.toLowerCase().includes(lowerQuery)\r\n );\r\n};\r\n\r\nexport const getTimezonesByOffset = (offsetMinutes: number): Timezone[] => {\r\n return timezones.filter((tz) => tz.offsetMinutes === offsetMinutes);\r\n};\r\n\r\nexport const sortTimezonesByOffset = (ascending: boolean = true): Timezone[] => {\r\n return [...timezones].sort((a, b) =>\r\n ascending\r\n ? a.offsetMinutes - b.offsetMinutes\r\n : b.offsetMinutes - a.offsetMinutes\r\n );\r\n};\r\n\r\nexport default timezones;\r\n","/**\r\n * Company Logos for all 5 Exyconn projects\r\n * Contains light and dark mode variants\r\n */\r\n\r\nexport interface LogoVariants {\r\n light: string; // URL for light mode (dark logo on light background)\r\n dark: string; // URL for dark mode (light logo on dark background)\r\n}\r\n\r\nexport interface Logo {\r\n full: LogoVariants; // Full logo with text\r\n icon: LogoVariants; // Icon only\r\n favicon: string; // Favicon URL (usually same for both modes)\r\n}\r\n\r\nexport interface CompanyBrand {\r\n name: string;\r\n domain: string;\r\n tagline: string;\r\n primaryColor: string;\r\n secondaryColor: string;\r\n logo: Logo;\r\n}\r\n\r\nexport const brands: Record<string, CompanyBrand> = {\r\n botify: {\r\n name: 'Botify',\r\n domain: 'botify.life',\r\n tagline: 'AI-Powered Chatbots',\r\n primaryColor: '#6366F1',\r\n secondaryColor: '#8B5CF6',\r\n logo: {\r\n full: {\r\n light: 'https://botify.life/logos/botify-full-dark.svg',\r\n dark: 'https://botify.life/logos/botify-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://botify.life/logos/botify-icon-dark.svg',\r\n dark: 'https://botify.life/logos/botify-icon-light.svg',\r\n },\r\n favicon: 'https://botify.life/favicon.ico',\r\n },\r\n },\r\n exyconn: {\r\n name: 'Exyconn',\r\n domain: 'exyconn.com',\r\n tagline: 'Connect. Create. Collaborate.',\r\n primaryColor: '#0EA5E9',\r\n secondaryColor: '#06B6D4',\r\n logo: {\r\n full: {\r\n light: 'https://exyconn.com/logos/exyconn-full-dark.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://exyconn.com/logos/exyconn-icon-dark.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-icon-light.svg',\r\n },\r\n favicon: 'https://exyconn.com/favicon.ico',\r\n },\r\n },\r\n partywings: {\r\n name: 'PartyWings',\r\n domain: 'partywings.fun',\r\n tagline: 'Your Party, Your Rules',\r\n primaryColor: '#EC4899',\r\n secondaryColor: '#F472B6',\r\n logo: {\r\n full: {\r\n light: 'https://partywings.fun/logos/partywings-full-dark.svg',\r\n dark: 'https://partywings.fun/logos/partywings-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://partywings.fun/logos/partywings-icon-dark.svg',\r\n dark: 'https://partywings.fun/logos/partywings-icon-light.svg',\r\n },\r\n favicon: 'https://partywings.fun/favicon.ico',\r\n },\r\n },\r\n sibera: {\r\n name: 'Sibera',\r\n domain: 'sibera.work',\r\n tagline: 'Work Smarter, Together',\r\n primaryColor: '#10B981',\r\n secondaryColor: '#34D399',\r\n logo: {\r\n full: {\r\n light: 'https://sibera.work/logos/sibera-full-dark.svg',\r\n dark: 'https://sibera.work/logos/sibera-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://sibera.work/logos/sibera-icon-dark.svg',\r\n dark: 'https://sibera.work/logos/sibera-icon-light.svg',\r\n },\r\n favicon: 'https://sibera.work/favicon.ico',\r\n },\r\n },\r\n spentiva: {\r\n name: 'Spentiva',\r\n domain: 'spentiva.com',\r\n tagline: 'Smart Spending, Smart Living',\r\n primaryColor: '#F59E0B',\r\n secondaryColor: '#FBBF24',\r\n logo: {\r\n full: {\r\n light: 'https://spentiva.com/logos/spentiva-full-dark.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://spentiva.com/logos/spentiva-icon-dark.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-icon-light.svg',\r\n },\r\n favicon: 'https://spentiva.com/favicon.ico',\r\n },\r\n },\r\n};\r\n\r\n// Helper functions\r\nexport const getBrand = (key: string): CompanyBrand | undefined => {\r\n return brands[key.toLowerCase()];\r\n};\r\n\r\nexport const getBrandByDomain = (domain: string): CompanyBrand | undefined => {\r\n return Object.values(brands).find((b) => b.domain === domain);\r\n};\r\n\r\nexport const getLogo = (brandKey: string, mode: 'light' | 'dark', type: 'full' | 'icon' = 'full'): string | undefined => {\r\n const brand = getBrand(brandKey);\r\n if (!brand) return undefined;\r\n return brand.logo[type][mode];\r\n};\r\n\r\nexport const getAllBrands = (): CompanyBrand[] => {\r\n return Object.values(brands);\r\n};\r\n\r\nexport const getAllBrandKeys = (): string[] => {\r\n return Object.keys(brands);\r\n};\r\n\r\nexport default brands;\r\n"]}
1
+ {"version":3,"sources":["../src/server/index.ts","../src/server/enums/status.ts","../src/server/response/response-object.ts","../src/server/logger/winston-logger.ts","../src/server/db/mongoose-connect.ts","../src/server/middleware/auth.middleware.ts","../src/server/utils/filter-builder.ts","../src/server/utils/sanitize.ts","../src/server/utils/packageCheck.ts","../src/client/index.ts","../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","../src/shared/index.ts","../src/shared/config/env.ts","../src/shared/constants/status-codes.ts","../src/shared/constants/enums.ts","../src/shared/utils/date-time.ts","../src/shared/validation/index.ts","../src/data/index.ts","../src/data/countries.ts","../src/data/phone-codes.ts","../src/data/currencies.ts","../src/data/timezones.ts","../src/data/regex.ts","../src/data/logos.ts","../src/data/brand-identity.ts"],"names":["StatusCode","StatusMessage","logger","formatPackageCheckResult","generateNcuCommand","statusCode","path","parseVersion","compareVersions","fetchLatestVersion","useCallback","useState","ref","useMemo","entries","keys","useEffect","useRef","isSuccess","query","battery","resolve","rect","colors","theme","capitalize","jsx","jsxs","defaultInitialValues","Formik","Form","Field","ErrorMessage","VALIDATION_MESSAGES","addDays","endOfDay","formatDate","formatDateTime","formatRelativeTime","isFuture","isPast","isToday","startOfDay","STATUS","USER_STATUS","format","getAllBrands","getBrandByDomain","getLogo"],"mappings":"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","file":"index.mjs","sourcesContent":["// Server-side exports\r\nexport * from './response';\r\nexport * from './enums';\r\nexport * from './logger';\r\nexport * from './db';\r\nexport * from './middleware';\r\nexport * from './utils';\r\n","/**\r\n * HTTP Status Codes\r\n * Standard HTTP status codes used across all projects\r\n */\r\nexport enum StatusCode {\r\n // Success\r\n SUCCESS = 200,\r\n CREATED = 201,\r\n ACCEPTED = 202,\r\n NO_CONTENT = 204,\r\n\r\n // Client Errors\r\n BAD_REQUEST = 400,\r\n UNAUTHORIZED = 401,\r\n FORBIDDEN = 403,\r\n NOT_FOUND = 404,\r\n CONFLICT = 409,\r\n UNPROCESSABLE_ENTITY = 422,\r\n TOO_MANY_REQUESTS = 429,\r\n\r\n // Server Errors\r\n INTERNAL_ERROR = 500,\r\n NOT_IMPLEMENTED = 501,\r\n BAD_GATEWAY = 502,\r\n SERVICE_UNAVAILABLE = 503,\r\n}\r\n\r\n/**\r\n * Status Messages\r\n * Human-readable status messages\r\n */\r\nexport enum StatusMessage {\r\n SUCCESS = 'success',\r\n CREATED = 'created',\r\n ACCEPTED = 'accepted',\r\n NO_CONTENT = 'no-data-found',\r\n BAD_REQUEST = 'bad-request',\r\n UNAUTHORIZED = 'unauthorized',\r\n FORBIDDEN = 'forbidden',\r\n NOT_FOUND = 'not-found',\r\n CONFLICT = 'conflict',\r\n UNPROCESSABLE_ENTITY = 'validation-error',\r\n TOO_MANY_REQUESTS = 'rate-limit-exceeded',\r\n INTERNAL_ERROR = 'error',\r\n NOT_IMPLEMENTED = 'not-implemented',\r\n BAD_GATEWAY = 'bad-gateway',\r\n SERVICE_UNAVAILABLE = 'service-unavailable',\r\n}\r\n\r\n// Legacy aliases for backward compatibility\r\nexport const statusCode = StatusCode;\r\nexport const statusMessage = StatusMessage;\r\n\r\nexport default {\r\n StatusCode,\r\n StatusMessage,\r\n statusCode,\r\n statusMessage,\r\n};\r\n","import type { Response } from 'express';\r\nimport { StatusCode, StatusMessage } from '../enums/status';\r\n\r\n/**\r\n * Standard API Response Interface\r\n */\r\nexport interface ApiResponse<T = unknown> {\r\n message: string;\r\n data: T | null;\r\n status: string;\r\n statusCode: number;\r\n paginationData?: PaginationData;\r\n columns?: ColumnMetadata[];\r\n}\r\n\r\n/**\r\n * Pagination Data Interface\r\n */\r\nexport interface PaginationData {\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 * Column Metadata Interface (for dynamic tables)\r\n */\r\nexport interface ColumnMetadata {\r\n name: string;\r\n datatype: string;\r\n required: boolean;\r\n}\r\n\r\n/**\r\n * Extract column metadata from data array\r\n */\r\nexport const extractColumns = <T extends Record<string, unknown>>(\r\n data: T[]\r\n): ColumnMetadata[] => {\r\n if (!Array.isArray(data) || data.length === 0) {\r\n return [];\r\n }\r\n\r\n const sample = data[0];\r\n return Object.entries(sample).map(([key, value]) => {\r\n let datatype: string = typeof value;\r\n\r\n if (value === null) {\r\n datatype = 'null';\r\n } else if (Array.isArray(value)) {\r\n datatype = 'array';\r\n } else if (value instanceof Date) {\r\n datatype = 'date';\r\n } else if (typeof value === 'object') {\r\n datatype = 'object';\r\n }\r\n\r\n return {\r\n name: key,\r\n datatype,\r\n required: value !== null && value !== undefined,\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * Success Response (200)\r\n */\r\nexport const successResponse = <T>(\r\n res: Response,\r\n data: T,\r\n message = 'Operation successful'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n status: StatusMessage.SUCCESS,\r\n statusCode: StatusCode.SUCCESS,\r\n });\r\n};\r\n\r\n/**\r\n * Success Response with Array & Pagination (200)\r\n */\r\nexport const successResponseArr = <T>(\r\n res: Response,\r\n data: T[],\r\n paginationData: PaginationData = {},\r\n message = 'Operation successful'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n columns: extractColumns(data as Record<string, unknown>[]),\r\n paginationData,\r\n status: StatusMessage.SUCCESS,\r\n statusCode: StatusCode.SUCCESS,\r\n });\r\n};\r\n\r\n/**\r\n * Created Response (201)\r\n */\r\nexport const createdResponse = <T>(\r\n res: Response,\r\n data: T,\r\n message = 'Resource created successfully'\r\n): Response => {\r\n return res.status(StatusCode.CREATED).json({\r\n message,\r\n data,\r\n status: StatusMessage.CREATED,\r\n statusCode: StatusCode.CREATED,\r\n });\r\n};\r\n\r\n/**\r\n * No Content Response (204 as 200 with message)\r\n */\r\nexport const noContentResponse = <T = null>(\r\n res: Response,\r\n data: T = null as T,\r\n message = 'No data found'\r\n): Response => {\r\n return res.status(StatusCode.SUCCESS).json({\r\n message,\r\n data,\r\n status: StatusMessage.NO_CONTENT,\r\n statusCode: StatusCode.NO_CONTENT,\r\n });\r\n};\r\n\r\n/**\r\n * Bad Request Response (400)\r\n */\r\nexport const badRequestResponse = (\r\n res: Response,\r\n message = 'Bad request',\r\n errors: unknown = null\r\n): Response => {\r\n return res.status(StatusCode.BAD_REQUEST).json({\r\n message,\r\n data: errors,\r\n status: StatusMessage.BAD_REQUEST,\r\n statusCode: StatusCode.BAD_REQUEST,\r\n });\r\n};\r\n\r\n/**\r\n * Unauthorized Response (401)\r\n */\r\nexport const unauthorizedResponse = (\r\n res: Response,\r\n message = 'Unauthorized access'\r\n): Response => {\r\n return res.status(StatusCode.UNAUTHORIZED).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.UNAUTHORIZED,\r\n statusCode: StatusCode.UNAUTHORIZED,\r\n });\r\n};\r\n\r\n/**\r\n * Forbidden Response (403)\r\n */\r\nexport const forbiddenResponse = (\r\n res: Response,\r\n message = 'Access forbidden'\r\n): Response => {\r\n return res.status(StatusCode.FORBIDDEN).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.FORBIDDEN,\r\n statusCode: StatusCode.FORBIDDEN,\r\n });\r\n};\r\n\r\n/**\r\n * Not Found Response (404)\r\n */\r\nexport const notFoundResponse = (\r\n res: Response,\r\n message = 'Resource not found'\r\n): Response => {\r\n return res.status(StatusCode.NOT_FOUND).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.NOT_FOUND,\r\n statusCode: StatusCode.NOT_FOUND,\r\n });\r\n};\r\n\r\n/**\r\n * Conflict Response (409)\r\n */\r\nexport const conflictResponse = (\r\n res: Response,\r\n message = 'Resource conflict'\r\n): Response => {\r\n return res.status(StatusCode.CONFLICT).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.CONFLICT,\r\n statusCode: StatusCode.CONFLICT,\r\n });\r\n};\r\n\r\n/**\r\n * Validation Error Response (422)\r\n */\r\nexport const validationErrorResponse = (\r\n res: Response,\r\n errors: unknown,\r\n message = 'Validation failed'\r\n): Response => {\r\n return res.status(StatusCode.UNPROCESSABLE_ENTITY).json({\r\n message,\r\n data: errors,\r\n status: StatusMessage.UNPROCESSABLE_ENTITY,\r\n statusCode: StatusCode.UNPROCESSABLE_ENTITY,\r\n });\r\n};\r\n\r\n/**\r\n * Error Response (500)\r\n */\r\nexport const errorResponse = (\r\n res: Response,\r\n error: unknown = null,\r\n message = 'Something went wrong'\r\n): Response => {\r\n return res.status(StatusCode.INTERNAL_ERROR).json({\r\n message,\r\n data: error,\r\n status: StatusMessage.INTERNAL_ERROR,\r\n statusCode: StatusCode.INTERNAL_ERROR,\r\n });\r\n};\r\n\r\n/**\r\n * Rate Limit Response (429)\r\n */\r\nexport const rateLimitResponse = (\r\n res: Response,\r\n message = 'Too many requests, please try again later'\r\n): Response => {\r\n return res.status(StatusCode.TOO_MANY_REQUESTS).json({\r\n message,\r\n data: null,\r\n status: StatusMessage.TOO_MANY_REQUESTS,\r\n statusCode: StatusCode.TOO_MANY_REQUESTS,\r\n });\r\n};\r\n\r\nexport default {\r\n successResponse,\r\n successResponseArr,\r\n createdResponse,\r\n noContentResponse,\r\n badRequestResponse,\r\n unauthorizedResponse,\r\n forbiddenResponse,\r\n notFoundResponse,\r\n conflictResponse,\r\n validationErrorResponse,\r\n errorResponse,\r\n rateLimitResponse,\r\n extractColumns,\r\n};\r\n","import winston from 'winston';\r\nimport DailyRotateFile from 'winston-daily-rotate-file';\r\nimport path from 'path';\r\n\r\n/**\r\n * Logger Configuration Options\r\n */\r\nexport interface LoggerConfig {\r\n level?: string;\r\n logsDir?: string;\r\n maxSize?: string;\r\n maxFiles?: string;\r\n errorMaxFiles?: string;\r\n}\r\n\r\n/**\r\n * Default logger configuration\r\n */\r\nconst defaultConfig: LoggerConfig = {\r\n level: process.env.LOG_LEVEL || 'info',\r\n logsDir: 'logs',\r\n maxSize: '20m',\r\n maxFiles: '14d',\r\n errorMaxFiles: '30d',\r\n};\r\n\r\n// Define log levels\r\nconst levels = {\r\n error: 0,\r\n warn: 1,\r\n info: 2,\r\n http: 3,\r\n debug: 4,\r\n};\r\n\r\n// Define colors for each level\r\nconst colors = {\r\n error: 'red',\r\n warn: 'yellow',\r\n info: 'green',\r\n http: 'magenta',\r\n debug: 'blue',\r\n};\r\n\r\nwinston.addColors(colors);\r\n\r\n// JSON format for file logs\r\nconst fileFormat = winston.format.combine(\r\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\r\n winston.format.errors({ stack: true }),\r\n winston.format.splat(),\r\n winston.format.json()\r\n);\r\n\r\n// Colorized format for console\r\nconst consoleFormat = winston.format.combine(\r\n winston.format.colorize({ all: true }),\r\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\r\n winston.format.printf((info) => {\r\n const timestamp = info.timestamp as string | undefined;\r\n const level = info.level as string;\r\n const message = info.message as string;\r\n const stack = info.stack as string | undefined;\r\n return `${timestamp} [${level}]: ${message}${stack ? '\\n' + stack : ''}`;\r\n })\r\n);\r\n\r\n/**\r\n * Create a configured Winston logger instance\r\n */\r\nexport const createLogger = (config: LoggerConfig = {}) => {\r\n const finalConfig = { ...defaultConfig, ...config };\r\n\r\n const transports: winston.transport[] = [\r\n // Console transport\r\n new winston.transports.Console({\r\n format: consoleFormat,\r\n }),\r\n\r\n // Combined logs (all levels)\r\n new DailyRotateFile({\r\n filename: path.join(finalConfig.logsDir!, 'combined-%DATE%.log'),\r\n datePattern: 'YYYY-MM-DD',\r\n maxSize: finalConfig.maxSize,\r\n maxFiles: finalConfig.maxFiles,\r\n format: fileFormat,\r\n }),\r\n\r\n // Error logs only\r\n new DailyRotateFile({\r\n filename: path.join(finalConfig.logsDir!, 'error-%DATE%.log'),\r\n datePattern: 'YYYY-MM-DD',\r\n level: 'error',\r\n maxSize: finalConfig.maxSize,\r\n maxFiles: finalConfig.errorMaxFiles,\r\n format: fileFormat,\r\n }),\r\n ];\r\n\r\n return winston.createLogger({\r\n level: finalConfig.level,\r\n levels,\r\n format: fileFormat,\r\n transports,\r\n exitOnError: false,\r\n });\r\n};\r\n\r\n// Default logger instance\r\nexport const logger = createLogger();\r\n\r\n/**\r\n * Create a stream for Morgan HTTP logger\r\n */\r\nexport const createMorganStream = (loggerInstance: winston.Logger) => ({\r\n write: (message: string) => {\r\n loggerInstance.http(message.trim());\r\n },\r\n});\r\n\r\nexport const stream = createMorganStream(logger);\r\n\r\n/**\r\n * Simple logger for development (no file output)\r\n */\r\nconst serializeMeta = (meta: unknown): string => {\r\n if (meta === undefined || meta === null) return '';\r\n if (meta instanceof Error) {\r\n return JSON.stringify({ message: meta.message, stack: meta.stack }, null, 2);\r\n }\r\n try {\r\n return JSON.stringify(meta, null, 2);\r\n } catch {\r\n return String(meta);\r\n }\r\n};\r\n\r\nexport const simpleLogger = {\r\n info: (message: string, meta?: unknown) => {\r\n console.log(`[INFO] ${message}`, serializeMeta(meta));\r\n },\r\n error: (message: string, meta?: unknown) => {\r\n console.error(`[ERROR] ${message}`, serializeMeta(meta));\r\n },\r\n warn: (message: string, meta?: unknown) => {\r\n console.warn(`[WARN] ${message}`, serializeMeta(meta));\r\n },\r\n debug: (message: string, meta?: unknown) => {\r\n console.debug(`[DEBUG] ${message}`, serializeMeta(meta));\r\n },\r\n};\r\n\r\nexport default logger;\r\n","import mongoose, { ConnectOptions } from 'mongoose';\r\n\r\n/**\r\n * Database Connection Options\r\n */\r\nexport interface DbConnectionOptions {\r\n maxPoolSize?: number;\r\n minPoolSize?: number;\r\n socketTimeoutMS?: number;\r\n serverSelectionTimeoutMS?: number;\r\n maxIdleTimeMS?: number;\r\n retryWrites?: boolean;\r\n retryReads?: boolean;\r\n w?: 'majority' | number;\r\n}\r\n\r\n/**\r\n * Default connection options\r\n */\r\nconst defaultOptions: DbConnectionOptions = {\r\n maxPoolSize: process.env.NODE_ENV === 'production' ? 50 : 10,\r\n minPoolSize: process.env.NODE_ENV === 'production' ? 10 : 5,\r\n socketTimeoutMS: 45000,\r\n serverSelectionTimeoutMS: 10000,\r\n maxIdleTimeMS: 10000,\r\n retryWrites: true,\r\n retryReads: true,\r\n w: 'majority',\r\n};\r\n\r\n/**\r\n * Connect to MongoDB with mongoose\r\n * @param mongoUri - MongoDB connection string\r\n * @param options - Connection options\r\n * @param logger - Optional logger instance\r\n */\r\nexport const connectDB = async (\r\n mongoUri: string,\r\n options: DbConnectionOptions = {},\r\n logger?: { info: (msg: string, meta?: unknown) => void; error: (msg: string, meta?: unknown) => void }\r\n): Promise<typeof mongoose> => {\r\n // Check if already connected\r\n if (mongoose.connection.readyState === 1) {\r\n logger?.info('Database already connected, reusing connection');\r\n return mongoose;\r\n }\r\n\r\n const finalOptions: ConnectOptions = { ...defaultOptions, ...options };\r\n\r\n try {\r\n await mongoose.connect(mongoUri, finalOptions);\r\n logger?.info('MongoDB connected successfully');\r\n\r\n // Handle connection events\r\n mongoose.connection.on('error', (err: Error) => {\r\n logger?.error('MongoDB connection error', err);\r\n });\r\n\r\n mongoose.connection.on('disconnected', () => {\r\n logger?.info('MongoDB disconnected');\r\n });\r\n\r\n mongoose.connection.on('reconnected', () => {\r\n logger?.info('MongoDB reconnected');\r\n });\r\n\r\n return mongoose;\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n logger?.error('MongoDB connection failed', { error: errorMessage });\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Disconnect from MongoDB\r\n */\r\nexport const disconnectDB = async (\r\n logger?: { info: (msg: string) => void; error: (msg: string, meta?: unknown) => void }\r\n): Promise<void> => {\r\n try {\r\n await mongoose.disconnect();\r\n logger?.info('MongoDB disconnected successfully');\r\n } catch (error) {\r\n logger?.error('Error disconnecting from MongoDB', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get connection status\r\n */\r\nexport const getConnectionStatus = (): string => {\r\n const states: Record<number, string> = {\r\n 0: 'disconnected',\r\n 1: 'connected',\r\n 2: 'connecting',\r\n 3: 'disconnecting',\r\n };\r\n return states[mongoose.connection.readyState] || 'unknown';\r\n};\r\n\r\nexport default {\r\n connectDB,\r\n disconnectDB,\r\n getConnectionStatus,\r\n};\r\n","import type { Request, Response, NextFunction } from 'express';\r\nimport jwt from 'jsonwebtoken';\r\nimport { unauthorizedResponse, forbiddenResponse } from '../response/response-object';\r\n\r\n/**\r\n * Extended Request with auth information\r\n */\r\nexport interface AuthRequest extends Request {\r\n userId?: string;\r\n organizationId?: string;\r\n apiKey?: { _id: string; name: string };\r\n user?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * JWT Payload Interface\r\n */\r\nexport interface JWTPayload {\r\n userId: string;\r\n organizationId?: string;\r\n email?: string;\r\n role?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * JWT Authentication Middleware\r\n * Validates Bearer token from Authorization header\r\n */\r\nexport const authenticateJWT = (secretKey: string) => {\r\n return (req: AuthRequest, res: Response, next: NextFunction): void => {\r\n const authHeader = req.headers.authorization;\r\n\r\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\r\n unauthorizedResponse(res, 'Authorization header missing or malformed');\r\n return;\r\n }\r\n\r\n const token = authHeader.split(' ')[1];\r\n\r\n try {\r\n const decoded = jwt.verify(token, secretKey) as JWTPayload;\r\n\r\n req.userId = decoded.userId;\r\n req.organizationId = decoded.organizationId;\r\n req.user = decoded as Record<string, unknown>;\r\n\r\n if (!decoded.userId) {\r\n unauthorizedResponse(res, 'User ID not found in token');\r\n return;\r\n }\r\n\r\n next();\r\n } catch (err) {\r\n if (err instanceof jwt.TokenExpiredError) {\r\n unauthorizedResponse(res, 'Token has expired');\r\n return;\r\n }\r\n if (err instanceof jwt.JsonWebTokenError) {\r\n forbiddenResponse(res, 'Invalid token');\r\n return;\r\n }\r\n unauthorizedResponse(res, 'Token validation failed');\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Optional JWT Authentication Middleware\r\n * Validates token if present, but doesn't require it\r\n */\r\nexport const optionalAuthenticateJWT = (secretKey: string) => {\r\n return (req: AuthRequest, _res: Response, next: NextFunction): void => {\r\n const authHeader = req.headers.authorization;\r\n\r\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\r\n next();\r\n return;\r\n }\r\n\r\n const token = authHeader.split(' ')[1];\r\n\r\n try {\r\n const decoded = jwt.verify(token, secretKey) as JWTPayload;\r\n req.userId = decoded.userId;\r\n req.organizationId = decoded.organizationId;\r\n req.user = decoded as Record<string, unknown>;\r\n } catch {\r\n // Token invalid, but continue without auth\r\n }\r\n\r\n next();\r\n };\r\n};\r\n\r\n/**\r\n * API Key Authentication Middleware\r\n * Validates x-api-key header\r\n */\r\nexport const authenticateApiKey = (\r\n validateKeyFn: (key: string) => Promise<{\r\n valid: boolean;\r\n organizationId?: string;\r\n keyId?: string;\r\n keyName?: string;\r\n }>\r\n) => {\r\n return async (req: AuthRequest, res: Response, next: NextFunction): Promise<void> => {\r\n try {\r\n const apiKey = req.headers['x-api-key'] as string;\r\n\r\n if (!apiKey) {\r\n unauthorizedResponse(res, 'API key is required. Please provide x-api-key header');\r\n return;\r\n }\r\n\r\n const validation = await validateKeyFn(apiKey);\r\n\r\n if (!validation.valid) {\r\n unauthorizedResponse(res, 'Invalid or inactive API key');\r\n return;\r\n }\r\n\r\n if (validation.organizationId) {\r\n req.organizationId = validation.organizationId;\r\n }\r\n if (validation.keyId && validation.keyName) {\r\n req.apiKey = {\r\n _id: validation.keyId,\r\n name: validation.keyName,\r\n };\r\n }\r\n\r\n next();\r\n } catch {\r\n unauthorizedResponse(res, 'API key validation failed');\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Organization Header Middleware\r\n * Extracts organization ID from x-organization-id header\r\n */\r\nexport const extractOrganization = (req: AuthRequest, _res: Response, next: NextFunction): void => {\r\n const orgId = req.headers['x-organization-id'] as string;\r\n\r\n if (orgId) {\r\n req.organizationId = orgId;\r\n }\r\n\r\n next();\r\n};\r\n\r\n/**\r\n * Require Organization Middleware\r\n * Ensures organizationId is present in request\r\n */\r\nexport const requireOrganization = (req: AuthRequest, res: Response, next: NextFunction): void => {\r\n if (!req.organizationId) {\r\n unauthorizedResponse(res, 'Organization ID is required');\r\n return;\r\n }\r\n next();\r\n};\r\n\r\nexport default {\r\n authenticateJWT,\r\n optionalAuthenticateJWT,\r\n authenticateApiKey,\r\n extractOrganization,\r\n requireOrganization,\r\n};\r\n","/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\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 const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n","/**\r\n * Package Check Utility - Server/Node.js Version\r\n * Analyzes package.json dependencies and checks for updates\r\n * \r\n * This version supports reading from file paths using Node.js fs\r\n */\r\nimport { readFileSync, existsSync } from 'fs';\r\nimport { resolve } from 'path';\r\n\r\nexport interface PackageVersion {\r\n name: string;\r\n current: string;\r\n latest: string;\r\n hasUpdate: boolean;\r\n updateType: 'major' | 'minor' | 'patch' | 'prerelease' | 'none';\r\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\r\n}\r\n\r\nexport interface PackageCheckResult {\r\n packageName: string;\r\n packageVersion: string;\r\n totalDependencies: number;\r\n outdatedCount: number;\r\n dependencies: PackageVersion[];\r\n byType: {\r\n dependencies: PackageVersion[];\r\n devDependencies: PackageVersion[];\r\n peerDependencies: PackageVersion[];\r\n optionalDependencies: PackageVersion[];\r\n };\r\n byUpdateType: {\r\n major: PackageVersion[];\r\n minor: PackageVersion[];\r\n patch: PackageVersion[];\r\n prerelease: PackageVersion[];\r\n };\r\n checkedAt: Date;\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\n/**\r\n * Parse version string, removing range operators\r\n */\r\nfunction parseVersion(version: string): string {\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 if (latest.includes('-')) return 'prerelease';\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 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) return null;\r\n\r\n const data = await response.json();\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 * Load package.json from file path, URL, or object\r\n */\r\nasync function loadPackageJson(source: string | PackageJson): Promise<PackageJson> {\r\n if (typeof source === 'object') {\r\n return source;\r\n }\r\n\r\n // URL\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: ${response.status}`);\r\n }\r\n return response.json() as Promise<PackageJson>;\r\n }\r\n\r\n // File path\r\n const filePath = resolve(source);\r\n if (!existsSync(filePath)) {\r\n throw new Error(`File not found: ${filePath}`);\r\n }\r\n\r\n const content = readFileSync(filePath, 'utf-8');\r\n return JSON.parse(content) as PackageJson;\r\n}\r\n\r\n/**\r\n * Check dependencies\r\n */\r\nasync function checkDeps(\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 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: ${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: ${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 * Check package.json for outdated dependencies\r\n * \r\n * @example\r\n * // From file path\r\n * const result = await checkPackageServer('./package.json');\r\n * \r\n * @example\r\n * // From URL\r\n * const result = await checkPackageServer('https://raw.githubusercontent.com/user/repo/main/package.json');\r\n */\r\nexport async function checkPackageServer(\r\n source: string | PackageJson\r\n): Promise<PackageCheckResult> {\r\n const errors: string[] = [];\r\n const pkg = await loadPackageJson(source);\r\n\r\n const [dependencies, devDependencies, peerDependencies, optionalDependencies] =\r\n await Promise.all([\r\n checkDeps(pkg.dependencies, 'dependencies', errors),\r\n checkDeps(pkg.devDependencies, 'devDependencies', errors),\r\n checkDeps(pkg.peerDependencies, 'peerDependencies', errors),\r\n checkDeps(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: { dependencies, devDependencies, peerDependencies, optionalDependencies },\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 result as colored console output\r\n */\r\nexport function formatPackageCheckResult(result: PackageCheckResult): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(`\\n📦 Package: ${result.packageName}@${result.packageVersion}`);\r\n lines.push(`📅 Checked: ${result.checkedAt.toISOString()}`);\r\n lines.push(`📊 Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}\\n`);\r\n\r\n const formatDep = (d: PackageVersion) => ` ${d.name.padEnd(35)} ${d.current.padEnd(15)} → ${d.latest}`;\r\n\r\n if (result.byUpdateType.major.length > 0) {\r\n lines.push('🔴 MAJOR Updates:');\r\n result.byUpdateType.major.forEach((d) => lines.push(formatDep(d)));\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) => lines.push(formatDep(d)));\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) => lines.push(formatDep(d)));\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) => lines.push(` ${e}`));\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Generate ncu command\r\n */\r\nexport function generateNcuCommand(\r\n result: PackageCheckResult,\r\n options: { updateType?: 'major' | 'minor' | 'patch' | 'all'; interactive?: boolean; upgrade?: boolean } = {}\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) return '# No updates available';\r\n\r\n let cmd = 'npx npm-check-updates';\r\n\r\n if (packages.length < result.dependencies.length) {\r\n cmd += ` --filter \"${packages.join(',')}\"`;\r\n }\r\n\r\n if (interactive) cmd += ' --interactive';\r\n if (upgrade) cmd += ' --upgrade';\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Print summary to console\r\n */\r\nexport function printPackageCheckSummary(result: PackageCheckResult): void {\r\n console.log(formatPackageCheckResult(result));\r\n\r\n if (result.outdatedCount > 0) {\r\n console.log('\\n📝 Quick Commands:');\r\n console.log(' Check all: npx npm-check-updates');\r\n console.log(' Interactive: npx npm-check-updates --interactive');\r\n console.log(' Update all: npx npm-check-updates --upgrade && npm install');\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n console.log(` Patch only: ${generateNcuCommand(result, { updateType: 'patch', upgrade: true })}`);\r\n }\r\n }\r\n}\r\n\r\nexport const packageCheckServer = {\r\n check: checkPackageServer,\r\n format: formatPackageCheckResult,\r\n generateNcuCommand,\r\n print: printPackageCheckSummary,\r\n} as const;\r\n\r\nexport default packageCheckServer;\r\n","// Client-side exports\r\nexport * from './http';\r\nexport * from './logger';\r\nexport * from './utils';\r\nexport * from './hooks';\r\nexport * from './web';\r\n","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","// Shared exports (used by both server and client)\r\nexport * from './types';\r\nexport * from './config';\r\nexport * from './constants';\r\nexport * from './utils';\r\nexport * from './validation';\r\n","/**\r\n * Environment Configuration\r\n * Shared config helpers for both client and server\r\n */\r\n\r\nexport interface EnvConfig {\r\n NODE_ENV: 'development' | 'production' | 'test';\r\n PORT?: number;\r\n API_URL?: string;\r\n DATABASE_URL?: string;\r\n JWT_SECRET?: string;\r\n JWT_EXPIRES_IN?: string;\r\n LOG_LEVEL?: string;\r\n [key: string]: string | number | boolean | undefined;\r\n}\r\n\r\n/**\r\n * Get environment variable with type safety\r\n */\r\nexport const getEnv = <T extends string | number | boolean>(\r\n key: string,\r\n defaultValue?: T\r\n): T => {\r\n const value = process.env[key];\r\n \r\n if (value === undefined) {\r\n if (defaultValue !== undefined) {\r\n return defaultValue;\r\n }\r\n throw new Error(`Environment variable ${key} is required but not defined`);\r\n }\r\n\r\n // Type inference based on default value\r\n if (typeof defaultValue === 'number') {\r\n return Number(value) as T;\r\n }\r\n if (typeof defaultValue === 'boolean') {\r\n return (value === 'true' || value === '1') as unknown as T;\r\n }\r\n \r\n return value as T;\r\n};\r\n\r\n/**\r\n * Get optional environment variable\r\n */\r\nexport const getEnvOptional = <T extends string | number | boolean>(\r\n key: string,\r\n defaultValue?: T\r\n): T | undefined => {\r\n const value = process.env[key];\r\n \r\n if (value === undefined) {\r\n return defaultValue;\r\n }\r\n\r\n if (typeof defaultValue === 'number') {\r\n return Number(value) as T;\r\n }\r\n if (typeof defaultValue === 'boolean') {\r\n return (value === 'true' || value === '1') as unknown as T;\r\n }\r\n \r\n return value as T;\r\n};\r\n\r\n/**\r\n * Check if environment is production\r\n */\r\nexport const isProd = (): boolean => {\r\n return process.env.NODE_ENV === 'production';\r\n};\r\n\r\n/**\r\n * Check if environment is development\r\n */\r\nexport const isDev = (): boolean => {\r\n return process.env.NODE_ENV === 'development';\r\n};\r\n\r\n/**\r\n * Check if environment is test\r\n */\r\nexport const isTest = (): boolean => {\r\n return process.env.NODE_ENV === 'test';\r\n};\r\n\r\n/**\r\n * Validate required environment variables\r\n */\r\nexport const validateEnv = (requiredVars: string[]): void => {\r\n const missing = requiredVars.filter((key) => !process.env[key]);\r\n \r\n if (missing.length > 0) {\r\n throw new Error(\r\n `Missing required environment variables: ${missing.join(', ')}`\r\n );\r\n }\r\n};\r\n\r\nexport default {\r\n getEnv,\r\n getEnvOptional,\r\n isProd,\r\n isDev,\r\n isTest,\r\n validateEnv,\r\n};\r\n","/**\r\n * HTTP Status Codes\r\n */\r\nexport const HTTP_STATUS = {\r\n // Success\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NO_CONTENT: 204,\r\n\r\n // Redirection\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n NOT_MODIFIED: 304,\r\n TEMPORARY_REDIRECT: 307,\r\n PERMANENT_REDIRECT: 308,\r\n\r\n // Client Errors\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n UNPROCESSABLE_ENTITY: 422,\r\n TOO_MANY_REQUESTS: 429,\r\n\r\n // Server Errors\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n} as const;\r\n\r\nexport type HttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\r\n\r\n/**\r\n * HTTP Status Messages\r\n */\r\nexport const HTTP_STATUS_MESSAGES: Record<number, string> = {\r\n [HTTP_STATUS.OK]: 'OK',\r\n [HTTP_STATUS.CREATED]: 'Created',\r\n [HTTP_STATUS.ACCEPTED]: 'Accepted',\r\n [HTTP_STATUS.NO_CONTENT]: 'No Content',\r\n [HTTP_STATUS.BAD_REQUEST]: 'Bad Request',\r\n [HTTP_STATUS.UNAUTHORIZED]: 'Unauthorized',\r\n [HTTP_STATUS.FORBIDDEN]: 'Forbidden',\r\n [HTTP_STATUS.NOT_FOUND]: 'Not Found',\r\n [HTTP_STATUS.METHOD_NOT_ALLOWED]: 'Method Not Allowed',\r\n [HTTP_STATUS.CONFLICT]: 'Conflict',\r\n [HTTP_STATUS.UNPROCESSABLE_ENTITY]: 'Unprocessable Entity',\r\n [HTTP_STATUS.TOO_MANY_REQUESTS]: 'Too Many Requests',\r\n [HTTP_STATUS.INTERNAL_SERVER_ERROR]: 'Internal Server Error',\r\n [HTTP_STATUS.SERVICE_UNAVAILABLE]: 'Service Unavailable',\r\n};\r\n\r\n/**\r\n * Common Status Values\r\n */\r\nexport const STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n APPROVED: 'approved',\r\n REJECTED: 'rejected',\r\n DELETED: 'deleted',\r\n ARCHIVED: 'archived',\r\n DRAFT: 'draft',\r\n PUBLISHED: 'published',\r\n SUSPENDED: 'suspended',\r\n} as const;\r\n\r\nexport type StatusValue = (typeof STATUS)[keyof typeof STATUS];\r\n\r\n/**\r\n * User Status Values\r\n */\r\nexport const USER_STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n SUSPENDED: 'suspended',\r\n BANNED: 'banned',\r\n} as const;\r\n\r\nexport type UserStatusValue = (typeof USER_STATUS)[keyof typeof USER_STATUS];\r\n\r\n/**\r\n * Common Roles\r\n */\r\nexport const ROLES = {\r\n ADMIN: 'admin',\r\n USER: 'user',\r\n MODERATOR: 'moderator',\r\n GUEST: 'guest',\r\n SUPER_ADMIN: 'super_admin',\r\n} as const;\r\n\r\nexport type RoleValue = (typeof ROLES)[keyof typeof ROLES];\r\n\r\n/**\r\n * Pagination Defaults\r\n */\r\nexport const PAGINATION = {\r\n DEFAULT_PAGE: 1,\r\n DEFAULT_LIMIT: 10,\r\n MAX_LIMIT: 100,\r\n} as const;\r\n\r\n/**\r\n * Token Types\r\n */\r\nexport const TOKEN_TYPES = {\r\n ACCESS: 'access',\r\n REFRESH: 'refresh',\r\n RESET_PASSWORD: 'reset_password',\r\n EMAIL_VERIFICATION: 'email_verification',\r\n} as const;\r\n\r\nexport type TokenType = (typeof TOKEN_TYPES)[keyof typeof TOKEN_TYPES];\r\n\r\nexport default {\r\n HTTP_STATUS,\r\n HTTP_STATUS_MESSAGES,\r\n STATUS,\r\n USER_STATUS,\r\n ROLES,\r\n PAGINATION,\r\n TOKEN_TYPES,\r\n};\r\n","/**\r\n * Common Enums and Constants\r\n * Reusable enums for consistent data handling across all projects\r\n */\r\n\r\n// ==========================================\r\n// STATUS ENUMS\r\n// ==========================================\r\n\r\n/**\r\n * Generic status enum for records/items\r\n */\r\nexport const STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n APPROVED: 'approved',\r\n REJECTED: 'rejected',\r\n ARCHIVED: 'archived',\r\n DELETED: 'deleted',\r\n DRAFT: 'draft',\r\n PUBLISHED: 'published',\r\n SUSPENDED: 'suspended',\r\n EXPIRED: 'expired',\r\n CANCELLED: 'cancelled',\r\n} as const;\r\n\r\nexport type Status = (typeof STATUS)[keyof typeof STATUS];\r\n\r\n/**\r\n * User account status\r\n */\r\nexport const USER_STATUS = {\r\n ACTIVE: 'active',\r\n INACTIVE: 'inactive',\r\n PENDING: 'pending',\r\n SUSPENDED: 'suspended',\r\n BANNED: 'banned',\r\n DELETED: 'deleted',\r\n UNVERIFIED: 'unverified',\r\n VERIFIED: 'verified',\r\n} as const;\r\n\r\nexport type UserStatus = (typeof USER_STATUS)[keyof typeof USER_STATUS];\r\n\r\n/**\r\n * Order/Transaction status\r\n */\r\nexport const ORDER_STATUS = {\r\n PENDING: 'pending',\r\n CONFIRMED: 'confirmed',\r\n PROCESSING: 'processing',\r\n SHIPPED: 'shipped',\r\n DELIVERED: 'delivered',\r\n CANCELLED: 'cancelled',\r\n REFUNDED: 'refunded',\r\n FAILED: 'failed',\r\n ON_HOLD: 'on_hold',\r\n} as const;\r\n\r\nexport type OrderStatus = (typeof ORDER_STATUS)[keyof typeof ORDER_STATUS];\r\n\r\n/**\r\n * Payment status\r\n */\r\nexport const PAYMENT_STATUS = {\r\n PENDING: 'pending',\r\n PROCESSING: 'processing',\r\n COMPLETED: 'completed',\r\n FAILED: 'failed',\r\n CANCELLED: 'cancelled',\r\n REFUNDED: 'refunded',\r\n PARTIALLY_REFUNDED: 'partially_refunded',\r\n DISPUTED: 'disputed',\r\n} as const;\r\n\r\nexport type PaymentStatus = (typeof PAYMENT_STATUS)[keyof typeof PAYMENT_STATUS];\r\n\r\n/**\r\n * Task/Ticket status\r\n */\r\nexport const TASK_STATUS = {\r\n TODO: 'todo',\r\n IN_PROGRESS: 'in_progress',\r\n IN_REVIEW: 'in_review',\r\n DONE: 'done',\r\n BLOCKED: 'blocked',\r\n CANCELLED: 'cancelled',\r\n ON_HOLD: 'on_hold',\r\n} as const;\r\n\r\nexport type TaskStatus = (typeof TASK_STATUS)[keyof typeof TASK_STATUS];\r\n\r\n/**\r\n * Subscription status\r\n */\r\nexport const SUBSCRIPTION_STATUS = {\r\n ACTIVE: 'active',\r\n TRIAL: 'trial',\r\n PAST_DUE: 'past_due',\r\n CANCELLED: 'cancelled',\r\n EXPIRED: 'expired',\r\n PAUSED: 'paused',\r\n PENDING: 'pending',\r\n} as const;\r\n\r\nexport type SubscriptionStatus = (typeof SUBSCRIPTION_STATUS)[keyof typeof SUBSCRIPTION_STATUS];\r\n\r\n// ==========================================\r\n// SORT ENUMS\r\n// ==========================================\r\n\r\n/**\r\n * Sort direction\r\n */\r\nexport const SORT_DIRECTION = {\r\n ASC: 'asc',\r\n DESC: 'desc',\r\n} as const;\r\n\r\nexport type SortDirection = (typeof SORT_DIRECTION)[keyof typeof SORT_DIRECTION];\r\n\r\n/**\r\n * Common sort options\r\n */\r\nexport const SORT = {\r\n // Date sorting\r\n NEWEST: 'newest',\r\n OLDEST: 'oldest',\r\n CREATED_AT_ASC: 'created_at_asc',\r\n CREATED_AT_DESC: 'created_at_desc',\r\n UPDATED_AT_ASC: 'updated_at_asc',\r\n UPDATED_AT_DESC: 'updated_at_desc',\r\n\r\n // Alphabetical\r\n NAME_ASC: 'name_asc',\r\n NAME_DESC: 'name_desc',\r\n TITLE_ASC: 'title_asc',\r\n TITLE_DESC: 'title_desc',\r\n ALPHABETICAL: 'alphabetical',\r\n REVERSE_ALPHABETICAL: 'reverse_alphabetical',\r\n\r\n // Numeric\r\n PRICE_ASC: 'price_asc',\r\n PRICE_DESC: 'price_desc',\r\n AMOUNT_ASC: 'amount_asc',\r\n AMOUNT_DESC: 'amount_desc',\r\n\r\n // Popularity/Engagement\r\n POPULAR: 'popular',\r\n TRENDING: 'trending',\r\n MOST_VIEWED: 'most_viewed',\r\n MOST_LIKED: 'most_liked',\r\n MOST_COMMENTED: 'most_commented',\r\n TOP_RATED: 'top_rated',\r\n\r\n // Relevance\r\n RELEVANCE: 'relevance',\r\n BEST_MATCH: 'best_match',\r\n\r\n // Custom\r\n CUSTOM: 'custom',\r\n MANUAL: 'manual',\r\n RANDOM: 'random',\r\n} as const;\r\n\r\nexport type Sort = (typeof SORT)[keyof typeof SORT];\r\n\r\n// ==========================================\r\n// ROLE ENUMS\r\n// ==========================================\r\n\r\n/**\r\n * User roles\r\n */\r\nexport const ROLE = {\r\n // System roles\r\n SUPER_ADMIN: 'super_admin',\r\n ADMIN: 'admin',\r\n MODERATOR: 'moderator',\r\n SUPPORT: 'support',\r\n\r\n // User roles\r\n USER: 'user',\r\n MEMBER: 'member',\r\n GUEST: 'guest',\r\n\r\n // Business roles\r\n OWNER: 'owner',\r\n MANAGER: 'manager',\r\n EDITOR: 'editor',\r\n VIEWER: 'viewer',\r\n CONTRIBUTOR: 'contributor',\r\n\r\n // Team roles\r\n TEAM_LEAD: 'team_lead',\r\n TEAM_MEMBER: 'team_member',\r\n\r\n // API roles\r\n API_USER: 'api_user',\r\n SERVICE: 'service',\r\n BOT: 'bot',\r\n} as const;\r\n\r\nexport type Role = (typeof ROLE)[keyof typeof ROLE];\r\n\r\n/**\r\n * Permission levels (hierarchical)\r\n */\r\nexport const PERMISSION_LEVEL = {\r\n NONE: 0,\r\n READ: 1,\r\n WRITE: 2,\r\n DELETE: 3,\r\n ADMIN: 4,\r\n SUPER_ADMIN: 5,\r\n} as const;\r\n\r\nexport type PermissionLevel = (typeof PERMISSION_LEVEL)[keyof typeof PERMISSION_LEVEL];\r\n\r\n// ==========================================\r\n// PRIORITY ENUMS\r\n// ==========================================\r\n\r\nexport const PRIORITY = {\r\n LOWEST: 'lowest',\r\n LOW: 'low',\r\n MEDIUM: 'medium',\r\n HIGH: 'high',\r\n HIGHEST: 'highest',\r\n URGENT: 'urgent',\r\n CRITICAL: 'critical',\r\n} as const;\r\n\r\nexport type Priority = (typeof PRIORITY)[keyof typeof PRIORITY];\r\n\r\n// ==========================================\r\n// VISIBILITY ENUMS\r\n// ==========================================\r\n\r\nexport const VISIBILITY = {\r\n PUBLIC: 'public',\r\n PRIVATE: 'private',\r\n INTERNAL: 'internal',\r\n RESTRICTED: 'restricted',\r\n HIDDEN: 'hidden',\r\n UNLISTED: 'unlisted',\r\n} as const;\r\n\r\nexport type Visibility = (typeof VISIBILITY)[keyof typeof VISIBILITY];\r\n\r\n// ==========================================\r\n// BREAKPOINTS\r\n// ==========================================\r\n\r\n/**\r\n * Responsive breakpoints (pixels)\r\n * Following Tailwind CSS conventions\r\n */\r\nexport const BREAKPOINTS = {\r\n xs: 0,\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n} as const;\r\n\r\nexport type Breakpoint = keyof typeof BREAKPOINTS;\r\n\r\n/**\r\n * Media query strings for breakpoints\r\n */\r\nexport const MEDIA_QUERIES = {\r\n xs: '(min-width: 0px)',\r\n sm: '(min-width: 640px)',\r\n md: '(min-width: 768px)',\r\n lg: '(min-width: 1024px)',\r\n xl: '(min-width: 1280px)',\r\n '2xl': '(min-width: 1536px)',\r\n} as const;\r\n\r\n/**\r\n * Max-width media queries\r\n */\r\nexport const MEDIA_QUERIES_MAX = {\r\n xs: '(max-width: 639px)',\r\n sm: '(max-width: 767px)',\r\n md: '(max-width: 1023px)',\r\n lg: '(max-width: 1279px)',\r\n xl: '(max-width: 1535px)',\r\n '2xl': '(max-width: 9999px)',\r\n} as const;\r\n\r\n/**\r\n * Container max widths for each breakpoint\r\n */\r\nexport const CONTAINER_WIDTHS = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n} as const;\r\n\r\n// ==========================================\r\n// FILE TYPES\r\n// ==========================================\r\n\r\nexport const FILE_TYPE = {\r\n IMAGE: 'image',\r\n VIDEO: 'video',\r\n AUDIO: 'audio',\r\n DOCUMENT: 'document',\r\n SPREADSHEET: 'spreadsheet',\r\n PRESENTATION: 'presentation',\r\n ARCHIVE: 'archive',\r\n CODE: 'code',\r\n OTHER: 'other',\r\n} as const;\r\n\r\nexport type FileType = (typeof FILE_TYPE)[keyof typeof FILE_TYPE];\r\n\r\n// ==========================================\r\n// NOTIFICATION TYPES\r\n// ==========================================\r\n\r\nexport const NOTIFICATION_TYPE = {\r\n INFO: 'info',\r\n SUCCESS: 'success',\r\n WARNING: 'warning',\r\n ERROR: 'error',\r\n ALERT: 'alert',\r\n} as const;\r\n\r\nexport type NotificationType = (typeof NOTIFICATION_TYPE)[keyof typeof NOTIFICATION_TYPE];\r\n\r\n// ==========================================\r\n// THEME\r\n// ==========================================\r\n\r\nexport const THEME = {\r\n LIGHT: 'light',\r\n DARK: 'dark',\r\n SYSTEM: 'system',\r\n} as const;\r\n\r\nexport type Theme = (typeof THEME)[keyof typeof THEME];\r\n\r\n// ==========================================\r\n// LOCALE\r\n// ==========================================\r\n\r\nexport const LOCALE = {\r\n EN_US: 'en-US',\r\n EN_GB: 'en-GB',\r\n ES_ES: 'es-ES',\r\n FR_FR: 'fr-FR',\r\n DE_DE: 'de-DE',\r\n IT_IT: 'it-IT',\r\n PT_BR: 'pt-BR',\r\n JA_JP: 'ja-JP',\r\n ZH_CN: 'zh-CN',\r\n ZH_TW: 'zh-TW',\r\n KO_KR: 'ko-KR',\r\n HI_IN: 'hi-IN',\r\n AR_SA: 'ar-SA',\r\n RU_RU: 'ru-RU',\r\n} as const;\r\n\r\nexport type Locale = (typeof LOCALE)[keyof typeof LOCALE];\r\n\r\n// ==========================================\r\n// DATE FORMATS\r\n// ==========================================\r\n\r\nexport const DATE_FORMAT = {\r\n ISO: 'yyyy-MM-dd',\r\n US: 'MM/dd/yyyy',\r\n EU: 'dd/MM/yyyy',\r\n LONG: 'MMMM d, yyyy',\r\n SHORT: 'MMM d, yyyy',\r\n WITH_TIME: 'yyyy-MM-dd HH:mm:ss',\r\n RELATIVE: 'relative',\r\n} as const;\r\n\r\nexport type DateFormat = (typeof DATE_FORMAT)[keyof typeof DATE_FORMAT];\r\n\r\n// ==========================================\r\n// INTERVAL\r\n// ==========================================\r\n\r\nexport const INTERVAL = {\r\n DAILY: 'daily',\r\n WEEKLY: 'weekly',\r\n BIWEEKLY: 'biweekly',\r\n MONTHLY: 'monthly',\r\n QUARTERLY: 'quarterly',\r\n YEARLY: 'yearly',\r\n ONCE: 'once',\r\n} as const;\r\n\r\nexport type Interval = (typeof INTERVAL)[keyof typeof INTERVAL];\r\n\r\n// ==========================================\r\n// GENDER\r\n// ==========================================\r\n\r\nexport const GENDER = {\r\n MALE: 'male',\r\n FEMALE: 'female',\r\n OTHER: 'other',\r\n PREFER_NOT_TO_SAY: 'prefer_not_to_say',\r\n} as const;\r\n\r\nexport type Gender = (typeof GENDER)[keyof typeof GENDER];\r\n\r\n// ==========================================\r\n// EXPORT ALL\r\n// ==========================================\r\n\r\nexport const ENUMS = {\r\n STATUS,\r\n USER_STATUS,\r\n ORDER_STATUS,\r\n PAYMENT_STATUS,\r\n TASK_STATUS,\r\n SUBSCRIPTION_STATUS,\r\n SORT_DIRECTION,\r\n SORT,\r\n ROLE,\r\n PERMISSION_LEVEL,\r\n PRIORITY,\r\n VISIBILITY,\r\n BREAKPOINTS,\r\n MEDIA_QUERIES,\r\n MEDIA_QUERIES_MAX,\r\n CONTAINER_WIDTHS,\r\n FILE_TYPE,\r\n NOTIFICATION_TYPE,\r\n THEME,\r\n LOCALE,\r\n DATE_FORMAT,\r\n INTERVAL,\r\n GENDER,\r\n} as const;\r\n\r\nexport default ENUMS;\r\n","/**\r\n * Enhanced Date/Time utilities using date-fns with timezone support\r\n * Deep level date handling for all common operations\r\n */\r\nimport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n} from 'date-fns';\r\n\r\nimport { formatInTimeZone, toZonedTime, fromZonedTime } from 'date-fns-tz';\r\n\r\n// Re-export all date-fns functions for convenience\r\nexport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n formatInTimeZone,\r\n toZonedTime,\r\n fromZonedTime,\r\n};\r\n\r\n/**\r\n * Date input type - accepts Date, string (ISO), or timestamp\r\n */\r\nexport type DateInput = Date | string | number;\r\n\r\n/**\r\n * Parse any date input to Date object\r\n */\r\nexport const parseDate = (date: DateInput): Date => {\r\n if (date instanceof Date) return date;\r\n if (typeof date === 'string') return parseISO(date);\r\n return new Date(date);\r\n};\r\n\r\n/**\r\n * Check if date input is valid\r\n */\r\nexport const isValidDate = (date: DateInput): boolean => {\r\n const parsed = parseDate(date);\r\n return isValid(parsed);\r\n};\r\n\r\n// ==========================================\r\n// FORMAT FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Format presets for common date formats\r\n */\r\nexport const DATE_FORMATS = {\r\n // Date only\r\n DATE_SHORT: 'MM/dd/yyyy', // 01/15/2026\r\n DATE_MEDIUM: 'MMM d, yyyy', // Jan 15, 2026\r\n DATE_LONG: 'MMMM d, yyyy', // January 15, 2026\r\n DATE_FULL: 'EEEE, MMMM d, yyyy', // Friday, January 15, 2026\r\n DATE_ISO: 'yyyy-MM-dd', // 2026-01-15\r\n\r\n // Time only\r\n TIME_SHORT: 'h:mm a', // 3:30 PM\r\n TIME_MEDIUM: 'h:mm:ss a', // 3:30:45 PM\r\n TIME_24H: 'HH:mm', // 15:30\r\n TIME_24H_FULL: 'HH:mm:ss', // 15:30:45\r\n\r\n // Date and time\r\n DATETIME_SHORT: 'MM/dd/yyyy h:mm a', // 01/15/2026 3:30 PM\r\n DATETIME_MEDIUM: 'MMM d, yyyy h:mm a', // Jan 15, 2026 3:30 PM\r\n DATETIME_LONG: 'MMMM d, yyyy h:mm a', // January 15, 2026 3:30 PM\r\n DATETIME_FULL: 'EEEE, MMMM d, yyyy h:mm a', // Friday, January 15, 2026 3:30 PM\r\n DATETIME_ISO: \"yyyy-MM-dd'T'HH:mm:ss\", // 2026-01-15T15:30:45\r\n\r\n // Special formats\r\n MONTH_YEAR: 'MMMM yyyy', // January 2026\r\n MONTH_DAY: 'MMM d', // Jan 15\r\n DAY_MONTH: 'd MMM', // 15 Jan\r\n WEEKDAY: 'EEEE', // Friday\r\n WEEKDAY_SHORT: 'EEE', // Fri\r\n} as const;\r\n\r\n/**\r\n * Format date with preset or custom format\r\n */\r\nexport const formatDate = (date: DateInput, formatStr: string = DATE_FORMATS.DATE_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date with time\r\n */\r\nexport const formatDateTime = (date: DateInput, formatStr: string = DATE_FORMATS.DATETIME_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date in a specific timezone\r\n */\r\nexport const formatDateInTimezone = (\r\n date: DateInput,\r\n timezone: string,\r\n formatStr: string = DATE_FORMATS.DATETIME_MEDIUM\r\n): string => {\r\n return formatInTimeZone(parseDate(date), timezone, formatStr);\r\n};\r\n\r\n/**\r\n * Format date as relative time (e.g., \"2 hours ago\", \"in 3 days\")\r\n */\r\nexport const formatRelativeTime = (date: DateInput, baseDate?: DateInput): string => {\r\n const parsed = parseDate(date);\r\n if (baseDate) {\r\n return formatDistance(parsed, parseDate(baseDate), { addSuffix: true });\r\n }\r\n return formatDistanceToNow(parsed, { addSuffix: true });\r\n};\r\n\r\n/**\r\n * Format date as smart relative (Today at 3:30 PM, Yesterday, etc.)\r\n */\r\nexport const formatSmartDate = (date: DateInput): string => {\r\n const parsed = parseDate(date);\r\n\r\n if (isToday(parsed)) {\r\n return `Today at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isYesterday(parsed)) {\r\n return `Yesterday at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isTomorrow(parsed)) {\r\n return `Tomorrow at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isThisWeek(parsed)) {\r\n return format(parsed, 'EEEE \\'at\\' h:mm a'); // Friday at 3:30 PM\r\n }\r\n if (isThisYear(parsed)) {\r\n return format(parsed, 'MMM d \\'at\\' h:mm a'); // Jan 15 at 3:30 PM\r\n }\r\n return format(parsed, DATE_FORMATS.DATETIME_MEDIUM);\r\n};\r\n\r\n/**\r\n * Format duration between two dates in human readable form\r\n */\r\nexport const formatDateRange = (start: DateInput, end: DateInput): string => {\r\n const duration = intervalToDuration({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n\r\n return formatDuration(duration, {\r\n format: ['years', 'months', 'days', 'hours', 'minutes'],\r\n });\r\n};\r\n\r\n// ==========================================\r\n// TIMEZONE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Convert date to a specific timezone\r\n */\r\nexport const toTimezone = (date: DateInput, timezone: string): Date => {\r\n return toZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Convert date from a specific timezone to UTC\r\n */\r\nexport const fromTimezone = (date: DateInput, timezone: string): Date => {\r\n return fromZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Get current time in a specific timezone\r\n */\r\nexport const nowInTimezone = (timezone: string): Date => {\r\n return toZonedTime(new Date(), timezone);\r\n};\r\n\r\n/**\r\n * Format time difference between timezones\r\n */\r\nexport const getTimezoneDifference = (timezone1: string, timezone2: string): string => {\r\n const now = new Date();\r\n const time1 = toZonedTime(now, timezone1);\r\n const time2 = toZonedTime(now, timezone2);\r\n const diffMinutes = differenceInMinutes(time1, time2);\r\n const hours = Math.floor(Math.abs(diffMinutes) / 60);\r\n const minutes = Math.abs(diffMinutes) % 60;\r\n const sign = diffMinutes >= 0 ? '+' : '-';\r\n\r\n if (minutes === 0) {\r\n return `${sign}${hours}h`;\r\n }\r\n return `${sign}${hours}h ${minutes}m`;\r\n};\r\n\r\n// ==========================================\r\n// DATE ARITHMETIC\r\n// ==========================================\r\n\r\n/**\r\n * Add time to a date\r\n */\r\nexport const addTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return addMinutes(parsed, amount);\r\n case 'hours':\r\n return addHours(parsed, amount);\r\n case 'days':\r\n return addDays(parsed, amount);\r\n case 'weeks':\r\n return addWeeks(parsed, amount);\r\n case 'months':\r\n return addMonths(parsed, amount);\r\n case 'years':\r\n return addYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Subtract time from a date\r\n */\r\nexport const subtractTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return subMinutes(parsed, amount);\r\n case 'hours':\r\n return subHours(parsed, amount);\r\n case 'days':\r\n return subDays(parsed, amount);\r\n case 'weeks':\r\n return subWeeks(parsed, amount);\r\n case 'months':\r\n return subMonths(parsed, amount);\r\n case 'years':\r\n return subYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Get difference between two dates\r\n */\r\nexport const getDateDifference = (\r\n date1: DateInput,\r\n date2: DateInput,\r\n unit: 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): number => {\r\n const d1 = parseDate(date1);\r\n const d2 = parseDate(date2);\r\n switch (unit) {\r\n case 'seconds':\r\n return differenceInSeconds(d1, d2);\r\n case 'minutes':\r\n return differenceInMinutes(d1, d2);\r\n case 'hours':\r\n return differenceInHours(d1, d2);\r\n case 'days':\r\n return differenceInDays(d1, d2);\r\n case 'weeks':\r\n return differenceInWeeks(d1, d2);\r\n case 'months':\r\n return differenceInMonths(d1, d2);\r\n case 'years':\r\n return differenceInYears(d1, d2);\r\n }\r\n};\r\n\r\n// ==========================================\r\n// DATE RANGE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get all days in a range\r\n */\r\nexport const getDaysInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachDayOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all weeks in a range\r\n */\r\nexport const getWeeksInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachWeekOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all months in a range\r\n */\r\nexport const getMonthsInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachMonthOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n// ==========================================\r\n// DATE BOUNDARIES\r\n// ==========================================\r\n\r\n/**\r\n * Get start and end of day\r\n */\r\nexport const getDayBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfDay(parsed),\r\n end: endOfDay(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of week\r\n */\r\nexport const getWeekBoundaries = (date: DateInput, weekStartsOn: 0 | 1 = 0): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfWeek(parsed, { weekStartsOn }),\r\n end: endOfWeek(parsed, { weekStartsOn }),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of month\r\n */\r\nexport const getMonthBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfMonth(parsed),\r\n end: endOfMonth(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of year\r\n */\r\nexport const getYearBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfYear(parsed),\r\n end: endOfYear(parsed),\r\n };\r\n};\r\n\r\n// ==========================================\r\n// DATE COMPARISON\r\n// ==========================================\r\n\r\n/**\r\n * Check if date is between two dates (inclusive)\r\n */\r\nexport const isDateBetween = (date: DateInput, start: DateInput, end: DateInput): boolean => {\r\n const d = parseDate(date);\r\n const s = parseDate(start);\r\n const e = parseDate(end);\r\n return (isAfter(d, s) || isEqual(d, s)) && (isBefore(d, e) || isEqual(d, e));\r\n};\r\n\r\n/**\r\n * Check if two date ranges overlap\r\n */\r\nexport const doDateRangesOverlap = (\r\n range1Start: DateInput,\r\n range1End: DateInput,\r\n range2Start: DateInput,\r\n range2End: DateInput\r\n): boolean => {\r\n const r1s = parseDate(range1Start);\r\n const r1e = parseDate(range1End);\r\n const r2s = parseDate(range2Start);\r\n const r2e = parseDate(range2End);\r\n\r\n return isBefore(r1s, r2e) && isAfter(r1e, r2s);\r\n};\r\n\r\n// ==========================================\r\n// UTILITY FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get age from birthdate\r\n */\r\nexport const getAge = (birthDate: DateInput): number => {\r\n return differenceInYears(new Date(), parseDate(birthDate));\r\n};\r\n\r\n/**\r\n * Check if date is a weekend\r\n */\r\nexport const isWeekend = (date: DateInput): boolean => {\r\n const day = getDay(parseDate(date));\r\n return day === 0 || day === 6;\r\n};\r\n\r\n/**\r\n * Check if date is a weekday\r\n */\r\nexport const isWeekday = (date: DateInput): boolean => {\r\n return !isWeekend(date);\r\n};\r\n\r\n/**\r\n * Get days until a date\r\n */\r\nexport const daysUntil = (date: DateInput): number => {\r\n return differenceInDays(parseDate(date), new Date());\r\n};\r\n\r\n/**\r\n * Get days since a date\r\n */\r\nexport const daysSince = (date: DateInput): number => {\r\n return differenceInDays(new Date(), parseDate(date));\r\n};\r\n\r\n/**\r\n * Format for HTML date input (yyyy-MM-dd)\r\n */\r\nexport const toDateInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.DATE_ISO);\r\n};\r\n\r\n/**\r\n * Format for HTML datetime-local input\r\n */\r\nexport const toDateTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), \"yyyy-MM-dd'T'HH:mm\");\r\n};\r\n\r\n/**\r\n * Format for HTML time input (HH:mm)\r\n */\r\nexport const toTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.TIME_24H);\r\n};\r\n\r\n/**\r\n * Set time on a date\r\n */\r\nexport const setTime = (date: DateInput, hours: number, minutes: number, seconds: number = 0): Date => {\r\n let result = parseDate(date);\r\n result = setHours(result, hours);\r\n result = setMinutes(result, minutes);\r\n result = setSeconds(result, seconds);\r\n return result;\r\n};\r\n\r\n/**\r\n * Combine date from one input and time from another\r\n */\r\nexport const combineDateAndTime = (dateInput: DateInput, timeInput: DateInput): Date => {\r\n const date = parseDate(dateInput);\r\n const time = parseDate(timeInput);\r\n return setTime(date, getHours(time), getMinutes(time), getSeconds(time));\r\n};\r\n\r\nexport default {\r\n // Core\r\n parseDate,\r\n isValidDate,\r\n DATE_FORMATS,\r\n\r\n // Format\r\n formatDate,\r\n formatDateTime,\r\n formatDateInTimezone,\r\n formatRelativeTime,\r\n formatSmartDate,\r\n formatDateRange,\r\n\r\n // Timezone\r\n toTimezone,\r\n fromTimezone,\r\n nowInTimezone,\r\n getTimezoneDifference,\r\n\r\n // Arithmetic\r\n addTime,\r\n subtractTime,\r\n getDateDifference,\r\n\r\n // Ranges\r\n getDaysInRange,\r\n getWeeksInRange,\r\n getMonthsInRange,\r\n\r\n // Boundaries\r\n getDayBoundaries,\r\n getWeekBoundaries,\r\n getMonthBoundaries,\r\n getYearBoundaries,\r\n\r\n // Comparison\r\n isDateBetween,\r\n doDateRangesOverlap,\r\n\r\n // Utilities\r\n getAge,\r\n isWeekend,\r\n isWeekday,\r\n daysUntil,\r\n daysSince,\r\n toDateInputValue,\r\n toDateTimeInputValue,\r\n toTimeInputValue,\r\n setTime,\r\n combineDateAndTime,\r\n};\r\n","/**\r\n * Common Validation Rules & Patterns\r\n * Use with Yup, Zod, or custom validators\r\n */\r\n\r\n// ==========================================\r\n// REGEX PATTERNS\r\n// ==========================================\r\n\r\nexport const VALIDATION_PATTERNS = {\r\n /** Email pattern (RFC 5322 simplified) */\r\n EMAIL: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\r\n\r\n /** Strong password: min 8 chars, uppercase, lowercase, number, special char */\r\n PASSWORD_STRONG:\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$/,\r\n\r\n /** Medium password: min 8 chars, uppercase, lowercase, number */\r\n PASSWORD_MEDIUM: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d@$!%*?&]{8,}$/,\r\n\r\n /** Basic password: min 8 chars */\r\n PASSWORD_BASIC: /^.{8,}$/,\r\n\r\n /** Phone number (international) */\r\n PHONE_INTERNATIONAL: /^\\+?[\\d\\s\\-().]{10,}$/,\r\n\r\n /** Phone number (US) */\r\n PHONE_US: /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\r\n\r\n /** Phone number (India) */\r\n PHONE_INDIA: /^[6-9]\\d{9}$/,\r\n\r\n /** URL pattern */\r\n URL: /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/,\r\n\r\n /** URL with required protocol */\r\n URL_STRICT: /^https?:\\/\\/([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/,\r\n\r\n /** Alphanumeric only */\r\n ALPHANUMERIC: /^[a-zA-Z0-9]+$/,\r\n\r\n /** Letters only */\r\n LETTERS_ONLY: /^[a-zA-Z]+$/,\r\n\r\n /** Numbers only */\r\n NUMBERS_ONLY: /^\\d+$/,\r\n\r\n /** Slug pattern (kebab-case) */\r\n SLUG: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\r\n\r\n /** Username pattern (alphanumeric, underscore, hyphen) */\r\n USERNAME: /^[a-zA-Z0-9_-]{3,30}$/,\r\n\r\n /** Credit card (basic validation) */\r\n CREDIT_CARD: /^\\d{13,19}$/,\r\n\r\n /** CVV (3 or 4 digits) */\r\n CVV: /^\\d{3,4}$/,\r\n\r\n /** ZIP code (US) */\r\n ZIP_US: /^\\d{5}(-\\d{4})?$/,\r\n\r\n /** Postal code (India) */\r\n POSTAL_INDIA: /^\\d{6}$/,\r\n\r\n /** IP Address (IPv4) */\r\n IPV4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\r\n\r\n /** Hex color */\r\n HEX_COLOR: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,\r\n\r\n /** Date (YYYY-MM-DD) */\r\n DATE_ISO: /^\\d{4}-\\d{2}-\\d{2}$/,\r\n\r\n /** Time (HH:MM or HH:MM:SS) */\r\n TIME: /^([01]\\d|2[0-3]):([0-5]\\d)(:[0-5]\\d)?$/,\r\n} as const;\r\n\r\n// ==========================================\r\n// VALIDATION FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport const isValidEmail = (email: string): boolean => {\r\n return VALIDATION_PATTERNS.EMAIL.test(email.trim());\r\n};\r\n\r\n/**\r\n * Validate password strength\r\n */\r\nexport const isValidPassword = (\r\n password: string,\r\n strength: 'basic' | 'medium' | 'strong' = 'medium'\r\n): boolean => {\r\n switch (strength) {\r\n case 'strong':\r\n return VALIDATION_PATTERNS.PASSWORD_STRONG.test(password);\r\n case 'medium':\r\n return VALIDATION_PATTERNS.PASSWORD_MEDIUM.test(password);\r\n case 'basic':\r\n default:\r\n return VALIDATION_PATTERNS.PASSWORD_BASIC.test(password);\r\n }\r\n};\r\n\r\n/**\r\n * Validate phone number\r\n */\r\nexport const isValidPhone = (\r\n phone: string,\r\n format: 'international' | 'us' | 'india' = 'international'\r\n): boolean => {\r\n const cleaned = phone.replace(/\\s/g, '');\r\n switch (format) {\r\n case 'us':\r\n return VALIDATION_PATTERNS.PHONE_US.test(cleaned);\r\n case 'india':\r\n return VALIDATION_PATTERNS.PHONE_INDIA.test(cleaned);\r\n case 'international':\r\n default:\r\n return VALIDATION_PATTERNS.PHONE_INTERNATIONAL.test(cleaned);\r\n }\r\n};\r\n\r\n/**\r\n * Validate URL format\r\n */\r\nexport const isValidUrl = (url: string, requireProtocol: boolean = false): boolean => {\r\n if (requireProtocol) {\r\n return VALIDATION_PATTERNS.URL_STRICT.test(url);\r\n }\r\n return VALIDATION_PATTERNS.URL.test(url);\r\n};\r\n\r\n/**\r\n * Validate username format\r\n */\r\nexport const isValidUsername = (username: string): boolean => {\r\n return VALIDATION_PATTERNS.USERNAME.test(username);\r\n};\r\n\r\n/**\r\n * Validate slug format\r\n */\r\nexport const isValidSlug = (slug: string): boolean => {\r\n return VALIDATION_PATTERNS.SLUG.test(slug);\r\n};\r\n\r\n// ==========================================\r\n// VALIDATION MESSAGES\r\n// ==========================================\r\n\r\nexport const VALIDATION_MESSAGES = {\r\n // Required fields\r\n REQUIRED: 'This field is required',\r\n REQUIRED_FIELD: (field: string) => `${field} is required`,\r\n\r\n // Email\r\n EMAIL_INVALID: 'Please enter a valid email address',\r\n EMAIL_REQUIRED: 'Email is required',\r\n\r\n // Password\r\n PASSWORD_REQUIRED: 'Password is required',\r\n PASSWORD_MIN_LENGTH: (length: number) => `Password must be at least ${length} characters`,\r\n PASSWORD_WEAK: 'Password is too weak',\r\n PASSWORD_MEDIUM: 'Password must contain uppercase, lowercase, and number',\r\n PASSWORD_STRONG: 'Password must contain uppercase, lowercase, number, and special character',\r\n PASSWORD_MISMATCH: 'Passwords do not match',\r\n\r\n // Name\r\n NAME_REQUIRED: 'Name is required',\r\n FIRST_NAME_REQUIRED: 'First name is required',\r\n LAST_NAME_REQUIRED: 'Last name is required',\r\n NAME_MIN_LENGTH: (length: number) => `Name must be at least ${length} characters`,\r\n NAME_MAX_LENGTH: (length: number) => `Name must be at most ${length} characters`,\r\n\r\n // Phone\r\n PHONE_INVALID: 'Please enter a valid phone number',\r\n PHONE_REQUIRED: 'Phone number is required',\r\n\r\n // URL\r\n URL_INVALID: 'Please enter a valid URL',\r\n\r\n // Username\r\n USERNAME_INVALID: 'Username can only contain letters, numbers, underscores, and hyphens',\r\n USERNAME_MIN_LENGTH: 'Username must be at least 3 characters',\r\n USERNAME_MAX_LENGTH: 'Username must be at most 30 characters',\r\n USERNAME_TAKEN: 'This username is already taken',\r\n\r\n // General\r\n MIN_LENGTH: (field: string, length: number) => `${field} must be at least ${length} characters`,\r\n MAX_LENGTH: (field: string, length: number) => `${field} must be at most ${length} characters`,\r\n MIN_VALUE: (field: string, value: number) => `${field} must be at least ${value}`,\r\n MAX_VALUE: (field: string, value: number) => `${field} must be at most ${value}`,\r\n INVALID_FORMAT: 'Invalid format',\r\n TERMS_REQUIRED: 'You must accept the terms and conditions',\r\n} as const;\r\n\r\n// ==========================================\r\n// COMMON VALIDATION RULES (for schema builders)\r\n// ==========================================\r\n\r\nexport const VALIDATION_RULES = {\r\n email: {\r\n pattern: VALIDATION_PATTERNS.EMAIL,\r\n message: VALIDATION_MESSAGES.EMAIL_INVALID,\r\n },\r\n password: {\r\n minLength: 8,\r\n pattern: VALIDATION_PATTERNS.PASSWORD_MEDIUM,\r\n message: VALIDATION_MESSAGES.PASSWORD_MEDIUM,\r\n },\r\n passwordStrong: {\r\n minLength: 8,\r\n pattern: VALIDATION_PATTERNS.PASSWORD_STRONG,\r\n message: VALIDATION_MESSAGES.PASSWORD_STRONG,\r\n },\r\n name: {\r\n minLength: 2,\r\n maxLength: 50,\r\n },\r\n username: {\r\n minLength: 3,\r\n maxLength: 30,\r\n pattern: VALIDATION_PATTERNS.USERNAME,\r\n message: VALIDATION_MESSAGES.USERNAME_INVALID,\r\n },\r\n phone: {\r\n pattern: VALIDATION_PATTERNS.PHONE_INTERNATIONAL,\r\n message: VALIDATION_MESSAGES.PHONE_INVALID,\r\n },\r\n url: {\r\n pattern: VALIDATION_PATTERNS.URL,\r\n message: VALIDATION_MESSAGES.URL_INVALID,\r\n },\r\n} as const;\r\n\r\nexport default {\r\n VALIDATION_PATTERNS,\r\n VALIDATION_MESSAGES,\r\n VALIDATION_RULES,\r\n isValidEmail,\r\n isValidPassword,\r\n isValidPhone,\r\n isValidUrl,\r\n isValidUsername,\r\n isValidSlug,\r\n};\r\n","export * from './countries';\r\nexport * from './phone-codes';\r\nexport * from './currencies';\r\nexport * from './timezones';\r\nexport * from './regex';\r\n\r\n// Logos - keeping for backward compatibility (legacy exports)\r\nexport type { LogoVariants, Logo, CompanyBrand } from './logos';\r\nexport {\r\n brands as legacyBrands,\r\n getBrand,\r\n getBrandByDomain as getLegacyBrandByDomain,\r\n getLogo as getLegacyLogo,\r\n getAllBrands as getLegacyAllBrands,\r\n getAllBrandKeys,\r\n} from './logos';\r\n\r\n// Brand Identity - new comprehensive brand config\r\nexport type {\r\n LogoSet,\r\n BrandColors,\r\n SocialLinks,\r\n ContactInfo,\r\n SEOConfig,\r\n BrandIdentity,\r\n AppConfig,\r\n} from './brand-identity';\r\n\r\nexport {\r\n BRANDS,\r\n APPS,\r\n createAppConfig,\r\n getBrandById,\r\n getBrandByDomain,\r\n getAllBrands,\r\n getAllBrandIds,\r\n getLogo,\r\n getThemedLogo,\r\n getAppConfigByDomain,\r\n detectCurrentBrand,\r\n} from './brand-identity';\r\n\r\n// Re-export default arrays for convenience\r\nexport { default as countries } from './countries';\r\nexport { default as phoneCodes } from './phone-codes';\r\nexport { default as currencies } from './currencies';\r\nexport { default as timezones } from './timezones';\r\nexport { default as REGEX } from './regex';\r\nexport { default as brands } from './logos';\r\n","/**\r\n * Country with nested cities data\r\n */\r\nexport interface City {\r\n name: string;\r\n stateCode?: string;\r\n}\r\n\r\nexport interface State {\r\n name: string;\r\n code: string;\r\n cities: City[];\r\n}\r\n\r\nexport interface Country {\r\n name: string;\r\n code: string; // ISO 3166-1 alpha-2\r\n code3: string; // ISO 3166-1 alpha-3\r\n flag?: string; // Emoji flag (auto-generated if not provided)\r\n phoneCode: string;\r\n currency: string;\r\n currencySymbol: string;\r\n continent: string;\r\n capital: string;\r\n timezone: string;\r\n states: State[];\r\n}\r\n\r\n/**\r\n * Convert country code to emoji flag\r\n * @param countryCode - ISO 3166-1 alpha-2 country code\r\n * @returns Emoji flag string\r\n */\r\nexport const codeToFlag = (countryCode: string): string => {\r\n const codePoints = countryCode\r\n .toUpperCase()\r\n .split('')\r\n .map((char) => 127397 + char.charCodeAt(0));\r\n return String.fromCodePoint(...codePoints);\r\n};\r\n\r\nexport const countries: Country[] = [\r\n {\r\n name: 'Afghanistan',\r\n code: 'AF',\r\n code3: 'AFG',\r\n flag: '🇦🇫',\r\n phoneCode: '+93',\r\n currency: 'AFN',\r\n currencySymbol: '؋',\r\n continent: 'Asia',\r\n capital: 'Kabul',\r\n timezone: 'Asia/Kabul',\r\n states: [\r\n { name: 'Kabul', code: 'KBL', cities: [{ name: 'Kabul' }] },\r\n { name: 'Kandahar', code: 'KDH', cities: [{ name: 'Kandahar' }] },\r\n { name: 'Herat', code: 'HER', cities: [{ name: 'Herat' }] },\r\n ],\r\n },\r\n {\r\n name: 'Albania',\r\n code: 'AL',\r\n code3: 'ALB',\r\n flag: '🇦🇱',\r\n phoneCode: '+355',\r\n currency: 'ALL',\r\n currencySymbol: 'L',\r\n continent: 'Europe',\r\n capital: 'Tirana',\r\n timezone: 'Europe/Tirane',\r\n states: [\r\n { name: 'Tirana', code: 'TR', cities: [{ name: 'Tirana' }] },\r\n { name: 'Durrës', code: 'DR', cities: [{ name: 'Durrës' }] },\r\n ],\r\n },\r\n {\r\n name: 'Algeria',\r\n code: 'DZ',\r\n code3: 'DZA',\r\n flag: '🇩🇿',\r\n phoneCode: '+213',\r\n currency: 'DZD',\r\n currencySymbol: 'د.ج',\r\n continent: 'Africa',\r\n capital: 'Algiers',\r\n timezone: 'Africa/Algiers',\r\n states: [\r\n { name: 'Algiers', code: 'ALG', cities: [{ name: 'Algiers' }] },\r\n { name: 'Oran', code: 'ORA', cities: [{ name: 'Oran' }] },\r\n ],\r\n },\r\n {\r\n name: 'Argentina',\r\n code: 'AR',\r\n code3: 'ARG',\r\n flag: '🇦🇷',\r\n phoneCode: '+54',\r\n currency: 'ARS',\r\n currencySymbol: '$',\r\n continent: 'South America',\r\n capital: 'Buenos Aires',\r\n timezone: 'America/Argentina/Buenos_Aires',\r\n states: [\r\n { name: 'Buenos Aires', code: 'BA', cities: [{ name: 'Buenos Aires' }, { name: 'La Plata' }] },\r\n { name: 'Córdoba', code: 'CO', cities: [{ name: 'Córdoba' }] },\r\n { name: 'Santa Fe', code: 'SF', cities: [{ name: 'Rosario' }, { name: 'Santa Fe' }] },\r\n ],\r\n },\r\n {\r\n name: 'Australia',\r\n code: 'AU',\r\n code3: 'AUS',\r\n flag: '🇦🇺',\r\n phoneCode: '+61',\r\n currency: 'AUD',\r\n currencySymbol: '$',\r\n continent: 'Oceania',\r\n capital: 'Canberra',\r\n timezone: 'Australia/Sydney',\r\n states: [\r\n { name: 'New South Wales', code: 'NSW', cities: [{ name: 'Sydney' }, { name: 'Newcastle' }, { name: 'Wollongong' }] },\r\n { name: 'Victoria', code: 'VIC', cities: [{ name: 'Melbourne' }, { name: 'Geelong' }] },\r\n { name: 'Queensland', code: 'QLD', cities: [{ name: 'Brisbane' }, { name: 'Gold Coast' }, { name: 'Cairns' }] },\r\n { name: 'Western Australia', code: 'WA', cities: [{ name: 'Perth' }, { name: 'Fremantle' }] },\r\n { name: 'South Australia', code: 'SA', cities: [{ name: 'Adelaide' }] },\r\n { name: 'Tasmania', code: 'TAS', cities: [{ name: 'Hobart' }, { name: 'Launceston' }] },\r\n { name: 'Australian Capital Territory', code: 'ACT', cities: [{ name: 'Canberra' }] },\r\n { name: 'Northern Territory', code: 'NT', cities: [{ name: 'Darwin' }] },\r\n ],\r\n },\r\n {\r\n name: 'Austria',\r\n code: 'AT',\r\n code3: 'AUT',\r\n flag: '🇦🇹',\r\n phoneCode: '+43',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Vienna',\r\n timezone: 'Europe/Vienna',\r\n states: [\r\n { name: 'Vienna', code: 'VIE', cities: [{ name: 'Vienna' }] },\r\n { name: 'Salzburg', code: 'SBG', cities: [{ name: 'Salzburg' }] },\r\n { name: 'Tyrol', code: 'TYR', cities: [{ name: 'Innsbruck' }] },\r\n ],\r\n },\r\n {\r\n name: 'Bangladesh',\r\n code: 'BD',\r\n code3: 'BGD',\r\n flag: '🇧🇩',\r\n phoneCode: '+880',\r\n currency: 'BDT',\r\n currencySymbol: '৳',\r\n continent: 'Asia',\r\n capital: 'Dhaka',\r\n timezone: 'Asia/Dhaka',\r\n states: [\r\n { name: 'Dhaka', code: 'DHA', cities: [{ name: 'Dhaka' }, { name: 'Gazipur' }, { name: 'Narayanganj' }] },\r\n { name: 'Chittagong', code: 'CTG', cities: [{ name: 'Chittagong' }, { name: \"Cox's Bazar\" }] },\r\n { name: 'Khulna', code: 'KHL', cities: [{ name: 'Khulna' }] },\r\n { name: 'Rajshahi', code: 'RAJ', cities: [{ name: 'Rajshahi' }] },\r\n { name: 'Sylhet', code: 'SYL', cities: [{ name: 'Sylhet' }] },\r\n ],\r\n },\r\n {\r\n name: 'Belgium',\r\n code: 'BE',\r\n code3: 'BEL',\r\n flag: '🇧🇪',\r\n phoneCode: '+32',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Brussels',\r\n timezone: 'Europe/Brussels',\r\n states: [\r\n { name: 'Brussels', code: 'BRU', cities: [{ name: 'Brussels' }] },\r\n { name: 'Flanders', code: 'FLA', cities: [{ name: 'Antwerp' }, { name: 'Ghent' }, { name: 'Bruges' }] },\r\n { name: 'Wallonia', code: 'WAL', cities: [{ name: 'Liège' }, { name: 'Charleroi' }] },\r\n ],\r\n },\r\n {\r\n name: 'Brazil',\r\n code: 'BR',\r\n code3: 'BRA',\r\n flag: '🇧🇷',\r\n phoneCode: '+55',\r\n currency: 'BRL',\r\n currencySymbol: 'R$',\r\n continent: 'South America',\r\n capital: 'Brasília',\r\n timezone: 'America/Sao_Paulo',\r\n states: [\r\n { name: 'São Paulo', code: 'SP', cities: [{ name: 'São Paulo' }, { name: 'Campinas' }, { name: 'Santos' }] },\r\n { name: 'Rio de Janeiro', code: 'RJ', cities: [{ name: 'Rio de Janeiro' }, { name: 'Niterói' }] },\r\n { name: 'Minas Gerais', code: 'MG', cities: [{ name: 'Belo Horizonte' }, { name: 'Uberlândia' }] },\r\n { name: 'Bahia', code: 'BA', cities: [{ name: 'Salvador' }] },\r\n { name: 'Paraná', code: 'PR', cities: [{ name: 'Curitiba' }] },\r\n { name: 'Rio Grande do Sul', code: 'RS', cities: [{ name: 'Porto Alegre' }] },\r\n { name: 'Federal District', code: 'DF', cities: [{ name: 'Brasília' }] },\r\n ],\r\n },\r\n {\r\n name: 'Canada',\r\n code: 'CA',\r\n code3: 'CAN',\r\n flag: '🇨🇦',\r\n phoneCode: '+1',\r\n currency: 'CAD',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Ottawa',\r\n timezone: 'America/Toronto',\r\n states: [\r\n { name: 'Ontario', code: 'ON', cities: [{ name: 'Toronto' }, { name: 'Ottawa' }, { name: 'Mississauga' }, { name: 'Hamilton' }] },\r\n { name: 'Quebec', code: 'QC', cities: [{ name: 'Montreal' }, { name: 'Quebec City' }, { name: 'Laval' }] },\r\n { name: 'British Columbia', code: 'BC', cities: [{ name: 'Vancouver' }, { name: 'Victoria' }, { name: 'Surrey' }] },\r\n { name: 'Alberta', code: 'AB', cities: [{ name: 'Calgary' }, { name: 'Edmonton' }] },\r\n { name: 'Manitoba', code: 'MB', cities: [{ name: 'Winnipeg' }] },\r\n { name: 'Saskatchewan', code: 'SK', cities: [{ name: 'Saskatoon' }, { name: 'Regina' }] },\r\n { name: 'Nova Scotia', code: 'NS', cities: [{ name: 'Halifax' }] },\r\n { name: 'New Brunswick', code: 'NB', cities: [{ name: 'Moncton' }, { name: 'Saint John' }] },\r\n ],\r\n },\r\n {\r\n name: 'China',\r\n code: 'CN',\r\n code3: 'CHN',\r\n phoneCode: '+86',\r\n currency: 'CNY',\r\n currencySymbol: '¥',\r\n continent: 'Asia',\r\n capital: 'Beijing',\r\n timezone: 'Asia/Shanghai',\r\n states: [\r\n { name: 'Beijing', code: 'BJ', cities: [{ name: 'Beijing' }] },\r\n { name: 'Shanghai', code: 'SH', cities: [{ name: 'Shanghai' }] },\r\n { name: 'Guangdong', code: 'GD', cities: [{ name: 'Guangzhou' }, { name: 'Shenzhen' }, { name: 'Dongguan' }] },\r\n { name: 'Jiangsu', code: 'JS', cities: [{ name: 'Nanjing' }, { name: 'Suzhou' }, { name: 'Wuxi' }] },\r\n { name: 'Zhejiang', code: 'ZJ', cities: [{ name: 'Hangzhou' }, { name: 'Ningbo' }] },\r\n { name: 'Sichuan', code: 'SC', cities: [{ name: 'Chengdu' }, { name: 'Chongqing' }] },\r\n { name: 'Hubei', code: 'HB', cities: [{ name: 'Wuhan' }] },\r\n ],\r\n },\r\n {\r\n name: 'Denmark',\r\n code: 'DK',\r\n code3: 'DNK',\r\n phoneCode: '+45',\r\n currency: 'DKK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Copenhagen',\r\n timezone: 'Europe/Copenhagen',\r\n states: [\r\n { name: 'Capital Region', code: 'HO', cities: [{ name: 'Copenhagen' }] },\r\n { name: 'Central Denmark', code: 'MJ', cities: [{ name: 'Aarhus' }] },\r\n { name: 'Southern Denmark', code: 'SD', cities: [{ name: 'Odense' }] },\r\n ],\r\n },\r\n {\r\n name: 'Egypt',\r\n code: 'EG',\r\n code3: 'EGY',\r\n phoneCode: '+20',\r\n currency: 'EGP',\r\n currencySymbol: '£',\r\n continent: 'Africa',\r\n capital: 'Cairo',\r\n timezone: 'Africa/Cairo',\r\n states: [\r\n { name: 'Cairo', code: 'CAI', cities: [{ name: 'Cairo' }, { name: 'Giza' }] },\r\n { name: 'Alexandria', code: 'ALX', cities: [{ name: 'Alexandria' }] },\r\n { name: 'Luxor', code: 'LXR', cities: [{ name: 'Luxor' }] },\r\n ],\r\n },\r\n {\r\n name: 'Finland',\r\n code: 'FI',\r\n code3: 'FIN',\r\n phoneCode: '+358',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Helsinki',\r\n timezone: 'Europe/Helsinki',\r\n states: [\r\n { name: 'Uusimaa', code: 'UUS', cities: [{ name: 'Helsinki' }, { name: 'Espoo' }, { name: 'Vantaa' }] },\r\n { name: 'Pirkanmaa', code: 'PIR', cities: [{ name: 'Tampere' }] },\r\n { name: 'Southwest Finland', code: 'VAR', cities: [{ name: 'Turku' }] },\r\n ],\r\n },\r\n {\r\n name: 'France',\r\n code: 'FR',\r\n code3: 'FRA',\r\n phoneCode: '+33',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Paris',\r\n timezone: 'Europe/Paris',\r\n states: [\r\n { name: 'Île-de-France', code: 'IDF', cities: [{ name: 'Paris' }, { name: 'Versailles' }, { name: 'Boulogne-Billancourt' }] },\r\n { name: 'Provence-Alpes-Côte d\\'Azur', code: 'PAC', cities: [{ name: 'Marseille' }, { name: 'Nice' }, { name: 'Cannes' }] },\r\n { name: 'Auvergne-Rhône-Alpes', code: 'ARA', cities: [{ name: 'Lyon' }, { name: 'Grenoble' }] },\r\n { name: 'Nouvelle-Aquitaine', code: 'NAQ', cities: [{ name: 'Bordeaux' }] },\r\n { name: 'Occitanie', code: 'OCC', cities: [{ name: 'Toulouse' }, { name: 'Montpellier' }] },\r\n ],\r\n },\r\n {\r\n name: 'Germany',\r\n code: 'DE',\r\n code3: 'DEU',\r\n phoneCode: '+49',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Berlin',\r\n timezone: 'Europe/Berlin',\r\n states: [\r\n { name: 'Berlin', code: 'BE', cities: [{ name: 'Berlin' }] },\r\n { name: 'Bavaria', code: 'BY', cities: [{ name: 'Munich' }, { name: 'Nuremberg' }, { name: 'Augsburg' }] },\r\n { name: 'North Rhine-Westphalia', code: 'NW', cities: [{ name: 'Cologne' }, { name: 'Düsseldorf' }, { name: 'Dortmund' }, { name: 'Essen' }] },\r\n { name: 'Baden-Württemberg', code: 'BW', cities: [{ name: 'Stuttgart' }, { name: 'Mannheim' }, { name: 'Karlsruhe' }] },\r\n { name: 'Hesse', code: 'HE', cities: [{ name: 'Frankfurt' }, { name: 'Wiesbaden' }] },\r\n { name: 'Hamburg', code: 'HH', cities: [{ name: 'Hamburg' }] },\r\n { name: 'Saxony', code: 'SN', cities: [{ name: 'Dresden' }, { name: 'Leipzig' }] },\r\n ],\r\n },\r\n {\r\n name: 'Greece',\r\n code: 'GR',\r\n code3: 'GRC',\r\n phoneCode: '+30',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Athens',\r\n timezone: 'Europe/Athens',\r\n states: [\r\n { name: 'Attica', code: 'AT', cities: [{ name: 'Athens' }, { name: 'Piraeus' }] },\r\n { name: 'Central Macedonia', code: 'CM', cities: [{ name: 'Thessaloniki' }] },\r\n { name: 'Crete', code: 'CR', cities: [{ name: 'Heraklion' }, { name: 'Chania' }] },\r\n ],\r\n },\r\n {\r\n name: 'Hong Kong',\r\n code: 'HK',\r\n code3: 'HKG',\r\n phoneCode: '+852',\r\n currency: 'HKD',\r\n currencySymbol: '$',\r\n continent: 'Asia',\r\n capital: 'Hong Kong',\r\n timezone: 'Asia/Hong_Kong',\r\n states: [\r\n { name: 'Hong Kong Island', code: 'HKI', cities: [{ name: 'Central' }, { name: 'Wan Chai' }] },\r\n { name: 'Kowloon', code: 'KLN', cities: [{ name: 'Tsim Sha Tsui' }, { name: 'Mong Kok' }] },\r\n { name: 'New Territories', code: 'NT', cities: [{ name: 'Sha Tin' }, { name: 'Tsuen Wan' }] },\r\n ],\r\n },\r\n {\r\n name: 'India',\r\n code: 'IN',\r\n code3: 'IND',\r\n phoneCode: '+91',\r\n currency: 'INR',\r\n currencySymbol: '₹',\r\n continent: 'Asia',\r\n capital: 'New Delhi',\r\n timezone: 'Asia/Kolkata',\r\n states: [\r\n { name: 'Delhi', code: 'DL', cities: [{ name: 'New Delhi' }, { name: 'Delhi' }] },\r\n { name: 'Maharashtra', code: 'MH', cities: [{ name: 'Mumbai' }, { name: 'Pune' }, { name: 'Nagpur' }, { name: 'Nashik' }] },\r\n { name: 'Karnataka', code: 'KA', cities: [{ name: 'Bangalore' }, { name: 'Mysore' }, { name: 'Mangalore' }] },\r\n { name: 'Tamil Nadu', code: 'TN', cities: [{ name: 'Chennai' }, { name: 'Coimbatore' }, { name: 'Madurai' }] },\r\n { name: 'Telangana', code: 'TG', cities: [{ name: 'Hyderabad' }, { name: 'Warangal' }] },\r\n { name: 'West Bengal', code: 'WB', cities: [{ name: 'Kolkata' }, { name: 'Howrah' }] },\r\n { name: 'Gujarat', code: 'GJ', cities: [{ name: 'Ahmedabad' }, { name: 'Surat' }, { name: 'Vadodara' }] },\r\n { name: 'Rajasthan', code: 'RJ', cities: [{ name: 'Jaipur' }, { name: 'Jodhpur' }, { name: 'Udaipur' }] },\r\n { name: 'Uttar Pradesh', code: 'UP', cities: [{ name: 'Lucknow' }, { name: 'Kanpur' }, { name: 'Varanasi' }, { name: 'Agra' }, { name: 'Noida' }] },\r\n { name: 'Kerala', code: 'KL', cities: [{ name: 'Thiruvananthapuram' }, { name: 'Kochi' }, { name: 'Kozhikode' }] },\r\n { name: 'Punjab', code: 'PB', cities: [{ name: 'Chandigarh' }, { name: 'Ludhiana' }, { name: 'Amritsar' }] },\r\n { name: 'Haryana', code: 'HR', cities: [{ name: 'Gurugram' }, { name: 'Faridabad' }] },\r\n { name: 'Madhya Pradesh', code: 'MP', cities: [{ name: 'Bhopal' }, { name: 'Indore' }] },\r\n { name: 'Bihar', code: 'BR', cities: [{ name: 'Patna' }] },\r\n { name: 'Odisha', code: 'OR', cities: [{ name: 'Bhubaneswar' }] },\r\n { name: 'Goa', code: 'GA', cities: [{ name: 'Panaji' }, { name: 'Margao' }] },\r\n ],\r\n },\r\n {\r\n name: 'Indonesia',\r\n code: 'ID',\r\n code3: 'IDN',\r\n phoneCode: '+62',\r\n currency: 'IDR',\r\n currencySymbol: 'Rp',\r\n continent: 'Asia',\r\n capital: 'Jakarta',\r\n timezone: 'Asia/Jakarta',\r\n states: [\r\n { name: 'Jakarta', code: 'JK', cities: [{ name: 'Jakarta' }] },\r\n { name: 'West Java', code: 'JB', cities: [{ name: 'Bandung' }, { name: 'Bekasi' }] },\r\n { name: 'East Java', code: 'JI', cities: [{ name: 'Surabaya' }, { name: 'Malang' }] },\r\n { name: 'Bali', code: 'BA', cities: [{ name: 'Denpasar' }, { name: 'Ubud' }] },\r\n ],\r\n },\r\n {\r\n name: 'Ireland',\r\n code: 'IE',\r\n code3: 'IRL',\r\n phoneCode: '+353',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Dublin',\r\n timezone: 'Europe/Dublin',\r\n states: [\r\n { name: 'Leinster', code: 'L', cities: [{ name: 'Dublin' }] },\r\n { name: 'Munster', code: 'M', cities: [{ name: 'Cork' }, { name: 'Limerick' }] },\r\n { name: 'Connacht', code: 'C', cities: [{ name: 'Galway' }] },\r\n ],\r\n },\r\n {\r\n name: 'Israel',\r\n code: 'IL',\r\n code3: 'ISR',\r\n phoneCode: '+972',\r\n currency: 'ILS',\r\n currencySymbol: '₪',\r\n continent: 'Asia',\r\n capital: 'Jerusalem',\r\n timezone: 'Asia/Jerusalem',\r\n states: [\r\n { name: 'Tel Aviv', code: 'TA', cities: [{ name: 'Tel Aviv' }] },\r\n { name: 'Jerusalem', code: 'JM', cities: [{ name: 'Jerusalem' }] },\r\n { name: 'Haifa', code: 'HA', cities: [{ name: 'Haifa' }] },\r\n ],\r\n },\r\n {\r\n name: 'Italy',\r\n code: 'IT',\r\n code3: 'ITA',\r\n phoneCode: '+39',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Rome',\r\n timezone: 'Europe/Rome',\r\n states: [\r\n { name: 'Lazio', code: 'LAZ', cities: [{ name: 'Rome' }] },\r\n { name: 'Lombardy', code: 'LOM', cities: [{ name: 'Milan' }, { name: 'Bergamo' }] },\r\n { name: 'Veneto', code: 'VEN', cities: [{ name: 'Venice' }, { name: 'Verona' }, { name: 'Padua' }] },\r\n { name: 'Tuscany', code: 'TOS', cities: [{ name: 'Florence' }, { name: 'Pisa' }, { name: 'Siena' }] },\r\n { name: 'Campania', code: 'CAM', cities: [{ name: 'Naples' }] },\r\n { name: 'Sicily', code: 'SIC', cities: [{ name: 'Palermo' }, { name: 'Catania' }] },\r\n ],\r\n },\r\n {\r\n name: 'Japan',\r\n code: 'JP',\r\n code3: 'JPN',\r\n phoneCode: '+81',\r\n currency: 'JPY',\r\n currencySymbol: '¥',\r\n continent: 'Asia',\r\n capital: 'Tokyo',\r\n timezone: 'Asia/Tokyo',\r\n states: [\r\n { name: 'Tokyo', code: 'TK', cities: [{ name: 'Tokyo' }, { name: 'Shibuya' }, { name: 'Shinjuku' }] },\r\n { name: 'Osaka', code: 'OS', cities: [{ name: 'Osaka' }] },\r\n { name: 'Kyoto', code: 'KY', cities: [{ name: 'Kyoto' }] },\r\n { name: 'Kanagawa', code: 'KN', cities: [{ name: 'Yokohama' }, { name: 'Kawasaki' }] },\r\n { name: 'Aichi', code: 'AI', cities: [{ name: 'Nagoya' }] },\r\n { name: 'Hokkaido', code: 'HK', cities: [{ name: 'Sapporo' }] },\r\n { name: 'Fukuoka', code: 'FK', cities: [{ name: 'Fukuoka' }] },\r\n { name: 'Hiroshima', code: 'HS', cities: [{ name: 'Hiroshima' }] },\r\n ],\r\n },\r\n {\r\n name: 'Malaysia',\r\n code: 'MY',\r\n code3: 'MYS',\r\n phoneCode: '+60',\r\n currency: 'MYR',\r\n currencySymbol: 'RM',\r\n continent: 'Asia',\r\n capital: 'Kuala Lumpur',\r\n timezone: 'Asia/Kuala_Lumpur',\r\n states: [\r\n { name: 'Kuala Lumpur', code: 'KL', cities: [{ name: 'Kuala Lumpur' }] },\r\n { name: 'Selangor', code: 'SL', cities: [{ name: 'Shah Alam' }, { name: 'Petaling Jaya' }] },\r\n { name: 'Penang', code: 'PG', cities: [{ name: 'George Town' }] },\r\n { name: 'Johor', code: 'JH', cities: [{ name: 'Johor Bahru' }] },\r\n ],\r\n },\r\n {\r\n name: 'Mexico',\r\n code: 'MX',\r\n code3: 'MEX',\r\n phoneCode: '+52',\r\n currency: 'MXN',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Mexico City',\r\n timezone: 'America/Mexico_City',\r\n states: [\r\n { name: 'Mexico City', code: 'CMX', cities: [{ name: 'Mexico City' }] },\r\n { name: 'Jalisco', code: 'JAL', cities: [{ name: 'Guadalajara' }] },\r\n { name: 'Nuevo León', code: 'NLE', cities: [{ name: 'Monterrey' }] },\r\n { name: 'Quintana Roo', code: 'ROO', cities: [{ name: 'Cancún' }, { name: 'Playa del Carmen' }] },\r\n ],\r\n },\r\n {\r\n name: 'Netherlands',\r\n code: 'NL',\r\n code3: 'NLD',\r\n phoneCode: '+31',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Amsterdam',\r\n timezone: 'Europe/Amsterdam',\r\n states: [\r\n { name: 'North Holland', code: 'NH', cities: [{ name: 'Amsterdam' }, { name: 'Haarlem' }] },\r\n { name: 'South Holland', code: 'ZH', cities: [{ name: 'Rotterdam' }, { name: 'The Hague' }, { name: 'Leiden' }] },\r\n { name: 'Utrecht', code: 'UT', cities: [{ name: 'Utrecht' }] },\r\n { name: 'North Brabant', code: 'NB', cities: [{ name: 'Eindhoven' }, { name: 'Tilburg' }] },\r\n ],\r\n },\r\n {\r\n name: 'New Zealand',\r\n code: 'NZ',\r\n code3: 'NZL',\r\n phoneCode: '+64',\r\n currency: 'NZD',\r\n currencySymbol: '$',\r\n continent: 'Oceania',\r\n capital: 'Wellington',\r\n timezone: 'Pacific/Auckland',\r\n states: [\r\n { name: 'Auckland', code: 'AUK', cities: [{ name: 'Auckland' }] },\r\n { name: 'Wellington', code: 'WGN', cities: [{ name: 'Wellington' }] },\r\n { name: 'Canterbury', code: 'CAN', cities: [{ name: 'Christchurch' }] },\r\n { name: 'Otago', code: 'OTA', cities: [{ name: 'Dunedin' }, { name: 'Queenstown' }] },\r\n ],\r\n },\r\n {\r\n name: 'Nigeria',\r\n code: 'NG',\r\n code3: 'NGA',\r\n phoneCode: '+234',\r\n currency: 'NGN',\r\n currencySymbol: '₦',\r\n continent: 'Africa',\r\n capital: 'Abuja',\r\n timezone: 'Africa/Lagos',\r\n states: [\r\n { name: 'Lagos', code: 'LA', cities: [{ name: 'Lagos' }, { name: 'Ikeja' }] },\r\n { name: 'FCT', code: 'FC', cities: [{ name: 'Abuja' }] },\r\n { name: 'Kano', code: 'KN', cities: [{ name: 'Kano' }] },\r\n { name: 'Rivers', code: 'RI', cities: [{ name: 'Port Harcourt' }] },\r\n ],\r\n },\r\n {\r\n name: 'Norway',\r\n code: 'NO',\r\n code3: 'NOR',\r\n phoneCode: '+47',\r\n currency: 'NOK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Oslo',\r\n timezone: 'Europe/Oslo',\r\n states: [\r\n { name: 'Oslo', code: 'OSL', cities: [{ name: 'Oslo' }] },\r\n { name: 'Vestland', code: 'VES', cities: [{ name: 'Bergen' }] },\r\n { name: 'Trøndelag', code: 'TRO', cities: [{ name: 'Trondheim' }] },\r\n ],\r\n },\r\n {\r\n name: 'Pakistan',\r\n code: 'PK',\r\n code3: 'PAK',\r\n phoneCode: '+92',\r\n currency: 'PKR',\r\n currencySymbol: '₨',\r\n continent: 'Asia',\r\n capital: 'Islamabad',\r\n timezone: 'Asia/Karachi',\r\n states: [\r\n { name: 'Punjab', code: 'PB', cities: [{ name: 'Lahore' }, { name: 'Faisalabad' }, { name: 'Rawalpindi' }] },\r\n { name: 'Sindh', code: 'SD', cities: [{ name: 'Karachi' }, { name: 'Hyderabad' }] },\r\n { name: 'Islamabad', code: 'IS', cities: [{ name: 'Islamabad' }] },\r\n { name: 'Khyber Pakhtunkhwa', code: 'KP', cities: [{ name: 'Peshawar' }] },\r\n ],\r\n },\r\n {\r\n name: 'Philippines',\r\n code: 'PH',\r\n code3: 'PHL',\r\n phoneCode: '+63',\r\n currency: 'PHP',\r\n currencySymbol: '₱',\r\n continent: 'Asia',\r\n capital: 'Manila',\r\n timezone: 'Asia/Manila',\r\n states: [\r\n { name: 'Metro Manila', code: 'NCR', cities: [{ name: 'Manila' }, { name: 'Quezon City' }, { name: 'Makati' }] },\r\n { name: 'Cebu', code: 'CEB', cities: [{ name: 'Cebu City' }] },\r\n { name: 'Davao', code: 'DAV', cities: [{ name: 'Davao City' }] },\r\n ],\r\n },\r\n {\r\n name: 'Poland',\r\n code: 'PL',\r\n code3: 'POL',\r\n phoneCode: '+48',\r\n currency: 'PLN',\r\n currencySymbol: 'zł',\r\n continent: 'Europe',\r\n capital: 'Warsaw',\r\n timezone: 'Europe/Warsaw',\r\n states: [\r\n { name: 'Masovian', code: 'MZ', cities: [{ name: 'Warsaw' }] },\r\n { name: 'Lesser Poland', code: 'MA', cities: [{ name: 'Krakow' }] },\r\n { name: 'Greater Poland', code: 'WP', cities: [{ name: 'Poznań' }] },\r\n { name: 'Lower Silesian', code: 'DS', cities: [{ name: 'Wrocław' }] },\r\n ],\r\n },\r\n {\r\n name: 'Portugal',\r\n code: 'PT',\r\n code3: 'PRT',\r\n phoneCode: '+351',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Lisbon',\r\n timezone: 'Europe/Lisbon',\r\n states: [\r\n { name: 'Lisbon', code: 'LIS', cities: [{ name: 'Lisbon' }] },\r\n { name: 'Porto', code: 'POR', cities: [{ name: 'Porto' }] },\r\n { name: 'Faro', code: 'FAR', cities: [{ name: 'Faro' }] },\r\n ],\r\n },\r\n {\r\n name: 'Qatar',\r\n code: 'QA',\r\n code3: 'QAT',\r\n phoneCode: '+974',\r\n currency: 'QAR',\r\n currencySymbol: 'ر.ق',\r\n continent: 'Asia',\r\n capital: 'Doha',\r\n timezone: 'Asia/Qatar',\r\n states: [\r\n { name: 'Doha', code: 'DA', cities: [{ name: 'Doha' }] },\r\n { name: 'Al Wakrah', code: 'WA', cities: [{ name: 'Al Wakrah' }] },\r\n ],\r\n },\r\n {\r\n name: 'Russia',\r\n code: 'RU',\r\n code3: 'RUS',\r\n phoneCode: '+7',\r\n currency: 'RUB',\r\n currencySymbol: '₽',\r\n continent: 'Europe',\r\n capital: 'Moscow',\r\n timezone: 'Europe/Moscow',\r\n states: [\r\n { name: 'Moscow', code: 'MOW', cities: [{ name: 'Moscow' }] },\r\n { name: 'Saint Petersburg', code: 'SPE', cities: [{ name: 'Saint Petersburg' }] },\r\n { name: 'Novosibirsk Oblast', code: 'NVS', cities: [{ name: 'Novosibirsk' }] },\r\n { name: 'Sverdlovsk Oblast', code: 'SVE', cities: [{ name: 'Yekaterinburg' }] },\r\n ],\r\n },\r\n {\r\n name: 'Saudi Arabia',\r\n code: 'SA',\r\n code3: 'SAU',\r\n phoneCode: '+966',\r\n currency: 'SAR',\r\n currencySymbol: 'ر.س',\r\n continent: 'Asia',\r\n capital: 'Riyadh',\r\n timezone: 'Asia/Riyadh',\r\n states: [\r\n { name: 'Riyadh', code: 'RIY', cities: [{ name: 'Riyadh' }] },\r\n { name: 'Makkah', code: 'MKK', cities: [{ name: 'Jeddah' }, { name: 'Mecca' }] },\r\n { name: 'Eastern Province', code: 'ASH', cities: [{ name: 'Dammam' }, { name: 'Dhahran' }] },\r\n ],\r\n },\r\n {\r\n name: 'Singapore',\r\n code: 'SG',\r\n code3: 'SGP',\r\n phoneCode: '+65',\r\n currency: 'SGD',\r\n currencySymbol: '$',\r\n continent: 'Asia',\r\n capital: 'Singapore',\r\n timezone: 'Asia/Singapore',\r\n states: [\r\n { name: 'Central Region', code: 'CEN', cities: [{ name: 'Singapore' }] },\r\n ],\r\n },\r\n {\r\n name: 'South Africa',\r\n code: 'ZA',\r\n code3: 'ZAF',\r\n phoneCode: '+27',\r\n currency: 'ZAR',\r\n currencySymbol: 'R',\r\n continent: 'Africa',\r\n capital: 'Pretoria',\r\n timezone: 'Africa/Johannesburg',\r\n states: [\r\n { name: 'Gauteng', code: 'GP', cities: [{ name: 'Johannesburg' }, { name: 'Pretoria' }] },\r\n { name: 'Western Cape', code: 'WC', cities: [{ name: 'Cape Town' }] },\r\n { name: 'KwaZulu-Natal', code: 'KZN', cities: [{ name: 'Durban' }] },\r\n ],\r\n },\r\n {\r\n name: 'South Korea',\r\n code: 'KR',\r\n code3: 'KOR',\r\n phoneCode: '+82',\r\n currency: 'KRW',\r\n currencySymbol: '₩',\r\n continent: 'Asia',\r\n capital: 'Seoul',\r\n timezone: 'Asia/Seoul',\r\n states: [\r\n { name: 'Seoul', code: 'SEO', cities: [{ name: 'Seoul' }] },\r\n { name: 'Busan', code: 'BUS', cities: [{ name: 'Busan' }] },\r\n { name: 'Incheon', code: 'INC', cities: [{ name: 'Incheon' }] },\r\n { name: 'Gyeonggi', code: 'GGI', cities: [{ name: 'Suwon' }, { name: 'Seongnam' }] },\r\n ],\r\n },\r\n {\r\n name: 'Spain',\r\n code: 'ES',\r\n code3: 'ESP',\r\n phoneCode: '+34',\r\n currency: 'EUR',\r\n currencySymbol: '€',\r\n continent: 'Europe',\r\n capital: 'Madrid',\r\n timezone: 'Europe/Madrid',\r\n states: [\r\n { name: 'Madrid', code: 'MD', cities: [{ name: 'Madrid' }] },\r\n { name: 'Catalonia', code: 'CT', cities: [{ name: 'Barcelona' }] },\r\n { name: 'Andalusia', code: 'AN', cities: [{ name: 'Seville' }, { name: 'Malaga' }, { name: 'Granada' }] },\r\n { name: 'Valencia', code: 'VC', cities: [{ name: 'Valencia' }] },\r\n { name: 'Basque Country', code: 'PV', cities: [{ name: 'Bilbao' }, { name: 'San Sebastián' }] },\r\n ],\r\n },\r\n {\r\n name: 'Sri Lanka',\r\n code: 'LK',\r\n code3: 'LKA',\r\n phoneCode: '+94',\r\n currency: 'LKR',\r\n currencySymbol: '₨',\r\n continent: 'Asia',\r\n capital: 'Colombo',\r\n timezone: 'Asia/Colombo',\r\n states: [\r\n { name: 'Western', code: 'WP', cities: [{ name: 'Colombo' }] },\r\n { name: 'Central', code: 'CP', cities: [{ name: 'Kandy' }] },\r\n { name: 'Southern', code: 'SP', cities: [{ name: 'Galle' }] },\r\n ],\r\n },\r\n {\r\n name: 'Sweden',\r\n code: 'SE',\r\n code3: 'SWE',\r\n phoneCode: '+46',\r\n currency: 'SEK',\r\n currencySymbol: 'kr',\r\n continent: 'Europe',\r\n capital: 'Stockholm',\r\n timezone: 'Europe/Stockholm',\r\n states: [\r\n { name: 'Stockholm', code: 'AB', cities: [{ name: 'Stockholm' }] },\r\n { name: 'Västra Götaland', code: 'VG', cities: [{ name: 'Gothenburg' }] },\r\n { name: 'Skåne', code: 'SK', cities: [{ name: 'Malmö' }] },\r\n ],\r\n },\r\n {\r\n name: 'Switzerland',\r\n code: 'CH',\r\n code3: 'CHE',\r\n phoneCode: '+41',\r\n currency: 'CHF',\r\n currencySymbol: 'CHF',\r\n continent: 'Europe',\r\n capital: 'Bern',\r\n timezone: 'Europe/Zurich',\r\n states: [\r\n { name: 'Zürich', code: 'ZH', cities: [{ name: 'Zürich' }] },\r\n { name: 'Geneva', code: 'GE', cities: [{ name: 'Geneva' }] },\r\n { name: 'Bern', code: 'BE', cities: [{ name: 'Bern' }] },\r\n { name: 'Basel-Stadt', code: 'BS', cities: [{ name: 'Basel' }] },\r\n ],\r\n },\r\n {\r\n name: 'Taiwan',\r\n code: 'TW',\r\n code3: 'TWN',\r\n phoneCode: '+886',\r\n currency: 'TWD',\r\n currencySymbol: 'NT$',\r\n continent: 'Asia',\r\n capital: 'Taipei',\r\n timezone: 'Asia/Taipei',\r\n states: [\r\n { name: 'Taipei', code: 'TPE', cities: [{ name: 'Taipei' }, { name: 'New Taipei' }] },\r\n { name: 'Taichung', code: 'TXG', cities: [{ name: 'Taichung' }] },\r\n { name: 'Kaohsiung', code: 'KHH', cities: [{ name: 'Kaohsiung' }] },\r\n ],\r\n },\r\n {\r\n name: 'Thailand',\r\n code: 'TH',\r\n code3: 'THA',\r\n phoneCode: '+66',\r\n currency: 'THB',\r\n currencySymbol: '฿',\r\n continent: 'Asia',\r\n capital: 'Bangkok',\r\n timezone: 'Asia/Bangkok',\r\n states: [\r\n { name: 'Bangkok', code: 'BKK', cities: [{ name: 'Bangkok' }] },\r\n { name: 'Chiang Mai', code: 'CNX', cities: [{ name: 'Chiang Mai' }] },\r\n { name: 'Phuket', code: 'PKT', cities: [{ name: 'Phuket' }] },\r\n { name: 'Chonburi', code: 'CBI', cities: [{ name: 'Pattaya' }] },\r\n ],\r\n },\r\n {\r\n name: 'Turkey',\r\n code: 'TR',\r\n code3: 'TUR',\r\n phoneCode: '+90',\r\n currency: 'TRY',\r\n currencySymbol: '₺',\r\n continent: 'Asia',\r\n capital: 'Ankara',\r\n timezone: 'Europe/Istanbul',\r\n states: [\r\n { name: 'Istanbul', code: 'IST', cities: [{ name: 'Istanbul' }] },\r\n { name: 'Ankara', code: 'ANK', cities: [{ name: 'Ankara' }] },\r\n { name: 'Izmir', code: 'IZM', cities: [{ name: 'Izmir' }] },\r\n { name: 'Antalya', code: 'ANT', cities: [{ name: 'Antalya' }] },\r\n ],\r\n },\r\n {\r\n name: 'Ukraine',\r\n code: 'UA',\r\n code3: 'UKR',\r\n phoneCode: '+380',\r\n currency: 'UAH',\r\n currencySymbol: '₴',\r\n continent: 'Europe',\r\n capital: 'Kyiv',\r\n timezone: 'Europe/Kyiv',\r\n states: [\r\n { name: 'Kyiv', code: 'KY', cities: [{ name: 'Kyiv' }] },\r\n { name: 'Kharkiv', code: 'KH', cities: [{ name: 'Kharkiv' }] },\r\n { name: 'Odessa', code: 'OD', cities: [{ name: 'Odessa' }] },\r\n { name: 'Lviv', code: 'LV', cities: [{ name: 'Lviv' }] },\r\n ],\r\n },\r\n {\r\n name: 'United Arab Emirates',\r\n code: 'AE',\r\n code3: 'ARE',\r\n phoneCode: '+971',\r\n currency: 'AED',\r\n currencySymbol: 'د.إ',\r\n continent: 'Asia',\r\n capital: 'Abu Dhabi',\r\n timezone: 'Asia/Dubai',\r\n states: [\r\n { name: 'Dubai', code: 'DU', cities: [{ name: 'Dubai' }] },\r\n { name: 'Abu Dhabi', code: 'AZ', cities: [{ name: 'Abu Dhabi' }] },\r\n { name: 'Sharjah', code: 'SH', cities: [{ name: 'Sharjah' }] },\r\n { name: 'Ajman', code: 'AJ', cities: [{ name: 'Ajman' }] },\r\n ],\r\n },\r\n {\r\n name: 'United Kingdom',\r\n code: 'GB',\r\n code3: 'GBR',\r\n phoneCode: '+44',\r\n currency: 'GBP',\r\n currencySymbol: '£',\r\n continent: 'Europe',\r\n capital: 'London',\r\n timezone: 'Europe/London',\r\n states: [\r\n { name: 'England', code: 'ENG', cities: [{ name: 'London' }, { name: 'Manchester' }, { name: 'Birmingham' }, { name: 'Liverpool' }, { name: 'Leeds' }, { name: 'Bristol' }] },\r\n { name: 'Scotland', code: 'SCT', cities: [{ name: 'Edinburgh' }, { name: 'Glasgow' }] },\r\n { name: 'Wales', code: 'WLS', cities: [{ name: 'Cardiff' }, { name: 'Swansea' }] },\r\n { name: 'Northern Ireland', code: 'NIR', cities: [{ name: 'Belfast' }] },\r\n ],\r\n },\r\n {\r\n name: 'United States',\r\n code: 'US',\r\n code3: 'USA',\r\n phoneCode: '+1',\r\n currency: 'USD',\r\n currencySymbol: '$',\r\n continent: 'North America',\r\n capital: 'Washington, D.C.',\r\n timezone: 'America/New_York',\r\n states: [\r\n { name: 'California', code: 'CA', cities: [{ name: 'Los Angeles' }, { name: 'San Francisco' }, { name: 'San Diego' }, { name: 'San Jose' }, { name: 'Sacramento' }] },\r\n { name: 'New York', code: 'NY', cities: [{ name: 'New York City' }, { name: 'Buffalo' }, { name: 'Albany' }] },\r\n { name: 'Texas', code: 'TX', cities: [{ name: 'Houston' }, { name: 'Dallas' }, { name: 'Austin' }, { name: 'San Antonio' }] },\r\n { name: 'Florida', code: 'FL', cities: [{ name: 'Miami' }, { name: 'Orlando' }, { name: 'Tampa' }, { name: 'Jacksonville' }] },\r\n { name: 'Illinois', code: 'IL', cities: [{ name: 'Chicago' }] },\r\n { name: 'Pennsylvania', code: 'PA', cities: [{ name: 'Philadelphia' }, { name: 'Pittsburgh' }] },\r\n { name: 'Ohio', code: 'OH', cities: [{ name: 'Columbus' }, { name: 'Cleveland' }, { name: 'Cincinnati' }] },\r\n { name: 'Georgia', code: 'GA', cities: [{ name: 'Atlanta' }] },\r\n { name: 'North Carolina', code: 'NC', cities: [{ name: 'Charlotte' }, { name: 'Raleigh' }] },\r\n { name: 'Michigan', code: 'MI', cities: [{ name: 'Detroit' }] },\r\n { name: 'Washington', code: 'WA', cities: [{ name: 'Seattle' }] },\r\n { name: 'Arizona', code: 'AZ', cities: [{ name: 'Phoenix' }, { name: 'Tucson' }] },\r\n { name: 'Massachusetts', code: 'MA', cities: [{ name: 'Boston' }, { name: 'Cambridge' }] },\r\n { name: 'Colorado', code: 'CO', cities: [{ name: 'Denver' }, { name: 'Colorado Springs' }] },\r\n { name: 'Nevada', code: 'NV', cities: [{ name: 'Las Vegas' }, { name: 'Reno' }] },\r\n { name: 'Oregon', code: 'OR', cities: [{ name: 'Portland' }] },\r\n { name: 'District of Columbia', code: 'DC', cities: [{ name: 'Washington' }] },\r\n ],\r\n },\r\n {\r\n name: 'Vietnam',\r\n code: 'VN',\r\n code3: 'VNM',\r\n phoneCode: '+84',\r\n currency: 'VND',\r\n currencySymbol: '₫',\r\n continent: 'Asia',\r\n capital: 'Hanoi',\r\n timezone: 'Asia/Ho_Chi_Minh',\r\n states: [\r\n { name: 'Ho Chi Minh City', code: 'HCM', cities: [{ name: 'Ho Chi Minh City' }] },\r\n { name: 'Hanoi', code: 'HAN', cities: [{ name: 'Hanoi' }] },\r\n { name: 'Da Nang', code: 'DAN', cities: [{ name: 'Da Nang' }] },\r\n ],\r\n },\r\n];\r\n\r\n/**\r\n * Country with flag guaranteed (auto-generated from code if not set)\r\n */\r\nexport interface CountryWithFlag extends Omit<Country, 'flag'> {\r\n flag: string;\r\n}\r\n\r\n// Helper functions\r\nexport const getCountryByCode = (code: string): Country | undefined => {\r\n return countries.find((c) => c.code === code || c.code3 === code);\r\n};\r\n\r\nexport const getCountryByName = (name: string): Country | undefined => {\r\n return countries.find((c) => c.name.toLowerCase() === name.toLowerCase());\r\n};\r\n\r\nexport const getStatesByCountry = (countryCode: string): State[] => {\r\n const country = getCountryByCode(countryCode);\r\n return country?.states || [];\r\n};\r\n\r\nexport const getCitiesByState = (countryCode: string, stateCode: string): City[] => {\r\n const states = getStatesByCountry(countryCode);\r\n const state = states.find((s) => s.code === stateCode);\r\n return state?.cities || [];\r\n};\r\n\r\nexport const getAllCities = (countryCode: string): City[] => {\r\n const states = getStatesByCountry(countryCode);\r\n return states.flatMap((s) => s.cities);\r\n};\r\n\r\nexport const getCountriesByContinent = (continent: string): Country[] => {\r\n return countries.filter((c) => c.continent.toLowerCase() === continent.toLowerCase());\r\n};\r\n\r\nexport const searchCountries = (query: string): Country[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return countries.filter(\r\n (c) =>\r\n c.name.toLowerCase().includes(lowerQuery) ||\r\n c.code.toLowerCase() === lowerQuery ||\r\n c.code3.toLowerCase() === lowerQuery\r\n );\r\n};\r\n\r\n/**\r\n * Get flag emoji for a country code\r\n * @param countryCode - ISO 3166-1 alpha-2 country code\r\n * @returns Emoji flag or the flag from country data\r\n */\r\nexport const getFlag = (countryCode: string): string => {\r\n const country = getCountryByCode(countryCode);\r\n return country?.flag || codeToFlag(countryCode);\r\n};\r\n\r\n/**\r\n * Get country with auto-generated flag if not set\r\n */\r\nexport const getCountryWithFlag = (code: string): CountryWithFlag | undefined => {\r\n const country = getCountryByCode(code);\r\n if (!country) return undefined;\r\n return { ...country, flag: country.flag || codeToFlag(country.code) };\r\n};\r\n\r\n/**\r\n * Get all countries with flags (auto-generate if missing)\r\n */\r\nexport const getAllCountriesWithFlags = (): CountryWithFlag[] => {\r\n return countries.map((c) => ({\r\n ...c,\r\n flag: c.flag || codeToFlag(c.code),\r\n }));\r\n};\r\n\r\nexport default countries;\r\n","/**\r\n * Phone codes by country\r\n */\r\nexport interface PhoneCode {\r\n country: string;\r\n code: string;\r\n phoneCode: string;\r\n flag: string;\r\n}\r\n\r\nexport const phoneCodes: PhoneCode[] = [\r\n { country: 'Afghanistan', code: 'AF', phoneCode: '+93', flag: '🇦🇫' },\r\n { country: 'Albania', code: 'AL', phoneCode: '+355', flag: '🇦🇱' },\r\n { country: 'Algeria', code: 'DZ', phoneCode: '+213', flag: '🇩🇿' },\r\n { country: 'American Samoa', code: 'AS', phoneCode: '+1684', flag: '🇦🇸' },\r\n { country: 'Andorra', code: 'AD', phoneCode: '+376', flag: '🇦🇩' },\r\n { country: 'Angola', code: 'AO', phoneCode: '+244', flag: '🇦🇴' },\r\n { country: 'Anguilla', code: 'AI', phoneCode: '+1264', flag: '🇦🇮' },\r\n { country: 'Argentina', code: 'AR', phoneCode: '+54', flag: '🇦🇷' },\r\n { country: 'Armenia', code: 'AM', phoneCode: '+374', flag: '🇦🇲' },\r\n { country: 'Australia', code: 'AU', phoneCode: '+61', flag: '🇦🇺' },\r\n { country: 'Austria', code: 'AT', phoneCode: '+43', flag: '🇦🇹' },\r\n { country: 'Azerbaijan', code: 'AZ', phoneCode: '+994', flag: '🇦🇿' },\r\n { country: 'Bahamas', code: 'BS', phoneCode: '+1242', flag: '🇧🇸' },\r\n { country: 'Bahrain', code: 'BH', phoneCode: '+973', flag: '🇧🇭' },\r\n { country: 'Bangladesh', code: 'BD', phoneCode: '+880', flag: '🇧🇩' },\r\n { country: 'Barbados', code: 'BB', phoneCode: '+1246', flag: '🇧🇧' },\r\n { country: 'Belarus', code: 'BY', phoneCode: '+375', flag: '🇧🇾' },\r\n { country: 'Belgium', code: 'BE', phoneCode: '+32', flag: '🇧🇪' },\r\n { country: 'Belize', code: 'BZ', phoneCode: '+501', flag: '🇧🇿' },\r\n { country: 'Benin', code: 'BJ', phoneCode: '+229', flag: '🇧🇯' },\r\n { country: 'Bermuda', code: 'BM', phoneCode: '+1441', flag: '🇧🇲' },\r\n { country: 'Bhutan', code: 'BT', phoneCode: '+975', flag: '🇧🇹' },\r\n { country: 'Bolivia', code: 'BO', phoneCode: '+591', flag: '🇧🇴' },\r\n { country: 'Bosnia and Herzegovina', code: 'BA', phoneCode: '+387', flag: '🇧🇦' },\r\n { country: 'Botswana', code: 'BW', phoneCode: '+267', flag: '🇧🇼' },\r\n { country: 'Brazil', code: 'BR', phoneCode: '+55', flag: '🇧🇷' },\r\n { country: 'Brunei', code: 'BN', phoneCode: '+673', flag: '🇧🇳' },\r\n { country: 'Bulgaria', code: 'BG', phoneCode: '+359', flag: '🇧🇬' },\r\n { country: 'Burkina Faso', code: 'BF', phoneCode: '+226', flag: '🇧🇫' },\r\n { country: 'Burundi', code: 'BI', phoneCode: '+257', flag: '🇧🇮' },\r\n { country: 'Cambodia', code: 'KH', phoneCode: '+855', flag: '🇰🇭' },\r\n { country: 'Cameroon', code: 'CM', phoneCode: '+237', flag: '🇨🇲' },\r\n { country: 'Canada', code: 'CA', phoneCode: '+1', flag: '🇨🇦' },\r\n { country: 'Cape Verde', code: 'CV', phoneCode: '+238', flag: '🇨🇻' },\r\n { country: 'Cayman Islands', code: 'KY', phoneCode: '+1345', flag: '🇰🇾' },\r\n { country: 'Central African Republic', code: 'CF', phoneCode: '+236', flag: '🇨🇫' },\r\n { country: 'Chad', code: 'TD', phoneCode: '+235', flag: '🇹🇩' },\r\n { country: 'Chile', code: 'CL', phoneCode: '+56', flag: '🇨🇱' },\r\n { country: 'China', code: 'CN', phoneCode: '+86', flag: '🇨🇳' },\r\n { country: 'Colombia', code: 'CO', phoneCode: '+57', flag: '🇨🇴' },\r\n { country: 'Comoros', code: 'KM', phoneCode: '+269', flag: '🇰🇲' },\r\n { country: 'Congo', code: 'CG', phoneCode: '+242', flag: '🇨🇬' },\r\n { country: 'Costa Rica', code: 'CR', phoneCode: '+506', flag: '🇨🇷' },\r\n { country: 'Croatia', code: 'HR', phoneCode: '+385', flag: '🇭🇷' },\r\n { country: 'Cuba', code: 'CU', phoneCode: '+53', flag: '🇨🇺' },\r\n { country: 'Cyprus', code: 'CY', phoneCode: '+357', flag: '🇨🇾' },\r\n { country: 'Czech Republic', code: 'CZ', phoneCode: '+420', flag: '🇨🇿' },\r\n { country: 'Denmark', code: 'DK', phoneCode: '+45', flag: '🇩🇰' },\r\n { country: 'Djibouti', code: 'DJ', phoneCode: '+253', flag: '🇩🇯' },\r\n { country: 'Dominica', code: 'DM', phoneCode: '+1767', flag: '🇩🇲' },\r\n { country: 'Dominican Republic', code: 'DO', phoneCode: '+1809', flag: '🇩🇴' },\r\n { country: 'Ecuador', code: 'EC', phoneCode: '+593', flag: '🇪🇨' },\r\n { country: 'Egypt', code: 'EG', phoneCode: '+20', flag: '🇪🇬' },\r\n { country: 'El Salvador', code: 'SV', phoneCode: '+503', flag: '🇸🇻' },\r\n { country: 'Equatorial Guinea', code: 'GQ', phoneCode: '+240', flag: '🇬🇶' },\r\n { country: 'Eritrea', code: 'ER', phoneCode: '+291', flag: '🇪🇷' },\r\n { country: 'Estonia', code: 'EE', phoneCode: '+372', flag: '🇪🇪' },\r\n { country: 'Ethiopia', code: 'ET', phoneCode: '+251', flag: '🇪🇹' },\r\n { country: 'Fiji', code: 'FJ', phoneCode: '+679', flag: '🇫🇯' },\r\n { country: 'Finland', code: 'FI', phoneCode: '+358', flag: '🇫🇮' },\r\n { country: 'France', code: 'FR', phoneCode: '+33', flag: '🇫🇷' },\r\n { country: 'Gabon', code: 'GA', phoneCode: '+241', flag: '🇬🇦' },\r\n { country: 'Gambia', code: 'GM', phoneCode: '+220', flag: '🇬🇲' },\r\n { country: 'Georgia', code: 'GE', phoneCode: '+995', flag: '🇬🇪' },\r\n { country: 'Germany', code: 'DE', phoneCode: '+49', flag: '🇩🇪' },\r\n { country: 'Ghana', code: 'GH', phoneCode: '+233', flag: '🇬🇭' },\r\n { country: 'Greece', code: 'GR', phoneCode: '+30', flag: '🇬🇷' },\r\n { country: 'Greenland', code: 'GL', phoneCode: '+299', flag: '🇬🇱' },\r\n { country: 'Grenada', code: 'GD', phoneCode: '+1473', flag: '🇬🇩' },\r\n { country: 'Guam', code: 'GU', phoneCode: '+1671', flag: '🇬🇺' },\r\n { country: 'Guatemala', code: 'GT', phoneCode: '+502', flag: '🇬🇹' },\r\n { country: 'Guinea', code: 'GN', phoneCode: '+224', flag: '🇬🇳' },\r\n { country: 'Guyana', code: 'GY', phoneCode: '+592', flag: '🇬🇾' },\r\n { country: 'Haiti', code: 'HT', phoneCode: '+509', flag: '🇭🇹' },\r\n { country: 'Honduras', code: 'HN', phoneCode: '+504', flag: '🇭🇳' },\r\n { country: 'Hong Kong', code: 'HK', phoneCode: '+852', flag: '🇭🇰' },\r\n { country: 'Hungary', code: 'HU', phoneCode: '+36', flag: '🇭🇺' },\r\n { country: 'Iceland', code: 'IS', phoneCode: '+354', flag: '🇮🇸' },\r\n { country: 'India', code: 'IN', phoneCode: '+91', flag: '🇮🇳' },\r\n { country: 'Indonesia', code: 'ID', phoneCode: '+62', flag: '🇮🇩' },\r\n { country: 'Iran', code: 'IR', phoneCode: '+98', flag: '🇮🇷' },\r\n { country: 'Iraq', code: 'IQ', phoneCode: '+964', flag: '🇮🇶' },\r\n { country: 'Ireland', code: 'IE', phoneCode: '+353', flag: '🇮🇪' },\r\n { country: 'Israel', code: 'IL', phoneCode: '+972', flag: '🇮🇱' },\r\n { country: 'Italy', code: 'IT', phoneCode: '+39', flag: '🇮🇹' },\r\n { country: 'Jamaica', code: 'JM', phoneCode: '+1876', flag: '🇯🇲' },\r\n { country: 'Japan', code: 'JP', phoneCode: '+81', flag: '🇯🇵' },\r\n { country: 'Jordan', code: 'JO', phoneCode: '+962', flag: '🇯🇴' },\r\n { country: 'Kazakhstan', code: 'KZ', phoneCode: '+7', flag: '🇰🇿' },\r\n { country: 'Kenya', code: 'KE', phoneCode: '+254', flag: '🇰🇪' },\r\n { country: 'Kiribati', code: 'KI', phoneCode: '+686', flag: '🇰🇮' },\r\n { country: 'Kuwait', code: 'KW', phoneCode: '+965', flag: '🇰🇼' },\r\n { country: 'Kyrgyzstan', code: 'KG', phoneCode: '+996', flag: '🇰🇬' },\r\n { country: 'Laos', code: 'LA', phoneCode: '+856', flag: '🇱🇦' },\r\n { country: 'Latvia', code: 'LV', phoneCode: '+371', flag: '🇱🇻' },\r\n { country: 'Lebanon', code: 'LB', phoneCode: '+961', flag: '🇱🇧' },\r\n { country: 'Lesotho', code: 'LS', phoneCode: '+266', flag: '🇱🇸' },\r\n { country: 'Liberia', code: 'LR', phoneCode: '+231', flag: '🇱🇷' },\r\n { country: 'Libya', code: 'LY', phoneCode: '+218', flag: '🇱🇾' },\r\n { country: 'Liechtenstein', code: 'LI', phoneCode: '+423', flag: '🇱🇮' },\r\n { country: 'Lithuania', code: 'LT', phoneCode: '+370', flag: '🇱🇹' },\r\n { country: 'Luxembourg', code: 'LU', phoneCode: '+352', flag: '🇱🇺' },\r\n { country: 'Macau', code: 'MO', phoneCode: '+853', flag: '🇲🇴' },\r\n { country: 'Madagascar', code: 'MG', phoneCode: '+261', flag: '🇲🇬' },\r\n { country: 'Malawi', code: 'MW', phoneCode: '+265', flag: '🇲🇼' },\r\n { country: 'Malaysia', code: 'MY', phoneCode: '+60', flag: '🇲🇾' },\r\n { country: 'Maldives', code: 'MV', phoneCode: '+960', flag: '🇲🇻' },\r\n { country: 'Mali', code: 'ML', phoneCode: '+223', flag: '🇲🇱' },\r\n { country: 'Malta', code: 'MT', phoneCode: '+356', flag: '🇲🇹' },\r\n { country: 'Mauritania', code: 'MR', phoneCode: '+222', flag: '🇲🇷' },\r\n { country: 'Mauritius', code: 'MU', phoneCode: '+230', flag: '🇲🇺' },\r\n { country: 'Mexico', code: 'MX', phoneCode: '+52', flag: '🇲🇽' },\r\n { country: 'Moldova', code: 'MD', phoneCode: '+373', flag: '🇲🇩' },\r\n { country: 'Monaco', code: 'MC', phoneCode: '+377', flag: '🇲🇨' },\r\n { country: 'Mongolia', code: 'MN', phoneCode: '+976', flag: '🇲🇳' },\r\n { country: 'Montenegro', code: 'ME', phoneCode: '+382', flag: '🇲🇪' },\r\n { country: 'Morocco', code: 'MA', phoneCode: '+212', flag: '🇲🇦' },\r\n { country: 'Mozambique', code: 'MZ', phoneCode: '+258', flag: '🇲🇿' },\r\n { country: 'Myanmar', code: 'MM', phoneCode: '+95', flag: '🇲🇲' },\r\n { country: 'Namibia', code: 'NA', phoneCode: '+264', flag: '🇳🇦' },\r\n { country: 'Nauru', code: 'NR', phoneCode: '+674', flag: '🇳🇷' },\r\n { country: 'Nepal', code: 'NP', phoneCode: '+977', flag: '🇳🇵' },\r\n { country: 'Netherlands', code: 'NL', phoneCode: '+31', flag: '🇳🇱' },\r\n { country: 'New Zealand', code: 'NZ', phoneCode: '+64', flag: '🇳🇿' },\r\n { country: 'Nicaragua', code: 'NI', phoneCode: '+505', flag: '🇳🇮' },\r\n { country: 'Niger', code: 'NE', phoneCode: '+227', flag: '🇳🇪' },\r\n { country: 'Nigeria', code: 'NG', phoneCode: '+234', flag: '🇳🇬' },\r\n { country: 'North Korea', code: 'KP', phoneCode: '+850', flag: '🇰🇵' },\r\n { country: 'North Macedonia', code: 'MK', phoneCode: '+389', flag: '🇲🇰' },\r\n { country: 'Norway', code: 'NO', phoneCode: '+47', flag: '🇳🇴' },\r\n { country: 'Oman', code: 'OM', phoneCode: '+968', flag: '🇴🇲' },\r\n { country: 'Pakistan', code: 'PK', phoneCode: '+92', flag: '🇵🇰' },\r\n { country: 'Palau', code: 'PW', phoneCode: '+680', flag: '🇵🇼' },\r\n { country: 'Palestine', code: 'PS', phoneCode: '+970', flag: '🇵🇸' },\r\n { country: 'Panama', code: 'PA', phoneCode: '+507', flag: '🇵🇦' },\r\n { country: 'Papua New Guinea', code: 'PG', phoneCode: '+675', flag: '🇵🇬' },\r\n { country: 'Paraguay', code: 'PY', phoneCode: '+595', flag: '🇵🇾' },\r\n { country: 'Peru', code: 'PE', phoneCode: '+51', flag: '🇵🇪' },\r\n { country: 'Philippines', code: 'PH', phoneCode: '+63', flag: '🇵🇭' },\r\n { country: 'Poland', code: 'PL', phoneCode: '+48', flag: '🇵🇱' },\r\n { country: 'Portugal', code: 'PT', phoneCode: '+351', flag: '🇵🇹' },\r\n { country: 'Puerto Rico', code: 'PR', phoneCode: '+1787', flag: '🇵🇷' },\r\n { country: 'Qatar', code: 'QA', phoneCode: '+974', flag: '🇶🇦' },\r\n { country: 'Romania', code: 'RO', phoneCode: '+40', flag: '🇷🇴' },\r\n { country: 'Russia', code: 'RU', phoneCode: '+7', flag: '🇷🇺' },\r\n { country: 'Rwanda', code: 'RW', phoneCode: '+250', flag: '🇷🇼' },\r\n { country: 'Saudi Arabia', code: 'SA', phoneCode: '+966', flag: '🇸🇦' },\r\n { country: 'Senegal', code: 'SN', phoneCode: '+221', flag: '🇸🇳' },\r\n { country: 'Serbia', code: 'RS', phoneCode: '+381', flag: '🇷🇸' },\r\n { country: 'Seychelles', code: 'SC', phoneCode: '+248', flag: '🇸🇨' },\r\n { country: 'Sierra Leone', code: 'SL', phoneCode: '+232', flag: '🇸🇱' },\r\n { country: 'Singapore', code: 'SG', phoneCode: '+65', flag: '🇸🇬' },\r\n { country: 'Slovakia', code: 'SK', phoneCode: '+421', flag: '🇸🇰' },\r\n { country: 'Slovenia', code: 'SI', phoneCode: '+386', flag: '🇸🇮' },\r\n { country: 'Solomon Islands', code: 'SB', phoneCode: '+677', flag: '🇸🇧' },\r\n { country: 'Somalia', code: 'SO', phoneCode: '+252', flag: '🇸🇴' },\r\n { country: 'South Africa', code: 'ZA', phoneCode: '+27', flag: '🇿🇦' },\r\n { country: 'South Korea', code: 'KR', phoneCode: '+82', flag: '🇰🇷' },\r\n { country: 'South Sudan', code: 'SS', phoneCode: '+211', flag: '🇸🇸' },\r\n { country: 'Spain', code: 'ES', phoneCode: '+34', flag: '🇪🇸' },\r\n { country: 'Sri Lanka', code: 'LK', phoneCode: '+94', flag: '🇱🇰' },\r\n { country: 'Sudan', code: 'SD', phoneCode: '+249', flag: '🇸🇩' },\r\n { country: 'Suriname', code: 'SR', phoneCode: '+597', flag: '🇸🇷' },\r\n { country: 'Sweden', code: 'SE', phoneCode: '+46', flag: '🇸🇪' },\r\n { country: 'Switzerland', code: 'CH', phoneCode: '+41', flag: '🇨🇭' },\r\n { country: 'Syria', code: 'SY', phoneCode: '+963', flag: '🇸🇾' },\r\n { country: 'Taiwan', code: 'TW', phoneCode: '+886', flag: '🇹🇼' },\r\n { country: 'Tajikistan', code: 'TJ', phoneCode: '+992', flag: '🇹🇯' },\r\n { country: 'Tanzania', code: 'TZ', phoneCode: '+255', flag: '🇹🇿' },\r\n { country: 'Thailand', code: 'TH', phoneCode: '+66', flag: '🇹🇭' },\r\n { country: 'Togo', code: 'TG', phoneCode: '+228', flag: '🇹🇬' },\r\n { country: 'Tonga', code: 'TO', phoneCode: '+676', flag: '🇹🇴' },\r\n { country: 'Trinidad and Tobago', code: 'TT', phoneCode: '+1868', flag: '🇹🇹' },\r\n { country: 'Tunisia', code: 'TN', phoneCode: '+216', flag: '🇹🇳' },\r\n { country: 'Turkey', code: 'TR', phoneCode: '+90', flag: '🇹🇷' },\r\n { country: 'Turkmenistan', code: 'TM', phoneCode: '+993', flag: '🇹🇲' },\r\n { country: 'Tuvalu', code: 'TV', phoneCode: '+688', flag: '🇹🇻' },\r\n { country: 'Uganda', code: 'UG', phoneCode: '+256', flag: '🇺🇬' },\r\n { country: 'Ukraine', code: 'UA', phoneCode: '+380', flag: '🇺🇦' },\r\n { country: 'United Arab Emirates', code: 'AE', phoneCode: '+971', flag: '🇦🇪' },\r\n { country: 'United Kingdom', code: 'GB', phoneCode: '+44', flag: '🇬🇧' },\r\n { country: 'United States', code: 'US', phoneCode: '+1', flag: '🇺🇸' },\r\n { country: 'Uruguay', code: 'UY', phoneCode: '+598', flag: '🇺🇾' },\r\n { country: 'Uzbekistan', code: 'UZ', phoneCode: '+998', flag: '🇺🇿' },\r\n { country: 'Vanuatu', code: 'VU', phoneCode: '+678', flag: '🇻🇺' },\r\n { country: 'Vatican City', code: 'VA', phoneCode: '+379', flag: '🇻🇦' },\r\n { country: 'Venezuela', code: 'VE', phoneCode: '+58', flag: '🇻🇪' },\r\n { country: 'Vietnam', code: 'VN', phoneCode: '+84', flag: '🇻🇳' },\r\n { country: 'Yemen', code: 'YE', phoneCode: '+967', flag: '🇾🇪' },\r\n { country: 'Zambia', code: 'ZM', phoneCode: '+260', flag: '🇿🇲' },\r\n { country: 'Zimbabwe', code: 'ZW', phoneCode: '+263', flag: '🇿🇼' },\r\n];\r\n\r\n// Helper functions\r\nexport const getPhoneCodeByCountry = (countryCode: string): PhoneCode | undefined => {\r\n return phoneCodes.find((p) => p.code === countryCode);\r\n};\r\n\r\nexport const searchPhoneCodes = (query: string): PhoneCode[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return phoneCodes.filter(\r\n (p) =>\r\n p.country.toLowerCase().includes(lowerQuery) ||\r\n p.code.toLowerCase() === lowerQuery ||\r\n p.phoneCode.includes(query)\r\n );\r\n};\r\n\r\nexport const getPhoneCodesByPrefix = (prefix: string): PhoneCode[] => {\r\n return phoneCodes.filter((p) => p.phoneCode.startsWith(prefix));\r\n};\r\n\r\nexport default phoneCodes;\r\n","/**\r\n * Currency data with symbols and formatting\r\n */\r\nexport interface Currency {\r\n code: string; // ISO 4217 currency code\r\n name: string;\r\n symbol: string;\r\n symbolNative: string;\r\n decimalDigits: number;\r\n rounding: number;\r\n namePlural: string;\r\n}\r\n\r\nexport const currencies: Currency[] = [\r\n { code: 'AED', name: 'UAE Dirham', symbol: 'AED', symbolNative: 'د.إ', decimalDigits: 2, rounding: 0, namePlural: 'UAE dirhams' },\r\n { code: 'AFN', name: 'Afghan Afghani', symbol: 'Af', symbolNative: '؋', decimalDigits: 0, rounding: 0, namePlural: 'Afghan Afghanis' },\r\n { code: 'ALL', name: 'Albanian Lek', symbol: 'ALL', symbolNative: 'Lek', decimalDigits: 0, rounding: 0, namePlural: 'Albanian lekë' },\r\n { code: 'AMD', name: 'Armenian Dram', symbol: 'AMD', symbolNative: 'դր.', decimalDigits: 0, rounding: 0, namePlural: 'Armenian drams' },\r\n { code: 'ARS', name: 'Argentine Peso', symbol: 'AR$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Argentine pesos' },\r\n { code: 'AUD', name: 'Australian Dollar', symbol: 'AU$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Australian dollars' },\r\n { code: 'AZN', name: 'Azerbaijani Manat', symbol: 'man.', symbolNative: 'ман.', decimalDigits: 2, rounding: 0, namePlural: 'Azerbaijani manats' },\r\n { code: 'BAM', name: 'Bosnia-Herzegovina Convertible Mark', symbol: 'KM', symbolNative: 'KM', decimalDigits: 2, rounding: 0, namePlural: 'Bosnia-Herzegovina convertible marks' },\r\n { code: 'BDT', name: 'Bangladeshi Taka', symbol: 'Tk', symbolNative: '৳', decimalDigits: 2, rounding: 0, namePlural: 'Bangladeshi takas' },\r\n { code: 'BGN', name: 'Bulgarian Lev', symbol: 'BGN', symbolNative: 'лв.', decimalDigits: 2, rounding: 0, namePlural: 'Bulgarian leva' },\r\n { code: 'BHD', name: 'Bahraini Dinar', symbol: 'BD', symbolNative: 'د.ب.', decimalDigits: 3, rounding: 0, namePlural: 'Bahraini dinars' },\r\n { code: 'BIF', name: 'Burundian Franc', symbol: 'FBu', symbolNative: 'FBu', decimalDigits: 0, rounding: 0, namePlural: 'Burundian francs' },\r\n { code: 'BND', name: 'Brunei Dollar', symbol: 'BN$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Brunei dollars' },\r\n { code: 'BOB', name: 'Bolivian Boliviano', symbol: 'Bs', symbolNative: 'Bs', decimalDigits: 2, rounding: 0, namePlural: 'Bolivian bolivianos' },\r\n { code: 'BRL', name: 'Brazilian Real', symbol: 'R$', symbolNative: 'R$', decimalDigits: 2, rounding: 0, namePlural: 'Brazilian reals' },\r\n { code: 'BWP', name: 'Botswanan Pula', symbol: 'BWP', symbolNative: 'P', decimalDigits: 2, rounding: 0, namePlural: 'Botswanan pulas' },\r\n { code: 'BYN', name: 'Belarusian Ruble', symbol: 'Br', symbolNative: 'руб.', decimalDigits: 2, rounding: 0, namePlural: 'Belarusian rubles' },\r\n { code: 'BZD', name: 'Belize Dollar', symbol: 'BZ$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Belize dollars' },\r\n { code: 'CAD', name: 'Canadian Dollar', symbol: 'CA$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Canadian dollars' },\r\n { code: 'CDF', name: 'Congolese Franc', symbol: 'CDF', symbolNative: 'FrCD', decimalDigits: 2, rounding: 0, namePlural: 'Congolese francs' },\r\n { code: 'CHF', name: 'Swiss Franc', symbol: 'CHF', symbolNative: 'CHF', decimalDigits: 2, rounding: 0.05, namePlural: 'Swiss francs' },\r\n { code: 'CLP', name: 'Chilean Peso', symbol: 'CL$', symbolNative: '$', decimalDigits: 0, rounding: 0, namePlural: 'Chilean pesos' },\r\n { code: 'CNY', name: 'Chinese Yuan', symbol: 'CN¥', symbolNative: '¥', decimalDigits: 2, rounding: 0, namePlural: 'Chinese yuan' },\r\n { code: 'COP', name: 'Colombian Peso', symbol: 'CO$', symbolNative: '$', decimalDigits: 0, rounding: 0, namePlural: 'Colombian pesos' },\r\n { code: 'CRC', name: 'Costa Rican Colón', symbol: '₡', symbolNative: '₡', decimalDigits: 0, rounding: 0, namePlural: 'Costa Rican colóns' },\r\n { code: 'CZK', name: 'Czech Koruna', symbol: 'Kč', symbolNative: 'Kč', decimalDigits: 2, rounding: 0, namePlural: 'Czech korunas' },\r\n { code: 'DKK', name: 'Danish Krone', symbol: 'Dkr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Danish kroner' },\r\n { code: 'DOP', name: 'Dominican Peso', symbol: 'RD$', symbolNative: 'RD$', decimalDigits: 2, rounding: 0, namePlural: 'Dominican pesos' },\r\n { code: 'DZD', name: 'Algerian Dinar', symbol: 'DA', symbolNative: 'د.ج.', decimalDigits: 2, rounding: 0, namePlural: 'Algerian dinars' },\r\n { code: 'EGP', name: 'Egyptian Pound', symbol: 'EGP', symbolNative: 'ج.م.', decimalDigits: 2, rounding: 0, namePlural: 'Egyptian pounds' },\r\n { code: 'ETB', name: 'Ethiopian Birr', symbol: 'Br', symbolNative: 'Br', decimalDigits: 2, rounding: 0, namePlural: 'Ethiopian birrs' },\r\n { code: 'EUR', name: 'Euro', symbol: '€', symbolNative: '€', decimalDigits: 2, rounding: 0, namePlural: 'euros' },\r\n { code: 'GBP', name: 'British Pound', symbol: '£', symbolNative: '£', decimalDigits: 2, rounding: 0, namePlural: 'British pounds' },\r\n { code: 'GEL', name: 'Georgian Lari', symbol: 'GEL', symbolNative: 'GEL', decimalDigits: 2, rounding: 0, namePlural: 'Georgian laris' },\r\n { code: 'GHS', name: 'Ghanaian Cedi', symbol: 'GH₵', symbolNative: 'GH₵', decimalDigits: 2, rounding: 0, namePlural: 'Ghanaian cedis' },\r\n { code: 'GNF', name: 'Guinean Franc', symbol: 'FG', symbolNative: 'FG', decimalDigits: 0, rounding: 0, namePlural: 'Guinean francs' },\r\n { code: 'GTQ', name: 'Guatemalan Quetzal', symbol: 'GTQ', symbolNative: 'Q', decimalDigits: 2, rounding: 0, namePlural: 'Guatemalan quetzals' },\r\n { code: 'HKD', name: 'Hong Kong Dollar', symbol: 'HK$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Hong Kong dollars' },\r\n { code: 'HNL', name: 'Honduran Lempira', symbol: 'HNL', symbolNative: 'L', decimalDigits: 2, rounding: 0, namePlural: 'Honduran lempiras' },\r\n { code: 'HRK', name: 'Croatian Kuna', symbol: 'kn', symbolNative: 'kn', decimalDigits: 2, rounding: 0, namePlural: 'Croatian kunas' },\r\n { code: 'HUF', name: 'Hungarian Forint', symbol: 'Ft', symbolNative: 'Ft', decimalDigits: 0, rounding: 0, namePlural: 'Hungarian forints' },\r\n { code: 'IDR', name: 'Indonesian Rupiah', symbol: 'Rp', symbolNative: 'Rp', decimalDigits: 0, rounding: 0, namePlural: 'Indonesian rupiahs' },\r\n { code: 'ILS', name: 'Israeli New Shekel', symbol: '₪', symbolNative: '₪', decimalDigits: 2, rounding: 0, namePlural: 'Israeli new shekels' },\r\n { code: 'INR', name: 'Indian Rupee', symbol: '₹', symbolNative: '₹', decimalDigits: 2, rounding: 0, namePlural: 'Indian rupees' },\r\n { code: 'IQD', name: 'Iraqi Dinar', symbol: 'IQD', symbolNative: 'د.ع.', decimalDigits: 0, rounding: 0, namePlural: 'Iraqi dinars' },\r\n { code: 'IRR', name: 'Iranian Rial', symbol: 'IRR', symbolNative: '﷼', decimalDigits: 0, rounding: 0, namePlural: 'Iranian rials' },\r\n { code: 'ISK', name: 'Icelandic Króna', symbol: 'Ikr', symbolNative: 'kr', decimalDigits: 0, rounding: 0, namePlural: 'Icelandic krónur' },\r\n { code: 'JMD', name: 'Jamaican Dollar', symbol: 'J$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Jamaican dollars' },\r\n { code: 'JOD', name: 'Jordanian Dinar', symbol: 'JD', symbolNative: 'د.أ.', decimalDigits: 3, rounding: 0, namePlural: 'Jordanian dinars' },\r\n { code: 'JPY', name: 'Japanese Yen', symbol: '¥', symbolNative: '¥', decimalDigits: 0, rounding: 0, namePlural: 'Japanese yen' },\r\n { code: 'KES', name: 'Kenyan Shilling', symbol: 'Ksh', symbolNative: 'Ksh', decimalDigits: 2, rounding: 0, namePlural: 'Kenyan shillings' },\r\n { code: 'KHR', name: 'Cambodian Riel', symbol: 'KHR', symbolNative: '៛', decimalDigits: 2, rounding: 0, namePlural: 'Cambodian riels' },\r\n { code: 'KRW', name: 'South Korean Won', symbol: '₩', symbolNative: '₩', decimalDigits: 0, rounding: 0, namePlural: 'South Korean won' },\r\n { code: 'KWD', name: 'Kuwaiti Dinar', symbol: 'KD', symbolNative: 'د.ك.', decimalDigits: 3, rounding: 0, namePlural: 'Kuwaiti dinars' },\r\n { code: 'KZT', name: 'Kazakhstani Tenge', symbol: 'KZT', symbolNative: 'тңг.', decimalDigits: 2, rounding: 0, namePlural: 'Kazakhstani tenges' },\r\n { code: 'LAK', name: 'Lao Kip', symbol: '₭', symbolNative: '₭', decimalDigits: 0, rounding: 0, namePlural: 'Lao kip' },\r\n { code: 'LBP', name: 'Lebanese Pound', symbol: 'LB£', symbolNative: 'ل.ل.', decimalDigits: 0, rounding: 0, namePlural: 'Lebanese pounds' },\r\n { code: 'LKR', name: 'Sri Lankan Rupee', symbol: 'SLRs', symbolNative: 'රු', decimalDigits: 2, rounding: 0, namePlural: 'Sri Lankan rupees' },\r\n { code: 'LYD', name: 'Libyan Dinar', symbol: 'LD', symbolNative: 'د.ل.', decimalDigits: 3, rounding: 0, namePlural: 'Libyan dinars' },\r\n { code: 'MAD', name: 'Moroccan Dirham', symbol: 'MAD', symbolNative: 'د.م.', decimalDigits: 2, rounding: 0, namePlural: 'Moroccan dirhams' },\r\n { code: 'MDL', name: 'Moldovan Leu', symbol: 'MDL', symbolNative: 'MDL', decimalDigits: 2, rounding: 0, namePlural: 'Moldovan lei' },\r\n { code: 'MGA', name: 'Malagasy Ariary', symbol: 'MGA', symbolNative: 'MGA', decimalDigits: 0, rounding: 0, namePlural: 'Malagasy ariaries' },\r\n { code: 'MKD', name: 'Macedonian Denar', symbol: 'MKD', symbolNative: 'MKD', decimalDigits: 2, rounding: 0, namePlural: 'Macedonian denari' },\r\n { code: 'MMK', name: 'Myanmar Kyat', symbol: 'MMK', symbolNative: 'K', decimalDigits: 0, rounding: 0, namePlural: 'Myanmar kyats' },\r\n { code: 'MNT', name: 'Mongolian Tugrik', symbol: '₮', symbolNative: '₮', decimalDigits: 0, rounding: 0, namePlural: 'Mongolian tugriks' },\r\n { code: 'MOP', name: 'Macanese Pataca', symbol: 'MOP$', symbolNative: 'MOP$', decimalDigits: 2, rounding: 0, namePlural: 'Macanese patacas' },\r\n { code: 'MUR', name: 'Mauritian Rupee', symbol: 'MURs', symbolNative: 'MURs', decimalDigits: 0, rounding: 0, namePlural: 'Mauritian rupees' },\r\n { code: 'MXN', name: 'Mexican Peso', symbol: 'MX$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Mexican pesos' },\r\n { code: 'MYR', name: 'Malaysian Ringgit', symbol: 'RM', symbolNative: 'RM', decimalDigits: 2, rounding: 0, namePlural: 'Malaysian ringgits' },\r\n { code: 'MZN', name: 'Mozambican Metical', symbol: 'MTn', symbolNative: 'MTn', decimalDigits: 2, rounding: 0, namePlural: 'Mozambican meticals' },\r\n { code: 'NAD', name: 'Namibian Dollar', symbol: 'N$', symbolNative: 'N$', decimalDigits: 2, rounding: 0, namePlural: 'Namibian dollars' },\r\n { code: 'NGN', name: 'Nigerian Naira', symbol: '₦', symbolNative: '₦', decimalDigits: 2, rounding: 0, namePlural: 'Nigerian nairas' },\r\n { code: 'NIO', name: 'Nicaraguan Córdoba', symbol: 'C$', symbolNative: 'C$', decimalDigits: 2, rounding: 0, namePlural: 'Nicaraguan córdobas' },\r\n { code: 'NOK', name: 'Norwegian Krone', symbol: 'Nkr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Norwegian kroner' },\r\n { code: 'NPR', name: 'Nepalese Rupee', symbol: 'NPRs', symbolNative: 'नेरू', decimalDigits: 2, rounding: 0, namePlural: 'Nepalese rupees' },\r\n { code: 'NZD', name: 'New Zealand Dollar', symbol: 'NZ$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'New Zealand dollars' },\r\n { code: 'OMR', name: 'Omani Rial', symbol: 'OMR', symbolNative: 'ر.ع.', decimalDigits: 3, rounding: 0, namePlural: 'Omani rials' },\r\n { code: 'PAB', name: 'Panamanian Balboa', symbol: 'B/.', symbolNative: 'B/.', decimalDigits: 2, rounding: 0, namePlural: 'Panamanian balboas' },\r\n { code: 'PEN', name: 'Peruvian Sol', symbol: 'S/', symbolNative: 'S/', decimalDigits: 2, rounding: 0, namePlural: 'Peruvian soles' },\r\n { code: 'PHP', name: 'Philippine Peso', symbol: '₱', symbolNative: '₱', decimalDigits: 2, rounding: 0, namePlural: 'Philippine pesos' },\r\n { code: 'PKR', name: 'Pakistani Rupee', symbol: 'PKRs', symbolNative: '₨', decimalDigits: 0, rounding: 0, namePlural: 'Pakistani rupees' },\r\n { code: 'PLN', name: 'Polish Zloty', symbol: 'zł', symbolNative: 'zł', decimalDigits: 2, rounding: 0, namePlural: 'Polish zlotys' },\r\n { code: 'PYG', name: 'Paraguayan Guarani', symbol: '₲', symbolNative: '₲', decimalDigits: 0, rounding: 0, namePlural: 'Paraguayan guaranis' },\r\n { code: 'QAR', name: 'Qatari Rial', symbol: 'QR', symbolNative: 'ر.ق.', decimalDigits: 2, rounding: 0, namePlural: 'Qatari rials' },\r\n { code: 'RON', name: 'Romanian Leu', symbol: 'RON', symbolNative: 'RON', decimalDigits: 2, rounding: 0, namePlural: 'Romanian lei' },\r\n { code: 'RSD', name: 'Serbian Dinar', symbol: 'din.', symbolNative: 'дин.', decimalDigits: 0, rounding: 0, namePlural: 'Serbian dinars' },\r\n { code: 'RUB', name: 'Russian Ruble', symbol: 'RUB', symbolNative: '₽', decimalDigits: 2, rounding: 0, namePlural: 'Russian rubles' },\r\n { code: 'RWF', name: 'Rwandan Franc', symbol: 'RWF', symbolNative: 'FR', decimalDigits: 0, rounding: 0, namePlural: 'Rwandan francs' },\r\n { code: 'SAR', name: 'Saudi Riyal', symbol: 'SR', symbolNative: 'ر.س.', decimalDigits: 2, rounding: 0, namePlural: 'Saudi riyals' },\r\n { code: 'SEK', name: 'Swedish Krona', symbol: 'Skr', symbolNative: 'kr', decimalDigits: 2, rounding: 0, namePlural: 'Swedish kronor' },\r\n { code: 'SGD', name: 'Singapore Dollar', symbol: 'S$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Singapore dollars' },\r\n { code: 'SOS', name: 'Somali Shilling', symbol: 'Ssh', symbolNative: 'Ssh', decimalDigits: 0, rounding: 0, namePlural: 'Somali shillings' },\r\n { code: 'SYP', name: 'Syrian Pound', symbol: 'SY£', symbolNative: 'ل.س.', decimalDigits: 0, rounding: 0, namePlural: 'Syrian pounds' },\r\n { code: 'THB', name: 'Thai Baht', symbol: '฿', symbolNative: '฿', decimalDigits: 2, rounding: 0, namePlural: 'Thai baht' },\r\n { code: 'TND', name: 'Tunisian Dinar', symbol: 'DT', symbolNative: 'د.ت.', decimalDigits: 3, rounding: 0, namePlural: 'Tunisian dinars' },\r\n { code: 'TOP', name: 'Tongan Pa\\'anga', symbol: 'T$', symbolNative: 'T$', decimalDigits: 2, rounding: 0, namePlural: 'Tongan pa\\'anga' },\r\n { code: 'TRY', name: 'Turkish Lira', symbol: 'TL', symbolNative: '₺', decimalDigits: 2, rounding: 0, namePlural: 'Turkish liras' },\r\n { code: 'TTD', name: 'Trinidad & Tobago Dollar', symbol: 'TT$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Trinidad & Tobago dollars' },\r\n { code: 'TWD', name: 'New Taiwan Dollar', symbol: 'NT$', symbolNative: 'NT$', decimalDigits: 2, rounding: 0, namePlural: 'New Taiwan dollars' },\r\n { code: 'TZS', name: 'Tanzanian Shilling', symbol: 'TSh', symbolNative: 'TSh', decimalDigits: 0, rounding: 0, namePlural: 'Tanzanian shillings' },\r\n { code: 'UAH', name: 'Ukrainian Hryvnia', symbol: '₴', symbolNative: '₴', decimalDigits: 2, rounding: 0, namePlural: 'Ukrainian hryvnias' },\r\n { code: 'UGX', name: 'Ugandan Shilling', symbol: 'USh', symbolNative: 'USh', decimalDigits: 0, rounding: 0, namePlural: 'Ugandan shillings' },\r\n { code: 'USD', name: 'US Dollar', symbol: '$', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'US dollars' },\r\n { code: 'UYU', name: 'Uruguayan Peso', symbol: '$U', symbolNative: '$', decimalDigits: 2, rounding: 0, namePlural: 'Uruguayan pesos' },\r\n { code: 'UZS', name: 'Uzbekistani Som', symbol: 'UZS', symbolNative: 'UZS', decimalDigits: 0, rounding: 0, namePlural: 'Uzbekistani som' },\r\n { code: 'VES', name: 'Venezuelan Bolívar', symbol: 'Bs', symbolNative: 'Bs', decimalDigits: 2, rounding: 0, namePlural: 'Venezuelan bolívars' },\r\n { code: 'VND', name: 'Vietnamese Dong', symbol: '₫', symbolNative: '₫', decimalDigits: 0, rounding: 0, namePlural: 'Vietnamese dong' },\r\n { code: 'XAF', name: 'Central African CFA Franc', symbol: 'FCFA', symbolNative: 'FCFA', decimalDigits: 0, rounding: 0, namePlural: 'Central African CFA francs' },\r\n { code: 'XOF', name: 'West African CFA Franc', symbol: 'CFA', symbolNative: 'CFA', decimalDigits: 0, rounding: 0, namePlural: 'West African CFA francs' },\r\n { code: 'YER', name: 'Yemeni Rial', symbol: 'YR', symbolNative: 'ر.ي.', decimalDigits: 0, rounding: 0, namePlural: 'Yemeni rials' },\r\n { code: 'ZAR', name: 'South African Rand', symbol: 'R', symbolNative: 'R', decimalDigits: 2, rounding: 0, namePlural: 'South African rand' },\r\n { code: 'ZMW', name: 'Zambian Kwacha', symbol: 'ZK', symbolNative: 'ZK', decimalDigits: 0, rounding: 0, namePlural: 'Zambian kwachas' },\r\n { code: 'ZWL', name: 'Zimbabwean Dollar', symbol: 'ZWL$', symbolNative: 'ZWL$', decimalDigits: 0, rounding: 0, namePlural: 'Zimbabwean dollars' },\r\n];\r\n\r\n// Helper functions\r\nexport const getCurrencyByCode = (code: string): Currency | undefined => {\r\n return currencies.find((c) => c.code === code.toUpperCase());\r\n};\r\n\r\nexport const searchCurrencies = (query: string): Currency[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return currencies.filter(\r\n (c) =>\r\n c.code.toLowerCase().includes(lowerQuery) ||\r\n c.name.toLowerCase().includes(lowerQuery)\r\n );\r\n};\r\n\r\nexport const formatCurrency = (\r\n amount: number,\r\n currencyCode: string,\r\n locale: string = 'en-US'\r\n): string => {\r\n const currency = getCurrencyByCode(currencyCode);\r\n if (!currency) {\r\n return amount.toFixed(2);\r\n }\r\n\r\n try {\r\n return new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currency: currency.code,\r\n minimumFractionDigits: currency.decimalDigits,\r\n maximumFractionDigits: currency.decimalDigits,\r\n }).format(amount);\r\n } catch {\r\n return `${currency.symbol}${amount.toFixed(currency.decimalDigits)}`;\r\n }\r\n};\r\n\r\nexport const formatCurrencyNative = (amount: number, currencyCode: string): string => {\r\n const currency = getCurrencyByCode(currencyCode);\r\n if (!currency) {\r\n return amount.toFixed(2);\r\n }\r\n return `${currency.symbolNative}${amount.toFixed(currency.decimalDigits)}`;\r\n};\r\n\r\nexport default currencies;\r\n","/**\r\n * Timezones data with UTC offsets\r\n */\r\nexport interface Timezone {\r\n name: string;\r\n label: string;\r\n offset: string;\r\n offsetMinutes: number;\r\n}\r\n\r\nexport const timezones: Timezone[] = [\r\n { name: 'Pacific/Midway', label: '(UTC-11:00) Midway Island', offset: '-11:00', offsetMinutes: -660 },\r\n { name: 'Pacific/Honolulu', label: '(UTC-10:00) Hawaii', offset: '-10:00', offsetMinutes: -600 },\r\n { name: 'America/Anchorage', label: '(UTC-09:00) Alaska', offset: '-09:00', offsetMinutes: -540 },\r\n { name: 'America/Los_Angeles', label: '(UTC-08:00) Pacific Time (US & Canada)', offset: '-08:00', offsetMinutes: -480 },\r\n { name: 'America/Phoenix', label: '(UTC-07:00) Arizona', offset: '-07:00', offsetMinutes: -420 },\r\n { name: 'America/Denver', label: '(UTC-07:00) Mountain Time (US & Canada)', offset: '-07:00', offsetMinutes: -420 },\r\n { name: 'America/Chicago', label: '(UTC-06:00) Central Time (US & Canada)', offset: '-06:00', offsetMinutes: -360 },\r\n { name: 'America/Mexico_City', label: '(UTC-06:00) Mexico City', offset: '-06:00', offsetMinutes: -360 },\r\n { name: 'America/New_York', label: '(UTC-05:00) Eastern Time (US & Canada)', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Bogota', label: '(UTC-05:00) Bogota', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Lima', label: '(UTC-05:00) Lima', offset: '-05:00', offsetMinutes: -300 },\r\n { name: 'America/Caracas', label: '(UTC-04:00) Caracas', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Halifax', label: '(UTC-04:00) Atlantic Time (Canada)', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Santiago', label: '(UTC-04:00) Santiago', offset: '-04:00', offsetMinutes: -240 },\r\n { name: 'America/Sao_Paulo', label: '(UTC-03:00) Brasilia', offset: '-03:00', offsetMinutes: -180 },\r\n { name: 'America/Buenos_Aires', label: '(UTC-03:00) Buenos Aires', offset: '-03:00', offsetMinutes: -180 },\r\n { name: 'Atlantic/South_Georgia', label: '(UTC-02:00) Mid-Atlantic', offset: '-02:00', offsetMinutes: -120 },\r\n { name: 'Atlantic/Azores', label: '(UTC-01:00) Azores', offset: '-01:00', offsetMinutes: -60 },\r\n { name: 'Europe/London', label: '(UTC+00:00) London, Dublin', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'UTC', label: '(UTC+00:00) UTC', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'Africa/Casablanca', label: '(UTC+00:00) Casablanca', offset: '+00:00', offsetMinutes: 0 },\r\n { name: 'Europe/Paris', label: '(UTC+01:00) Paris, Berlin, Rome', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Europe/Amsterdam', label: '(UTC+01:00) Amsterdam, Brussels', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Africa/Lagos', label: '(UTC+01:00) West Central Africa', offset: '+01:00', offsetMinutes: 60 },\r\n { name: 'Europe/Athens', label: '(UTC+02:00) Athens, Istanbul', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Europe/Kiev', label: '(UTC+02:00) Kyiv', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Africa/Cairo', label: '(UTC+02:00) Cairo', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Africa/Johannesburg', label: '(UTC+02:00) Johannesburg', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Asia/Jerusalem', label: '(UTC+02:00) Jerusalem', offset: '+02:00', offsetMinutes: 120 },\r\n { name: 'Europe/Moscow', label: '(UTC+03:00) Moscow', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Asia/Kuwait', label: '(UTC+03:00) Kuwait, Riyadh', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Africa/Nairobi', label: '(UTC+03:00) Nairobi', offset: '+03:00', offsetMinutes: 180 },\r\n { name: 'Asia/Tehran', label: '(UTC+03:30) Tehran', offset: '+03:30', offsetMinutes: 210 },\r\n { name: 'Asia/Dubai', label: '(UTC+04:00) Dubai, Abu Dhabi', offset: '+04:00', offsetMinutes: 240 },\r\n { name: 'Asia/Baku', label: '(UTC+04:00) Baku', offset: '+04:00', offsetMinutes: 240 },\r\n { name: 'Asia/Kabul', label: '(UTC+04:30) Kabul', offset: '+04:30', offsetMinutes: 270 },\r\n { name: 'Asia/Karachi', label: '(UTC+05:00) Karachi', offset: '+05:00', offsetMinutes: 300 },\r\n { name: 'Asia/Tashkent', label: '(UTC+05:00) Tashkent', offset: '+05:00', offsetMinutes: 300 },\r\n { name: 'Asia/Kolkata', label: '(UTC+05:30) Mumbai, New Delhi', offset: '+05:30', offsetMinutes: 330 },\r\n { name: 'Asia/Colombo', label: '(UTC+05:30) Sri Lanka', offset: '+05:30', offsetMinutes: 330 },\r\n { name: 'Asia/Kathmandu', label: '(UTC+05:45) Kathmandu', offset: '+05:45', offsetMinutes: 345 },\r\n { name: 'Asia/Dhaka', label: '(UTC+06:00) Dhaka', offset: '+06:00', offsetMinutes: 360 },\r\n { name: 'Asia/Almaty', label: '(UTC+06:00) Almaty', offset: '+06:00', offsetMinutes: 360 },\r\n { name: 'Asia/Yangon', label: '(UTC+06:30) Yangon', offset: '+06:30', offsetMinutes: 390 },\r\n { name: 'Asia/Bangkok', label: '(UTC+07:00) Bangkok', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Jakarta', label: '(UTC+07:00) Jakarta', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Ho_Chi_Minh', label: '(UTC+07:00) Ho Chi Minh City', offset: '+07:00', offsetMinutes: 420 },\r\n { name: 'Asia/Singapore', label: '(UTC+08:00) Singapore', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Hong_Kong', label: '(UTC+08:00) Hong Kong', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Shanghai', label: '(UTC+08:00) Beijing, Shanghai', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Taipei', label: '(UTC+08:00) Taipei', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Kuala_Lumpur', label: '(UTC+08:00) Kuala Lumpur', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Australia/Perth', label: '(UTC+08:00) Perth', offset: '+08:00', offsetMinutes: 480 },\r\n { name: 'Asia/Seoul', label: '(UTC+09:00) Seoul', offset: '+09:00', offsetMinutes: 540 },\r\n { name: 'Asia/Tokyo', label: '(UTC+09:00) Tokyo', offset: '+09:00', offsetMinutes: 540 },\r\n { name: 'Australia/Darwin', label: '(UTC+09:30) Darwin', offset: '+09:30', offsetMinutes: 570 },\r\n { name: 'Australia/Adelaide', label: '(UTC+09:30) Adelaide', offset: '+09:30', offsetMinutes: 570 },\r\n { name: 'Australia/Sydney', label: '(UTC+10:00) Sydney, Melbourne', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Australia/Brisbane', label: '(UTC+10:00) Brisbane', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Pacific/Guam', label: '(UTC+10:00) Guam', offset: '+10:00', offsetMinutes: 600 },\r\n { name: 'Pacific/Noumea', label: '(UTC+11:00) New Caledonia', offset: '+11:00', offsetMinutes: 660 },\r\n { name: 'Pacific/Fiji', label: '(UTC+12:00) Fiji', offset: '+12:00', offsetMinutes: 720 },\r\n { name: 'Pacific/Auckland', label: '(UTC+12:00) Auckland, Wellington', offset: '+12:00', offsetMinutes: 720 },\r\n { name: 'Pacific/Tongatapu', label: '(UTC+13:00) Nuku\\'alofa', offset: '+13:00', offsetMinutes: 780 },\r\n];\r\n\r\n// Helper functions\r\nexport const getTimezoneByName = (name: string): Timezone | undefined => {\r\n return timezones.find((tz) => tz.name === name);\r\n};\r\n\r\nexport const searchTimezones = (query: string): Timezone[] => {\r\n const lowerQuery = query.toLowerCase();\r\n return timezones.filter(\r\n (tz) =>\r\n tz.name.toLowerCase().includes(lowerQuery) ||\r\n tz.label.toLowerCase().includes(lowerQuery)\r\n );\r\n};\r\n\r\nexport const getTimezonesByOffset = (offsetMinutes: number): Timezone[] => {\r\n return timezones.filter((tz) => tz.offsetMinutes === offsetMinutes);\r\n};\r\n\r\nexport const sortTimezonesByOffset = (ascending: boolean = true): Timezone[] => {\r\n return [...timezones].sort((a, b) =>\r\n ascending\r\n ? a.offsetMinutes - b.offsetMinutes\r\n : b.offsetMinutes - a.offsetMinutes\r\n );\r\n};\r\n\r\nexport default timezones;\r\n","/**\r\n * Common Regex Patterns\r\n * Reusable validation patterns for various data types\r\n */\r\n\r\n// ==========================================\r\n// EMAIL PATTERNS\r\n// ==========================================\r\n\r\n/** Basic email validation */\r\nexport const EMAIL = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n\r\n/** RFC 5322 compliant email (more strict) */\r\nexport const EMAIL_RFC5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\r\n\r\n/** Email with common domains only (gmail, yahoo, outlook, etc.) */\r\nexport const EMAIL_COMMON_DOMAINS = /^[^\\s@]+@(gmail|yahoo|outlook|hotmail|icloud|proton|aol|mail)\\.[a-z]{2,}$/i;\r\n\r\n// ==========================================\r\n// PASSWORD PATTERNS\r\n// ==========================================\r\n\r\n/** Minimum 8 characters */\r\nexport const PASSWORD_MIN_8 = /^.{8,}$/;\r\n\r\n/** Minimum 8 chars, at least one letter and one number */\r\nexport const PASSWORD_ALPHANUMERIC = /^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$/;\r\n\r\n/** Medium: min 8 chars, uppercase, lowercase, number */\r\nexport const PASSWORD_MEDIUM = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d@$!%*?&]{8,}$/;\r\n\r\n/** Strong: min 8 chars, uppercase, lowercase, number, special char */\r\nexport const PASSWORD_STRONG = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$/;\r\n\r\n/** Very Strong: min 12 chars, uppercase, lowercase, number, special char */\r\nexport const PASSWORD_VERY_STRONG = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*#?&^()_+=[\\]{}|;:'\"<>,.\\/\\\\-])[A-Za-z\\d@$!%*#?&^()_+=[\\]{}|;:'\"<>,.\\/\\\\-]{12,}$/;\r\n\r\n// ==========================================\r\n// PHONE NUMBER PATTERNS\r\n// ==========================================\r\n\r\n/** International phone (with + prefix) */\r\nexport const PHONE_INTERNATIONAL = /^\\+?[1-9]\\d{1,14}$/;\r\n\r\n/** US phone number */\r\nexport const PHONE_US = /^(\\+1)?[-.\\s]?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}$/;\r\n\r\n/** India phone number (10 digits starting with 6-9) */\r\nexport const PHONE_INDIA = /^(\\+91)?[-.\\s]?[6-9]\\d{9}$/;\r\n\r\n/** UK phone number */\r\nexport const PHONE_UK = /^(\\+44)?[-.\\s]?[0-9]{10,11}$/;\r\n\r\n/** Generic 10-digit phone */\r\nexport const PHONE_10_DIGIT = /^\\d{10}$/;\r\n\r\n/** Phone with optional country code */\r\nexport const PHONE_WITH_CODE = /^\\+?[\\d\\s\\-().]{10,20}$/;\r\n\r\n// ==========================================\r\n// PIN/POSTAL CODE PATTERNS\r\n// ==========================================\r\n\r\n/** US ZIP Code (5 digits or 5+4) */\r\nexport const ZIP_US = /^\\d{5}(-\\d{4})?$/;\r\n\r\n/** India PIN Code (6 digits) */\r\nexport const PIN_INDIA = /^[1-9][0-9]{5}$/;\r\n\r\n/** UK Postal Code */\r\nexport const POSTAL_UK = /^[A-Z]{1,2}\\d[A-Z\\d]?\\s*\\d[A-Z]{2}$/i;\r\n\r\n/** Canada Postal Code */\r\nexport const POSTAL_CANADA = /^[A-Z]\\d[A-Z]\\s?\\d[A-Z]\\d$/i;\r\n\r\n/** Germany PLZ (5 digits) */\r\nexport const PLZ_GERMANY = /^\\d{5}$/;\r\n\r\n/** Generic postal code (4-10 alphanumeric) */\r\nexport const POSTAL_GENERIC = /^[A-Z0-9]{4,10}$/i;\r\n\r\n// ==========================================\r\n// ID PATTERNS\r\n// ==========================================\r\n\r\n/** UUID v4 */\r\nexport const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n\r\n/** UUID any version */\r\nexport const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\r\n\r\n/** MongoDB ObjectId */\r\nexport const MONGO_OBJECT_ID = /^[0-9a-f]{24}$/i;\r\n\r\n/** CUID */\r\nexport const CUID = /^c[a-z0-9]{24}$/i;\r\n\r\n/** CUID2 */\r\nexport const CUID2 = /^[a-z][a-z0-9]{23}$/;\r\n\r\n/** NanoID (default 21 chars) */\r\nexport const NANOID = /^[A-Za-z0-9_-]{21}$/;\r\n\r\n// ==========================================\r\n// GOVERNMENT ID PATTERNS\r\n// ==========================================\r\n\r\n/** India Aadhaar (12 digits) */\r\nexport const AADHAAR_INDIA = /^[2-9]\\d{11}$/;\r\n\r\n/** India PAN Card */\r\nexport const PAN_INDIA = /^[A-Z]{5}[0-9]{4}[A-Z]$/;\r\n\r\n/** India GST Number */\r\nexport const GST_INDIA = /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$/;\r\n\r\n/** US SSN */\r\nexport const SSN_US = /^\\d{3}-?\\d{2}-?\\d{4}$/;\r\n\r\n/** India Driving License */\r\nexport const DL_INDIA = /^[A-Z]{2}[0-9]{2}[0-9]{4}[0-9]{7}$/;\r\n\r\n/** India Vehicle Number */\r\nexport const VEHICLE_INDIA = /^[A-Z]{2}[0-9]{2}[A-Z]{1,2}[0-9]{4}$/;\r\n\r\n/** India IFSC Code */\r\nexport const IFSC_INDIA = /^[A-Z]{4}0[A-Z0-9]{6}$/;\r\n\r\n// ==========================================\r\n// URL PATTERNS\r\n// ==========================================\r\n\r\n/** Basic URL (http/https) */\r\nexport const URL_BASIC = /^https?:\\/\\/[^\\s$.?#].[^\\s]*$/i;\r\n\r\n/** URL with optional protocol */\r\nexport const URL_OPTIONAL_PROTOCOL = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/i;\r\n\r\n/** Strict URL with protocol required */\r\nexport const URL_STRICT = /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/;\r\n\r\n/** Domain only (no protocol) */\r\nexport const DOMAIN = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i;\r\n\r\n/** Subdomain */\r\nexport const SUBDOMAIN = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/i;\r\n\r\n/** Localhost with optional port */\r\nexport const LOCALHOST = /^(localhost|127\\.0\\.0\\.1)(:\\d{1,5})?$/;\r\n\r\n// ==========================================\r\n// SLUG & USERNAME PATTERNS\r\n// ==========================================\r\n\r\n/** URL slug (kebab-case) */\r\nexport const SLUG = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\r\n\r\n/** Username (alphanumeric, underscore, hyphen, 3-30 chars) */\r\nexport const USERNAME = /^[a-zA-Z0-9_-]{3,30}$/;\r\n\r\n/** Username starting with letter */\r\nexport const USERNAME_ALPHA_START = /^[a-zA-Z][a-zA-Z0-9_-]{2,29}$/;\r\n\r\n/** Handle (like Twitter @username) */\r\nexport const HANDLE = /^@?[a-zA-Z0-9_]{1,15}$/;\r\n\r\n// ==========================================\r\n// CREDIT CARD PATTERNS\r\n// ==========================================\r\n\r\n/** Any credit card (13-19 digits) */\r\nexport const CREDIT_CARD = /^\\d{13,19}$/;\r\n\r\n/** Visa */\r\nexport const VISA = /^4[0-9]{12}(?:[0-9]{3})?$/;\r\n\r\n/** Mastercard */\r\nexport const MASTERCARD = /^5[1-5][0-9]{14}$/;\r\n\r\n/** American Express */\r\nexport const AMEX = /^3[47][0-9]{13}$/;\r\n\r\n/** Discover */\r\nexport const DISCOVER = /^6(?:011|5[0-9]{2})[0-9]{12}$/;\r\n\r\n/** CVV (3-4 digits) */\r\nexport const CVV = /^\\d{3,4}$/;\r\n\r\n/** Card expiry (MM/YY or MM/YYYY) */\r\nexport const CARD_EXPIRY = /^(0[1-9]|1[0-2])\\/(\\d{2}|\\d{4})$/;\r\n\r\n// ==========================================\r\n// DATE & TIME PATTERNS\r\n// ==========================================\r\n\r\n/** ISO 8601 Date (YYYY-MM-DD) */\r\nexport const DATE_ISO = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\n/** Date DD/MM/YYYY */\r\nexport const DATE_DMY = /^(0[1-9]|[12]\\d|3[01])\\/(0[1-9]|1[0-2])\\/\\d{4}$/;\r\n\r\n/** Date MM/DD/YYYY */\r\nexport const DATE_MDY = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12]\\d|3[01])\\/\\d{4}$/;\r\n\r\n/** Time HH:MM (24-hour) */\r\nexport const TIME_24H = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\r\n\r\n/** Time HH:MM:SS (24-hour) */\r\nexport const TIME_24H_SECONDS = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/;\r\n\r\n/** Time 12-hour with AM/PM */\r\nexport const TIME_12H = /^(0?[1-9]|1[0-2]):[0-5]\\d\\s?(AM|PM|am|pm)$/;\r\n\r\n/** ISO 8601 DateTime */\r\nexport const DATETIME_ISO = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?(Z|[+-]\\d{2}:\\d{2})?$/;\r\n\r\n// ==========================================\r\n// IP ADDRESS PATTERNS\r\n// ==========================================\r\n\r\n/** IPv4 Address */\r\nexport const IPV4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\r\n\r\n/** IPv6 Address */\r\nexport const IPV6 = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\r\n\r\n/** MAC Address */\r\nexport const MAC_ADDRESS = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;\r\n\r\n// ==========================================\r\n// FILE PATTERNS\r\n// ==========================================\r\n\r\n/** Image file extension */\r\nexport const IMAGE_EXT = /\\.(jpg|jpeg|png|gif|bmp|webp|svg|ico|tiff?)$/i;\r\n\r\n/** Video file extension */\r\nexport const VIDEO_EXT = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)$/i;\r\n\r\n/** Audio file extension */\r\nexport const AUDIO_EXT = /\\.(mp3|wav|ogg|aac|flac|wma|m4a)$/i;\r\n\r\n/** Document file extension */\r\nexport const DOCUMENT_EXT = /\\.(pdf|doc|docx|xls|xlsx|ppt|pptx|txt|rtf|odt|ods|odp)$/i;\r\n\r\n/** Archive file extension */\r\nexport const ARCHIVE_EXT = /\\.(zip|rar|7z|tar|gz|bz2)$/i;\r\n\r\n/** Safe filename */\r\nexport const SAFE_FILENAME = /^[a-zA-Z0-9._-]+$/;\r\n\r\n// ==========================================\r\n// COLOR PATTERNS\r\n// ==========================================\r\n\r\n/** Hex color (3 or 6 chars) */\r\nexport const HEX_COLOR = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n\r\n/** Hex color with alpha (8 chars) */\r\nexport const HEX_COLOR_ALPHA = /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{3})$/;\r\n\r\n/** RGB color */\r\nexport const RGB_COLOR = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\r\n\r\n/** RGBA color */\r\nexport const RGBA_COLOR = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(0|1|0?\\.\\d+)\\s*\\)$/;\r\n\r\n/** HSL color */\r\nexport const HSL_COLOR = /^hsl\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*\\)$/;\r\n\r\n// ==========================================\r\n// MISC PATTERNS\r\n// ==========================================\r\n\r\n/** Alphanumeric only */\r\nexport const ALPHANUMERIC = /^[a-zA-Z0-9]+$/;\r\n\r\n/** Letters only */\r\nexport const LETTERS_ONLY = /^[a-zA-Z]+$/;\r\n\r\n/** Numbers only */\r\nexport const NUMBERS_ONLY = /^\\d+$/;\r\n\r\n/** Decimal number */\r\nexport const DECIMAL = /^-?\\d+(\\.\\d+)?$/;\r\n\r\n/** Positive integer */\r\nexport const POSITIVE_INTEGER = /^[1-9]\\d*$/;\r\n\r\n/** Non-negative integer */\r\nexport const NON_NEGATIVE_INTEGER = /^\\d+$/;\r\n\r\n/** No whitespace */\r\nexport const NO_WHITESPACE = /^\\S+$/;\r\n\r\n/** No special characters */\r\nexport const NO_SPECIAL_CHARS = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n/** Contains at least one uppercase */\r\nexport const HAS_UPPERCASE = /[A-Z]/;\r\n\r\n/** Contains at least one lowercase */\r\nexport const HAS_LOWERCASE = /[a-z]/;\r\n\r\n/** Contains at least one digit */\r\nexport const HAS_DIGIT = /\\d/;\r\n\r\n/** Contains at least one special character */\r\nexport const HAS_SPECIAL = /[!@#$%^&*(),.?\":{}|<>]/;\r\n\r\n/** HTML tags */\r\nexport const HTML_TAG = /<[^>]*>/g;\r\n\r\n/** Emoji */\r\nexport const EMOJI = /[\\u{1F600}-\\u{1F64F}\\u{1F300}-\\u{1F5FF}\\u{1F680}-\\u{1F6FF}\\u{1F1E0}-\\u{1F1FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}]/u;\r\n\r\n/** Hashtag */\r\nexport const HASHTAG = /#[a-zA-Z0-9_]+/g;\r\n\r\n/** Mention (@username) */\r\nexport const MENTION = /@[a-zA-Z0-9_]+/g;\r\n\r\n/** JSON string */\r\nexport const JSON_STRING = /^[\\],:{}\\s]*$/;\r\n\r\n/** Base64 */\r\nexport const BASE64 = /^[A-Za-z0-9+/]+=*$/;\r\n\r\n/** JWT Token */\r\nexport const JWT = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\r\n\r\n/** Semantic Version */\r\nexport const SEMVER = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\r\n\r\n/** Latitude */\r\nexport const LATITUDE = /^-?([0-8]?[0-9]|90)(\\.[0-9]{1,10})?$/;\r\n\r\n/** Longitude */\r\nexport const LONGITUDE = /^-?([0-9]{1,2}|1[0-7][0-9]|180)(\\.[0-9]{1,10})?$/;\r\n\r\n// ==========================================\r\n// EXPORT AS OBJECT FOR CONVENIENCE\r\n// ==========================================\r\n\r\nexport const REGEX = {\r\n // Email\r\n EMAIL,\r\n EMAIL_RFC5322,\r\n EMAIL_COMMON_DOMAINS,\r\n\r\n // Password\r\n PASSWORD_MIN_8,\r\n PASSWORD_ALPHANUMERIC,\r\n PASSWORD_MEDIUM,\r\n PASSWORD_STRONG,\r\n PASSWORD_VERY_STRONG,\r\n\r\n // Phone\r\n PHONE_INTERNATIONAL,\r\n PHONE_US,\r\n PHONE_INDIA,\r\n PHONE_UK,\r\n PHONE_10_DIGIT,\r\n PHONE_WITH_CODE,\r\n\r\n // Postal\r\n ZIP_US,\r\n PIN_INDIA,\r\n POSTAL_UK,\r\n POSTAL_CANADA,\r\n PLZ_GERMANY,\r\n POSTAL_GENERIC,\r\n\r\n // IDs\r\n UUID_V4,\r\n UUID,\r\n MONGO_OBJECT_ID,\r\n CUID,\r\n CUID2,\r\n NANOID,\r\n\r\n // Government IDs\r\n AADHAAR_INDIA,\r\n PAN_INDIA,\r\n GST_INDIA,\r\n SSN_US,\r\n DL_INDIA,\r\n VEHICLE_INDIA,\r\n IFSC_INDIA,\r\n\r\n // URL\r\n URL_BASIC,\r\n URL_OPTIONAL_PROTOCOL,\r\n URL_STRICT,\r\n DOMAIN,\r\n SUBDOMAIN,\r\n LOCALHOST,\r\n\r\n // Slug & Username\r\n SLUG,\r\n USERNAME,\r\n USERNAME_ALPHA_START,\r\n HANDLE,\r\n\r\n // Credit Card\r\n CREDIT_CARD,\r\n VISA,\r\n MASTERCARD,\r\n AMEX,\r\n DISCOVER,\r\n CVV,\r\n CARD_EXPIRY,\r\n\r\n // Date & Time\r\n DATE_ISO,\r\n DATE_DMY,\r\n DATE_MDY,\r\n TIME_24H,\r\n TIME_24H_SECONDS,\r\n TIME_12H,\r\n DATETIME_ISO,\r\n\r\n // IP\r\n IPV4,\r\n IPV6,\r\n MAC_ADDRESS,\r\n\r\n // File\r\n IMAGE_EXT,\r\n VIDEO_EXT,\r\n AUDIO_EXT,\r\n DOCUMENT_EXT,\r\n ARCHIVE_EXT,\r\n SAFE_FILENAME,\r\n\r\n // Color\r\n HEX_COLOR,\r\n HEX_COLOR_ALPHA,\r\n RGB_COLOR,\r\n RGBA_COLOR,\r\n HSL_COLOR,\r\n\r\n // Misc\r\n ALPHANUMERIC,\r\n LETTERS_ONLY,\r\n NUMBERS_ONLY,\r\n DECIMAL,\r\n POSITIVE_INTEGER,\r\n NON_NEGATIVE_INTEGER,\r\n NO_WHITESPACE,\r\n NO_SPECIAL_CHARS,\r\n HAS_UPPERCASE,\r\n HAS_LOWERCASE,\r\n HAS_DIGIT,\r\n HAS_SPECIAL,\r\n HTML_TAG,\r\n EMOJI,\r\n HASHTAG,\r\n MENTION,\r\n JSON_STRING,\r\n BASE64,\r\n JWT,\r\n SEMVER,\r\n LATITUDE,\r\n LONGITUDE,\r\n} as const;\r\n\r\nexport default REGEX;\r\n","/**\r\n * Company Logos for all 5 Exyconn projects\r\n * Contains light and dark mode variants\r\n */\r\n\r\nexport interface LogoVariants {\r\n light: string; // URL for light mode (dark logo on light background)\r\n dark: string; // URL for dark mode (light logo on dark background)\r\n}\r\n\r\nexport interface Logo {\r\n full: LogoVariants; // Full logo with text\r\n icon: LogoVariants; // Icon only\r\n favicon: string; // Favicon URL (usually same for both modes)\r\n}\r\n\r\nexport interface CompanyBrand {\r\n name: string;\r\n domain: string;\r\n tagline: string;\r\n primaryColor: string;\r\n secondaryColor: string;\r\n logo: Logo;\r\n}\r\n\r\nexport const brands: Record<string, CompanyBrand> = {\r\n botify: {\r\n name: 'Botify',\r\n domain: 'botify.life',\r\n tagline: 'AI-Powered Chatbots',\r\n primaryColor: '#6366F1',\r\n secondaryColor: '#8B5CF6',\r\n logo: {\r\n full: {\r\n light: 'https://botify.life/logos/botify-full-dark.svg',\r\n dark: 'https://botify.life/logos/botify-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://botify.life/logos/botify-icon-dark.svg',\r\n dark: 'https://botify.life/logos/botify-icon-light.svg',\r\n },\r\n favicon: 'https://botify.life/favicon.ico',\r\n },\r\n },\r\n exyconn: {\r\n name: 'Exyconn',\r\n domain: 'exyconn.com',\r\n tagline: 'Connect. Create. Collaborate.',\r\n primaryColor: '#0EA5E9',\r\n secondaryColor: '#06B6D4',\r\n logo: {\r\n full: {\r\n light: 'https://exyconn.com/logos/exyconn-full-dark.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://exyconn.com/logos/exyconn-icon-dark.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-icon-light.svg',\r\n },\r\n favicon: 'https://exyconn.com/favicon.ico',\r\n },\r\n },\r\n partywings: {\r\n name: 'PartyWings',\r\n domain: 'partywings.fun',\r\n tagline: 'Your Party, Your Rules',\r\n primaryColor: '#EC4899',\r\n secondaryColor: '#F472B6',\r\n logo: {\r\n full: {\r\n light: 'https://partywings.fun/logos/partywings-full-dark.svg',\r\n dark: 'https://partywings.fun/logos/partywings-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://partywings.fun/logos/partywings-icon-dark.svg',\r\n dark: 'https://partywings.fun/logos/partywings-icon-light.svg',\r\n },\r\n favicon: 'https://partywings.fun/favicon.ico',\r\n },\r\n },\r\n sibera: {\r\n name: 'Sibera',\r\n domain: 'sibera.work',\r\n tagline: 'Work Smarter, Together',\r\n primaryColor: '#10B981',\r\n secondaryColor: '#34D399',\r\n logo: {\r\n full: {\r\n light: 'https://sibera.work/logos/sibera-full-dark.svg',\r\n dark: 'https://sibera.work/logos/sibera-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://sibera.work/logos/sibera-icon-dark.svg',\r\n dark: 'https://sibera.work/logos/sibera-icon-light.svg',\r\n },\r\n favicon: 'https://sibera.work/favicon.ico',\r\n },\r\n },\r\n spentiva: {\r\n name: 'Spentiva',\r\n domain: 'spentiva.com',\r\n tagline: 'Smart Spending, Smart Living',\r\n primaryColor: '#F59E0B',\r\n secondaryColor: '#FBBF24',\r\n logo: {\r\n full: {\r\n light: 'https://spentiva.com/logos/spentiva-full-dark.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-full-light.svg',\r\n },\r\n icon: {\r\n light: 'https://spentiva.com/logos/spentiva-icon-dark.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-icon-light.svg',\r\n },\r\n favicon: 'https://spentiva.com/favicon.ico',\r\n },\r\n },\r\n};\r\n\r\n// Helper functions\r\nexport const getBrand = (key: string): CompanyBrand | undefined => {\r\n return brands[key.toLowerCase()];\r\n};\r\n\r\nexport const getBrandByDomain = (domain: string): CompanyBrand | undefined => {\r\n return Object.values(brands).find((b) => b.domain === domain);\r\n};\r\n\r\nexport const getLogo = (brandKey: string, mode: 'light' | 'dark', type: 'full' | 'icon' = 'full'): string | undefined => {\r\n const brand = getBrand(brandKey);\r\n if (!brand) return undefined;\r\n return brand.logo[type][mode];\r\n};\r\n\r\nexport const getAllBrands = (): CompanyBrand[] => {\r\n return Object.values(brands);\r\n};\r\n\r\nexport const getAllBrandKeys = (): string[] => {\r\n return Object.keys(brands);\r\n};\r\n\r\nexport default brands;\r\n","/**\r\n * Brand Identity Configuration\r\n * Complete brand identity for all Exyconn projects including logos,\r\n * colors, contact info, and social links\r\n */\r\n\r\n// ==========================================\r\n// LOGO INTERFACES\r\n// ==========================================\r\n\r\n/**\r\n * Logo variants interface\r\n * - light: Logo for light backgrounds (dark colored logo)\r\n * - dark: Logo for dark backgrounds (light colored logo)\r\n * - logoOnly: Just the icon/symbol without text (light bg)\r\n * - darkLogoOnly: Just the icon/symbol without text (dark bg)\r\n */\r\nexport interface LogoSet {\r\n /** Full logo with text for light backgrounds */\r\n light: string;\r\n /** Full logo with text for dark backgrounds */\r\n dark: string;\r\n /** Icon only for light backgrounds */\r\n logoOnly: string;\r\n /** Icon only for dark backgrounds */\r\n darkLogoOnly: string;\r\n /** Favicon URL */\r\n favicon: string;\r\n}\r\n\r\n/**\r\n * Brand colors\r\n */\r\nexport interface BrandColors {\r\n primary: string;\r\n secondary: string;\r\n accent?: string;\r\n background?: string;\r\n foreground?: string;\r\n}\r\n\r\n/**\r\n * Social media links\r\n */\r\nexport interface SocialLinks {\r\n twitter?: string;\r\n facebook?: string;\r\n instagram?: string;\r\n linkedin?: string;\r\n github?: string;\r\n youtube?: string;\r\n discord?: string;\r\n tiktok?: string;\r\n}\r\n\r\n/**\r\n * Contact information\r\n */\r\nexport interface ContactInfo {\r\n supportEmail: string;\r\n salesEmail?: string;\r\n phone?: string;\r\n address?: string;\r\n}\r\n\r\n/**\r\n * SEO Configuration\r\n */\r\nexport interface SEOConfig {\r\n title: string;\r\n description: string;\r\n keywords: string[];\r\n ogImage?: string;\r\n}\r\n\r\n/**\r\n * Complete Brand Identity\r\n */\r\nexport interface BrandIdentity {\r\n id: string;\r\n name: string;\r\n tagline: string;\r\n domain: string;\r\n logo: LogoSet;\r\n colors: BrandColors;\r\n contact: ContactInfo;\r\n social?: SocialLinks;\r\n seo?: SEOConfig;\r\n}\r\n\r\n// ==========================================\r\n// APP CONFIG - For Runtime Use\r\n// ==========================================\r\n\r\n/**\r\n * App configuration for runtime\r\n * Use this in your apps for consistent branding\r\n */\r\nexport interface AppConfig {\r\n name: string;\r\n tagline: string;\r\n domain: string;\r\n supportEmail: string;\r\n logo: LogoSet;\r\n colors: BrandColors;\r\n}\r\n\r\n// ==========================================\r\n// BRAND DEFINITIONS\r\n// ==========================================\r\n\r\nexport const BRANDS: Record<string, BrandIdentity> = {\r\n botify: {\r\n id: 'botify',\r\n name: 'Botify',\r\n tagline: 'AI-Powered Chatbots',\r\n domain: 'botify.life',\r\n logo: {\r\n light: 'https://botify.life/logos/botify-full-light.svg',\r\n dark: 'https://botify.life/logos/botify-full-dark.svg',\r\n logoOnly: 'https://botify.life/logos/botify-icon-light.svg',\r\n darkLogoOnly: 'https://botify.life/logos/botify-icon-dark.svg',\r\n favicon: 'https://botify.life/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#6366F1',\r\n secondary: '#8B5CF6',\r\n accent: '#A78BFA',\r\n },\r\n contact: {\r\n supportEmail: 'support@botify.life',\r\n salesEmail: 'sales@botify.life',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/botifylife',\r\n github: 'https://github.com/botifylife',\r\n },\r\n seo: {\r\n title: 'Botify - AI-Powered Chatbots',\r\n description: 'Create intelligent chatbots with Botify. AI-powered conversations for your business.',\r\n keywords: ['chatbot', 'AI', 'conversational AI', 'customer support', 'automation'],\r\n },\r\n },\r\n exyconn: {\r\n id: 'exyconn',\r\n name: 'Exyconn',\r\n tagline: 'Connect. Create. Collaborate.',\r\n domain: 'exyconn.com',\r\n logo: {\r\n light: 'https://exyconn.com/logos/exyconn-full-light.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-full-dark.svg',\r\n logoOnly: 'https://exyconn.com/logos/exyconn-icon-light.svg',\r\n darkLogoOnly: 'https://exyconn.com/logos/exyconn-icon-dark.svg',\r\n favicon: 'https://exyconn.com/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#0EA5E9',\r\n secondary: '#06B6D4',\r\n accent: '#22D3EE',\r\n },\r\n contact: {\r\n supportEmail: 'support@exyconn.com',\r\n salesEmail: 'sales@exyconn.com',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/exyconn',\r\n linkedin: 'https://linkedin.com/company/exyconn',\r\n github: 'https://github.com/exyconn',\r\n },\r\n seo: {\r\n title: 'Exyconn - Connect. Create. Collaborate.',\r\n description: 'The platform that brings teams together. Connect, create, and collaborate seamlessly.',\r\n keywords: ['collaboration', 'team', 'productivity', 'communication', 'workspace'],\r\n },\r\n },\r\n partywings: {\r\n id: 'partywings',\r\n name: 'PartyWings',\r\n tagline: 'Your Party, Your Rules',\r\n domain: 'partywings.fun',\r\n logo: {\r\n light: 'https://partywings.fun/logos/partywings-full-light.svg',\r\n dark: 'https://partywings.fun/logos/partywings-full-dark.svg',\r\n logoOnly: 'https://partywings.fun/logos/partywings-icon-light.svg',\r\n darkLogoOnly: 'https://partywings.fun/logos/partywings-icon-dark.svg',\r\n favicon: 'https://partywings.fun/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#EC4899',\r\n secondary: '#F472B6',\r\n accent: '#F9A8D4',\r\n },\r\n contact: {\r\n supportEmail: 'support@partywings.fun',\r\n },\r\n social: {\r\n instagram: 'https://instagram.com/partywingsfun',\r\n tiktok: 'https://tiktok.com/@partywingsfun',\r\n },\r\n seo: {\r\n title: 'PartyWings - Your Party, Your Rules',\r\n description: 'Plan unforgettable parties and events. Your party, your rules with PartyWings.',\r\n keywords: ['party', 'events', 'celebration', 'planning', 'entertainment'],\r\n },\r\n },\r\n sibera: {\r\n id: 'sibera',\r\n name: 'Sibera',\r\n tagline: 'Work Smarter, Together',\r\n domain: 'sibera.work',\r\n logo: {\r\n light: 'https://sibera.work/logos/sibera-full-light.svg',\r\n dark: 'https://sibera.work/logos/sibera-full-dark.svg',\r\n logoOnly: 'https://sibera.work/logos/sibera-icon-light.svg',\r\n darkLogoOnly: 'https://sibera.work/logos/sibera-icon-dark.svg',\r\n favicon: 'https://sibera.work/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#10B981',\r\n secondary: '#34D399',\r\n accent: '#6EE7B7',\r\n },\r\n contact: {\r\n supportEmail: 'support@sibera.work',\r\n salesEmail: 'sales@sibera.work',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/siberawork',\r\n linkedin: 'https://linkedin.com/company/sibera',\r\n },\r\n seo: {\r\n title: 'Sibera - Work Smarter, Together',\r\n description: 'Streamline your workflow and collaborate efficiently with Sibera.',\r\n keywords: ['work management', 'productivity', 'team collaboration', 'project management'],\r\n },\r\n },\r\n spentiva: {\r\n id: 'spentiva',\r\n name: 'Spentiva',\r\n tagline: 'Smart Spending, Smart Living',\r\n domain: 'spentiva.com',\r\n logo: {\r\n light: 'https://spentiva.com/logos/spentiva-full-light.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-full-dark.svg',\r\n logoOnly: 'https://spentiva.com/logos/spentiva-icon-light.svg',\r\n darkLogoOnly: 'https://spentiva.com/logos/spentiva-icon-dark.svg',\r\n favicon: 'https://spentiva.com/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#F59E0B',\r\n secondary: '#FBBF24',\r\n accent: '#FCD34D',\r\n },\r\n contact: {\r\n supportEmail: 'support@spentiva.com',\r\n salesEmail: 'hello@spentiva.com',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/spentiva',\r\n instagram: 'https://instagram.com/spentiva',\r\n },\r\n seo: {\r\n title: 'Spentiva - Smart Spending, Smart Living',\r\n description: 'Take control of your finances with Spentiva. Smart spending for smart living.',\r\n keywords: ['finance', 'budgeting', 'expense tracking', 'money management', 'personal finance'],\r\n },\r\n },\r\n};\r\n\r\n// ==========================================\r\n// APP CONFIGS - Ready to use in projects\r\n// ==========================================\r\n\r\n/**\r\n * Pre-configured APP objects for each project\r\n * Import directly: import { APP } from '@exyconn/common'\r\n * Then configure which APP to use based on environment\r\n */\r\nexport const APPS = {\r\n BOTIFY: createAppConfig('botify'),\r\n EXYCONN: createAppConfig('exyconn'),\r\n PARTYWINGS: createAppConfig('partywings'),\r\n SIBERA: createAppConfig('sibera'),\r\n SPENTIVA: createAppConfig('spentiva'),\r\n} as const;\r\n\r\n// ==========================================\r\n// HELPER FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Create an AppConfig from a brand\r\n */\r\nexport function createAppConfig(brandId: string): AppConfig {\r\n const brand = BRANDS[brandId.toLowerCase()];\r\n if (!brand) {\r\n throw new Error(`Brand \"${brandId}\" not found`);\r\n }\r\n return {\r\n name: brand.name,\r\n tagline: brand.tagline,\r\n domain: brand.domain,\r\n supportEmail: brand.contact.supportEmail,\r\n logo: brand.logo,\r\n colors: brand.colors,\r\n };\r\n}\r\n\r\n/**\r\n * Get brand by ID\r\n */\r\nexport function getBrandById(id: string): BrandIdentity | undefined {\r\n return BRANDS[id.toLowerCase()];\r\n}\r\n\r\n/**\r\n * Get brand by domain\r\n */\r\nexport function getBrandByDomain(domain: string): BrandIdentity | undefined {\r\n return Object.values(BRANDS).find((b) => b.domain === domain);\r\n}\r\n\r\n/**\r\n * Get all brands\r\n */\r\nexport function getAllBrands(): BrandIdentity[] {\r\n return Object.values(BRANDS);\r\n}\r\n\r\n/**\r\n * Get all brand IDs\r\n */\r\nexport function getAllBrandIds(): string[] {\r\n return Object.keys(BRANDS);\r\n}\r\n\r\n/**\r\n * Get logo for a brand\r\n * @param brandId - Brand identifier\r\n * @param variant - 'light' | 'dark' | 'logoOnly' | 'darkLogoOnly'\r\n */\r\nexport function getLogo(\r\n brandId: string,\r\n variant: keyof LogoSet\r\n): string | undefined {\r\n const brand = getBrandById(brandId);\r\n return brand?.logo[variant];\r\n}\r\n\r\n/**\r\n * Get appropriate logo based on theme\r\n * @param brandId - Brand identifier\r\n * @param theme - 'light' | 'dark'\r\n * @param iconOnly - Whether to return icon only logo\r\n */\r\nexport function getThemedLogo(\r\n brandId: string,\r\n theme: 'light' | 'dark',\r\n iconOnly = false\r\n): string | undefined {\r\n const brand = getBrandById(brandId);\r\n if (!brand) return undefined;\r\n\r\n if (iconOnly) {\r\n return theme === 'light' ? brand.logo.logoOnly : brand.logo.darkLogoOnly;\r\n }\r\n return brand.logo[theme];\r\n}\r\n\r\n/**\r\n * Get current app config based on domain\r\n * Useful for multi-tenant applications\r\n */\r\nexport function getAppConfigByDomain(domain: string): AppConfig | undefined {\r\n const brand = getBrandByDomain(domain);\r\n if (!brand) return undefined;\r\n return createAppConfig(brand.id);\r\n}\r\n\r\n/**\r\n * Detect brand from current window.location.hostname\r\n * For browser environments only\r\n */\r\nexport function detectCurrentBrand(): BrandIdentity | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n const hostname = window.location.hostname;\r\n return Object.values(BRANDS).find(\r\n (b) => hostname === b.domain || hostname.endsWith(`.${b.domain}`)\r\n );\r\n}\r\n\r\nexport default BRANDS;\r\n"]}