@exyconn/common 1.0.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 (88) hide show
  1. package/README.md +259 -0
  2. package/dist/client/http/index.d.mts +85 -0
  3. package/dist/client/http/index.d.ts +85 -0
  4. package/dist/client/http/index.js +127 -0
  5. package/dist/client/http/index.js.map +1 -0
  6. package/dist/client/http/index.mjs +109 -0
  7. package/dist/client/http/index.mjs.map +1 -0
  8. package/dist/client/index.d.mts +7 -0
  9. package/dist/client/index.d.ts +7 -0
  10. package/dist/client/index.js +964 -0
  11. package/dist/client/index.js.map +1 -0
  12. package/dist/client/index.mjs +889 -0
  13. package/dist/client/index.mjs.map +1 -0
  14. package/dist/client/logger/index.d.mts +53 -0
  15. package/dist/client/logger/index.d.ts +53 -0
  16. package/dist/client/logger/index.js +120 -0
  17. package/dist/client/logger/index.js.map +1 -0
  18. package/dist/client/logger/index.mjs +116 -0
  19. package/dist/client/logger/index.mjs.map +1 -0
  20. package/dist/client/utils/index.d.mts +285 -0
  21. package/dist/client/utils/index.d.ts +285 -0
  22. package/dist/client/utils/index.js +403 -0
  23. package/dist/client/utils/index.js.map +1 -0
  24. package/dist/client/utils/index.mjs +362 -0
  25. package/dist/client/utils/index.mjs.map +1 -0
  26. package/dist/index-BNdT-2X4.d.ts +229 -0
  27. package/dist/index-CcrANHAQ.d.mts +59 -0
  28. package/dist/index-ClWtDfwk.d.ts +833 -0
  29. package/dist/index-DSW6JfD-.d.mts +833 -0
  30. package/dist/index-Du0LLt9f.d.mts +229 -0
  31. package/dist/index-iTKxFa78.d.ts +59 -0
  32. package/dist/index.d.mts +171 -0
  33. package/dist/index.d.ts +171 -0
  34. package/dist/index.js +3806 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/index.mjs +3792 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/response.types-D--UhLJq.d.mts +67 -0
  39. package/dist/response.types-D--UhLJq.d.ts +67 -0
  40. package/dist/server/db/index.d.mts +38 -0
  41. package/dist/server/db/index.d.ts +38 -0
  42. package/dist/server/db/index.js +68 -0
  43. package/dist/server/db/index.js.map +1 -0
  44. package/dist/server/db/index.mjs +60 -0
  45. package/dist/server/db/index.mjs.map +1 -0
  46. package/dist/server/enums/index.d.mts +46 -0
  47. package/dist/server/enums/index.d.ts +46 -0
  48. package/dist/server/enums/index.js +48 -0
  49. package/dist/server/enums/index.js.map +1 -0
  50. package/dist/server/enums/index.mjs +43 -0
  51. package/dist/server/enums/index.mjs.map +1 -0
  52. package/dist/server/index.d.mts +9 -0
  53. package/dist/server/index.d.ts +9 -0
  54. package/dist/server/index.js +569 -0
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/index.mjs +523 -0
  57. package/dist/server/index.mjs.map +1 -0
  58. package/dist/server/logger/index.d.mts +34 -0
  59. package/dist/server/logger/index.d.ts +34 -0
  60. package/dist/server/logger/index.js +125 -0
  61. package/dist/server/logger/index.js.map +1 -0
  62. package/dist/server/logger/index.mjs +113 -0
  63. package/dist/server/logger/index.mjs.map +1 -0
  64. package/dist/server/middleware/index.d.mts +56 -0
  65. package/dist/server/middleware/index.d.ts +56 -0
  66. package/dist/server/middleware/index.js +128 -0
  67. package/dist/server/middleware/index.js.map +1 -0
  68. package/dist/server/middleware/index.mjs +118 -0
  69. package/dist/server/middleware/index.mjs.map +1 -0
  70. package/dist/server/response/index.d.mts +86 -0
  71. package/dist/server/response/index.d.ts +86 -0
  72. package/dist/server/response/index.js +140 -0
  73. package/dist/server/response/index.js.map +1 -0
  74. package/dist/server/response/index.mjs +126 -0
  75. package/dist/server/response/index.mjs.map +1 -0
  76. package/dist/server/utils/index.d.mts +69 -0
  77. package/dist/server/utils/index.d.ts +69 -0
  78. package/dist/server/utils/index.js +114 -0
  79. package/dist/server/utils/index.js.map +1 -0
  80. package/dist/server/utils/index.mjs +106 -0
  81. package/dist/server/utils/index.mjs.map +1 -0
  82. package/dist/shared/index.d.mts +4 -0
  83. package/dist/shared/index.d.ts +4 -0
  84. package/dist/shared/index.js +933 -0
  85. package/dist/shared/index.js.map +1 -0
  86. package/dist/shared/index.mjs +612 -0
  87. package/dist/shared/index.mjs.map +1 -0
  88. package/package.json +202 -0
@@ -0,0 +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","winston","DailyRotateFile","path","logger","mongoose","jwt","axios","statusCode","useCallback","useState","useEffect","useRef","query","addDays","addHours","addMinutes","addMonths","addWeeks","addYears","differenceInDays","differenceInHours","differenceInMinutes","differenceInMonths","differenceInSeconds","differenceInWeeks","differenceInYears","eachDayOfInterval","eachMonthOfInterval","eachWeekOfInterval","endOfDay","endOfMonth","endOfWeek","endOfYear","format","formatDate","formatDateTime","formatDistance","formatDistanceToNow","formatDuration","formatInTimeZone","formatRelative","formatRelativeTime","fromZonedTime","getDate","getDay","getHours","getMinutes","getMonth","getSeconds","getYear","intervalToDuration","isAfter","isBefore","isEqual","isFuture","isPast","isSameDay","isSameMonth","isSameWeek","isSameYear","isThisMonth","isThisWeek","isThisYear","isToday","isTomorrow","isValid","isYesterday","parseISO","setHours","setMinutes","setSeconds","startOfDay","startOfMonth","startOfWeek","startOfYear","subDays","subHours","subMinutes","subMonths","subWeeks","subYears","toZonedTime"],"mappings":"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","file":"index.js","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"]}