tailwind-to-style 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core/tws.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tailwind-to-style v3.2.2
2
+ * tailwind-to-style v3.3.0
3
3
  * Runtime Tailwind CSS to inline styles converter
4
4
  *
5
5
  * @author Bigetion
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tailwind-to-style v3.2.2
2
+ * tailwind-to-style v3.3.0
3
3
  * Runtime Tailwind CSS to inline styles converter
4
4
  *
5
5
  * @author Bigetion
@@ -1 +1 @@
1
- {"version":3,"file":"tws.esm.js","sources":["../../src/utils/tailwindCache.js","../../src/utils/logger.js","../../src/utils/errorHandler.js","../../src/utils/performanceMonitor.js","../../src/utils/lruCache.js","../../src/core/constants.js","../../src/css/resolver.js","../../src/css/parser.js","../../src/core/tws.js"],"sourcesContent":["/**\n * TailwindCache singleton for managing generated Tailwind CSS\n * Replaces global state with proper encapsulation\n */\nclass TailwindCache {\n constructor() {\n this.twString = null;\n this.cssObject = null;\n this.initialized = false;\n }\n\n /**\n * Get or generate the CSS object\n * @param {Function} generateFn - Function to generate CSS string\n * @param {Function} convertFn - Function to convert CSS string to object\n * @returns {Object} CSS object lookup\n */\n getOrGenerate(generateFn, convertFn) {\n if (!this.initialized) {\n this.twString = generateFn().replace(/\\s\\s+/g, \" \");\n this.cssObject = convertFn(this.twString);\n this.initialized = true;\n }\n return this.cssObject;\n }\n\n /**\n * Get the CSS string\n */\n getCssString() {\n return this.twString;\n }\n\n /**\n * Get the CSS object\n */\n getCssObject() {\n return this.cssObject;\n }\n\n /**\n * Check if cache is initialized\n */\n isInitialized() {\n return this.initialized;\n }\n\n /**\n * Reset the cache (useful for testing)\n */\n reset() {\n this.twString = null;\n this.cssObject = null;\n this.initialized = false;\n }\n}\n\n// Singleton instance\nlet instance = null;\n\n/**\n * Get the TailwindCache singleton instance\n * @returns {TailwindCache} The cache instance\n */\nexport function getTailwindCache() {\n if (!instance) {\n instance = new TailwindCache();\n }\n return instance;\n}\n\n/**\n * Reset the TailwindCache singleton (for testing)\n */\nexport function resetTailwindCache() {\n if (instance) {\n instance.reset();\n }\n instance = null;\n}\n\n// Export class for type checking\nexport { TailwindCache };\n","/**\n * Logger class with configurable log levels\n * Prevents console spam in production\n */\nclass Logger {\n constructor(level = \"warn\") {\n this.level = level;\n this.levels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n };\n }\n\n /**\n * Set the log level\n * @param {string} level - One of 'debug', 'info', 'warn', 'error', 'silent'\n */\n setLevel(level) {\n if (this.levels[level] !== undefined) {\n this.level = level;\n }\n }\n\n /**\n * Get current log level\n */\n getLevel() {\n return this.level;\n }\n\n /**\n * Check if a message should be logged\n */\n shouldLog(level) {\n return this.levels[level] >= this.levels[this.level];\n }\n\n /**\n * Log debug message\n */\n debug(message, ...args) {\n if (this.shouldLog(\"debug\")) {\n console.debug(`[twsx:debug] ${message}`, ...args);\n }\n }\n\n /**\n * Log info message\n */\n info(message, ...args) {\n if (this.shouldLog(\"info\")) {\n console.info(`[twsx:info] ${message}`, ...args);\n }\n }\n\n /**\n * Log warning message\n */\n warn(message, ...args) {\n if (this.shouldLog(\"warn\")) {\n console.warn(`[twsx:warn] ${message}`, ...args);\n }\n }\n\n /**\n * Log error message\n */\n error(message, ...args) {\n if (this.shouldLog(\"error\")) {\n console.error(`[twsx:error] ${message}`, ...args);\n }\n }\n}\n\n// Create singleton instance with silent defaults\n// Can be enabled via TWSX_LOG_LEVEL environment variable\nlet logLevel = \"silent\";\ntry {\n if (typeof process !== \"undefined\" && process && process.env) {\n // Allow explicit log level override via environment variable\n // e.g., TWSX_LOG_LEVEL=debug or TWSX_LOG_LEVEL=warn\n logLevel = process.env.TWSX_LOG_LEVEL || \"silent\";\n }\n} catch {\n // Silently fail - in browser environment, default to silent\n logLevel = \"silent\";\n}\n\nexport const logger = new Logger(logLevel);\n\n// Export Logger class for custom instances\nexport { Logger };\n","import { logger } from \"./logger.js\";\n\n/**\n * Custom error class for tailwind-to-style\n */\nexport class TwsError extends Error {\n constructor(message, context = {}) {\n super(message);\n this.name = \"TwsError\";\n this.context = context;\n this.timestamp = new Date().toISOString();\n }\n}\n\n/**\n * Error event handlers\n */\nconst errorHandlers = new Set();\n\n/**\n * Register an error handler\n * @param {Function} handler - Function to call when errors occur\n * @returns {Function} Unsubscribe function\n */\nexport function onError(handler) {\n if (typeof handler !== \"function\") {\n throw new TypeError(\"Error handler must be a function\");\n }\n\n errorHandlers.add(handler);\n\n // Return unsubscribe function\n return () => errorHandlers.delete(handler);\n}\n\n/**\n * Handle and broadcast errors\n * @param {Error} error - The error that occurred\n * @param {Object} context - Additional context about the error\n */\nexport function handleError(error, context = {}) {\n const twsError =\n error instanceof TwsError ? error : new TwsError(error.message, context);\n\n // Log the error\n logger.error(twsError.message, twsError.context);\n\n // Notify all registered handlers\n errorHandlers.forEach((handler) => {\n try {\n handler(twsError);\n } catch (handlerError) {\n logger.error(\"Error in error handler:\", handlerError);\n }\n });\n\n return twsError;\n}\n\n/**\n * Clear all error handlers\n */\nexport function clearErrorHandlers() {\n errorHandlers.clear();\n}\n\n/**\n * Get number of registered error handlers\n */\nexport function getErrorHandlerCount() {\n return errorHandlers.size;\n}\n","/**\r\n * Performance Monitoring Utilities\r\n * \r\n * Tracks and logs performance metrics for optimization analysis.\r\n * \r\n * @module utils/performanceMonitor\r\n */\r\n\r\nimport { logger } from \"./logger.js\";\r\n\r\n/**\r\n * Performance monitoring system\r\n * \r\n * Provides start/end timing and automatic slow operation logging.\r\n */\r\nexport const performanceMonitor = {\r\n enabled: typeof performance !== \"undefined\",\r\n\r\n /**\r\n * Start performance measurement\r\n * \r\n * @param {string} label - Label for the measurement\r\n * @returns {Object|null} Marker object with label and start time\r\n */\r\n start(label) {\r\n if (!this.enabled) return null;\r\n return {\r\n label,\r\n startTime: performance.now(),\r\n };\r\n },\r\n\r\n /**\r\n * End performance measurement and log if slow\r\n * \r\n * @param {Object} marker - Marker from start()\r\n */\r\n end(marker) {\r\n if (!this.enabled || !marker) return;\r\n const duration = performance.now() - marker.startTime;\r\n if (duration > 5) {\r\n // Only log if > 5ms\r\n logger.warn(`Slow ${marker.label}: ${duration.toFixed(2)}ms`);\r\n }\r\n },\r\n\r\n /**\r\n * Measure function execution time\r\n * \r\n * @param {Function} fn - Function to measure\r\n * @param {string} label - Label for measurement\r\n * @returns {*} Function result\r\n */\r\n measure(fn, label) {\r\n const marker = this.start(label);\r\n try {\r\n const result = fn();\r\n this.end(marker);\r\n return result;\r\n } catch (error) {\r\n this.end(marker);\r\n throw error;\r\n }\r\n },\r\n};\r\n","/**\n * Proper LRU (Least Recently Used) Cache implementation\n * Efficiently manages memory by removing least recently used items\n */\nexport class LRUCache {\n constructor(maxSize = 1000) {\n this.maxSize = maxSize;\n this.cache = new Map();\n }\n\n /**\n * Get value from cache\n * Updates the item as most recently used\n */\n get(key) {\n if (!this.cache.has(key)) {\n return undefined;\n }\n\n const value = this.cache.get(key);\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n return value;\n }\n\n /**\n * Set value in cache\n * Removes least recently used item if cache is full\n */\n set(key, value) {\n // If key exists, delete it first to update position\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n this.cache.delete(firstKey);\n }\n\n this.cache.set(key, value);\n }\n\n /**\n * Check if key exists in cache\n */\n has(key) {\n return this.cache.has(key);\n }\n\n /**\n * Clear all cache entries\n */\n clear() {\n this.cache.clear();\n }\n\n /**\n * Get current cache size\n */\n get size() {\n return this.cache.size;\n }\n\n /**\n * Delete specific key\n */\n delete(key) {\n return this.cache.delete(key);\n }\n}\n","/**\r\n * Pre-compiled Regex Constants and Configuration\r\n * \r\n * Pre-compiling regex patterns provides 50-100x performance improvement\r\n * by avoiding repeated regex object creation in hot code paths.\r\n * \r\n * @module core/constants\r\n */\r\n\r\n// ============================================================================\r\n// CLASS PARSING\r\n// ============================================================================\r\n\r\n/** Regex for parsing Tailwind class names (includes . for decimal values like p-0.5) */\r\nexport const CLASS_PARSER_REGEX = /[\\w.\\-\\/]+(?:\\/\\d+)?(?:\\[[^\\]]+\\])?/g;\r\n\r\n// ============================================================================\r\n// OPACITY MODIFIERS\r\n// ============================================================================\r\n\r\n/** Regex for extracting opacity modifiers (e.g., /50 in text-red-500/50) */\r\nexport const OPACITY_MODIFIER_REGEX = /\\/(\\d+)$/;\r\n\r\n/** Pre-compiled regex patterns for opacity CSS custom properties */\r\nexport const OPACITY_PROP_REGEXES = {\r\n \"--text-opacity\": /--text-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--bg-opacity\": /--bg-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--border-opacity\": /--border-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--ring-opacity\": /--ring-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--divide-opacity\": /--divide-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--placeholder-opacity\": /--placeholder-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--text-decoration-opacity\": /--text-decoration-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--outline-opacity\": /--outline-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--accent-opacity\": /--accent-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--caret-opacity\": /--caret-opacity\\s*:\\s*[\\d.]+/gi,\r\n};\r\n\r\n// ============================================================================\r\n// CSS PARSING\r\n// ============================================================================\r\n\r\n/** Regex for parsing CSS class rules */\r\nexport const CSS_CLASS_REGEX = /([a-zA-Z0-9\\-_\\\\/.]+)\\s*{\\s*([^}]+)\\s*}/g;\r\n\r\n/** Regex for CSS string manipulation */\r\nexport const DOUBLE_BACKSLASH_REGEX = /\\\\\\\\/g;\r\nexport const LEADING_UNDERSCORE_REGEX = /^_/;\r\nexport const MULTIPLE_SPACES_REGEX = /\\s+/g;\r\n\r\n/** Regex for CSS declarations */\r\nexport const CSS_SEMICOLON_SPLIT_REGEX = /;/;\r\nexport const CSS_COLON_SPLIT_REGEX = /:/;\r\n\r\n// ============================================================================\r\n// BRACKET ENCODING/DECODING\r\n// ============================================================================\r\n\r\n/** Regex for bracket content extraction and encoding */\r\nexport const BRACKET_CONTENT_REGEX = /\\[([^\\]]+)\\]/g;\r\nexport const OPENING_PAREN_REGEX = /\\(/g;\r\nexport const CLOSING_PAREN_REGEX = /\\)/g;\r\nexport const ENCODED_PAREN_OPEN_REGEX = /__P__/g;\r\nexport const ENCODED_PAREN_CLOSE_REGEX = /__C__/g;\r\n\r\n// ============================================================================\r\n// VARIANT EXPANSION\r\n// ============================================================================\r\n\r\n/** Regex for directive group expansion (e.g., p(4 8) -> p-4 p-8) */\r\nexport const DIRECTIVE_GROUP_REGEX = /(\\w+)\\(([^()]+)\\)/g;\r\n\r\n/** Regex for variant group expansion (e.g., hover:(text-blue bg-blue)) */\r\nexport const VARIANT_GROUP_REGEX = /(\\w+):\\(([^()]+(?:\\((?:[^()]+)\\))?[^()]*)\\)/g;\r\n\r\nexport const WHITESPACE_SPLIT_REGEX = /\\s+/;\r\nexport const VARIANT_COLON_SPLIT_REGEX = /:/;\r\n\r\n// ============================================================================\r\n// CSS VARIABLE RESOLUTION\r\n// ============================================================================\r\n\r\n/** Regex for CSS custom property (var) resolution — supports nested parens in fallback (e.g. rgba(...)) */\r\nexport const CSS_VAR_REGEX = /var\\((--[\\w-]+)(?:,\\s*((?:[^()]+|\\([^()]*\\))*))?\\)/g;\r\nexport const CAMEL_CASE_REGEX = /-([a-z])/g;\r\n\r\n// ============================================================================\r\n// ANIMATION DETECTION\r\n// ============================================================================\r\n\r\n/** Regex for detecting animation names in CSS */\r\nexport const ANIMATION_NAME_REGEX = /animation(?:-name)?:\\s*([a-zA-Z0-9-]+)/gi;\r\n\r\n// ============================================================================\r\n// CUSTOM CLASS DETECTION\r\n// ============================================================================\r\n\r\n/** Regex for arbitrary value detection (e.g., w-[123px]) */\r\nexport const CUSTOM_VALUE_BRACKET_REGEX = /\\[([^\\]]+)\\]/;\r\nexport const CUSTOM_VALUE_FULL_REGEX = /^(.+?)\\[(.+)\\]$/;\r\n\r\n// ============================================================================\r\n// SELECTOR VARIANTS\r\n// ============================================================================\r\n\r\n/** Regex for selector variants (e.g., c-first, c-odd) */\r\nexport const SELECTOR_VARIANT_REGEX = /c-(first|last|odd|even|\\d+|not\\([^)]+\\))/g;\r\nexport const NOT_SELECTOR_REGEX = /^not\\(([^)]+)\\)$/;\r\nexport const DIGIT_ONLY_REGEX = /^\\d+$/;\r\n\r\n// ============================================================================\r\n// COLOR PROPERTIES\r\n// ============================================================================\r\n\r\n/** List of CSS properties that accept color values */\r\nexport const COLOR_PROPERTIES = [\r\n \"color\",\r\n \"background-color\",\r\n \"border-color\",\r\n \"text-decoration-color\",\r\n \"outline-color\",\r\n \"fill\",\r\n \"stroke\",\r\n \"caret-color\",\r\n \"accent-color\",\r\n];\r\n\r\n/**\r\n * Pre-compiled regex patterns for each color property\r\n * Used in opacity modifier processing for 50-100x performance improvement\r\n */\r\nexport const COLOR_REGEX_PATTERNS = new Map();\r\nfor (const prop of COLOR_PROPERTIES) {\r\n const escapedProp = prop.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n COLOR_REGEX_PATTERNS.set(prop, {\r\n rgb: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)rgb\\\\((\\\\d+),\\\\s*(\\\\d+),\\\\s*(\\\\d+)\\\\)`,\r\n \"gi\"\r\n ),\r\n rgba: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)rgba\\\\((\\\\d+),\\\\s*(\\\\d+),\\\\s*(\\\\d+),\\\\s*[\\\\d.]+\\\\)`,\r\n \"gi\"\r\n ),\r\n hsl: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)hsl\\\\((\\\\d+),\\\\s*([\\\\d.]+%),\\\\s*([\\\\d.]+%)\\\\)`,\r\n \"gi\"\r\n ),\r\n hsla: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)hsla\\\\((\\\\d+),\\\\s*([\\\\d.]+%),\\\\s*([\\\\d.]+%),\\\\s*[\\\\d.]+\\\\)`,\r\n \"gi\"\r\n ),\r\n hex: new RegExp(`(${escapedProp}\\\\s*:\\\\s*)(#[0-9a-fA-F]{3,6})`, \"gi\"),\r\n });\r\n}\r\n\r\n// ============================================================================\r\n// CSS PROPERTY CONVERSION\r\n// ============================================================================\r\n\r\n/** Regex for converting camelCase to kebab-case */\r\nexport const UPPERCASE_LETTER_REGEX = /([A-Z])/g;\r\n\r\n/** Regex for escaping special characters */\r\nexport const ESCAPE_SLASH_REGEX = /\\//g;\r\nexport const ESCAPE_DOT_REGEX = /\\./g;\r\n\r\n// ============================================================================\r\n// TAILWIND CONFIGURATION\r\n// ============================================================================\r\n\r\n/** Fraction denominators supported in Tailwind (for w-1/2, h-2/3, etc.) */\r\nexport const FRACTION_DENOMINATORS = [2, 3, 4, 5, 6, 12];\r\n\r\n/** Prefixes that support fractional values */\r\nexport const FRACTION_PREFIXES = [\r\n \"w-\",\r\n \"h-\",\r\n \"max-w-\",\r\n \"max-h-\",\r\n \"min-w-\",\r\n \"min-h-\",\r\n \"top-\",\r\n \"bottom-\",\r\n \"left-\",\r\n \"right-\",\r\n \"inset-\",\r\n \"inset-x-\",\r\n \"inset-y-\",\r\n \"translate-x-\",\r\n \"translate-y-\",\r\n \"rounded-t-\",\r\n \"rounded-b-\",\r\n \"rounded-l-\",\r\n \"rounded-r-\",\r\n \"rounded-bl-\",\r\n \"rounded-br-\",\r\n \"rounded-tl-\",\r\n \"rounded-tr-\",\r\n \"flex-basis-\",\r\n \"z-\",\r\n];\r\n\r\n/** Responsive breakpoints */\r\nexport const BREAKPOINTS = {\r\n sm: \"@media (min-width: 640px)\",\r\n md: \"@media (min-width: 768px)\",\r\n lg: \"@media (min-width: 1024px)\",\r\n xl: \"@media (min-width: 1280px)\",\r\n \"2xl\": \"@media (min-width: 1536px)\",\r\n};\r\n\r\n/** Pseudo-class variants */\r\nexport const PSEUDO_VARIANTS = new Set([\r\n \"hover\",\r\n \"focus\",\r\n \"focus-within\",\r\n \"active\",\r\n \"visited\",\r\n \"disabled\",\r\n \"first\",\r\n \"last\",\r\n \"checked\",\r\n \"invalid\",\r\n \"required\",\r\n]);\r\n\r\n/** Special variant handlers */\r\nexport const SPECIAL_VARIANTS = {\r\n group: (state, sel) => `.group:${state} ${sel}`,\r\n peer: (state, sel) => `.peer:${state} ~ ${sel}`,\r\n dark: (state, sel) => `.dark ${sel}`,\r\n};\r\n\r\n/** Selector variants for child selection */\r\nexport const SELECTOR_VARIANTS = {\r\n first: () => \"> :first-child\",\r\n last: () => \"> :last-child\",\r\n odd: () => \"> :nth-child(odd)\",\r\n even: () => \"> :nth-child(even)\",\r\n not: (arg) => `> :not(${arg})`,\r\n number: (arg) => `> :nth-child(${arg})`,\r\n};\r\n\r\n// ============================================================================\r\n// ANIMATION KEYFRAMES\r\n// ============================================================================\r\n\r\n/** Built-in Tailwind animation keyframes */\r\nexport const BUILTIN_KEYFRAMES = {\r\n spin: {\r\n \"0%\": { transform: \"rotate(0deg)\" },\r\n \"100%\": { transform: \"rotate(360deg)\" },\r\n },\r\n ping: {\r\n \"75%, 100%\": { transform: \"scale(2)\", opacity: \"0\" },\r\n },\r\n pulse: {\r\n \"50%\": { opacity: \".5\" },\r\n },\r\n bounce: {\r\n \"0%, 100%\": {\r\n transform: \"translateY(-25%)\",\r\n animationTimingFunction: \"cubic-bezier(0.8,0,1,1)\",\r\n },\r\n \"50%\": {\r\n transform: \"none\",\r\n animationTimingFunction: \"cubic-bezier(0,0,0.2,1)\",\r\n },\r\n },\r\n fadeIn: {\r\n \"0%\": { opacity: \"0\" },\r\n \"50%\": { opacity: \"1\" },\r\n \"100%\": { opacity: \"0\" },\r\n },\r\n slideUp: {\r\n \"0%\": { transform: \"translateY(20px)\", opacity: \"0\" },\r\n \"50%\": { transform: \"translateY(0)\", opacity: \"1\" },\r\n \"100%\": { transform: \"translateY(-20px)\", opacity: \"0\" },\r\n },\r\n};\r\n","/**\r\n * CSS Resolution Utilities\r\n * \r\n * Handles CSS custom property (var) resolution, CSS declaration parsing,\r\n * and conversion between different CSS formats.\r\n * \r\n * @module css/resolver\r\n */\r\n\r\nimport { LRUCache } from \"../utils/lruCache.js\";\r\nimport { logger } from \"../utils/logger.js\";\r\nimport {\r\n CSS_SEMICOLON_SPLIT_REGEX,\r\n CSS_COLON_SPLIT_REGEX,\r\n CSS_VAR_REGEX,\r\n CAMEL_CASE_REGEX,\r\n} from \"../core/constants.js\";\r\n\r\n// Cache for CSS resolution\r\nconst cssResolutionCache = new LRUCache(1000);\r\n\r\n/**\r\n * Resolve all CSS custom properties (var) in a CSS string\r\n * \r\n * Optimized with for loops and indexOf for 2-3x better performance.\r\n * Converts CSS with custom properties to clear CSS with resolved values.\r\n * \r\n * @param {string} cssString - CSS string with potential var() references\r\n * @returns {string} Resolved CSS string (e.g., 'color: rgba(255,255,255,1); background: #fff;')\r\n * \r\n * @example\r\n * resolveCssToClearCss('color: var(--text-color); --text-color: red;')\r\n * // Returns: 'color: red;'\r\n */\r\nexport function resolveCssToClearCss(cssString) {\r\n const customVars = {};\r\n const props = {};\r\n\r\n // Split by semicolon and process declarations\r\n const declarations = cssString.split(CSS_SEMICOLON_SPLIT_REGEX);\r\n for (let i = 0; i < declarations.length; i++) {\r\n const decl = declarations[i];\r\n if (!decl) continue;\r\n\r\n const colonIndex = decl.indexOf(\":\");\r\n if (colonIndex === -1) continue;\r\n\r\n const key = decl.substring(0, colonIndex).trim();\r\n const value = decl.substring(colonIndex + 1).trim();\r\n\r\n if (!key || !value) continue;\r\n\r\n if (key.startsWith(\"--\")) {\r\n customVars[key] = value;\r\n } else {\r\n props[key] = value;\r\n }\r\n }\r\n\r\n // Replace var(--foo) in all values using pre-compiled regex\r\n const propKeys = Object.keys(props);\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n let val = props[key];\r\n if (val.includes(\"var(\")) {\r\n CSS_VAR_REGEX.lastIndex = 0;\r\n val = val.replace(CSS_VAR_REGEX, (m, varName) =>\r\n customVars[varName] !== undefined ? customVars[varName] : m\r\n );\r\n props[key] = val;\r\n }\r\n }\r\n\r\n // Build CSS string - INCLUDE CSS variables so they can be resolved later\r\n let result = \"\";\r\n const varKeys = Object.keys(customVars);\r\n for (let i = 0; i < varKeys.length; i++) {\r\n const key = varKeys[i];\r\n result += `${key}: ${customVars[key]}; `;\r\n }\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n result += `${key}: ${props[key]}; `;\r\n }\r\n\r\n return result.trim();\r\n}\r\n\r\n/**\r\n * Separate and resolve CSS declarations with custom property resolution\r\n * \r\n * Enhanced with caching and better error handling for production use.\r\n * \r\n * @param {string[]} arr - Array of CSS declaration strings\r\n * @returns {string} Resolved CSS string with all variables replaced\r\n * \r\n * @example\r\n * separateAndResolveCSS(['color: var(--text); --text: blue;', 'margin: 1rem;'])\r\n * // Returns: 'color: blue; margin: 1rem;'\r\n */\r\nexport function separateAndResolveCSS(arr) {\r\n try {\r\n // Fix: cacheKey must be unique for each input array\r\n const cacheKey = Array.isArray(arr) ? arr.join(\"|\") : String(arr);\r\n if (cssResolutionCache.has(cacheKey)) {\r\n return cssResolutionCache.get(cacheKey);\r\n }\r\n\r\n // Process CSS resolution\r\n const cssProperties = {};\r\n for (let i = 0; i < arr.length; i++) {\r\n const item = arr[i];\r\n if (!item) continue;\r\n\r\n try {\r\n const declarations = item.split(CSS_SEMICOLON_SPLIT_REGEX);\r\n\r\n for (let j = 0; j < declarations.length; j++) {\r\n const decl = declarations[j].trim();\r\n if (!decl) continue;\r\n\r\n const colonIndex = decl.indexOf(\":\");\r\n if (colonIndex === -1) continue;\r\n\r\n const prop = decl.substring(0, colonIndex).trim();\r\n const value = decl.substring(colonIndex + 1).trim();\r\n\r\n if (!prop || !value) continue;\r\n\r\n // Keep 3-stop gradient (with via) — don't let from/to overwrite it\r\n if (\r\n prop === \"--gradient-color-stops\" &&\r\n cssProperties[prop] &&\r\n cssProperties[prop].includes(\"--gradient-via-color\") &&\r\n !value.includes(\"--gradient-via-color\")\r\n ) {\r\n continue;\r\n }\r\n cssProperties[prop] = value;\r\n }\r\n } catch (error) {\r\n logger.warn(\"Error processing CSS declaration:\", item, error);\r\n }\r\n }\r\n\r\n const resolvedProperties = { ...cssProperties };\r\n\r\n /**\r\n * Optimized CSS variable resolution using regex-based approach\r\n * 2-3x faster than manual char-by-char parsing\r\n * Handles nested var() with fallback values\r\n */\r\n const resolveValue = (value, variables, maxDepth = 10) => {\r\n if (!value || !value.includes(\"var(\") || maxDepth <= 0) return value;\r\n\r\n try {\r\n let resolved = value;\r\n\r\n // Iteratively resolve variables until no more changes or max depth reached\r\n for (let depth = 0; depth < maxDepth; depth++) {\r\n let changed = false;\r\n CSS_VAR_REGEX.lastIndex = 0;\r\n\r\n resolved = resolved.replace(CSS_VAR_REGEX, (match, varName, fallback) => {\r\n // Check if variable exists in our resolved properties\r\n if (variables[varName] !== undefined) {\r\n changed = true;\r\n return variables[varName];\r\n }\r\n\r\n // If fallback is provided, use it\r\n if (fallback !== undefined) {\r\n changed = true;\r\n return fallback.trim();\r\n }\r\n\r\n // Keep the var() reference if not found\r\n return match;\r\n });\r\n\r\n // If nothing changed, we're done\r\n if (!changed) break;\r\n }\r\n\r\n return resolved;\r\n } catch (error) {\r\n logger.warn(\"Error resolving CSS variable:\", value, error);\r\n return value;\r\n }\r\n };\r\n\r\n // Resolve variables recursively - multiple passes with optimized loop\r\n let maxPasses = 5;\r\n let hasUnresolved = true;\r\n\r\n while (hasUnresolved && maxPasses-- > 0) {\r\n hasUnresolved = false;\r\n const propKeys = Object.keys(resolvedProperties);\r\n\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n const resolved = resolveValue(\r\n resolvedProperties[key],\r\n resolvedProperties\r\n );\r\n\r\n if (resolved !== resolvedProperties[key]) {\r\n resolvedProperties[key] = resolved;\r\n hasUnresolved = true;\r\n }\r\n }\r\n }\r\n\r\n // Remove CSS variables after resolution using optimized loop\r\n const allKeys = Object.keys(resolvedProperties);\r\n for (let i = 0; i < allKeys.length; i++) {\r\n const key = allKeys[i];\r\n if (key.startsWith(\"--\")) {\r\n delete resolvedProperties[key];\r\n }\r\n }\r\n\r\n // Build result string with optimized loop (faster than map/join)\r\n let result = \"\";\r\n const finalKeys = Object.keys(resolvedProperties);\r\n for (let i = 0; i < finalKeys.length; i++) {\r\n const key = finalKeys[i];\r\n result += `${key}: ${resolvedProperties[key]}; `;\r\n }\r\n result = result.trim();\r\n\r\n cssResolutionCache.set(cacheKey, result);\r\n return result;\r\n } catch (error) {\r\n logger.error(\"Critical error in CSS resolution:\", error);\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Convert inline CSS string to JavaScript object with camelCase properties\r\n * \r\n * Resolves CSS custom properties recursively before conversion.\r\n * \r\n * @param {string} styleString - Inline CSS string (e.g., 'color: red; margin: 1rem;')\r\n * @returns {Object} Style object with camelCase keys\r\n * \r\n * @example\r\n * inlineStyleToJson('color: red; font-size: 16px;')\r\n * // Returns: { color: 'red', fontSize: '16px' }\r\n */\r\nexport function inlineStyleToJson(styleString) {\r\n const styles = styleString\r\n .split(CSS_SEMICOLON_SPLIT_REGEX)\r\n .filter((style) => style.trim() !== \"\");\r\n const styleObject = {};\r\n const cssVariables = {};\r\n\r\n // First pass: collect CSS variables\r\n for (let i = 0; i < styles.length; i++) {\r\n const parts = styles[i].split(CSS_COLON_SPLIT_REGEX, 2);\r\n if (parts.length !== 2) continue;\r\n const key = parts[0].trim();\r\n const value = parts[1].trim();\r\n if (key && key.startsWith(\"--\")) {\r\n cssVariables[key] = value;\r\n }\r\n }\r\n\r\n // Helper to resolve CSS variables recursively\r\n const resolveVariables = (value) => {\r\n if (!value || !value.includes(\"var(\")) return value;\r\n\r\n let resolved = value;\r\n let maxIterations = 10; // Prevent infinite loops\r\n\r\n while (resolved.includes(\"var(\") && maxIterations-- > 0) {\r\n CSS_VAR_REGEX.lastIndex = 0; // Reset global regex\r\n resolved = resolved.replace(\r\n CSS_VAR_REGEX,\r\n (match, variable, fallback) => {\r\n return cssVariables[variable] || fallback || match;\r\n }\r\n );\r\n }\r\n\r\n return resolved;\r\n };\r\n\r\n // Second pass: create style object with resolved values\r\n for (let i = 0; i < styles.length; i++) {\r\n const parts = styles[i].split(CSS_COLON_SPLIT_REGEX, 2);\r\n if (parts.length !== 2) continue;\r\n const key = parts[0].trim();\r\n const value = parts[1].trim();\r\n if (key && value && !key.startsWith(\"--\")) {\r\n const camelCaseKey = key.replace(CAMEL_CASE_REGEX, (_, letter) =>\r\n letter.toUpperCase()\r\n );\r\n styleObject[camelCaseKey] = resolveVariables(value);\r\n }\r\n }\r\n\r\n return styleObject;\r\n}\r\n","/**\r\n * CSS Parser Utilities\r\n * \r\n * Handles parsing of Tailwind class names, opacity modifiers,\r\n * bracket value encoding/decoding, and custom value extraction.\r\n * \r\n * @module css/parser\r\n */\r\n\r\nimport { LRUCache } from \"../utils/lruCache.js\";\r\nimport {\r\n OPACITY_MODIFIER_REGEX,\r\n OPACITY_PROP_REGEXES,\r\n COLOR_PROPERTIES,\r\n COLOR_REGEX_PATTERNS,\r\n BRACKET_CONTENT_REGEX,\r\n OPENING_PAREN_REGEX,\r\n CLOSING_PAREN_REGEX,\r\n ENCODED_PAREN_OPEN_REGEX,\r\n ENCODED_PAREN_CLOSE_REGEX,\r\n DIRECTIVE_GROUP_REGEX,\r\n VARIANT_GROUP_REGEX,\r\n WHITESPACE_SPLIT_REGEX,\r\n VARIANT_COLON_SPLIT_REGEX,\r\n SELECTOR_VARIANT_REGEX,\r\n NOT_SELECTOR_REGEX,\r\n DIGIT_ONLY_REGEX,\r\n SELECTOR_VARIANTS,\r\n UPPERCASE_LETTER_REGEX,\r\n} from \"../core/constants.js\";\r\n\r\n// Caches for bracket encoding/decoding\r\nconst encodeBracketCache = new LRUCache(1000);\r\nconst decodeBracketCache = new LRUCache(1000);\r\n\r\n/**\r\n * Process opacity modifier from class name\r\n * \r\n * Converts opacity modifiers (e.g., text-red-500/50) to actual CSS opacity values.\r\n * Handles rgb, rgba, hsl, hsla, and hex color formats.\r\n * \r\n * @param {string} className - Class name with potential opacity modifier\r\n * @param {string} cssDeclaration - CSS declaration to modify\r\n * @returns {string} Modified CSS declaration with opacity applied\r\n * \r\n * @example\r\n * processOpacityModifier('text-red-500/50', 'color: rgb(239, 68, 68);')\r\n * // Returns: 'color: rgba(239, 68, 68, 0.5);'\r\n */\r\nexport function processOpacityModifier(className, cssDeclaration) {\r\n const opacityMatch = OPACITY_MODIFIER_REGEX.exec(className);\r\n if (!opacityMatch) return cssDeclaration;\r\n\r\n const opacityValue = parseInt(opacityMatch[1], 10);\r\n if (opacityValue < 0 || opacityValue > 100) return cssDeclaration;\r\n\r\n const alphaValue = (opacityValue / 100).toString();\r\n\r\n // Handle Tailwind's CSS custom property pattern\r\n let modifiedDeclaration = cssDeclaration;\r\n\r\n // Replace opacity custom properties using pre-compiled regexes\r\n for (const prop in OPACITY_PROP_REGEXES) {\r\n const regex = OPACITY_PROP_REGEXES[prop];\r\n regex.lastIndex = 0; // Reset global regex\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n regex,\r\n `${prop}: ${alphaValue}`\r\n );\r\n }\r\n\r\n // Also handle direct color values using pre-compiled regex patterns\r\n for (const prop of COLOR_PROPERTIES) {\r\n const patterns = COLOR_REGEX_PATTERNS.get(prop);\r\n if (!patterns) continue;\r\n\r\n // Reset all regex lastIndex for reuse\r\n patterns.rgb.lastIndex = 0;\r\n patterns.rgba.lastIndex = 0;\r\n patterns.hsl.lastIndex = 0;\r\n patterns.hsla.lastIndex = 0;\r\n patterns.hex.lastIndex = 0;\r\n\r\n // Convert rgb to rgba with opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.rgb,\r\n `$1rgba($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Update existing rgba opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.rgba,\r\n `$1rgba($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Convert hsl to hsla with opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hsl,\r\n `$1hsla($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Update existing hsla opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hsla,\r\n `$1hsla($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Handle hex colors - convert to rgba\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hex,\r\n (match, propPart, hexColor) => {\r\n // Convert hex to rgba\r\n const hex = hexColor.replace(\"#\", \"\");\r\n let r, g, b;\r\n\r\n if (hex.length === 3) {\r\n r = parseInt(hex[0] + hex[0], 16);\r\n g = parseInt(hex[1] + hex[1], 16);\r\n b = parseInt(hex[2] + hex[2], 16);\r\n } else {\r\n r = parseInt(hex.substring(0, 2), 16);\r\n g = parseInt(hex.substring(2, 4), 16);\r\n b = parseInt(hex.substring(4, 6), 16);\r\n }\r\n\r\n return `${propPart}rgba(${r}, ${g}, ${b}, ${alphaValue})`;\r\n }\r\n );\r\n }\r\n\r\n return modifiedDeclaration;\r\n}\r\n\r\n/**\r\n * Encode bracket values for safe processing\r\n * \r\n * Encodes parentheses inside bracket values to prevent parsing conflicts.\r\n * Uses LRU cache for performance.\r\n * \r\n * @param {string} input - String with bracket values\r\n * @returns {string} Encoded string\r\n * \r\n * @example\r\n * encodeBracketValues('w-[calc(100%-20px)]')\r\n * // Returns: 'w-[calc__P__100%25-20px__C__]'\r\n */\r\nexport function encodeBracketValues(input) {\r\n if (!input) return input;\r\n if (encodeBracketCache.has(input)) return encodeBracketCache.get(input);\r\n\r\n BRACKET_CONTENT_REGEX.lastIndex = 0; // Reset global regex\r\n const result = input.replace(BRACKET_CONTENT_REGEX, (_, content) => {\r\n const encoded = encodeURIComponent(content)\r\n .replace(OPENING_PAREN_REGEX, \"__P__\")\r\n .replace(CLOSING_PAREN_REGEX, \"__C__\");\r\n return `[${encoded}]`;\r\n });\r\n\r\n encodeBracketCache.set(input, result);\r\n return result;\r\n}\r\n\r\n/**\r\n * Decode bracket values back to original form\r\n * \r\n * Reverses the encoding applied by encodeBracketValues.\r\n * Uses LRU cache for performance.\r\n * \r\n * @param {string} input - Encoded string\r\n * @returns {string} Decoded string\r\n * \r\n * @example\r\n * decodeBracketValues('w-[calc__P__100%25-20px__C__]')\r\n * // Returns: 'w-[calc(100%-20px)]'\r\n */\r\nexport function decodeBracketValues(input) {\r\n if (!input) return input;\r\n if (decodeBracketCache.has(input)) return decodeBracketCache.get(input);\r\n\r\n const result = decodeURIComponent(input)\r\n .replace(ENCODED_PAREN_OPEN_REGEX, \"(\")\r\n .replace(ENCODED_PAREN_CLOSE_REGEX, \")\");\r\n\r\n decodeBracketCache.set(input, result);\r\n return result;\r\n}\r\n\r\n/**\r\n * Replace selector variants with actual CSS selectors\r\n * \r\n * Converts Tailwind selector variants (c-first, c-odd, etc.) to CSS pseudo-selectors.\r\n * \r\n * @param {string} selector - Selector string with potential c- variants\r\n * @returns {string} Selector with CSS pseudo-selectors\r\n * \r\n * @example\r\n * replaceSelector('.card c-first')\r\n * // Returns: '.card > :first-child'\r\n */\r\nexport function replaceSelector(selector) {\r\n SELECTOR_VARIANT_REGEX.lastIndex = 0; // Reset global regex\r\n return selector.replace(SELECTOR_VARIANT_REGEX, (_, raw) => {\r\n if (DIGIT_ONLY_REGEX.test(raw)) return SELECTOR_VARIANTS.number(raw);\r\n const notMatch = raw.match(NOT_SELECTOR_REGEX);\r\n if (notMatch) return SELECTOR_VARIANTS.not(notMatch[1]);\r\n if (SELECTOR_VARIANTS[raw]) return SELECTOR_VARIANTS[raw]();\r\n return raw;\r\n });\r\n}\r\n\r\n/**\r\n * Expand directive groups into individual classes\r\n * \r\n * Converts grouped directives (e.g., p(4 8)) into individual classes (p-4 p-8).\r\n * \r\n * @param {string} str - String with potential directive groups\r\n * @returns {string} Expanded string\r\n * \r\n * @example\r\n * expandDirectiveGroups('p(4 8) m(2)')\r\n * // Returns: 'p-4 p-8 m-2'\r\n */\r\nexport function expandDirectiveGroups(str) {\r\n DIRECTIVE_GROUP_REGEX.lastIndex = 0; // Reset global regex\r\n return str.replace(DIRECTIVE_GROUP_REGEX, (_, directive, content) => {\r\n // Special handling for dark mode syntax: dark:(classes)\r\n if (directive === \"dark\") {\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((cls) => `dark:${cls}`)\r\n .join(\" \");\r\n }\r\n\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((val) => {\r\n if (val.includes(\":\")) {\r\n const parts = val.split(VARIANT_COLON_SPLIT_REGEX);\r\n const variant = parts[0];\r\n const v = parts[1];\r\n const prefix = v.startsWith(\"-\") ? \"-\" : \"\";\r\n const value = v.startsWith(\"-\") ? v.slice(1) : v;\r\n return `${variant}:${prefix}${directive}-${value}`;\r\n }\r\n const prefix = val.startsWith(\"-\") ? \"-\" : \"\";\r\n const value = val.startsWith(\"-\") ? val.slice(1) : val;\r\n return `${prefix}${directive}-${value}`;\r\n })\r\n .join(\" \");\r\n });\r\n}\r\n\r\n/**\r\n * Expand variant groups into individual variants\r\n * \r\n * Converts grouped variants (e.g., hover:(text-blue bg-blue)) into individual classes.\r\n * \r\n * @param {string} str - String with potential variant groups\r\n * @param {string} parent - Parent variant to prepend\r\n * @returns {string} Expanded string\r\n * \r\n * @example\r\n * expandVariants('hover:(text-blue bg-white)')\r\n * // Returns: 'hover:text-blue hover:bg-white'\r\n */\r\nexport function expandVariants(str, parent = \"\") {\r\n VARIANT_GROUP_REGEX.lastIndex = 0; // Reset global regex\r\n return str.replace(VARIANT_GROUP_REGEX, (_, variant, content) => {\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((c) => {\r\n if (/\\w+:\\(.*\\)/.test(c)) {\r\n return expandVariants(c, parent ? `${parent}:${variant}` : variant);\r\n }\r\n return `${parent ? `${parent}:${variant}` : variant}:${c}`;\r\n })\r\n .join(\" \");\r\n });\r\n}\r\n\r\n/**\r\n * Expand grouped class syntax recursively\r\n * \r\n * Handles both directive groups and variant groups.\r\n * Encodes bracket values before processing to avoid conflicts.\r\n * \r\n * @param {string} input - Input string with grouped syntax\r\n * @returns {string} Fully expanded string\r\n * \r\n * @example\r\n * expandGroupedClass('hover:(bg-blue text-white) p(4 8)')\r\n * // Returns: 'hover:bg-blue hover:text-white p-4 p-8'\r\n */\r\nexport function expandGroupedClass(input) {\r\n let result = encodeBracketValues(input);\r\n let prev;\r\n\r\n do {\r\n prev = result;\r\n result = expandVariants(result);\r\n result = expandDirectiveGroups(result);\r\n } while (result !== prev);\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generate minified keyframes CSS\r\n * \r\n * Converts keyframe definitions to minified CSS string.\r\n * \r\n * @param {string[]} animationNames - Array of animation names\r\n * @param {Object} keyframesDefinitions - Keyframe definitions object\r\n * @returns {string} Minified keyframes CSS\r\n * \r\n * @example\r\n * generateMinifiedKeyframes(['spin'], { spin: { '0%': { transform: 'rotate(0deg)' } } })\r\n * // Returns: '@keyframes spin{0%{transform:rotate(0deg);}}'\r\n */\r\nexport function generateMinifiedKeyframes(animationNames, keyframesDefinitions) {\r\n let css = \"\";\r\n for (const name of animationNames) {\r\n const keyframe = keyframesDefinitions[name];\r\n if (!keyframe) continue;\r\n\r\n css += `@keyframes ${name}{`;\r\n for (const [percentage, styles] of Object.entries(keyframe)) {\r\n css += `${percentage}{`;\r\n for (const [prop, value] of Object.entries(styles)) {\r\n const cssProp = prop\r\n .replace(UPPERCASE_LETTER_REGEX, \"-$1\")\r\n .toLowerCase();\r\n css += `${cssProp}:${value};`;\r\n }\r\n css += \"}\";\r\n }\r\n css += \"}\";\r\n }\r\n return css;\r\n}\r\n","/**\r\n * TWS Core - Tailwind to Style Converter\r\n * \r\n * Main function for converting Tailwind class names to inline styles or JSON objects.\r\n * \r\n * @module core/tws\r\n */\r\n\r\nimport { getTailwindCache } from \"../utils/tailwindCache.js\";\r\nimport { logger } from \"../utils/logger.js\";\r\nimport { handleError } from \"../utils/errorHandler.js\";\r\nimport { performanceMonitor } from \"../utils/performanceMonitor.js\";\r\nimport { separateAndResolveCSS, resolveCssToClearCss, inlineStyleToJson } from \"../css/resolver.js\";\r\nimport { processOpacityModifier } from \"../css/parser.js\";\r\nimport {\r\n CLASS_PARSER_REGEX,\r\n OPACITY_MODIFIER_REGEX,\r\n CUSTOM_VALUE_BRACKET_REGEX,\r\n FRACTION_DENOMINATORS,\r\n FRACTION_PREFIXES,\r\n} from \"../core/constants.js\";\r\n\r\n/**\r\n * Convert Tailwind class string to inline CSS styles or JSON object\r\n * \r\n * Supports all Tailwind utilities including:\r\n * - Responsive variants (sm:, md:, lg:, xl:, 2xl:)\r\n * - Pseudo-state variants (hover:, focus:, active:, etc.)\r\n * - Opacity modifiers (text-red-500/50)\r\n * - Arbitrary values (w-[123px], text-[#abc])\r\n * - Important modifier (!bg-red-500)\r\n * \r\n * @param {string} classNames - String containing Tailwind classes to convert\r\n * @param {boolean} convertToJson - If true, returns JSON object; if false, returns CSS string\r\n * @returns {string|Object} Inline CSS string or style JSON object\r\n * \r\n * @example\r\n * // CSS string output\r\n * tws('bg-blue-500 text-white p-4')\r\n * // Returns: 'background-color: rgb(59, 130, 246); color: rgb(255, 255, 255); padding: 1rem;'\r\n * \r\n * @example\r\n * // JSON object output\r\n * tws('flex items-center gap-4', true)\r\n * // Returns: { display: 'flex', alignItems: 'center', gap: '1rem' }\r\n * \r\n * @example\r\n * // Opacity modifiers\r\n * tws('text-red-500/50')\r\n * // Returns: 'color: rgba(239, 68, 68, 0.5);'\r\n * \r\n * @example\r\n * // Arbitrary values\r\n * tws('w-[123px] text-[#abc]')\r\n * // Returns: 'width: 123px; color: #abc;'\r\n */\r\nexport function tws(classNames, convertToJson = false) {\r\n const totalMarker = performanceMonitor.start(\"tws:total\");\r\n\r\n try {\r\n // Get CSS object from singleton cache (auto-generates if needed)\r\n const tailwindCache = getTailwindCache();\r\n const cssObject = tailwindCache.getOrGenerate(\r\n // generateFn and convertFn arehandled by tailwindCache\r\n );\r\n\r\n // Validate input\r\n if (\r\n !classNames ||\r\n typeof classNames !== \"string\" ||\r\n classNames.trim() === \"\"\r\n ) {\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n\r\n // Parse class names\r\n let classes;\r\n try {\r\n const parseMarker = performanceMonitor.start(\"tws:parse\");\r\n CLASS_PARSER_REGEX.lastIndex = 0; // Reset global regex\r\n classes = classNames.match(CLASS_PARSER_REGEX);\r\n performanceMonitor.end(parseMarker);\r\n\r\n // If no valid classes are found\r\n if (!classes || classes.length === 0) {\r\n logger.warn(\r\n `No valid Tailwind classes found in input: \"${classNames}\"`\r\n );\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n } catch (error) {\r\n logger.error(`Error parsing Tailwind classes: ${error.message}`);\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n\r\n // Process classes with performance monitoring\r\n const processMarker = performanceMonitor.start(\"tws:process\");\r\n let cssResult = classes.map((className) => {\r\n // Extract base class name without opacity modifier\r\n // Only remove /digits if it's an opacity modifier (not a fraction like w-2/3)\r\n // Opacity modifiers are typically /0-100, fractions are /2, /3, /4, /5, /6, /12\r\n const opacityMatch = OPACITY_MODIFIER_REGEX.exec(className);\r\n let baseClassName = className;\r\n let hasOpacityModifier = false;\r\n\r\n if (opacityMatch) {\r\n const opacityValue = parseInt(opacityMatch[1], 10);\r\n // If it's a valid opacity value (0-100), treat it as opacity modifier\r\n if (opacityValue >= 0 && opacityValue <= 100) {\r\n // Check if this could be a fraction (e.g., w-2/3, h-1/2)\r\n // Fractions typically have denominators of 2, 3, 4, 5, 6, 12\r\n const couldBeFraction =\r\n FRACTION_DENOMINATORS.includes(opacityValue) &&\r\n FRACTION_PREFIXES.some(\r\n (prefix) =>\r\n className.startsWith(prefix) ||\r\n className.startsWith(`-${prefix}`)\r\n );\r\n if (!couldBeFraction) {\r\n baseClassName = className.replace(/\\/\\d+$/, \"\");\r\n hasOpacityModifier = true;\r\n }\r\n }\r\n }\r\n\r\n let result =\r\n cssObject[baseClassName] ||\r\n cssObject[baseClassName.replace(/\\//g, \"\\\\/\")] ||\r\n cssObject[baseClassName.replace(/\\./g, \"\\\\.\")];\r\n\r\n if (result) {\r\n // Apply opacity modifier if present\r\n if (\r\n hasOpacityModifier &&\r\n className.includes(\"/\") &&\r\n /\\/\\d+$/.test(className)\r\n ) {\r\n result = processOpacityModifier(className, result);\r\n }\r\n return resolveCssToClearCss(result);\r\n } else if (baseClassName.includes(\"[\")) {\r\n const match = CUSTOM_VALUE_BRACKET_REGEX.exec(baseClassName);\r\n if (match) {\r\n const customValue = match[1];\r\n const baseKey = baseClassName.split(\"[\")[0];\r\n if (cssObject[`${baseKey}custom`]) {\r\n let customResult = cssObject[`${baseKey}custom`].replace(\r\n /custom_value/g,\r\n customValue\r\n );\r\n // Apply opacity modifier to custom values too\r\n if (\r\n hasOpacityModifier &&\r\n className.includes(\"/\") &&\r\n /\\/\\d+$/.test(className)\r\n ) {\r\n customResult = processOpacityModifier(className, customResult);\r\n }\r\n return customResult;\r\n }\r\n }\r\n }\r\n return \"\";\r\n });\r\n performanceMonitor.end(processMarker);\r\n\r\n // Resolve CSS\r\n cssResult = performanceMonitor.measure(\r\n () => separateAndResolveCSS(cssResult),\r\n \"tws:resolve\"\r\n );\r\n\r\n // Convert to JSON if needed\r\n if (convertToJson) {\r\n cssResult = performanceMonitor.measure(\r\n () => inlineStyleToJson(cssResult),\r\n \"tws:json\"\r\n );\r\n }\r\n\r\n performanceMonitor.end(totalMarker);\r\n return cssResult;\r\n } catch (error) {\r\n performanceMonitor.end(totalMarker);\r\n handleError(error, { classNames, convertToJson });\r\n return convertToJson ? {} : \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Debounced version of tws function\r\n * \r\n * Useful for real-time class name updates in UI.\r\n * \r\n * @param {string} classNames - String containing Tailwind classes\r\n * @param {boolean} convertToJson - If true, returns JSON object\r\n * @param {number} wait - Debounce delay in milliseconds (default: 50ms)\r\n * @returns {Function} Debounced tws function\r\n */\r\nexport function debounce(func, wait = 100) {\r\n let timeout;\r\n let callCount = 0;\r\n\r\n return function (...args) {\r\n const context = this;\r\n callCount++;\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n const marker = performanceMonitor.start(\r\n `debounced:${func.name || \"anonymous\"}`\r\n );\r\n try {\r\n const result = func.apply(context, args);\r\n performanceMonitor.end(marker);\r\n return result;\r\n } catch (error) {\r\n performanceMonitor.end(marker);\r\n logger.error(`Debounced function error (call #${callCount}):`, error);\r\n throw error;\r\n }\r\n }, wait);\r\n };\r\n}\r\n\r\n/** Debounced version of tws with 50ms delay */\r\nexport const debouncedTws = debounce(tws, 50);\r\n"],"names":["TailwindCache","constructor","twString","cssObject","initialized","getOrGenerate","generateFn","convertFn","replace","getCssString","getCssObject","isInitialized","reset","instance","getTailwindCache","Logger","level","arguments","length","undefined","levels","debug","info","warn","error","silent","setLevel","getLevel","shouldLog","message","_len","args","Array","_key","console","_len2","_key2","_len3","_key3","_len4","_key4","logLevel","process","env","TWSX_LOG_LEVEL","logger","TwsError","Error","context","name","timestamp","Date","toISOString","errorHandlers","Set","handleError","twsError","forEach","handler","handlerError","performanceMonitor","enabled","performance","start","label","startTime","now","end","marker","duration","toFixed","measure","fn","result","LRUCache","maxSize","cache","Map","get","key","has","value","delete","set","size","firstKey","keys","next","clear","CLASS_PARSER_REGEX","OPACITY_MODIFIER_REGEX","OPACITY_PROP_REGEXES","CSS_SEMICOLON_SPLIT_REGEX","CSS_COLON_SPLIT_REGEX","CSS_VAR_REGEX","CAMEL_CASE_REGEX","CUSTOM_VALUE_BRACKET_REGEX","COLOR_PROPERTIES","COLOR_REGEX_PATTERNS","prop","escapedProp","rgb","RegExp","rgba","hsl","hsla","hex","FRACTION_DENOMINATORS","FRACTION_PREFIXES","cssResolutionCache","resolveCssToClearCss","cssString","customVars","props","declarations","split","i","decl","colonIndex","indexOf","substring","trim","startsWith","propKeys","Object","val","includes","lastIndex","m","varName","varKeys","separateAndResolveCSS","arr","cacheKey","isArray","join","String","cssProperties","item","j","resolvedProperties","resolveValue","variables","maxDepth","resolved","depth","changed","match","fallback","maxPasses","hasUnresolved","allKeys","finalKeys","inlineStyleToJson","styleString","styles","filter","style","styleObject","cssVariables","parts","resolveVariables","maxIterations","variable","camelCaseKey","_","letter","toUpperCase","processOpacityModifier","className","cssDeclaration","opacityMatch","exec","opacityValue","parseInt","alphaValue","toString","modifiedDeclaration","regex","patterns","propPart","hexColor","r","g","b","tws","classNames","convertToJson","totalMarker","tailwindCache","classes","parseMarker","processMarker","cssResult","map","baseClassName","hasOpacityModifier","couldBeFraction","some","prefix","test","customValue","baseKey","customResult","debounce","func","wait","timeout","callCount","clearTimeout","setTimeout","apply","debouncedTws"],"mappings":"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"}
1
+ {"version":3,"file":"tws.esm.js","sources":["../../src/utils/tailwindCache.js","../../src/utils/logger.js","../../src/utils/errorHandler.js","../../src/utils/performanceMonitor.js","../../src/utils/lruCache.js","../../src/core/constants.js","../../src/css/resolver.js","../../src/css/parser.js","../../src/core/tws.js"],"sourcesContent":["/**\n * TailwindCache singleton for managing generated Tailwind CSS\n * Replaces global state with proper encapsulation\n */\nclass TailwindCache {\n constructor() {\n this.twString = null;\n this.cssObject = null;\n this.initialized = false;\n }\n\n /**\n * Get or generate the CSS object\n * @param {Function} generateFn - Function to generate CSS string\n * @param {Function} convertFn - Function to convert CSS string to object\n * @returns {Object} CSS object lookup\n */\n getOrGenerate(generateFn, convertFn) {\n if (!this.initialized) {\n this.twString = generateFn().replace(/\\s\\s+/g, \" \");\n this.cssObject = convertFn(this.twString);\n this.initialized = true;\n }\n return this.cssObject;\n }\n\n /**\n * Get the CSS string\n */\n getCssString() {\n return this.twString;\n }\n\n /**\n * Get the CSS object\n */\n getCssObject() {\n return this.cssObject;\n }\n\n /**\n * Check if cache is initialized\n */\n isInitialized() {\n return this.initialized;\n }\n\n /**\n * Reset the cache (useful for testing)\n */\n reset() {\n this.twString = null;\n this.cssObject = null;\n this.initialized = false;\n }\n}\n\n// Singleton instance\nlet instance = null;\n\n/**\n * Get the TailwindCache singleton instance\n * @returns {TailwindCache} The cache instance\n */\nexport function getTailwindCache() {\n if (!instance) {\n instance = new TailwindCache();\n }\n return instance;\n}\n\n/**\n * Reset the TailwindCache singleton (for testing)\n */\nexport function resetTailwindCache() {\n if (instance) {\n instance.reset();\n }\n instance = null;\n}\n\n// Export class for type checking\nexport { TailwindCache };\n","/**\n * Logger class with configurable log levels\n * Prevents console spam in production\n */\nclass Logger {\n constructor(level = \"warn\") {\n this.level = level;\n this.levels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n };\n }\n\n /**\n * Set the log level\n * @param {string} level - One of 'debug', 'info', 'warn', 'error', 'silent'\n */\n setLevel(level) {\n if (this.levels[level] !== undefined) {\n this.level = level;\n }\n }\n\n /**\n * Get current log level\n */\n getLevel() {\n return this.level;\n }\n\n /**\n * Check if a message should be logged\n */\n shouldLog(level) {\n return this.levels[level] >= this.levels[this.level];\n }\n\n /**\n * Log debug message\n */\n debug(message, ...args) {\n if (this.shouldLog(\"debug\")) {\n console.debug(`[twsx:debug] ${message}`, ...args);\n }\n }\n\n /**\n * Log info message\n */\n info(message, ...args) {\n if (this.shouldLog(\"info\")) {\n console.info(`[twsx:info] ${message}`, ...args);\n }\n }\n\n /**\n * Log warning message\n */\n warn(message, ...args) {\n if (this.shouldLog(\"warn\")) {\n console.warn(`[twsx:warn] ${message}`, ...args);\n }\n }\n\n /**\n * Log error message\n */\n error(message, ...args) {\n if (this.shouldLog(\"error\")) {\n console.error(`[twsx:error] ${message}`, ...args);\n }\n }\n}\n\n// Create singleton instance with silent defaults\n// Can be enabled via TWSX_LOG_LEVEL environment variable\nlet logLevel = \"silent\";\ntry {\n if (typeof process !== \"undefined\" && process && process.env) {\n // Allow explicit log level override via environment variable\n // e.g., TWSX_LOG_LEVEL=debug or TWSX_LOG_LEVEL=warn\n logLevel = process.env.TWSX_LOG_LEVEL || \"silent\";\n }\n} catch {\n // Silently fail - in browser environment, default to silent\n logLevel = \"silent\";\n}\n\nexport const logger = new Logger(logLevel);\n\n// Export Logger class for custom instances\nexport { Logger };\n","import { logger } from \"./logger.js\";\n\n/**\n * Custom error class for tailwind-to-style\n */\nexport class TwsError extends Error {\n constructor(message, context = {}) {\n super(message);\n this.name = \"TwsError\";\n this.context = context;\n this.timestamp = new Date().toISOString();\n }\n}\n\n/**\n * Error event handlers\n */\nconst errorHandlers = new Set();\n\n/**\n * Register an error handler\n * @param {Function} handler - Function to call when errors occur\n * @returns {Function} Unsubscribe function\n */\nexport function onError(handler) {\n if (typeof handler !== \"function\") {\n throw new TypeError(\"Error handler must be a function\");\n }\n\n errorHandlers.add(handler);\n\n // Return unsubscribe function\n return () => errorHandlers.delete(handler);\n}\n\n/**\n * Handle and broadcast errors\n * @param {Error} error - The error that occurred\n * @param {Object} context - Additional context about the error\n */\nexport function handleError(error, context = {}) {\n const twsError =\n error instanceof TwsError ? error : new TwsError(error.message, context);\n\n // Log the error\n logger.error(twsError.message, twsError.context);\n\n // Notify all registered handlers\n errorHandlers.forEach((handler) => {\n try {\n handler(twsError);\n } catch (handlerError) {\n logger.error(\"Error in error handler:\", handlerError);\n }\n });\n\n return twsError;\n}\n\n/**\n * Clear all error handlers\n */\nexport function clearErrorHandlers() {\n errorHandlers.clear();\n}\n\n/**\n * Get number of registered error handlers\n */\nexport function getErrorHandlerCount() {\n return errorHandlers.size;\n}\n","/**\r\n * Performance Monitoring Utilities\r\n * \r\n * Tracks and logs performance metrics for optimization analysis.\r\n * \r\n * @module utils/performanceMonitor\r\n */\r\n\r\nimport { logger } from \"./logger.js\";\r\n\r\n/**\r\n * Performance monitoring system\r\n * \r\n * Provides start/end timing and automatic slow operation logging.\r\n */\r\nexport const performanceMonitor = {\r\n enabled: typeof performance !== \"undefined\",\r\n\r\n /**\r\n * Start performance measurement\r\n * \r\n * @param {string} label - Label for the measurement\r\n * @returns {Object|null} Marker object with label and start time\r\n */\r\n start(label) {\r\n if (!this.enabled) return null;\r\n return {\r\n label,\r\n startTime: performance.now(),\r\n };\r\n },\r\n\r\n /**\r\n * End performance measurement and log if slow\r\n * \r\n * @param {Object} marker - Marker from start()\r\n */\r\n end(marker) {\r\n if (!this.enabled || !marker) return;\r\n const duration = performance.now() - marker.startTime;\r\n if (duration > 5) {\r\n // Only log if > 5ms\r\n logger.warn(`Slow ${marker.label}: ${duration.toFixed(2)}ms`);\r\n }\r\n },\r\n\r\n /**\r\n * Measure function execution time\r\n * \r\n * @param {Function} fn - Function to measure\r\n * @param {string} label - Label for measurement\r\n * @returns {*} Function result\r\n */\r\n measure(fn, label) {\r\n const marker = this.start(label);\r\n try {\r\n const result = fn();\r\n this.end(marker);\r\n return result;\r\n } catch (error) {\r\n this.end(marker);\r\n throw error;\r\n }\r\n },\r\n};\r\n","/**\n * Proper LRU (Least Recently Used) Cache implementation\n * Efficiently manages memory by removing least recently used items\n */\nexport class LRUCache {\n constructor(maxSize = 1000) {\n this.maxSize = maxSize;\n this.cache = new Map();\n }\n\n /**\n * Get value from cache\n * Updates the item as most recently used\n */\n get(key) {\n if (!this.cache.has(key)) {\n return undefined;\n }\n\n const value = this.cache.get(key);\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n return value;\n }\n\n /**\n * Set value in cache\n * Removes least recently used item if cache is full\n */\n set(key, value) {\n // If key exists, delete it first to update position\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n this.cache.delete(firstKey);\n }\n\n this.cache.set(key, value);\n }\n\n /**\n * Check if key exists in cache\n */\n has(key) {\n return this.cache.has(key);\n }\n\n /**\n * Clear all cache entries\n */\n clear() {\n this.cache.clear();\n }\n\n /**\n * Get current cache size\n */\n get size() {\n return this.cache.size;\n }\n\n /**\n * Delete specific key\n */\n delete(key) {\n return this.cache.delete(key);\n }\n}\n","/**\r\n * Pre-compiled Regex Constants and Configuration\r\n * \r\n * Pre-compiling regex patterns provides 50-100x performance improvement\r\n * by avoiding repeated regex object creation in hot code paths.\r\n * \r\n * @module core/constants\r\n */\r\n\r\n// ============================================================================\r\n// CLASS PARSING\r\n// ============================================================================\r\n\r\n/** Regex for parsing Tailwind class names (includes . for decimal values like p-0.5) */\r\nexport const CLASS_PARSER_REGEX = /[\\w.\\-\\/]+(?:\\/\\d+)?(?:\\[[^\\]]+\\])?/g;\r\n\r\n// ============================================================================\r\n// OPACITY MODIFIERS\r\n// ============================================================================\r\n\r\n/** Regex for extracting opacity modifiers (e.g., /50 in text-red-500/50) */\r\nexport const OPACITY_MODIFIER_REGEX = /\\/(\\d+)$/;\r\n\r\n/** Pre-compiled regex patterns for opacity CSS custom properties */\r\nexport const OPACITY_PROP_REGEXES = {\r\n \"--text-opacity\": /--text-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--bg-opacity\": /--bg-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--border-opacity\": /--border-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--ring-opacity\": /--ring-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--divide-opacity\": /--divide-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--placeholder-opacity\": /--placeholder-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--text-decoration-opacity\": /--text-decoration-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--outline-opacity\": /--outline-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--accent-opacity\": /--accent-opacity\\s*:\\s*[\\d.]+/gi,\r\n \"--caret-opacity\": /--caret-opacity\\s*:\\s*[\\d.]+/gi,\r\n};\r\n\r\n// ============================================================================\r\n// CSS PARSING\r\n// ============================================================================\r\n\r\n/** Regex for parsing CSS class rules */\r\nexport const CSS_CLASS_REGEX = /([a-zA-Z0-9\\-_\\\\/.]+)\\s*{\\s*([^}]+)\\s*}/g;\r\n\r\n/** Regex for CSS string manipulation */\r\nexport const DOUBLE_BACKSLASH_REGEX = /\\\\\\\\/g;\r\nexport const LEADING_UNDERSCORE_REGEX = /^_/;\r\nexport const MULTIPLE_SPACES_REGEX = /\\s+/g;\r\n\r\n/** Regex for CSS declarations */\r\nexport const CSS_SEMICOLON_SPLIT_REGEX = /;/;\r\nexport const CSS_COLON_SPLIT_REGEX = /:/;\r\n\r\n// ============================================================================\r\n// BRACKET ENCODING/DECODING\r\n// ============================================================================\r\n\r\n/** Regex for bracket content extraction and encoding */\r\nexport const BRACKET_CONTENT_REGEX = /\\[([^\\]]+)\\]/g;\r\nexport const OPENING_PAREN_REGEX = /\\(/g;\r\nexport const CLOSING_PAREN_REGEX = /\\)/g;\r\nexport const ENCODED_PAREN_OPEN_REGEX = /__P__/g;\r\nexport const ENCODED_PAREN_CLOSE_REGEX = /__C__/g;\r\n\r\n// ============================================================================\r\n// VARIANT EXPANSION\r\n// ============================================================================\r\n\r\n/** Regex for directive group expansion (e.g., p(4 8) -> p-4 p-8) */\r\nexport const DIRECTIVE_GROUP_REGEX = /(\\w+)\\(([^()]+)\\)/g;\r\n\r\n/** Regex for variant group expansion (e.g., hover:(text-blue bg-blue)) */\r\nexport const VARIANT_GROUP_REGEX = /(\\w+):\\(([^()]+(?:\\((?:[^()]+)\\))?[^()]*)\\)/g;\r\n\r\nexport const WHITESPACE_SPLIT_REGEX = /\\s+/;\r\nexport const VARIANT_COLON_SPLIT_REGEX = /:/;\r\n\r\n// ============================================================================\r\n// CSS VARIABLE RESOLUTION\r\n// ============================================================================\r\n\r\n/** Regex for CSS custom property (var) resolution — supports nested parens in fallback (e.g. rgba(...)) */\r\nexport const CSS_VAR_REGEX = /var\\((--[\\w-]+)(?:,\\s*((?:[^()]+|\\([^()]*\\))*))?\\)/g;\r\nexport const CAMEL_CASE_REGEX = /-([a-z])/g;\r\n\r\n// ============================================================================\r\n// ANIMATION DETECTION\r\n// ============================================================================\r\n\r\n/** Regex for detecting animation names in CSS */\r\nexport const ANIMATION_NAME_REGEX = /animation(?:-name)?:\\s*([a-zA-Z0-9-]+)/gi;\r\n\r\n// ============================================================================\r\n// CUSTOM CLASS DETECTION\r\n// ============================================================================\r\n\r\n/** Regex for arbitrary value detection (e.g., w-[123px]) */\r\nexport const CUSTOM_VALUE_BRACKET_REGEX = /\\[([^\\]]+)\\]/;\r\nexport const CUSTOM_VALUE_FULL_REGEX = /^(.+?)\\[(.+)\\]$/;\r\n\r\n// ============================================================================\r\n// SELECTOR VARIANTS\r\n// ============================================================================\r\n\r\n/** Regex for selector variants (e.g., c-first, c-odd) */\r\nexport const SELECTOR_VARIANT_REGEX = /c-(first|last|odd|even|\\d+|not\\([^)]+\\))/g;\r\nexport const NOT_SELECTOR_REGEX = /^not\\(([^)]+)\\)$/;\r\nexport const DIGIT_ONLY_REGEX = /^\\d+$/;\r\n\r\n// ============================================================================\r\n// COLOR PROPERTIES\r\n// ============================================================================\r\n\r\n/** List of CSS properties that accept color values */\r\nexport const COLOR_PROPERTIES = [\r\n \"color\",\r\n \"background-color\",\r\n \"border-color\",\r\n \"text-decoration-color\",\r\n \"outline-color\",\r\n \"fill\",\r\n \"stroke\",\r\n \"caret-color\",\r\n \"accent-color\",\r\n];\r\n\r\n/**\r\n * Pre-compiled regex patterns for each color property\r\n * Used in opacity modifier processing for 50-100x performance improvement\r\n */\r\nexport const COLOR_REGEX_PATTERNS = new Map();\r\nfor (const prop of COLOR_PROPERTIES) {\r\n const escapedProp = prop.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n COLOR_REGEX_PATTERNS.set(prop, {\r\n rgb: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)rgb\\\\((\\\\d+),\\\\s*(\\\\d+),\\\\s*(\\\\d+)\\\\)`,\r\n \"gi\"\r\n ),\r\n rgba: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)rgba\\\\((\\\\d+),\\\\s*(\\\\d+),\\\\s*(\\\\d+),\\\\s*[\\\\d.]+\\\\)`,\r\n \"gi\"\r\n ),\r\n hsl: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)hsl\\\\((\\\\d+),\\\\s*([\\\\d.]+%),\\\\s*([\\\\d.]+%)\\\\)`,\r\n \"gi\"\r\n ),\r\n hsla: new RegExp(\r\n `(${escapedProp}\\\\s*:\\\\s*)hsla\\\\((\\\\d+),\\\\s*([\\\\d.]+%),\\\\s*([\\\\d.]+%),\\\\s*[\\\\d.]+\\\\)`,\r\n \"gi\"\r\n ),\r\n hex: new RegExp(`(${escapedProp}\\\\s*:\\\\s*)(#[0-9a-fA-F]{3,6})`, \"gi\"),\r\n });\r\n}\r\n\r\n// ============================================================================\r\n// CSS PROPERTY CONVERSION\r\n// ============================================================================\r\n\r\n/** Regex for converting camelCase to kebab-case */\r\nexport const UPPERCASE_LETTER_REGEX = /([A-Z])/g;\r\n\r\n/** Regex for escaping special characters */\r\nexport const ESCAPE_SLASH_REGEX = /\\//g;\r\nexport const ESCAPE_DOT_REGEX = /\\./g;\r\n\r\n// ============================================================================\r\n// TAILWIND CONFIGURATION\r\n// ============================================================================\r\n\r\n/** Fraction denominators supported in Tailwind (for w-1/2, h-2/3, etc.) */\r\nexport const FRACTION_DENOMINATORS = [2, 3, 4, 5, 6, 12];\r\n\r\n/** Prefixes that support fractional values */\r\nexport const FRACTION_PREFIXES = [\r\n \"w-\",\r\n \"h-\",\r\n \"max-w-\",\r\n \"max-h-\",\r\n \"min-w-\",\r\n \"min-h-\",\r\n \"top-\",\r\n \"bottom-\",\r\n \"left-\",\r\n \"right-\",\r\n \"inset-\",\r\n \"inset-x-\",\r\n \"inset-y-\",\r\n \"translate-x-\",\r\n \"translate-y-\",\r\n \"rounded-t-\",\r\n \"rounded-b-\",\r\n \"rounded-l-\",\r\n \"rounded-r-\",\r\n \"rounded-bl-\",\r\n \"rounded-br-\",\r\n \"rounded-tl-\",\r\n \"rounded-tr-\",\r\n \"flex-basis-\",\r\n \"z-\",\r\n];\r\n\r\n/** Responsive breakpoints */\r\nexport const BREAKPOINTS = {\r\n // Standard responsive breakpoints (Tailwind v3 + v4)\r\n sm: \"@media (min-width: 640px)\",\r\n md: \"@media (min-width: 768px)\",\r\n lg: \"@media (min-width: 1024px)\",\r\n xl: \"@media (min-width: 1280px)\",\r\n \"2xl\": \"@media (min-width: 1536px)\",\r\n \"3xl\": \"@media (min-width: 1920px)\",\r\n // Container queries (Tailwind v4)\r\n \"@sm\": \"@container (min-width: 640px)\",\r\n \"@md\": \"@container (min-width: 768px)\",\r\n \"@lg\": \"@container (min-width: 1024px)\",\r\n \"@xl\": \"@container (min-width: 1280px)\",\r\n \"@2xl\": \"@container (min-width: 1536px)\",\r\n \"@3xl\": \"@container (min-width: 1920px)\",\r\n // Special media variants (Tailwind v4)\r\n \"starting\": \"@starting-style\",\r\n \"forced-colors\": \"@media (forced-colors: active)\",\r\n print: \"@media print\",\r\n portrait: \"@media (orientation: portrait)\",\r\n landscape: \"@media (orientation: landscape)\",\r\n};\r\n\r\n/** Pseudo-class variants */\r\nexport const PSEUDO_VARIANTS = new Set([\r\n \"hover\",\r\n \"focus\",\r\n \"focus-within\",\r\n \"focus-visible\",\r\n \"active\",\r\n \"visited\",\r\n \"disabled\",\r\n \"enabled\",\r\n \"first\",\r\n \"last\",\r\n \"checked\",\r\n \"unchecked\",\r\n \"indeterminate\",\r\n \"invalid\",\r\n \"valid\",\r\n \"required\",\r\n \"optional\",\r\n \"read-only\",\r\n \"read-write\",\r\n \"placeholder-shown\",\r\n \"autofill\",\r\n \"even\",\r\n \"odd\",\r\n \"empty\",\r\n \"target\",\r\n \"default\",\r\n \"in-range\",\r\n \"out-of-range\",\r\n \"user-invalid\",\r\n \"user-valid\",\r\n]);\r\n\r\n/**\r\n * Attribute-based variants — generate [attr] selectors instead of :pseudo\r\n * Added in Tailwind v4 (e.g., details[open], dialog[open])\r\n */\r\nexport const ATTRIBUTE_VARIANTS = new Set([\r\n \"open\",\r\n]);\r\n\r\n/** Special variant handlers */\r\nexport const SPECIAL_VARIANTS = {\r\n group: (state, sel) => `.group:${state} ${sel}`,\r\n peer: (state, sel) => `.peer:${state} ~ ${sel}`,\r\n dark: (state, sel) => `.dark ${sel}`,\r\n // Tailwind v4: not-* and has-* structural variants\r\n not: (state, sel) => `${sel}:not(${state})`,\r\n has: (state, sel) => `${sel}:has(${state})`,\r\n \"aria\": (state, sel) => `${sel}[aria-${state}]`,\r\n \"data\": (state, sel) => `${sel}[data-${state}]`,\r\n};\r\n\r\n/** Selector variants for child selection */\r\nexport const SELECTOR_VARIANTS = {\r\n first: () => \"> :first-child\",\r\n last: () => \"> :last-child\",\r\n odd: () => \"> :nth-child(odd)\",\r\n even: () => \"> :nth-child(even)\",\r\n not: (arg) => `> :not(${arg})`,\r\n number: (arg) => `> :nth-child(${arg})`,\r\n};\r\n\r\n// ============================================================================\r\n// ANIMATION KEYFRAMES\r\n// ============================================================================\r\n\r\n/** Built-in Tailwind animation keyframes */\r\nexport const BUILTIN_KEYFRAMES = {\r\n spin: {\r\n \"0%\": { transform: \"rotate(0deg)\" },\r\n \"100%\": { transform: \"rotate(360deg)\" },\r\n },\r\n ping: {\r\n \"75%, 100%\": { transform: \"scale(2)\", opacity: \"0\" },\r\n },\r\n pulse: {\r\n \"50%\": { opacity: \".5\" },\r\n },\r\n bounce: {\r\n \"0%, 100%\": {\r\n transform: \"translateY(-25%)\",\r\n animationTimingFunction: \"cubic-bezier(0.8,0,1,1)\",\r\n },\r\n \"50%\": {\r\n transform: \"none\",\r\n animationTimingFunction: \"cubic-bezier(0,0,0.2,1)\",\r\n },\r\n },\r\n fadeIn: {\r\n \"0%\": { opacity: \"0\" },\r\n \"50%\": { opacity: \"1\" },\r\n \"100%\": { opacity: \"0\" },\r\n },\r\n slideUp: {\r\n \"0%\": { transform: \"translateY(20px)\", opacity: \"0\" },\r\n \"50%\": { transform: \"translateY(0)\", opacity: \"1\" },\r\n \"100%\": { transform: \"translateY(-20px)\", opacity: \"0\" },\r\n },\r\n};\r\n","/**\r\n * CSS Resolution Utilities\r\n * \r\n * Handles CSS custom property (var) resolution, CSS declaration parsing,\r\n * and conversion between different CSS formats.\r\n * \r\n * @module css/resolver\r\n */\r\n\r\nimport { LRUCache } from \"../utils/lruCache.js\";\r\nimport { logger } from \"../utils/logger.js\";\r\nimport {\r\n CSS_SEMICOLON_SPLIT_REGEX,\r\n CSS_COLON_SPLIT_REGEX,\r\n CSS_VAR_REGEX,\r\n CAMEL_CASE_REGEX,\r\n} from \"../core/constants.js\";\r\n\r\n// Cache for CSS resolution\r\nconst cssResolutionCache = new LRUCache(1000);\r\n\r\n/**\r\n * Resolve all CSS custom properties (var) in a CSS string\r\n * \r\n * Optimized with for loops and indexOf for 2-3x better performance.\r\n * Converts CSS with custom properties to clear CSS with resolved values.\r\n * \r\n * @param {string} cssString - CSS string with potential var() references\r\n * @returns {string} Resolved CSS string (e.g., 'color: rgba(255,255,255,1); background: #fff;')\r\n * \r\n * @example\r\n * resolveCssToClearCss('color: var(--text-color); --text-color: red;')\r\n * // Returns: 'color: red;'\r\n */\r\nexport function resolveCssToClearCss(cssString) {\r\n const customVars = {};\r\n const props = {};\r\n\r\n // Split by semicolon and process declarations\r\n const declarations = cssString.split(CSS_SEMICOLON_SPLIT_REGEX);\r\n for (let i = 0; i < declarations.length; i++) {\r\n const decl = declarations[i];\r\n if (!decl) continue;\r\n\r\n const colonIndex = decl.indexOf(\":\");\r\n if (colonIndex === -1) continue;\r\n\r\n const key = decl.substring(0, colonIndex).trim();\r\n const value = decl.substring(colonIndex + 1).trim();\r\n\r\n if (!key || !value) continue;\r\n\r\n if (key.startsWith(\"--\")) {\r\n customVars[key] = value;\r\n } else {\r\n props[key] = value;\r\n }\r\n }\r\n\r\n // Replace var(--foo) in all values using pre-compiled regex\r\n const propKeys = Object.keys(props);\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n let val = props[key];\r\n if (val.includes(\"var(\")) {\r\n CSS_VAR_REGEX.lastIndex = 0;\r\n val = val.replace(CSS_VAR_REGEX, (m, varName) =>\r\n customVars[varName] !== undefined ? customVars[varName] : m\r\n );\r\n props[key] = val;\r\n }\r\n }\r\n\r\n // Build CSS string - INCLUDE CSS variables so they can be resolved later\r\n let result = \"\";\r\n const varKeys = Object.keys(customVars);\r\n for (let i = 0; i < varKeys.length; i++) {\r\n const key = varKeys[i];\r\n result += `${key}: ${customVars[key]}; `;\r\n }\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n result += `${key}: ${props[key]}; `;\r\n }\r\n\r\n return result.trim();\r\n}\r\n\r\n/**\r\n * Separate and resolve CSS declarations with custom property resolution\r\n * \r\n * Enhanced with caching and better error handling for production use.\r\n * \r\n * @param {string[]} arr - Array of CSS declaration strings\r\n * @returns {string} Resolved CSS string with all variables replaced\r\n * \r\n * @example\r\n * separateAndResolveCSS(['color: var(--text); --text: blue;', 'margin: 1rem;'])\r\n * // Returns: 'color: blue; margin: 1rem;'\r\n */\r\nexport function separateAndResolveCSS(arr) {\r\n try {\r\n // Fix: cacheKey must be unique for each input array\r\n const cacheKey = Array.isArray(arr) ? arr.join(\"|\") : String(arr);\r\n if (cssResolutionCache.has(cacheKey)) {\r\n return cssResolutionCache.get(cacheKey);\r\n }\r\n\r\n // Process CSS resolution\r\n const cssProperties = {};\r\n for (let i = 0; i < arr.length; i++) {\r\n const item = arr[i];\r\n if (!item) continue;\r\n\r\n try {\r\n const declarations = item.split(CSS_SEMICOLON_SPLIT_REGEX);\r\n\r\n for (let j = 0; j < declarations.length; j++) {\r\n const decl = declarations[j].trim();\r\n if (!decl) continue;\r\n\r\n const colonIndex = decl.indexOf(\":\");\r\n if (colonIndex === -1) continue;\r\n\r\n const prop = decl.substring(0, colonIndex).trim();\r\n const value = decl.substring(colonIndex + 1).trim();\r\n\r\n if (!prop || !value) continue;\r\n\r\n // Keep 3-stop gradient (with via) — don't let from/to overwrite it\r\n if (\r\n prop === \"--gradient-color-stops\" &&\r\n cssProperties[prop] &&\r\n cssProperties[prop].includes(\"--gradient-via-color\") &&\r\n !value.includes(\"--gradient-via-color\")\r\n ) {\r\n continue;\r\n }\r\n cssProperties[prop] = value;\r\n }\r\n } catch (error) {\r\n logger.warn(\"Error processing CSS declaration:\", item, error);\r\n }\r\n }\r\n\r\n const resolvedProperties = { ...cssProperties };\r\n\r\n /**\r\n * Optimized CSS variable resolution using regex-based approach\r\n * 2-3x faster than manual char-by-char parsing\r\n * Handles nested var() with fallback values\r\n */\r\n const resolveValue = (value, variables, maxDepth = 10) => {\r\n if (!value || !value.includes(\"var(\") || maxDepth <= 0) return value;\r\n\r\n try {\r\n let resolved = value;\r\n\r\n // Iteratively resolve variables until no more changes or max depth reached\r\n for (let depth = 0; depth < maxDepth; depth++) {\r\n let changed = false;\r\n CSS_VAR_REGEX.lastIndex = 0;\r\n\r\n resolved = resolved.replace(CSS_VAR_REGEX, (match, varName, fallback) => {\r\n // Check if variable exists in our resolved properties\r\n if (variables[varName] !== undefined) {\r\n changed = true;\r\n return variables[varName];\r\n }\r\n\r\n // If fallback is provided, use it\r\n if (fallback !== undefined) {\r\n changed = true;\r\n return fallback.trim();\r\n }\r\n\r\n // Keep the var() reference if not found\r\n return match;\r\n });\r\n\r\n // If nothing changed, we're done\r\n if (!changed) break;\r\n }\r\n\r\n return resolved;\r\n } catch (error) {\r\n logger.warn(\"Error resolving CSS variable:\", value, error);\r\n return value;\r\n }\r\n };\r\n\r\n // Resolve variables recursively - multiple passes with optimized loop\r\n let maxPasses = 5;\r\n let hasUnresolved = true;\r\n\r\n while (hasUnresolved && maxPasses-- > 0) {\r\n hasUnresolved = false;\r\n const propKeys = Object.keys(resolvedProperties);\r\n\r\n for (let i = 0; i < propKeys.length; i++) {\r\n const key = propKeys[i];\r\n const resolved = resolveValue(\r\n resolvedProperties[key],\r\n resolvedProperties\r\n );\r\n\r\n if (resolved !== resolvedProperties[key]) {\r\n resolvedProperties[key] = resolved;\r\n hasUnresolved = true;\r\n }\r\n }\r\n }\r\n\r\n // Remove CSS variables after resolution using optimized loop\r\n const allKeys = Object.keys(resolvedProperties);\r\n for (let i = 0; i < allKeys.length; i++) {\r\n const key = allKeys[i];\r\n if (key.startsWith(\"--\")) {\r\n delete resolvedProperties[key];\r\n }\r\n }\r\n\r\n // Build result string with optimized loop (faster than map/join)\r\n let result = \"\";\r\n const finalKeys = Object.keys(resolvedProperties);\r\n for (let i = 0; i < finalKeys.length; i++) {\r\n const key = finalKeys[i];\r\n result += `${key}: ${resolvedProperties[key]}; `;\r\n }\r\n result = result.trim();\r\n\r\n cssResolutionCache.set(cacheKey, result);\r\n return result;\r\n } catch (error) {\r\n logger.error(\"Critical error in CSS resolution:\", error);\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Convert inline CSS string to JavaScript object with camelCase properties\r\n * \r\n * Resolves CSS custom properties recursively before conversion.\r\n * \r\n * @param {string} styleString - Inline CSS string (e.g., 'color: red; margin: 1rem;')\r\n * @returns {Object} Style object with camelCase keys\r\n * \r\n * @example\r\n * inlineStyleToJson('color: red; font-size: 16px;')\r\n * // Returns: { color: 'red', fontSize: '16px' }\r\n */\r\nexport function inlineStyleToJson(styleString) {\r\n const styles = styleString\r\n .split(CSS_SEMICOLON_SPLIT_REGEX)\r\n .filter((style) => style.trim() !== \"\");\r\n const styleObject = {};\r\n const cssVariables = {};\r\n\r\n // First pass: collect CSS variables\r\n for (let i = 0; i < styles.length; i++) {\r\n const parts = styles[i].split(CSS_COLON_SPLIT_REGEX, 2);\r\n if (parts.length !== 2) continue;\r\n const key = parts[0].trim();\r\n const value = parts[1].trim();\r\n if (key && key.startsWith(\"--\")) {\r\n cssVariables[key] = value;\r\n }\r\n }\r\n\r\n // Helper to resolve CSS variables recursively\r\n const resolveVariables = (value) => {\r\n if (!value || !value.includes(\"var(\")) return value;\r\n\r\n let resolved = value;\r\n let maxIterations = 10; // Prevent infinite loops\r\n\r\n while (resolved.includes(\"var(\") && maxIterations-- > 0) {\r\n CSS_VAR_REGEX.lastIndex = 0; // Reset global regex\r\n resolved = resolved.replace(\r\n CSS_VAR_REGEX,\r\n (match, variable, fallback) => {\r\n return cssVariables[variable] || fallback || match;\r\n }\r\n );\r\n }\r\n\r\n return resolved;\r\n };\r\n\r\n // Second pass: create style object with resolved values\r\n for (let i = 0; i < styles.length; i++) {\r\n const parts = styles[i].split(CSS_COLON_SPLIT_REGEX, 2);\r\n if (parts.length !== 2) continue;\r\n const key = parts[0].trim();\r\n const value = parts[1].trim();\r\n if (key && value && !key.startsWith(\"--\")) {\r\n const camelCaseKey = key.replace(CAMEL_CASE_REGEX, (_, letter) =>\r\n letter.toUpperCase()\r\n );\r\n styleObject[camelCaseKey] = resolveVariables(value);\r\n }\r\n }\r\n\r\n return styleObject;\r\n}\r\n","/**\r\n * CSS Parser Utilities\r\n * \r\n * Handles parsing of Tailwind class names, opacity modifiers,\r\n * bracket value encoding/decoding, and custom value extraction.\r\n * \r\n * @module css/parser\r\n */\r\n\r\nimport { LRUCache } from \"../utils/lruCache.js\";\r\nimport {\r\n OPACITY_MODIFIER_REGEX,\r\n OPACITY_PROP_REGEXES,\r\n COLOR_PROPERTIES,\r\n COLOR_REGEX_PATTERNS,\r\n BRACKET_CONTENT_REGEX,\r\n OPENING_PAREN_REGEX,\r\n CLOSING_PAREN_REGEX,\r\n ENCODED_PAREN_OPEN_REGEX,\r\n ENCODED_PAREN_CLOSE_REGEX,\r\n DIRECTIVE_GROUP_REGEX,\r\n VARIANT_GROUP_REGEX,\r\n WHITESPACE_SPLIT_REGEX,\r\n VARIANT_COLON_SPLIT_REGEX,\r\n SELECTOR_VARIANT_REGEX,\r\n NOT_SELECTOR_REGEX,\r\n DIGIT_ONLY_REGEX,\r\n SELECTOR_VARIANTS,\r\n UPPERCASE_LETTER_REGEX,\r\n} from \"../core/constants.js\";\r\n\r\n// Caches for bracket encoding/decoding\r\nconst encodeBracketCache = new LRUCache(1000);\r\nconst decodeBracketCache = new LRUCache(1000);\r\n\r\n/**\r\n * Process opacity modifier from class name\r\n * \r\n * Converts opacity modifiers (e.g., text-red-500/50) to actual CSS opacity values.\r\n * Handles rgb, rgba, hsl, hsla, and hex color formats.\r\n * \r\n * @param {string} className - Class name with potential opacity modifier\r\n * @param {string} cssDeclaration - CSS declaration to modify\r\n * @returns {string} Modified CSS declaration with opacity applied\r\n * \r\n * @example\r\n * processOpacityModifier('text-red-500/50', 'color: rgb(239, 68, 68);')\r\n * // Returns: 'color: rgba(239, 68, 68, 0.5);'\r\n */\r\nexport function processOpacityModifier(className, cssDeclaration) {\r\n const opacityMatch = OPACITY_MODIFIER_REGEX.exec(className);\r\n if (!opacityMatch) return cssDeclaration;\r\n\r\n const opacityValue = parseInt(opacityMatch[1], 10);\r\n if (opacityValue < 0 || opacityValue > 100) return cssDeclaration;\r\n\r\n const alphaValue = (opacityValue / 100).toString();\r\n\r\n // Handle Tailwind's CSS custom property pattern\r\n let modifiedDeclaration = cssDeclaration;\r\n\r\n // Replace opacity custom properties using pre-compiled regexes\r\n for (const prop in OPACITY_PROP_REGEXES) {\r\n const regex = OPACITY_PROP_REGEXES[prop];\r\n regex.lastIndex = 0; // Reset global regex\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n regex,\r\n `${prop}: ${alphaValue}`\r\n );\r\n }\r\n\r\n // Also handle direct color values using pre-compiled regex patterns\r\n for (const prop of COLOR_PROPERTIES) {\r\n const patterns = COLOR_REGEX_PATTERNS.get(prop);\r\n if (!patterns) continue;\r\n\r\n // Reset all regex lastIndex for reuse\r\n patterns.rgb.lastIndex = 0;\r\n patterns.rgba.lastIndex = 0;\r\n patterns.hsl.lastIndex = 0;\r\n patterns.hsla.lastIndex = 0;\r\n patterns.hex.lastIndex = 0;\r\n\r\n // Convert rgb to rgba with opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.rgb,\r\n `$1rgba($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Update existing rgba opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.rgba,\r\n `$1rgba($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Convert hsl to hsla with opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hsl,\r\n `$1hsla($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Update existing hsla opacity\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hsla,\r\n `$1hsla($2, $3, $4, ${alphaValue})`\r\n );\r\n\r\n // Handle hex colors - convert to rgba\r\n modifiedDeclaration = modifiedDeclaration.replace(\r\n patterns.hex,\r\n (match, propPart, hexColor) => {\r\n // Convert hex to rgba\r\n const hex = hexColor.replace(\"#\", \"\");\r\n let r, g, b;\r\n\r\n if (hex.length === 3) {\r\n r = parseInt(hex[0] + hex[0], 16);\r\n g = parseInt(hex[1] + hex[1], 16);\r\n b = parseInt(hex[2] + hex[2], 16);\r\n } else {\r\n r = parseInt(hex.substring(0, 2), 16);\r\n g = parseInt(hex.substring(2, 4), 16);\r\n b = parseInt(hex.substring(4, 6), 16);\r\n }\r\n\r\n return `${propPart}rgba(${r}, ${g}, ${b}, ${alphaValue})`;\r\n }\r\n );\r\n }\r\n\r\n return modifiedDeclaration;\r\n}\r\n\r\n/**\r\n * Encode bracket values for safe processing\r\n * \r\n * Encodes parentheses inside bracket values to prevent parsing conflicts.\r\n * Uses LRU cache for performance.\r\n * \r\n * @param {string} input - String with bracket values\r\n * @returns {string} Encoded string\r\n * \r\n * @example\r\n * encodeBracketValues('w-[calc(100%-20px)]')\r\n * // Returns: 'w-[calc__P__100%25-20px__C__]'\r\n */\r\nexport function encodeBracketValues(input) {\r\n if (!input) return input;\r\n if (encodeBracketCache.has(input)) return encodeBracketCache.get(input);\r\n\r\n BRACKET_CONTENT_REGEX.lastIndex = 0; // Reset global regex\r\n const result = input.replace(BRACKET_CONTENT_REGEX, (_, content) => {\r\n const encoded = encodeURIComponent(content)\r\n .replace(OPENING_PAREN_REGEX, \"__P__\")\r\n .replace(CLOSING_PAREN_REGEX, \"__C__\");\r\n return `[${encoded}]`;\r\n });\r\n\r\n encodeBracketCache.set(input, result);\r\n return result;\r\n}\r\n\r\n/**\r\n * Decode bracket values back to original form\r\n * \r\n * Reverses the encoding applied by encodeBracketValues.\r\n * Uses LRU cache for performance.\r\n * \r\n * @param {string} input - Encoded string\r\n * @returns {string} Decoded string\r\n * \r\n * @example\r\n * decodeBracketValues('w-[calc__P__100%25-20px__C__]')\r\n * // Returns: 'w-[calc(100%-20px)]'\r\n */\r\nexport function decodeBracketValues(input) {\r\n if (!input) return input;\r\n if (decodeBracketCache.has(input)) return decodeBracketCache.get(input);\r\n\r\n const result = decodeURIComponent(input)\r\n .replace(ENCODED_PAREN_OPEN_REGEX, \"(\")\r\n .replace(ENCODED_PAREN_CLOSE_REGEX, \")\");\r\n\r\n decodeBracketCache.set(input, result);\r\n return result;\r\n}\r\n\r\n/**\r\n * Replace selector variants with actual CSS selectors\r\n * \r\n * Converts Tailwind selector variants (c-first, c-odd, etc.) to CSS pseudo-selectors.\r\n * \r\n * @param {string} selector - Selector string with potential c- variants\r\n * @returns {string} Selector with CSS pseudo-selectors\r\n * \r\n * @example\r\n * replaceSelector('.card c-first')\r\n * // Returns: '.card > :first-child'\r\n */\r\nexport function replaceSelector(selector) {\r\n SELECTOR_VARIANT_REGEX.lastIndex = 0; // Reset global regex\r\n return selector.replace(SELECTOR_VARIANT_REGEX, (_, raw) => {\r\n if (DIGIT_ONLY_REGEX.test(raw)) return SELECTOR_VARIANTS.number(raw);\r\n const notMatch = raw.match(NOT_SELECTOR_REGEX);\r\n if (notMatch) return SELECTOR_VARIANTS.not(notMatch[1]);\r\n if (SELECTOR_VARIANTS[raw]) return SELECTOR_VARIANTS[raw]();\r\n return raw;\r\n });\r\n}\r\n\r\n/**\r\n * Expand directive groups into individual classes\r\n * \r\n * Converts grouped directives (e.g., p(4 8)) into individual classes (p-4 p-8).\r\n * \r\n * @param {string} str - String with potential directive groups\r\n * @returns {string} Expanded string\r\n * \r\n * @example\r\n * expandDirectiveGroups('p(4 8) m(2)')\r\n * // Returns: 'p-4 p-8 m-2'\r\n */\r\nexport function expandDirectiveGroups(str) {\r\n DIRECTIVE_GROUP_REGEX.lastIndex = 0; // Reset global regex\r\n return str.replace(DIRECTIVE_GROUP_REGEX, (_, directive, content) => {\r\n // Special handling for dark mode syntax: dark:(classes)\r\n if (directive === \"dark\") {\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((cls) => `dark:${cls}`)\r\n .join(\" \");\r\n }\r\n\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((val) => {\r\n if (val.includes(\":\")) {\r\n const parts = val.split(VARIANT_COLON_SPLIT_REGEX);\r\n const variant = parts[0];\r\n const v = parts[1];\r\n const prefix = v.startsWith(\"-\") ? \"-\" : \"\";\r\n const value = v.startsWith(\"-\") ? v.slice(1) : v;\r\n return `${variant}:${prefix}${directive}-${value}`;\r\n }\r\n const prefix = val.startsWith(\"-\") ? \"-\" : \"\";\r\n const value = val.startsWith(\"-\") ? val.slice(1) : val;\r\n return `${prefix}${directive}-${value}`;\r\n })\r\n .join(\" \");\r\n });\r\n}\r\n\r\n/**\r\n * Expand variant groups into individual variants\r\n * \r\n * Converts grouped variants (e.g., hover:(text-blue bg-blue)) into individual classes.\r\n * \r\n * @param {string} str - String with potential variant groups\r\n * @param {string} parent - Parent variant to prepend\r\n * @returns {string} Expanded string\r\n * \r\n * @example\r\n * expandVariants('hover:(text-blue bg-white)')\r\n * // Returns: 'hover:text-blue hover:bg-white'\r\n */\r\nexport function expandVariants(str, parent = \"\") {\r\n VARIANT_GROUP_REGEX.lastIndex = 0; // Reset global regex\r\n return str.replace(VARIANT_GROUP_REGEX, (_, variant, content) => {\r\n return content\r\n .trim()\r\n .split(WHITESPACE_SPLIT_REGEX)\r\n .map((c) => {\r\n if (/\\w+:\\(.*\\)/.test(c)) {\r\n return expandVariants(c, parent ? `${parent}:${variant}` : variant);\r\n }\r\n return `${parent ? `${parent}:${variant}` : variant}:${c}`;\r\n })\r\n .join(\" \");\r\n });\r\n}\r\n\r\n/**\r\n * Expand grouped class syntax recursively\r\n * \r\n * Handles both directive groups and variant groups.\r\n * Encodes bracket values before processing to avoid conflicts.\r\n * \r\n * @param {string} input - Input string with grouped syntax\r\n * @returns {string} Fully expanded string\r\n * \r\n * @example\r\n * expandGroupedClass('hover:(bg-blue text-white) p(4 8)')\r\n * // Returns: 'hover:bg-blue hover:text-white p-4 p-8'\r\n */\r\nexport function expandGroupedClass(input) {\r\n let result = encodeBracketValues(input);\r\n let prev;\r\n\r\n do {\r\n prev = result;\r\n result = expandVariants(result);\r\n result = expandDirectiveGroups(result);\r\n } while (result !== prev);\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generate minified keyframes CSS\r\n * \r\n * Converts keyframe definitions to minified CSS string.\r\n * \r\n * @param {string[]} animationNames - Array of animation names\r\n * @param {Object} keyframesDefinitions - Keyframe definitions object\r\n * @returns {string} Minified keyframes CSS\r\n * \r\n * @example\r\n * generateMinifiedKeyframes(['spin'], { spin: { '0%': { transform: 'rotate(0deg)' } } })\r\n * // Returns: '@keyframes spin{0%{transform:rotate(0deg);}}'\r\n */\r\nexport function generateMinifiedKeyframes(animationNames, keyframesDefinitions) {\r\n let css = \"\";\r\n for (const name of animationNames) {\r\n const keyframe = keyframesDefinitions[name];\r\n if (!keyframe) continue;\r\n\r\n css += `@keyframes ${name}{`;\r\n for (const [percentage, styles] of Object.entries(keyframe)) {\r\n css += `${percentage}{`;\r\n for (const [prop, value] of Object.entries(styles)) {\r\n const cssProp = prop\r\n .replace(UPPERCASE_LETTER_REGEX, \"-$1\")\r\n .toLowerCase();\r\n css += `${cssProp}:${value};`;\r\n }\r\n css += \"}\";\r\n }\r\n css += \"}\";\r\n }\r\n return css;\r\n}\r\n","/**\r\n * TWS Core - Tailwind to Style Converter\r\n * \r\n * Main function for converting Tailwind class names to inline styles or JSON objects.\r\n * \r\n * @module core/tws\r\n */\r\n\r\nimport { getTailwindCache } from \"../utils/tailwindCache.js\";\r\nimport { logger } from \"../utils/logger.js\";\r\nimport { handleError } from \"../utils/errorHandler.js\";\r\nimport { performanceMonitor } from \"../utils/performanceMonitor.js\";\r\nimport { separateAndResolveCSS, resolveCssToClearCss, inlineStyleToJson } from \"../css/resolver.js\";\r\nimport { processOpacityModifier } from \"../css/parser.js\";\r\nimport {\r\n CLASS_PARSER_REGEX,\r\n OPACITY_MODIFIER_REGEX,\r\n CUSTOM_VALUE_BRACKET_REGEX,\r\n FRACTION_DENOMINATORS,\r\n FRACTION_PREFIXES,\r\n} from \"../core/constants.js\";\r\n\r\n/**\r\n * Convert Tailwind class string to inline CSS styles or JSON object\r\n * \r\n * Supports all Tailwind utilities including:\r\n * - Responsive variants (sm:, md:, lg:, xl:, 2xl:)\r\n * - Pseudo-state variants (hover:, focus:, active:, etc.)\r\n * - Opacity modifiers (text-red-500/50)\r\n * - Arbitrary values (w-[123px], text-[#abc])\r\n * - Important modifier (!bg-red-500)\r\n * \r\n * @param {string} classNames - String containing Tailwind classes to convert\r\n * @param {boolean} convertToJson - If true, returns JSON object; if false, returns CSS string\r\n * @returns {string|Object} Inline CSS string or style JSON object\r\n * \r\n * @example\r\n * // CSS string output\r\n * tws('bg-blue-500 text-white p-4')\r\n * // Returns: 'background-color: rgb(59, 130, 246); color: rgb(255, 255, 255); padding: 1rem;'\r\n * \r\n * @example\r\n * // JSON object output\r\n * tws('flex items-center gap-4', true)\r\n * // Returns: { display: 'flex', alignItems: 'center', gap: '1rem' }\r\n * \r\n * @example\r\n * // Opacity modifiers\r\n * tws('text-red-500/50')\r\n * // Returns: 'color: rgba(239, 68, 68, 0.5);'\r\n * \r\n * @example\r\n * // Arbitrary values\r\n * tws('w-[123px] text-[#abc]')\r\n * // Returns: 'width: 123px; color: #abc;'\r\n */\r\nexport function tws(classNames, convertToJson = false) {\r\n const totalMarker = performanceMonitor.start(\"tws:total\");\r\n\r\n try {\r\n // Get CSS object from singleton cache (auto-generates if needed)\r\n const tailwindCache = getTailwindCache();\r\n const cssObject = tailwindCache.getOrGenerate(\r\n // generateFn and convertFn arehandled by tailwindCache\r\n );\r\n\r\n // Validate input\r\n if (\r\n !classNames ||\r\n typeof classNames !== \"string\" ||\r\n classNames.trim() === \"\"\r\n ) {\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n\r\n // Parse class names\r\n let classes;\r\n try {\r\n const parseMarker = performanceMonitor.start(\"tws:parse\");\r\n CLASS_PARSER_REGEX.lastIndex = 0; // Reset global regex\r\n classes = classNames.match(CLASS_PARSER_REGEX);\r\n performanceMonitor.end(parseMarker);\r\n\r\n // If no valid classes are found\r\n if (!classes || classes.length === 0) {\r\n logger.warn(\r\n `No valid Tailwind classes found in input: \"${classNames}\"`\r\n );\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n } catch (error) {\r\n logger.error(`Error parsing Tailwind classes: ${error.message}`);\r\n performanceMonitor.end(totalMarker);\r\n return convertToJson ? {} : \"\";\r\n }\r\n\r\n // Process classes with performance monitoring\r\n const processMarker = performanceMonitor.start(\"tws:process\");\r\n let cssResult = classes.map((className) => {\r\n // Extract base class name without opacity modifier\r\n // Only remove /digits if it's an opacity modifier (not a fraction like w-2/3)\r\n // Opacity modifiers are typically /0-100, fractions are /2, /3, /4, /5, /6, /12\r\n const opacityMatch = OPACITY_MODIFIER_REGEX.exec(className);\r\n let baseClassName = className;\r\n let hasOpacityModifier = false;\r\n\r\n if (opacityMatch) {\r\n const opacityValue = parseInt(opacityMatch[1], 10);\r\n // If it's a valid opacity value (0-100), treat it as opacity modifier\r\n if (opacityValue >= 0 && opacityValue <= 100) {\r\n // Check if this could be a fraction (e.g., w-2/3, h-1/2)\r\n // Fractions typically have denominators of 2, 3, 4, 5, 6, 12\r\n const couldBeFraction =\r\n FRACTION_DENOMINATORS.includes(opacityValue) &&\r\n FRACTION_PREFIXES.some(\r\n (prefix) =>\r\n className.startsWith(prefix) ||\r\n className.startsWith(`-${prefix}`)\r\n );\r\n if (!couldBeFraction) {\r\n baseClassName = className.replace(/\\/\\d+$/, \"\");\r\n hasOpacityModifier = true;\r\n }\r\n }\r\n }\r\n\r\n let result =\r\n cssObject[baseClassName] ||\r\n cssObject[baseClassName.replace(/\\//g, \"\\\\/\")] ||\r\n cssObject[baseClassName.replace(/\\./g, \"\\\\.\")];\r\n\r\n if (result) {\r\n // Apply opacity modifier if present\r\n if (\r\n hasOpacityModifier &&\r\n className.includes(\"/\") &&\r\n /\\/\\d+$/.test(className)\r\n ) {\r\n result = processOpacityModifier(className, result);\r\n }\r\n return resolveCssToClearCss(result);\r\n } else if (baseClassName.includes(\"[\")) {\r\n const match = CUSTOM_VALUE_BRACKET_REGEX.exec(baseClassName);\r\n if (match) {\r\n const customValue = match[1];\r\n const baseKey = baseClassName.split(\"[\")[0];\r\n if (cssObject[`${baseKey}custom`]) {\r\n let customResult = cssObject[`${baseKey}custom`].replace(\r\n /custom_value/g,\r\n customValue\r\n );\r\n // Apply opacity modifier to custom values too\r\n if (\r\n hasOpacityModifier &&\r\n className.includes(\"/\") &&\r\n /\\/\\d+$/.test(className)\r\n ) {\r\n customResult = processOpacityModifier(className, customResult);\r\n }\r\n return customResult;\r\n }\r\n }\r\n }\r\n return \"\";\r\n });\r\n performanceMonitor.end(processMarker);\r\n\r\n // Resolve CSS\r\n cssResult = performanceMonitor.measure(\r\n () => separateAndResolveCSS(cssResult),\r\n \"tws:resolve\"\r\n );\r\n\r\n // Convert to JSON if needed\r\n if (convertToJson) {\r\n cssResult = performanceMonitor.measure(\r\n () => inlineStyleToJson(cssResult),\r\n \"tws:json\"\r\n );\r\n }\r\n\r\n performanceMonitor.end(totalMarker);\r\n return cssResult;\r\n } catch (error) {\r\n performanceMonitor.end(totalMarker);\r\n handleError(error, { classNames, convertToJson });\r\n return convertToJson ? {} : \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Debounced version of tws function\r\n * \r\n * Useful for real-time class name updates in UI.\r\n * \r\n * @param {string} classNames - String containing Tailwind classes\r\n * @param {boolean} convertToJson - If true, returns JSON object\r\n * @param {number} wait - Debounce delay in milliseconds (default: 50ms)\r\n * @returns {Function} Debounced tws function\r\n */\r\nexport function debounce(func, wait = 100) {\r\n let timeout;\r\n let callCount = 0;\r\n\r\n return function (...args) {\r\n const context = this;\r\n callCount++;\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n const marker = performanceMonitor.start(\r\n `debounced:${func.name || \"anonymous\"}`\r\n );\r\n try {\r\n const result = func.apply(context, args);\r\n performanceMonitor.end(marker);\r\n return result;\r\n } catch (error) {\r\n performanceMonitor.end(marker);\r\n logger.error(`Debounced function error (call #${callCount}):`, error);\r\n throw error;\r\n }\r\n }, wait);\r\n };\r\n}\r\n\r\n/** Debounced version of tws with 50ms delay */\r\nexport const debouncedTws = debounce(tws, 50);\r\n"],"names":["TailwindCache","constructor","twString","cssObject","initialized","getOrGenerate","generateFn","convertFn","replace","getCssString","getCssObject","isInitialized","reset","instance","getTailwindCache","Logger","level","arguments","length","undefined","levels","debug","info","warn","error","silent","setLevel","getLevel","shouldLog","message","_len","args","Array","_key","console","_len2","_key2","_len3","_key3","_len4","_key4","logLevel","process","env","TWSX_LOG_LEVEL","logger","TwsError","Error","context","name","timestamp","Date","toISOString","errorHandlers","Set","handleError","twsError","forEach","handler","handlerError","performanceMonitor","enabled","performance","start","label","startTime","now","end","marker","duration","toFixed","measure","fn","result","LRUCache","maxSize","cache","Map","get","key","has","value","delete","set","size","firstKey","keys","next","clear","CLASS_PARSER_REGEX","OPACITY_MODIFIER_REGEX","OPACITY_PROP_REGEXES","CSS_SEMICOLON_SPLIT_REGEX","CSS_COLON_SPLIT_REGEX","CSS_VAR_REGEX","CAMEL_CASE_REGEX","CUSTOM_VALUE_BRACKET_REGEX","COLOR_PROPERTIES","COLOR_REGEX_PATTERNS","prop","escapedProp","rgb","RegExp","rgba","hsl","hsla","hex","FRACTION_DENOMINATORS","FRACTION_PREFIXES","cssResolutionCache","resolveCssToClearCss","cssString","customVars","props","declarations","split","i","decl","colonIndex","indexOf","substring","trim","startsWith","propKeys","Object","val","includes","lastIndex","m","varName","varKeys","separateAndResolveCSS","arr","cacheKey","isArray","join","String","cssProperties","item","j","resolvedProperties","resolveValue","variables","maxDepth","resolved","depth","changed","match","fallback","maxPasses","hasUnresolved","allKeys","finalKeys","inlineStyleToJson","styleString","styles","filter","style","styleObject","cssVariables","parts","resolveVariables","maxIterations","variable","camelCaseKey","_","letter","toUpperCase","processOpacityModifier","className","cssDeclaration","opacityMatch","exec","opacityValue","parseInt","alphaValue","toString","modifiedDeclaration","regex","patterns","propPart","hexColor","r","g","b","tws","classNames","convertToJson","totalMarker","tailwindCache","classes","parseMarker","processMarker","cssResult","map","baseClassName","hasOpacityModifier","couldBeFraction","some","prefix","test","customValue","baseKey","customResult","debounce","func","wait","timeout","callCount","clearTimeout","setTimeout","apply","debouncedTws"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA,MAAMA,aAAa,CAAC;AAClBC,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAACC,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,WAAW,GAAG,KAAK;AAC1B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,aAAaA,CAACC,UAAU,EAAEC,SAAS,EAAE;AACnC,IAAA,IAAI,CAAC,IAAI,CAACH,WAAW,EAAE;AACrB,MAAA,IAAI,CAACF,QAAQ,GAAGI,UAAU,EAAE,CAACE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;MACnD,IAAI,CAACL,SAAS,GAAGI,SAAS,CAAC,IAAI,CAACL,QAAQ,CAAC;MACzC,IAAI,CAACE,WAAW,GAAG,IAAI;AACzB,IAAA;IACA,OAAO,IAAI,CAACD,SAAS;AACvB,EAAA;;AAEA;AACF;AACA;AACEM,EAAAA,YAAYA,GAAG;IACb,OAAO,IAAI,CAACP,QAAQ;AACtB,EAAA;;AAEA;AACF;AACA;AACEQ,EAAAA,YAAYA,GAAG;IACb,OAAO,IAAI,CAACP,SAAS;AACvB,EAAA;;AAEA;AACF;AACA;AACEQ,EAAAA,aAAaA,GAAG;IACd,OAAO,IAAI,CAACP,WAAW;AACzB,EAAA;;AAEA;AACF;AACA;AACEQ,EAAAA,KAAKA,GAAG;IACN,IAAI,CAACV,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,WAAW,GAAG,KAAK;AAC1B,EAAA;AACF;;AAEA;AACA,IAAIS,QAAQ,GAAG,IAAI;;AAEnB;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,GAAG;EACjC,IAAI,CAACD,QAAQ,EAAE;AACbA,IAAAA,QAAQ,GAAG,IAAIb,aAAa,EAAE;AAChC,EAAA;AACA,EAAA,OAAOa,QAAQ;AACjB;;ACrEA;AACA;AACA;AACA;AACA,MAAME,MAAM,CAAC;AACXd,EAAAA,WAAWA,GAAiB;AAAA,IAAA,IAAhBe,KAAK,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,MAAM;IACxB,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACI,MAAM,GAAG;AACZC,MAAAA,KAAK,EAAE,CAAC;AACRC,MAAAA,IAAI,EAAE,CAAC;AACPC,MAAAA,IAAI,EAAE,CAAC;AACPC,MAAAA,KAAK,EAAE,CAAC;AACRC,MAAAA,MAAM,EAAE;KACT;AACH,EAAA;;AAEA;AACF;AACA;AACA;EACEC,QAAQA,CAACV,KAAK,EAAE;IACd,IAAI,IAAI,CAACI,MAAM,CAACJ,KAAK,CAAC,KAAKG,SAAS,EAAE;MACpC,IAAI,CAACH,KAAK,GAAGA,KAAK;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACEW,EAAAA,QAAQA,GAAG;IACT,OAAO,IAAI,CAACX,KAAK;AACnB,EAAA;;AAEA;AACF;AACA;EACEY,SAASA,CAACZ,KAAK,EAAE;AACf,IAAA,OAAO,IAAI,CAACI,MAAM,CAACJ,KAAK,CAAC,IAAI,IAAI,CAACI,MAAM,CAAC,IAAI,CAACJ,KAAK,CAAC;AACtD,EAAA;;AAEA;AACF;AACA;EACEK,KAAKA,CAACQ,OAAO,EAAW;AACtB,IAAA,IAAI,IAAI,CAACD,SAAS,CAAC,OAAO,CAAC,EAAE;MAAA,KAAA,IAAAE,IAAA,GAAAb,SAAA,CAAAC,MAAA,EADba,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAA,CAAA,GAAAA,IAAA,WAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAJF,QAAAA,IAAI,CAAAE,IAAA,GAAA,CAAA,CAAA,GAAAhB,SAAA,CAAAgB,IAAA,CAAA;AAAA,MAAA;MAElBC,OAAO,CAACb,KAAK,CAAC,CAAA,aAAA,EAAgBQ,OAAO,CAAA,CAAE,EAAE,GAAGE,IAAI,CAAC;AACnD,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACET,IAAIA,CAACO,OAAO,EAAW;AACrB,IAAA,IAAI,IAAI,CAACD,SAAS,CAAC,MAAM,CAAC,EAAE;MAAA,KAAA,IAAAO,KAAA,GAAAlB,SAAA,CAAAC,MAAA,EADba,IAAI,OAAAC,KAAA,CAAAG,KAAA,GAAA,CAAA,GAAAA,KAAA,WAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAJL,QAAAA,IAAI,CAAAK,KAAA,GAAA,CAAA,CAAA,GAAAnB,SAAA,CAAAmB,KAAA,CAAA;AAAA,MAAA;MAEjBF,OAAO,CAACZ,IAAI,CAAC,CAAA,YAAA,EAAeO,OAAO,CAAA,CAAE,EAAE,GAAGE,IAAI,CAAC;AACjD,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACER,IAAIA,CAACM,OAAO,EAAW;AACrB,IAAA,IAAI,IAAI,CAACD,SAAS,CAAC,MAAM,CAAC,EAAE;MAAA,KAAA,IAAAS,KAAA,GAAApB,SAAA,CAAAC,MAAA,EADba,IAAI,OAAAC,KAAA,CAAAK,KAAA,GAAA,CAAA,GAAAA,KAAA,WAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAJP,QAAAA,IAAI,CAAAO,KAAA,GAAA,CAAA,CAAA,GAAArB,SAAA,CAAAqB,KAAA,CAAA;AAAA,MAAA;MAEjBJ,OAAO,CAACX,IAAI,CAAC,CAAA,YAAA,EAAeM,OAAO,CAAA,CAAE,EAAE,GAAGE,IAAI,CAAC;AACjD,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEP,KAAKA,CAACK,OAAO,EAAW;AACtB,IAAA,IAAI,IAAI,CAACD,SAAS,CAAC,OAAO,CAAC,EAAE;MAAA,KAAA,IAAAW,KAAA,GAAAtB,SAAA,CAAAC,MAAA,EADba,IAAI,OAAAC,KAAA,CAAAO,KAAA,GAAA,CAAA,GAAAA,KAAA,WAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAJT,QAAAA,IAAI,CAAAS,KAAA,GAAA,CAAA,CAAA,GAAAvB,SAAA,CAAAuB,KAAA,CAAA;AAAA,MAAA;MAElBN,OAAO,CAACV,KAAK,CAAC,CAAA,aAAA,EAAgBK,OAAO,CAAA,CAAE,EAAE,GAAGE,IAAI,CAAC;AACnD,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA,IAAIU,QAAQ,GAAG,QAAQ;AACvB,IAAI;EACF,IAAI,OAAOC,OAAO,KAAK,WAAW,IAAIA,OAAO,IAAIA,OAAO,CAACC,GAAG,EAAE;AAC5D;AACA;AACAF,IAAAA,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,QAAQ;AACnD,EAAA;AACF,CAAC,CAAC,MAAM;AACN;AACAH,EAAAA,QAAQ,GAAG,QAAQ;AACrB;AAEO,MAAMI,MAAM,GAAG,IAAI9B,MAAM,CAAC0B,QAAQ,CAAC;;ACzF1C;AACA;AACA;AACO,MAAMK,QAAQ,SAASC,KAAK,CAAC;EAClC9C,WAAWA,CAAC4B,OAAO,EAAgB;AAAA,IAAA,IAAdmB,OAAO,GAAA/B,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IAC/B,KAAK,CAACY,OAAO,CAAC;IACd,IAAI,CAACoB,IAAI,GAAG,UAAU;IACtB,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,SAAS,GAAG,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;AAC3C,EAAA;AACF;;AAEA;AACA;AACA;AACA,MAAMC,aAAa,GAAG,IAAIC,GAAG,EAAE;;AAkB/B;AACA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAC/B,KAAK,EAAgB;AAAA,EAAA,IAAdwB,OAAO,GAAA/B,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC7C,EAAA,MAAMuC,QAAQ,GACZhC,KAAK,YAAYsB,QAAQ,GAAGtB,KAAK,GAAG,IAAIsB,QAAQ,CAACtB,KAAK,CAACK,OAAO,EAAEmB,OAAO,CAAC;;AAE1E;EACAH,MAAM,CAACrB,KAAK,CAACgC,QAAQ,CAAC3B,OAAO,EAAE2B,QAAQ,CAACR,OAAO,CAAC;;AAEhD;AACAK,EAAAA,aAAa,CAACI,OAAO,CAAEC,OAAO,IAAK;IACjC,IAAI;MACFA,OAAO,CAACF,QAAQ,CAAC;IACnB,CAAC,CAAC,OAAOG,YAAY,EAAE;AACrBd,MAAAA,MAAM,CAACrB,KAAK,CAAC,yBAAyB,EAAEmC,YAAY,CAAC;AACvD,IAAA;AACF,EAAA,CAAC,CAAC;AAEF,EAAA,OAAOH,QAAQ;AACjB;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AACA;AACA;AACO,MAAMI,kBAAkB,GAAG;AAChCC,EAAAA,OAAO,EAAE,OAAOC,WAAW,KAAK,WAAW;AAE3C;AACF;AACA;AACA;AACA;AACA;EACEC,KAAKA,CAACC,KAAK,EAAE;AACX,IAAA,IAAI,CAAC,IAAI,CAACH,OAAO,EAAE,OAAO,IAAI;IAC9B,OAAO;MACLG,KAAK;AACLC,MAAAA,SAAS,EAAEH,WAAW,CAACI,GAAG;KAC3B;EACH,CAAC;AAED;AACF;AACA;AACA;AACA;EACEC,GAAGA,CAACC,MAAM,EAAE;AACV,IAAA,IAAI,CAAC,IAAI,CAACP,OAAO,IAAI,CAACO,MAAM,EAAE;IAC9B,MAAMC,QAAQ,GAAGP,WAAW,CAACI,GAAG,EAAE,GAAGE,MAAM,CAACH,SAAS;IACrD,IAAII,QAAQ,GAAG,CAAC,EAAE;AAChB;AACAxB,MAAAA,MAAM,CAACtB,IAAI,CAAC,CAAA,KAAA,EAAQ6C,MAAM,CAACJ,KAAK,CAAA,EAAA,EAAKK,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,IAAA;EACF,CAAC;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,OAAOA,CAACC,EAAE,EAAER,KAAK,EAAE;AACjB,IAAA,MAAMI,MAAM,GAAG,IAAI,CAACL,KAAK,CAACC,KAAK,CAAC;IAChC,IAAI;AACF,MAAA,MAAMS,MAAM,GAAGD,EAAE,EAAE;AACnB,MAAA,IAAI,CAACL,GAAG,CAACC,MAAM,CAAC;AAChB,MAAA,OAAOK,MAAM;IACf,CAAC,CAAC,OAAOjD,KAAK,EAAE;AACd,MAAA,IAAI,CAAC2C,GAAG,CAACC,MAAM,CAAC;AAChB,MAAA,MAAM5C,KAAK;AACb,IAAA;AACF,EAAA;AACF,CAAC;;AChED;AACA;AACA;AACA;AACO,MAAMkD,QAAQ,CAAC;AACpBzE,EAAAA,WAAWA,GAAiB;AAAA,IAAA,IAAhB0E,OAAO,GAAA1D,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;IACxB,IAAI,CAAC0D,OAAO,GAAGA,OAAO;AACtB,IAAA,IAAI,CAACC,KAAK,GAAG,IAAIC,GAAG,EAAE;AACxB,EAAA;;AAEA;AACF;AACA;AACA;EACEC,GAAGA,CAACC,GAAG,EAAE;IACP,IAAI,CAAC,IAAI,CAACH,KAAK,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;AACxB,MAAA,OAAO5D,SAAS;AAClB,IAAA;IAEA,MAAM8D,KAAK,GAAG,IAAI,CAACL,KAAK,CAACE,GAAG,CAACC,GAAG,CAAC;AACjC;AACA,IAAA,IAAI,CAACH,KAAK,CAACM,MAAM,CAACH,GAAG,CAAC;IACtB,IAAI,CAACH,KAAK,CAACO,GAAG,CAACJ,GAAG,EAAEE,KAAK,CAAC;AAC1B,IAAA,OAAOA,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,GAAGA,CAACJ,GAAG,EAAEE,KAAK,EAAE;AACd;IACA,IAAI,IAAI,CAACL,KAAK,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;AACvB,MAAA,IAAI,CAACH,KAAK,CAACM,MAAM,CAACH,GAAG,CAAC;IACxB,CAAC,MAAM,IAAI,IAAI,CAACH,KAAK,CAACQ,IAAI,IAAI,IAAI,CAACT,OAAO,EAAE;AAC1C;AACA,MAAA,MAAMU,QAAQ,GAAG,IAAI,CAACT,KAAK,CAACU,IAAI,EAAE,CAACC,IAAI,EAAE,CAACN,KAAK;AAC/C,MAAA,IAAI,CAACL,KAAK,CAACM,MAAM,CAACG,QAAQ,CAAC;AAC7B,IAAA;IAEA,IAAI,CAACT,KAAK,CAACO,GAAG,CAACJ,GAAG,EAAEE,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;EACED,GAAGA,CAACD,GAAG,EAAE;AACP,IAAA,OAAO,IAAI,CAACH,KAAK,CAACI,GAAG,CAACD,GAAG,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACES,EAAAA,KAAKA,GAAG;AACN,IAAA,IAAI,CAACZ,KAAK,CAACY,KAAK,EAAE;AACpB,EAAA;;AAEA;AACF;AACA;EACE,IAAIJ,IAAIA,GAAG;AACT,IAAA,OAAO,IAAI,CAACR,KAAK,CAACQ,IAAI;AACxB,EAAA;;AAEA;AACF;AACA;EACEF,MAAMA,CAACH,GAAG,EAAE;AACV,IAAA,OAAO,IAAI,CAACH,KAAK,CAACM,MAAM,CAACH,GAAG,CAAC;AAC/B,EAAA;AACF;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACO,MAAMU,kBAAkB,GAAG,sCAAsC;;AAExE;AACA;AACA;;AAEA;AACO,MAAMC,sBAAsB,GAAG,UAAU;;AAEhD;AACO,MAAMC,oBAAoB,GAAG;AAClC,EAAA,gBAAgB,EAAE,+BAA+B;AACjD,EAAA,cAAc,EAAE,6BAA6B;AAC7C,EAAA,kBAAkB,EAAE,iCAAiC;AACrD,EAAA,gBAAgB,EAAE,+BAA+B;AACjD,EAAA,kBAAkB,EAAE,iCAAiC;AACrD,EAAA,uBAAuB,EAAE,sCAAsC;AAC/D,EAAA,2BAA2B,EAAE,0CAA0C;AACvE,EAAA,mBAAmB,EAAE,kCAAkC;AACvD,EAAA,kBAAkB,EAAE,iCAAiC;AACrD,EAAA,iBAAiB,EAAE;AACrB,CAAC;;AAcD;AACO,MAAMC,yBAAyB,GAAG,GAAG;AACrC,MAAMC,qBAAqB,GAAG,GAAG;;AA0BxC;AACA;AACA;;AAEA;AACO,MAAMC,aAAa,GAAG,qDAAqD;AAC3E,MAAMC,gBAAgB,GAAG,WAAW;;AAS3C;AACA;AACA;;AAEA;AACO,MAAMC,0BAA0B,GAAG,cAAc;;AAYxD;AACA;AACA;;AAEA;AACO,MAAMC,gBAAgB,GAAG,CAC9B,OAAO,EACP,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,MAAM,EACN,QAAQ,EACR,aAAa,EACb,cAAc,CACf;;AAED;AACA;AACA;AACA;AACO,MAAMC,oBAAoB,GAAG,IAAIrB,GAAG,EAAE;AAC7C,KAAK,MAAMsB,IAAI,IAAIF,gBAAgB,EAAE;EACnC,MAAMG,WAAW,GAAGD,IAAI,CAAC3F,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAC/D0F,EAAAA,oBAAoB,CAACf,GAAG,CAACgB,IAAI,EAAE;IAC7BE,GAAG,EAAE,IAAIC,MAAM,CACb,IAAIF,WAAW,CAAA,+CAAA,CAAiD,EAChE,IACF,CAAC;IACDG,IAAI,EAAE,IAAID,MAAM,CACd,IAAIF,WAAW,CAAA,4DAAA,CAA8D,EAC7E,IACF,CAAC;IACDI,GAAG,EAAE,IAAIF,MAAM,CACb,IAAIF,WAAW,CAAA,uDAAA,CAAyD,EACxE,IACF,CAAC;IACDK,IAAI,EAAE,IAAIH,MAAM,CACd,IAAIF,WAAW,CAAA,oEAAA,CAAsE,EACrF,IACF,CAAC;IACDM,GAAG,EAAE,IAAIJ,MAAM,CAAC,IAAIF,WAAW,CAAA,6BAAA,CAA+B,EAAE,IAAI;AACtE,GAAC,CAAC;AACJ;;AAaA;AACA;AACA;;AAEA;AACO,MAAMO,qBAAqB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AAExD;AACO,MAAMC,iBAAiB,GAAG,CAC/B,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,IAAI,CACL;;ACvMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAWA;AACA,MAAMC,kBAAkB,GAAG,IAAInC,QAAQ,CAAC,IAAI,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASoC,oBAAoBA,CAACC,SAAS,EAAE;EAC9C,MAAMC,UAAU,GAAG,EAAE;EACrB,MAAMC,KAAK,GAAG,EAAE;;AAEhB;AACA,EAAA,MAAMC,YAAY,GAAGH,SAAS,CAACI,KAAK,CAACvB,yBAAyB,CAAC;AAC/D,EAAA,KAAK,IAAIwB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,CAAChG,MAAM,EAAEkG,CAAC,EAAE,EAAE;AAC5C,IAAA,MAAMC,IAAI,GAAGH,YAAY,CAACE,CAAC,CAAC;IAC5B,IAAI,CAACC,IAAI,EAAE;AAEX,IAAA,MAAMC,UAAU,GAAGD,IAAI,CAACE,OAAO,CAAC,GAAG,CAAC;AACpC,IAAA,IAAID,UAAU,KAAK,EAAE,EAAE;AAEvB,IAAA,MAAMvC,GAAG,GAAGsC,IAAI,CAACG,SAAS,CAAC,CAAC,EAAEF,UAAU,CAAC,CAACG,IAAI,EAAE;AAChD,IAAA,MAAMxC,KAAK,GAAGoC,IAAI,CAACG,SAAS,CAACF,UAAU,GAAG,CAAC,CAAC,CAACG,IAAI,EAAE;AAEnD,IAAA,IAAI,CAAC1C,GAAG,IAAI,CAACE,KAAK,EAAE;AAEpB,IAAA,IAAIF,GAAG,CAAC2C,UAAU,CAAC,IAAI,CAAC,EAAE;AACxBV,MAAAA,UAAU,CAACjC,GAAG,CAAC,GAAGE,KAAK;AACzB,IAAA,CAAC,MAAM;AACLgC,MAAAA,KAAK,CAAClC,GAAG,CAAC,GAAGE,KAAK;AACpB,IAAA;AACF,EAAA;;AAEA;AACA,EAAA,MAAM0C,QAAQ,GAAGC,MAAM,CAACtC,IAAI,CAAC2B,KAAK,CAAC;AACnC,EAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,QAAQ,CAACzG,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACxC,IAAA,MAAMrC,GAAG,GAAG4C,QAAQ,CAACP,CAAC,CAAC;AACvB,IAAA,IAAIS,GAAG,GAAGZ,KAAK,CAAClC,GAAG,CAAC;AACpB,IAAA,IAAI8C,GAAG,CAACC,QAAQ,CAAC,MAAM,CAAC,EAAE;MACxBhC,aAAa,CAACiC,SAAS,GAAG,CAAC;MAC3BF,GAAG,GAAGA,GAAG,CAACrH,OAAO,CAACsF,aAAa,EAAE,CAACkC,CAAC,EAAEC,OAAO,KAC1CjB,UAAU,CAACiB,OAAO,CAAC,KAAK9G,SAAS,GAAG6F,UAAU,CAACiB,OAAO,CAAC,GAAGD,CAC5D,CAAC;AACDf,MAAAA,KAAK,CAAClC,GAAG,CAAC,GAAG8C,GAAG;AAClB,IAAA;AACF,EAAA;;AAEA;EACA,IAAIpD,MAAM,GAAG,EAAE;AACf,EAAA,MAAMyD,OAAO,GAAGN,MAAM,CAACtC,IAAI,CAAC0B,UAAU,CAAC;AACvC,EAAA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGc,OAAO,CAAChH,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACvC,IAAA,MAAMrC,GAAG,GAAGmD,OAAO,CAACd,CAAC,CAAC;IACtB3C,MAAM,IAAI,GAAGM,GAAG,CAAA,EAAA,EAAKiC,UAAU,CAACjC,GAAG,CAAC,CAAA,EAAA,CAAI;AAC1C,EAAA;AACA,EAAA,KAAK,IAAIqC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,QAAQ,CAACzG,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACxC,IAAA,MAAMrC,GAAG,GAAG4C,QAAQ,CAACP,CAAC,CAAC;IACvB3C,MAAM,IAAI,GAAGM,GAAG,CAAA,EAAA,EAAKkC,KAAK,CAAClC,GAAG,CAAC,CAAA,EAAA,CAAI;AACrC,EAAA;AAEA,EAAA,OAAON,MAAM,CAACgD,IAAI,EAAE;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,qBAAqBA,CAACC,GAAG,EAAE;EACzC,IAAI;AACF;AACA,IAAA,MAAMC,QAAQ,GAAGrG,KAAK,CAACsG,OAAO,CAACF,GAAG,CAAC,GAAGA,GAAG,CAACG,IAAI,CAAC,GAAG,CAAC,GAAGC,MAAM,CAACJ,GAAG,CAAC;AACjE,IAAA,IAAIvB,kBAAkB,CAAC7B,GAAG,CAACqD,QAAQ,CAAC,EAAE;AACpC,MAAA,OAAOxB,kBAAkB,CAAC/B,GAAG,CAACuD,QAAQ,CAAC;AACzC,IAAA;;AAEA;IACA,MAAMI,aAAa,GAAG,EAAE;AACxB,IAAA,KAAK,IAAIrB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,GAAG,CAAClH,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACnC,MAAA,MAAMsB,IAAI,GAAGN,GAAG,CAAChB,CAAC,CAAC;MACnB,IAAI,CAACsB,IAAI,EAAE;MAEX,IAAI;AACF,QAAA,MAAMxB,YAAY,GAAGwB,IAAI,CAACvB,KAAK,CAACvB,yBAAyB,CAAC;AAE1D,QAAA,KAAK,IAAI+C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGzB,YAAY,CAAChG,MAAM,EAAEyH,CAAC,EAAE,EAAE;UAC5C,MAAMtB,IAAI,GAAGH,YAAY,CAACyB,CAAC,CAAC,CAAClB,IAAI,EAAE;UACnC,IAAI,CAACJ,IAAI,EAAE;AAEX,UAAA,MAAMC,UAAU,GAAGD,IAAI,CAACE,OAAO,CAAC,GAAG,CAAC;AACpC,UAAA,IAAID,UAAU,KAAK,CAAC,CAAC,EAAE;AAEvB,UAAA,MAAMnB,IAAI,GAAGkB,IAAI,CAACG,SAAS,CAAC,CAAC,EAAEF,UAAU,CAAC,CAACG,IAAI,EAAE;AACjD,UAAA,MAAMxC,KAAK,GAAGoC,IAAI,CAACG,SAAS,CAACF,UAAU,GAAG,CAAC,CAAC,CAACG,IAAI,EAAE;AAEnD,UAAA,IAAI,CAACtB,IAAI,IAAI,CAAClB,KAAK,EAAE;;AAErB;UACA,IACEkB,IAAI,KAAK,wBAAwB,IACjCsC,aAAa,CAACtC,IAAI,CAAC,IACnBsC,aAAa,CAACtC,IAAI,CAAC,CAAC2B,QAAQ,CAAC,sBAAsB,CAAC,IACpD,CAAC7C,KAAK,CAAC6C,QAAQ,CAAC,sBAAsB,CAAC,EACvC;AACA,YAAA;AACF,UAAA;AACAW,UAAAA,aAAa,CAACtC,IAAI,CAAC,GAAGlB,KAAK;AAC7B,QAAA;MACF,CAAC,CAAC,OAAOzD,KAAK,EAAE;QACdqB,MAAM,CAACtB,IAAI,CAAC,mCAAmC,EAAEmH,IAAI,EAAElH,KAAK,CAAC;AAC/D,MAAA;AACF,IAAA;AAEA,IAAA,MAAMoH,kBAAkB,GAAG;MAAE,GAAGH;KAAe;;AAE/C;AACJ;AACA;AACA;AACA;AACI,IAAA,MAAMI,YAAY,GAAG,UAAC5D,KAAK,EAAE6D,SAAS,EAAoB;AAAA,MAAA,IAAlBC,QAAQ,GAAA9H,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACnD,MAAA,IAAI,CAACgE,KAAK,IAAI,CAACA,KAAK,CAAC6C,QAAQ,CAAC,MAAM,CAAC,IAAIiB,QAAQ,IAAI,CAAC,EAAE,OAAO9D,KAAK;MAEpE,IAAI;QACF,IAAI+D,QAAQ,GAAG/D,KAAK;;AAEpB;QACA,KAAK,IAAIgE,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,QAAQ,EAAEE,KAAK,EAAE,EAAE;UAC7C,IAAIC,OAAO,GAAG,KAAK;UACnBpD,aAAa,CAACiC,SAAS,GAAG,CAAC;AAE3BiB,UAAAA,QAAQ,GAAGA,QAAQ,CAACxI,OAAO,CAACsF,aAAa,EAAE,CAACqD,KAAK,EAAElB,OAAO,EAAEmB,QAAQ,KAAK;AACvE;AACA,YAAA,IAAIN,SAAS,CAACb,OAAO,CAAC,KAAK9G,SAAS,EAAE;AACpC+H,cAAAA,OAAO,GAAG,IAAI;cACd,OAAOJ,SAAS,CAACb,OAAO,CAAC;AAC3B,YAAA;;AAEA;YACA,IAAImB,QAAQ,KAAKjI,SAAS,EAAE;AAC1B+H,cAAAA,OAAO,GAAG,IAAI;AACd,cAAA,OAAOE,QAAQ,CAAC3B,IAAI,EAAE;AACxB,YAAA;;AAEA;AACA,YAAA,OAAO0B,KAAK;AACd,UAAA,CAAC,CAAC;;AAEF;UACA,IAAI,CAACD,OAAO,EAAE;AAChB,QAAA;AAEA,QAAA,OAAOF,QAAQ;MACjB,CAAC,CAAC,OAAOxH,KAAK,EAAE;QACdqB,MAAM,CAACtB,IAAI,CAAC,+BAA+B,EAAE0D,KAAK,EAAEzD,KAAK,CAAC;AAC1D,QAAA,OAAOyD,KAAK;AACd,MAAA;IACF,CAAC;;AAED;IACA,IAAIoE,SAAS,GAAG,CAAC;IACjB,IAAIC,aAAa,GAAG,IAAI;AAExB,IAAA,OAAOA,aAAa,IAAID,SAAS,EAAE,GAAG,CAAC,EAAE;AACvCC,MAAAA,aAAa,GAAG,KAAK;AACrB,MAAA,MAAM3B,QAAQ,GAAGC,MAAM,CAACtC,IAAI,CAACsD,kBAAkB,CAAC;AAEhD,MAAA,KAAK,IAAIxB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,QAAQ,CAACzG,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACxC,QAAA,MAAMrC,GAAG,GAAG4C,QAAQ,CAACP,CAAC,CAAC;QACvB,MAAM4B,QAAQ,GAAGH,YAAY,CAC3BD,kBAAkB,CAAC7D,GAAG,CAAC,EACvB6D,kBACF,CAAC;AAED,QAAA,IAAII,QAAQ,KAAKJ,kBAAkB,CAAC7D,GAAG,CAAC,EAAE;AACxC6D,UAAAA,kBAAkB,CAAC7D,GAAG,CAAC,GAAGiE,QAAQ;AAClCM,UAAAA,aAAa,GAAG,IAAI;AACtB,QAAA;AACF,MAAA;AACF,IAAA;;AAEA;AACA,IAAA,MAAMC,OAAO,GAAG3B,MAAM,CAACtC,IAAI,CAACsD,kBAAkB,CAAC;AAC/C,IAAA,KAAK,IAAIxB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmC,OAAO,CAACrI,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACvC,MAAA,MAAMrC,GAAG,GAAGwE,OAAO,CAACnC,CAAC,CAAC;AACtB,MAAA,IAAIrC,GAAG,CAAC2C,UAAU,CAAC,IAAI,CAAC,EAAE;QACxB,OAAOkB,kBAAkB,CAAC7D,GAAG,CAAC;AAChC,MAAA;AACF,IAAA;;AAEA;IACA,IAAIN,MAAM,GAAG,EAAE;AACf,IAAA,MAAM+E,SAAS,GAAG5B,MAAM,CAACtC,IAAI,CAACsD,kBAAkB,CAAC;AACjD,IAAA,KAAK,IAAIxB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoC,SAAS,CAACtI,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACzC,MAAA,MAAMrC,GAAG,GAAGyE,SAAS,CAACpC,CAAC,CAAC;MACxB3C,MAAM,IAAI,GAAGM,GAAG,CAAA,EAAA,EAAK6D,kBAAkB,CAAC7D,GAAG,CAAC,CAAA,EAAA,CAAI;AAClD,IAAA;AACAN,IAAAA,MAAM,GAAGA,MAAM,CAACgD,IAAI,EAAE;AAEtBZ,IAAAA,kBAAkB,CAAC1B,GAAG,CAACkD,QAAQ,EAAE5D,MAAM,CAAC;AACxC,IAAA,OAAOA,MAAM;EACf,CAAC,CAAC,OAAOjD,KAAK,EAAE;AACdqB,IAAAA,MAAM,CAACrB,KAAK,CAAC,mCAAmC,EAAEA,KAAK,CAAC;AACxD,IAAA,OAAO,EAAE;AACX,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASiI,iBAAiBA,CAACC,WAAW,EAAE;EAC7C,MAAMC,MAAM,GAAGD,WAAW,CACvBvC,KAAK,CAACvB,yBAAyB,CAAC,CAChCgE,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACpC,IAAI,EAAE,KAAK,EAAE,CAAC;EACzC,MAAMqC,WAAW,GAAG,EAAE;EACtB,MAAMC,YAAY,GAAG,EAAE;;AAEvB;AACA,EAAA,KAAK,IAAI3C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuC,MAAM,CAACzI,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACtC,IAAA,MAAM4C,KAAK,GAAGL,MAAM,CAACvC,CAAC,CAAC,CAACD,KAAK,CAACtB,qBAAqB,EAAE,CAAC,CAAC;AACvD,IAAA,IAAImE,KAAK,CAAC9I,MAAM,KAAK,CAAC,EAAE;IACxB,MAAM6D,GAAG,GAAGiF,KAAK,CAAC,CAAC,CAAC,CAACvC,IAAI,EAAE;IAC3B,MAAMxC,KAAK,GAAG+E,KAAK,CAAC,CAAC,CAAC,CAACvC,IAAI,EAAE;IAC7B,IAAI1C,GAAG,IAAIA,GAAG,CAAC2C,UAAU,CAAC,IAAI,CAAC,EAAE;AAC/BqC,MAAAA,YAAY,CAAChF,GAAG,CAAC,GAAGE,KAAK;AAC3B,IAAA;AACF,EAAA;;AAEA;EACA,MAAMgF,gBAAgB,GAAIhF,KAAK,IAAK;AAClC,IAAA,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAAC6C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO7C,KAAK;IAEnD,IAAI+D,QAAQ,GAAG/D,KAAK;AACpB,IAAA,IAAIiF,aAAa,GAAG,EAAE,CAAC;;IAEvB,OAAOlB,QAAQ,CAAClB,QAAQ,CAAC,MAAM,CAAC,IAAIoC,aAAa,EAAE,GAAG,CAAC,EAAE;AACvDpE,MAAAA,aAAa,CAACiC,SAAS,GAAG,CAAC,CAAC;AAC5BiB,MAAAA,QAAQ,GAAGA,QAAQ,CAACxI,OAAO,CACzBsF,aAAa,EACb,CAACqD,KAAK,EAAEgB,QAAQ,EAAEf,QAAQ,KAAK;AAC7B,QAAA,OAAOW,YAAY,CAACI,QAAQ,CAAC,IAAIf,QAAQ,IAAID,KAAK;AACpD,MAAA,CACF,CAAC;AACH,IAAA;AAEA,IAAA,OAAOH,QAAQ;EACjB,CAAC;;AAED;AACA,EAAA,KAAK,IAAI5B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuC,MAAM,CAACzI,MAAM,EAAEkG,CAAC,EAAE,EAAE;AACtC,IAAA,MAAM4C,KAAK,GAAGL,MAAM,CAACvC,CAAC,CAAC,CAACD,KAAK,CAACtB,qBAAqB,EAAE,CAAC,CAAC;AACvD,IAAA,IAAImE,KAAK,CAAC9I,MAAM,KAAK,CAAC,EAAE;IACxB,MAAM6D,GAAG,GAAGiF,KAAK,CAAC,CAAC,CAAC,CAACvC,IAAI,EAAE;IAC3B,MAAMxC,KAAK,GAAG+E,KAAK,CAAC,CAAC,CAAC,CAACvC,IAAI,EAAE;IAC7B,IAAI1C,GAAG,IAAIE,KAAK,IAAI,CAACF,GAAG,CAAC2C,UAAU,CAAC,IAAI,CAAC,EAAE;AACzC,MAAA,MAAM0C,YAAY,GAAGrF,GAAG,CAACvE,OAAO,CAACuF,gBAAgB,EAAE,CAACsE,CAAC,EAAEC,MAAM,KAC3DA,MAAM,CAACC,WAAW,EACpB,CAAC;AACDT,MAAAA,WAAW,CAACM,YAAY,CAAC,GAAGH,gBAAgB,CAAChF,KAAK,CAAC;AACrD,IAAA;AACF,EAAA;AAEA,EAAA,OAAO6E,WAAW;AACpB;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,sBAAsBA,CAACC,SAAS,EAAEC,cAAc,EAAE;AAChE,EAAA,MAAMC,YAAY,GAAGjF,sBAAsB,CAACkF,IAAI,CAACH,SAAS,CAAC;AAC3D,EAAA,IAAI,CAACE,YAAY,EAAE,OAAOD,cAAc;EAExC,MAAMG,YAAY,GAAGC,QAAQ,CAACH,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAClD,IAAIE,YAAY,GAAG,CAAC,IAAIA,YAAY,GAAG,GAAG,EAAE,OAAOH,cAAc;EAEjE,MAAMK,UAAU,GAAG,CAACF,YAAY,GAAG,GAAG,EAAEG,QAAQ,EAAE;;AAElD;EACA,IAAIC,mBAAmB,GAAGP,cAAc;;AAExC;AACA,EAAA,KAAK,MAAMvE,IAAI,IAAIR,oBAAoB,EAAE;AACvC,IAAA,MAAMuF,KAAK,GAAGvF,oBAAoB,CAACQ,IAAI,CAAC;AACxC+E,IAAAA,KAAK,CAACnD,SAAS,GAAG,CAAC,CAAC;AACpBkD,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C0K,KAAK,EACL,CAAA,EAAG/E,IAAI,CAAA,EAAA,EAAK4E,UAAU,CAAA,CACxB,CAAC;AACH,EAAA;;AAEA;AACA,EAAA,KAAK,MAAM5E,IAAI,IAAIF,gBAAgB,EAAE;AACnC,IAAA,MAAMkF,QAAQ,GAAGjF,oBAAoB,CAACpB,GAAG,CAACqB,IAAI,CAAC;IAC/C,IAAI,CAACgF,QAAQ,EAAE;;AAEf;AACAA,IAAAA,QAAQ,CAAC9E,GAAG,CAAC0B,SAAS,GAAG,CAAC;AAC1BoD,IAAAA,QAAQ,CAAC5E,IAAI,CAACwB,SAAS,GAAG,CAAC;AAC3BoD,IAAAA,QAAQ,CAAC3E,GAAG,CAACuB,SAAS,GAAG,CAAC;AAC1BoD,IAAAA,QAAQ,CAAC1E,IAAI,CAACsB,SAAS,GAAG,CAAC;AAC3BoD,IAAAA,QAAQ,CAACzE,GAAG,CAACqB,SAAS,GAAG,CAAC;;AAE1B;AACAkD,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C2K,QAAQ,CAAC9E,GAAG,EACZ,CAAA,mBAAA,EAAsB0E,UAAU,CAAA,CAAA,CAClC,CAAC;;AAED;AACAE,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C2K,QAAQ,CAAC5E,IAAI,EACb,CAAA,mBAAA,EAAsBwE,UAAU,CAAA,CAAA,CAClC,CAAC;;AAED;AACAE,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C2K,QAAQ,CAAC3E,GAAG,EACZ,CAAA,mBAAA,EAAsBuE,UAAU,CAAA,CAAA,CAClC,CAAC;;AAED;AACAE,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C2K,QAAQ,CAAC1E,IAAI,EACb,CAAA,mBAAA,EAAsBsE,UAAU,CAAA,CAAA,CAClC,CAAC;;AAED;AACAE,IAAAA,mBAAmB,GAAGA,mBAAmB,CAACzK,OAAO,CAC/C2K,QAAQ,CAACzE,GAAG,EACZ,CAACyC,KAAK,EAAEiC,QAAQ,EAAEC,QAAQ,KAAK;AAC7B;MACA,MAAM3E,GAAG,GAAG2E,QAAQ,CAAC7K,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACrC,MAAA,IAAI8K,CAAC,EAAEC,CAAC,EAAEC,CAAC;AAEX,MAAA,IAAI9E,GAAG,CAACxF,MAAM,KAAK,CAAC,EAAE;AACpBoK,QAAAA,CAAC,GAAGR,QAAQ,CAACpE,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjC6E,QAAAA,CAAC,GAAGT,QAAQ,CAACpE,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjC8E,QAAAA,CAAC,GAAGV,QAAQ,CAACpE,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnC,MAAA,CAAC,MAAM;AACL4E,QAAAA,CAAC,GAAGR,QAAQ,CAACpE,GAAG,CAACc,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrC+D,QAAAA,CAAC,GAAGT,QAAQ,CAACpE,GAAG,CAACc,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrCgE,QAAAA,CAAC,GAAGV,QAAQ,CAACpE,GAAG,CAACc,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,MAAA;MAEA,OAAO,CAAA,EAAG4D,QAAQ,CAAA,KAAA,EAAQE,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,EAAA,EAAKT,UAAU,CAAA,CAAA,CAAG;AAC3D,IAAA,CACF,CAAC;AACH,EAAA;AAEA,EAAA,OAAOE,mBAAmB;AAC5B;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,GAAGA,CAACC,UAAU,EAAyB;AAAA,EAAA,IAAvBC,aAAa,GAAA1K,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK;AACnD,EAAA,MAAM2K,WAAW,GAAGhI,kBAAkB,CAACG,KAAK,CAAC,WAAW,CAAC;EAEzD,IAAI;AACF;AACA,IAAA,MAAM8H,aAAa,GAAG/K,gBAAgB,EAAE;AACxC,IAAA,MAAMX,SAAS,GAAG0L,aAAa,CAACxL,aAAa;AAC3C;KACD;;AAED;AACA,IAAA,IACE,CAACqL,UAAU,IACX,OAAOA,UAAU,KAAK,QAAQ,IAC9BA,UAAU,CAACjE,IAAI,EAAE,KAAK,EAAE,EACxB;AACA7D,MAAAA,kBAAkB,CAACO,GAAG,CAACyH,WAAW,CAAC;AACnC,MAAA,OAAOD,aAAa,GAAG,EAAE,GAAG,EAAE;AAChC,IAAA;;AAEA;AACA,IAAA,IAAIG,OAAO;IACX,IAAI;AACF,MAAA,MAAMC,WAAW,GAAGnI,kBAAkB,CAACG,KAAK,CAAC,WAAW,CAAC;AACzD0B,MAAAA,kBAAkB,CAACsC,SAAS,GAAG,CAAC,CAAC;AACjC+D,MAAAA,OAAO,GAAGJ,UAAU,CAACvC,KAAK,CAAC1D,kBAAkB,CAAC;AAC9C7B,MAAAA,kBAAkB,CAACO,GAAG,CAAC4H,WAAW,CAAC;;AAEnC;MACA,IAAI,CAACD,OAAO,IAAIA,OAAO,CAAC5K,MAAM,KAAK,CAAC,EAAE;AACpC2B,QAAAA,MAAM,CAACtB,IAAI,CACT,CAAA,2CAAA,EAA8CmK,UAAU,GAC1D,CAAC;AACD9H,QAAAA,kBAAkB,CAACO,GAAG,CAACyH,WAAW,CAAC;AACnC,QAAA,OAAOD,aAAa,GAAG,EAAE,GAAG,EAAE;AAChC,MAAA;IACF,CAAC,CAAC,OAAOnK,KAAK,EAAE;MACdqB,MAAM,CAACrB,KAAK,CAAC,CAAA,gCAAA,EAAmCA,KAAK,CAACK,OAAO,EAAE,CAAC;AAChE+B,MAAAA,kBAAkB,CAACO,GAAG,CAACyH,WAAW,CAAC;AACnC,MAAA,OAAOD,aAAa,GAAG,EAAE,GAAG,EAAE;AAChC,IAAA;;AAEA;AACA,IAAA,MAAMK,aAAa,GAAGpI,kBAAkB,CAACG,KAAK,CAAC,aAAa,CAAC;AAC7D,IAAA,IAAIkI,SAAS,GAAGH,OAAO,CAACI,GAAG,CAAEzB,SAAS,IAAK;AACzC;AACA;AACA;AACA,MAAA,MAAME,YAAY,GAAGjF,sBAAsB,CAACkF,IAAI,CAACH,SAAS,CAAC;MAC3D,IAAI0B,aAAa,GAAG1B,SAAS;MAC7B,IAAI2B,kBAAkB,GAAG,KAAK;AAE9B,MAAA,IAAIzB,YAAY,EAAE;QAChB,MAAME,YAAY,GAAGC,QAAQ,CAACH,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClD;AACA,QAAA,IAAIE,YAAY,IAAI,CAAC,IAAIA,YAAY,IAAI,GAAG,EAAE;AAC5C;AACA;AACA,UAAA,MAAMwB,eAAe,GACnB1F,qBAAqB,CAACmB,QAAQ,CAAC+C,YAAY,CAAC,IAC5CjE,iBAAiB,CAAC0F,IAAI,CACnBC,MAAM,IACL9B,SAAS,CAAC/C,UAAU,CAAC6E,MAAM,CAAC,IAC5B9B,SAAS,CAAC/C,UAAU,CAAC,CAAA,CAAA,EAAI6E,MAAM,CAAA,CAAE,CACrC,CAAC;UACH,IAAI,CAACF,eAAe,EAAE;YACpBF,aAAa,GAAG1B,SAAS,CAACjK,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC/C4L,YAAAA,kBAAkB,GAAG,IAAI;AAC3B,UAAA;AACF,QAAA;AACF,MAAA;AAEA,MAAA,IAAI3H,MAAM,GACRtE,SAAS,CAACgM,aAAa,CAAC,IACxBhM,SAAS,CAACgM,aAAa,CAAC3L,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAC9CL,SAAS,CAACgM,aAAa,CAAC3L,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAA,IAAIiE,MAAM,EAAE;AACV;AACA,QAAA,IACE2H,kBAAkB,IAClB3B,SAAS,CAAC3C,QAAQ,CAAC,GAAG,CAAC,IACvB,QAAQ,CAAC0E,IAAI,CAAC/B,SAAS,CAAC,EACxB;AACAhG,UAAAA,MAAM,GAAG+F,sBAAsB,CAACC,SAAS,EAAEhG,MAAM,CAAC;AACpD,QAAA;QACA,OAAOqC,oBAAoB,CAACrC,MAAM,CAAC;MACrC,CAAC,MAAM,IAAI0H,aAAa,CAACrE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtC,QAAA,MAAMqB,KAAK,GAAGnD,0BAA0B,CAAC4E,IAAI,CAACuB,aAAa,CAAC;AAC5D,QAAA,IAAIhD,KAAK,EAAE;AACT,UAAA,MAAMsD,WAAW,GAAGtD,KAAK,CAAC,CAAC,CAAC;UAC5B,MAAMuD,OAAO,GAAGP,aAAa,CAAChF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,UAAA,IAAIhH,SAAS,CAAC,CAAA,EAAGuM,OAAO,CAAA,MAAA,CAAQ,CAAC,EAAE;AACjC,YAAA,IAAIC,YAAY,GAAGxM,SAAS,CAAC,GAAGuM,OAAO,CAAA,MAAA,CAAQ,CAAC,CAAClM,OAAO,CACtD,eAAe,EACfiM,WACF,CAAC;AACD;AACA,YAAA,IACEL,kBAAkB,IAClB3B,SAAS,CAAC3C,QAAQ,CAAC,GAAG,CAAC,IACvB,QAAQ,CAAC0E,IAAI,CAAC/B,SAAS,CAAC,EACxB;AACAkC,cAAAA,YAAY,GAAGnC,sBAAsB,CAACC,SAAS,EAAEkC,YAAY,CAAC;AAChE,YAAA;AACA,YAAA,OAAOA,YAAY;AACrB,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA,OAAO,EAAE;AACX,IAAA,CAAC,CAAC;AACF/I,IAAAA,kBAAkB,CAACO,GAAG,CAAC6H,aAAa,CAAC;;AAErC;AACAC,IAAAA,SAAS,GAAGrI,kBAAkB,CAACW,OAAO,CACpC,MAAM4D,qBAAqB,CAAC8D,SAAS,CAAC,EACtC,aACF,CAAC;;AAED;AACA,IAAA,IAAIN,aAAa,EAAE;AACjBM,MAAAA,SAAS,GAAGrI,kBAAkB,CAACW,OAAO,CACpC,MAAMkF,iBAAiB,CAACwC,SAAS,CAAC,EAClC,UACF,CAAC;AACH,IAAA;AAEArI,IAAAA,kBAAkB,CAACO,GAAG,CAACyH,WAAW,CAAC;AACnC,IAAA,OAAOK,SAAS;EAClB,CAAC,CAAC,OAAOzK,KAAK,EAAE;AACdoC,IAAAA,kBAAkB,CAACO,GAAG,CAACyH,WAAW,CAAC;IACnCrI,WAAW,CAAC/B,KAAK,EAAE;MAAEkK,UAAU;AAAEC,MAAAA;AAAc,KAAC,CAAC;AACjD,IAAA,OAAOA,aAAa,GAAG,EAAE,GAAG,EAAE;AAChC,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASiB,QAAQA,CAACC,IAAI,EAAc;AAAA,EAAA,IAAZC,IAAI,GAAA7L,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,GAAG;AACvC,EAAA,IAAI8L,OAAO;EACX,IAAIC,SAAS,GAAG,CAAC;AAEjB,EAAA,OAAO,YAAmB;AAAA,IAAA,KAAA,IAAAlL,IAAA,GAAAb,SAAA,CAAAC,MAAA,EAANa,IAAI,GAAA,IAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAJF,MAAAA,IAAI,CAAAE,IAAA,CAAA,GAAAhB,SAAA,CAAAgB,IAAA,CAAA;AAAA,IAAA;IACtB,MAAMe,OAAO,GAAG,IAAI;AACpBgK,IAAAA,SAAS,EAAE;IAEXC,YAAY,CAACF,OAAO,CAAC;IACrBA,OAAO,GAAGG,UAAU,CAAC,MAAM;AACzB,MAAA,MAAM9I,MAAM,GAAGR,kBAAkB,CAACG,KAAK,CACrC,CAAA,UAAA,EAAa8I,IAAI,CAAC5J,IAAI,IAAI,WAAW,EACvC,CAAC;MACD,IAAI;QACF,MAAMwB,MAAM,GAAGoI,IAAI,CAACM,KAAK,CAACnK,OAAO,EAAEjB,IAAI,CAAC;AACxC6B,QAAAA,kBAAkB,CAACO,GAAG,CAACC,MAAM,CAAC;AAC9B,QAAA,OAAOK,MAAM;MACf,CAAC,CAAC,OAAOjD,KAAK,EAAE;AACdoC,QAAAA,kBAAkB,CAACO,GAAG,CAACC,MAAM,CAAC;QAC9BvB,MAAM,CAACrB,KAAK,CAAC,CAAA,gCAAA,EAAmCwL,SAAS,CAAA,EAAA,CAAI,EAAExL,KAAK,CAAC;AACrE,QAAA,MAAMA,KAAK;AACb,MAAA;IACF,CAAC,EAAEsL,IAAI,CAAC;EACV,CAAC;AACH;;AAEA;AACO,MAAMM,YAAY,GAAGR,QAAQ,CAACnB,GAAG,EAAE,EAAE;;;;"}