@fwkui/x-css 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -3
- package/dist/index-auto.d.mts +1 -1
- package/dist/index-auto.d.ts +1 -1
- package/dist/index-auto.js +19 -28
- package/dist/index-auto.js.map +1 -1
- package/dist/index-auto.mjs +19 -28
- package/dist/index-auto.mjs.map +1 -1
- package/dist/index.d.mts +17 -6
- package/dist/index.d.ts +17 -6
- package/dist/index.js +19 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index-auto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index-auto.ts","../src/events.ts","../src/parser.ts","../src/core.ts","../src/bootloader.ts","../src/index.ts"],"sourcesContent":["import fwxcss from './index'\n\n// Auto-init logic\nif (typeof document !== 'undefined') {\n // Wait for DOMContentLoaded to ensure body exists if script is in head?\n // cssObserve handles existing DOM + changes.\n // If script is in head, body might not be parsed yet.\n // But cssObserve observes documentElement (html) or body?\n // core.ts: observeDom takes dom. cssObserve passes document.\n // observeDom checks documentElement. So it's safe to run immediately.\n \n fwxcss.cssObserve(document)\n console.log('🚀 fwxcss Auto-Observer Activated')\n}\n\nexport * from './index'\nexport default fwxcss\n","export type EventType = string | symbol\nexport type Handler<T = any> = (event: T) => void\nexport type WildcardHandler<T = any> = (type: keyof T, event: T[keyof T]) => void\nexport type EventHandlerList<T = any> = Array<Handler<T>>\nexport type WildCardEventHandlerList<T = any> = Array<WildcardHandler<T>>\nexport type EventHandlerMap<T = any> = Map<\n keyof T | '*',\n EventHandlerList<T[keyof T]> | WildCardEventHandlerList<T>\n>\n\nexport interface Emitter<T = any> {\n all: EventHandlerMap<T>\n on<Key extends keyof T>(type: Key, handler: Handler<T[Key]>): void\n on(type: '*', handler: WildcardHandler<T>): void\n off<Key extends keyof T>(type: Key, handler?: Handler<T[Key]>): void\n off(type: '*', handler?: WildcardHandler<T>): void\n emit<Key extends keyof T>(type: Key, event: T[Key]): void\n}\n\nexport const mitt = <T = any>(\n all?: EventHandlerMap<T>,\n): Emitter<T> => {\n all = all || new Map()\n\n return {\n all,\n\n on<Key extends keyof T>(type: Key | '*', handler: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n handlers.push(handler as any)\n } else {\n all!.set(type, [handler] as any)\n }\n },\n\n off<Key extends keyof T>(type: Key | '*', handler?: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n if (handler) {\n handlers.splice(handlers.indexOf(handler as any) >>> 0, 1)\n } else {\n all!.set(type, [])\n }\n }\n },\n\n emit<Key extends keyof T>(type: Key, evt: T[Key]) {\n let handlers = all!.get(type) as EventHandlerList<T[Key]> | undefined\n if (handlers) {\n handlers.slice().forEach((handler) => {\n handler(evt)\n })\n }\n const wildcardHandlers = all!.get('*') as WildCardEventHandlerList<T> | undefined\n if (wildcardHandlers) {\n wildcardHandlers.slice().forEach((handler) => {\n handler(type, evt as any)\n })\n }\n },\n }\n}\n","export type ParsedClass = {\n mq: string // Media Query prefix (sm, md, lg...)\n layer: string // Layer priority (0-9...)\n prop: string // Property name (m, p, fx...)\n val: string // Value part (10px, Red, #fff...)\n selector: string // Selector modifier (&:hover, @...)\n}\n\n/**\n * Finds the first \":\" outside bracketed arbitrary values.\n * Example: \"w[calc(var(--x:y))]\" -> no media colon found.\n */\nfunction findFirstColonOutsideBrackets(input: string, start: number, end: number): number {\n let bracketDepth = 0\n\n for (let i = start; i < end; i++) {\n const code = input.charCodeAt(i)\n\n if (code === 91) { // [\n bracketDepth++\n continue\n }\n\n if (code === 93) { // ]\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n\n if (code === 58 && bracketDepth === 0) { // :\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Finds the last \"@\" outside bracketed arbitrary values.\n * Example: \"cRed@[data-x=\\\"a:b\\\"]\" -> selector starts at that \"@\".\n */\nfunction findLastAtOutsideBrackets(input: string, start: number, end: number): number {\n let bracketDepth = 0\n\n for (let i = end - 1; i >= start; i--) {\n const code = input.charCodeAt(i)\n\n if (code === 93) { // ]\n bracketDepth++\n continue\n }\n\n if (code === 91) { // [\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n\n if (code === 64 && bracketDepth === 0) { // @\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Validates square brackets are balanced in a range.\n * Rejects both missing closing bracket and stray closing bracket.\n */\nfunction hasBalancedSquareBrackets(input: string, start: number, end: number): boolean {\n let bracketDepth = 0\n for (let i = start; i < end; i++) {\n const code = input.charCodeAt(i)\n if (code === 91) { // [\n bracketDepth++\n continue\n }\n if (code === 93) { // ]\n if (bracketDepth === 0) return false\n bracketDepth--\n }\n }\n return bracketDepth === 0\n}\n\n/**\n * Fast checking if a char code is a valid property character (a-z).\n * Note: Dash (-) is treated as start of Value (negative or separator).\n */\nfunction isLowerAlpha(code: number): boolean {\n // a-z: 97-122\n return (code >= 97 && code <= 122)\n}\n\n/**\n * Parses a CSS class string into its components.\n * Format: [Layer][MediaQuery:]PropertyValue[@Selector]\n * Example: \n * - m10px\n * - sm:cRed\n * - 1sm:w100p\n * - hover:bgBlue -> mapped to sm (no, modifiers are usually @hover style in this lib, but mq is prefix)\n * - bgRed@hover\n */\nexport function parseClassName(className: string): ParsedClass | null {\n if (!className || className.length < 2) return null\n if (!hasBalancedSquareBrackets(className, 0, className.length)) return null\n\n let start = 0\n let end = className.length\n\n // 1. Extract Selector Modifier (@...) from the end\n // Use lastIndexOf to find @\n // Note: Some values might contain @ (unlikely in this syntax unless escaped, but let's assume @ starts selector)\n // The regex used @(?<s>.*)$ so it takes everything after last @? Or first @? \n // Regex: (@(?<s>.*))?$ -> It matches @ at the end group.\n\n // Scan for selector \"@\" outside [] from right to left.\n let selector = ''\n let atIndex = findLastAtOutsideBrackets(className, start, end)\n if (atIndex > start) {\n selector = className.substring(atIndex + 1, end)\n end = atIndex\n }\n\n // 2. Extract Media Query / Layer Prefix\n // Look for first ':' outside [] only.\n let mq = ''\n let layer = ''\n const colonIndex = findFirstColonOutsideBrackets(className, start, end)\n\n if (colonIndex > 0 && colonIndex < end) {\n let prefix = className.substring(start, colonIndex)\n start = colonIndex + 1\n\n // Check for Layer Priority in Prefix (e.g. '1sm', '9lg', 'sm')\n // Regex was: ((?<m>xs|sm...):)?(?<l>[0-9]*)?\n // Wait, current Regex allows Layer AFTER MQ? 'sm:9m10px'?\n // Regex: (?<m>...:)? (?<l>[0-9]*)? (?<p>...)\n // So layer is distinct number prefix immediately before property.\n\n // But what if 'sm:' is present?\n // Regex structure: `^((?<m>...):)?(?<l>[0-9]*)?(?<p>...)...`\n // So MQ comes first with colon. THEN Layer number.\n\n mq = prefix\n }\n\n // 3. Extract Layer (Digits at current start)\n // Scan digits\n let digitEnd = start\n while (digitEnd < end) {\n const code = className.charCodeAt(digitEnd)\n if (code >= 48 && code <= 57) { // 0-9\n digitEnd++\n } else {\n break\n }\n }\n\n if (digitEnd > start) {\n layer = className.substring(start, digitEnd)\n start = digitEnd\n }\n\n // 4. Extract Property and Value\n // Property must start with lowercase a-z or dash\n // If it starts with anything else, it's invalid (or handled by special cases)\n // Exception: &... (group 2/3 in regex)\n\n if (start >= end) return null\n\n // Leading \"&...\" is invalid by class syntax rules.\n if (className.charCodeAt(start) === 38) return null\n\n // Check for Alias/Group Syntax: [name]\n // If it starts with [, we capture the whole [...] part as property\n if (className.charCodeAt(start) === 91) { // '['\n const closeIndex = className.indexOf(']', start)\n if (closeIndex > start) {\n return {\n mq,\n layer,\n prop: className.substring(start, closeIndex + 1), // includes [ and ]\n val: '', // Value is empty for alias\n selector\n }\n }\n }\n\n // Scan for Property end\n // Property ends checking isLowerAlphaOrDash.\n // BUT we need to stop when we hit UpperCase, Digit, or specific symbols (!, ., [, ', {)\n\n let propEnd = start\n while (propEnd < end) {\n const code = className.charCodeAt(propEnd)\n\n // Check if current char is dash (-) or dot (.)\n if (code === 45 || code === 46) {\n // Check next char\n if (propEnd + 1 < end) {\n const nextCode = className.charCodeAt(propEnd + 1)\n // `--` indicates a CSS variable value start (e.g. bgc--red)\n if (code === 45 && nextCode === 45 && propEnd > start) {\n break\n }\n // If next valid char is digit (0-9: 48-57), break as it is value start\n if (nextCode >= 48 && nextCode <= 57) {\n break\n }\n }\n // Otherwise, treat dash/dot as part of property and continue\n propEnd++\n continue\n }\n\n // Stop if not a-z\n if (!isLowerAlpha(code)) {\n break\n }\n propEnd++\n }\n\n // If no property part found (and not & case), invalid\n if (propEnd === start) return null\n\n const prop = className.substring(start, propEnd)\n const val = className.substring(propEnd, end)\n\n // Optimization: If val is empty, it might be a flag property? \n // Or invalid? 'flex' (prop=flex, val=\"\") -> valid if display:flex\n // 'red' (prop=red, val=\"\") -> valid color? No, usually prop is 'c', val is 'Red'.\n // If 'red' is passed, prop='red', val=''. Dictionary common lookup 'red' -> 'color: red'.\n // So empty value is valid.\n\n return {\n mq,\n layer,\n prop,\n val,\n selector\n }\n}\n","import { mitt } from './events'\nimport { parseClassName } from './parser'\n\n\nexport type XCSSConfig = {\n base?: string\n aliases?: Record<string, string[]>\n excludes?: string[]\n /** @deprecated Use `excludes` instead. */\n exclude?: string[]\n excludePrefixes?: string[]\n breakpoints?: Record<string, string>[]\n theme?: Record<string, string>\n prefix?: string\n dictionaryImport?: boolean | string\n cache?: {\n styleId?: string\n version?: string\n compression?: boolean\n debounceMs?: number\n }\n}\n\ntype CssPropertyMap = Record<string, string>\ntype CssValueMap = Record<string, Record<string, string>>\ntype CssCommonValueMap = Record<string, string>\n\ntype XCSSDictionaryData = {\n SHORT_PROPERTIES: CssPropertyMap\n COMMON_VALUES: CssCommonValueMap\n SPECIFIC_VALUES: CssValueMap\n}\n\ntype DictionaryModuleShape = Partial<XCSSDictionaryData> & {\n default?: Partial<XCSSDictionaryData>\n}\n\ntype XCSSCacheConfig = {\n styleId: string\n version: string\n compression: boolean\n debounceMs: number\n}\n\ntype XCSSCacheEnvelopeLZW = {\n __xcss_cache_v: 2\n compressed: true\n payload: string\n}\n\ntype XCSSCacheEnvelopeStream = {\n __xcss_cache_v: 3\n compressed: true\n algorithm: 'deflate-raw'\n encoding: 'base64'\n payload: string\n}\n\nconst LEGACY_CACHE_KEY = 'xcss_cache_v1'\n\nconst resolveCacheConfig = (config?: XCSSConfig['cache']): XCSSCacheConfig => {\n const styleId =\n typeof config?.styleId === 'string' && config.styleId.trim()\n ? config.styleId.trim()\n : 'fwkui'\n const version =\n typeof config?.version === 'string' && config.version.trim()\n ? config.version.trim()\n : 'v1'\n const compression = config?.compression ?? true\n const debounceMs =\n typeof config?.debounceMs === 'number' && config.debounceMs >= 0\n ? config.debounceMs\n : 1000\n\n return { styleId, version, compression, debounceMs }\n}\n\nconst createCacheKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_cache_${cache.version}`\n\nconst isCacheEnvelopeLZW = (value: unknown): value is XCSSCacheEnvelopeLZW => {\n if (!value || typeof value !== 'object') return false\n const obj = value as Partial<XCSSCacheEnvelopeLZW>\n return obj.__xcss_cache_v === 2 && obj.compressed === true && typeof obj.payload === 'string'\n}\n\nconst isCacheEnvelopeStream = (value: unknown): value is XCSSCacheEnvelopeStream => {\n if (!value || typeof value !== 'object') return false\n const obj = value as Partial<XCSSCacheEnvelopeStream>\n return (\n obj.__xcss_cache_v === 3 &&\n obj.compressed === true &&\n obj.algorithm === 'deflate-raw' &&\n obj.encoding === 'base64' &&\n typeof obj.payload === 'string'\n )\n}\n\nconst canUseCompressionStream = (): boolean =>\n typeof CompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n\nconst canUseDecompressionStream = (): boolean =>\n typeof DecompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n\nconst bytesToBase64 = (bytes: Uint8Array): string => {\n if (typeof btoa === 'function') {\n let binary = ''\n const CHUNK_SIZE = 0x8000\n for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n const chunk = bytes.subarray(i, i + CHUNK_SIZE)\n for (let j = 0; j < chunk.length; j++) {\n binary += String.fromCharCode(chunk[j])\n }\n }\n return btoa(binary)\n }\n\n const buff = (globalThis as any).Buffer\n if (typeof buff !== 'undefined') {\n return buff.from(bytes).toString('base64')\n }\n\n throw new Error('XCSS: base64 encoding is not supported in this runtime')\n}\n\nconst base64ToBytes = (base64: string): Uint8Array => {\n if (typeof atob === 'function') {\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n }\n\n const buff = (globalThis as any).Buffer\n if (typeof buff !== 'undefined') {\n return new Uint8Array(buff.from(base64, 'base64'))\n }\n\n throw new Error('XCSS: base64 decoding is not supported in this runtime')\n}\n\nconst compressDeflateRawBase64 = async (input: string): Promise<string> => {\n if (!canUseCompressionStream()) {\n throw new Error('XCSS: CompressionStream is not supported')\n }\n\n const stream = new Blob([input])\n .stream()\n .pipeThrough(new CompressionStream('deflate-raw'))\n\n const compressed = await new Response(stream).arrayBuffer()\n return bytesToBase64(new Uint8Array(compressed))\n}\n\nconst decompressDeflateRawBase64 = async (payload: string): Promise<string> => {\n if (!canUseDecompressionStream()) {\n throw new Error('XCSS: DecompressionStream is not supported')\n }\n\n const bytes = base64ToBytes(payload)\n const normalized = new Uint8Array(bytes.length)\n normalized.set(bytes)\n const stream = new Blob([normalized.buffer])\n .stream()\n .pipeThrough(new DecompressionStream('deflate-raw'))\n\n return await new Response(stream).text()\n}\n\nconst isStreamCacheEnvelopeRaw = (raw: string): boolean => {\n try {\n const parsed = JSON.parse(raw)\n return isCacheEnvelopeStream(parsed)\n } catch (_error) {\n return false\n }\n}\n\nconst compressLZW = (input: string): string => {\n if (!input) return ''\n\n const dictionary = new Map<string, number>()\n const codes: number[] = []\n let dictSize = 256\n\n for (let i = 0; i < 256; i++) {\n dictionary.set(String.fromCharCode(i), i)\n }\n\n let phrase = input[0]\n for (let i = 1; i < input.length; i++) {\n const currentChar = input[i]\n const phraseWithChar = phrase + currentChar\n if (dictionary.has(phraseWithChar)) {\n phrase = phraseWithChar\n } else {\n codes.push(dictionary.get(phrase)!)\n dictionary.set(phraseWithChar, dictSize++)\n phrase = currentChar\n }\n }\n codes.push(dictionary.get(phrase)!)\n\n return codes.map((code) => String.fromCharCode(code)).join('')\n}\n\nconst decompressLZW = (compressed: string): string => {\n if (!compressed) return ''\n\n const dictionary = new Map<number, string>()\n let dictSize = 256\n let result = ''\n\n for (let i = 0; i < 256; i++) {\n dictionary.set(i, String.fromCharCode(i))\n }\n\n const codes = compressed.split('').map((char) => char.charCodeAt(0))\n let previous = codes[0]\n let phrase = dictionary.get(previous) || ''\n result = phrase\n\n for (let i = 1; i < codes.length; i++) {\n const current = codes[i]\n let entry = dictionary.get(current)\n if (!entry) {\n entry = current === dictSize ? phrase + phrase[0] : ''\n }\n result += entry\n dictionary.set(dictSize++, phrase + entry[0])\n phrase = entry\n }\n\n return result\n}\n\nconst resolveDictionaryData = (mod: unknown): XCSSDictionaryData | null => {\n if (!mod || typeof mod !== 'object') return null\n\n const moduleObj = mod as DictionaryModuleShape\n const source =\n moduleObj.default && typeof moduleObj.default === 'object'\n ? moduleObj.default\n : moduleObj\n\n const short = source.SHORT_PROPERTIES\n const common = source.COMMON_VALUES\n const specific = source.SPECIFIC_VALUES\n\n if (!short || !common || !specific) return null\n if (\n typeof short !== 'object' ||\n typeof common !== 'object' ||\n typeof specific !== 'object'\n ) {\n return null\n }\n\n return {\n SHORT_PROPERTIES: short,\n COMMON_VALUES: common,\n SPECIFIC_VALUES: specific,\n }\n}\n\nconst loadExternalDictionary = async (source: string): Promise<XCSSDictionaryData> => {\n const mod = await import(/* @vite-ignore */ source)\n const data = resolveDictionaryData(mod)\n if (!data) {\n throw new Error(DICTIONARY_MODULE_ERROR)\n }\n return data\n}\n\nconst DICTIONARY_MODULE_ERROR =\n 'XCSS: dictionary module must export SHORT_PROPERTIES, COMMON_VALUES and SPECIFIC_VALUES'\n\nconst loadBuiltinDictionarySync = (): XCSSDictionaryData | null => {\n // Keep Node compatibility for synchronous flows (SSR/tests in CJS).\n const req = typeof require === 'function' ? require : null\n if (!req) return null\n\n for (const source of ['./dictionary.js', './dictionary']) {\n try {\n const mod = req(source)\n const data = resolveDictionaryData(mod)\n if (data) return data\n } catch (_error) {\n // try next candidate\n }\n }\n return null\n}\n\nconst loadBuiltinDictionary = async (): Promise<XCSSDictionaryData> => {\n const syncData = loadBuiltinDictionarySync()\n if (syncData) return syncData\n\n const candidates = ['./dictionary.mjs', './dictionary.js', './dictionary']\n let lastError: unknown = null\n\n for (const source of candidates) {\n try {\n const mod = await import(/* @vite-ignore */ source)\n const data = resolveDictionaryData(mod)\n if (data) return data\n } catch (error) {\n lastError = error\n }\n }\n\n if (lastError) throw lastError\n throw new Error(DICTIONARY_MODULE_ERROR)\n}\n\nconst setupCssLayers = (docRoot: Document | ShadowRoot | null, id?: string) => {\n if (!docRoot || typeof document === 'undefined') return\n id = id || 'fwkui'\n\n // Tạo danh sách các layer\n const layers = Array.from({ length: 24 }, (_, i) => {\n return 'l' + i\n })\n\n // Check if style exists\n // If it exists but we cleared it (because cache mismatch), treat as if it doesn't exist?\n // Actually, logic below handles creation.\n // If we want to reuse existing style (e.g. bootloader's which we decided to REMOVE in buildCss),\n // then this logic is fine as it creates a fresh one.\n // If we kept bootloader style, we would need to modify this.\n // Since we decided to REMOVE bootloader style in buildCss, this function will naturally create a new property structure.\n // This is safer.\n\n // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n // docRoot.appendChild(styleElement);\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\n\n // Chèn quy tắc @layer\n const layerRule = `@layer ${layers.join(', ')};`\n // Use requestAnimationFrame or setTimeout instead of setInterval for cleaner approach if possible,\n // keeping setInterval to match original logic but with clear logic.\n let iterval = setInterval(() => {\n if (styleElement.sheet) {\n clearInterval(iterval)\n try {\n styleElement.sheet.insertRule(\n layerRule,\n styleElement.sheet.cssRules.length,\n )\n } catch (e) {\n // ignore error if insertRule fails\n }\n }\n }, 10) // 10ms check\n }\n}\n\n// Helper to hash config\nconst hashConfig = (config: XCSSConfig): string => {\n const excludes = Array.isArray(config.excludes)\n ? config.excludes\n : Array.isArray(config.exclude)\n ? config.exclude\n : []\n const cache = resolveCacheConfig(config.cache)\n\n const str = JSON.stringify({\n base: config.base || '',\n aliases: config.aliases || {},\n breakpoints: config.breakpoints || [],\n theme: config.theme || {},\n prefix: config.prefix || '',\n excludes,\n excludePrefixes: config.excludePrefixes || [],\n dictionaryImport: config.dictionaryImport ?? true,\n cache,\n })\n\n let hash = 0\n if (str.length === 0) return hash.toString()\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash.toString()\n}\n\ninterface XCSSCacheData {\n configHash: string\n cssText: Record<string, string>\n rulesSet: Record<string, string[]>\n keys: [string, string][]\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nconst parseCacheDataSync = (raw: string | null): XCSSCacheData | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw)\n if (isCacheEnvelopeLZW(parsed)) {\n const expanded = decompressLZW(parsed.payload)\n if (!expanded) return null\n const data = JSON.parse(expanded) as XCSSCacheData\n return data\n }\n if (isCacheEnvelopeStream(parsed)) return null\n return parsed as XCSSCacheData\n } catch (_error) {\n return null\n }\n}\n\nconst parseCacheDataAsync = async (raw: string | null): Promise<XCSSCacheData | null> => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw)\n if (isCacheEnvelopeLZW(parsed)) {\n const expanded = decompressLZW(parsed.payload)\n if (!expanded) return null\n return JSON.parse(expanded) as XCSSCacheData\n }\n if (isCacheEnvelopeStream(parsed)) {\n const expanded = await decompressDeflateRawBase64(parsed.payload)\n if (!expanded) return null\n return JSON.parse(expanded) as XCSSCacheData\n }\n return parsed as XCSSCacheData\n } catch (_error) {\n return null\n }\n}\n\nconst unwrapCachedCssText = (mediaKey: string, text: string): string => {\n if (mediaKey === 'root') return text\n const match = /@media[^{]+\\{\\n?([\\s\\S]+)\\n?\\}/.exec(text)\n if (match && match[1]) return match[1].trim()\n return text\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nexport const xcss = (\n modules: XCSSConfig = {\n base: '',\n aliases: {},\n excludes: [],\n excludePrefixes: [],\n breakpoints: [],\n theme: {},\n prefix: '',\n dictionaryImport: true,\n cache: {\n styleId: 'fwkui',\n version: 'v1',\n compression: true,\n debounceMs: 1000,\n },\n },\n) => {\n // OLD: LZW parsing Logic removed\n // let CSS_PV: string[] = []\n // try {\n // CSS_PV = JSON.parse(decompressLZW(cssText))\n // } catch (e) { ... }\n\n let {\n base: cssDefault = null,\n breakpoints: mediaQuery = [],\n aliases: groupValues = {},\n theme: valueExt = {},\n excludes: excludeNames = [],\n exclude: excludeLegacy = [],\n excludePrefixes = [],\n prefix = '',\n dictionaryImport = true,\n cache: cacheOptions = {},\n } = modules || {}\n\n if (!Array.isArray(mediaQuery)) mediaQuery = []\n if (!Array.isArray(excludeNames)) excludeNames = []\n if (!Array.isArray(excludeLegacy)) excludeLegacy = []\n if (!Array.isArray(excludePrefixes)) excludePrefixes = []\n if (!groupValues || typeof groupValues !== 'object') groupValues = {}\n if (!valueExt || typeof valueExt !== 'object') valueExt = {}\n\n const cacheConfig = resolveCacheConfig(cacheOptions)\n const cacheKey = createCacheKey(cacheConfig)\n\n const mergedExcludes = [...excludeNames, ...excludeLegacy]\n\n const normalizedExcludePrefixes = excludePrefixes\n .filter((x): x is string => typeof x === 'string')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n\n const globToRegex = (pattern: string): RegExp => {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return new RegExp('^' + escaped.replace(/\\*/g, '.*') + '$')\n }\n\n const excludeRules = mergedExcludes\n .filter((x): x is string => typeof x === 'string')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n .map((pattern) => {\n if (pattern.includes('*')) {\n const regex = globToRegex(pattern)\n return (cls: string) => regex.test(cls)\n }\n return (cls: string) => cls === pattern\n })\n\n const isExcludedClass = (txtClass: string): boolean => {\n if (normalizedExcludePrefixes.some((prefixText) => txtClass.startsWith(prefixText))) {\n return true\n }\n return excludeRules.some((rule) => rule(txtClass))\n }\n\n const shouldProcessClass = (txtClass: string): boolean => {\n // Step 1: Exclude rules first.\n if (isExcludedClass(txtClass)) return false\n // Step 2: Prefix check.\n if (prefix && !txtClass.startsWith(prefix)) return false\n return true\n }\n\n const defaultMediaKeys = ['default', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'sma', 'mda', 'lga', 'xla']\n const customMediaKeys = mediaQuery\n .filter((m): m is Record<string, string> => !!m && typeof m === 'object' && !Array.isArray(m))\n .map((m) => Object.keys(m)[0])\n .filter((k): k is string => typeof k === 'string' && k.length > 0)\n const mediaKeySet = new Set<string>([...defaultMediaKeys, ...customMediaKeys])\n const isValidMediaKey = (mq?: string): boolean => !mq || mediaKeySet.has(mq)\n const shouldEnforceKnownProperties = dictionaryImport !== false\n const compositePropertyKeys = new Set(['mx', 'my', 'px', 'py', 'bdx', 'bdy'])\n let knownFullPropertyNames = new Set<string>()\n const isKnownPropertyKey = (prop: string): boolean => {\n if (!prop) return false\n if (!shouldEnforceKnownProperties) return true\n if (!PropertiesCss || Object.keys(PropertiesCss).length === 0) return true\n return !!PropertiesCss[prop] || compositePropertyKeys.has(prop) || knownFullPropertyNames.has(prop)\n }\n\n let PropertiesCss: CssPropertyMap = {}\n let ValueExts: CssValueMap = {}\n let CommonValues: CssCommonValueMap = {}\n let exts: Record<string, string> = {}\n\n const rebuildExts = () => {\n exts = {\n ...CommonValues,\n ...valueExt,\n }\n }\n\n const applyDictionary = (dictionary: XCSSDictionaryData | null) => {\n if (!dictionary) {\n PropertiesCss = {}\n ValueExts = {}\n CommonValues = {}\n knownFullPropertyNames = new Set()\n rebuildExts()\n return\n }\n\n PropertiesCss = dictionary.SHORT_PROPERTIES\n ValueExts = dictionary.SPECIFIC_VALUES\n CommonValues = dictionary.COMMON_VALUES\n knownFullPropertyNames = new Set(Object.values(PropertiesCss))\n rebuildExts()\n }\n\n let dictionaryReady = true\n let dictionaryReadyPromise: Promise<void> = Promise.resolve()\n\n if (dictionaryImport === false) {\n applyDictionary(null)\n } else if (typeof dictionaryImport === 'string') {\n dictionaryReady = false\n applyDictionary(null)\n dictionaryReadyPromise = loadExternalDictionary(dictionaryImport)\n .then((dictionary) => {\n applyDictionary(dictionary)\n })\n .catch((error) => {\n console.warn('XCSS: Failed to import dictionary from URL', error)\n })\n .finally(() => {\n dictionaryReady = true\n })\n } else {\n const syncBuiltinDictionary = loadBuiltinDictionarySync()\n if (syncBuiltinDictionary) {\n applyDictionary(syncBuiltinDictionary)\n } else {\n dictionaryReady = false\n applyDictionary(null)\n dictionaryReadyPromise = loadBuiltinDictionary()\n .then((dictionary) => {\n applyDictionary(dictionary)\n })\n .catch((error) => {\n console.warn('XCSS: Failed to load built-in dictionary module', error)\n })\n .finally(() => {\n dictionaryReady = true\n })\n }\n }\n\n let lastKnownCacheData: XCSSCacheData | null = null\n\n\n\n const buildCss = (doc: Document | ShadowRoot | Element | undefined = typeof document !== 'undefined' ? document : undefined) => {\n // If running in non-browser environment without a doc, we can still simulate for extraction\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n let docRoot: Document | ShadowRoot | null = null\n const hasBaseOverride = Array.isArray(cssDefault) ? cssDefault.length > 0 : !!cssDefault\n\n if (doc) {\n docRoot = 'getRootNode' in doc ? (doc.getRootNode() as Document | ShadowRoot) : (doc as any)\n }\n\n const CSS_KEYS = new Map<string, string>()\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot, cacheConfig.styleId)\n }\n\n let emitter = mitt()\n let mqDfAll = [\n { default: '' },\n { xs: 'screen and (max-width: 575px)' },\n { sm: 'screen and (min-width: 576px)' },\n { md: 'screen and (min-width: 768px)' },\n { lg: 'screen and (min-width: 992px)' },\n { xl: 'screen and (min-width: 1200px)' },\n { '2xl': 'screen and (min-width: 1400px)' },\n { sma: 'screen and (max-width: 768px)' },\n { mda: 'screen and (max-width: 992px)' },\n { lga: 'screen and (max-width: 1200px)' },\n { xla: 'screen and (max-width: 1400px)' },\n ...mediaQuery,\n ]\n\n let mqDf = mqDfAll.filter(\n (f, i) =>\n mqDfAll.findLastIndex(\n (fi: any) => Object.keys(fi)[0] == Object.keys(f)[0],\n ) == i,\n )\n\n let keysCssStyleSheetsDom = mqDf.map((m) => Object.keys(m)[0])\n\n const cssStyleSheetsSet: Record<string, Set<string>> = {}\n const cssStyleSheetsDom: Record<string, CSSStyleSheet> = {}\n\n // Store text content for SSR/Extraction\n const cssStyleSheetsText: Record<string, string> = { root: '' }\n const cssStyleSheetsPending: Record<string, string[]> = { root: [] }\n const cssStyleSheetsPendingScheduled: Record<string, boolean> = { root: false }\n\n // Cache Key & Logic\n let currentConfigHash = hashConfig(modules)\n let debounceTimer: any = null\n let latestSaveTicket = 0\n let cacheLoaded = false\n let loadedCacheData: XCSSCacheData | null = null\n let loadedCacheStorageKey: string | null = null\n const asyncCacheCandidates: Array<{ key: string, raw: string }> = []\n\n const writeCache = (value: string) => {\n try {\n window.localStorage.setItem(cacheKey, value)\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const removeCacheIfUnchanged = (key: string, expectedRaw?: string) => {\n if (!isBrowser || !window.localStorage) return\n\n if (typeof expectedRaw === 'string') {\n const currentRaw = window.localStorage.getItem(key)\n if (currentRaw !== expectedRaw) return\n }\n\n window.localStorage.removeItem(key)\n }\n\n const saveCache = (data: XCSSCacheData) => {\n if (!isBrowser || !window.localStorage) return\n lastKnownCacheData = data\n const ticket = ++latestSaveTicket\n try {\n const json = JSON.stringify(data)\n\n const writeLZWEnvelope = () => {\n const envelope: XCSSCacheEnvelopeLZW = {\n __xcss_cache_v: 2,\n compressed: true,\n payload: compressLZW(json),\n }\n writeCache(JSON.stringify(envelope))\n }\n\n if (!cacheConfig.compression) {\n writeCache(json)\n return\n }\n\n if (canUseCompressionStream() && canUseDecompressionStream()) {\n void compressDeflateRawBase64(json)\n .then((payload) => {\n if (ticket !== latestSaveTicket) return\n const envelope: XCSSCacheEnvelopeStream = {\n __xcss_cache_v: 3,\n compressed: true,\n algorithm: 'deflate-raw',\n encoding: 'base64',\n payload,\n }\n writeCache(JSON.stringify(envelope))\n })\n .catch(() => {\n if (ticket !== latestSaveTicket) return\n writeLZWEnvelope()\n })\n return\n }\n\n writeLZWEnvelope()\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const triggerSave = () => {\n if (!isBrowser) return\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(() => {\n const rulesSetObj: Record<string, string[]> = {}\n for (const k in cssStyleSheetsSet) {\n rulesSetObj[k] = Array.from(cssStyleSheetsSet[k])\n }\n\n // Prepare CSS Text with @media wrapping for Bootloader\n const cssTextForCache: Record<string, string> = {}\n Object.keys(cssStyleSheetsText).forEach(k => {\n if (k === 'root') {\n cssTextForCache[k] = cssStyleSheetsText[k]\n } else {\n const mqStr = mqDfAll.find(m => Object.keys(m)[0] === k)?.[k]\n // Only wrap if meaningful content\n if (mqStr && cssStyleSheetsText[k]) {\n cssTextForCache[k] = `@media ${mqStr} {\\n${cssStyleSheetsText[k]}\\n}`\n } else {\n cssTextForCache[k] = cssStyleSheetsText[k] || ''\n }\n }\n })\n\n const data: XCSSCacheData = {\n configHash: currentConfigHash,\n cssText: cssTextForCache,\n rulesSet: rulesSetObj,\n keys: Array.from(CSS_KEYS.entries())\n }\n saveCache(data)\n }, cacheConfig.debounceMs)\n }\n\n // Load Cache Logic (Sync)\n if (isBrowser && window.localStorage) {\n try {\n const cacheKeysToTry = cacheKey === LEGACY_CACHE_KEY\n ? [cacheKey]\n : [cacheKey, LEGACY_CACHE_KEY]\n\n for (const candidateKey of cacheKeysToTry) {\n const raw = window.localStorage.getItem(candidateKey)\n if (!raw) continue\n\n const data = parseCacheDataSync(raw)\n if (!data) {\n if (isStreamCacheEnvelopeRaw(raw)) {\n asyncCacheCandidates.push({ key: candidateKey, raw })\n continue\n }\n\n window.localStorage.removeItem(candidateKey)\n continue\n }\n\n if (data.configHash !== currentConfigHash) {\n window.localStorage.removeItem(candidateKey)\n continue\n }\n\n loadedCacheData = data\n loadedCacheStorageKey = candidateKey\n cacheLoaded = true\n break\n }\n\n if (loadedCacheData) {\n // Restore Keys\n if (loadedCacheData.keys) {\n loadedCacheData.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n\n // Restore Text (Unwrap for internal use)\n if (loadedCacheData.cssText) {\n for (const k in loadedCacheData.cssText) {\n const txt = loadedCacheData.cssText[k]\n cssStyleSheetsText[k] = unwrapCachedCssText(k, txt)\n }\n }\n lastKnownCacheData = loadedCacheData\n }\n } catch (e) { console.error(e) }\n }\n\n // Init sheets & Finish Hydration\n if (isBrowser) {\n cssStyleSheetsDom['root'] = new CSSStyleSheet()\n }\n\n keysCssStyleSheetsDom.forEach((k) => {\n cssStyleSheetsSet[k] = new Set()\n if (isBrowser) {\n const media = mqDf.find((m) => Object.keys(m)[0] == k)?.[k] || ''\n cssStyleSheetsDom[k] = new CSSStyleSheet({ media })\n }\n // If NOT loaded from cache, ensure empty.\n if (!cacheLoaded) {\n cssStyleSheetsText[k] = ''\n }\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n const removeBootloaderStyle = () => {\n if (!docRoot) return\n const blStyle = docRoot.querySelector(`style[id=\"${cacheConfig.styleId}\"]`)\n if (blStyle) blStyle.remove()\n }\n\n const hydrateCacheAfterInit = (data: XCSSCacheData, sourceKey: string | null) => {\n if (data.keys) {\n data.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n\n if (data.cssText) {\n for (const k in data.cssText) {\n if (k === 'root' && hasBaseOverride) continue\n\n const txt = unwrapCachedCssText(k, data.cssText[k])\n cssStyleSheetsText[k] = txt\n if (isBrowser && cssStyleSheetsDom[k]) {\n cssStyleSheetsDom[k].replaceSync(txt)\n }\n }\n }\n\n if (data.rulesSet) {\n for (const k in data.rulesSet) {\n if (!cssStyleSheetsSet[k]) cssStyleSheetsSet[k] = new Set()\n data.rulesSet[k].forEach(r => cssStyleSheetsSet[k].add(r))\n }\n }\n\n if (\n isBrowser &&\n window.localStorage &&\n sourceKey === LEGACY_CACHE_KEY &&\n cacheKey !== LEGACY_CACHE_KEY\n ) {\n saveCache(data)\n window.localStorage.removeItem(LEGACY_CACHE_KEY)\n }\n\n lastKnownCacheData = data\n removeBootloaderStyle()\n }\n\n // Post-Init Hydration: Populate from sync cache\n if (cacheLoaded && loadedCacheData) {\n hydrateCacheAfterInit(loadedCacheData, loadedCacheStorageKey)\n }\n\n if (cssDefault && Array.isArray(cssDefault)) {\n cssStyleSheetsText.root = cssDefault.join('\\n')\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n } else {\n cssStyleSheetsText.root = (cssDefault as string) || ''\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n }\n\n if (isBrowser && docRoot) {\n ['root', ...keysCssStyleSheetsDom].forEach((k) => {\n if (cssStyleSheetsDom[k] && docRoot?.adoptedStyleSheets) {\n if (!docRoot.adoptedStyleSheets.includes(cssStyleSheetsDom[k])) {\n docRoot.adoptedStyleSheets = [\n ...docRoot.adoptedStyleSheets,\n cssStyleSheetsDom[k],\n ]\n }\n }\n })\n }\n\n // Fallback async hydration for stream-compressed cache payloads.\n if (isBrowser && window.localStorage && asyncCacheCandidates.length > 0) {\n void (async () => {\n for (const candidate of asyncCacheCandidates) {\n const data = await parseCacheDataAsync(candidate.raw)\n if (!data) {\n removeCacheIfUnchanged(candidate.key, candidate.raw)\n continue\n }\n\n if (data.configHash !== currentConfigHash) {\n removeCacheIfUnchanged(candidate.key, candidate.raw)\n continue\n }\n\n if (!cacheLoaded) {\n cacheLoaded = true\n loadedCacheData = data\n loadedCacheStorageKey = candidate.key\n hydrateCacheAfterInit(data, candidate.key)\n break\n }\n }\n })()\n }\n\n const updateRules = (txtCls: string, d: any) => {\n let { media, property, selector, layer, className } = d\n\n let cssTextStore = cssStyleSheetsText\n let cssPending = cssStyleSheetsPending\n let cssPendingScheduled = cssStyleSheetsPendingScheduled\n\n layer = Number(layer) || 0\n // let classNameStr2 = className\n let cssExts = CSS_KEYS.get(txtCls)\n let cssName = cssExts\n ? `.${cssExts}${selector}`\n : `.${className}${selector}`\n\n var txtCss = `@layer l${layer}{${cssName}{${property}}}`\n\n if (!cssStyleSheetsSet[media]) {\n // Fallback or init if missing\n cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Add valid media/pending arrays if missed\n if (!cssPending[media]) cssPending[media] = []\n\n cssPending[media].push(txtCss)\n\n // If not in browser, we can just sync immediately or keep it pending\n // But for SSR extraction, we want it in cssTextStore\n if (!isBrowser) {\n const pending = cssPending[media]\n if (pending.length > 0) {\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n cssPending[media] = []\n }\n } else {\n if (!cssPendingScheduled[media]) {\n cssPendingScheduled[media] = true\n queueMicrotask(() => {\n const pending = cssPending[media]\n const sheet = cssStyleSheetsDom[media]\n if (pending.length > 0) {\n cssTextStore[media] +=\n (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n if (sheet) {\n sheet.replaceSync(cssTextStore[media])\n }\n cssPending[media] = []\n triggerSave() // TRIGGER SAVE CACHE\n }\n cssPendingScheduled[media] = false\n })\n }\n }\n }\n }\n\n const applyObservedItems = (items: string[]) => {\n items.forEach((cls) => {\n let item = classToProp(cls)\n item && updateRules(cls, item)\n })\n }\n\n const processObservedItems = (items: string[]) => {\n if (items.length === 0) return\n\n const run = () => applyObservedItems(items)\n if (dictionaryReady) {\n run()\n } else {\n dictionaryReadyPromise.then(run)\n }\n }\n\n emitter.on('observeDom' as any, processObservedItems)\n\n const clsx = (...clsArrs: any[]) => {\n let lsCss = clsArrs\n .map((m) => (Array.isArray(m) ? m : [m]))\n .flat(Infinity)\n .map((m) => (typeof m === 'string' ? m.split(/(\\s|\\t)+/g) : []))\n .flat(Infinity) as string[]\n\n lsCss = lsCss.filter((m) => typeof m === 'string' && m.trim())\n\n lsCss = [...new Set(lsCss)]\n\n const shouldHashClass = (txtClass: string): boolean => {\n if (!shouldProcessClass(txtClass)) return false\n\n if (dictionaryReady) {\n return !!classToProp(txtClass)\n }\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const parsed = parseClassName(parseTarget)\n if (!parsed) return false\n if (!isValidMediaKey(parsed.mq)) return false\n\n const selectorStr = (parsed.selector || '').replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n if (selectorStr && !isLikelyValidSelectorFallback(selectorStr)) return false\n\n if (parsed.prop.startsWith('[')) {\n return !!propsValueExt(parsed.prop + parsed.val)\n }\n if (!isKnownPropertyKey(parsed.prop)) return false\n if (parsed.prop === '&') return parsed.val.length > 0\n return parsed.val.length > 0\n }\n\n let lsClassNew = lsCss.map((l: string) => {\n let item = l\n if (CSS_KEYS.has(l)) {\n item = CSS_KEYS.get(l)!\n } else {\n // Only hash class names that can actually generate valid CSS.\n // Invalid/unsupported tokens (e.g. \"bs-a\") must stay raw.\n if (shouldHashClass(l)) {\n\n let key = 'D' + CSS_KEYS.size.toString(32).toUpperCase()\n CSS_KEYS.set(l, key)\n item = key\n triggerSave() // TRIGGER SAVE CACHE\n }\n }\n // console.log(\"item\", item);\n return item\n })\n\n // Emit event to update styles\n // In SSR/Non-browser, we might want to sync immediately?\n // Emit event to update styles\n // In SSR/Non-browser, sync immediately for extraction support\n if (!isBrowser) {\n emitter.emit('observeDom' as any, lsCss)\n } else {\n queueMicrotask(() => emitter.emit('observeDom' as any, lsCss))\n }\n\n return lsClassNew.join(' ')\n }\n\n const observe = () => {\n if (!isBrowser || !docRoot) return\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n processObservedItems(items)\n })\n }\n\n const getCssString = () => {\n return Object.entries(cssStyleSheetsText).map(([media, css]) => {\n if (!css) return ''\n if (media === 'root' || media === 'default') return css\n // Wrap in media query\n const mediaQueryStr = mqDfAll.find(m => Object.keys(m)[0] === media)?.[media]\n if (mediaQueryStr) {\n return `@media ${mediaQueryStr} {\\n${css}\\n}`\n }\n return css\n }).join('\\n')\n }\n\n return { clsx, observe, getCssString }\n }\n\n\n function propsValueExt(txtProps: string) {\n const REGEX_CSS = new RegExp('^(\\\\[(?<p>[a-zA-Z]+)\\\\])$')\n let { p = '' } = REGEX_CSS.exec(txtProps)?.groups ?? {}\n if (p && groupValues[p] && Array.isArray(groupValues[p])) {\n let cssProp = groupValues[p]\n\n let resolvedProps: string[] = []\n let isAllValidUtilities = true\n const normalizeAliasDeclaration = (input: string): string | null => {\n const text = input.trim()\n if (!text) return null\n\n const cleaned = text.endsWith(';') ? text.slice(0, -1).trim() : text\n const colonIndex = cleaned.indexOf(':')\n if (colonIndex <= 0 || colonIndex >= cleaned.length - 1) return null\n\n const prop = cleaned.slice(0, colonIndex).trim()\n const value = cleaned.slice(colonIndex + 1).trim()\n if (!prop || !value) return null\n if (!/^(?:--[a-zA-Z0-9-_]+|-?[a-zA-Z][a-zA-Z0-9-]*)$/.test(prop)) return null\n\n return `${prop}:${value}`\n }\n\n for (const cls of cssProp) {\n if (typeof cls !== 'string') {\n isAllValidUtilities = false\n break\n }\n\n const declaration = normalizeAliasDeclaration(cls)\n if (declaration) {\n if (typeof CSS !== 'undefined' && !CSS.supports(declaration)) {\n isAllValidUtilities = false\n break\n }\n resolvedProps.push(declaration)\n continue\n }\n\n isAllValidUtilities = false\n break\n }\n\n if (resolvedProps.length > 0 && isAllValidUtilities) {\n return resolvedProps.join(';')\n }\n }\n\n return null\n }\n\n function propToValue(p: string, v: string): string | null {\n // Step 0: Check config extensions\n let gvalue = propsValueExt(p + v)\n if (gvalue) return gvalue\n\n if (!p || v === undefined) return null\n\n // Step 1: Normalize Property Key\n let c = PropertiesCss[p]\n let propertyName = c ? c : p\n\n // Step 2: Analyze Value (Important, Arbitrary, Variable)\n let v0 = v[0]\n let i = false\n let vx = v\n\n // 2.1 Check Important (!)\n if (v0 === '!') {\n i = true\n vx = vx.substring(1)\n v0 = vx[0] // update first char\n }\n\n // 2.2 Normalize Value Key (Lowercase if alpha) \n // Only if not arbitrary or variable\n // But arbitrary starts with [ or {\n if (vx.startsWith('--')) {\n vx = 'var(' + vx + ')'\n } else if (v0 === '[' && vx.endsWith(']')) {\n // Arbitrary Value: Strip brackets\n vx = vx.substring(1, vx.length - 1)\n } else {\n // Dictionary Value Lookup\n if (vx.length > 0) {\n // Try lowercasing the whole key for Dictionary Lookup.\n let lookupKey = vx[0].toLowerCase() + vx.substring(1)\n\n // Try 1: Standard (first char lower)\n let val = ValueExts[p]?.[lookupKey] || exts[lookupKey]\n\n // Try 2: Full Lowercase (e.g. SB -> sb)\n if (!val) {\n let lowerKey = vx.toLowerCase()\n val = ValueExts[p]?.[lowerKey] || exts[lowerKey]\n }\n\n vx = val || vx\n }\n }\n\n // Step 3: Replace Semicolon\n vx = vx.replace(/(';|;)/g, (val: string) => (val == \"';\" ? ';' : ' '))\n\n if (!vx) return null\n\n // Step 4: Construct CSS\n let vxx = vx + (i ? ' !important' : '')\n let cssProp = [propertyName + ':' + vxx]\n\n switch (propertyName) {\n case 'mx':\n cssProp = [`margin-left:${vxx}`, `margin-right:${vxx}`]\n break\n case 'my':\n cssProp = [`margin-top:${vxx}`, `margin-bottom:${vxx}`]\n break\n case 'px':\n cssProp = [`padding-left:${vxx}`, `padding-right:${vxx}`]\n break\n case 'py':\n cssProp = [`padding-top:${vxx}`, `padding-bottom:${vxx}`]\n break\n case 'bdx':\n cssProp = [`border-left:${vxx}`, `border-right:${vxx}`]\n break\n case 'bdy':\n cssProp = [`border-top:${vxx}`, `border-bottom:${vxx}`]\n break\n }\n\n const isBrowser = typeof CSS !== 'undefined'\n if (!isBrowser || cssProp.every((x) => CSS.supports(x))) {\n return cssProp.join(';')\n }\n\n return null\n }\n\n const splitSelectorSuffix = (input: string): { body: string, selector: string } => {\n let bracketDepth = 0\n for (let i = input.length - 1; i >= 0; i--) {\n const ch = input[i]\n if (ch === ']') {\n bracketDepth++\n continue\n }\n if (ch === '[') {\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n if (ch === '@' && bracketDepth === 0) {\n return {\n body: input.slice(0, i),\n selector: input.slice(i + 1),\n }\n }\n }\n return { body: input, selector: '' }\n }\n\n const splitByAmpersandOutsideBrackets = (input: string): string[] => {\n const parts: string[] = []\n let start = 0\n let bracketDepth = 0\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '[') {\n bracketDepth++\n continue\n }\n if (ch === ']') {\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n if (ch === '&' && bracketDepth === 0) {\n parts.push(input.slice(start, i))\n start = i + 1\n }\n }\n\n parts.push(input.slice(start))\n return parts\n }\n\n const isLikelyValidSelectorFallback = (selector: string): boolean => {\n if (!selector) return true\n const text = selector.trim()\n if (!text) return true\n if (/[{}]/.test(text)) return false\n if (text === '#' || text === '(' || text === ')' || text === ',' || text === '>' || text === '+' || text === '~') return false\n if (text.startsWith('(') || text.startsWith(')')) return false\n\n let roundDepth = 0\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n if (ch === '(') {\n roundDepth++\n continue\n }\n if (ch === ')') {\n if (roundDepth === 0) return false\n roundDepth--\n }\n }\n\n return roundDepth === 0\n }\n\n function classToProp(txtClass: string) {\n if (!shouldProcessClass(txtClass)) return null\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const className = typeof CSS !== 'undefined' ? CSS.escape(txtClass) : escapeCssIdentifier(txtClass)\n\n // Support chained utilities: \"md:dF&fxdC@;li\", \"dF&fk-fxdC@;li\", \"md:[grp1]&[grp2]@;li\"\n if (parseTarget.includes('&') && !parseTarget.startsWith('&')) {\n const { body, selector } = splitSelectorSuffix(parseTarget)\n const segments = splitByAmpersandOutsideBrackets(body)\n .map((seg) => seg.trim())\n .filter((seg) => seg.length > 0)\n .map((seg) => (prefix && seg.startsWith(prefix) ? seg.slice(prefix.length) : seg))\n\n if (segments.length > 1) {\n let rootMedia = ''\n let rootLayer = ''\n const rootSelector = selector\n let hasRoot = false\n const cssPropItems: string[] = []\n\n for (const seg of segments) {\n const segClass = rootSelector ? `${seg}@${rootSelector}` : seg\n const parsedSeg = parseClassName(segClass)\n if (!parsedSeg) return null\n if (!isValidMediaKey(parsedSeg.mq)) return null\n if (!parsedSeg.prop.startsWith('[') && !isKnownPropertyKey(parsedSeg.prop)) return null\n\n if (!hasRoot) {\n rootMedia = parsedSeg.mq || ''\n rootLayer = parsedSeg.layer || ''\n hasRoot = true\n } else {\n if (!parsedSeg.mq && rootMedia) parsedSeg.mq = rootMedia\n if (!parsedSeg.layer && rootLayer) parsedSeg.layer = rootLayer\n }\n\n const segMedia = parsedSeg.mq || ''\n const segLayer = parsedSeg.layer || ''\n const segSelector = parsedSeg.selector || ''\n if (segMedia !== rootMedia || segLayer !== rootLayer || segSelector !== rootSelector) {\n return null\n }\n\n const valStr = propToValue(parsedSeg.prop, parsedSeg.val)\n if (!valStr) return null\n cssPropItems.push(valStr)\n }\n\n if (cssPropItems.length === 0) return null\n\n const selectorStr = rootSelector.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n const checkSupport = `selector(${className}${selectorStr})`\n if (selectorStr) {\n if (typeof CSS !== 'undefined') {\n if (!CSS.supports(checkSupport)) return null\n } else if (!isLikelyValidSelectorFallback(selectorStr)) {\n return null\n }\n }\n\n return {\n media: rootMedia || 'default',\n layer: rootLayer || '0',\n className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n }\n }\n\n const parsed = parseClassName(parseTarget)\n if (!parsed) return null\n if (!isValidMediaKey(parsed.mq)) return null\n if (!parsed.prop.startsWith('[') && !isKnownPropertyKey(parsed.prop)) return null\n\n let { mq: m = 'default', layer: l = '0', prop: p, val: v, selector: s = '' } = parsed\n const cssPropItems: string[] = []\n\n const valStr = propToValue(p, v)\n if (valStr) cssPropItems.push(valStr)\n\n if (cssPropItems.length === 0) return null\n\n const selectorStr = s.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n const checkSupport = `selector(${className}${selectorStr})`\n if (selectorStr) {\n if (typeof CSS !== 'undefined') {\n if (!CSS.supports(checkSupport)) return null\n } else if (!isLikelyValidSelectorFallback(selectorStr)) {\n return null\n }\n }\n\n return {\n media: m || 'default',\n layer: l || '0',\n className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n }\n\n // polyfill for CSS.escape in node\n const escapeCssIdentifier = (str: string) => {\n // Basic escape for Node environment\n return str.replace(/([^\\w-])/g, '\\\\$1');\n }\n\n const getClassAttrs = (el: Element): string[] => {\n var clsRoot = [...(el?.classList || [])].filter((f) => {\n if (f) {\n let c = f.charCodeAt(0) == 45 ? f.charCodeAt(1) : f.charCodeAt(0)\n return (c >= 97 && c <= 122) || (c >= 48 && c <= 57)\n }\n return false\n })\n\n if (el?.children?.length > 0) {\n Array.from(el?.children).forEach((itm) => {\n clsRoot.push(...getClassAttrs(itm))\n })\n }\n return clsRoot.flat(Infinity) as string[]\n }\n\n const observeDom = (dom: Document | Element | ShadowRoot, cb: (items: string[]) => void) => {\n if (typeof cb != 'function') {\n throw new Error('Callback is not a function')\n }\n if (!dom) return\n let docx: Element | ShadowRoot | undefined = undefined\n\n // Type guards\n if ('documentElement' in dom) {\n docx = dom.documentElement\n } else if (dom instanceof Element || ('tagName' in dom)) { // Basic check for Element\n docx = dom as Element\n } else if ('host' in dom) { // Basic check for ShadowRoot\n docx = dom as ShadowRoot\n }\n\n if (!docx) return\n\n if (docx instanceof Element) {\n cb(getClassAttrs(docx))\n }\n\n // Tạo MutationObserver để theo dõi thay đổi class\n if (typeof MutationObserver !== 'undefined') {\n new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (\n mutation.type == 'attributes' &&\n mutation.attributeName == 'class'\n ) {\n if (mutation.target.nodeType == 1) {\n let className = String((mutation.target as Element)?.className ?? '')\n let oldValue = String(mutation?.oldValue ?? '')\n\n if (className || oldValue) {\n let vClass = className\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n let vClassOld = oldValue\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n vClass = vClass.filter((f) => !vClassOld.includes(f))\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n } else {\n if (mutation.type == 'childList' && mutation.addedNodes.length > 0) {\n let vClass = [...mutation.addedNodes]\n .filter((f) => f.nodeType == 1)\n .map((m) => getClassAttrs(m as Element))\n .flat(Infinity) as string[]\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n }\n }).observe(docx, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n })\n }\n }\n\n // Public API to export cache for manual build\n const exportCache = () => {\n if (typeof window === 'undefined' || !window.localStorage) return lastKnownCacheData\n const primary = parseCacheDataSync(window.localStorage.getItem(cacheKey))\n if (primary) return primary\n if (cacheKey !== LEGACY_CACHE_KEY) {\n const legacy = parseCacheDataSync(window.localStorage.getItem(LEGACY_CACHE_KEY))\n if (legacy) return legacy\n }\n return lastKnownCacheData\n }\n\n return { buildCss, exportCache, ready: dictionaryReadyPromise }\n}\n\nexport const cssObserve = (dom: Document | Element | ShadowRoot, options?: XCSSConfig) => {\n xcss(options).buildCss(dom).observe()\n}\n\nexport const cssClsx = (dom: Document | Element | ShadowRoot, options?: XCSSConfig) => {\n return xcss(options).buildCss(dom).clsx\n}\n\nexport default { css: xcss, cssObserve, clsx: cssClsx }\n","const LEGACY_CACHE_KEY = 'xcss_cache_v1'\n\nexport type BootloaderScriptOptions = {\n compact?: boolean\n}\n\nconst resolveCacheKey = (styleId: string, versionOrCacheKey: string): string => {\n const value = String(versionOrCacheKey || '').trim()\n if (!value) return `${styleId}_cache_v1`\n\n // Backward compatibility: keep accepting raw cacheKey from old API.\n if (value === LEGACY_CACHE_KEY || value.includes('_cache_')) return value\n\n return `${styleId}_cache_${value}`\n}\n\nexport const getBootloaderScript = (\n styleIdInput: string = 'fwkui',\n version: string = 'v1',\n options?: BootloaderScriptOptions,\n) => {\n const styleIdValue = String(styleIdInput || '').trim() || 'fwkui'\n const cacheKeyValue = resolveCacheKey(styleIdValue, version)\n const styleId = JSON.stringify(styleIdValue)\n const cacheKey = JSON.stringify(cacheKeyValue)\n\n const script = `\n(async function () {\n function decompressLZW(compressed) {\n if (!compressed) return '';\n var dictionary = {};\n var dictSize = 256;\n var i;\n for (i = 0; i < 256; i++) dictionary[i] = String.fromCharCode(i);\n var codes = compressed.split('').map(function (ch) { return ch.charCodeAt(0); });\n var previous = codes[0];\n var phrase = dictionary[previous] || '';\n var result = phrase;\n for (i = 1; i < codes.length; i++) {\n var current = codes[i];\n var entry = dictionary[current];\n if (!entry) entry = current === dictSize ? phrase + phrase[0] : '';\n result += entry;\n dictionary[dictSize++] = phrase + entry[0];\n phrase = entry;\n }\n return result;\n }\n\n function canUseStream() {\n return (\n typeof DecompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n );\n }\n\n function base64ToBytes(base64) {\n if (typeof atob === 'function') {\n var binary = atob(base64);\n var bytes = new Uint8Array(binary.length);\n for (var i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n }\n if (typeof Buffer !== 'undefined') {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n throw new Error('No base64 decoder');\n }\n\n async function decompressDeflateRawBase64(payload) {\n if (!canUseStream()) return null;\n try {\n var bytes = base64ToBytes(payload);\n var stream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream('deflate-raw'));\n return await new Response(stream).text();\n } catch (_error) {\n return null;\n }\n }\n\n async function parseCache(raw) {\n if (!raw) return null;\n try {\n var parsed = JSON.parse(raw);\n if (\n parsed &&\n parsed.__xcss_cache_v === 3 &&\n parsed.compressed === true &&\n parsed.algorithm === 'deflate-raw' &&\n parsed.encoding === 'base64' &&\n typeof parsed.payload === 'string'\n ) {\n var expandedStream = await decompressDeflateRawBase64(parsed.payload);\n if (!expandedStream) return null;\n parsed = JSON.parse(expandedStream);\n } else if (parsed && parsed.__xcss_cache_v === 2 && parsed.compressed === true && typeof parsed.payload === 'string') {\n var expanded = decompressLZW(parsed.payload);\n if (!expanded) return null;\n parsed = JSON.parse(expanded);\n }\n if (!parsed || !parsed.cssText) return null;\n return parsed;\n } catch (_error) {\n return null;\n }\n }\n\n try {\n if (typeof window === 'undefined' || !window.localStorage) return;\n\n var styleId = ${styleId};\n var primaryKey = ${cacheKey};\n var keys = primaryKey === 'xcss_cache_v1' ? [primaryKey] : [primaryKey, 'xcss_cache_v1'];\n var payload = null;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var raw = localStorage.getItem(key);\n if (!raw) continue;\n payload = await parseCache(raw);\n if (!payload) {\n localStorage.removeItem(key);\n continue;\n }\n if (payload) break;\n }\n\n if (!payload) return;\n\n var styleEl = document.getElementById(styleId);\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = styleId;\n document.head.appendChild(styleEl);\n }\n\n var css = '';\n if (payload.cssText.root) css += payload.cssText.root + '\\\\n';\n for (var k in payload.cssText) {\n if (k !== 'root') css += (payload.cssText[k] || '') + '\\\\n';\n }\n styleEl.textContent = css;\n } catch (_error) {}\n})();\n `.trim()\n\n if (options?.compact) {\n return script.replace(/\\s+/g, ' ').trim()\n }\n\n return script\n}\n","import $$ from './core'\nimport { XCSSConfig } from './core'\nimport { getBootloaderScript } from './bootloader'\nimport type { BootloaderScriptOptions } from './bootloader'\n\nconst GLOBAL_KEY = '__FWXCSS_SHARED__'\n\ninterface CssInit {\n clsx: (...args: any[]) => string\n observe: () => void\n getCssString: () => string\n}\n\nconst createSharedInstance = () => {\n const cssInitMap = new WeakMap<Document | ShadowRoot, CssInit>()\n // Also store a global instance for non-DOM usage or global fallback\n let globalInstance: CssInit | null = null;\n\n let currentCssRoot: Document | ShadowRoot | null = typeof document !== 'undefined' ? document : null\n\n const isCssRoot = (value: any): value is Document | ShadowRoot => {\n if (!value) return false\n const hasDocument = typeof Document !== 'undefined'\n const hasShadowRoot = typeof ShadowRoot !== 'undefined'\n const isDoc = hasDocument && value instanceof Document\n const isShadow = hasShadowRoot && value instanceof ShadowRoot\n return isDoc || isShadow\n }\n\n const getFallbackInit = (): CssInit => {\n // Create a standalone instance if not exists\n if (!globalInstance) {\n globalInstance = $$.css().buildCss(undefined)\n }\n return globalInstance\n }\n\n const createCssInit = (root: Document | ShadowRoot) => {\n // Default config with basic normalize\n return $$.css({\n base: `html,body{font-size:16px;padding:0;margin:0;}`\n }).buildCss(root)\n }\n\n const getCssInit = (root: Document | ShadowRoot | undefined | null): CssInit => {\n if (!root) return getFallbackInit()\n let cssInit = cssInitMap.get(root)\n if (!cssInit) {\n cssInit = createCssInit(root)\n cssInitMap.set(root, cssInit)\n }\n return cssInit\n }\n\n const setClsxRoot = (root: Document | ShadowRoot) => {\n currentCssRoot = root || (typeof document !== 'undefined' ? document : null)\n }\n\n const clsx = (...args: any[]): string => {\n let root: Document | ShadowRoot | undefined | null = undefined\n const last = args[args.length - 1]\n if (isCssRoot(last)) {\n root = last\n args = args.slice(0, -1)\n }\n\n const classes: string[] = []\n const push = (value: any) => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n classes.push(String(value))\n return\n }\n if (Array.isArray(value)) {\n value.forEach(push)\n return\n }\n if (typeof value === 'object') {\n Object.keys(value).forEach((key) => {\n if (value[key]) classes.push(key)\n })\n }\n }\n\n args.forEach(push)\n\n // Resolve helper\n // If explicit root provided, use it\n // If not, use currentCssRoot (e.g. document in browser)\n // If both null (e.g. Node env), use fallback global instance\n const resolvedRoot = root || currentCssRoot\n\n // Pass the combined class string to xcss engine\n return getCssInit(resolvedRoot).clsx(classes.join(' '))\n }\n\n // New API: Get the generated CSS string from the default/global instance\n // Useful for SSR\n const getCss = () => {\n return getFallbackInit().getCssString()\n }\n\n return { clsx, setClsxRoot, getCss }\n}\n\nconst globalScope = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : global) as any\nconst shared = globalScope[GLOBAL_KEY] || createSharedInstance()\n\nif (!globalScope[GLOBAL_KEY]) {\n globalScope[GLOBAL_KEY] = shared\n}\n\nexport const clsx = shared.clsx\nexport const setClsxRoot = shared.setClsxRoot\nexport const getCss = shared.getCss\nexport { getBootloaderScript }\nexport default $$\nexport type { XCSSConfig, BootloaderScriptOptions }\n"],"mappings":"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","names":["index_auto_exports","__export","clsx","index_auto_default","getBootloaderScript","getCss","setClsxRoot","__toCommonJS","mitt","all","type","handler","handlers","evt","wildcardHandlers","findFirstColonOutsideBrackets","input","start","end","bracketDepth","code","findLastAtOutsideBrackets","hasBalancedSquareBrackets","isLowerAlpha","parseClassName","className","selector","atIndex","mq","layer","colonIndex","prefix","digitEnd","closeIndex","propEnd","nextCode","prop","val","LEGACY_CACHE_KEY","resolveCacheConfig","config","styleId","version","compression","debounceMs","createCacheKey","cache","isCacheEnvelopeLZW","value","obj","isCacheEnvelopeStream","canUseCompressionStream","canUseDecompressionStream","bytesToBase64","bytes","binary","chunk","j","buff","base64ToBytes","base64","compressDeflateRawBase64","input","stream","compressed","decompressDeflateRawBase64","payload","normalized","isStreamCacheEnvelopeRaw","raw","parsed","compressLZW","dictionary","codes","dictSize","i","phrase","currentChar","phraseWithChar","code","decompressLZW","result","char","previous","current","entry","resolveDictionaryData","mod","moduleObj","source","short","common","specific","loadExternalDictionary","data","DICTIONARY_MODULE_ERROR","loadBuiltinDictionarySync","req","loadBuiltinDictionary","syncData","candidates","lastError","error","setupCssLayers","docRoot","id","layers","_","styleElement","layerRule","iterval","hashConfig","excludes","str","hash","chr","parseCacheDataSync","expanded","parseCacheDataAsync","unwrapCachedCssText","mediaKey","text","match","xcss","modules","cssDefault","mediaQuery","groupValues","valueExt","excludeNames","excludeLegacy","excludePrefixes","prefix","dictionaryImport","cacheOptions","cacheConfig","cacheKey","mergedExcludes","normalizedExcludePrefixes","x","globToRegex","pattern","escaped","excludeRules","regex","cls","isExcludedClass","txtClass","prefixText","rule","shouldProcessClass","defaultMediaKeys","customMediaKeys","m","k","mediaKeySet","isValidMediaKey","mq","shouldEnforceKnownProperties","compositePropertyKeys","knownFullPropertyNames","isKnownPropertyKey","prop","PropertiesCss","ValueExts","CommonValues","exts","rebuildExts","applyDictionary","dictionaryReady","dictionaryReadyPromise","syncBuiltinDictionary","lastKnownCacheData","buildCss","doc","isBrowser","hasBaseOverride","CSS_KEYS","emitter","mitt","mqDfAll","mqDf","f","fi","keysCssStyleSheetsDom","cssStyleSheetsSet","cssStyleSheetsDom","cssStyleSheetsText","cssStyleSheetsPending","cssStyleSheetsPendingScheduled","currentConfigHash","debounceTimer","latestSaveTicket","cacheLoaded","loadedCacheData","loadedCacheStorageKey","asyncCacheCandidates","writeCache","e","removeCacheIfUnchanged","key","expectedRaw","saveCache","ticket","json","writeLZWEnvelope","envelope","triggerSave","rulesSetObj","cssTextForCache","mqStr","cacheKeysToTry","candidateKey","v","txt","media","removeBootloaderStyle","blStyle","hydrateCacheAfterInit","sourceKey","r","candidate","updateRules","txtCls","property","selector","layer","className","cssTextStore","cssPending","cssPendingScheduled","cssExts","cssName","txtCss","cssStyleSheetSet","pending","sheet","applyObservedItems","items","item","classToProp","processObservedItems","run","clsArrs","lsCss","shouldHashClass","parseTarget","parseClassName","selectorStr","isLikelyValidSelectorFallback","propsValueExt","lsClassNew","l","observeDom","css","mediaQueryStr","txtProps","REGEX_CSS","p","cssProp","resolvedProps","isAllValidUtilities","normalizeAliasDeclaration","cleaned","colonIndex","declaration","propToValue","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","splitSelectorSuffix","bracketDepth","ch","splitByAmpersandOutsideBrackets","parts","start","roundDepth","escapeCssIdentifier","body","segments","seg","rootMedia","rootLayer","rootSelector","hasRoot","cssPropItems","segClass","parsedSeg","segMedia","segLayer","segSelector","valStr","checkSupport","s","getClassAttrs","el","clsRoot","itm","dom","cb","docx","mutationList","mutation","oldValue","vClass","vClassOld","primary","legacy","cssObserve","options","cssClsx","core_default","LEGACY_CACHE_KEY","resolveCacheKey","styleId","versionOrCacheKey","value","getBootloaderScript","styleIdInput","version","options","styleIdValue","cacheKeyValue","cacheKey","script","GLOBAL_KEY","createSharedInstance","cssInitMap","globalInstance","currentCssRoot","isCssRoot","value","hasDocument","hasShadowRoot","isDoc","isShadow","getFallbackInit","core_default","createCssInit","root","getCssInit","cssInit","args","last","classes","push","key","globalScope","shared","clsx","setClsxRoot","getCss","index_default","core_default","index_default","index_auto_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/index-auto.ts","../src/events.ts","../src/parser.ts","../src/core.ts","../src/bootloader.ts","../src/index.ts"],"sourcesContent":["import fwxcss from './index'\n\n// Auto-init logic\nif (typeof document !== 'undefined') {\n // Wait for DOMContentLoaded to ensure body exists if script is in head?\n // cssObserve handles existing DOM + changes.\n // If script is in head, body might not be parsed yet.\n // But cssObserve observes documentElement (html) or body?\n // core.ts: observeDom takes dom. cssObserve passes document.\n // observeDom checks documentElement. So it's safe to run immediately.\n \n fwxcss.cssObserve(document)\n console.log('🚀 fwxcss Auto-Observer Activated')\n}\n\nexport * from './index'\nexport default fwxcss\n","export type EventType = string | symbol\nexport type Handler<T = any> = (event: T) => void\nexport type WildcardHandler<T = any> = (type: keyof T, event: T[keyof T]) => void\nexport type EventHandlerList<T = any> = Array<Handler<T>>\nexport type WildCardEventHandlerList<T = any> = Array<WildcardHandler<T>>\nexport type EventHandlerMap<T = any> = Map<\n keyof T | '*',\n EventHandlerList<T[keyof T]> | WildCardEventHandlerList<T>\n>\n\nexport interface Emitter<T = any> {\n all: EventHandlerMap<T>\n on<Key extends keyof T>(type: Key, handler: Handler<T[Key]>): void\n on(type: '*', handler: WildcardHandler<T>): void\n off<Key extends keyof T>(type: Key, handler?: Handler<T[Key]>): void\n off(type: '*', handler?: WildcardHandler<T>): void\n emit<Key extends keyof T>(type: Key, event: T[Key]): void\n}\n\nexport const mitt = <T = any>(\n all?: EventHandlerMap<T>,\n): Emitter<T> => {\n all = all || new Map()\n\n return {\n all,\n\n on<Key extends keyof T>(type: Key | '*', handler: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n handlers.push(handler as any)\n } else {\n all!.set(type, [handler] as any)\n }\n },\n\n off<Key extends keyof T>(type: Key | '*', handler?: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n if (handler) {\n handlers.splice(handlers.indexOf(handler as any) >>> 0, 1)\n } else {\n all!.set(type, [])\n }\n }\n },\n\n emit<Key extends keyof T>(type: Key, evt: T[Key]) {\n let handlers = all!.get(type) as EventHandlerList<T[Key]> | undefined\n if (handlers) {\n handlers.slice().forEach((handler) => {\n handler(evt)\n })\n }\n const wildcardHandlers = all!.get('*') as WildCardEventHandlerList<T> | undefined\n if (wildcardHandlers) {\n wildcardHandlers.slice().forEach((handler) => {\n handler(type, evt as any)\n })\n }\n },\n }\n}\n","export type ParsedClass = {\n mq: string // Media Query prefix (sm, md, lg...)\n layer: string // Layer priority (0-9...)\n prop: string // Property name (m, p, fx...)\n val: string // Value part (10px, Red, #fff...)\n selector: string // Selector modifier (&:hover, @...)\n}\n\n/**\n * Finds the first \":\" outside bracketed arbitrary values.\n * Example: \"w[calc(var(--x:y))]\" -> no media colon found.\n */\nfunction findFirstColonOutsideBrackets(input: string, start: number, end: number): number {\n let bracketDepth = 0\n\n for (let i = start; i < end; i++) {\n const code = input.charCodeAt(i)\n\n if (code === 91) { // [\n bracketDepth++\n continue\n }\n\n if (code === 93) { // ]\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n\n if (code === 58 && bracketDepth === 0) { // :\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Finds the last \"@\" outside bracketed arbitrary values.\n * Example: \"cRed@[data-x=\\\"a:b\\\"]\" -> selector starts at that \"@\".\n */\nfunction findLastAtOutsideBrackets(input: string, start: number, end: number): number {\n let bracketDepth = 0\n\n for (let i = end - 1; i >= start; i--) {\n const code = input.charCodeAt(i)\n\n if (code === 93) { // ]\n bracketDepth++\n continue\n }\n\n if (code === 91) { // [\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n\n if (code === 64 && bracketDepth === 0) { // @\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Validates square brackets are balanced in a range.\n * Rejects both missing closing bracket and stray closing bracket.\n */\nfunction hasBalancedSquareBrackets(input: string, start: number, end: number): boolean {\n let bracketDepth = 0\n for (let i = start; i < end; i++) {\n const code = input.charCodeAt(i)\n if (code === 91) { // [\n bracketDepth++\n continue\n }\n if (code === 93) { // ]\n if (bracketDepth === 0) return false\n bracketDepth--\n }\n }\n return bracketDepth === 0\n}\n\n/**\n * Fast checking if a char code is a valid property character (a-z).\n * Note: Dash (-) is treated as start of Value (negative or separator).\n */\nfunction isLowerAlpha(code: number): boolean {\n // a-z: 97-122\n return (code >= 97 && code <= 122)\n}\n\n/**\n * Parses a CSS class string into its components.\n * Format: [Layer][MediaQuery:]PropertyValue[@Selector]\n * Example: \n * - m10px\n * - sm:cRed\n * - 1sm:w100p\n * - hover:bgBlue -> mapped to sm (no, modifiers are usually @hover style in this lib, but mq is prefix)\n * - bgRed@hover\n */\nexport function parseClassName(className: string): ParsedClass | null {\n if (!className || className.length < 2) return null\n if (!hasBalancedSquareBrackets(className, 0, className.length)) return null\n\n let start = 0\n let end = className.length\n\n // 1. Extract Selector Modifier (@...) from the end\n // Use lastIndexOf to find @\n // Note: Some values might contain @ (unlikely in this syntax unless escaped, but let's assume @ starts selector)\n // The regex used @(?<s>.*)$ so it takes everything after last @? Or first @? \n // Regex: (@(?<s>.*))?$ -> It matches @ at the end group.\n\n // Scan for selector \"@\" outside [] from right to left.\n let selector = ''\n let atIndex = findLastAtOutsideBrackets(className, start, end)\n if (atIndex > start) {\n selector = className.substring(atIndex + 1, end)\n end = atIndex\n }\n\n // 2. Extract Media Query / Layer Prefix\n // Look for first ':' outside [] only.\n let mq = ''\n let layer = ''\n const colonIndex = findFirstColonOutsideBrackets(className, start, end)\n\n if (colonIndex > 0 && colonIndex < end) {\n let prefix = className.substring(start, colonIndex)\n start = colonIndex + 1\n\n // Check for Layer Priority in Prefix (e.g. '1sm', '9lg', 'sm')\n // Regex was: ((?<m>xs|sm...):)?(?<l>[0-9]*)?\n // Wait, current Regex allows Layer AFTER MQ? 'sm:9m10px'?\n // Regex: (?<m>...:)? (?<l>[0-9]*)? (?<p>...)\n // So layer is distinct number prefix immediately before property.\n\n // But what if 'sm:' is present?\n // Regex structure: `^((?<m>...):)?(?<l>[0-9]*)?(?<p>...)...`\n // So MQ comes first with colon. THEN Layer number.\n\n mq = prefix\n }\n\n // 3. Extract Layer (Digits at current start)\n // Scan digits\n let digitEnd = start\n while (digitEnd < end) {\n const code = className.charCodeAt(digitEnd)\n if (code >= 48 && code <= 57) { // 0-9\n digitEnd++\n } else {\n break\n }\n }\n\n if (digitEnd > start) {\n layer = className.substring(start, digitEnd)\n start = digitEnd\n }\n\n // 4. Extract Property and Value\n // Property must start with lowercase a-z or dash\n // If it starts with anything else, it's invalid (or handled by special cases)\n // Exception: &... (group 2/3 in regex)\n\n if (start >= end) return null\n\n // Leading \"&...\" is invalid by class syntax rules.\n if (className.charCodeAt(start) === 38) return null\n\n // Check for Alias/Group Syntax: [name]\n // If it starts with [, we capture the whole [...] part as property\n if (className.charCodeAt(start) === 91) { // '['\n const closeIndex = className.indexOf(']', start)\n if (closeIndex > start) {\n return {\n mq,\n layer,\n prop: className.substring(start, closeIndex + 1), // includes [ and ]\n val: '', // Value is empty for alias\n selector\n }\n }\n }\n\n // Scan for Property end\n // Property ends checking isLowerAlphaOrDash.\n // BUT we need to stop when we hit UpperCase, Digit, or specific symbols (!, ., [, ', {)\n\n let propEnd = start\n while (propEnd < end) {\n const code = className.charCodeAt(propEnd)\n\n // Check if current char is dash (-) or dot (.)\n if (code === 45 || code === 46) {\n // Check next char\n if (propEnd + 1 < end) {\n const nextCode = className.charCodeAt(propEnd + 1)\n // `--` indicates a CSS variable value start (e.g. bgc--red)\n if (code === 45 && nextCode === 45 && propEnd > start) {\n break\n }\n // If next valid char is digit (0-9: 48-57), break as it is value start\n if (nextCode >= 48 && nextCode <= 57) {\n break\n }\n }\n // Otherwise, treat dash/dot as part of property and continue\n propEnd++\n continue\n }\n\n // Stop if not a-z\n if (!isLowerAlpha(code)) {\n break\n }\n propEnd++\n }\n\n // If no property part found (and not & case), invalid\n if (propEnd === start) return null\n\n const prop = className.substring(start, propEnd)\n const val = className.substring(propEnd, end)\n\n // Optimization: If val is empty, it might be a flag property? \n // Or invalid? 'flex' (prop=flex, val=\"\") -> valid if display:flex\n // 'red' (prop=red, val=\"\") -> valid color? No, usually prop is 'c', val is 'Red'.\n // If 'red' is passed, prop='red', val=''. Dictionary common lookup 'red' -> 'color: red'.\n // So empty value is valid.\n\n return {\n mq,\n layer,\n prop,\n val,\n selector\n }\n}\n","import { mitt } from './events'\nimport { parseClassName } from './parser'\n\n\nexport type XCSSConfig = {\n base?: string\n aliases?: Record<string, string[]>\n excludes?: string[]\n excludePrefixes?: string[]\n breakpoints?: Record<string, string>[]\n theme?: Record<string, string>\n prefix?: string\n dictionaryImport?: boolean | string\n cache?: {\n styleId?: string\n version?: string\n compression?: boolean\n debounceMs?: number\n }\n}\n\ntype CssPropertyMap = Record<string, string>\ntype CssValueMap = Record<string, Record<string, string>>\ntype CssCommonValueMap = Record<string, string>\n\ntype XCSSDictionaryData = {\n SHORT_PROPERTIES: CssPropertyMap\n COMMON_VALUES: CssCommonValueMap\n SPECIFIC_VALUES: CssValueMap\n}\n\ntype DictionaryModuleShape = Partial<XCSSDictionaryData> & {\n default?: Partial<XCSSDictionaryData>\n}\n\ntype XCSSCacheConfig = {\n styleId: string\n version: string\n compression: boolean\n debounceMs: number\n}\n\ntype XCSSCacheEnvelopeLZW = {\n __xcss_cache_v: 2\n compressed: true\n payload: string\n}\n\ntype XCSSCacheEnvelopeStream = {\n __xcss_cache_v: 3\n compressed: true\n algorithm: 'deflate-raw'\n encoding: 'base64'\n payload: string\n}\n\n\n\nconst resolveCacheConfig = (config?: XCSSConfig['cache']): XCSSCacheConfig => {\n const styleId =\n typeof config?.styleId === 'string' && config.styleId.trim()\n ? config.styleId.trim()\n : 'fwkui'\n const version =\n typeof config?.version === 'string' && config.version.trim()\n ? config.version.trim()\n : 'v1'\n const compression = config?.compression ?? true\n const debounceMs =\n typeof config?.debounceMs === 'number' && config.debounceMs >= 0\n ? config.debounceMs\n : 1000\n\n return { styleId, version, compression, debounceMs }\n}\n\nconst createCacheKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_cache_${cache.version}`\n\nconst isCacheEnvelopeLZW = (value: unknown): value is XCSSCacheEnvelopeLZW => {\n if (!value || typeof value !== 'object') return false\n const obj = value as Partial<XCSSCacheEnvelopeLZW>\n return obj.__xcss_cache_v === 2 && obj.compressed === true && typeof obj.payload === 'string'\n}\n\nconst isCacheEnvelopeStream = (value: unknown): value is XCSSCacheEnvelopeStream => {\n if (!value || typeof value !== 'object') return false\n const obj = value as Partial<XCSSCacheEnvelopeStream>\n return (\n obj.__xcss_cache_v === 3 &&\n obj.compressed === true &&\n obj.algorithm === 'deflate-raw' &&\n obj.encoding === 'base64' &&\n typeof obj.payload === 'string'\n )\n}\n\nconst canUseCompressionStream = (): boolean =>\n typeof CompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n\nconst canUseDecompressionStream = (): boolean =>\n typeof DecompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n\nconst bytesToBase64 = (bytes: Uint8Array): string => {\n if (typeof btoa === 'function') {\n let binary = ''\n const CHUNK_SIZE = 0x8000\n for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n const chunk = bytes.subarray(i, i + CHUNK_SIZE)\n for (let j = 0; j < chunk.length; j++) {\n binary += String.fromCharCode(chunk[j])\n }\n }\n return btoa(binary)\n }\n\n const buff = (globalThis as any).Buffer\n if (typeof buff !== 'undefined') {\n return buff.from(bytes).toString('base64')\n }\n\n throw new Error('XCSS: base64 encoding is not supported in this runtime')\n}\n\nconst base64ToBytes = (base64: string): Uint8Array => {\n if (typeof atob === 'function') {\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n }\n\n const buff = (globalThis as any).Buffer\n if (typeof buff !== 'undefined') {\n return new Uint8Array(buff.from(base64, 'base64'))\n }\n\n throw new Error('XCSS: base64 decoding is not supported in this runtime')\n}\n\nconst compressDeflateRawBase64 = async (input: string): Promise<string> => {\n if (!canUseCompressionStream()) {\n throw new Error('XCSS: CompressionStream is not supported')\n }\n\n const stream = new Blob([input])\n .stream()\n .pipeThrough(new CompressionStream('deflate-raw'))\n\n const compressed = await new Response(stream).arrayBuffer()\n return bytesToBase64(new Uint8Array(compressed))\n}\n\nconst decompressDeflateRawBase64 = async (payload: string): Promise<string> => {\n if (!canUseDecompressionStream()) {\n throw new Error('XCSS: DecompressionStream is not supported')\n }\n\n const bytes = base64ToBytes(payload)\n const normalized = new Uint8Array(bytes.length)\n normalized.set(bytes)\n const stream = new Blob([normalized.buffer])\n .stream()\n .pipeThrough(new DecompressionStream('deflate-raw'))\n\n return await new Response(stream).text()\n}\n\nconst isStreamCacheEnvelopeRaw = (raw: string): boolean => {\n try {\n const parsed = JSON.parse(raw)\n return isCacheEnvelopeStream(parsed)\n } catch (_error) {\n return false\n }\n}\n\nconst compressLZW = (input: string): string => {\n if (!input) return ''\n\n const dictionary = new Map<string, number>()\n const codes: number[] = []\n let dictSize = 256\n\n for (let i = 0; i < 256; i++) {\n dictionary.set(String.fromCharCode(i), i)\n }\n\n let phrase = input[0]\n for (let i = 1; i < input.length; i++) {\n const currentChar = input[i]\n const phraseWithChar = phrase + currentChar\n if (dictionary.has(phraseWithChar)) {\n phrase = phraseWithChar\n } else {\n codes.push(dictionary.get(phrase)!)\n dictionary.set(phraseWithChar, dictSize++)\n phrase = currentChar\n }\n }\n codes.push(dictionary.get(phrase)!)\n\n return codes.map((code) => String.fromCharCode(code)).join('')\n}\n\nconst decompressLZW = (compressed: string): string => {\n if (!compressed) return ''\n\n const dictionary = new Map<number, string>()\n let dictSize = 256\n let result = ''\n\n for (let i = 0; i < 256; i++) {\n dictionary.set(i, String.fromCharCode(i))\n }\n\n const codes = compressed.split('').map((char) => char.charCodeAt(0))\n let previous = codes[0]\n let phrase = dictionary.get(previous) || ''\n result = phrase\n\n for (let i = 1; i < codes.length; i++) {\n const current = codes[i]\n let entry = dictionary.get(current)\n if (!entry) {\n entry = current === dictSize ? phrase + phrase[0] : ''\n }\n result += entry\n dictionary.set(dictSize++, phrase + entry[0])\n phrase = entry\n }\n\n return result\n}\n\nconst resolveDictionaryData = (mod: unknown): XCSSDictionaryData | null => {\n if (!mod || typeof mod !== 'object') return null\n\n const moduleObj = mod as DictionaryModuleShape\n const source =\n moduleObj.default && typeof moduleObj.default === 'object'\n ? moduleObj.default\n : moduleObj\n\n const short = source.SHORT_PROPERTIES\n const common = source.COMMON_VALUES\n const specific = source.SPECIFIC_VALUES\n\n if (!short || !common || !specific) return null\n if (\n typeof short !== 'object' ||\n typeof common !== 'object' ||\n typeof specific !== 'object'\n ) {\n return null\n }\n\n return {\n SHORT_PROPERTIES: short,\n COMMON_VALUES: common,\n SPECIFIC_VALUES: specific,\n }\n}\n\nconst loadExternalDictionary = async (source: string): Promise<XCSSDictionaryData> => {\n const mod = await import(/* @vite-ignore */ source)\n const data = resolveDictionaryData(mod)\n if (!data) {\n throw new Error(DICTIONARY_MODULE_ERROR)\n }\n return data\n}\n\nconst DICTIONARY_MODULE_ERROR =\n 'XCSS: dictionary module must export SHORT_PROPERTIES, COMMON_VALUES and SPECIFIC_VALUES'\n\nconst loadBuiltinDictionarySync = (): XCSSDictionaryData | null => {\n // Keep Node compatibility for synchronous flows (SSR/tests in CJS).\n const req = typeof require === 'function' ? require : null\n if (!req) return null\n\n for (const source of ['./dictionary.js', './dictionary']) {\n try {\n const mod = req(source)\n const data = resolveDictionaryData(mod)\n if (data) return data\n } catch (_error) {\n // try next candidate\n }\n }\n return null\n}\n\nconst loadBuiltinDictionary = async (): Promise<XCSSDictionaryData> => {\n const syncData = loadBuiltinDictionarySync()\n if (syncData) return syncData\n\n const candidates = ['./dictionary.mjs', './dictionary.js', './dictionary']\n let lastError: unknown = null\n\n for (const source of candidates) {\n try {\n const mod = await import(/* @vite-ignore */ source)\n const data = resolveDictionaryData(mod)\n if (data) return data\n } catch (error) {\n lastError = error\n }\n }\n\n if (lastError) throw lastError\n throw new Error(DICTIONARY_MODULE_ERROR)\n}\n\nconst setupCssLayers = (docRoot: Document | ShadowRoot | null, id?: string) => {\n if (!docRoot || typeof document === 'undefined') return\n id = id || 'fwkui'\n\n // Tạo danh sách các layer\n const layers = Array.from({ length: 24 }, (_, i) => {\n return 'l' + i\n })\n\n\n\n // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n // docRoot.appendChild(styleElement);\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\n\n // Chèn quy tắc @layer\n const layerRule = `@layer ${layers.join(', ')};`\n // Use requestAnimationFrame or setTimeout instead of setInterval for cleaner approach if possible,\n // keeping setInterval to match original logic but with clear logic.\n let iterval = setInterval(() => {\n if (styleElement.sheet) {\n clearInterval(iterval)\n try {\n styleElement.sheet.insertRule(\n layerRule,\n styleElement.sheet.cssRules.length,\n )\n } catch (e) {\n // ignore error if insertRule fails\n }\n }\n }, 10) // 10ms check\n }\n}\n\n// Helper to hash config\nconst hashConfig = (config: XCSSConfig): string => {\n const excludes = Array.isArray(config.excludes)\n ? config.excludes : []\n const cache = resolveCacheConfig(config.cache)\n\n const str = JSON.stringify({\n base: config.base || '',\n aliases: config.aliases || {},\n breakpoints: config.breakpoints || [],\n theme: config.theme || {},\n prefix: config.prefix || '',\n excludes,\n excludePrefixes: config.excludePrefixes || [],\n dictionaryImport: config.dictionaryImport ?? true,\n cache,\n })\n\n let hash = 0\n if (str.length === 0) return hash.toString()\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash.toString()\n}\n\ninterface XCSSCacheData {\n configHash: string\n cssText: Record<string, string>\n rulesSet: Record<string, string[]>\n keys: [string, string][],\n sizeLast: number\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nconst parseCacheDataSync = (raw: string | null): XCSSCacheData | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw)\n if (isCacheEnvelopeLZW(parsed)) {\n const expanded = decompressLZW(parsed.payload)\n if (!expanded) return null\n const data = JSON.parse(expanded) as XCSSCacheData\n return data\n }\n if (isCacheEnvelopeStream(parsed)) return null\n return parsed as XCSSCacheData\n } catch (_error) {\n return null\n }\n}\n\nconst parseCacheDataAsync = async (raw: string | null): Promise<XCSSCacheData | null> => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw)\n if (isCacheEnvelopeLZW(parsed)) {\n const expanded = decompressLZW(parsed.payload)\n if (!expanded) return null\n return JSON.parse(expanded) as XCSSCacheData\n }\n if (isCacheEnvelopeStream(parsed)) {\n const expanded = await decompressDeflateRawBase64(parsed.payload)\n if (!expanded) return null\n return JSON.parse(expanded) as XCSSCacheData\n }\n return parsed as XCSSCacheData\n } catch (_error) {\n return null\n }\n}\n\nconst unwrapCachedCssText = (mediaKey: string, text: string): string => {\n if (mediaKey === 'root') return text\n const match = /@media[^{]+\\{\\n?([\\s\\S]+)\\n?\\}/.exec(text)\n if (match && match[1]) return match[1].trim()\n return text\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nexport const xcss = (\n modules: XCSSConfig = {\n base: '',\n aliases: {},\n excludes: [],\n excludePrefixes: [],\n breakpoints: [],\n theme: {},\n prefix: '',\n dictionaryImport: true,\n cache: {\n styleId: 'fwkui',\n version: 'v1',\n compression: true,\n debounceMs: 1000,\n },\n },\n) => {\n\n let {\n base: cssDefault = null,\n breakpoints: mediaQuery = [],\n aliases: groupValues = {},\n theme: valueExt = {},\n excludes: excludeNames = [],\n excludePrefixes = [],\n prefix = '',\n dictionaryImport = true,\n cache: cacheOptions = {},\n } = modules || {}\n\n if (!Array.isArray(mediaQuery)) mediaQuery = []\n if (!Array.isArray(excludeNames)) excludeNames = []\n if (!Array.isArray(excludePrefixes)) excludePrefixes = []\n if (!groupValues || typeof groupValues !== 'object') groupValues = {}\n if (!valueExt || typeof valueExt !== 'object') valueExt = {}\n\n const cacheConfig = resolveCacheConfig(cacheOptions)\n const cacheKey = createCacheKey(cacheConfig)\n\n const mergedExcludes = excludeNames\n\n const normalizedExcludePrefixes = excludePrefixes\n .filter((x): x is string => typeof x === 'string')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n\n const globToRegex = (pattern: string): RegExp => {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return new RegExp('^' + escaped.replace(/\\*/g, '.*') + '$')\n }\n\n const excludeRules = mergedExcludes\n .filter((x): x is string => typeof x === 'string')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n .map((pattern) => {\n if (pattern.includes('*')) {\n const regex = globToRegex(pattern)\n return (cls: string) => regex.test(cls)\n }\n return (cls: string) => cls === pattern\n })\n\n const isExcludedClass = (txtClass: string): boolean => {\n if (normalizedExcludePrefixes.some((prefixText) => txtClass.startsWith(prefixText))) {\n return true\n }\n return excludeRules.some((rule) => rule(txtClass))\n }\n\n const shouldProcessClass = (txtClass: string): boolean => {\n // Step 1: Exclude rules first.\n if (isExcludedClass(txtClass)) return false\n // Step 2: Prefix check.\n if (prefix && !txtClass.startsWith(prefix)) return false\n return true\n }\n\n const defaultMediaKeys = ['default', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'sma', 'mda', 'lga', 'xla']\n const customMediaKeys = mediaQuery\n .filter((m): m is Record<string, string> => !!m && typeof m === 'object' && !Array.isArray(m))\n .map((m) => Object.keys(m)[0])\n .filter((k): k is string => typeof k === 'string' && k.length > 0)\n const mediaKeySet = new Set<string>([...defaultMediaKeys, ...customMediaKeys])\n const isValidMediaKey = (mq?: string): boolean => !mq || mediaKeySet.has(mq)\n const shouldEnforceKnownProperties = dictionaryImport !== false\n const compositePropertyKeys = new Set(['mx', 'my', 'px', 'py', 'bdx', 'bdy'])\n let knownFullPropertyNames = new Set<string>()\n const isKnownPropertyKey = (prop: string): boolean => {\n if (!prop) return false\n if (!shouldEnforceKnownProperties) return true\n if (!PropertiesCss || Object.keys(PropertiesCss).length === 0) return true\n return !!PropertiesCss[prop] || compositePropertyKeys.has(prop) || knownFullPropertyNames.has(prop)\n }\n\n let PropertiesCss: CssPropertyMap = {}\n let ValueExts: CssValueMap = {}\n let CommonValues: CssCommonValueMap = {}\n let exts: Record<string, string> = {}\n\n const rebuildExts = () => {\n exts = {\n ...CommonValues,\n ...valueExt,\n }\n }\n\n const applyDictionary = (dictionary: XCSSDictionaryData | null) => {\n if (!dictionary) {\n PropertiesCss = {}\n ValueExts = {}\n CommonValues = {}\n knownFullPropertyNames = new Set()\n rebuildExts()\n return\n }\n\n PropertiesCss = dictionary.SHORT_PROPERTIES\n ValueExts = dictionary.SPECIFIC_VALUES\n CommonValues = dictionary.COMMON_VALUES\n knownFullPropertyNames = new Set(Object.values(PropertiesCss))\n rebuildExts()\n }\n\n let dictionaryReady = true\n let dictionaryReadyPromise: Promise<void> = Promise.resolve()\n\n if (dictionaryImport === false) {\n applyDictionary(null)\n } else if (typeof dictionaryImport === 'string') {\n dictionaryReady = false\n applyDictionary(null)\n dictionaryReadyPromise = loadExternalDictionary(dictionaryImport)\n .then((dictionary) => {\n applyDictionary(dictionary)\n })\n .catch((error) => {\n console.warn('XCSS: Failed to import dictionary from URL', error)\n })\n .finally(() => {\n dictionaryReady = true\n })\n } else {\n const syncBuiltinDictionary = loadBuiltinDictionarySync()\n if (syncBuiltinDictionary) {\n applyDictionary(syncBuiltinDictionary)\n } else {\n dictionaryReady = false\n applyDictionary(null)\n dictionaryReadyPromise = loadBuiltinDictionary()\n .then((dictionary) => {\n applyDictionary(dictionary)\n })\n .catch((error) => {\n console.warn('XCSS: Failed to load built-in dictionary module', error)\n })\n .finally(() => {\n dictionaryReady = true\n })\n }\n }\n\n let lastKnownCacheData: XCSSCacheData | null = null\n\n\n\n const buildCss = (doc: Document | ShadowRoot | Element | undefined = typeof document !== 'undefined' ? document : undefined) => {\n // If running in non-browser environment without a doc, we can still simulate for extraction\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n let docRoot: Document | ShadowRoot | null = null\n const hasBaseOverride = Array.isArray(cssDefault) ? cssDefault.length > 0 : !!cssDefault\n\n if (doc) {\n docRoot = 'getRootNode' in doc ? (doc.getRootNode() as Document | ShadowRoot) : (doc as any)\n }\n\n const CSS_KEYS = new Map<string, string>();\n let sizeLast = 1000;\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot, cacheConfig.styleId)\n }\n\n let emitter = mitt()\n let mqDfAll = [\n { default: '' },\n { xs: 'screen and (max-width: 575px)' },\n { sm: 'screen and (min-width: 576px)' },\n { md: 'screen and (min-width: 768px)' },\n { lg: 'screen and (min-width: 992px)' },\n { xl: 'screen and (min-width: 1200px)' },\n { '2xl': 'screen and (min-width: 1400px)' },\n { sma: 'screen and (max-width: 768px)' },\n { mda: 'screen and (max-width: 992px)' },\n { lga: 'screen and (max-width: 1200px)' },\n { xla: 'screen and (max-width: 1400px)' },\n ...mediaQuery,\n ]\n\n let mqDf = mqDfAll.filter(\n (f, i) =>\n mqDfAll.findLastIndex(\n (fi: any) => Object.keys(fi)[0] == Object.keys(f)[0],\n ) == i,\n )\n\n let keysCssStyleSheetsDom = mqDf.map((m) => Object.keys(m)[0])\n\n const cssStyleSheetsSet: Record<string, Set<string>> = {}\n const cssStyleSheetsDom: Record<string, CSSStyleSheet> = {}\n\n // Store text content for SSR/Extraction\n const cssStyleSheetsText: Record<string, string> = { root: '' }\n const cssStyleSheetsPending: Record<string, string[]> = { root: [] }\n const cssStyleSheetsPendingScheduled: Record<string, boolean> = { root: false }\n\n // Cache Key & Logic\n let currentConfigHash = hashConfig(modules)\n let debounceTimer: any = null\n let latestSaveTicket = 0\n let cacheLoaded = false\n let loadedCacheData: XCSSCacheData | null = null\n let asyncCacheCandidate: { raw: string } | null = null\n\n const writeCache = (value: string) => {\n try {\n window.localStorage.setItem(cacheKey, value)\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const removeCacheIfUnchanged = (expectedRaw?: string) => {\n if (!isBrowser || !window.localStorage) return\n\n if (typeof expectedRaw === 'string') {\n const currentRaw = window.localStorage.getItem(cacheKey)\n if (currentRaw !== expectedRaw) return\n }\n\n window.localStorage.removeItem(cacheKey)\n }\n\n const saveCache = (data: XCSSCacheData) => {\n if (!isBrowser || !window.localStorage) return\n lastKnownCacheData = data\n const ticket = ++latestSaveTicket\n try {\n const json = JSON.stringify(data)\n\n const writeLZWEnvelope = () => {\n const envelope: XCSSCacheEnvelopeLZW = {\n __xcss_cache_v: 2,\n compressed: true,\n payload: compressLZW(json),\n }\n writeCache(JSON.stringify(envelope))\n }\n\n if (!cacheConfig.compression) {\n writeCache(json)\n return\n }\n\n if (canUseCompressionStream() && canUseDecompressionStream()) {\n void compressDeflateRawBase64(json)\n .then((payload) => {\n if (ticket !== latestSaveTicket) return\n const envelope: XCSSCacheEnvelopeStream = {\n __xcss_cache_v: 3,\n compressed: true,\n algorithm: 'deflate-raw',\n encoding: 'base64',\n payload,\n }\n writeCache(JSON.stringify(envelope))\n })\n .catch(() => {\n if (ticket !== latestSaveTicket) return\n writeLZWEnvelope()\n })\n return\n }\n\n writeLZWEnvelope()\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const triggerSave = () => {\n if (!isBrowser) return\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(() => {\n const rulesSetObj: Record<string, string[]> = {}\n for (const k in cssStyleSheetsSet) {\n rulesSetObj[k] = Array.from(cssStyleSheetsSet[k])\n }\n\n // Prepare CSS Text with @media wrapping for Bootloader\n const cssTextForCache: Record<string, string> = {}\n Object.keys(cssStyleSheetsText).forEach(k => {\n if (k === 'root') {\n cssTextForCache[k] = cssStyleSheetsText[k]\n } else {\n const mqStr = mqDfAll.find(m => Object.keys(m)[0] === k)?.[k]\n // Only wrap if meaningful content\n if (mqStr && cssStyleSheetsText[k]) {\n cssTextForCache[k] = `@media ${mqStr} {\\n${cssStyleSheetsText[k]}\\n}`\n } else {\n cssTextForCache[k] = cssStyleSheetsText[k] || ''\n }\n }\n })\n\n const data: XCSSCacheData = {\n configHash: currentConfigHash,\n cssText: cssTextForCache,\n rulesSet: rulesSetObj,\n keys: Array.from(CSS_KEYS.entries()),\n sizeLast: sizeLast\n }\n saveCache(data)\n }, cacheConfig.debounceMs)\n }\n\n // Tải cache (đồng bộ) — chỉ sử dụng 1 key duy nhất\n if (isBrowser && window.localStorage) {\n try {\n const raw = window.localStorage.getItem(cacheKey)\n if (raw) {\n const data = parseCacheDataSync(raw)\n if (!data) {\n // Nếu là stream-compressed thì xử lý bất đồng bộ sau\n if (isStreamCacheEnvelopeRaw(raw)) {\n asyncCacheCandidate = { raw }\n } else {\n window.localStorage.removeItem(cacheKey)\n }\n } else if (data.configHash !== currentConfigHash) {\n // Config đã thay đổi, xóa cache cũ\n window.localStorage.removeItem(cacheKey)\n } else {\n loadedCacheData = data\n cacheLoaded = true\n\n // Khôi phục CSS_KEYS\n if (data.keys) {\n data.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n // Khôi phục sizeLast\n if (typeof data.sizeLast === 'number') {\n sizeLast = data.sizeLast\n }\n // Khôi phục cssText (unwrap cho sử dụng nội bộ)\n if (data.cssText) {\n for (const k in data.cssText) {\n cssStyleSheetsText[k] = unwrapCachedCssText(k, data.cssText[k])\n }\n }\n lastKnownCacheData = data\n }\n }\n } catch (e) { console.error(e) }\n }\n\n // Init sheets & Finish Hydration\n if (isBrowser) {\n cssStyleSheetsDom['root'] = new CSSStyleSheet()\n }\n\n keysCssStyleSheetsDom.forEach((k) => {\n cssStyleSheetsSet[k] = new Set()\n if (isBrowser) {\n const media = mqDf.find((m) => Object.keys(m)[0] == k)?.[k] || ''\n cssStyleSheetsDom[k] = new CSSStyleSheet({ media })\n }\n // If NOT loaded from cache, ensure empty.\n if (!cacheLoaded) {\n cssStyleSheetsText[k] = ''\n }\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n const removeBootloaderStyle = () => {\n if (!docRoot) return\n const blStyle = docRoot.querySelector(`style[id=\"${cacheConfig.styleId}\"]`)\n if (blStyle) blStyle.remove()\n }\n\n const hydrateCacheAfterInit = (data: XCSSCacheData) => {\n if (data.keys) {\n data.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n // Khôi phục sizeLast\n if (typeof data.sizeLast === 'number') {\n sizeLast = data.sizeLast\n }\n\n if (data.cssText) {\n for (const k in data.cssText) {\n if (k === 'root' && hasBaseOverride) continue\n\n const txt = unwrapCachedCssText(k, data.cssText[k])\n cssStyleSheetsText[k] = txt\n if (isBrowser && cssStyleSheetsDom[k]) {\n cssStyleSheetsDom[k].replaceSync(txt)\n }\n }\n }\n\n if (data.rulesSet) {\n for (const k in data.rulesSet) {\n if (!cssStyleSheetsSet[k]) cssStyleSheetsSet[k] = new Set()\n data.rulesSet[k].forEach(r => cssStyleSheetsSet[k].add(r))\n }\n }\n\n lastKnownCacheData = data\n removeBootloaderStyle()\n }\n\n // Post-Init Hydration: Populate from sync cache\n if (cacheLoaded && loadedCacheData) {\n hydrateCacheAfterInit(loadedCacheData)\n }\n\n if (cssDefault && Array.isArray(cssDefault)) {\n cssStyleSheetsText.root = cssDefault.join('\\n')\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n } else {\n cssStyleSheetsText.root = (cssDefault as string) || ''\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n }\n\n if (isBrowser && docRoot) {\n ['root', ...keysCssStyleSheetsDom].forEach((k) => {\n if (cssStyleSheetsDom[k] && docRoot?.adoptedStyleSheets) {\n if (!docRoot.adoptedStyleSheets.includes(cssStyleSheetsDom[k])) {\n docRoot.adoptedStyleSheets = [\n ...docRoot.adoptedStyleSheets,\n cssStyleSheetsDom[k],\n ]\n }\n }\n })\n }\n\n // Xử lý bất đồng bộ cho cache stream-compressed\n if (isBrowser && window.localStorage && asyncCacheCandidate && !cacheLoaded) {\n void (async () => {\n const data = await parseCacheDataAsync(asyncCacheCandidate!.raw)\n if (!data) {\n removeCacheIfUnchanged(asyncCacheCandidate!.raw)\n return\n }\n if (data.configHash !== currentConfigHash) {\n removeCacheIfUnchanged(asyncCacheCandidate!.raw)\n return\n }\n cacheLoaded = true\n loadedCacheData = data\n hydrateCacheAfterInit(data)\n })()\n }\n\n const updateRules = (txtCls: string, d: any) => {\n let { media, property, selector, layer, className } = d\n\n let cssTextStore = cssStyleSheetsText\n let cssPending = cssStyleSheetsPending\n let cssPendingScheduled = cssStyleSheetsPendingScheduled\n\n layer = Number(layer) || 0\n // let classNameStr2 = className\n let cssExts = CSS_KEYS.get(txtCls)\n let cssName = cssExts\n ? `.${cssExts}${selector}`\n : `.${className}${selector}`\n\n var txtCss = `@layer l${layer}{${cssName}{${property}}}`\n\n if (!cssStyleSheetsSet[media]) {\n // Fallback or init if missing\n cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Add valid media/pending arrays if missed\n if (!cssPending[media]) cssPending[media] = []\n\n cssPending[media].push(txtCss)\n\n // If not in browser, we can just sync immediately or keep it pending\n // But for SSR extraction, we want it in cssTextStore\n if (!isBrowser) {\n const pending = cssPending[media]\n if (pending.length > 0) {\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n cssPending[media] = []\n }\n } else {\n if (!cssPendingScheduled[media]) {\n cssPendingScheduled[media] = true\n queueMicrotask(() => {\n const pending = cssPending[media]\n const sheet = cssStyleSheetsDom[media]\n if (pending.length > 0) {\n cssTextStore[media] +=\n (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n if (sheet) {\n sheet.replaceSync(cssTextStore[media])\n }\n cssPending[media] = []\n triggerSave() // TRIGGER SAVE CACHE\n }\n cssPendingScheduled[media] = false\n })\n }\n }\n }\n }\n\n const applyObservedItems = (items: string[]) => {\n items.forEach((cls) => {\n let item = classToProp(cls)\n item && updateRules(cls, item)\n })\n }\n\n const processObservedItems = (items: string[]) => {\n if (items.length === 0) return\n\n const run = () => applyObservedItems(items)\n if (dictionaryReady) {\n run()\n } else {\n dictionaryReadyPromise.then(run)\n }\n }\n\n emitter.on('observeDom' as any, processObservedItems)\n\n const clsx = (...clsArrs: any[]) => {\n let lsCss = clsArrs\n .map((m) => (Array.isArray(m) ? m : [m]))\n .flat(Infinity)\n .map((m) => (typeof m === 'string' ? m.split(/(\\s|\\t)+/g) : []))\n .flat(Infinity) as string[]\n\n lsCss = lsCss.filter((m) => typeof m === 'string' && m.trim())\n\n lsCss = [...new Set(lsCss)]\n\n const shouldHashClass = (txtClass: string): boolean => {\n if (!shouldProcessClass(txtClass)) return false\n\n if (dictionaryReady) {\n return !!classToProp(txtClass)\n }\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const parsed = parseClassName(parseTarget)\n if (!parsed) return false\n if (!isValidMediaKey(parsed.mq)) return false\n\n const selectorStr = (parsed.selector || '').replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n if (selectorStr && !isLikelyValidSelectorFallback(selectorStr)) return false\n\n if (parsed.prop.startsWith('[')) {\n return !!propsValueExt(parsed.prop + parsed.val)\n }\n if (!isKnownPropertyKey(parsed.prop)) return false\n if (parsed.prop === '&') return parsed.val.length > 0\n return parsed.val.length > 0\n }\n\n let lsClassNew = lsCss.map((l: string) => {\n let item = l\n if (CSS_KEYS.has(l)) {\n item = CSS_KEYS.get(l)!\n } else {\n // Only hash class names that can actually generate valid CSS.\n // Invalid/unsupported tokens (e.g. \"bs-a\") must stay raw.\n if (shouldHashClass(l)) {\n // Tạo key mới, nếu bị trùng thì tiếp tục tăng sizeLast\n const existingValues = new Set(CSS_KEYS.values())\n let key: string\n do {\n key = 'D' + (sizeLast++).toString(32).toUpperCase()\n } while (existingValues.has(key))\n CSS_KEYS.set(l, key)\n item = key\n triggerSave() // LƯU CACHE\n }\n }\n\n return item\n })\n\n // Emit event to update styles\n // In SSR/Non-browser, we might want to sync immediately?\n // Emit event to update styles\n // In SSR/Non-browser, sync immediately for extraction support\n if (!isBrowser) {\n emitter.emit('observeDom' as any, lsCss)\n } else {\n queueMicrotask(() => emitter.emit('observeDom' as any, lsCss))\n }\n\n return lsClassNew.join(' ')\n }\n\n const observe = () => {\n if (!isBrowser || !docRoot) return\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n processObservedItems(items)\n })\n }\n\n const getCssString = () => {\n return Object.entries(cssStyleSheetsText).map(([media, css]) => {\n if (!css) return ''\n if (media === 'root' || media === 'default') return css\n // Wrap in media query\n const mediaQueryStr = mqDfAll.find(m => Object.keys(m)[0] === media)?.[media]\n if (mediaQueryStr) {\n return `@media ${mediaQueryStr} {\\n${css}\\n}`\n }\n return css\n }).join('\\n')\n }\n\n return { clsx, observe, getCssString }\n }\n\n\n function propsValueExt(txtProps: string) {\n const REGEX_CSS = new RegExp('^(\\\\[(?<p>[a-zA-Z]+)\\\\])$')\n let { p = '' } = REGEX_CSS.exec(txtProps)?.groups ?? {}\n if (p && groupValues[p] && Array.isArray(groupValues[p])) {\n let cssProp = groupValues[p]\n\n let resolvedProps: string[] = []\n let isAllValidUtilities = true\n const normalizeAliasDeclaration = (input: string): string | null => {\n const text = input.trim()\n if (!text) return null\n\n const cleaned = text.endsWith(';') ? text.slice(0, -1).trim() : text\n const colonIndex = cleaned.indexOf(':')\n if (colonIndex <= 0 || colonIndex >= cleaned.length - 1) return null\n\n const prop = cleaned.slice(0, colonIndex).trim()\n const value = cleaned.slice(colonIndex + 1).trim()\n if (!prop || !value) return null\n if (!/^(?:--[a-zA-Z0-9-_]+|-?[a-zA-Z][a-zA-Z0-9-]*)$/.test(prop)) return null\n\n return `${prop}:${value}`\n }\n\n for (const cls of cssProp) {\n if (typeof cls !== 'string') {\n isAllValidUtilities = false\n break\n }\n\n const declaration = normalizeAliasDeclaration(cls)\n if (declaration) {\n if (typeof CSS !== 'undefined' && !CSS.supports(declaration)) {\n isAllValidUtilities = false\n break\n }\n resolvedProps.push(declaration)\n continue\n }\n\n isAllValidUtilities = false\n break\n }\n\n if (resolvedProps.length > 0 && isAllValidUtilities) {\n return resolvedProps.join(';')\n }\n }\n\n return null\n }\n\n function propToValue(p: string, v: string): string | null {\n // Step 0: Check config extensions\n let gvalue = propsValueExt(p + v)\n if (gvalue) return gvalue\n\n if (!p || v === undefined) return null\n\n // Step 1: Normalize Property Key\n let c = PropertiesCss[p]\n let propertyName = c ? c : p\n\n // Step 2: Analyze Value (Important, Arbitrary, Variable)\n let v0 = v[0]\n let i = false\n let vx = v\n\n // 2.1 Check Important (!)\n if (v0 === '!') {\n i = true\n vx = vx.substring(1)\n v0 = vx[0] // update first char\n }\n\n // 2.2 Normalize Value Key (Lowercase if alpha) \n // Only if not arbitrary or variable\n // But arbitrary starts with [ or {\n if (vx.startsWith('--')) {\n vx = 'var(' + vx + ')'\n } else if (v0 === '[' && vx.endsWith(']')) {\n // Arbitrary Value: Strip brackets\n vx = vx.substring(1, vx.length - 1)\n } else {\n // Dictionary Value Lookup\n if (vx.length > 0) {\n // Try lowercasing the whole key for Dictionary Lookup.\n let lookupKey = vx[0].toLowerCase() + vx.substring(1)\n\n // Try 1: Standard (first char lower)\n let val = ValueExts[p]?.[lookupKey] || exts[lookupKey]\n\n // Try 2: Full Lowercase (e.g. SB -> sb)\n if (!val) {\n let lowerKey = vx.toLowerCase()\n val = ValueExts[p]?.[lowerKey] || exts[lowerKey]\n }\n\n vx = val || vx\n }\n }\n\n // Step 3: Replace Semicolon\n vx = vx.replace(/(';|;)/g, (val: string) => (val == \"';\" ? ';' : ' '))\n\n if (!vx) return null\n\n // Step 4: Construct CSS\n let vxx = vx + (i ? ' !important' : '')\n let cssProp = [propertyName + ':' + vxx]\n\n switch (propertyName) {\n case 'mx':\n cssProp = [`margin-left:${vxx}`, `margin-right:${vxx}`]\n break\n case 'my':\n cssProp = [`margin-top:${vxx}`, `margin-bottom:${vxx}`]\n break\n case 'px':\n cssProp = [`padding-left:${vxx}`, `padding-right:${vxx}`]\n break\n case 'py':\n cssProp = [`padding-top:${vxx}`, `padding-bottom:${vxx}`]\n break\n case 'bdx':\n cssProp = [`border-left:${vxx}`, `border-right:${vxx}`]\n break\n case 'bdy':\n cssProp = [`border-top:${vxx}`, `border-bottom:${vxx}`]\n break\n }\n\n const isBrowser = typeof CSS !== 'undefined'\n if (!isBrowser || cssProp.every((x) => CSS.supports(x))) {\n return cssProp.join(';')\n }\n\n return null\n }\n\n const splitSelectorSuffix = (input: string): { body: string, selector: string } => {\n let bracketDepth = 0\n for (let i = input.length - 1; i >= 0; i--) {\n const ch = input[i]\n if (ch === ']') {\n bracketDepth++\n continue\n }\n if (ch === '[') {\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n if (ch === '@' && bracketDepth === 0) {\n return {\n body: input.slice(0, i),\n selector: input.slice(i + 1),\n }\n }\n }\n return { body: input, selector: '' }\n }\n\n const splitByAmpersandOutsideBrackets = (input: string): string[] => {\n const parts: string[] = []\n let start = 0\n let bracketDepth = 0\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '[') {\n bracketDepth++\n continue\n }\n if (ch === ']') {\n if (bracketDepth > 0) bracketDepth--\n continue\n }\n if (ch === '&' && bracketDepth === 0) {\n parts.push(input.slice(start, i))\n start = i + 1\n }\n }\n\n parts.push(input.slice(start))\n return parts\n }\n\n const isLikelyValidSelectorFallback = (selector: string): boolean => {\n if (!selector) return true\n const text = selector.trim()\n if (!text) return true\n if (/[{}]/.test(text)) return false\n if (text === '#' || text === '(' || text === ')' || text === ',' || text === '>' || text === '+' || text === '~') return false\n if (text.startsWith('(') || text.startsWith(')')) return false\n\n let roundDepth = 0\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n if (ch === '(') {\n roundDepth++\n continue\n }\n if (ch === ')') {\n if (roundDepth === 0) return false\n roundDepth--\n }\n }\n\n return roundDepth === 0\n }\n\n function classToProp(txtClass: string) {\n if (!shouldProcessClass(txtClass)) return null\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const className = typeof CSS !== 'undefined' ? CSS.escape(txtClass) : escapeCssIdentifier(txtClass)\n\n // Support chained utilities: \"md:dF&fxdC@;li\", \"dF&fk-fxdC@;li\", \"md:[grp1]&[grp2]@;li\"\n if (parseTarget.includes('&') && !parseTarget.startsWith('&')) {\n const { body, selector } = splitSelectorSuffix(parseTarget)\n const segments = splitByAmpersandOutsideBrackets(body)\n .map((seg) => seg.trim())\n .filter((seg) => seg.length > 0)\n .map((seg) => (prefix && seg.startsWith(prefix) ? seg.slice(prefix.length) : seg))\n\n if (segments.length > 1) {\n let rootMedia = ''\n let rootLayer = ''\n const rootSelector = selector\n let hasRoot = false\n const cssPropItems: string[] = []\n\n for (const seg of segments) {\n const segClass = rootSelector ? `${seg}@${rootSelector}` : seg\n const parsedSeg = parseClassName(segClass)\n if (!parsedSeg) return null\n if (!isValidMediaKey(parsedSeg.mq)) return null\n if (!parsedSeg.prop.startsWith('[') && !isKnownPropertyKey(parsedSeg.prop)) return null\n\n if (!hasRoot) {\n rootMedia = parsedSeg.mq || ''\n rootLayer = parsedSeg.layer || ''\n hasRoot = true\n } else {\n if (!parsedSeg.mq && rootMedia) parsedSeg.mq = rootMedia\n if (!parsedSeg.layer && rootLayer) parsedSeg.layer = rootLayer\n }\n\n const segMedia = parsedSeg.mq || ''\n const segLayer = parsedSeg.layer || ''\n const segSelector = parsedSeg.selector || ''\n if (segMedia !== rootMedia || segLayer !== rootLayer || segSelector !== rootSelector) {\n return null\n }\n\n const valStr = propToValue(parsedSeg.prop, parsedSeg.val)\n if (!valStr) return null\n cssPropItems.push(valStr)\n }\n\n if (cssPropItems.length === 0) return null\n\n const selectorStr = rootSelector.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n const checkSupport = `selector(${className}${selectorStr})`\n if (selectorStr) {\n if (typeof CSS !== 'undefined') {\n if (!CSS.supports(checkSupport)) return null\n } else if (!isLikelyValidSelectorFallback(selectorStr)) {\n return null\n }\n }\n\n return {\n media: rootMedia || 'default',\n layer: rootLayer || '0',\n className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n }\n }\n\n const parsed = parseClassName(parseTarget)\n if (!parsed) return null\n if (!isValidMediaKey(parsed.mq)) return null\n if (!parsed.prop.startsWith('[') && !isKnownPropertyKey(parsed.prop)) return null\n\n let { mq: m = 'default', layer: l = '0', prop: p, val: v, selector: s = '' } = parsed\n const cssPropItems: string[] = []\n\n const valStr = propToValue(p, v)\n if (valStr) cssPropItems.push(valStr)\n\n if (cssPropItems.length === 0) return null\n\n const selectorStr = s.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n const checkSupport = `selector(${className}${selectorStr})`\n if (selectorStr) {\n if (typeof CSS !== 'undefined') {\n if (!CSS.supports(checkSupport)) return null\n } else if (!isLikelyValidSelectorFallback(selectorStr)) {\n return null\n }\n }\n\n return {\n media: m || 'default',\n layer: l || '0',\n className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n }\n\n // polyfill for CSS.escape in node\n const escapeCssIdentifier = (str: string) => {\n // Basic escape for Node environment\n return str.replace(/([^\\w-])/g, '\\\\$1');\n }\n\n const getClassAttrs = (el: Element): string[] => {\n var clsRoot = [...(el?.classList || [])].filter((f) => {\n if (f) {\n let c = f.charCodeAt(0) == 45 ? f.charCodeAt(1) : f.charCodeAt(0)\n return (c >= 97 && c <= 122) || (c >= 48 && c <= 57)\n }\n return false\n })\n\n if (el?.children?.length > 0) {\n Array.from(el?.children).forEach((itm) => {\n clsRoot.push(...getClassAttrs(itm))\n })\n }\n return clsRoot.flat(Infinity) as string[]\n }\n\n const observeDom = (dom: Document | Element | ShadowRoot, cb: (items: string[]) => void) => {\n if (typeof cb != 'function') {\n throw new Error('Callback is not a function')\n }\n if (!dom) return\n let docx: Element | ShadowRoot | undefined = undefined\n\n // Type guards\n if ('documentElement' in dom) {\n docx = dom.documentElement\n } else if (dom instanceof Element || ('tagName' in dom)) { // Basic check for Element\n docx = dom as Element\n } else if ('host' in dom) { // Basic check for ShadowRoot\n docx = dom as ShadowRoot\n }\n\n if (!docx) return\n\n if (docx instanceof Element) {\n cb(getClassAttrs(docx))\n }\n\n // Tạo MutationObserver để theo dõi thay đổi class\n if (typeof MutationObserver !== 'undefined') {\n new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (\n mutation.type == 'attributes' &&\n mutation.attributeName == 'class'\n ) {\n if (mutation.target.nodeType == 1) {\n let className = String((mutation.target as Element)?.className ?? '')\n let oldValue = String(mutation?.oldValue ?? '')\n\n if (className || oldValue) {\n let vClass = className\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n let vClassOld = oldValue\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n vClass = vClass.filter((f) => !vClassOld.includes(f))\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n } else {\n if (mutation.type == 'childList' && mutation.addedNodes.length > 0) {\n let vClass = [...mutation.addedNodes]\n .filter((f) => f.nodeType == 1)\n .map((m) => getClassAttrs(m as Element))\n .flat(Infinity) as string[]\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n }\n }).observe(docx, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n })\n }\n }\n\n // API công khai để xuất cache cho build thủ công\n const exportCache = () => {\n if (typeof window === 'undefined' || !window.localStorage) return lastKnownCacheData\n const data = parseCacheDataSync(window.localStorage.getItem(cacheKey))\n return data || lastKnownCacheData\n }\n\n return { buildCss, exportCache, ready: dictionaryReadyPromise }\n}\n\nexport const cssObserve = (dom: Document | Element | ShadowRoot, options?: XCSSConfig) => {\n xcss(options).buildCss(dom).observe()\n}\n\nexport const cssClsx = (dom: Document | Element | ShadowRoot, options?: XCSSConfig) => {\n return xcss(options).buildCss(dom).clsx\n}\n\nexport default { css: xcss, cssObserve, clsx: cssClsx }\n","\nexport type BootloaderScriptOptions = {\n compact?: boolean\n}\n\nconst resolveCacheKey = (styleId: string, versionOrCacheKey: string): string => {\n styleId = styleId || \"fwkui\";\n versionOrCacheKey = versionOrCacheKey || \"v1\";\n return `${styleId}_cache_${versionOrCacheKey}`;\n}\n\nexport const getBootloaderScript = (\n styleIdInput: string = 'fwkui',\n version: string = 'v1',\n options?: BootloaderScriptOptions,\n) => {\n const styleIdValue = String(styleIdInput || '').trim() || 'fwkui'\n const cacheKeyValue = resolveCacheKey(styleIdValue, version)\n const styleId = JSON.stringify(styleIdValue)\n const cacheKey = JSON.stringify(cacheKeyValue)\n\n const script = `\n(async function () {\n function decompressLZW(compressed) {\n if (!compressed) return '';\n var dictionary = {};\n var dictSize = 256;\n var i;\n for (i = 0; i < 256; i++) dictionary[i] = String.fromCharCode(i);\n var codes = compressed.split('').map(function (ch) { return ch.charCodeAt(0); });\n var previous = codes[0];\n var phrase = dictionary[previous] || '';\n var result = phrase;\n for (i = 1; i < codes.length; i++) {\n var current = codes[i];\n var entry = dictionary[current];\n if (!entry) entry = current === dictSize ? phrase + phrase[0] : '';\n result += entry;\n dictionary[dictSize++] = phrase + entry[0];\n phrase = entry;\n }\n return result;\n }\n\n function canUseStream() {\n return (\n typeof DecompressionStream !== 'undefined' &&\n typeof Blob !== 'undefined' &&\n typeof Response !== 'undefined'\n );\n }\n\n function base64ToBytes(base64) {\n if (typeof atob === 'function') {\n var binary = atob(base64);\n var bytes = new Uint8Array(binary.length);\n for (var i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n }\n if (typeof Buffer !== 'undefined') {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n throw new Error('No base64 decoder');\n }\n\n async function decompressDeflateRawBase64(payload) {\n if (!canUseStream()) return null;\n try {\n var bytes = base64ToBytes(payload);\n var stream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream('deflate-raw'));\n return await new Response(stream).text();\n } catch (_error) {\n return null;\n }\n }\n\n async function parseCache(raw) {\n if (!raw) return null;\n try {\n var parsed = JSON.parse(raw);\n if (\n parsed &&\n parsed.__xcss_cache_v === 3 &&\n parsed.compressed === true &&\n parsed.algorithm === 'deflate-raw' &&\n parsed.encoding === 'base64' &&\n typeof parsed.payload === 'string'\n ) {\n var expandedStream = await decompressDeflateRawBase64(parsed.payload);\n if (!expandedStream) return null;\n parsed = JSON.parse(expandedStream);\n } else if (parsed && parsed.__xcss_cache_v === 2 && parsed.compressed === true && typeof parsed.payload === 'string') {\n var expanded = decompressLZW(parsed.payload);\n if (!expanded) return null;\n parsed = JSON.parse(expanded);\n }\n if (!parsed || !parsed.cssText) return null;\n return parsed;\n } catch (_error) {\n return null;\n }\n }\n\n try {\n if (typeof window === 'undefined' || !window.localStorage) return;\n\n var styleId = ${styleId};\n var key = ${cacheKey};\n var raw = localStorage.getItem(key);\n if (!raw) return;\n var payload=await parseCache(raw);\n if (!payload) {\n localStorage.removeItem(key);\n return;\n }\n\n var styleEl = document.getElementById(styleId);\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = styleId;\n document.head.appendChild(styleEl);\n }\n\n var css = '';\n if (payload.cssText.root) css += payload.cssText.root + '\\\\n';\n for (var k in payload.cssText) {\n if (k !== 'root') css += (payload.cssText[k] || '') + '\\\\n';\n }\n styleEl.textContent = css;\n } catch (_error) {}\n})();\n `.trim()\n\n if (options?.compact) {\n return script.replace(/\\s+/g, ' ').trim()\n }\n\n return script\n}\n","import $$ from './core'\nimport { XCSSConfig } from './core'\nimport { getBootloaderScript } from './bootloader'\nimport type { BootloaderScriptOptions } from './bootloader'\n\nconst GLOBAL_KEY = '__FWXCSS_SHARED__'\nconst DEFAULT_SHARED_CONFIG: XCSSConfig = {\n base: 'html,body{font-size:16px;padding:0;margin:0;}',\n}\n\ntype CssRoot = Document | ShadowRoot\n\ninterface CssInit {\n clsx: (...args: any[]) => string\n observe: () => void\n getCssString: () => string\n ready: Promise<void>\n}\n\nexport interface SharedXCSSInstance {\n clsx: (...args: any[]) => string\n observe: (root?: CssRoot) => void\n setClsxRoot: (root: CssRoot) => void\n getCss: (root?: CssRoot | null) => string\n ready: (root?: CssRoot | null) => Promise<void>\n}\n\nconst isCssRoot = (value: any): value is CssRoot => {\n if (!value) return false\n const hasDocument = typeof Document !== 'undefined'\n const hasShadowRoot = typeof ShadowRoot !== 'undefined'\n const isDoc = hasDocument && value instanceof Document\n const isShadow = hasShadowRoot && value instanceof ShadowRoot\n return isDoc || isShadow\n}\n\nconst flattenClassArgs = (args: any[]): string[] => {\n const classes: string[] = []\n\n const push = (value: any) => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n classes.push(String(value))\n return\n }\n if (Array.isArray(value)) {\n value.forEach(push)\n return\n }\n if (typeof value === 'object') {\n Object.keys(value).forEach((key) => {\n if (value[key]) classes.push(key)\n })\n }\n }\n\n args.forEach(push)\n return classes\n}\n\nconst makeSharedInstance = (config?: XCSSConfig): SharedXCSSInstance => {\n const cssInitMap = new WeakMap<CssRoot, CssInit>()\n let globalInstance: CssInit | null = null\n const sharedConfig = config ?? DEFAULT_SHARED_CONFIG\n\n let currentCssRoot: CssRoot | null = typeof document !== 'undefined' ? document : null\n\n const createCssInit = (root?: CssRoot | null): CssInit => {\n const engine = $$.css(sharedConfig)\n const built = engine.buildCss(root ?? undefined)\n return {\n ...built,\n ready: engine.ready,\n }\n }\n\n const getFallbackInit = (): CssInit => {\n if (!globalInstance) {\n globalInstance = createCssInit(null)\n }\n return globalInstance\n }\n\n const getCssInit = (root: CssRoot | undefined | null): CssInit => {\n if (!root) return getFallbackInit()\n let cssInit = cssInitMap.get(root)\n if (!cssInit) {\n cssInit = createCssInit(root)\n cssInitMap.set(root, cssInit)\n }\n return cssInit\n }\n\n const setClsxRoot = (root: CssRoot) => {\n currentCssRoot = root || (typeof document !== 'undefined' ? document : null)\n }\n\n const clsx = (...args: any[]): string => {\n let root: CssRoot | undefined | null = undefined\n const last = args[args.length - 1]\n if (isCssRoot(last)) {\n root = last\n args = args.slice(0, -1)\n }\n\n const classes = flattenClassArgs(args)\n const resolvedRoot = root || currentCssRoot\n\n return getCssInit(resolvedRoot).clsx(classes.join(' '))\n }\n\n const observe = (root?: CssRoot) => {\n const resolvedRoot = root || currentCssRoot\n getCssInit(resolvedRoot).observe()\n }\n\n const getCss = (root?: CssRoot | null) => {\n if (root) return getCssInit(root).getCssString()\n if (currentCssRoot) return getCssInit(currentCssRoot).getCssString()\n return getFallbackInit().getCssString()\n }\n\n const ready = (root?: CssRoot | null) => {\n if (root) return getCssInit(root).ready\n if (currentCssRoot) return getCssInit(currentCssRoot).ready\n return getFallbackInit().ready\n }\n\n return { clsx, observe, setClsxRoot, getCss, ready }\n}\n\nexport const createSharedInstance = (config?: XCSSConfig): SharedXCSSInstance => {\n return makeSharedInstance(config)\n}\n\nexport const createSharedClsx = (config?: XCSSConfig): SharedXCSSInstance => {\n return makeSharedInstance(config)\n}\n\nconst globalScope = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : global) as any\nconst shared: SharedXCSSInstance = globalScope[GLOBAL_KEY] || makeSharedInstance()\n\nif (!globalScope[GLOBAL_KEY]) {\n globalScope[GLOBAL_KEY] = shared\n}\n\nexport const clsx = shared.clsx\nexport const observe = shared.observe\nexport const setClsxRoot = shared.setClsxRoot\nexport const getCss = shared.getCss\nexport const ready = shared.ready\nexport { getBootloaderScript }\nexport default $$\nexport type { XCSSConfig, BootloaderScriptOptions }\n"],"mappings":"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","names":["index_auto_exports","__export","clsx","createSharedClsx","createSharedInstance","index_auto_default","getBootloaderScript","getCss","observe","ready","setClsxRoot","__toCommonJS","mitt","all","type","handler","handlers","evt","wildcardHandlers","findFirstColonOutsideBrackets","input","start","end","bracketDepth","i","code","findLastAtOutsideBrackets","hasBalancedSquareBrackets","isLowerAlpha","parseClassName","className","selector","atIndex","mq","layer","colonIndex","prefix","digitEnd","closeIndex","propEnd","nextCode","prop","val","resolveCacheConfig","config","styleId","version","compression","debounceMs","createCacheKey","cache","isCacheEnvelopeLZW","value","obj","isCacheEnvelopeStream","canUseCompressionStream","canUseDecompressionStream","bytesToBase64","bytes","binary","i","chunk","j","buff","base64ToBytes","base64","compressDeflateRawBase64","input","stream","compressed","decompressDeflateRawBase64","payload","normalized","isStreamCacheEnvelopeRaw","raw","parsed","compressLZW","dictionary","codes","dictSize","phrase","currentChar","phraseWithChar","code","decompressLZW","result","char","previous","current","entry","resolveDictionaryData","mod","moduleObj","source","short","common","specific","loadExternalDictionary","data","DICTIONARY_MODULE_ERROR","loadBuiltinDictionarySync","req","loadBuiltinDictionary","syncData","candidates","lastError","error","setupCssLayers","docRoot","id","layers","_","styleElement","layerRule","iterval","hashConfig","excludes","str","hash","chr","parseCacheDataSync","expanded","parseCacheDataAsync","unwrapCachedCssText","mediaKey","text","match","xcss","modules","cssDefault","mediaQuery","groupValues","valueExt","excludeNames","excludePrefixes","prefix","dictionaryImport","cacheOptions","cacheConfig","cacheKey","mergedExcludes","normalizedExcludePrefixes","x","globToRegex","pattern","escaped","excludeRules","regex","cls","isExcludedClass","txtClass","prefixText","rule","shouldProcessClass","defaultMediaKeys","customMediaKeys","m","k","mediaKeySet","isValidMediaKey","mq","shouldEnforceKnownProperties","compositePropertyKeys","knownFullPropertyNames","isKnownPropertyKey","prop","PropertiesCss","ValueExts","CommonValues","exts","rebuildExts","applyDictionary","dictionaryReady","dictionaryReadyPromise","syncBuiltinDictionary","lastKnownCacheData","buildCss","doc","isBrowser","hasBaseOverride","CSS_KEYS","sizeLast","emitter","mitt","mqDfAll","mqDf","f","fi","keysCssStyleSheetsDom","cssStyleSheetsSet","cssStyleSheetsDom","cssStyleSheetsText","cssStyleSheetsPending","cssStyleSheetsPendingScheduled","currentConfigHash","debounceTimer","latestSaveTicket","cacheLoaded","loadedCacheData","asyncCacheCandidate","writeCache","e","removeCacheIfUnchanged","expectedRaw","saveCache","ticket","json","writeLZWEnvelope","envelope","triggerSave","rulesSetObj","cssTextForCache","mqStr","media","removeBootloaderStyle","blStyle","hydrateCacheAfterInit","v","txt","r","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssPending","cssPendingScheduled","cssExts","cssName","txtCss","cssStyleSheetSet","pending","sheet","applyObservedItems","items","item","classToProp","processObservedItems","run","clsArrs","lsCss","shouldHashClass","parseTarget","parseClassName","selectorStr","isLikelyValidSelectorFallback","propsValueExt","lsClassNew","l","existingValues","key","observeDom","css","mediaQueryStr","txtProps","REGEX_CSS","p","cssProp","resolvedProps","isAllValidUtilities","normalizeAliasDeclaration","cleaned","colonIndex","declaration","propToValue","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","splitSelectorSuffix","bracketDepth","ch","splitByAmpersandOutsideBrackets","parts","start","roundDepth","escapeCssIdentifier","body","segments","seg","rootMedia","rootLayer","rootSelector","hasRoot","cssPropItems","segClass","parsedSeg","segMedia","segLayer","segSelector","valStr","checkSupport","s","getClassAttrs","el","clsRoot","itm","dom","cb","docx","mutationList","mutation","oldValue","vClass","vClassOld","cssObserve","options","cssClsx","core_default","resolveCacheKey","styleId","versionOrCacheKey","getBootloaderScript","styleIdInput","version","options","styleIdValue","cacheKeyValue","cacheKey","script","GLOBAL_KEY","DEFAULT_SHARED_CONFIG","isCssRoot","value","hasDocument","hasShadowRoot","isDoc","isShadow","flattenClassArgs","args","classes","push","key","makeSharedInstance","config","cssInitMap","globalInstance","sharedConfig","currentCssRoot","createCssInit","root","engine","core_default","getFallbackInit","getCssInit","cssInit","last","createSharedInstance","createSharedClsx","globalScope","shared","clsx","observe","setClsxRoot","getCss","ready","index_default","core_default","index_default","index_auto_default"]}
|