@fwkui/x-css 1.0.24 → 1.0.26
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 +55 -2
- package/dist/index-auto.js +12 -12
- package/dist/index-auto.js.map +1 -1
- package/dist/index-auto.mjs +12 -12
- package/dist/index-auto.mjs.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/events.ts","../src/parser.ts","../src/dictionary.ts","../src/core.ts","../src/bootloader.ts","../src/tailwind.ts","../src/tailwind-readiness.ts","../src/index.ts"],"sourcesContent":["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","// CSS Properties Abbreviation Dictionary\n// Rules:\n// - Normalized to lowercase keys\n\nexport const SHORT_PROPERTIES: Record<string, string> = {\n a: 'all',\n ac: 'align-content',\n acc: 'accent-color',\n ai: 'align-items',\n ani: 'animation',\n anic: 'animation-composition',\n anide: 'animation-delay',\n anidi: 'animation-direction',\n anidu: 'animation-duration',\n anifm: 'animation-fill-mode',\n aniic: 'animation-iteration-count',\n anin: 'animation-name',\n anips: 'animation-play-state',\n anitf: 'animation-timing-function',\n ap: 'appearance',\n ar: 'aspect-ratio',\n as: 'align-self',\n b: 'bottom',\n bd: 'border',\n bda: 'border-radius',\n bdb: 'border-bottom',\n bdbc: 'border-bottom-color',\n bdblc: 'border-block-color',\n bdble: 'border-block-end',\n bdblec: 'border-block-end-color',\n bdbles: 'border-block-end-style',\n bdblew: 'border-block-end-width',\n bdblk: 'border-block',\n bdblr: 'border-bottom-left-radius',\n bdbls: 'border-block-start',\n bdblsc: 'border-block-start-color',\n bdblss: 'border-block-start-style',\n bdblst: 'border-block-style',\n bdblsw: 'border-block-start-width',\n bdblwi: 'border-block-width',\n bdbr: 'box-decoration-break',\n bdbrr: 'border-bottom-right-radius',\n bdbst: 'border-bottom-style',\n bdbw: 'border-bottom-width',\n bdc: 'border-color',\n bdcl: 'border-collapse',\n bdeer: 'border-end-end-radius',\n bdesr: 'border-end-start-radius',\n bdi: 'border-inline',\n bdic: 'border-inline-color',\n bdie: 'border-inline-end',\n bdiec: 'border-inline-end-color',\n bdies: 'border-inline-end-style',\n bdiew: 'border-inline-end-width',\n bdimg: 'border-image',\n bdinw: 'border-inline-width',\n bdio: 'border-image-outset',\n bdir: 'border-image-repeat',\n bdis: 'border-image-slice',\n bdisc: 'border-inline-start-color',\n bdisrc: 'border-image-source',\n bdiss: 'border-inline-start-style',\n bdista: 'border-inline-start',\n bdistl: 'border-inline-style',\n bdisw: 'border-inline-start-width',\n bdiw: 'border-image-width',\n bdl: 'border-left',\n bdlc: 'border-left-color',\n bdls: 'border-left-style',\n bdlw: 'border-left-width',\n bdr: 'border-right',\n bdra: 'border-radius',\n bdrc: 'border-right-color',\n bdrs: 'border-right-style',\n bdrw: 'border-right-width',\n bds: 'border-style',\n bdser: 'border-start-end-radius',\n bdsp: 'border-spacing',\n bdssr: 'border-start-start-radius',\n bdt: 'border-top',\n bdtc: 'border-top-color',\n bdtlr: 'border-top-left-radius',\n bdtrr: 'border-top-right-radius',\n bdts: 'border-top-style',\n bdtw: 'border-top-width',\n bdw: 'border-width',\n bg: 'background',\n bga: 'background-attachment',\n bgbm: 'background-blend-mode',\n bgc: 'background-color',\n bgcl: 'background-clip',\n bgi: 'background-image',\n bgo: 'background-origin',\n bgp: 'background-position',\n bgpx: 'background-position-x',\n bgpy: 'background-position-y',\n bgr: 'background-repeat',\n bgs: 'background-size',\n bkdf: 'backdrop-filter',\n bkfv: 'backface-visibility',\n blks: 'block-size',\n brka: 'break-after',\n brkb: 'break-before',\n brki: 'break-inside',\n bxsh: 'box-shadow',\n bxshd: 'box-shadow',\n bxsz: 'box-sizing',\n c: 'color',\n caps: 'caption-side',\n cip: 'color-interpolation',\n ciw: 'contain-intrinsic-width',\n clpp: 'clip-path',\n clr: 'clear',\n cnt: 'contain',\n cntibs: 'contain-intrinsic-block-size',\n cntih: 'contain-intrinsic-height',\n cntiis: 'contain-intrinsic-inline-size',\n cntis: 'contain-intrinsic-size',\n cntri: 'counter-increment',\n cntrr: 'counter-reset',\n cntrs: 'counter-set',\n col: 'columns',\n colc: 'column-count',\n colf: 'column-fill',\n colg: 'column-gap',\n colr: 'column-rule',\n colrc: 'column-rule-color',\n colrs: 'column-rule-style',\n colrw: 'column-rule-width',\n cols: 'column-span',\n colw: 'column-width',\n cr: 'cursor',\n crtc: 'caret-color',\n csch: 'color-scheme',\n ctr: 'container',\n ctrn: 'container-name',\n ctrt: 'container-type',\n ctt: 'content',\n d: 'display',\n dir: 'direction',\n empc: 'empty-cells',\n fca: 'forced-color-adjust',\n ff: 'font-family',\n fl: 'float',\n flt: 'filter',\n fn: 'font',\n fnf: 'font-family',\n fnfs: 'font-feature-settings',\n fnk: 'font-kerning',\n fnlo: 'font-language-override',\n fnos: 'font-optical-sizing',\n fnp: 'font-palette',\n fns: 'font-size',\n fnsa: 'font-size-adjust',\n fnsp: 'font-synthesis-position',\n fnss: 'font-synthesis-style',\n fnssc: 'font-synthesis-small-caps',\n fnstr: 'font-stretch',\n fnsty: 'font-style',\n fnsw: 'font-synthesis-weight',\n fnsyn: 'font-synthesis',\n fnv: 'font-variant',\n fnva: 'font-variant-alternates',\n fnvc: 'font-variant-caps',\n fnve: 'font-variant-emoji',\n fnvea: 'font-variant-east-asian',\n fnvl: 'font-variant-ligatures',\n fnvn: 'font-variant-numeric',\n fnvp: 'font-variant-position',\n fnvs: 'font-variation-settings',\n fnw: 'font-weight',\n fw: 'font-weight',\n fx: 'flex',\n fxb: 'flex-basis',\n fxd: 'flex-direction',\n fxf: 'flex-flow',\n fxg: 'flex-grow',\n fxs: 'flex-shrink',\n fxw: 'flex-wrap',\n g: 'grid',\n ga: 'grid-area',\n gac: 'grid-auto-columns',\n gaf: 'grid-auto-flow',\n gap: 'gap',\n gar: 'grid-auto-rows',\n gc: 'grid-column',\n gce: 'grid-column-end',\n gcs: 'grid-column-start',\n gr: 'grid-row',\n gre: 'grid-row-end',\n grs: 'grid-row-start',\n gt: 'grid-template',\n gta: 'grid-template-areas',\n gtc: 'grid-template-columns',\n gtr: 'grid-template-rows',\n h: 'height',\n hc: 'hyphenate-character',\n hlc: 'hyphenate-limit-chars',\n hp: 'hanging-punctuation',\n hyp: 'hyphens',\n i: 'inset',\n ibe: 'inset-block-end',\n iblk: 'inset-block',\n ibsta: 'inset-block-start',\n ii: 'inset-inline',\n iie: 'inset-inline-end',\n iis: 'inset-inline-start',\n imgo: 'image-orientation',\n imgr: 'image-rendering',\n ins: 'inline-size',\n is: 'isolation',\n jc: 'justify-content',\n ji: 'justify-items',\n js: 'justify-self',\n l: 'left',\n lbrk: 'line-break',\n lh: 'line-height',\n lisp: 'list-style-position',\n ls: 'list-style',\n lsi: 'list-style-image',\n lst: 'list-style-type',\n lts: 'letter-spacing',\n m: 'margin',\n mb: 'margin-bottom',\n mbd: 'mix-blend-mode',\n mbe: 'margin-block-end',\n mblk: 'margin-block',\n mbs: 'max-block-size',\n mbsta: 'margin-block-start',\n mh: 'max-height',\n mibs: 'min-block-size',\n mie: 'margin-inline-end',\n mih: 'min-height',\n min: 'margin-inline',\n mis: 'max-inline-size',\n mista: 'margin-inline-start',\n misz: 'min-inline-size',\n miw: 'min-width',\n ml: 'margin-left',\n mr: 'margin-right',\n msk: 'mask',\n mskb: 'mask-border',\n mskbm: 'mask-border-mode',\n mskbo: 'mask-border-outset',\n mskbr: 'mask-border-repeat',\n mskbs: 'mask-border-slice',\n mskbsrc: 'mask-border-source',\n mskbw: 'mask-border-width',\n mskc: 'mask-clip',\n mskcp: 'mask-composite',\n mski: 'mask-image',\n mskm: 'mask-mode',\n msko: 'mask-origin',\n mskp: 'mask-position',\n mskr: 'mask-repeat',\n msks: 'mask-size',\n mskt: 'mask-type',\n mt: 'margin-top',\n mtd: 'math-depth',\n mts: 'math-style',\n mw: 'max-width',\n mxw: 'max-width',\n of: 'object-fit',\n ofa: 'offset-anchor',\n ofd: 'offset-distance',\n ofl: 'overflow',\n ofla: 'overflow-anchor',\n oflb: 'overflow-block',\n oflcm: 'overflow-clip-margin',\n ofli: 'overflow-inline',\n oflw: 'overflow-wrap',\n oflx: 'overflow-x',\n ofly: 'overflow-y',\n ofp: 'offset-path',\n ofpo: 'offset-position',\n ofr: 'offset-rotate',\n ofs: 'offset',\n olc: 'outline-color',\n oli: 'outline',\n olo: 'outline-offset',\n ols: 'outline-style',\n olw: 'outline-width',\n op: 'object-position',\n opc: 'opacity',\n ord: 'order',\n orp: 'orphans',\n orsby: 'overscroll-behavior-y',\n osrbb: 'overscroll-behavior-block',\n osrbh: 'overscroll-behavior',\n osrbi: 'overscroll-behavior-inline',\n osrbx: 'overscroll-behavior-x',\n p: 'padding',\n pb: 'padding-bottom',\n pbe: 'padding-block-end',\n pblk: 'padding-block',\n pbs: 'padding-block-start',\n pe: 'pointer-events',\n pg: 'page',\n pgba: 'page-break-after',\n pgbb: 'page-break-before',\n pgbi: 'page-break-inside',\n pi: 'padding-inline',\n pie: 'padding-inline-end',\n pis: 'padding-inline-start',\n pl: 'padding-left',\n plc: 'place-content',\n pli: 'place-items',\n pls: 'place-self',\n pos: 'position',\n pr: 'padding-right',\n prca: 'print-color-adjust',\n pso: 'perspective-origin',\n psp: 'perspective',\n pt: 'padding-top',\n pto: 'paint-order',\n qts: 'quotes',\n r: 'right',\n rbp: 'ruby-position',\n rgap: 'row-gap',\n rot: 'rotate',\n rsz: 'resize',\n s: 'scale',\n sbc: 'scrollbar-color',\n sbg: 'scrollbar-gutter',\n sbw: 'scrollbar-width',\n scrb: 'scroll-behavior',\n scrm: 'scroll-margin',\n scrmb: 'scroll-margin-bottom',\n scrmbe: 'scroll-margin-block-end',\n scrmblk: 'scroll-margin-block',\n scrmbs: 'scroll-margin-block-start',\n scrmi: 'scroll-margin-inline',\n scrmie: 'scroll-margin-inline-end',\n scrmis: 'scroll-margin-inline-start',\n scrml: 'scroll-margin-left',\n scrmr: 'scroll-margin-right',\n scrmt: 'scroll-margin-top',\n scrp: 'scroll-padding',\n scrpb: 'scroll-padding-bottom',\n scrpblk: 'scroll-padding-block',\n scrpbs: 'scroll-padding-block-start',\n scrpi: 'scroll-padding-inline',\n scrpie: 'scroll-padding-inline-end',\n scrpis: 'scroll-padding-inline-start',\n scrpl: 'scroll-padding-left',\n scrpr: 'scroll-padding-right',\n scrpt: 'scroll-padding-top',\n scrsa: 'scroll-snap-align',\n scrss: 'scroll-snap-stop',\n scrst: 'scroll-snap-type',\n shit: 'shape-image-threshold',\n shm: 'shape-margin',\n sho: 'shape-outside',\n srcpbe: 'scroll-padding-block-end',\n t: 'top',\n ta: 'text-align',\n tal: 'text-align-last',\n tbl: 'table-layout',\n tbs: 'tab-size',\n tcu: 'text-combine-upright',\n td: 'text-decoration',\n tdc: 'text-decoration-color',\n tdl: 'text-decoration-line',\n tds: 'text-decoration-style',\n tdsi: 'text-decoration-skip-ink',\n tdt: 'text-decoration-thickness',\n tec: 'text-emphasis-color',\n tep: 'text-emphasis-position',\n teph: 'text-emphasis',\n tes: 'text-emphasis-style',\n ti: 'text-indent',\n tj: 'text-justify',\n toa: 'touch-action',\n tol: 'text-overflow',\n tor: 'text-orientation',\n tra: 'transform',\n trab: 'transform-box',\n tran: 'transition',\n tranb: 'transition-behavior',\n trand: 'transition-delay',\n trandur: 'transition-duration',\n tranp: 'transition-property',\n trantf: 'transition-timing-function',\n trao: 'transform-origin',\n tras: 'transform-style',\n trd: 'text-rendering',\n trl: 'translate',\n tsh: 'text-shadow',\n ttr: 'text-transform',\n tuo: 'text-underline-offset',\n tup: 'text-underline-position',\n tw: 'text-wrap',\n unib: 'unicode-bidi',\n us: 'user-select',\n v: 'visibility',\n va: 'vertical-align',\n w: 'width',\n wc: 'will-change',\n wd: 'widows',\n wlc: '-webkit-line-clamp',\n wrb: 'word-break',\n wrs: 'word-spacing',\n wrtm: 'writing-mode',\n ws: 'white-space',\n wsc: 'white-space-collapse',\n wtfc: '-webkit-text-fill-color',\n wts: '-webkit-text-stroke',\n wtsc: '-webkit-text-stroke-color',\n wtsw: '-webkit-text-stroke-width',\n z: 'z-index',\n zo: 'zoom',\n};\n\n// 1. Common Values (Global)\nexport const COMMON_VALUES: Record<string, string> = {\n // Constants\n in: 'inherit',\n ini: 'initial',\n un: 'unset',\n rv: 'revert',\n n: 'none',\n a: 'auto',\n\n // Align / Directions (Shared across text-align, float, clear, position, etc.)\n t: 'top',\n b: 'bottom',\n l: 'left',\n r: 'right',\n c: 'center',\n m: 'middle',\n j: 'justify',\n s: 'start',\n e: 'end',\n tr: 'transparent',\n cc: 'currentColor',\n\n // Sizes\n minc: 'min-content',\n maxc: 'max-content',\n fitc: 'fit-content',\n\n // Styles\n sol: 'solid',\n das: 'dashed',\n dot: 'dotted',\n dub: 'double',\n\n // Visibility\n vis: 'visible',\n h: 'hidden',\n col: 'collapse',\n};\n\n// 2. Property Specific Values\nexport const SPECIFIC_VALUES: Record<string, Record<string, string>> = {\n // align-content\n 'ac': {\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'n': 'normal',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'sp': 'space-between',\n 'sa': 'space-around',\n 'se': 'space-evenly',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // accent-color\n 'acc': {\n 'u': 'unset',\n },\n\n // align-items\n 'ai': {\n 'n': 'normal',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // animation-composition\n 'anic': {\n 'r': 'replace',\n 'a': 'add',\n 'ac': 'accumulate',\n 'ra': 'replace, add',\n 'aac': 'add, accumulate',\n 'raac': 'replace, add, accumulate',\n },\n\n // animation-direction\n 'anidi': {\n 'r': 'reverse',\n 'a': 'alternate',\n 'ar': 'alternate-reverse',\n 'nr': 'normal, reverse',\n 'arn': 'alternate, reverse, normal',\n },\n\n // animation-fill-mode\n 'anifm': {\n 'f': 'forwards',\n 'b': 'backwards',\n 'nb': 'none, backwards',\n 'fbn': 'both, forwards, none',\n },\n\n // animation-name\n 'anin': {\n 's': 'slide',\n },\n\n // animation-play-state\n 'anips': {\n 'p': 'paused',\n 'r': 'running',\n },\n\n // animation-timing-function\n 'anitf': {\n 'ei': 'ease-in',\n 'eo': 'ease-out',\n 'eio': 'ease-in-out',\n 'l': 'linear',\n 'ss': 'step-start',\n 'se': 'step-end',\n },\n\n // appearance\n 'ap': {\n 'mb': 'menulist-button',\n 'tf': 'textfield',\n 'b': 'button',\n 'c': 'checkbox',\n },\n\n // aspect-ratio\n 'ar': {\n 's': '1 / 1',\n 'v': '16 / 9',\n },\n\n // align-self\n 'as': {\n 'n': 'normal',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // border\n 'bd': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-end-style\n 'bdbles': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-start-style\n 'bdblss': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-style\n 'bdblst': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // box-decoration-break\n 'bdbr': {\n 'c': 'clone',\n 's': 'slice',\n },\n\n // border-bottom-style\n 'bdbst': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-bottom-width\n 'bdbw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-collapse\n 'bdcl': {\n 's': 'separate',\n 'c': 'collapse',\n },\n\n // border-image-repeat\n 'bdir': {\n 'st': 'stretch',\n 'r': 'repeat',\n 'rn': 'round',\n 's': 'space',\n },\n\n // border-left-width\n 'bdlw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-right-style\n 'bdrs': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-right-width\n 'bdrw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-style\n 'bds': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-top-style\n 'bdts': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-top-width\n 'bdtw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-width\n 'bdw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // background-attachment\n 'bga': {\n 's': 'scroll',\n 'f': 'fixed',\n 'l': 'local',\n },\n\n // background-blend-mode\n 'bgbm': {\n 'n': 'normal',\n 'm': 'multiply',\n 's': 'screen',\n 'o': 'overlay',\n 'd': 'darken',\n 'l': 'lighten',\n 'cd': 'color-dodge',\n 'i': 'color-burn',\n 'hl': 'hard-light',\n 'sl': 'soft-light',\n 'di': 'difference',\n 'e': 'exclusion',\n 'h': 'hue',\n 'sa': 'saturation',\n 'c': 'color',\n 'lu': 'luminosity',\n },\n\n // background-color\n 'bgc': {\n 't': 'transparent',\n 'c': 'currentcolor',\n },\n\n // background-clip\n 'bgcl': {\n 'bb': 'border-box',\n 'pb': 'padding-box',\n 'cb': 'content-box',\n 't': 'text',\n },\n\n // background-origin\n 'bgo': {\n 'bb': 'border-box',\n 'pb': 'padding-box',\n 'cb': 'content-box',\n },\n\n // background-position\n 'bgp': {\n 't': 'top',\n 'b': 'bottom',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'lt': 'left top',\n 'ct': 'center top',\n 'rt': 'right top',\n 'lc': 'left center',\n 'cc': 'center center',\n 'rc': 'right center',\n 'lb': 'left bottom',\n 'cb': 'center bottom',\n 'rb': 'right bottom',\n },\n\n // background-position-x\n 'bgpx': {\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n },\n\n // background-position-y\n 'bgpy': {\n 't': 'top',\n 'b': 'bottom',\n 'c': 'center',\n },\n\n // background-repeat\n 'bgr': {\n 'r': 'repeat',\n 'x': 'repeat-x',\n 'y': 'repeat-y',\n 's': 'space',\n 'rn': 'round',\n 'n': 'no-repeat',\n 'rs': 'repeat space',\n 'rr': 'repeat repeat',\n 'nr': 'no-repeat round',\n },\n\n // background-size\n 'bgs': {\n 'c': 'contain',\n },\n\n // color\n 'c': {\n 'i': 'inherit',\n 't': 'transparent',\n },\n\n // cursor\n 'cr': {\n 'p': 'pointer',\n 'd': 'default',\n 'cm': 'context-menu',\n 'h': 'help',\n 'pg': 'progress',\n 'w': 'wait',\n 'c': 'cell',\n 't': 'text',\n 'vt': 'vertical-text',\n 'al': 'alias',\n 'cp': 'copy',\n 'mo': 'move',\n 'nd': 'no-drop',\n 'na': 'not-allowed',\n 'gr': 'grab',\n 'gb': 'grabbing',\n 'as': 'all-scroll',\n 'colr': 'col-resize',\n 'rr': 'row-resize',\n 'nr': 'n-resize',\n 'er': 'e-resize',\n 'sr': 's-resize',\n 'wr': 'w-resize',\n 'ner': 'ne-resize',\n 'ser': 'se-resize',\n 'swr': 'sw-resize',\n 'ewr': 'ew-resize',\n 'nsr': 'ns-resize',\n 'nesw': 'nesw-resize',\n 'nwse': 'nwse-resize',\n 'zi': 'zoom-in',\n 'zo': 'zoom-out',\n },\n\n // display\n 'd': {\n 'b': 'block',\n 'ib': 'inline-block',\n 'i': 'inline',\n 'f': 'flex',\n 'if': 'inline-flex',\n 't': 'table',\n 'it': 'inline-table',\n 'tcp': 'table-caption',\n 'tcell': 'table-cell',\n 'tcol': 'table-column',\n 'tcolg': 'table-column-group',\n 'tfg': 'table-footer-group',\n 'thg': 'table-header-group',\n 'trg': 'table-row-group',\n 'tr': 'table-row',\n 'fr': 'flow-root',\n 'g': 'grid',\n 'ig': 'inline-grid',\n 'c': 'contents',\n 'li': 'list-item',\n },\n\n // font-family\n 'ff': {\n 'a': 'ui-sans-serif, system-ui, sans-serif, \\'Apple Color Emoji\\', \\'Segoe UI Emoji\\', \\'Segoe UI Symbol\\', \\'Noto Color Emoji\\'',\n 's': 'ui-serif, Georgia, Cambria, \\'Times New Roman\\', Times, serif',\n 'm': 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\'Liberation Mono\\', \\'Courier New\\', monospace',\n },\n\n // float\n 'fl': {\n 'is': 'inline-start',\n 'ie': 'inline-end',\n 'r': 'right',\n 'l': 'left',\n },\n\n // flex\n 'fx': {\n 'i': '0 1 auto',\n 'a': '1 1 auto',\n },\n\n // flex-direction\n 'fxd': {\n 'r': 'row',\n 'rr': 'row-reverse',\n 'c': 'column',\n 'cr': 'column-reverse',\n },\n\n // flex-wrap\n 'fxw': {\n 'w': 'wrap',\n 'wr': 'wrap-reverse',\n 'n': 'nowrap',\n },\n\n // grid-auto-columns\n 'gac': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'mm': 'minmax(0, 1fr)',\n },\n\n // grid-auto-flow\n 'gaf': {\n 'r': 'row',\n 'c': 'column',\n 'd': 'dense',\n 'rd': 'row dense',\n 'cd': 'column dense',\n },\n\n // grid-auto-rows\n 'gar': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'mm': 'minmax(0, 1fr)',\n },\n\n // grid-column\n 'gc': {\n 'f': '1 / -1',\n },\n\n // grid-row\n 'gr': {\n 'f': '1 / -1',\n },\n\n // grid-template-columns\n 'gtc': {\n 's': 'subgrid',\n },\n\n // grid-template-rows\n 'gtr': {\n 's': 'subgrid',\n },\n\n // height\n 'h': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // hyphens\n 'hyp': {\n 'm': 'manual',\n },\n\n // isolation\n 'is': {\n 'i': 'isolate',\n },\n\n // justify-content\n 'jc': {\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'l': 'left',\n 'r': 'right',\n 'n': 'normal',\n 'sp': 'space-between',\n 'sa': 'space-around',\n 'se': 'space-evenly',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // justify-items\n 'ji': {\n 'n': 'normal',\n 'st': 'stretch',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'l': 'left',\n 'r': 'right',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'lr': 'legacy right',\n 'll': 'legacy left',\n 'lc': 'legacy center',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // justify-self\n 'js': {\n 'n': 'normal',\n 'st': 'stretch',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'l': 'left',\n 'r': 'right',\n 'b': 'baseline',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // list-style-position\n 'lisp': {\n 'i': 'inside',\n 'o': 'outside',\n },\n\n // list-style\n 'ls': {\n 'i': 'inside',\n 'di': 'disc',\n 'c': 'circle',\n 's': 'square',\n 'de': 'decimal',\n 'g': 'georgian',\n 'tci': 'trad-chinese-informal',\n 'k': 'kannada',\n },\n\n // list-style-type\n 'lst': {\n 'di': 'disc',\n 'c': 'circle',\n 's': 'square',\n 'de': 'decimal',\n 'g': 'georgian',\n 'tci': 'trad-chinese-informal',\n 'k': 'kannada',\n },\n\n // letter-spacing\n 'lts': {\n 'n': 'normal',\n },\n\n // mix-blend-mode\n 'mbd': {\n 'n': 'normal',\n 'm': 'multiply',\n 's': 'screen',\n 'o': 'overlay',\n 'd': 'darken',\n 'l': 'lighten',\n 'cd': 'color-dodge',\n 'i': 'color-burn',\n 'hl': 'hard-light',\n 'sl': 'soft-light',\n 'di': 'difference',\n 'e': 'exclusion',\n 'h': 'hue',\n 'sa': 'saturation',\n 'c': 'color',\n 'lu': 'luminosity',\n },\n\n // min-height\n 'mih': {\n 'f': '100%',\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // min-width\n 'miw': {\n 'f': '100%',\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // object-fit\n 'of': {\n 'c': 'contain',\n 'cv': 'cover',\n 'f': 'fill',\n 'sd': 'scale-down',\n },\n\n // overflow-wrap\n 'oflw': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // overflow-x\n 'oflx': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // overflow-y\n 'ofly': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // outline-color\n 'olc': {\n 'i': 'inherit',\n 'c': 'currentColor',\n 't': 'transparent',\n },\n\n // outline-style\n 'ols': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // outline-width\n 'olw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // object-position\n 'op': {\n 'b': 'bottom',\n 'c': 'center',\n 'l': 'left',\n 'r': 'right',\n 't': 'top',\n 'lb': 'left bottom',\n 'lt': 'left top',\n 'rb': 'right bottom',\n 'rt': 'right top',\n },\n\n // overscroll-behavior-y\n 'orsby': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-block\n 'osrbb': {\n 'c': 'contain',\n },\n\n // overscroll-behavior\n 'osrbh': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-inline\n 'osrbi': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-x\n 'osrbx': {\n 'c': 'contain',\n },\n\n // padding-inline\n 'pi': {\n 's': 'start',\n 'c': 'center',\n 'e': 'end',\n 'b': 'baseline',\n 'st': 'stretch',\n },\n\n // position\n 'pos': {\n 's': 'static',\n 'f': 'fixed',\n 'a': 'absolute',\n 'r': 'relative',\n 'st': 'sticky',\n },\n\n // resize\n 'rsz': {\n 'b': 'both',\n 'h': 'horizontal',\n 'v': 'vertical',\n },\n\n // text-align\n 'ta': {\n 's': 'start',\n 'e': 'end',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'j': 'justify',\n 'mp': 'match-parent',\n 'mc': '-moz-center',\n 'wc': '-webkit-center',\n },\n\n // text-align-last\n 'tal': {\n 's': 'start',\n 'e': 'end',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'j': 'justify',\n },\n\n // text-decoration\n 'td': {\n 'u': 'underline',\n },\n\n // text-decoration-line\n 'tdl': {\n 'u': 'underline',\n 'o': 'overline',\n 'lt': 'line-through',\n 'b': 'blink',\n },\n\n // text-decoration-style\n 'tds': {\n 'db': 'double',\n 'dt': 'dotted',\n 'ds': 'dashed',\n 'w': 'wavy',\n },\n\n // text-decoration-thickness\n 'tdt': {\n 'ff': 'from-font',\n },\n\n // text-emphasis-position\n 'tep': {\n 'or': 'over right',\n 'ol': 'over left',\n 'ur': 'under right',\n 'ul': 'under left',\n 'lo': 'left over',\n 'ru': 'right under',\n 'lu': 'left under',\n },\n\n // text-justify\n 'tj': {\n 'iw': 'inter-word',\n 'ic': 'inter-character',\n 'd': 'distribute',\n },\n\n // touch-action\n 'toa': {\n 'p': 'pan-x',\n 'py': 'pan-y',\n 'pm': 'pan-x pan-y',\n 'pi': 'pinch-zoom',\n },\n\n // text-overflow\n 'tol': {\n 'c': 'clip',\n 'e': 'ellipsis',\n },\n\n // text-orientation\n 'tor': {\n 'm': 'mixed',\n 'u': 'upright',\n 'sr': 'sideways-right',\n 'sl': 'sideways-left',\n 's': 'sideways',\n 'ugo': 'use-glyph-orientation',\n },\n\n // text-rendering\n 'trd': {\n 'op': 'optimizeSpeed',\n 'ol': 'optimizeLegibility',\n 'g': 'geometricPrecision',\n },\n\n // text-transform\n 'ttr': {\n 'c': 'capitalize',\n 'u': 'uppercase',\n 'l': 'lowercase',\n 'fw': 'full-width',\n 'fsk': 'full-size-kana',\n },\n\n // text-underline-position\n 'tup': {\n 'u': 'under',\n 'l': 'left',\n 'r': 'right',\n 'ul': 'under left',\n 'ru': 'right under',\n },\n\n // text-wrap\n 'tw': {\n 'w': 'wrap',\n 'n': 'nowrap',\n 'b': 'balance',\n 'p': 'pretty',\n },\n\n // user-select\n 'us': {\n 't': 'text',\n 'all': 'all',\n 'c': 'contain',\n },\n\n // visibility\n 'v': {\n 'c': 'collapse',\n },\n\n // vertical-align\n 'va': {\n 'bl': 'baseline',\n 't': 'top',\n 'm': 'middle',\n 'b': 'bottom',\n 'tt': 'text-top',\n 'tb': 'text-bottom',\n 'sb': 'sub',\n 'sp': 'super',\n },\n\n // width\n 'w': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n 'f': '100%',\n },\n\n // will-change\n 'wc': {\n 'sp': 'scroll-position',\n 'c': 'contents',\n 't': 'transform',\n },\n\n // -webkit-text-stroke-width\n 'wtsw': {\n 'm': 'medium',\n 't': 'thick',\n },\n\n};\n\n// Helper to merge extended alignment values\nSPECIFIC_VALUES.ji = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.js = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.pc = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.pi = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.ps = SPECIFIC_VALUES.jc;\n","import { mitt } from './events'\nimport { parseClassName } from './parser'\nimport {\n SHORT_PROPERTIES as BUILTIN_SHORT_PROPERTIES,\n COMMON_VALUES as BUILTIN_COMMON_VALUES,\n SPECIFIC_VALUES as BUILTIN_SPECIFIC_VALUES,\n} from './dictionary'\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 sizeLast?: number\n loadOnInit?: boolean\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 sizeLast: number\n loadOnInit: boolean\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\ntype XCSSKeySyncPayload = {\n source: string\n sizeLast: number\n entries: [string, string][]\n}\n\ntype XCSSKeyRegistry = {\n sizeLast: number\n entries: [string, string][]\n}\n\ntype NodeBuiltinProcess = typeof process & {\n getBuiltinModule?: (id: string) => unknown\n}\n\nconst BUILTIN_DICTIONARY: XCSSDictionaryData = {\n SHORT_PROPERTIES: BUILTIN_SHORT_PROPERTIES,\n COMMON_VALUES: BUILTIN_COMMON_VALUES,\n SPECIFIC_VALUES: BUILTIN_SPECIFIC_VALUES,\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 const sizeLast =\n typeof config?.sizeLast === 'number' && Number.isFinite(config.sizeLast) && config.sizeLast >= 0\n ? Math.floor(config.sizeLast)\n : 1000\n const loadOnInit = config?.loadOnInit ?? false\n\n return { styleId, version, compression, debounceMs, sizeLast, loadOnInit }\n}\n\nconst createCacheKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_cache_${cache.version}`\n// Key sync nhẹ cho cross-tab: delta sync cho key/value mới phát sinh.\nconst createKeySyncKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_ks_${cache.version}`\nconst createKeySyncChannelName = (cache: XCSSCacheConfig): string => `${cache.styleId}_bc_${cache.version}`\nconst createKeyRegistryKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_kr_${cache.version}`\nconst createKeyRegistryLockName = (cache: XCSSCacheConfig): string => `${cache.styleId}_kr_lock_${cache.version}`\n\nconst readKeyRegistry = (storage: Storage | null, key: string): XCSSKeyRegistry => {\n if (!storage) return { sizeLast: 0, entries: [] }\n\n try {\n const raw = storage.getItem(key)\n if (!raw) return { sizeLast: 0, entries: [] }\n\n const parsed = JSON.parse(raw) as {\n sizeLast?: unknown\n entries?: unknown\n s?: unknown\n e?: unknown\n }\n\n const sizeSource = typeof parsed.sizeLast === 'number'\n ? parsed.sizeLast\n : typeof parsed.s === 'number'\n ? parsed.s\n : 0\n\n const entriesSource = Array.isArray(parsed.entries)\n ? parsed.entries\n : Array.isArray(parsed.e)\n ? parsed.e\n : []\n\n const entries = entriesSource.filter((entry): entry is [string, string] => {\n return (\n Array.isArray(entry) &&\n entry.length === 2 &&\n typeof entry[0] === 'string' &&\n typeof entry[1] === 'string'\n )\n })\n\n return {\n sizeLast: Number.isFinite(sizeSource) && sizeSource >= 0 ? Math.floor(sizeSource) : 0,\n entries,\n }\n } catch (_error) {\n return { sizeLast: 0, entries: [] }\n }\n}\n\nconst writeKeyRegistry = (storage: Storage | null, key: string, registry: XCSSKeyRegistry): void => {\n if (!storage) return\n\n try {\n storage.setItem(\n key,\n JSON.stringify({\n s: registry.sizeLast,\n e: registry.entries,\n }),\n )\n } catch (_error) {\n // Bỏ qua lỗi ghi localStorage (quota, private mode, ...)\n }\n}\n\nconst canUseWritableLocalStorage = (): boolean => {\n if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') return false\n\n try {\n const key = '__xcss_cache_probe__'\n window.localStorage.setItem(key, '1')\n window.localStorage.removeItem(key)\n return true\n } catch (_error) {\n return false\n }\n}\n\n// Kiểm tra Web Locks API có khả dụng không\nconst canUseWebLocks = (): boolean =>\n typeof navigator !== 'undefined' &&\n typeof navigator.locks !== 'undefined' &&\n typeof navigator.locks.request === 'function'\n\nconst canUseCacheRuntime = (): boolean => canUseWritableLocalStorage()\n\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 normalizeKeySyncPayload = (value: unknown): XCSSKeySyncPayload | null => {\n if (!value || typeof value !== 'object') return null\n\n const obj = value as Partial<XCSSKeySyncPayload> & {\n s?: unknown\n k?: unknown\n }\n\n const entriesSource = Array.isArray(obj.entries)\n ? obj.entries\n : Array.isArray(obj.k)\n ? obj.k\n : null\n\n if (!entriesSource) return null\n\n const entries = entriesSource.filter((entry): entry is [string, string] => {\n return (\n Array.isArray(entry) &&\n entry.length === 2 &&\n typeof entry[0] === 'string' &&\n typeof entry[1] === 'string'\n )\n })\n\n const sizeLast = typeof obj.sizeLast === 'number'\n ? obj.sizeLast\n : typeof obj.s === 'number'\n ? obj.s\n : null\n\n if (sizeLast === null) return null\n\n return {\n source: typeof obj.source === 'string' ? obj.source : '',\n sizeLast,\n entries,\n }\n}\n\nconst skipWhitespace = (source: string, start: number): number => {\n let index = start\n while (index < source.length && /\\s/.test(source[index])) {\n index++\n }\n return index\n}\n\nconst findMatchingBrace = (source: string, start: number): number => {\n let depth = 0\n let quote: '\"' | \"'\" | '`' | null = null\n let escaped = false\n let lineComment = false\n let blockComment = false\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n\n if (lineComment) {\n if (char === '\\n') {\n lineComment = false\n }\n continue\n }\n\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n\n if (quote) {\n if (escaped) {\n escaped = false\n continue\n }\n if (char === '\\\\') {\n escaped = true\n continue\n }\n if (char === quote) {\n quote = null\n }\n continue\n }\n\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n\n if (char === '{') {\n depth++\n continue\n }\n\n if (char === '}') {\n depth--\n if (depth === 0) {\n return index\n }\n }\n }\n\n return -1\n}\n\nconst extractExportedObjectLiteral = (source: string, marker: string): string | null => {\n const index = source.indexOf(marker)\n if (index === -1) return null\n\n const objectStart = skipWhitespace(source, index + marker.length)\n if (source[objectStart] !== '{') return null\n\n const objectEnd = findMatchingBrace(source, objectStart)\n if (objectEnd === -1) return null\n\n return source.slice(objectStart, objectEnd + 1)\n}\n\nconst skipWhitespaceAndComments = (source: string, start: number): number => {\n let index = start\n\n while (index < source.length) {\n const char = source[index]\n const next = source[index + 1]\n\n if (/\\s/.test(char)) {\n index++\n continue\n }\n\n if (char === '/' && next === '/') {\n index += 2\n while (index < source.length && source[index] !== '\\n') {\n index++\n }\n continue\n }\n\n if (char === '/' && next === '*') {\n index += 2\n while (index < source.length) {\n if (source[index] === '*' && source[index + 1] === '/') {\n index += 2\n break\n }\n index++\n }\n continue\n }\n\n break\n }\n\n return index\n}\n\nconst parseQuotedString = (\n source: string,\n start: number,\n): { value: string, end: number } | null => {\n const quote = source[start]\n if (quote !== '\"' && quote !== \"'\") return null\n\n let value = ''\n let index = start + 1\n\n while (index < source.length) {\n const char = source[index]\n\n if (char === '\\\\') {\n index++\n if (index >= source.length) return null\n\n const escaped = source[index]\n const escapeMap: Record<string, string> = {\n n: '\\n',\n r: '\\r',\n t: '\\t',\n b: '\\b',\n f: '\\f',\n v: '\\v',\n '\\\\': '\\\\',\n '\"': '\"',\n \"'\": \"'\",\n }\n\n value += escapeMap[escaped] ?? escaped\n index++\n continue\n }\n\n if (char === quote) {\n return { value, end: index + 1 }\n }\n\n value += char\n index++\n }\n\n return null\n}\n\nconst parseIdentifierToken = (\n source: string,\n start: number,\n): { value: string, end: number } | null => {\n const first = source[start]\n if (!first || !/[A-Za-z_$]/.test(first)) {\n return null\n }\n\n let end = start + 1\n while (end < source.length && /[A-Za-z0-9_$]/.test(source[end])) {\n end++\n }\n\n return {\n value: source.slice(start, end),\n end,\n }\n}\n\nconst parsePlainObjectLiteral = (expression: string): Record<string, unknown> | null => {\n const parseValue = (\n source: string,\n start: number,\n ): { value: unknown, end: number } | null => {\n const index = skipWhitespaceAndComments(source, start)\n const char = source[index]\n\n if (char === '{') {\n return parseObject(source, index)\n }\n\n return parseQuotedString(source, index)\n }\n\n const parseObject = (\n source: string,\n start: number,\n ): { value: Record<string, unknown>, end: number } | null => {\n let index = skipWhitespaceAndComments(source, start)\n if (source[index] !== '{') return null\n\n index++\n const objectValue: Record<string, unknown> = {}\n\n while (index < source.length) {\n index = skipWhitespaceAndComments(source, index)\n\n if (source[index] === '}') {\n return {\n value: objectValue,\n end: index + 1,\n }\n }\n\n const keyToken =\n parseQuotedString(source, index) ||\n parseIdentifierToken(source, index)\n if (!keyToken) return null\n\n index = skipWhitespaceAndComments(source, keyToken.end)\n if (source[index] !== ':') {\n return null\n }\n\n index++\n const valueToken = parseValue(source, index)\n if (!valueToken) return null\n\n objectValue[keyToken.value] = valueToken.value\n index = skipWhitespaceAndComments(source, valueToken.end)\n\n if (source[index] === ',') {\n index++\n continue\n }\n\n if (source[index] === '}') {\n return {\n value: objectValue,\n end: index + 1,\n }\n }\n\n return null\n }\n\n return null\n }\n\n const parsed = parseObject(expression, 0)\n if (!parsed) {\n return null\n }\n\n return skipWhitespaceAndComments(expression, parsed.end) === expression.length\n ? parsed.value\n : null\n}\n\nconst parseExternalDictionarySource = (sourceCode: string): XCSSDictionaryData | null => {\n const shortLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const SHORT_PROPERTIES =',\n )\n const commonLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const COMMON_VALUES =',\n )\n const specificLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const SPECIFIC_VALUES =',\n )\n\n if (shortLiteral && commonLiteral && specificLiteral) {\n return resolveDictionaryData({\n SHORT_PROPERTIES: parsePlainObjectLiteral(shortLiteral),\n COMMON_VALUES: parsePlainObjectLiteral(commonLiteral),\n SPECIFIC_VALUES: parsePlainObjectLiteral(specificLiteral),\n })\n }\n\n const defaultLiteral = extractExportedObjectLiteral(sourceCode, 'export default')\n if (!defaultLiteral) return null\n\n return resolveDictionaryData(parsePlainObjectLiteral(defaultLiteral))\n}\n\nconst readDictionarySourceFromNode = async (source: string): Promise<string | null> => {\n const nodeProcess =\n typeof process !== 'undefined'\n ? (process as NodeBuiltinProcess)\n : null\n\n if (!nodeProcess || typeof nodeProcess.getBuiltinModule !== 'function') {\n return null\n }\n\n const isFileUrl = source.startsWith('file:')\n const isPathLike =\n source.startsWith('/') ||\n source.startsWith('./') ||\n source.startsWith('../') ||\n /^[A-Za-z]:[\\\\/]/.test(source)\n\n if (!isFileUrl && !isPathLike) {\n return null\n }\n\n const fs = nodeProcess.getBuiltinModule('node:fs/promises') as {\n readFile?: (path: string | URL, encoding: BufferEncoding) => Promise<string>\n } | null\n\n if (!fs?.readFile) {\n return null\n }\n\n return fs.readFile(isFileUrl ? new URL(source) : source, 'utf8')\n}\n\nconst readExternalDictionarySource = async (source: string): Promise<string> => {\n const nodeSource = await readDictionarySourceFromNode(source)\n if (typeof nodeSource === 'string') {\n return nodeSource\n }\n\n if (typeof fetch === 'function') {\n const response = await fetch(source)\n if (!response.ok) {\n throw new Error(`XCSS: Failed to fetch dictionary module: ${response.status}`)\n }\n return response.text()\n }\n\n throw new Error('XCSS: fetch is not supported in this runtime')\n}\n\nconst loadExternalDictionary = async (source: string): Promise<XCSSDictionaryData> => {\n const sourceCode = await readExternalDictionarySource(source)\n const data = parseExternalDictionarySource(sourceCode)\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 plain-object SHORT_PROPERTIES, COMMON_VALUES and SPECIFIC_VALUES'\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 // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n // Chèn @layer đồng bộ vào textContent TRƯỚC khi gắn vào DOM — tránh CLS\n const layerRule = `@layer ${layers.join(', ')};`\n styleElement.textContent = layerRule\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\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\nconst normalizeBaseCssText = (base?: string | string[] | null): string => {\n if (Array.isArray(base)) return base.join('\\n')\n return base || ''\n}\n\nconst mergeRootCssText = (baseText: string, cachedText: string): string => {\n if (!baseText) return cachedText\n if (!cachedText) return baseText\n if (cachedText === baseText) return baseText\n if (cachedText.startsWith(baseText)) return cachedText\n return `${baseText}\\n${cachedText}`\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 sizeLast: 1000,\n loadOnInit: false,\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 const keySyncKey = createKeySyncKey(cacheConfig)\n const keySyncChannelName = createKeySyncChannelName(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 applyDictionary(BUILTIN_DICTIONARY)\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 const browserWindow = isBrowser ? window : null\n const browserStorage = browserWindow?.localStorage || null\n const cacheSupported = isBrowser && canUseCacheRuntime()\n const cacheEnabled = cacheConfig.loadOnInit && cacheSupported\n const cacheStorage = cacheEnabled ? browserStorage : null\n let docRoot: Document | ShadowRoot | null = null\n const baseCssText = normalizeBaseCssText(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 const CSS_KEY_SOURCES = new Map<string, string>()\n const CSS_VALUES = new Set<string>(); // Set song song để check trùng O(1)\n\n const registerCssKey = (source: string, value: string) => {\n CSS_KEYS.set(source, value)\n CSS_KEY_SOURCES.set(value, source)\n CSS_VALUES.add(value)\n }\n\n const resolveSourceClassName = (value: string): string => CSS_KEY_SOURCES.get(value) || value\n const keyRegistryKey = createKeyRegistryKey(cacheConfig)\n const keyRegistryLockName = createKeyRegistryLockName(cacheConfig)\n let sizeLast = cacheConfig.sizeLast;\n const pendingKeyAssignments = new Set<string>()\n let keyAssignmentScheduled = false\n let keyAssignmentInFlight: Promise<void> | null = null\n\n // Flag: lần render đầu tiên xử lý CSS đồng bộ để giảm CLS\n let isFirstRenderBatch = true;\n const syncSourceId = `xcss_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`\n const pendingKeySyncEntries: [string, string][] = []\n let pendingKeySyncScheduled = false\n let keySyncBroadcastChannel: BroadcastChannel | null = null\n\n const mergeSizeLast = (nextSizeLast?: number) => {\n if (typeof nextSizeLast === 'number' && Number.isFinite(nextSizeLast) && nextSizeLast > sizeLast) {\n sizeLast = nextSizeLast\n }\n }\n\n const mergeKnownKeys = (entries?: [string, string][]) => {\n if (!entries) return\n\n entries.forEach(([source, value]) => {\n const currentValue = CSS_KEYS.get(source)\n if (currentValue === value) return\n if (currentValue) return\n if (CSS_VALUES.has(value) && CSS_KEY_SOURCES.get(value) !== source) return\n registerCssKey(source, value)\n })\n }\n\n if (cacheEnabled) {\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n }\n\n const mergeKeySyncPayload = (payload: XCSSKeySyncPayload | null) => {\n if (!payload) return\n if (payload.source && payload.source === syncSourceId) return\n\n mergeSizeLast(payload.sizeLast)\n\n payload.entries.forEach(([key, value]) => {\n const currentValue = CSS_KEYS.get(key)\n if (currentValue === value) return\n if (currentValue || CSS_VALUES.has(value)) return\n registerCssKey(key, value)\n })\n }\n\n const flushPendingKeySyncEntries = () => {\n pendingKeySyncScheduled = false\n if (!isBrowser || pendingKeySyncEntries.length === 0) return\n\n const payload: XCSSKeySyncPayload = {\n source: syncSourceId,\n sizeLast,\n entries: pendingKeySyncEntries.splice(0, pendingKeySyncEntries.length),\n }\n\n if (keySyncBroadcastChannel) {\n try {\n keySyncBroadcastChannel.postMessage(payload)\n return\n } catch (_error) {\n keySyncBroadcastChannel = null\n }\n }\n\n if (!cacheStorage) return\n\n try {\n cacheStorage.setItem(keySyncKey, JSON.stringify(payload))\n } catch (_error) {\n // ignore key-sync write failure\n }\n }\n\n const scheduleKeySync = (entry: [string, string]) => {\n if (!isBrowser || !cacheEnabled) return\n\n pendingKeySyncEntries.push(entry)\n if (pendingKeySyncScheduled) return\n pendingKeySyncScheduled = true\n queueMicrotask(flushPendingKeySyncEntries)\n }\n\n const allocateLocalKey = (source: string): string => {\n let key: string\n do {\n key = 'D' + (sizeLast++).toString(32).toUpperCase()\n } while (CSS_VALUES.has(key))\n\n registerCssKey(source, key)\n return key\n }\n\n const allocatePersistentKeySync = (source: string): string => {\n const current = CSS_KEYS.get(source)\n if (current) return current\n\n if (!cacheEnabled || !cacheStorage) {\n return allocateLocalKey(source)\n }\n\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n const registryMap = new Map<string, string>(registry.entries)\n const registryValues = new Set<string>(registry.entries.map(([, value]) => value))\n\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n\n const existing = registryMap.get(source)\n if (existing) {\n registerCssKey(source, existing)\n return existing\n }\n\n let nextSizeLast = Math.max(sizeLast, registry.sizeLast, cacheConfig.sizeLast)\n let key: string\n do {\n key = 'D' + (nextSizeLast++).toString(32).toUpperCase()\n } while (registryValues.has(key) || CSS_VALUES.has(key))\n\n registryMap.set(source, key)\n registryValues.add(key)\n registerCssKey(source, key)\n mergeSizeLast(nextSizeLast)\n\n writeKeyRegistry(cacheStorage, keyRegistryKey, {\n sizeLast: nextSizeLast,\n entries: [...registry.entries, [source, key]],\n })\n\n scheduleKeySync([source, key])\n return key\n }\n\n const allocateKeyBatch = async (sources: string[]): Promise<void> => {\n if (!cacheEnabled || !cacheStorage || sources.length === 0) return\n\n const commit = (): [string, string][] => {\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n const registryMap = new Map<string, string>(registry.entries)\n const registryValues = new Set<string>(registry.entries.map(([, value]) => value))\n\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n\n let nextSizeLast = Math.max(sizeLast, registry.sizeLast, cacheConfig.sizeLast)\n const newEntries: [string, string][] = []\n\n sources.forEach((source) => {\n if (CSS_KEYS.has(source)) return\n\n const existing = registryMap.get(source)\n if (existing) {\n registerCssKey(source, existing)\n return\n }\n\n let key: string\n do {\n key = 'D' + (nextSizeLast++).toString(32).toUpperCase()\n } while (registryValues.has(key) || CSS_VALUES.has(key))\n\n registryMap.set(source, key)\n registryValues.add(key)\n newEntries.push([source, key])\n registerCssKey(source, key)\n })\n\n mergeSizeLast(nextSizeLast)\n\n if (newEntries.length === 0) return []\n\n writeKeyRegistry(cacheStorage, keyRegistryKey, {\n sizeLast: nextSizeLast,\n entries: [...registry.entries, ...newEntries],\n })\n\n return newEntries\n }\n\n let assignedEntries: [string, string][] = []\n if (canUseWebLocks()) {\n try {\n await navigator.locks.request(keyRegistryLockName, async () => {\n assignedEntries = commit()\n })\n } catch (_error) {\n assignedEntries = commit()\n }\n } else {\n assignedEntries = commit()\n }\n\n if (assignedEntries.length === 0) return\n\n assignedEntries.forEach((entry) => scheduleKeySync(entry))\n processObservedItems(assignedEntries.map(([source]) => source))\n triggerSave()\n }\n\n const runPendingKeyAssignments = async (): Promise<void> => {\n if (!cacheEnabled || !isBrowser) return\n if (keyAssignmentInFlight) return keyAssignmentInFlight\n\n keyAssignmentInFlight = (async () => {\n while (pendingKeyAssignments.size > 0) {\n const batch = Array.from(pendingKeyAssignments)\n pendingKeyAssignments.clear()\n await allocateKeyBatch(batch)\n }\n })().finally(() => {\n keyAssignmentInFlight = null\n })\n\n return keyAssignmentInFlight\n }\n\n const scheduleKeyAssignment = (source: string) => {\n if (!cacheEnabled || !isBrowser) return\n pendingKeyAssignments.add(source)\n if (keyAssignmentScheduled) return\n keyAssignmentScheduled = true\n queueMicrotask(() => {\n keyAssignmentScheduled = false\n void runPendingKeyAssignments()\n })\n }\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot, cacheConfig.styleId)\n }\n\n if (cacheEnabled && isBrowser && typeof BroadcastChannel !== 'undefined') {\n try {\n keySyncBroadcastChannel = new BroadcastChannel(keySyncChannelName)\n keySyncBroadcastChannel.addEventListener('message', (event: MessageEvent) => {\n mergeKeySyncPayload(normalizeKeySyncPayload(event.data))\n })\n } catch (_error) {\n keySyncBroadcastChannel = null\n }\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 cacheStorage?.setItem(cacheKey, value)\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n\n const removeCacheIfUnchanged = (expectedRaw?: string) => {\n if (!isBrowser || !cacheStorage) return\n\n if (typeof expectedRaw === 'string') {\n const currentRaw = cacheStorage.getItem(cacheKey)\n if (currentRaw !== expectedRaw) return\n }\n\n cacheStorage.removeItem(cacheKey)\n cacheStorage.removeItem(keySyncKey)\n }\n\n const saveCache = (data: XCSSCacheData) => {\n if (!cacheEnabled || !isBrowser || !cacheStorage) 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 || !cacheEnabled) 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 (cacheEnabled && isBrowser && cacheStorage) {\n try {\n const raw = cacheStorage.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 cacheStorage.removeItem(cacheKey)\n }\n } else if (data.configHash !== currentConfigHash) {\n // Config đã thay đổi, xóa cache cũ\n cacheStorage.removeItem(cacheKey)\n } else {\n loadedCacheData = data\n cacheLoaded = true\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 const applySheetText = (mediaKey: string, text: string) => {\n cssStyleSheetsText[mediaKey] = text\n if (isBrowser && cssStyleSheetsDom[mediaKey]) {\n cssStyleSheetsDom[mediaKey].replaceSync(text)\n }\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 cssStyleSheetsText[k] = ''\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n applySheetText('root', baseCssText)\n\n // Xóa bootloader style SAU khi adoptedStyleSheets đã paint xong\n // Dùng double requestAnimationFrame để đảm bảo trình duyệt đã render CSS mới\n const removeBootloaderStyle = () => {\n if (!docRoot) return\n const blStyle = docRoot.querySelector(`style[id=\"${cacheConfig.styleId}\"]`)\n if (blStyle) {\n const scheduleNextPaint =\n typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (callback: (time: number) => void) => setTimeout(() => callback(Date.now()), 0)\n\n scheduleNextPaint(() => {\n scheduleNextPaint(() => {\n blStyle.remove()\n })\n })\n }\n }\n\n const hydrateCacheAfterInit = (data: XCSSCacheData) => {\n if (data.keys) {\n mergeKnownKeys(data.keys)\n }\n mergeSizeLast(data.sizeLast)\n\n const sheetKeys = ['root', ...keysCssStyleSheetsDom]\n sheetKeys.forEach((key) => {\n const currentRules = cssStyleSheetsSet[key] || new Set<string>()\n const cachedRules = data.rulesSet?.[key] || []\n const mergedRules = new Set<string>([...cachedRules, ...Array.from(currentRules)])\n cssStyleSheetsSet[key] = mergedRules\n\n if (key === 'root') {\n const cachedRoot = typeof data.cssText?.root === 'string' ? data.cssText.root : ''\n const txt = mergeRootCssText(baseCssText, cachedRoot)\n applySheetText('root', txt)\n return\n }\n\n const textFromRules = Array.from(mergedRules).join('\\n')\n const fallbackText =\n typeof data.cssText?.[key] === 'string'\n ? unwrapCachedCssText(key, data.cssText[key])\n : ''\n applySheetText(key, textFromRules || fallbackText)\n })\n\n lastKnownCacheData = data\n removeBootloaderStyle()\n }\n\n // Post-Init Hydration: áp dụng dữ liệu cache vào DOM/stylesheet\n if (cacheLoaded && loadedCacheData) {\n hydrateCacheAfterInit(loadedCacheData)\n }\n\n // Gắn tất cả sheets MỘT LẦN DUY NHẤT (batch) để tránh multi-reflow gây CLS\n if (isBrowser && docRoot?.adoptedStyleSheets) {\n const existingSheets = docRoot.adoptedStyleSheets\n const newSheets = ['root', ...keysCssStyleSheetsDom]\n .map(k => cssStyleSheetsDom[k])\n .filter(sheet => sheet && !existingSheets.includes(sheet))\n if (newSheets.length > 0) {\n docRoot.adoptedStyleSheets = [...existingSheets, ...newSheets]\n }\n }\n\n if (!cacheEnabled) {\n removeBootloaderStyle()\n }\n\n // Xử lý bất đồng bộ cho cache stream-compressed\n if (cacheEnabled && isBrowser && cacheStorage && 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 // Đồng bộ key generation từ tab khác: ưu tiên BroadcastChannel, fallback storage.\n if (cacheEnabled && isBrowser && browserWindow?.addEventListener) {\n browserWindow.addEventListener('storage', (e) => {\n if (e.key === keySyncKey && e.newValue) {\n try {\n mergeKeySyncPayload(normalizeKeySyncPayload(JSON.parse(e.newValue)))\n } catch (_e) {}\n }\n })\n }\n\n // Chèn 1 rule vào CSSStyleSheet — O(1), không parse lại toàn bộ.\n // Fallback về replaceSync nếu insertRule thất bại.\n const safeInsertRule = (sheet: CSSStyleSheet, rule: string, cssText: string): void => {\n try {\n sheet.insertRule(rule, sheet.cssRules.length)\n } catch (_e) {\n // insertRule thất bại (rule không hợp lệ, etc.) → fallback replaceSync\n try {\n sheet.replaceSync(cssText)\n } catch (_e2) {\n // Bỏ qua nếu cả hai đều thất bại\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\n layer = Number(layer) || 0\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 cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Cập nhật text store cho cache persistence\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + txtCss\n\n if (!isBrowser) {\n // SSR: chỉ cập nhật text store (đã làm ở trên)\n } else if (cssStyleSheetsDom[media]) {\n // Browser: dùng insertRule O(1) — nhanh hơn replaceSync O(n)\n safeInsertRule(\n cssStyleSheetsDom[media],\n txtCss,\n cssTextStore[media]\n )\n }\n\n triggerSave()\n }\n }\n\n const applyObservedItems = (items: string[]) => {\n items.forEach((cls) => {\n const sourceClassName = resolveSourceClassName(cls)\n let item = classToProp(sourceClassName)\n item && updateRules(sourceClassName, 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 // Chỉ hash class name nếu có thể sinh CSS hợp lệ.\n // Token không hợp lệ (ví dụ \"bs-a\") giữ nguyên.\n if (shouldHashClass(l)) {\n if (cacheEnabled && isBrowser) {\n item = allocatePersistentKeySync(l)\n } else {\n const key = allocateLocalKey(l)\n scheduleKeySync([l, key])\n triggerSave() // LƯU CACHE\n item = key\n }\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 || isFirstRenderBatch) {\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 // Lần đầu: xử lý đồng bộ để CSS apply trước first paint\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n if (isFirstRenderBatch) {\n applyObservedItems(items)\n } else {\n processObservedItems(items)\n }\n })\n // Sau lần quét đầu tiên, chuyển sang async để không block UI\n isFirstRenderBatch = false\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 (!cacheConfig.loadOnInit || 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 loadOnInit?: 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 loadOnInitValue = options?.loadOnInit ?? false\n const styleId = JSON.stringify(styleIdValue)\n const cacheKey = JSON.stringify(cacheKeyValue)\n const loadOnInit = JSON.stringify(loadOnInitValue)\n\n const script = `\n(async function () {\n function canUseCacheRuntime() {\n if (typeof window === 'undefined' || !window.localStorage) return false;\n try {\n var probeKey = '__xcss_cache_probe__';\n localStorage.setItem(probeKey, '1');\n localStorage.removeItem(probeKey);\n return true;\n } catch (_error) {\n return false;\n }\n }\n\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 if (!${loadOnInit}) return;\n if (!canUseCacheRuntime()) 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 { parseClassName } from './parser'\n\nexport type TailwindConversionStatus = 'converted' | 'passthrough' | 'unsupported'\nexport type TailwindTokenClassification = 'tailwind' | 'xcss' | 'ambiguous' | 'unknown'\nexport type TailwindConversionMode = 'legacy' | 'safe' | 'strict'\n\nexport interface TailwindConversionWarning {\n token: string\n message: string\n}\n\nexport interface TailwindTokenConversion {\n input: string\n outputs: string[]\n status: TailwindConversionStatus\n classification: TailwindTokenClassification\n exact: boolean\n warnings: TailwindConversionWarning[]\n}\n\ntype TailwindBaseTokenConversion = Omit<TailwindTokenConversion, 'classification'>\n\nexport interface TailwindConversionResult {\n input: string\n output: string\n details: TailwindTokenConversion[]\n converted: string[]\n passthrough: string[]\n unsupported: string[]\n ambiguous: string[]\n warnings: TailwindConversionWarning[]\n}\n\nexport interface TailwindConversionOptions {\n preserveUnknown?: boolean\n mode?: TailwindConversionMode\n}\n\nconst DEFAULT_OPTIONS: Required<TailwindConversionOptions> = {\n preserveUnknown: true,\n mode: 'legacy',\n}\n\nconst RESPONSIVE_VARIANTS = new Set(['xs', 'sm', 'md', 'lg', 'xl', '2xl'])\n\nconst SELECTOR_VARIANTS: Record<string, string> = {\n hover: ':hover',\n focus: ':focus',\n active: ':active',\n visited: ':visited',\n disabled: ':disabled',\n checked: ':checked',\n 'focus-within': ':focus-within',\n 'focus-visible': ':focus-visible',\n first: ':first-child',\n last: ':last-child',\n odd: ':nth-child(odd)',\n even: ':nth-child(even)',\n before: '::before',\n after: '::after',\n placeholder: '::placeholder',\n selection: '::selection',\n}\n\nconst TAILWIND_ONLY_VARIANTS = new Set([\n ...Object.keys(SELECTOR_VARIANTS),\n 'dark',\n 'group-hover',\n 'group-focus',\n 'group-focus-within',\n 'peer-hover',\n 'peer-focus',\n 'placeholder',\n 'before',\n 'after',\n 'selection',\n])\n\nconst SPACING_SCALE: Record<string, string> = {\n '0': '0',\n px: '1px',\n '0.5': '2px',\n '1': '4px',\n '1.5': '6px',\n '2': '8px',\n '2.5': '10px',\n '3': '12px',\n '3.5': '14px',\n '4': '16px',\n '5': '20px',\n '6': '24px',\n '7': '28px',\n '8': '32px',\n '9': '36px',\n '10': '40px',\n '11': '44px',\n '12': '48px',\n '14': '56px',\n '16': '64px',\n '20': '80px',\n '24': '96px',\n '28': '112px',\n '32': '128px',\n '36': '144px',\n '40': '160px',\n '44': '176px',\n '48': '192px',\n '52': '208px',\n '56': '224px',\n '60': '240px',\n '64': '256px',\n '72': '288px',\n '80': '320px',\n '96': '384px',\n}\n\nconst RADIUS_SCALE: Record<string, string> = {\n none: '0',\n sm: '2px',\n DEFAULT: '4px',\n md: '6px',\n lg: '8px',\n xl: '12px',\n '2xl': '16px',\n '3xl': '24px',\n full: '9999px',\n}\n\nconst FONT_SIZE_SCALE: Record<string, string> = {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n '3xl': '30px',\n '4xl': '36px',\n '5xl': '48px',\n '6xl': '60px',\n '7xl': '72px',\n '8xl': '96px',\n '9xl': '128px',\n}\n\nconst FONT_WEIGHT_SCALE: Record<string, string> = {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n}\n\nconst LINE_HEIGHT_SCALE: Record<string, string> = {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n loose: '2',\n '3': '12px',\n '4': '16px',\n '5': '20px',\n '6': '24px',\n '7': '28px',\n '8': '32px',\n '9': '36px',\n '10': '40px',\n}\n\nconst LETTER_SPACING_SCALE: Record<string, string> = {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n}\n\nconst SHADOW_SCALE: Record<string, string> = {\n sm: '[0;1px;2px;0;rgb(0 0 0 / 0.05)]',\n DEFAULT: '[0;1px;3px;0;rgb(0 0 0 / 0.1),0;1px;2px;-1px;rgb(0 0 0 / 0.1)]',\n md: '[0;4px;6px;-1px;rgb(0 0 0 / 0.1),0;2px;4px;-2px;rgb(0 0 0 / 0.1)]',\n lg: '[0;10px;15px;-3px;rgb(0 0 0 / 0.1),0;4px;6px;-4px;rgb(0 0 0 / 0.1)]',\n xl: '[0;20px;25px;-5px;rgb(0 0 0 / 0.1),0;8px;10px;-6px;rgb(0 0 0 / 0.1)]',\n '2xl': '[0;25px;50px;-12px;rgb(0 0 0 / 0.25)]',\n none: '[none]',\n}\n\nconst SIZE_KEYWORDS: Record<string, string> = {\n auto: 'auto',\n full: '100%',\n screen: '100vw',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n}\n\nconst HEIGHT_KEYWORDS: Record<string, string> = {\n auto: 'auto',\n full: '100%',\n screen: '100vh',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n}\n\nconst WIDTH_SCALE: Record<string, string> = {\n xs: '20rem',\n sm: '24rem',\n md: '28rem',\n lg: '32rem',\n xl: '36rem',\n '2xl': '42rem',\n '3xl': '48rem',\n '4xl': '56rem',\n '5xl': '64rem',\n '6xl': '72rem',\n '7xl': '80rem',\n}\n\nconst encodeBracketValue = (value: string): string => `[${value.replace(/ /g, ';')}]`\n\nconst encodeXcssValue = (value: string): string => {\n if (!value) return value\n if (value.startsWith('[') && value.endsWith(']')) return value\n\n const first = value[0]\n if (first === '#' || first === '!' || first === '-' || /[0-9]/.test(first)) {\n return value\n }\n\n if (/[(),/:]/.test(value) || /\\s/.test(value)) {\n return encodeBracketValue(value)\n }\n\n return `${first.toUpperCase()}${value.slice(1)}`\n}\n\nconst buildValueToken = (property: string, value: string): string => `${property}${encodeXcssValue(value)}`\n\nconst COLOR_SCALE: Record<string, string> = {\n transparent: 'transparent',\n current: 'currentColor',\n inherit: 'inherit',\n white: '#ffffff',\n black: '#000000',\n 'slate-50': '#f8fafc',\n 'slate-100': '#f1f5f9',\n 'slate-200': '#e2e8f0',\n 'slate-300': '#cbd5e1',\n 'slate-400': '#94a3b8',\n 'slate-500': '#64748b',\n 'slate-600': '#475569',\n 'slate-700': '#334155',\n 'slate-800': '#1e293b',\n 'slate-900': '#0f172a',\n 'gray-50': '#f9fafb',\n 'gray-100': '#f3f4f6',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'gray-500': '#6b7280',\n 'gray-600': '#4b5563',\n 'gray-700': '#374151',\n 'gray-800': '#1f2937',\n 'gray-900': '#111827',\n 'red-50': '#fef2f2',\n 'red-100': '#fee2e2',\n 'red-200': '#fecaca',\n 'red-300': '#fca5a5',\n 'red-400': '#f87171',\n 'red-500': '#ef4444',\n 'red-600': '#dc2626',\n 'red-700': '#b91c1c',\n 'red-800': '#991b1b',\n 'red-900': '#7f1d1d',\n 'orange-50': '#fff7ed',\n 'orange-100': '#ffedd5',\n 'orange-200': '#fed7aa',\n 'orange-300': '#fdba74',\n 'orange-400': '#fb923c',\n 'orange-500': '#f97316',\n 'orange-600': '#ea580c',\n 'orange-700': '#c2410c',\n 'orange-800': '#9a3412',\n 'orange-900': '#7c2d12',\n 'amber-50': '#fffbeb',\n 'amber-100': '#fef3c7',\n 'amber-200': '#fde68a',\n 'amber-300': '#fcd34d',\n 'amber-400': '#fbbf24',\n 'amber-500': '#f59e0b',\n 'amber-600': '#d97706',\n 'amber-700': '#b45309',\n 'amber-800': '#92400e',\n 'amber-900': '#78350f',\n 'yellow-50': '#fefce8',\n 'yellow-100': '#fef9c3',\n 'yellow-200': '#fef08a',\n 'yellow-300': '#fde047',\n 'yellow-400': '#facc15',\n 'yellow-500': '#eab308',\n 'yellow-600': '#ca8a04',\n 'yellow-700': '#a16207',\n 'yellow-800': '#854d0e',\n 'yellow-900': '#713f12',\n 'green-50': '#f0fdf4',\n 'green-100': '#dcfce7',\n 'green-200': '#bbf7d0',\n 'green-300': '#86efac',\n 'green-400': '#4ade80',\n 'green-500': '#22c55e',\n 'green-600': '#16a34a',\n 'green-700': '#15803d',\n 'green-800': '#166534',\n 'green-900': '#14532d',\n 'emerald-50': '#ecfdf5',\n 'emerald-100': '#d1fae5',\n 'emerald-200': '#a7f3d0',\n 'emerald-300': '#6ee7b7',\n 'emerald-400': '#34d399',\n 'emerald-500': '#10b981',\n 'emerald-600': '#059669',\n 'emerald-700': '#047857',\n 'emerald-800': '#065f46',\n 'emerald-900': '#064e3b',\n 'blue-50': '#eff6ff',\n 'blue-100': '#dbeafe',\n 'blue-200': '#bfdbfe',\n 'blue-300': '#93c5fd',\n 'blue-400': '#60a5fa',\n 'blue-500': '#3b82f6',\n 'blue-600': '#2563eb',\n 'blue-700': '#1d4ed8',\n 'blue-800': '#1e40af',\n 'blue-900': '#1e3a8a',\n 'indigo-50': '#eef2ff',\n 'indigo-100': '#e0e7ff',\n 'indigo-200': '#c7d2fe',\n 'indigo-300': '#a5b4fc',\n 'indigo-400': '#818cf8',\n 'indigo-500': '#6366f1',\n 'indigo-600': '#4f46e5',\n 'indigo-700': '#4338ca',\n 'indigo-800': '#3730a3',\n 'indigo-900': '#312e81',\n 'violet-50': '#f5f3ff',\n 'violet-100': '#ede9fe',\n 'violet-200': '#ddd6fe',\n 'violet-300': '#c4b5fd',\n 'violet-400': '#a78bfa',\n 'violet-500': '#8b5cf6',\n 'violet-600': '#7c3aed',\n 'violet-700': '#6d28d9',\n 'violet-800': '#5b21b6',\n 'violet-900': '#4c1d95',\n 'purple-50': '#faf5ff',\n 'purple-100': '#f3e8ff',\n 'purple-200': '#e9d5ff',\n 'purple-300': '#d8b4fe',\n 'purple-400': '#c084fc',\n 'purple-500': '#a855f7',\n 'purple-600': '#9333ea',\n 'purple-700': '#7e22ce',\n 'purple-800': '#6b21a8',\n 'purple-900': '#581c87',\n 'pink-50': '#fdf2f8',\n 'pink-100': '#fce7f3',\n 'pink-200': '#fbcfe8',\n 'pink-300': '#f9a8d4',\n 'pink-400': '#f472b6',\n 'pink-500': '#ec4899',\n 'pink-600': '#db2777',\n 'pink-700': '#be185d',\n 'pink-800': '#9d174d',\n 'pink-900': '#831843',\n 'cyan-50': '#ecfeff',\n 'cyan-100': '#cffafe',\n 'cyan-200': '#a5f3fc',\n 'cyan-300': '#67e8f9',\n 'cyan-400': '#22d3ee',\n 'cyan-500': '#06b6d4',\n 'cyan-600': '#0891b2',\n 'cyan-700': '#0e7490',\n 'cyan-800': '#155e75',\n 'cyan-900': '#164e63',\n}\n\nconst DIRECT_MAP: Record<string, string[]> = {\n flex: ['dF'],\n 'inline-flex': ['dIf'],\n block: ['dB'],\n 'inline-block': ['dIb'],\n inline: ['dI'],\n hidden: ['dN'],\n grid: ['dG'],\n 'inline-grid': ['dIg'],\n contents: ['dC'],\n relative: ['posR'],\n absolute: ['posA'],\n fixed: ['posF'],\n sticky: ['pos[sticky]'],\n static: ['posS'],\n 'flex-row': ['fxd[row]'],\n 'flex-col': ['fxd[column]'],\n 'flex-row-reverse': ['fxd[row-reverse]'],\n 'flex-col-reverse': ['fxd[column-reverse]'],\n 'flex-wrap': ['fxw[wrap]'],\n 'flex-nowrap': ['fxw[nowrap]'],\n 'items-start': ['ai[start]'],\n 'items-end': ['ai[end]'],\n 'items-center': ['ai[center]'],\n 'items-stretch': ['ai[stretch]'],\n 'items-baseline': ['ai[baseline]'],\n 'content-start': ['ac[start]'],\n 'content-end': ['ac[end]'],\n 'content-center': ['ac[center]'],\n 'content-between': ['ac[space-between]'],\n 'content-around': ['ac[space-around]'],\n 'content-evenly': ['ac[space-evenly]'],\n 'content-stretch': ['ac[stretch]'],\n 'content-baseline': ['ac[baseline]'],\n 'justify-start': ['jc[start]'],\n 'justify-end': ['jc[end]'],\n 'justify-center': ['jc[center]'],\n 'justify-between': ['jc[space-between]'],\n 'justify-around': ['jc[space-around]'],\n 'justify-evenly': ['jc[space-evenly]'],\n 'justify-items-start': ['ji[start]'],\n 'justify-items-end': ['ji[end]'],\n 'justify-items-center': ['ji[center]'],\n 'justify-items-stretch': ['ji[stretch]'],\n 'justify-items-baseline': ['ji[baseline]'],\n 'justify-self-auto': ['js[auto]'],\n 'justify-self-start': ['js[start]'],\n 'justify-self-end': ['js[end]'],\n 'justify-self-center': ['js[center]'],\n 'justify-self-stretch': ['js[stretch]'],\n 'place-items-start': ['pli[start]'],\n 'place-items-end': ['pli[end]'],\n 'place-items-center': ['pli[center]'],\n 'place-items-stretch': ['pli[stretch]'],\n 'place-content-start': ['plc[start]'],\n 'place-content-end': ['plc[end]'],\n 'place-content-center': ['plc[center]'],\n 'place-content-between': ['plc[space-between]'],\n 'place-content-around': ['plc[space-around]'],\n 'place-content-evenly': ['plc[space-evenly]'],\n 'place-content-stretch': ['plc[stretch]'],\n 'place-self-auto': ['pls[auto]'],\n 'place-self-start': ['pls[start]'],\n 'place-self-end': ['pls[end]'],\n 'place-self-center': ['pls[center]'],\n 'place-self-stretch': ['pls[stretch]'],\n 'self-auto': ['as[auto]'],\n 'self-start': ['as[start]'],\n 'self-end': ['as[end]'],\n 'self-center': ['as[center]'],\n 'self-stretch': ['as[stretch]'],\n 'appearance-none': ['ap[none]'],\n 'font-sans': ['ffA'],\n 'font-serif': ['ffS'],\n 'font-mono': ['ffM'],\n italic: ['fnsty[italic]'],\n 'not-italic': ['fnsty[normal]'],\n underline: ['tdlU'],\n 'line-through': ['tdlLt'],\n uppercase: ['ttrU'],\n lowercase: ['ttrL'],\n capitalize: ['ttrC'],\n truncate: ['ofl[hidden]', 'tolE', 'ws[nowrap]'],\n 'whitespace-normal': ['ws[normal]'],\n 'whitespace-nowrap': ['ws[nowrap]'],\n 'whitespace-pre': ['ws[pre]'],\n 'whitespace-pre-wrap': ['ws[pre-wrap]'],\n 'text-left': ['taL'],\n 'text-center': ['taC'],\n 'text-right': ['taR'],\n 'overflow-hidden': ['ofl[hidden]'],\n 'overflow-auto': ['ofl[auto]'],\n 'overflow-scroll': ['ofl[scroll]'],\n 'overflow-visible': ['ofl[visible]'],\n 'overflow-x-hidden': ['oflx[hidden]'],\n 'overflow-x-auto': ['oflx[auto]'],\n 'overflow-x-scroll': ['oflx[scroll]'],\n 'overflow-y-hidden': ['ofly[hidden]'],\n 'overflow-y-auto': ['ofly[auto]'],\n 'overflow-y-scroll': ['ofly[scroll]'],\n 'cursor-pointer': ['crP'],\n 'cursor-not-allowed': ['crNa'],\n 'cursor-default': ['crD'],\n 'select-none': ['us[none]'],\n 'rounded-none': ['bdra0'],\n rounded: [`bdra${RADIUS_SCALE.DEFAULT}`],\n 'rounded-sm': [`bdra${RADIUS_SCALE.sm}`],\n 'rounded-md': [`bdra${RADIUS_SCALE.md}`],\n 'rounded-lg': [`bdra${RADIUS_SCALE.lg}`],\n 'rounded-xl': [`bdra${RADIUS_SCALE.xl}`],\n 'rounded-2xl': [`bdra${RADIUS_SCALE['2xl']}`],\n 'rounded-3xl': [`bdra${RADIUS_SCALE['3xl']}`],\n 'rounded-full': [`bdra${RADIUS_SCALE.full}`],\n border: ['bdw1px', 'bds[solid]', buildValueToken('bdc', 'currentColor')],\n 'border-0': ['bdw0'],\n 'border-2': ['bdw2px'],\n 'border-4': ['bdw4px'],\n 'border-8': ['bdw8px'],\n 'border-solid': ['bds[solid]'],\n 'border-dashed': ['bds[dashed]'],\n 'border-dotted': ['bds[dotted]'],\n 'shadow-sm': [`bxsh${SHADOW_SCALE.sm}`],\n shadow: [`bxsh${SHADOW_SCALE.DEFAULT}`],\n 'shadow-md': [`bxsh${SHADOW_SCALE.md}`],\n 'shadow-lg': [`bxsh${SHADOW_SCALE.lg}`],\n 'shadow-xl': [`bxsh${SHADOW_SCALE.xl}`],\n 'shadow-2xl': [`bxsh${SHADOW_SCALE['2xl']}`],\n 'shadow-none': [`bxsh${SHADOW_SCALE.none}`],\n 'w-full': ['w100%'],\n 'w-screen': ['w100vw'],\n 'w-auto': ['w[auto]'],\n 'h-full': ['h100%'],\n 'h-screen': ['h100vh'],\n 'h-auto': ['h[auto]'],\n 'min-w-full': ['miw100%'],\n 'min-h-full': ['mih100%'],\n 'min-h-screen': ['mih100vh'],\n 'max-w-full': ['mw100%'],\n 'max-h-full': ['mh100%'],\n 'max-w-none': ['mw[none]'],\n 'max-h-none': ['mh[none]'],\n 'flex-1': ['fx1'],\n 'flex-auto': ['fx[a]'],\n 'flex-initial': ['fx[i]'],\n 'flex-none': ['fx[none]'],\n grow: ['fxg1'],\n 'grow-0': ['fxg0'],\n shrink: ['fxs1'],\n 'shrink-0': ['fxs0'],\n 'aspect-square': ['ar1'],\n 'aspect-video': ['ar[16/9]'],\n 'aspect-auto': ['ar[auto]'],\n 'object-contain': ['of[contain]'],\n 'object-cover': ['of[cover]'],\n 'object-fill': ['of[fill]'],\n 'object-none': ['of[none]'],\n 'object-scale-down': ['of[scale-down]'],\n 'object-center': ['op[center]'],\n 'object-top': ['op[top]'],\n 'object-right': ['op[right]'],\n 'object-bottom': ['op[bottom]'],\n 'object-left': ['op[left]'],\n}\n\nconst DIRECTIONAL_ROUNDED_MAP: Record<string, string[]> = {\n 'rounded-t': ['bdtlr4px', 'bdtrr4px'],\n 'rounded-r': ['bdtrr4px', 'bdbrr4px'],\n 'rounded-b': ['bdblr4px', 'bdbrr4px'],\n 'rounded-l': ['bdtlr4px', 'bdblr4px'],\n}\n\nconst TAILWIND_EXACT_UTILITIES = new Set([\n ...Object.keys(DIRECT_MAP),\n ...Object.keys(DIRECTIONAL_ROUNDED_MAP),\n 'appearance-none',\n 'transition',\n])\n\nconst TAILWIND_PREFIXES = [\n 'p-',\n 'px-',\n 'py-',\n 'pt-',\n 'pr-',\n 'pb-',\n 'pl-',\n 'm-',\n 'mx-',\n 'my-',\n 'mt-',\n 'mr-',\n 'mb-',\n 'ml-',\n 'gap-',\n 'gap-x-',\n 'gap-y-',\n 'top-',\n 'right-',\n 'bottom-',\n 'left-',\n 'inset-',\n 'inset-x-',\n 'inset-y-',\n 'w-',\n 'h-',\n 'min-w-',\n 'min-h-',\n 'max-w-',\n 'max-h-',\n 'size-',\n 'bg-',\n 'text-',\n 'border-',\n 'placeholder-',\n 'divide-',\n 'rounded-',\n 'font-',\n 'leading-',\n 'tracking-',\n 'opacity-',\n 'z-',\n 'shadow-',\n 'duration-',\n 'ease-',\n 'delay-',\n 'translate-',\n 'scale-',\n 'rotate-',\n 'skew-',\n 'ring-',\n 'outline-',\n 'from-',\n 'via-',\n 'to-',\n 'basis-',\n 'order-',\n]\n\nconst NEGATIVE_PREFIXES = new Set(['m', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y'])\nconst AUTO_VALUE_PREFIXES = new Set(['m', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y'])\n\nconst normalizeOptions = (options?: TailwindConversionOptions): Required<TailwindConversionOptions> => {\n const merged = { ...DEFAULT_OPTIONS, ...options }\n\n if (options?.preserveUnknown === undefined) {\n merged.preserveUnknown = merged.mode === 'legacy'\n }\n\n return merged\n}\n\nconst splitOutsideBrackets = (value: string, delimiter: string): string[] => {\n const parts: string[] = []\n let depth = 0\n let current = ''\n\n for (const char of value) {\n if (char === '[') depth++\n if (char === ']') depth = Math.max(0, depth - 1)\n if (char === delimiter && depth === 0) {\n parts.push(current)\n current = ''\n continue\n }\n current += char\n }\n\n if (current) parts.push(current)\n return parts\n}\n\nconst normalizeColor = (value: string): string | null => {\n if (COLOR_SCALE[value]) return COLOR_SCALE[value]\n if (/^\\[(.+)\\]$/.test(value)) {\n const match = value.match(/^\\[(.+)\\]$/)\n if (!match) return null\n const inner = match[1].trim()\n if (inner.startsWith('#') || inner.startsWith('rgb') || inner.startsWith('hsl') || inner === 'transparent' || inner === 'currentColor') {\n return inner\n }\n }\n return null\n}\n\nconst normalizeScalar = (value: string, table: Record<string, string>): string | null => {\n if (table[value] !== undefined) return table[value]\n if (/^\\[(.+)\\]$/.test(value)) {\n const match = value.match(/^\\[(.+)\\]$/)\n return match ? match[1] : null\n }\n return null\n}\n\nconst normalizeSpacing = (raw: string, allowNegative: boolean): string | null => {\n let negative = false\n let value = raw\n if (raw.startsWith('-')) {\n if (!allowNegative) return null\n negative = true\n value = raw.slice(1)\n }\n\n if (value.startsWith('[') && value.endsWith(']')) {\n const inner = value.slice(1, -1)\n return negative ? `-${inner}` : inner\n }\n\n const scaled = SPACING_SCALE[value]\n if (!scaled) return null\n return negative && scaled !== '0' ? `-${scaled}` : scaled\n}\n\nconst normalizeFraction = (value: string): string | null => {\n const match = value.match(/^(\\d+)\\/(\\d+)$/)\n if (!match) return null\n const numerator = Number(match[1])\n const denominator = Number(match[2])\n if (!denominator) return null\n return `${(numerator / denominator) * 100}%`\n}\n\nconst appendVariants = (tokens: string[], variants: string[]): { tokens: string[], warnings: TailwindConversionWarning[] } => {\n let media: string | null = null\n const selectors: string[] = []\n const warnings: TailwindConversionWarning[] = []\n\n for (const variant of variants) {\n if (RESPONSIVE_VARIANTS.has(variant)) {\n media = variant\n continue\n }\n\n const selector = SELECTOR_VARIANTS[variant]\n if (selector) {\n selectors.push(selector)\n continue\n }\n\n warnings.push({\n token: variant,\n message: `unsupported Tailwind variant \\`${variant}\\``,\n })\n }\n\n const selectorSuffix = selectors.length > 0 ? `@${selectors.join('')}` : ''\n\n return {\n tokens: tokens.map((token) => {\n const withSelector = `${token}${selectorSuffix}`\n return media ? `${media}:${withSelector}` : withSelector\n }),\n warnings,\n }\n}\n\nconst buildSpacingToken = (prefix: string, value: string): string[] | null => {\n const negativeAllowed = NEGATIVE_PREFIXES.has(prefix)\n const normalized =\n value === 'auto' && AUTO_VALUE_PREFIXES.has(prefix)\n ? 'auto'\n : normalizeSpacing(value, negativeAllowed)\n if (!normalized) return null\n\n const propertyMap: Record<string, string[]> = {\n p: ['p'],\n px: ['px'],\n py: ['py'],\n pt: ['pt'],\n pr: ['pr'],\n pb: ['pb'],\n pl: ['pl'],\n m: ['m'],\n mx: ['mx'],\n my: ['my'],\n mt: ['mt'],\n mr: ['mr'],\n mb: ['mb'],\n ml: ['ml'],\n gap: ['gap'],\n 'gap-x': ['cgap'],\n 'gap-y': ['rgap'],\n top: ['t'],\n right: ['r'],\n bottom: ['b'],\n left: ['l'],\n inset: ['i'],\n 'inset-x': ['l', 'r'],\n 'inset-y': ['t', 'b'],\n }\n\n const properties = propertyMap[prefix]\n if (!properties) return null\n\n if (normalized === 'auto') {\n return properties.map((property) => `${property}[auto]`)\n }\n\n return properties.map((property) => `${property}${normalized}`)\n}\n\nconst normalizeBasis = (rawValue: string): string | null => {\n return (\n normalizeScalar(rawValue, {\n auto: 'auto',\n full: '100%',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n }) ??\n normalizeFraction(rawValue) ??\n normalizeSpacing(rawValue, false)\n )\n}\n\nconst normalizeOrder = (rawValue: string): string | null => {\n if (rawValue === 'first') return '-9999'\n if (rawValue === 'last') return '9999'\n if (rawValue === 'none') return '0'\n if (/^-?\\d+$/.test(rawValue)) return rawValue\n if (/^\\[(.+)\\]$/.test(rawValue)) {\n const match = rawValue.match(/^\\[(.+)\\]$/)\n return match ? match[1] : null\n }\n return null\n}\n\nconst buildSizeToken = (prefix: string, rawValue: string): string | null => {\n const propertyMap: Record<string, string> = {\n w: 'w',\n h: 'h',\n 'min-w': 'miw',\n 'min-h': 'mih',\n 'max-w': 'mw',\n 'max-h': 'mh',\n }\n\n const property = propertyMap[prefix]\n if (!property) return null\n const valueTable = prefix === 'h' || prefix === 'min-h' || prefix === 'max-h' ? HEIGHT_KEYWORDS : SIZE_KEYWORDS\n const normalized =\n normalizeScalar(rawValue, prefix.startsWith('max-w') ? { ...WIDTH_SCALE, ...valueTable } : valueTable) ??\n normalizeFraction(rawValue) ??\n normalizeSpacing(rawValue, false)\n if (!normalized) return null\n return `${property}[${normalized}]`\n}\n\nconst convertBaseToken = (token: string): TailwindBaseTokenConversion => {\n const warnings: TailwindConversionWarning[] = []\n\n if (DIRECT_MAP[token]) {\n return {\n input: token,\n outputs: DIRECT_MAP[token],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n\n if (DIRECTIONAL_ROUNDED_MAP[token]) {\n return {\n input: token,\n outputs: DIRECTIONAL_ROUNDED_MAP[token],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n\n const colorPrefixes: Array<[RegExp, string]> = [\n [/^bg-(.+)$/, 'bgc'],\n [/^text-(.+)$/, 'c'],\n [/^border-(.+)$/, 'bdc'],\n ]\n for (const [pattern, property] of colorPrefixes) {\n const match = token.match(pattern)\n if (!match) continue\n const color = normalizeColor(match[1])\n if (color) {\n return {\n input: token,\n outputs: [buildValueToken(property, color)],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n const spacingPrefixes = ['p', 'px', 'py', 'pt', 'pr', 'pb', 'pl', 'm', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'gap', 'gap-x', 'gap-y', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y']\n for (const prefix of spacingPrefixes) {\n const bare = token.startsWith('-') ? token.slice(1) : token\n if (!bare.startsWith(`${prefix}-`)) continue\n const value = token.startsWith('-') ? `-${bare.slice(prefix.length + 1)}` : bare.slice(prefix.length + 1)\n const built = buildSpacingToken(prefix, value)\n if (built) {\n return {\n input: token,\n outputs: built,\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n const sizePrefixes = ['w', 'h', 'min-w', 'min-h', 'max-w', 'max-h']\n for (const prefix of sizePrefixes) {\n if (!token.startsWith(`${prefix}-`)) continue\n const value = token.slice(prefix.length + 1)\n const built = buildSizeToken(prefix, value)\n if (built) {\n return {\n input: token,\n outputs: [built],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('size-')) {\n const value = token.slice(5)\n const normalized = normalizeSpacing(value, false)\n if (normalized) {\n return {\n input: token,\n outputs: [`w${normalized}`, `h${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('rounded-')) {\n const value = token.slice(8)\n const radius = normalizeScalar(value, RADIUS_SCALE)\n if (radius) {\n return {\n input: token,\n outputs: [`bdra${radius}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('font-')) {\n const value = token.slice(5)\n const weight = FONT_WEIGHT_SCALE[value]\n if (weight) {\n return {\n input: token,\n outputs: [`fw${weight}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('text-')) {\n const value = token.slice(5)\n const fontSize = FONT_SIZE_SCALE[value]\n if (fontSize) {\n return {\n input: token,\n outputs: [`fns${fontSize}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('leading-')) {\n const value = token.slice(8)\n const normalized = normalizeScalar(value, LINE_HEIGHT_SCALE)\n if (normalized) {\n return {\n input: token,\n outputs: [`lh${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('tracking-')) {\n const value = token.slice(9)\n const normalized = normalizeScalar(value, LETTER_SPACING_SCALE)\n if (normalized) {\n return {\n input: token,\n outputs: [`lts${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('opacity-')) {\n const raw = token.slice(8)\n const amount = Number(raw)\n if (!Number.isNaN(amount)) {\n return {\n input: token,\n outputs: [`opc${String(amount / 100)}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('z-')) {\n const raw = token.slice(2)\n if (/^-?\\d+$/.test(raw)) {\n return {\n input: token,\n outputs: [`z${raw}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('shadow')) {\n const suffix = token === 'shadow' ? 'DEFAULT' : token.slice(7)\n const shadow = SHADOW_SCALE[suffix]\n if (shadow) {\n return {\n input: token,\n outputs: [`bxsh${shadow}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('basis-')) {\n const raw = token.slice(6)\n const normalized = normalizeBasis(raw)\n if (normalized) {\n return {\n input: token,\n outputs: [`fxb[${normalized}]`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('order-')) {\n const raw = token.slice(6)\n const normalized = normalizeOrder(raw)\n if (normalized) {\n return {\n input: token,\n outputs: /^-?\\d+$/.test(normalized) ? [`ord${normalized}`] : [`ord[${normalized}]`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('transition')) {\n warnings.push({\n token,\n message: `Tailwind transition utility \\`${token}\\` converted approximately to 200ms transition`,\n })\n return {\n input: token,\n outputs: ['tran0.2s'],\n status: 'converted',\n exact: false,\n warnings,\n }\n }\n\n if (token.startsWith('duration-') || token.startsWith('ease-') || token.startsWith('delay-')) {\n warnings.push({\n token,\n message: `Tailwind motion utility \\`${token}\\` requires manual review in x-css migration`,\n })\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n exact: false,\n warnings,\n }\n }\n\n warnings.push({\n token,\n message: `Tailwind utility \\`${token}\\` is not mapped yet`,\n })\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n exact: false,\n warnings,\n }\n}\n\nconst splitVariants = (token: string): { variants: string[], base: string } => {\n const parts = splitOutsideBrackets(token, ':')\n if (parts.length === 1) {\n return { variants: [], base: token }\n }\n return {\n variants: parts.slice(0, -1),\n base: parts[parts.length - 1],\n }\n}\n\nconst looksLikeTailwindBase = (base: string): boolean => {\n if (!base) return false\n if (TAILWIND_EXACT_UTILITIES.has(base)) return true\n\n const bare = base.startsWith('-') ? base.slice(1) : base\n if (TAILWIND_EXACT_UTILITIES.has(bare)) return true\n if (TAILWIND_PREFIXES.some((prefix) => bare.startsWith(prefix))) return true\n\n return /^(?:[a-z0-9]+-)+\\[[^\\]]+\\]$/i.test(bare)\n}\n\nexport const classifyTailwindToken = (token: string): TailwindTokenClassification => {\n const { variants, base } = splitVariants(token)\n const tailwindLike = looksLikeTailwindBase(base) || variants.some((variant) => TAILWIND_ONLY_VARIANTS.has(variant))\n const parsed = parseClassName(token)\n const hasExplicitXcssBoundary =\n /[A-Z[#0-9!@]/.test(token) ||\n token.includes('--') ||\n (parsed !== null && (parsed.selector.length > 0 || parsed.layer.length > 0 || parsed.mq.length > 0)) ||\n (parsed !== null && parsed.val.length > 0)\n const parseableAsXcss = parsed !== null && hasExplicitXcssBoundary\n\n if (tailwindLike && parseableAsXcss) return 'ambiguous'\n if (tailwindLike) return 'tailwind'\n if (parseableAsXcss) return 'xcss'\n return 'unknown'\n}\n\nexport const convertTailwindToken = (\n token: string,\n options?: TailwindConversionOptions,\n): TailwindTokenConversion => {\n const normalized = normalizeOptions(options)\n const classification = classifyTailwindToken(token)\n\n if (classification === 'xcss') {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification,\n exact: true,\n warnings: [],\n }\n }\n\n const { variants, base } = splitVariants(token)\n const converted = convertBaseToken(base)\n\n if (converted.status === 'converted') {\n const withVariants = appendVariants(converted.outputs, variants)\n\n if (withVariants.warnings.length > 0) {\n const warnings = [\n {\n token,\n message: `Tailwind token \\`${token}\\` uses variants that are not mapped safely`,\n },\n ...converted.warnings,\n ...withVariants.warnings,\n ]\n\n if (normalized.preserveUnknown) {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification: 'ambiguous',\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n classification: 'ambiguous',\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: withVariants.tokens,\n status: 'converted',\n classification,\n exact: converted.exact,\n warnings: converted.warnings,\n }\n }\n\n const warnings = [...converted.warnings]\n if (classification === 'ambiguous') {\n warnings.unshift({\n token,\n message: `Tailwind token \\`${token}\\` is ambiguous with x-css syntax and requires review`,\n })\n }\n\n if (classification === 'unknown') {\n warnings.unshift({\n token,\n message: `Token \\`${token}\\` is neither recognized Tailwind nor confirmed x-css`,\n })\n }\n\n if (normalized.preserveUnknown) {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification,\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n classification,\n exact: false,\n warnings,\n }\n}\n\nexport const convertTailwindClasses = (\n input: string,\n options?: TailwindConversionOptions,\n): TailwindConversionResult => {\n const tokens = input.split(/\\s+/).map((item) => item.trim()).filter(Boolean)\n const details = tokens.map((token) => convertTailwindToken(token, options))\n const outputTokens = details.flatMap((item) => item.outputs)\n const warnings = details.flatMap((item) => item.warnings)\n\n return {\n input,\n output: outputTokens.join(' '),\n details,\n converted: details.filter((item) => item.status === 'converted').flatMap((item) => item.outputs),\n passthrough: details.filter((item) => item.status === 'passthrough').flatMap((item) => item.outputs),\n unsupported: details.filter((item) => item.status === 'unsupported').map((item) => item.input),\n ambiguous: details.filter((item) => item.classification === 'ambiguous').map((item) => item.input),\n warnings,\n }\n}\n\nexport const tailwindToXcss = convertTailwindClasses\n","import {\n type TailwindConversionOptions,\n type TailwindConversionResult,\n type TailwindTokenConversion,\n convertTailwindClasses,\n} from './tailwind'\n\nexport type TailwindCoverageSupport = 'exact' | 'partial' | 'manual'\n\nexport interface TailwindCoverageEntry {\n group: string\n support: TailwindCoverageSupport\n examples: string[]\n notes: string\n}\n\nexport interface TailwindMigrationReadinessOptions extends TailwindConversionOptions {}\n\nexport interface TailwindMigrationReadinessReport {\n input: string\n conversion: TailwindConversionResult\n autoApplyOutput: string\n exactConverted: string[]\n approximateConverted: string[]\n passthroughXcss: string[]\n reviewRequired: string[]\n blocked: string[]\n safeToAutoApply: boolean\n releaseDecision: 'safe' | 'review' | 'blocked'\n}\n\nexport const TAILWIND_COVERAGE_MATRIX: readonly TailwindCoverageEntry[] = [\n {\n group: 'layout-core',\n support: 'exact',\n examples: ['flex', 'inline-flex', 'grid', 'block', 'hidden', 'relative', 'absolute'],\n notes: 'display, position, flex-direction, flex-wrap, and core layout helpers map 1:1 to x-css tokens.',\n },\n {\n group: 'spacing-size',\n support: 'exact',\n examples: ['p-4', 'gap-4', 'mx-auto', 'w-1/2', 'max-w-7xl', 'inset-x-4', 'inset-y-2'],\n notes: 'spacing scale, fractions, width/height keywords, auto margins, and axis inset helpers are safe to auto-apply.',\n },\n {\n group: 'color-border-shadow',\n support: 'exact',\n examples: ['bg-white', 'text-slate-900', 'border', 'border-slate-200', 'shadow-lg'],\n notes: 'core color, border, rounded, and shadow utilities are exact when the target token is supported in the built-in dictionary.',\n },\n {\n group: 'typography',\n support: 'exact',\n examples: ['font-semibold', 'text-sm', 'leading-6', 'tracking-wide', 'uppercase', 'truncate'],\n notes: 'font family, weight, size, line-height, letter-spacing, casing, whitespace, and overflow text helpers are mapped directly.',\n },\n {\n group: 'alignment-placement',\n support: 'exact',\n examples: ['items-baseline', 'justify-between', 'place-items-center', 'content-between', 'justify-self-end'],\n notes: 'align, justify, place, self, and content helpers are safe to auto-apply.',\n },\n {\n group: 'object-appearance',\n support: 'exact',\n examples: ['appearance-none', 'object-cover', 'object-center', 'aspect-video', 'basis-1/2', 'order-last'],\n notes: 'appearance, object-fit/object-position, aspect-ratio, flex-basis, and order helpers are mapped exactly.',\n },\n {\n group: 'state-variants-safe',\n support: 'exact',\n examples: ['hover:bg-slate-50', 'focus:text-blue-600', 'before:bg-slate-50', 'placeholder:text-slate-400'],\n notes: 'responsive variants and safe pseudo/pseudo-element variants are supported directly: hover, focus, active, visited, disabled, checked, before, after, placeholder, selection, first, last, odd, even.',\n },\n {\n group: 'motion-basic',\n support: 'partial',\n examples: ['transition'],\n notes: 'transition currently degrades to a generic 200ms x-css transition and should be reviewed before release.',\n },\n {\n group: 'motion-detailed',\n support: 'manual',\n examples: ['duration-200', 'ease-out', 'delay-150'],\n notes: 'timing-specific motion helpers are not auto-mapped safely and should block blind migration.',\n },\n {\n group: 'contextual-variants',\n support: 'manual',\n examples: ['group-hover:bg-slate-50', 'peer-focus:text-blue-600', 'dark:bg-slate-900'],\n notes: 'group, peer, and dark-mode variants need product-specific rewrite strategy and should not be auto-applied.',\n },\n {\n group: 'generated-content-and-dividers',\n support: 'manual',\n examples: ['divide-x', 'before:content-[\\\"\\\"]'],\n notes: 'divide helpers and arbitrary generated-content flows need manual implementation review.',\n },\n {\n group: 'transform-effects',\n support: 'manual',\n examples: ['translate-x-4', 'scale-95', 'rotate-45', 'ring-2', 'outline-none', 'bg-gradient-to-r'],\n notes: 'transforms, rings, advanced outlines, and gradients are not mapped safely enough for production auto-migration.',\n },\n] as const\n\nconst DEFAULT_READINESS_OPTIONS: Required<TailwindMigrationReadinessOptions> = {\n mode: 'safe',\n preserveUnknown: false,\n}\n\nconst isSafeDetailForAutoApply = (detail: TailwindTokenConversion): boolean => {\n if (detail.status === 'converted') return detail.exact\n return detail.status === 'passthrough' && detail.classification === 'xcss'\n}\n\nexport const getTailwindCoverageMatrix = (): readonly TailwindCoverageEntry[] => {\n return TAILWIND_COVERAGE_MATRIX\n}\n\nexport const assessTailwindMigrationReadiness = (\n input: string,\n options?: TailwindMigrationReadinessOptions,\n): TailwindMigrationReadinessReport => {\n const normalizedOptions: TailwindMigrationReadinessOptions = {\n ...DEFAULT_READINESS_OPTIONS,\n ...options,\n }\n\n const conversion = convertTailwindClasses(input, normalizedOptions)\n const exactConverted = conversion.details\n .filter((detail) => detail.status === 'converted' && detail.exact)\n .flatMap((detail) => detail.outputs)\n const approximateConverted = conversion.details\n .filter((detail) => detail.status === 'converted' && !detail.exact)\n .flatMap((detail) => detail.outputs)\n const passthroughXcss = conversion.details\n .filter((detail) => detail.status === 'passthrough' && detail.classification === 'xcss')\n .flatMap((detail) => detail.outputs)\n\n const reviewRequired = conversion.details\n .filter((detail) => !isSafeDetailForAutoApply(detail))\n .map((detail) => detail.input)\n\n const blocked = conversion.details\n .filter((detail) => {\n if (isSafeDetailForAutoApply(detail)) return false\n if (detail.status === 'converted') return false\n return detail.status === 'unsupported' || detail.classification === 'ambiguous' || detail.classification === 'unknown'\n })\n .map((detail) => detail.input)\n\n const autoApplyOutput = conversion.details\n .flatMap((detail) => (isSafeDetailForAutoApply(detail) ? detail.outputs : []))\n .join(' ')\n\n const safeToAutoApply = reviewRequired.length === 0\n const releaseDecision =\n blocked.length > 0\n ? 'blocked'\n : safeToAutoApply\n ? 'safe'\n : 'review'\n\n return {\n input,\n conversion,\n autoApplyOutput,\n exactConverted,\n approximateConverted,\n passthroughXcss,\n reviewRequired,\n blocked,\n safeToAutoApply,\n releaseDecision,\n }\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 * from './tailwind'\nexport * from './tailwind-readiness'\nexport default $$\nexport type { XCSSConfig, BootloaderScriptOptions }\n"],"mappings":"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","names":["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","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","BUILTIN_DICTIONARY","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","resolveCacheConfig","config","styleId","version","compression","debounceMs","sizeLast","loadOnInit","createCacheKey","cache","createKeySyncKey","createKeySyncChannelName","createKeyRegistryKey","createKeyRegistryLockName","readKeyRegistry","storage","key","raw","parsed","sizeSource","entries","entry","writeKeyRegistry","registry","canUseWritableLocalStorage","canUseWebLocks","canUseCacheRuntime","isCacheEnvelopeLZW","value","obj","isCacheEnvelopeStream","canUseCompressionStream","canUseDecompressionStream","bytesToBase64","bytes","binary","i","chunk","j","buff","base64ToBytes","base64","compressDeflateRawBase64","input","stream","compressed","decompressDeflateRawBase64","payload","normalized","isStreamCacheEnvelopeRaw","compressLZW","dictionary","codes","dictSize","phrase","currentChar","phraseWithChar","code","decompressLZW","result","char","previous","current","resolveDictionaryData","mod","moduleObj","source","short","common","specific","normalizeKeySyncPayload","entriesSource","skipWhitespace","start","index","findMatchingBrace","depth","quote","escaped","lineComment","blockComment","next","extractExportedObjectLiteral","marker","objectStart","objectEnd","skipWhitespaceAndComments","parseQuotedString","parseIdentifierToken","first","end","parsePlainObjectLiteral","expression","parseValue","parseObject","objectValue","keyToken","valueToken","parseExternalDictionarySource","sourceCode","shortLiteral","commonLiteral","specificLiteral","defaultLiteral","readDictionarySourceFromNode","nodeProcess","isFileUrl","isPathLike","fs","readExternalDictionarySource","nodeSource","response","loadExternalDictionary","data","DICTIONARY_MODULE_ERROR","setupCssLayers","docRoot","id","layers","_","styleElement","layerRule","hashConfig","excludes","str","hash","chr","parseCacheDataSync","expanded","parseCacheDataAsync","unwrapCachedCssText","mediaKey","text","match","normalizeBaseCssText","base","mergeRootCssText","baseText","cachedText","xcss","modules","cssDefault","mediaQuery","groupValues","valueExt","excludeNames","excludePrefixes","prefix","dictionaryImport","cacheOptions","cacheConfig","cacheKey","keySyncKey","keySyncChannelName","mergedExcludes","normalizedExcludePrefixes","x","globToRegex","pattern","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","error","lastKnownCacheData","buildCss","doc","isBrowser","browserWindow","browserStorage","cacheSupported","cacheEnabled","cacheStorage","baseCssText","CSS_KEYS","CSS_KEY_SOURCES","CSS_VALUES","registerCssKey","resolveSourceClassName","keyRegistryKey","keyRegistryLockName","pendingKeyAssignments","keyAssignmentScheduled","keyAssignmentInFlight","isFirstRenderBatch","syncSourceId","pendingKeySyncEntries","pendingKeySyncScheduled","keySyncBroadcastChannel","mergeSizeLast","nextSizeLast","mergeKnownKeys","currentValue","mergeKeySyncPayload","flushPendingKeySyncEntries","scheduleKeySync","allocateLocalKey","allocatePersistentKeySync","registryMap","registryValues","existing","allocateKeyBatch","sources","commit","newEntries","assignedEntries","processObservedItems","triggerSave","runPendingKeyAssignments","batch","scheduleKeyAssignment","event","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","rulesSetObj","cssTextForCache","mqStr","applySheetText","media","removeBootloaderStyle","blStyle","scheduleNextPaint","callback","hydrateCacheAfterInit","currentRules","cachedRules","mergedRules","cachedRoot","txt","textFromRules","fallbackText","existingSheets","newSheets","sheet","safeInsertRule","cssText","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssExts","cssName","txtCss","cssStyleSheetSet","applyObservedItems","items","sourceClassName","item","classToProp","run","clsArrs","lsCss","shouldHashClass","parseTarget","parseClassName","selectorStr","v","isLikelyValidSelectorFallback","propsValueExt","lsClassNew","l","observeDom","css","mediaQueryStr","txtProps","REGEX_CSS","cssProp","resolvedProps","isAllValidUtilities","normalizeAliasDeclaration","cleaned","colonIndex","declaration","propToValue","p","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","splitSelectorSuffix","bracketDepth","ch","splitByAmpersandOutsideBrackets","parts","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","loadOnInitValue","cacheKey","script","DEFAULT_OPTIONS","RESPONSIVE_VARIANTS","SELECTOR_VARIANTS","TAILWIND_ONLY_VARIANTS","SPACING_SCALE","RADIUS_SCALE","FONT_SIZE_SCALE","FONT_WEIGHT_SCALE","LINE_HEIGHT_SCALE","LETTER_SPACING_SCALE","SHADOW_SCALE","SIZE_KEYWORDS","HEIGHT_KEYWORDS","WIDTH_SCALE","encodeBracketValue","value","encodeXcssValue","first","buildValueToken","property","COLOR_SCALE","DIRECT_MAP","DIRECTIONAL_ROUNDED_MAP","TAILWIND_EXACT_UTILITIES","TAILWIND_PREFIXES","NEGATIVE_PREFIXES","AUTO_VALUE_PREFIXES","normalizeOptions","options","merged","splitOutsideBrackets","delimiter","parts","depth","current","char","normalizeColor","match","inner","normalizeScalar","table","normalizeSpacing","raw","allowNegative","negative","scaled","normalizeFraction","numerator","denominator","appendVariants","tokens","variants","media","selectors","warnings","variant","selector","selectorSuffix","token","withSelector","buildSpacingToken","prefix","negativeAllowed","normalized","properties","normalizeBasis","rawValue","normalizeOrder","buildSizeToken","valueTable","convertBaseToken","colorPrefixes","pattern","color","spacingPrefixes","bare","built","sizePrefixes","radius","weight","fontSize","amount","suffix","shadow","splitVariants","looksLikeTailwindBase","base","classifyTailwindToken","tailwindLike","parsed","parseClassName","hasExplicitXcssBoundary","parseableAsXcss","convertTailwindToken","classification","converted","withVariants","convertTailwindClasses","input","details","item","outputTokens","tailwindToXcss","TAILWIND_COVERAGE_MATRIX","DEFAULT_READINESS_OPTIONS","isSafeDetailForAutoApply","detail","getTailwindCoverageMatrix","assessTailwindMigrationReadiness","input","options","normalizedOptions","conversion","convertTailwindClasses","exactConverted","approximateConverted","passthroughXcss","reviewRequired","blocked","autoApplyOutput","safeToAutoApply","releaseDecision","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/events.ts","../src/parser.ts","../src/dictionary.ts","../src/core.ts","../src/bootloader.ts","../src/tailwind.ts","../src/tailwind-readiness.ts","../src/index.ts"],"sourcesContent":["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","// CSS Properties Abbreviation Dictionary\n// Rules:\n// - Normalized to lowercase keys\n\nexport const SHORT_PROPERTIES: Record<string, string> = {\n a: 'all',\n ac: 'align-content',\n acc: 'accent-color',\n ai: 'align-items',\n ani: 'animation',\n anic: 'animation-composition',\n anide: 'animation-delay',\n anidi: 'animation-direction',\n anidu: 'animation-duration',\n anifm: 'animation-fill-mode',\n aniic: 'animation-iteration-count',\n anin: 'animation-name',\n anips: 'animation-play-state',\n anitf: 'animation-timing-function',\n ap: 'appearance',\n ar: 'aspect-ratio',\n as: 'align-self',\n b: 'bottom',\n bd: 'border',\n bda: 'border-radius',\n bdb: 'border-bottom',\n bdbc: 'border-bottom-color',\n bdblc: 'border-block-color',\n bdble: 'border-block-end',\n bdblec: 'border-block-end-color',\n bdbles: 'border-block-end-style',\n bdblew: 'border-block-end-width',\n bdblk: 'border-block',\n bdblr: 'border-bottom-left-radius',\n bdbls: 'border-block-start',\n bdblsc: 'border-block-start-color',\n bdblss: 'border-block-start-style',\n bdblst: 'border-block-style',\n bdblsw: 'border-block-start-width',\n bdblwi: 'border-block-width',\n bdbr: 'box-decoration-break',\n bdbrr: 'border-bottom-right-radius',\n bdbst: 'border-bottom-style',\n bdbw: 'border-bottom-width',\n bdc: 'border-color',\n bdcl: 'border-collapse',\n bdeer: 'border-end-end-radius',\n bdesr: 'border-end-start-radius',\n bdi: 'border-inline',\n bdic: 'border-inline-color',\n bdie: 'border-inline-end',\n bdiec: 'border-inline-end-color',\n bdies: 'border-inline-end-style',\n bdiew: 'border-inline-end-width',\n bdimg: 'border-image',\n bdinw: 'border-inline-width',\n bdio: 'border-image-outset',\n bdir: 'border-image-repeat',\n bdis: 'border-image-slice',\n bdisc: 'border-inline-start-color',\n bdisrc: 'border-image-source',\n bdiss: 'border-inline-start-style',\n bdista: 'border-inline-start',\n bdistl: 'border-inline-style',\n bdisw: 'border-inline-start-width',\n bdiw: 'border-image-width',\n bdl: 'border-left',\n bdlc: 'border-left-color',\n bdls: 'border-left-style',\n bdlw: 'border-left-width',\n bdr: 'border-right',\n bdra: 'border-radius',\n bdrc: 'border-right-color',\n bdrs: 'border-right-style',\n bdrw: 'border-right-width',\n bds: 'border-style',\n bdser: 'border-start-end-radius',\n bdsp: 'border-spacing',\n bdssr: 'border-start-start-radius',\n bdt: 'border-top',\n bdtc: 'border-top-color',\n bdtlr: 'border-top-left-radius',\n bdtrr: 'border-top-right-radius',\n bdts: 'border-top-style',\n bdtw: 'border-top-width',\n bdw: 'border-width',\n bg: 'background',\n bga: 'background-attachment',\n bgbm: 'background-blend-mode',\n bgc: 'background-color',\n bgcl: 'background-clip',\n bgi: 'background-image',\n bgo: 'background-origin',\n bgp: 'background-position',\n bgpx: 'background-position-x',\n bgpy: 'background-position-y',\n bgr: 'background-repeat',\n bgs: 'background-size',\n bkdf: 'backdrop-filter',\n bkfv: 'backface-visibility',\n blks: 'block-size',\n brka: 'break-after',\n brkb: 'break-before',\n brki: 'break-inside',\n bxsh: 'box-shadow',\n bxshd: 'box-shadow',\n bxsz: 'box-sizing',\n c: 'color',\n caps: 'caption-side',\n cip: 'color-interpolation',\n ciw: 'contain-intrinsic-width',\n clpp: 'clip-path',\n clr: 'clear',\n cnt: 'contain',\n cntibs: 'contain-intrinsic-block-size',\n cntih: 'contain-intrinsic-height',\n cntiis: 'contain-intrinsic-inline-size',\n cntis: 'contain-intrinsic-size',\n cntri: 'counter-increment',\n cntrr: 'counter-reset',\n cntrs: 'counter-set',\n col: 'columns',\n colc: 'column-count',\n colf: 'column-fill',\n colg: 'column-gap',\n colr: 'column-rule',\n colrc: 'column-rule-color',\n colrs: 'column-rule-style',\n colrw: 'column-rule-width',\n cols: 'column-span',\n colw: 'column-width',\n cr: 'cursor',\n crtc: 'caret-color',\n csch: 'color-scheme',\n ctr: 'container',\n ctrn: 'container-name',\n ctrt: 'container-type',\n ctt: 'content',\n d: 'display',\n dir: 'direction',\n empc: 'empty-cells',\n fca: 'forced-color-adjust',\n ff: 'font-family',\n fl: 'float',\n flt: 'filter',\n fn: 'font',\n fnf: 'font-family',\n fnfs: 'font-feature-settings',\n fnk: 'font-kerning',\n fnlo: 'font-language-override',\n fnos: 'font-optical-sizing',\n fnp: 'font-palette',\n fns: 'font-size',\n fnsa: 'font-size-adjust',\n fnsp: 'font-synthesis-position',\n fnss: 'font-synthesis-style',\n fnssc: 'font-synthesis-small-caps',\n fnstr: 'font-stretch',\n fnsty: 'font-style',\n fnsw: 'font-synthesis-weight',\n fnsyn: 'font-synthesis',\n fnv: 'font-variant',\n fnva: 'font-variant-alternates',\n fnvc: 'font-variant-caps',\n fnve: 'font-variant-emoji',\n fnvea: 'font-variant-east-asian',\n fnvl: 'font-variant-ligatures',\n fnvn: 'font-variant-numeric',\n fnvp: 'font-variant-position',\n fnvs: 'font-variation-settings',\n fnw: 'font-weight',\n fw: 'font-weight',\n fx: 'flex',\n fxb: 'flex-basis',\n fxd: 'flex-direction',\n fxf: 'flex-flow',\n fxg: 'flex-grow',\n fxs: 'flex-shrink',\n fxw: 'flex-wrap',\n g: 'grid',\n ga: 'grid-area',\n gac: 'grid-auto-columns',\n gaf: 'grid-auto-flow',\n gap: 'gap',\n gar: 'grid-auto-rows',\n gc: 'grid-column',\n gce: 'grid-column-end',\n gcs: 'grid-column-start',\n gr: 'grid-row',\n gre: 'grid-row-end',\n grs: 'grid-row-start',\n gt: 'grid-template',\n gta: 'grid-template-areas',\n gtc: 'grid-template-columns',\n gtr: 'grid-template-rows',\n h: 'height',\n hc: 'hyphenate-character',\n hlc: 'hyphenate-limit-chars',\n hp: 'hanging-punctuation',\n hyp: 'hyphens',\n i: 'inset',\n ibe: 'inset-block-end',\n iblk: 'inset-block',\n ibsta: 'inset-block-start',\n ii: 'inset-inline',\n iie: 'inset-inline-end',\n iis: 'inset-inline-start',\n imgo: 'image-orientation',\n imgr: 'image-rendering',\n ins: 'inline-size',\n is: 'isolation',\n jc: 'justify-content',\n ji: 'justify-items',\n js: 'justify-self',\n l: 'left',\n lbrk: 'line-break',\n lh: 'line-height',\n lisp: 'list-style-position',\n ls: 'list-style',\n lsi: 'list-style-image',\n lst: 'list-style-type',\n lts: 'letter-spacing',\n m: 'margin',\n mb: 'margin-bottom',\n mbd: 'mix-blend-mode',\n mbe: 'margin-block-end',\n mblk: 'margin-block',\n mbs: 'max-block-size',\n mbsta: 'margin-block-start',\n mh: 'max-height',\n mibs: 'min-block-size',\n mie: 'margin-inline-end',\n mih: 'min-height',\n min: 'margin-inline',\n mis: 'max-inline-size',\n mista: 'margin-inline-start',\n misz: 'min-inline-size',\n miw: 'min-width',\n ml: 'margin-left',\n mr: 'margin-right',\n msk: 'mask',\n mskb: 'mask-border',\n mskbm: 'mask-border-mode',\n mskbo: 'mask-border-outset',\n mskbr: 'mask-border-repeat',\n mskbs: 'mask-border-slice',\n mskbsrc: 'mask-border-source',\n mskbw: 'mask-border-width',\n mskc: 'mask-clip',\n mskcp: 'mask-composite',\n mski: 'mask-image',\n mskm: 'mask-mode',\n msko: 'mask-origin',\n mskp: 'mask-position',\n mskr: 'mask-repeat',\n msks: 'mask-size',\n mskt: 'mask-type',\n mt: 'margin-top',\n mtd: 'math-depth',\n mts: 'math-style',\n mw: 'max-width',\n mxw: 'max-width',\n of: 'object-fit',\n ofa: 'offset-anchor',\n ofd: 'offset-distance',\n ofl: 'overflow',\n ofla: 'overflow-anchor',\n oflb: 'overflow-block',\n oflcm: 'overflow-clip-margin',\n ofli: 'overflow-inline',\n oflw: 'overflow-wrap',\n oflx: 'overflow-x',\n ofly: 'overflow-y',\n ofp: 'offset-path',\n ofpo: 'offset-position',\n ofr: 'offset-rotate',\n ofs: 'offset',\n olc: 'outline-color',\n oli: 'outline',\n olo: 'outline-offset',\n ols: 'outline-style',\n olw: 'outline-width',\n op: 'object-position',\n opc: 'opacity',\n ord: 'order',\n orp: 'orphans',\n orsby: 'overscroll-behavior-y',\n osrbb: 'overscroll-behavior-block',\n osrbh: 'overscroll-behavior',\n osrbi: 'overscroll-behavior-inline',\n osrbx: 'overscroll-behavior-x',\n p: 'padding',\n pb: 'padding-bottom',\n pbe: 'padding-block-end',\n pblk: 'padding-block',\n pbs: 'padding-block-start',\n pe: 'pointer-events',\n pg: 'page',\n pgba: 'page-break-after',\n pgbb: 'page-break-before',\n pgbi: 'page-break-inside',\n pi: 'padding-inline',\n pie: 'padding-inline-end',\n pis: 'padding-inline-start',\n pl: 'padding-left',\n plc: 'place-content',\n pli: 'place-items',\n pls: 'place-self',\n pos: 'position',\n pr: 'padding-right',\n prca: 'print-color-adjust',\n pso: 'perspective-origin',\n psp: 'perspective',\n pt: 'padding-top',\n pto: 'paint-order',\n qts: 'quotes',\n r: 'right',\n rbp: 'ruby-position',\n rgap: 'row-gap',\n rot: 'rotate',\n rsz: 'resize',\n s: 'scale',\n sbc: 'scrollbar-color',\n sbg: 'scrollbar-gutter',\n sbw: 'scrollbar-width',\n scrb: 'scroll-behavior',\n scrm: 'scroll-margin',\n scrmb: 'scroll-margin-bottom',\n scrmbe: 'scroll-margin-block-end',\n scrmblk: 'scroll-margin-block',\n scrmbs: 'scroll-margin-block-start',\n scrmi: 'scroll-margin-inline',\n scrmie: 'scroll-margin-inline-end',\n scrmis: 'scroll-margin-inline-start',\n scrml: 'scroll-margin-left',\n scrmr: 'scroll-margin-right',\n scrmt: 'scroll-margin-top',\n scrp: 'scroll-padding',\n scrpb: 'scroll-padding-bottom',\n scrpblk: 'scroll-padding-block',\n scrpbs: 'scroll-padding-block-start',\n scrpi: 'scroll-padding-inline',\n scrpie: 'scroll-padding-inline-end',\n scrpis: 'scroll-padding-inline-start',\n scrpl: 'scroll-padding-left',\n scrpr: 'scroll-padding-right',\n scrpt: 'scroll-padding-top',\n scrsa: 'scroll-snap-align',\n scrss: 'scroll-snap-stop',\n scrst: 'scroll-snap-type',\n shit: 'shape-image-threshold',\n shm: 'shape-margin',\n sho: 'shape-outside',\n srcpbe: 'scroll-padding-block-end',\n t: 'top',\n ta: 'text-align',\n tal: 'text-align-last',\n tbl: 'table-layout',\n tbs: 'tab-size',\n tcu: 'text-combine-upright',\n td: 'text-decoration',\n tdc: 'text-decoration-color',\n tdl: 'text-decoration-line',\n tds: 'text-decoration-style',\n tdsi: 'text-decoration-skip-ink',\n tdt: 'text-decoration-thickness',\n tec: 'text-emphasis-color',\n tep: 'text-emphasis-position',\n teph: 'text-emphasis',\n tes: 'text-emphasis-style',\n ti: 'text-indent',\n tj: 'text-justify',\n toa: 'touch-action',\n tol: 'text-overflow',\n tor: 'text-orientation',\n tra: 'transform',\n trab: 'transform-box',\n tran: 'transition',\n tranb: 'transition-behavior',\n trand: 'transition-delay',\n trandur: 'transition-duration',\n tranp: 'transition-property',\n trantf: 'transition-timing-function',\n trao: 'transform-origin',\n tras: 'transform-style',\n trd: 'text-rendering',\n trl: 'translate',\n tsh: 'text-shadow',\n ttr: 'text-transform',\n tuo: 'text-underline-offset',\n tup: 'text-underline-position',\n tw: 'text-wrap',\n unib: 'unicode-bidi',\n us: 'user-select',\n v: 'visibility',\n va: 'vertical-align',\n w: 'width',\n wc: 'will-change',\n wd: 'widows',\n wlc: '-webkit-line-clamp',\n wrb: 'word-break',\n wrs: 'word-spacing',\n wrtm: 'writing-mode',\n ws: 'white-space',\n wsc: 'white-space-collapse',\n wtfc: '-webkit-text-fill-color',\n wts: '-webkit-text-stroke',\n wtsc: '-webkit-text-stroke-color',\n wtsw: '-webkit-text-stroke-width',\n z: 'z-index',\n zo: 'zoom',\n};\n\n// 1. Common Values (Global)\nexport const COMMON_VALUES: Record<string, string> = {\n // Constants\n in: 'inherit',\n ini: 'initial',\n un: 'unset',\n rv: 'revert',\n n: 'none',\n a: 'auto',\n\n // Align / Directions (Shared across text-align, float, clear, position, etc.)\n t: 'top',\n b: 'bottom',\n l: 'left',\n r: 'right',\n c: 'center',\n m: 'middle',\n j: 'justify',\n s: 'start',\n e: 'end',\n tr: 'transparent',\n cc: 'currentColor',\n\n // Sizes\n minc: 'min-content',\n maxc: 'max-content',\n fitc: 'fit-content',\n\n // Styles\n sol: 'solid',\n das: 'dashed',\n dot: 'dotted',\n dub: 'double',\n\n // Visibility\n vis: 'visible',\n h: 'hidden',\n col: 'collapse',\n};\n\n// 2. Property Specific Values\nexport const SPECIFIC_VALUES: Record<string, Record<string, string>> = {\n // align-content\n 'ac': {\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'n': 'normal',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'sp': 'space-between',\n 'sa': 'space-around',\n 'se': 'space-evenly',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // accent-color\n 'acc': {\n 'u': 'unset',\n },\n\n // align-items\n 'ai': {\n 'n': 'normal',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // animation-composition\n 'anic': {\n 'r': 'replace',\n 'a': 'add',\n 'ac': 'accumulate',\n 'ra': 'replace, add',\n 'aac': 'add, accumulate',\n 'raac': 'replace, add, accumulate',\n },\n\n // animation-direction\n 'anidi': {\n 'r': 'reverse',\n 'a': 'alternate',\n 'ar': 'alternate-reverse',\n 'nr': 'normal, reverse',\n 'arn': 'alternate, reverse, normal',\n },\n\n // animation-fill-mode\n 'anifm': {\n 'f': 'forwards',\n 'b': 'backwards',\n 'nb': 'none, backwards',\n 'fbn': 'both, forwards, none',\n },\n\n // animation-name\n 'anin': {\n 's': 'slide',\n },\n\n // animation-play-state\n 'anips': {\n 'p': 'paused',\n 'r': 'running',\n },\n\n // animation-timing-function\n 'anitf': {\n 'ei': 'ease-in',\n 'eo': 'ease-out',\n 'eio': 'ease-in-out',\n 'l': 'linear',\n 'ss': 'step-start',\n 'se': 'step-end',\n },\n\n // appearance\n 'ap': {\n 'mb': 'menulist-button',\n 'tf': 'textfield',\n 'b': 'button',\n 'c': 'checkbox',\n },\n\n // aspect-ratio\n 'ar': {\n 's': '1 / 1',\n 'v': '16 / 9',\n },\n\n // align-self\n 'as': {\n 'n': 'normal',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // border\n 'bd': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-end-style\n 'bdbles': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-start-style\n 'bdblss': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-block-style\n 'bdblst': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // box-decoration-break\n 'bdbr': {\n 'c': 'clone',\n 's': 'slice',\n },\n\n // border-bottom-style\n 'bdbst': {\n 'd': 'dotted',\n 'ds': 'dashed',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'i': 'inset',\n 'o': 'outset',\n },\n\n // border-bottom-width\n 'bdbw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-collapse\n 'bdcl': {\n 's': 'separate',\n 'c': 'collapse',\n },\n\n // border-image-repeat\n 'bdir': {\n 'st': 'stretch',\n 'r': 'repeat',\n 'rn': 'round',\n 's': 'space',\n },\n\n // border-left-width\n 'bdlw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-right-style\n 'bdrs': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-right-width\n 'bdrw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-style\n 'bds': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-top-style\n 'bdts': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // border-top-width\n 'bdtw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // border-width\n 'bdw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // background-attachment\n 'bga': {\n 's': 'scroll',\n 'f': 'fixed',\n 'l': 'local',\n },\n\n // background-blend-mode\n 'bgbm': {\n 'n': 'normal',\n 'm': 'multiply',\n 's': 'screen',\n 'o': 'overlay',\n 'd': 'darken',\n 'l': 'lighten',\n 'cd': 'color-dodge',\n 'i': 'color-burn',\n 'hl': 'hard-light',\n 'sl': 'soft-light',\n 'di': 'difference',\n 'e': 'exclusion',\n 'h': 'hue',\n 'sa': 'saturation',\n 'c': 'color',\n 'lu': 'luminosity',\n },\n\n // background-color\n 'bgc': {\n 't': 'transparent',\n 'c': 'currentcolor',\n },\n\n // background-clip\n 'bgcl': {\n 'bb': 'border-box',\n 'pb': 'padding-box',\n 'cb': 'content-box',\n 't': 'text',\n },\n\n // background-origin\n 'bgo': {\n 'bb': 'border-box',\n 'pb': 'padding-box',\n 'cb': 'content-box',\n },\n\n // background-position\n 'bgp': {\n 't': 'top',\n 'b': 'bottom',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'lt': 'left top',\n 'ct': 'center top',\n 'rt': 'right top',\n 'lc': 'left center',\n 'cc': 'center center',\n 'rc': 'right center',\n 'lb': 'left bottom',\n 'cb': 'center bottom',\n 'rb': 'right bottom',\n },\n\n // background-position-x\n 'bgpx': {\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n },\n\n // background-position-y\n 'bgpy': {\n 't': 'top',\n 'b': 'bottom',\n 'c': 'center',\n },\n\n // background-repeat\n 'bgr': {\n 'r': 'repeat',\n 'x': 'repeat-x',\n 'y': 'repeat-y',\n 's': 'space',\n 'rn': 'round',\n 'n': 'no-repeat',\n 'rs': 'repeat space',\n 'rr': 'repeat repeat',\n 'nr': 'no-repeat round',\n },\n\n // background-size\n 'bgs': {\n 'c': 'contain',\n },\n\n // color\n 'c': {\n 'i': 'inherit',\n 't': 'transparent',\n },\n\n // cursor\n 'cr': {\n 'p': 'pointer',\n 'd': 'default',\n 'cm': 'context-menu',\n 'h': 'help',\n 'pg': 'progress',\n 'w': 'wait',\n 'c': 'cell',\n 't': 'text',\n 'vt': 'vertical-text',\n 'al': 'alias',\n 'cp': 'copy',\n 'mo': 'move',\n 'nd': 'no-drop',\n 'na': 'not-allowed',\n 'gr': 'grab',\n 'gb': 'grabbing',\n 'as': 'all-scroll',\n 'colr': 'col-resize',\n 'rr': 'row-resize',\n 'nr': 'n-resize',\n 'er': 'e-resize',\n 'sr': 's-resize',\n 'wr': 'w-resize',\n 'ner': 'ne-resize',\n 'ser': 'se-resize',\n 'swr': 'sw-resize',\n 'ewr': 'ew-resize',\n 'nsr': 'ns-resize',\n 'nesw': 'nesw-resize',\n 'nwse': 'nwse-resize',\n 'zi': 'zoom-in',\n 'zo': 'zoom-out',\n },\n\n // display\n 'd': {\n 'b': 'block',\n 'ib': 'inline-block',\n 'i': 'inline',\n 'f': 'flex',\n 'if': 'inline-flex',\n 't': 'table',\n 'it': 'inline-table',\n 'tcp': 'table-caption',\n 'tcell': 'table-cell',\n 'tcol': 'table-column',\n 'tcolg': 'table-column-group',\n 'tfg': 'table-footer-group',\n 'thg': 'table-header-group',\n 'trg': 'table-row-group',\n 'tr': 'table-row',\n 'fr': 'flow-root',\n 'g': 'grid',\n 'ig': 'inline-grid',\n 'c': 'contents',\n 'li': 'list-item',\n },\n\n // font-family\n 'ff': {\n 'a': 'ui-sans-serif, system-ui, sans-serif, \\'Apple Color Emoji\\', \\'Segoe UI Emoji\\', \\'Segoe UI Symbol\\', \\'Noto Color Emoji\\'',\n 's': 'ui-serif, Georgia, Cambria, \\'Times New Roman\\', Times, serif',\n 'm': 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\'Liberation Mono\\', \\'Courier New\\', monospace',\n },\n\n // float\n 'fl': {\n 'is': 'inline-start',\n 'ie': 'inline-end',\n 'r': 'right',\n 'l': 'left',\n },\n\n // flex\n 'fx': {\n 'i': '0 1 auto',\n 'a': '1 1 auto',\n },\n\n // flex-direction\n 'fxd': {\n 'r': 'row',\n 'rr': 'row-reverse',\n 'c': 'column',\n 'cr': 'column-reverse',\n },\n\n // flex-wrap\n 'fxw': {\n 'w': 'wrap',\n 'wr': 'wrap-reverse',\n 'n': 'nowrap',\n },\n\n // grid-auto-columns\n 'gac': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'mm': 'minmax(0, 1fr)',\n },\n\n // grid-auto-flow\n 'gaf': {\n 'r': 'row',\n 'c': 'column',\n 'd': 'dense',\n 'rd': 'row dense',\n 'cd': 'column dense',\n },\n\n // grid-auto-rows\n 'gar': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'mm': 'minmax(0, 1fr)',\n },\n\n // grid-column\n 'gc': {\n 'f': '1 / -1',\n },\n\n // grid-row\n 'gr': {\n 'f': '1 / -1',\n },\n\n // grid-template-columns\n 'gtc': {\n 's': 'subgrid',\n },\n\n // grid-template-rows\n 'gtr': {\n 's': 'subgrid',\n },\n\n // height\n 'h': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // hyphens\n 'hyp': {\n 'm': 'manual',\n },\n\n // isolation\n 'is': {\n 'i': 'isolate',\n },\n\n // justify-content\n 'jc': {\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'l': 'left',\n 'r': 'right',\n 'n': 'normal',\n 'sp': 'space-between',\n 'sa': 'space-around',\n 'se': 'space-evenly',\n 'st': 'stretch',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // justify-items\n 'ji': {\n 'n': 'normal',\n 'st': 'stretch',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'l': 'left',\n 'r': 'right',\n 'b': 'baseline',\n 'fb': 'first baseline',\n 'lb': 'last baseline',\n 'lr': 'legacy right',\n 'll': 'legacy left',\n 'lc': 'legacy center',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // justify-self\n 'js': {\n 'n': 'normal',\n 'st': 'stretch',\n 'c': 'center',\n 's': 'start',\n 'e': 'end',\n 'fs': 'flex-start',\n 'fe': 'flex-end',\n 'ss': 'self-start',\n 'se': 'self-end',\n 'l': 'left',\n 'r': 'right',\n 'b': 'baseline',\n 'sc': 'safe center',\n 'uc': 'unsafe center',\n },\n\n // list-style-position\n 'lisp': {\n 'i': 'inside',\n 'o': 'outside',\n },\n\n // list-style\n 'ls': {\n 'i': 'inside',\n 'di': 'disc',\n 'c': 'circle',\n 's': 'square',\n 'de': 'decimal',\n 'g': 'georgian',\n 'tci': 'trad-chinese-informal',\n 'k': 'kannada',\n },\n\n // list-style-type\n 'lst': {\n 'di': 'disc',\n 'c': 'circle',\n 's': 'square',\n 'de': 'decimal',\n 'g': 'georgian',\n 'tci': 'trad-chinese-informal',\n 'k': 'kannada',\n },\n\n // letter-spacing\n 'lts': {\n 'n': 'normal',\n },\n\n // mix-blend-mode\n 'mbd': {\n 'n': 'normal',\n 'm': 'multiply',\n 's': 'screen',\n 'o': 'overlay',\n 'd': 'darken',\n 'l': 'lighten',\n 'cd': 'color-dodge',\n 'i': 'color-burn',\n 'hl': 'hard-light',\n 'sl': 'soft-light',\n 'di': 'difference',\n 'e': 'exclusion',\n 'h': 'hue',\n 'sa': 'saturation',\n 'c': 'color',\n 'lu': 'luminosity',\n },\n\n // min-height\n 'mih': {\n 'f': '100%',\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // min-width\n 'miw': {\n 'f': '100%',\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n },\n\n // object-fit\n 'of': {\n 'c': 'contain',\n 'cv': 'cover',\n 'f': 'fill',\n 'sd': 'scale-down',\n },\n\n // overflow-wrap\n 'oflw': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // overflow-x\n 'oflx': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // overflow-y\n 'ofly': {\n 'c': 'clip',\n 's': 'scroll',\n },\n\n // outline-color\n 'olc': {\n 'i': 'inherit',\n 'c': 'currentColor',\n 't': 'transparent',\n },\n\n // outline-style\n 'ols': {\n 'dt': 'dotted',\n 'ds': 'dashed',\n 's': 'solid',\n 'db': 'double',\n 'g': 'groove',\n 'r': 'ridge',\n 'in': 'inset',\n 'out': 'outset',\n },\n\n // outline-width\n 'olw': {\n 't': 'thin',\n 'm': 'medium',\n 'th': 'thick',\n },\n\n // object-position\n 'op': {\n 'b': 'bottom',\n 'c': 'center',\n 'l': 'left',\n 'r': 'right',\n 't': 'top',\n 'lb': 'left bottom',\n 'lt': 'left top',\n 'rb': 'right bottom',\n 'rt': 'right top',\n },\n\n // overscroll-behavior-y\n 'orsby': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-block\n 'osrbb': {\n 'c': 'contain',\n },\n\n // overscroll-behavior\n 'osrbh': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-inline\n 'osrbi': {\n 'c': 'contain',\n },\n\n // overscroll-behavior-x\n 'osrbx': {\n 'c': 'contain',\n },\n\n // padding-inline\n 'pi': {\n 's': 'start',\n 'c': 'center',\n 'e': 'end',\n 'b': 'baseline',\n 'st': 'stretch',\n },\n\n // position\n 'pos': {\n 's': 'static',\n 'f': 'fixed',\n 'a': 'absolute',\n 'r': 'relative',\n 'st': 'sticky',\n },\n\n // resize\n 'rsz': {\n 'b': 'both',\n 'h': 'horizontal',\n 'v': 'vertical',\n },\n\n // text-align\n 'ta': {\n 's': 'start',\n 'e': 'end',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'j': 'justify',\n 'mp': 'match-parent',\n 'mc': '-moz-center',\n 'wc': '-webkit-center',\n },\n\n // text-align-last\n 'tal': {\n 's': 'start',\n 'e': 'end',\n 'l': 'left',\n 'r': 'right',\n 'c': 'center',\n 'j': 'justify',\n },\n\n // text-decoration\n 'td': {\n 'u': 'underline',\n },\n\n // text-decoration-line\n 'tdl': {\n 'u': 'underline',\n 'o': 'overline',\n 'lt': 'line-through',\n 'b': 'blink',\n },\n\n // text-decoration-style\n 'tds': {\n 'db': 'double',\n 'dt': 'dotted',\n 'ds': 'dashed',\n 'w': 'wavy',\n },\n\n // text-decoration-thickness\n 'tdt': {\n 'ff': 'from-font',\n },\n\n // text-emphasis-position\n 'tep': {\n 'or': 'over right',\n 'ol': 'over left',\n 'ur': 'under right',\n 'ul': 'under left',\n 'lo': 'left over',\n 'ru': 'right under',\n 'lu': 'left under',\n },\n\n // text-justify\n 'tj': {\n 'iw': 'inter-word',\n 'ic': 'inter-character',\n 'd': 'distribute',\n },\n\n // touch-action\n 'toa': {\n 'p': 'pan-x',\n 'py': 'pan-y',\n 'pm': 'pan-x pan-y',\n 'pi': 'pinch-zoom',\n },\n\n // text-overflow\n 'tol': {\n 'c': 'clip',\n 'e': 'ellipsis',\n },\n\n // text-orientation\n 'tor': {\n 'm': 'mixed',\n 'u': 'upright',\n 'sr': 'sideways-right',\n 'sl': 'sideways-left',\n 's': 'sideways',\n 'ugo': 'use-glyph-orientation',\n },\n\n // text-rendering\n 'trd': {\n 'op': 'optimizeSpeed',\n 'ol': 'optimizeLegibility',\n 'g': 'geometricPrecision',\n },\n\n // text-transform\n 'ttr': {\n 'c': 'capitalize',\n 'u': 'uppercase',\n 'l': 'lowercase',\n 'fw': 'full-width',\n 'fsk': 'full-size-kana',\n },\n\n // text-underline-position\n 'tup': {\n 'u': 'under',\n 'l': 'left',\n 'r': 'right',\n 'ul': 'under left',\n 'ru': 'right under',\n },\n\n // text-wrap\n 'tw': {\n 'w': 'wrap',\n 'n': 'nowrap',\n 'b': 'balance',\n 'p': 'pretty',\n },\n\n // user-select\n 'us': {\n 't': 'text',\n 'all': 'all',\n 'c': 'contain',\n },\n\n // visibility\n 'v': {\n 'c': 'collapse',\n },\n\n // vertical-align\n 'va': {\n 'bl': 'baseline',\n 't': 'top',\n 'm': 'middle',\n 'b': 'bottom',\n 'tt': 'text-top',\n 'tb': 'text-bottom',\n 'sb': 'sub',\n 'sp': 'super',\n },\n\n // width\n 'w': {\n 'mic': 'min-content',\n 'mac': 'max-content',\n 'fc': 'fit-content',\n 'f': '100%',\n },\n\n // will-change\n 'wc': {\n 'sp': 'scroll-position',\n 'c': 'contents',\n 't': 'transform',\n },\n\n // -webkit-text-stroke-width\n 'wtsw': {\n 'm': 'medium',\n 't': 'thick',\n },\n\n};\n\n// Helper to merge extended alignment values\nSPECIFIC_VALUES.ji = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.js = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.pc = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.pi = SPECIFIC_VALUES.jc;\nSPECIFIC_VALUES.ps = SPECIFIC_VALUES.jc;\n","import { mitt } from './events'\nimport { parseClassName } from './parser'\nimport {\n SHORT_PROPERTIES as BUILTIN_SHORT_PROPERTIES,\n COMMON_VALUES as BUILTIN_COMMON_VALUES,\n SPECIFIC_VALUES as BUILTIN_SPECIFIC_VALUES,\n} from './dictionary'\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 hashClassName?: boolean\n dictionaryImport?: boolean | string\n cache?: {\n styleId?: string\n version?: string\n compression?: boolean\n debounceMs?: number\n sizeLast?: number\n loadOnInit?: boolean\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 sizeLast: number\n loadOnInit: boolean\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\ntype XCSSKeySyncPayload = {\n source: string\n sizeLast: number\n entries: [string, string][]\n}\n\ntype XCSSKeyRegistry = {\n sizeLast: number\n entries: [string, string][]\n}\n\ntype NodeBuiltinProcess = typeof process & {\n getBuiltinModule?: (id: string) => unknown\n}\n\nconst BUILTIN_DICTIONARY: XCSSDictionaryData = {\n SHORT_PROPERTIES: BUILTIN_SHORT_PROPERTIES,\n COMMON_VALUES: BUILTIN_COMMON_VALUES,\n SPECIFIC_VALUES: BUILTIN_SPECIFIC_VALUES,\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 const sizeLast =\n typeof config?.sizeLast === 'number' && Number.isFinite(config.sizeLast) && config.sizeLast >= 0\n ? Math.floor(config.sizeLast)\n : 1000\n const loadOnInit = config?.loadOnInit ?? false\n\n return { styleId, version, compression, debounceMs, sizeLast, loadOnInit }\n}\n\nconst createCacheKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_cache_${cache.version}`\n// Key sync nhẹ cho cross-tab: delta sync cho key/value mới phát sinh.\nconst createKeySyncKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_ks_${cache.version}`\nconst createKeySyncChannelName = (cache: XCSSCacheConfig): string => `${cache.styleId}_bc_${cache.version}`\nconst createKeyRegistryKey = (cache: XCSSCacheConfig): string => `${cache.styleId}_kr_${cache.version}`\nconst createKeyRegistryLockName = (cache: XCSSCacheConfig): string => `${cache.styleId}_kr_lock_${cache.version}`\n\nconst readKeyRegistry = (storage: Storage | null, key: string): XCSSKeyRegistry => {\n if (!storage) return { sizeLast: 0, entries: [] }\n\n try {\n const raw = storage.getItem(key)\n if (!raw) return { sizeLast: 0, entries: [] }\n\n const parsed = JSON.parse(raw) as {\n sizeLast?: unknown\n entries?: unknown\n s?: unknown\n e?: unknown\n }\n\n const sizeSource = typeof parsed.sizeLast === 'number'\n ? parsed.sizeLast\n : typeof parsed.s === 'number'\n ? parsed.s\n : 0\n\n const entriesSource = Array.isArray(parsed.entries)\n ? parsed.entries\n : Array.isArray(parsed.e)\n ? parsed.e\n : []\n\n const entries = entriesSource.filter((entry): entry is [string, string] => {\n return (\n Array.isArray(entry) &&\n entry.length === 2 &&\n typeof entry[0] === 'string' &&\n typeof entry[1] === 'string'\n )\n })\n\n return {\n sizeLast: Number.isFinite(sizeSource) && sizeSource >= 0 ? Math.floor(sizeSource) : 0,\n entries,\n }\n } catch (_error) {\n return { sizeLast: 0, entries: [] }\n }\n}\n\nconst writeKeyRegistry = (storage: Storage | null, key: string, registry: XCSSKeyRegistry): void => {\n if (!storage) return\n\n try {\n storage.setItem(\n key,\n JSON.stringify({\n s: registry.sizeLast,\n e: registry.entries,\n }),\n )\n } catch (_error) {\n // Bỏ qua lỗi ghi localStorage (quota, private mode, ...)\n }\n}\n\nconst canUseWritableLocalStorage = (): boolean => {\n if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') return false\n\n try {\n const key = '__xcss_cache_probe__'\n window.localStorage.setItem(key, '1')\n window.localStorage.removeItem(key)\n return true\n } catch (_error) {\n return false\n }\n}\n\n// Kiểm tra Web Locks API có khả dụng không\nconst canUseWebLocks = (): boolean =>\n typeof navigator !== 'undefined' &&\n typeof navigator.locks !== 'undefined' &&\n typeof navigator.locks.request === 'function'\n\nconst canUseCacheRuntime = (): boolean => canUseWritableLocalStorage()\n\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 normalizeKeySyncPayload = (value: unknown): XCSSKeySyncPayload | null => {\n if (!value || typeof value !== 'object') return null\n\n const obj = value as Partial<XCSSKeySyncPayload> & {\n s?: unknown\n k?: unknown\n }\n\n const entriesSource = Array.isArray(obj.entries)\n ? obj.entries\n : Array.isArray(obj.k)\n ? obj.k\n : null\n\n if (!entriesSource) return null\n\n const entries = entriesSource.filter((entry): entry is [string, string] => {\n return (\n Array.isArray(entry) &&\n entry.length === 2 &&\n typeof entry[0] === 'string' &&\n typeof entry[1] === 'string'\n )\n })\n\n const sizeLast = typeof obj.sizeLast === 'number'\n ? obj.sizeLast\n : typeof obj.s === 'number'\n ? obj.s\n : null\n\n if (sizeLast === null) return null\n\n return {\n source: typeof obj.source === 'string' ? obj.source : '',\n sizeLast,\n entries,\n }\n}\n\nconst skipWhitespace = (source: string, start: number): number => {\n let index = start\n while (index < source.length && /\\s/.test(source[index])) {\n index++\n }\n return index\n}\n\nconst findMatchingBrace = (source: string, start: number): number => {\n let depth = 0\n let quote: '\"' | \"'\" | '`' | null = null\n let escaped = false\n let lineComment = false\n let blockComment = false\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n\n if (lineComment) {\n if (char === '\\n') {\n lineComment = false\n }\n continue\n }\n\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n\n if (quote) {\n if (escaped) {\n escaped = false\n continue\n }\n if (char === '\\\\') {\n escaped = true\n continue\n }\n if (char === quote) {\n quote = null\n }\n continue\n }\n\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n\n if (char === '{') {\n depth++\n continue\n }\n\n if (char === '}') {\n depth--\n if (depth === 0) {\n return index\n }\n }\n }\n\n return -1\n}\n\nconst extractExportedObjectLiteral = (source: string, marker: string): string | null => {\n const index = source.indexOf(marker)\n if (index === -1) return null\n\n const objectStart = skipWhitespace(source, index + marker.length)\n if (source[objectStart] !== '{') return null\n\n const objectEnd = findMatchingBrace(source, objectStart)\n if (objectEnd === -1) return null\n\n return source.slice(objectStart, objectEnd + 1)\n}\n\nconst skipWhitespaceAndComments = (source: string, start: number): number => {\n let index = start\n\n while (index < source.length) {\n const char = source[index]\n const next = source[index + 1]\n\n if (/\\s/.test(char)) {\n index++\n continue\n }\n\n if (char === '/' && next === '/') {\n index += 2\n while (index < source.length && source[index] !== '\\n') {\n index++\n }\n continue\n }\n\n if (char === '/' && next === '*') {\n index += 2\n while (index < source.length) {\n if (source[index] === '*' && source[index + 1] === '/') {\n index += 2\n break\n }\n index++\n }\n continue\n }\n\n break\n }\n\n return index\n}\n\nconst parseQuotedString = (\n source: string,\n start: number,\n): { value: string, end: number } | null => {\n const quote = source[start]\n if (quote !== '\"' && quote !== \"'\") return null\n\n let value = ''\n let index = start + 1\n\n while (index < source.length) {\n const char = source[index]\n\n if (char === '\\\\') {\n index++\n if (index >= source.length) return null\n\n const escaped = source[index]\n const escapeMap: Record<string, string> = {\n n: '\\n',\n r: '\\r',\n t: '\\t',\n b: '\\b',\n f: '\\f',\n v: '\\v',\n '\\\\': '\\\\',\n '\"': '\"',\n \"'\": \"'\",\n }\n\n value += escapeMap[escaped] ?? escaped\n index++\n continue\n }\n\n if (char === quote) {\n return { value, end: index + 1 }\n }\n\n value += char\n index++\n }\n\n return null\n}\n\nconst parseIdentifierToken = (\n source: string,\n start: number,\n): { value: string, end: number } | null => {\n const first = source[start]\n if (!first || !/[A-Za-z_$]/.test(first)) {\n return null\n }\n\n let end = start + 1\n while (end < source.length && /[A-Za-z0-9_$]/.test(source[end])) {\n end++\n }\n\n return {\n value: source.slice(start, end),\n end,\n }\n}\n\nconst parsePlainObjectLiteral = (expression: string): Record<string, unknown> | null => {\n const parseValue = (\n source: string,\n start: number,\n ): { value: unknown, end: number } | null => {\n const index = skipWhitespaceAndComments(source, start)\n const char = source[index]\n\n if (char === '{') {\n return parseObject(source, index)\n }\n\n return parseQuotedString(source, index)\n }\n\n const parseObject = (\n source: string,\n start: number,\n ): { value: Record<string, unknown>, end: number } | null => {\n let index = skipWhitespaceAndComments(source, start)\n if (source[index] !== '{') return null\n\n index++\n const objectValue: Record<string, unknown> = {}\n\n while (index < source.length) {\n index = skipWhitespaceAndComments(source, index)\n\n if (source[index] === '}') {\n return {\n value: objectValue,\n end: index + 1,\n }\n }\n\n const keyToken =\n parseQuotedString(source, index) ||\n parseIdentifierToken(source, index)\n if (!keyToken) return null\n\n index = skipWhitespaceAndComments(source, keyToken.end)\n if (source[index] !== ':') {\n return null\n }\n\n index++\n const valueToken = parseValue(source, index)\n if (!valueToken) return null\n\n objectValue[keyToken.value] = valueToken.value\n index = skipWhitespaceAndComments(source, valueToken.end)\n\n if (source[index] === ',') {\n index++\n continue\n }\n\n if (source[index] === '}') {\n return {\n value: objectValue,\n end: index + 1,\n }\n }\n\n return null\n }\n\n return null\n }\n\n const parsed = parseObject(expression, 0)\n if (!parsed) {\n return null\n }\n\n return skipWhitespaceAndComments(expression, parsed.end) === expression.length\n ? parsed.value\n : null\n}\n\nconst parseExternalDictionarySource = (sourceCode: string): XCSSDictionaryData | null => {\n const shortLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const SHORT_PROPERTIES =',\n )\n const commonLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const COMMON_VALUES =',\n )\n const specificLiteral = extractExportedObjectLiteral(\n sourceCode,\n 'export const SPECIFIC_VALUES =',\n )\n\n if (shortLiteral && commonLiteral && specificLiteral) {\n return resolveDictionaryData({\n SHORT_PROPERTIES: parsePlainObjectLiteral(shortLiteral),\n COMMON_VALUES: parsePlainObjectLiteral(commonLiteral),\n SPECIFIC_VALUES: parsePlainObjectLiteral(specificLiteral),\n })\n }\n\n const defaultLiteral = extractExportedObjectLiteral(sourceCode, 'export default')\n if (!defaultLiteral) return null\n\n return resolveDictionaryData(parsePlainObjectLiteral(defaultLiteral))\n}\n\nconst readDictionarySourceFromNode = async (source: string): Promise<string | null> => {\n const nodeProcess =\n typeof process !== 'undefined'\n ? (process as NodeBuiltinProcess)\n : null\n\n if (!nodeProcess || typeof nodeProcess.getBuiltinModule !== 'function') {\n return null\n }\n\n const isFileUrl = source.startsWith('file:')\n const isPathLike =\n source.startsWith('/') ||\n source.startsWith('./') ||\n source.startsWith('../') ||\n /^[A-Za-z]:[\\\\/]/.test(source)\n\n if (!isFileUrl && !isPathLike) {\n return null\n }\n\n const fs = nodeProcess.getBuiltinModule('node:fs/promises') as {\n readFile?: (path: string | URL, encoding: BufferEncoding) => Promise<string>\n } | null\n\n if (!fs?.readFile) {\n return null\n }\n\n return fs.readFile(isFileUrl ? new URL(source) : source, 'utf8')\n}\n\nconst readExternalDictionarySource = async (source: string): Promise<string> => {\n const nodeSource = await readDictionarySourceFromNode(source)\n if (typeof nodeSource === 'string') {\n return nodeSource\n }\n\n if (typeof fetch === 'function') {\n const response = await fetch(source)\n if (!response.ok) {\n throw new Error(`XCSS: Failed to fetch dictionary module: ${response.status}`)\n }\n return response.text()\n }\n\n throw new Error('XCSS: fetch is not supported in this runtime')\n}\n\nconst loadExternalDictionary = async (source: string): Promise<XCSSDictionaryData> => {\n const sourceCode = await readExternalDictionarySource(source)\n const data = parseExternalDictionarySource(sourceCode)\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 plain-object SHORT_PROPERTIES, COMMON_VALUES and SPECIFIC_VALUES'\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 // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n // Chèn @layer đồng bộ vào textContent TRƯỚC khi gắn vào DOM — tránh CLS\n const layerRule = `@layer ${layers.join(', ')};`\n styleElement.textContent = layerRule\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\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 hashClassName: config.hashClassName ?? true,\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\nconst normalizeBaseCssText = (base?: string | string[] | null): string => {\n if (Array.isArray(base)) return base.join('\\n')\n return base || ''\n}\n\nconst mergeRootCssText = (baseText: string, cachedText: string): string => {\n if (!baseText) return cachedText\n if (!cachedText) return baseText\n if (cachedText === baseText) return baseText\n if (cachedText.startsWith(baseText)) return cachedText\n return `${baseText}\\n${cachedText}`\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 hashClassName: true,\n dictionaryImport: true,\n cache: {\n styleId: 'fwkui',\n version: 'v1',\n compression: true,\n debounceMs: 1000,\n sizeLast: 1000,\n loadOnInit: false,\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 hashClassName = true,\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 const shouldHashOutputClassName = hashClassName !== false\n\n const cacheConfig = resolveCacheConfig(cacheOptions)\n const cacheKey = createCacheKey(cacheConfig)\n const keySyncKey = createKeySyncKey(cacheConfig)\n const keySyncChannelName = createKeySyncChannelName(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 applyDictionary(BUILTIN_DICTIONARY)\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 const browserWindow = isBrowser ? window : null\n const browserStorage = browserWindow?.localStorage || null\n const cacheSupported = isBrowser && canUseCacheRuntime()\n const cacheEnabled = cacheConfig.loadOnInit && cacheSupported\n const cacheStorage = cacheEnabled ? browserStorage : null\n let docRoot: Document | ShadowRoot | null = null\n const baseCssText = normalizeBaseCssText(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 const CSS_KEY_SOURCES = new Map<string, string>()\n const CSS_VALUES = new Set<string>(); // Set song song để check trùng O(1)\n\n const registerCssKey = (source: string, value: string) => {\n CSS_KEYS.set(source, value)\n CSS_KEY_SOURCES.set(value, source)\n CSS_VALUES.add(value)\n }\n\n const resolveSourceClassName = (value: string): string =>\n shouldHashOutputClassName ? CSS_KEY_SOURCES.get(value) || value : value\n const keyRegistryKey = createKeyRegistryKey(cacheConfig)\n const keyRegistryLockName = createKeyRegistryLockName(cacheConfig)\n let sizeLast = cacheConfig.sizeLast;\n const pendingKeyAssignments = new Set<string>()\n let keyAssignmentScheduled = false\n let keyAssignmentInFlight: Promise<void> | null = null\n\n // Flag: lần render đầu tiên xử lý CSS đồng bộ để giảm CLS\n let isFirstRenderBatch = true;\n const syncSourceId = `xcss_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`\n const pendingKeySyncEntries: [string, string][] = []\n let pendingKeySyncScheduled = false\n let keySyncBroadcastChannel: BroadcastChannel | null = null\n\n const mergeSizeLast = (nextSizeLast?: number) => {\n if (typeof nextSizeLast === 'number' && Number.isFinite(nextSizeLast) && nextSizeLast > sizeLast) {\n sizeLast = nextSizeLast\n }\n }\n\n const mergeKnownKeys = (entries?: [string, string][]) => {\n if (!entries) return\n\n entries.forEach(([source, value]) => {\n const currentValue = CSS_KEYS.get(source)\n if (currentValue === value) return\n if (currentValue) return\n if (CSS_VALUES.has(value) && CSS_KEY_SOURCES.get(value) !== source) return\n registerCssKey(source, value)\n })\n }\n\n if (cacheEnabled) {\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n }\n\n const mergeKeySyncPayload = (payload: XCSSKeySyncPayload | null) => {\n if (!payload) return\n if (payload.source && payload.source === syncSourceId) return\n\n mergeSizeLast(payload.sizeLast)\n\n payload.entries.forEach(([key, value]) => {\n const currentValue = CSS_KEYS.get(key)\n if (currentValue === value) return\n if (currentValue || CSS_VALUES.has(value)) return\n registerCssKey(key, value)\n })\n }\n\n const flushPendingKeySyncEntries = () => {\n pendingKeySyncScheduled = false\n if (!isBrowser || pendingKeySyncEntries.length === 0) return\n\n const payload: XCSSKeySyncPayload = {\n source: syncSourceId,\n sizeLast,\n entries: pendingKeySyncEntries.splice(0, pendingKeySyncEntries.length),\n }\n\n if (keySyncBroadcastChannel) {\n try {\n keySyncBroadcastChannel.postMessage(payload)\n return\n } catch (_error) {\n keySyncBroadcastChannel = null\n }\n }\n\n if (!cacheStorage) return\n\n try {\n cacheStorage.setItem(keySyncKey, JSON.stringify(payload))\n } catch (_error) {\n // ignore key-sync write failure\n }\n }\n\n const scheduleKeySync = (entry: [string, string]) => {\n if (!isBrowser || !cacheEnabled) return\n\n pendingKeySyncEntries.push(entry)\n if (pendingKeySyncScheduled) return\n pendingKeySyncScheduled = true\n queueMicrotask(flushPendingKeySyncEntries)\n }\n\n const allocateLocalKey = (source: string): string => {\n let key: string\n do {\n key = 'D' + (sizeLast++).toString(32).toUpperCase()\n } while (CSS_VALUES.has(key))\n\n registerCssKey(source, key)\n return key\n }\n\n const allocatePersistentKeySync = (source: string): string => {\n const current = CSS_KEYS.get(source)\n if (current) return current\n\n if (!cacheEnabled || !cacheStorage) {\n return allocateLocalKey(source)\n }\n\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n const registryMap = new Map<string, string>(registry.entries)\n const registryValues = new Set<string>(registry.entries.map(([, value]) => value))\n\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n\n const existing = registryMap.get(source)\n if (existing) {\n registerCssKey(source, existing)\n return existing\n }\n\n let nextSizeLast = Math.max(sizeLast, registry.sizeLast, cacheConfig.sizeLast)\n let key: string\n do {\n key = 'D' + (nextSizeLast++).toString(32).toUpperCase()\n } while (registryValues.has(key) || CSS_VALUES.has(key))\n\n registryMap.set(source, key)\n registryValues.add(key)\n registerCssKey(source, key)\n mergeSizeLast(nextSizeLast)\n\n writeKeyRegistry(cacheStorage, keyRegistryKey, {\n sizeLast: nextSizeLast,\n entries: [...registry.entries, [source, key]],\n })\n\n scheduleKeySync([source, key])\n return key\n }\n\n const allocateKeyBatch = async (sources: string[]): Promise<void> => {\n if (!cacheEnabled || !cacheStorage || sources.length === 0) return\n\n const commit = (): [string, string][] => {\n const registry = readKeyRegistry(cacheStorage, keyRegistryKey)\n const registryMap = new Map<string, string>(registry.entries)\n const registryValues = new Set<string>(registry.entries.map(([, value]) => value))\n\n mergeSizeLast(registry.sizeLast)\n mergeKnownKeys(registry.entries)\n\n let nextSizeLast = Math.max(sizeLast, registry.sizeLast, cacheConfig.sizeLast)\n const newEntries: [string, string][] = []\n\n sources.forEach((source) => {\n if (CSS_KEYS.has(source)) return\n\n const existing = registryMap.get(source)\n if (existing) {\n registerCssKey(source, existing)\n return\n }\n\n let key: string\n do {\n key = 'D' + (nextSizeLast++).toString(32).toUpperCase()\n } while (registryValues.has(key) || CSS_VALUES.has(key))\n\n registryMap.set(source, key)\n registryValues.add(key)\n newEntries.push([source, key])\n registerCssKey(source, key)\n })\n\n mergeSizeLast(nextSizeLast)\n\n if (newEntries.length === 0) return []\n\n writeKeyRegistry(cacheStorage, keyRegistryKey, {\n sizeLast: nextSizeLast,\n entries: [...registry.entries, ...newEntries],\n })\n\n return newEntries\n }\n\n let assignedEntries: [string, string][] = []\n if (canUseWebLocks()) {\n try {\n await navigator.locks.request(keyRegistryLockName, async () => {\n assignedEntries = commit()\n })\n } catch (_error) {\n assignedEntries = commit()\n }\n } else {\n assignedEntries = commit()\n }\n\n if (assignedEntries.length === 0) return\n\n assignedEntries.forEach((entry) => scheduleKeySync(entry))\n processObservedItems(assignedEntries.map(([source]) => source))\n triggerSave()\n }\n\n const runPendingKeyAssignments = async (): Promise<void> => {\n if (!cacheEnabled || !isBrowser) return\n if (keyAssignmentInFlight) return keyAssignmentInFlight\n\n keyAssignmentInFlight = (async () => {\n while (pendingKeyAssignments.size > 0) {\n const batch = Array.from(pendingKeyAssignments)\n pendingKeyAssignments.clear()\n await allocateKeyBatch(batch)\n }\n })().finally(() => {\n keyAssignmentInFlight = null\n })\n\n return keyAssignmentInFlight\n }\n\n const scheduleKeyAssignment = (source: string) => {\n if (!cacheEnabled || !isBrowser) return\n pendingKeyAssignments.add(source)\n if (keyAssignmentScheduled) return\n keyAssignmentScheduled = true\n queueMicrotask(() => {\n keyAssignmentScheduled = false\n void runPendingKeyAssignments()\n })\n }\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot, cacheConfig.styleId)\n }\n\n if (cacheEnabled && isBrowser && typeof BroadcastChannel !== 'undefined') {\n try {\n keySyncBroadcastChannel = new BroadcastChannel(keySyncChannelName)\n keySyncBroadcastChannel.addEventListener('message', (event: MessageEvent) => {\n mergeKeySyncPayload(normalizeKeySyncPayload(event.data))\n })\n } catch (_error) {\n keySyncBroadcastChannel = null\n }\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 cacheStorage?.setItem(cacheKey, value)\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n\n const removeCacheIfUnchanged = (expectedRaw?: string) => {\n if (!isBrowser || !cacheStorage) return\n\n if (typeof expectedRaw === 'string') {\n const currentRaw = cacheStorage.getItem(cacheKey)\n if (currentRaw !== expectedRaw) return\n }\n\n cacheStorage.removeItem(cacheKey)\n cacheStorage.removeItem(keySyncKey)\n }\n\n const saveCache = (data: XCSSCacheData) => {\n if (!cacheEnabled || !isBrowser || !cacheStorage) 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 || !cacheEnabled) 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 (cacheEnabled && isBrowser && cacheStorage) {\n try {\n const raw = cacheStorage.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 cacheStorage.removeItem(cacheKey)\n }\n } else if (data.configHash !== currentConfigHash) {\n // Config đã thay đổi, xóa cache cũ\n cacheStorage.removeItem(cacheKey)\n } else {\n loadedCacheData = data\n cacheLoaded = true\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 const applySheetText = (mediaKey: string, text: string) => {\n cssStyleSheetsText[mediaKey] = text\n if (isBrowser && cssStyleSheetsDom[mediaKey]) {\n cssStyleSheetsDom[mediaKey].replaceSync(text)\n }\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 cssStyleSheetsText[k] = ''\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n applySheetText('root', baseCssText)\n\n // Xóa bootloader style SAU khi adoptedStyleSheets đã paint xong\n // Dùng double requestAnimationFrame để đảm bảo trình duyệt đã render CSS mới\n const removeBootloaderStyle = () => {\n if (!docRoot) return\n const blStyle = docRoot.querySelector(`style[id=\"${cacheConfig.styleId}\"]`)\n if (blStyle) {\n const scheduleNextPaint =\n typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (callback: (time: number) => void) => setTimeout(() => callback(Date.now()), 0)\n\n scheduleNextPaint(() => {\n scheduleNextPaint(() => {\n blStyle.remove()\n })\n })\n }\n }\n\n const hydrateCacheAfterInit = (data: XCSSCacheData) => {\n if (data.keys) {\n mergeKnownKeys(data.keys)\n }\n mergeSizeLast(data.sizeLast)\n\n const sheetKeys = ['root', ...keysCssStyleSheetsDom]\n sheetKeys.forEach((key) => {\n const currentRules = cssStyleSheetsSet[key] || new Set<string>()\n const cachedRules = data.rulesSet?.[key] || []\n const mergedRules = new Set<string>([...cachedRules, ...Array.from(currentRules)])\n cssStyleSheetsSet[key] = mergedRules\n\n if (key === 'root') {\n const cachedRoot = typeof data.cssText?.root === 'string' ? data.cssText.root : ''\n const txt = mergeRootCssText(baseCssText, cachedRoot)\n applySheetText('root', txt)\n return\n }\n\n const textFromRules = Array.from(mergedRules).join('\\n')\n const fallbackText =\n typeof data.cssText?.[key] === 'string'\n ? unwrapCachedCssText(key, data.cssText[key])\n : ''\n applySheetText(key, textFromRules || fallbackText)\n })\n\n lastKnownCacheData = data\n removeBootloaderStyle()\n }\n\n // Post-Init Hydration: áp dụng dữ liệu cache vào DOM/stylesheet\n if (cacheLoaded && loadedCacheData) {\n hydrateCacheAfterInit(loadedCacheData)\n }\n\n // Gắn tất cả sheets MỘT LẦN DUY NHẤT (batch) để tránh multi-reflow gây CLS\n if (isBrowser && docRoot?.adoptedStyleSheets) {\n const existingSheets = docRoot.adoptedStyleSheets\n const newSheets = ['root', ...keysCssStyleSheetsDom]\n .map(k => cssStyleSheetsDom[k])\n .filter(sheet => sheet && !existingSheets.includes(sheet))\n if (newSheets.length > 0) {\n docRoot.adoptedStyleSheets = [...existingSheets, ...newSheets]\n }\n }\n\n if (!cacheEnabled) {\n removeBootloaderStyle()\n }\n\n // Xử lý bất đồng bộ cho cache stream-compressed\n if (cacheEnabled && isBrowser && cacheStorage && 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 // Đồng bộ key generation từ tab khác: ưu tiên BroadcastChannel, fallback storage.\n if (cacheEnabled && isBrowser && browserWindow?.addEventListener) {\n browserWindow.addEventListener('storage', (e) => {\n if (e.key === keySyncKey && e.newValue) {\n try {\n mergeKeySyncPayload(normalizeKeySyncPayload(JSON.parse(e.newValue)))\n } catch (_e) {}\n }\n })\n }\n\n // Chèn 1 rule vào CSSStyleSheet — O(1), không parse lại toàn bộ.\n // Fallback về replaceSync nếu insertRule thất bại.\n const safeInsertRule = (sheet: CSSStyleSheet, rule: string, cssText: string): void => {\n try {\n sheet.insertRule(rule, sheet.cssRules.length)\n } catch (_e) {\n // insertRule thất bại (rule không hợp lệ, etc.) → fallback replaceSync\n try {\n sheet.replaceSync(cssText)\n } catch (_e2) {\n // Bỏ qua nếu cả hai đều thất bại\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\n layer = Number(layer) || 0\n let cssExts = shouldHashOutputClassName ? CSS_KEYS.get(txtCls) : null\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 cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Cập nhật text store cho cache persistence\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + txtCss\n\n if (!isBrowser) {\n // SSR: chỉ cập nhật text store (đã làm ở trên)\n } else if (cssStyleSheetsDom[media]) {\n // Browser: dùng insertRule O(1) — nhanh hơn replaceSync O(n)\n safeInsertRule(\n cssStyleSheetsDom[media],\n txtCss,\n cssTextStore[media]\n )\n }\n\n triggerSave()\n }\n }\n\n const applyObservedItems = (items: string[]) => {\n items.forEach((cls) => {\n const sourceClassName = resolveSourceClassName(cls)\n let item = classToProp(sourceClassName)\n item && updateRules(sourceClassName, 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 = shouldHashOutputClassName ? CSS_KEYS.get(l)! : l\n } else {\n // Chỉ hash class name nếu có thể sinh CSS hợp lệ.\n // Token không hợp lệ (ví dụ \"bs-a\") giữ nguyên.\n if (shouldHashClass(l)) {\n if (!shouldHashOutputClassName) {\n item = l\n } else if (cacheEnabled && isBrowser) {\n item = allocatePersistentKeySync(l)\n } else {\n const key = allocateLocalKey(l)\n scheduleKeySync([l, key])\n triggerSave() // LƯU CACHE\n item = key\n }\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 || isFirstRenderBatch) {\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 // Lần đầu: xử lý đồng bộ để CSS apply trước first paint\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n if (isFirstRenderBatch) {\n applyObservedItems(items)\n } else {\n processObservedItems(items)\n }\n })\n // Sau lần quét đầu tiên, chuyển sang async để không block UI\n isFirstRenderBatch = false\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 (!cacheConfig.loadOnInit || 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 loadOnInit?: 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 loadOnInitValue = options?.loadOnInit ?? false\n const styleId = JSON.stringify(styleIdValue)\n const cacheKey = JSON.stringify(cacheKeyValue)\n const loadOnInit = JSON.stringify(loadOnInitValue)\n\n const script = `\n(async function () {\n function canUseCacheRuntime() {\n if (typeof window === 'undefined' || !window.localStorage) return false;\n try {\n var probeKey = '__xcss_cache_probe__';\n localStorage.setItem(probeKey, '1');\n localStorage.removeItem(probeKey);\n return true;\n } catch (_error) {\n return false;\n }\n }\n\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 if (!${loadOnInit}) return;\n if (!canUseCacheRuntime()) 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 { parseClassName } from './parser'\n\nexport type TailwindConversionStatus = 'converted' | 'passthrough' | 'unsupported'\nexport type TailwindTokenClassification = 'tailwind' | 'xcss' | 'ambiguous' | 'unknown'\nexport type TailwindConversionMode = 'legacy' | 'safe' | 'strict'\n\nexport interface TailwindConversionWarning {\n token: string\n message: string\n}\n\nexport interface TailwindTokenConversion {\n input: string\n outputs: string[]\n status: TailwindConversionStatus\n classification: TailwindTokenClassification\n exact: boolean\n warnings: TailwindConversionWarning[]\n}\n\ntype TailwindBaseTokenConversion = Omit<TailwindTokenConversion, 'classification'>\n\nexport interface TailwindConversionResult {\n input: string\n output: string\n details: TailwindTokenConversion[]\n converted: string[]\n passthrough: string[]\n unsupported: string[]\n ambiguous: string[]\n warnings: TailwindConversionWarning[]\n}\n\nexport interface TailwindConversionOptions {\n preserveUnknown?: boolean\n mode?: TailwindConversionMode\n}\n\nconst DEFAULT_OPTIONS: Required<TailwindConversionOptions> = {\n preserveUnknown: true,\n mode: 'legacy',\n}\n\nconst RESPONSIVE_VARIANTS = new Set(['xs', 'sm', 'md', 'lg', 'xl', '2xl'])\n\nconst SELECTOR_VARIANTS: Record<string, string> = {\n hover: ':hover',\n focus: ':focus',\n active: ':active',\n visited: ':visited',\n disabled: ':disabled',\n checked: ':checked',\n 'focus-within': ':focus-within',\n 'focus-visible': ':focus-visible',\n first: ':first-child',\n last: ':last-child',\n odd: ':nth-child(odd)',\n even: ':nth-child(even)',\n before: '::before',\n after: '::after',\n placeholder: '::placeholder',\n selection: '::selection',\n}\n\nconst TAILWIND_ONLY_VARIANTS = new Set([\n ...Object.keys(SELECTOR_VARIANTS),\n 'dark',\n 'group-hover',\n 'group-focus',\n 'group-focus-within',\n 'peer-hover',\n 'peer-focus',\n 'placeholder',\n 'before',\n 'after',\n 'selection',\n])\n\nconst SPACING_SCALE: Record<string, string> = {\n '0': '0',\n px: '1px',\n '0.5': '2px',\n '1': '4px',\n '1.5': '6px',\n '2': '8px',\n '2.5': '10px',\n '3': '12px',\n '3.5': '14px',\n '4': '16px',\n '5': '20px',\n '6': '24px',\n '7': '28px',\n '8': '32px',\n '9': '36px',\n '10': '40px',\n '11': '44px',\n '12': '48px',\n '14': '56px',\n '16': '64px',\n '20': '80px',\n '24': '96px',\n '28': '112px',\n '32': '128px',\n '36': '144px',\n '40': '160px',\n '44': '176px',\n '48': '192px',\n '52': '208px',\n '56': '224px',\n '60': '240px',\n '64': '256px',\n '72': '288px',\n '80': '320px',\n '96': '384px',\n}\n\nconst RADIUS_SCALE: Record<string, string> = {\n none: '0',\n sm: '2px',\n DEFAULT: '4px',\n md: '6px',\n lg: '8px',\n xl: '12px',\n '2xl': '16px',\n '3xl': '24px',\n full: '9999px',\n}\n\nconst FONT_SIZE_SCALE: Record<string, string> = {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n '3xl': '30px',\n '4xl': '36px',\n '5xl': '48px',\n '6xl': '60px',\n '7xl': '72px',\n '8xl': '96px',\n '9xl': '128px',\n}\n\nconst FONT_WEIGHT_SCALE: Record<string, string> = {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n}\n\nconst LINE_HEIGHT_SCALE: Record<string, string> = {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n loose: '2',\n '3': '12px',\n '4': '16px',\n '5': '20px',\n '6': '24px',\n '7': '28px',\n '8': '32px',\n '9': '36px',\n '10': '40px',\n}\n\nconst LETTER_SPACING_SCALE: Record<string, string> = {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n}\n\nconst SHADOW_SCALE: Record<string, string> = {\n sm: '[0;1px;2px;0;rgb(0 0 0 / 0.05)]',\n DEFAULT: '[0;1px;3px;0;rgb(0 0 0 / 0.1),0;1px;2px;-1px;rgb(0 0 0 / 0.1)]',\n md: '[0;4px;6px;-1px;rgb(0 0 0 / 0.1),0;2px;4px;-2px;rgb(0 0 0 / 0.1)]',\n lg: '[0;10px;15px;-3px;rgb(0 0 0 / 0.1),0;4px;6px;-4px;rgb(0 0 0 / 0.1)]',\n xl: '[0;20px;25px;-5px;rgb(0 0 0 / 0.1),0;8px;10px;-6px;rgb(0 0 0 / 0.1)]',\n '2xl': '[0;25px;50px;-12px;rgb(0 0 0 / 0.25)]',\n none: '[none]',\n}\n\nconst SIZE_KEYWORDS: Record<string, string> = {\n auto: 'auto',\n full: '100%',\n screen: '100vw',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n}\n\nconst HEIGHT_KEYWORDS: Record<string, string> = {\n auto: 'auto',\n full: '100%',\n screen: '100vh',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n}\n\nconst WIDTH_SCALE: Record<string, string> = {\n xs: '20rem',\n sm: '24rem',\n md: '28rem',\n lg: '32rem',\n xl: '36rem',\n '2xl': '42rem',\n '3xl': '48rem',\n '4xl': '56rem',\n '5xl': '64rem',\n '6xl': '72rem',\n '7xl': '80rem',\n}\n\nconst encodeBracketValue = (value: string): string => `[${value.replace(/ /g, ';')}]`\n\nconst encodeXcssValue = (value: string): string => {\n if (!value) return value\n if (value.startsWith('[') && value.endsWith(']')) return value\n\n const first = value[0]\n if (first === '#' || first === '!' || first === '-' || /[0-9]/.test(first)) {\n return value\n }\n\n if (/[(),/:]/.test(value) || /\\s/.test(value)) {\n return encodeBracketValue(value)\n }\n\n return `${first.toUpperCase()}${value.slice(1)}`\n}\n\nconst buildValueToken = (property: string, value: string): string => `${property}${encodeXcssValue(value)}`\n\nconst COLOR_SCALE: Record<string, string> = {\n transparent: 'transparent',\n current: 'currentColor',\n inherit: 'inherit',\n white: '#ffffff',\n black: '#000000',\n 'slate-50': '#f8fafc',\n 'slate-100': '#f1f5f9',\n 'slate-200': '#e2e8f0',\n 'slate-300': '#cbd5e1',\n 'slate-400': '#94a3b8',\n 'slate-500': '#64748b',\n 'slate-600': '#475569',\n 'slate-700': '#334155',\n 'slate-800': '#1e293b',\n 'slate-900': '#0f172a',\n 'gray-50': '#f9fafb',\n 'gray-100': '#f3f4f6',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'gray-500': '#6b7280',\n 'gray-600': '#4b5563',\n 'gray-700': '#374151',\n 'gray-800': '#1f2937',\n 'gray-900': '#111827',\n 'red-50': '#fef2f2',\n 'red-100': '#fee2e2',\n 'red-200': '#fecaca',\n 'red-300': '#fca5a5',\n 'red-400': '#f87171',\n 'red-500': '#ef4444',\n 'red-600': '#dc2626',\n 'red-700': '#b91c1c',\n 'red-800': '#991b1b',\n 'red-900': '#7f1d1d',\n 'orange-50': '#fff7ed',\n 'orange-100': '#ffedd5',\n 'orange-200': '#fed7aa',\n 'orange-300': '#fdba74',\n 'orange-400': '#fb923c',\n 'orange-500': '#f97316',\n 'orange-600': '#ea580c',\n 'orange-700': '#c2410c',\n 'orange-800': '#9a3412',\n 'orange-900': '#7c2d12',\n 'amber-50': '#fffbeb',\n 'amber-100': '#fef3c7',\n 'amber-200': '#fde68a',\n 'amber-300': '#fcd34d',\n 'amber-400': '#fbbf24',\n 'amber-500': '#f59e0b',\n 'amber-600': '#d97706',\n 'amber-700': '#b45309',\n 'amber-800': '#92400e',\n 'amber-900': '#78350f',\n 'yellow-50': '#fefce8',\n 'yellow-100': '#fef9c3',\n 'yellow-200': '#fef08a',\n 'yellow-300': '#fde047',\n 'yellow-400': '#facc15',\n 'yellow-500': '#eab308',\n 'yellow-600': '#ca8a04',\n 'yellow-700': '#a16207',\n 'yellow-800': '#854d0e',\n 'yellow-900': '#713f12',\n 'green-50': '#f0fdf4',\n 'green-100': '#dcfce7',\n 'green-200': '#bbf7d0',\n 'green-300': '#86efac',\n 'green-400': '#4ade80',\n 'green-500': '#22c55e',\n 'green-600': '#16a34a',\n 'green-700': '#15803d',\n 'green-800': '#166534',\n 'green-900': '#14532d',\n 'emerald-50': '#ecfdf5',\n 'emerald-100': '#d1fae5',\n 'emerald-200': '#a7f3d0',\n 'emerald-300': '#6ee7b7',\n 'emerald-400': '#34d399',\n 'emerald-500': '#10b981',\n 'emerald-600': '#059669',\n 'emerald-700': '#047857',\n 'emerald-800': '#065f46',\n 'emerald-900': '#064e3b',\n 'blue-50': '#eff6ff',\n 'blue-100': '#dbeafe',\n 'blue-200': '#bfdbfe',\n 'blue-300': '#93c5fd',\n 'blue-400': '#60a5fa',\n 'blue-500': '#3b82f6',\n 'blue-600': '#2563eb',\n 'blue-700': '#1d4ed8',\n 'blue-800': '#1e40af',\n 'blue-900': '#1e3a8a',\n 'indigo-50': '#eef2ff',\n 'indigo-100': '#e0e7ff',\n 'indigo-200': '#c7d2fe',\n 'indigo-300': '#a5b4fc',\n 'indigo-400': '#818cf8',\n 'indigo-500': '#6366f1',\n 'indigo-600': '#4f46e5',\n 'indigo-700': '#4338ca',\n 'indigo-800': '#3730a3',\n 'indigo-900': '#312e81',\n 'violet-50': '#f5f3ff',\n 'violet-100': '#ede9fe',\n 'violet-200': '#ddd6fe',\n 'violet-300': '#c4b5fd',\n 'violet-400': '#a78bfa',\n 'violet-500': '#8b5cf6',\n 'violet-600': '#7c3aed',\n 'violet-700': '#6d28d9',\n 'violet-800': '#5b21b6',\n 'violet-900': '#4c1d95',\n 'purple-50': '#faf5ff',\n 'purple-100': '#f3e8ff',\n 'purple-200': '#e9d5ff',\n 'purple-300': '#d8b4fe',\n 'purple-400': '#c084fc',\n 'purple-500': '#a855f7',\n 'purple-600': '#9333ea',\n 'purple-700': '#7e22ce',\n 'purple-800': '#6b21a8',\n 'purple-900': '#581c87',\n 'pink-50': '#fdf2f8',\n 'pink-100': '#fce7f3',\n 'pink-200': '#fbcfe8',\n 'pink-300': '#f9a8d4',\n 'pink-400': '#f472b6',\n 'pink-500': '#ec4899',\n 'pink-600': '#db2777',\n 'pink-700': '#be185d',\n 'pink-800': '#9d174d',\n 'pink-900': '#831843',\n 'cyan-50': '#ecfeff',\n 'cyan-100': '#cffafe',\n 'cyan-200': '#a5f3fc',\n 'cyan-300': '#67e8f9',\n 'cyan-400': '#22d3ee',\n 'cyan-500': '#06b6d4',\n 'cyan-600': '#0891b2',\n 'cyan-700': '#0e7490',\n 'cyan-800': '#155e75',\n 'cyan-900': '#164e63',\n}\n\nconst DIRECT_MAP: Record<string, string[]> = {\n flex: ['dF'],\n 'inline-flex': ['dIf'],\n block: ['dB'],\n 'inline-block': ['dIb'],\n inline: ['dI'],\n hidden: ['dN'],\n grid: ['dG'],\n 'inline-grid': ['dIg'],\n contents: ['dC'],\n relative: ['posR'],\n absolute: ['posA'],\n fixed: ['posF'],\n sticky: ['pos[sticky]'],\n static: ['posS'],\n 'flex-row': ['fxd[row]'],\n 'flex-col': ['fxd[column]'],\n 'flex-row-reverse': ['fxd[row-reverse]'],\n 'flex-col-reverse': ['fxd[column-reverse]'],\n 'flex-wrap': ['fxw[wrap]'],\n 'flex-nowrap': ['fxw[nowrap]'],\n 'items-start': ['ai[start]'],\n 'items-end': ['ai[end]'],\n 'items-center': ['ai[center]'],\n 'items-stretch': ['ai[stretch]'],\n 'items-baseline': ['ai[baseline]'],\n 'content-start': ['ac[start]'],\n 'content-end': ['ac[end]'],\n 'content-center': ['ac[center]'],\n 'content-between': ['ac[space-between]'],\n 'content-around': ['ac[space-around]'],\n 'content-evenly': ['ac[space-evenly]'],\n 'content-stretch': ['ac[stretch]'],\n 'content-baseline': ['ac[baseline]'],\n 'justify-start': ['jc[start]'],\n 'justify-end': ['jc[end]'],\n 'justify-center': ['jc[center]'],\n 'justify-between': ['jc[space-between]'],\n 'justify-around': ['jc[space-around]'],\n 'justify-evenly': ['jc[space-evenly]'],\n 'justify-items-start': ['ji[start]'],\n 'justify-items-end': ['ji[end]'],\n 'justify-items-center': ['ji[center]'],\n 'justify-items-stretch': ['ji[stretch]'],\n 'justify-items-baseline': ['ji[baseline]'],\n 'justify-self-auto': ['js[auto]'],\n 'justify-self-start': ['js[start]'],\n 'justify-self-end': ['js[end]'],\n 'justify-self-center': ['js[center]'],\n 'justify-self-stretch': ['js[stretch]'],\n 'place-items-start': ['pli[start]'],\n 'place-items-end': ['pli[end]'],\n 'place-items-center': ['pli[center]'],\n 'place-items-stretch': ['pli[stretch]'],\n 'place-content-start': ['plc[start]'],\n 'place-content-end': ['plc[end]'],\n 'place-content-center': ['plc[center]'],\n 'place-content-between': ['plc[space-between]'],\n 'place-content-around': ['plc[space-around]'],\n 'place-content-evenly': ['plc[space-evenly]'],\n 'place-content-stretch': ['plc[stretch]'],\n 'place-self-auto': ['pls[auto]'],\n 'place-self-start': ['pls[start]'],\n 'place-self-end': ['pls[end]'],\n 'place-self-center': ['pls[center]'],\n 'place-self-stretch': ['pls[stretch]'],\n 'self-auto': ['as[auto]'],\n 'self-start': ['as[start]'],\n 'self-end': ['as[end]'],\n 'self-center': ['as[center]'],\n 'self-stretch': ['as[stretch]'],\n 'appearance-none': ['ap[none]'],\n 'font-sans': ['ffA'],\n 'font-serif': ['ffS'],\n 'font-mono': ['ffM'],\n italic: ['fnsty[italic]'],\n 'not-italic': ['fnsty[normal]'],\n underline: ['tdlU'],\n 'line-through': ['tdlLt'],\n uppercase: ['ttrU'],\n lowercase: ['ttrL'],\n capitalize: ['ttrC'],\n truncate: ['ofl[hidden]', 'tolE', 'ws[nowrap]'],\n 'whitespace-normal': ['ws[normal]'],\n 'whitespace-nowrap': ['ws[nowrap]'],\n 'whitespace-pre': ['ws[pre]'],\n 'whitespace-pre-wrap': ['ws[pre-wrap]'],\n 'text-left': ['taL'],\n 'text-center': ['taC'],\n 'text-right': ['taR'],\n 'overflow-hidden': ['ofl[hidden]'],\n 'overflow-auto': ['ofl[auto]'],\n 'overflow-scroll': ['ofl[scroll]'],\n 'overflow-visible': ['ofl[visible]'],\n 'overflow-x-hidden': ['oflx[hidden]'],\n 'overflow-x-auto': ['oflx[auto]'],\n 'overflow-x-scroll': ['oflx[scroll]'],\n 'overflow-y-hidden': ['ofly[hidden]'],\n 'overflow-y-auto': ['ofly[auto]'],\n 'overflow-y-scroll': ['ofly[scroll]'],\n 'cursor-pointer': ['crP'],\n 'cursor-not-allowed': ['crNa'],\n 'cursor-default': ['crD'],\n 'select-none': ['us[none]'],\n 'rounded-none': ['bdra0'],\n rounded: [`bdra${RADIUS_SCALE.DEFAULT}`],\n 'rounded-sm': [`bdra${RADIUS_SCALE.sm}`],\n 'rounded-md': [`bdra${RADIUS_SCALE.md}`],\n 'rounded-lg': [`bdra${RADIUS_SCALE.lg}`],\n 'rounded-xl': [`bdra${RADIUS_SCALE.xl}`],\n 'rounded-2xl': [`bdra${RADIUS_SCALE['2xl']}`],\n 'rounded-3xl': [`bdra${RADIUS_SCALE['3xl']}`],\n 'rounded-full': [`bdra${RADIUS_SCALE.full}`],\n border: ['bdw1px', 'bds[solid]', buildValueToken('bdc', 'currentColor')],\n 'border-0': ['bdw0'],\n 'border-2': ['bdw2px'],\n 'border-4': ['bdw4px'],\n 'border-8': ['bdw8px'],\n 'border-solid': ['bds[solid]'],\n 'border-dashed': ['bds[dashed]'],\n 'border-dotted': ['bds[dotted]'],\n 'shadow-sm': [`bxsh${SHADOW_SCALE.sm}`],\n shadow: [`bxsh${SHADOW_SCALE.DEFAULT}`],\n 'shadow-md': [`bxsh${SHADOW_SCALE.md}`],\n 'shadow-lg': [`bxsh${SHADOW_SCALE.lg}`],\n 'shadow-xl': [`bxsh${SHADOW_SCALE.xl}`],\n 'shadow-2xl': [`bxsh${SHADOW_SCALE['2xl']}`],\n 'shadow-none': [`bxsh${SHADOW_SCALE.none}`],\n 'w-full': ['w100%'],\n 'w-screen': ['w100vw'],\n 'w-auto': ['w[auto]'],\n 'h-full': ['h100%'],\n 'h-screen': ['h100vh'],\n 'h-auto': ['h[auto]'],\n 'min-w-full': ['miw100%'],\n 'min-h-full': ['mih100%'],\n 'min-h-screen': ['mih100vh'],\n 'max-w-full': ['mw100%'],\n 'max-h-full': ['mh100%'],\n 'max-w-none': ['mw[none]'],\n 'max-h-none': ['mh[none]'],\n 'flex-1': ['fx1'],\n 'flex-auto': ['fx[a]'],\n 'flex-initial': ['fx[i]'],\n 'flex-none': ['fx[none]'],\n grow: ['fxg1'],\n 'grow-0': ['fxg0'],\n shrink: ['fxs1'],\n 'shrink-0': ['fxs0'],\n 'aspect-square': ['ar1'],\n 'aspect-video': ['ar[16/9]'],\n 'aspect-auto': ['ar[auto]'],\n 'object-contain': ['of[contain]'],\n 'object-cover': ['of[cover]'],\n 'object-fill': ['of[fill]'],\n 'object-none': ['of[none]'],\n 'object-scale-down': ['of[scale-down]'],\n 'object-center': ['op[center]'],\n 'object-top': ['op[top]'],\n 'object-right': ['op[right]'],\n 'object-bottom': ['op[bottom]'],\n 'object-left': ['op[left]'],\n}\n\nconst DIRECTIONAL_ROUNDED_MAP: Record<string, string[]> = {\n 'rounded-t': ['bdtlr4px', 'bdtrr4px'],\n 'rounded-r': ['bdtrr4px', 'bdbrr4px'],\n 'rounded-b': ['bdblr4px', 'bdbrr4px'],\n 'rounded-l': ['bdtlr4px', 'bdblr4px'],\n}\n\nconst TAILWIND_EXACT_UTILITIES = new Set([\n ...Object.keys(DIRECT_MAP),\n ...Object.keys(DIRECTIONAL_ROUNDED_MAP),\n 'appearance-none',\n 'transition',\n])\n\nconst TAILWIND_PREFIXES = [\n 'p-',\n 'px-',\n 'py-',\n 'pt-',\n 'pr-',\n 'pb-',\n 'pl-',\n 'm-',\n 'mx-',\n 'my-',\n 'mt-',\n 'mr-',\n 'mb-',\n 'ml-',\n 'gap-',\n 'gap-x-',\n 'gap-y-',\n 'top-',\n 'right-',\n 'bottom-',\n 'left-',\n 'inset-',\n 'inset-x-',\n 'inset-y-',\n 'w-',\n 'h-',\n 'min-w-',\n 'min-h-',\n 'max-w-',\n 'max-h-',\n 'size-',\n 'bg-',\n 'text-',\n 'border-',\n 'placeholder-',\n 'divide-',\n 'rounded-',\n 'font-',\n 'leading-',\n 'tracking-',\n 'opacity-',\n 'z-',\n 'shadow-',\n 'duration-',\n 'ease-',\n 'delay-',\n 'translate-',\n 'scale-',\n 'rotate-',\n 'skew-',\n 'ring-',\n 'outline-',\n 'from-',\n 'via-',\n 'to-',\n 'basis-',\n 'order-',\n]\n\nconst NEGATIVE_PREFIXES = new Set(['m', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y'])\nconst AUTO_VALUE_PREFIXES = new Set(['m', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y'])\n\nconst normalizeOptions = (options?: TailwindConversionOptions): Required<TailwindConversionOptions> => {\n const merged = { ...DEFAULT_OPTIONS, ...options }\n\n if (options?.preserveUnknown === undefined) {\n merged.preserveUnknown = merged.mode === 'legacy'\n }\n\n return merged\n}\n\nconst splitOutsideBrackets = (value: string, delimiter: string): string[] => {\n const parts: string[] = []\n let depth = 0\n let current = ''\n\n for (const char of value) {\n if (char === '[') depth++\n if (char === ']') depth = Math.max(0, depth - 1)\n if (char === delimiter && depth === 0) {\n parts.push(current)\n current = ''\n continue\n }\n current += char\n }\n\n if (current) parts.push(current)\n return parts\n}\n\nconst normalizeColor = (value: string): string | null => {\n if (COLOR_SCALE[value]) return COLOR_SCALE[value]\n if (/^\\[(.+)\\]$/.test(value)) {\n const match = value.match(/^\\[(.+)\\]$/)\n if (!match) return null\n const inner = match[1].trim()\n if (inner.startsWith('#') || inner.startsWith('rgb') || inner.startsWith('hsl') || inner === 'transparent' || inner === 'currentColor') {\n return inner\n }\n }\n return null\n}\n\nconst normalizeScalar = (value: string, table: Record<string, string>): string | null => {\n if (table[value] !== undefined) return table[value]\n if (/^\\[(.+)\\]$/.test(value)) {\n const match = value.match(/^\\[(.+)\\]$/)\n return match ? match[1] : null\n }\n return null\n}\n\nconst normalizeSpacing = (raw: string, allowNegative: boolean): string | null => {\n let negative = false\n let value = raw\n if (raw.startsWith('-')) {\n if (!allowNegative) return null\n negative = true\n value = raw.slice(1)\n }\n\n if (value.startsWith('[') && value.endsWith(']')) {\n const inner = value.slice(1, -1)\n return negative ? `-${inner}` : inner\n }\n\n const scaled = SPACING_SCALE[value]\n if (!scaled) return null\n return negative && scaled !== '0' ? `-${scaled}` : scaled\n}\n\nconst normalizeFraction = (value: string): string | null => {\n const match = value.match(/^(\\d+)\\/(\\d+)$/)\n if (!match) return null\n const numerator = Number(match[1])\n const denominator = Number(match[2])\n if (!denominator) return null\n return `${(numerator / denominator) * 100}%`\n}\n\nconst appendVariants = (tokens: string[], variants: string[]): { tokens: string[], warnings: TailwindConversionWarning[] } => {\n let media: string | null = null\n const selectors: string[] = []\n const warnings: TailwindConversionWarning[] = []\n\n for (const variant of variants) {\n if (RESPONSIVE_VARIANTS.has(variant)) {\n media = variant\n continue\n }\n\n const selector = SELECTOR_VARIANTS[variant]\n if (selector) {\n selectors.push(selector)\n continue\n }\n\n warnings.push({\n token: variant,\n message: `unsupported Tailwind variant \\`${variant}\\``,\n })\n }\n\n const selectorSuffix = selectors.length > 0 ? `@${selectors.join('')}` : ''\n\n return {\n tokens: tokens.map((token) => {\n const withSelector = `${token}${selectorSuffix}`\n return media ? `${media}:${withSelector}` : withSelector\n }),\n warnings,\n }\n}\n\nconst buildSpacingToken = (prefix: string, value: string): string[] | null => {\n const negativeAllowed = NEGATIVE_PREFIXES.has(prefix)\n const normalized =\n value === 'auto' && AUTO_VALUE_PREFIXES.has(prefix)\n ? 'auto'\n : normalizeSpacing(value, negativeAllowed)\n if (!normalized) return null\n\n const propertyMap: Record<string, string[]> = {\n p: ['p'],\n px: ['px'],\n py: ['py'],\n pt: ['pt'],\n pr: ['pr'],\n pb: ['pb'],\n pl: ['pl'],\n m: ['m'],\n mx: ['mx'],\n my: ['my'],\n mt: ['mt'],\n mr: ['mr'],\n mb: ['mb'],\n ml: ['ml'],\n gap: ['gap'],\n 'gap-x': ['cgap'],\n 'gap-y': ['rgap'],\n top: ['t'],\n right: ['r'],\n bottom: ['b'],\n left: ['l'],\n inset: ['i'],\n 'inset-x': ['l', 'r'],\n 'inset-y': ['t', 'b'],\n }\n\n const properties = propertyMap[prefix]\n if (!properties) return null\n\n if (normalized === 'auto') {\n return properties.map((property) => `${property}[auto]`)\n }\n\n return properties.map((property) => `${property}${normalized}`)\n}\n\nconst normalizeBasis = (rawValue: string): string | null => {\n return (\n normalizeScalar(rawValue, {\n auto: 'auto',\n full: '100%',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n }) ??\n normalizeFraction(rawValue) ??\n normalizeSpacing(rawValue, false)\n )\n}\n\nconst normalizeOrder = (rawValue: string): string | null => {\n if (rawValue === 'first') return '-9999'\n if (rawValue === 'last') return '9999'\n if (rawValue === 'none') return '0'\n if (/^-?\\d+$/.test(rawValue)) return rawValue\n if (/^\\[(.+)\\]$/.test(rawValue)) {\n const match = rawValue.match(/^\\[(.+)\\]$/)\n return match ? match[1] : null\n }\n return null\n}\n\nconst buildSizeToken = (prefix: string, rawValue: string): string | null => {\n const propertyMap: Record<string, string> = {\n w: 'w',\n h: 'h',\n 'min-w': 'miw',\n 'min-h': 'mih',\n 'max-w': 'mw',\n 'max-h': 'mh',\n }\n\n const property = propertyMap[prefix]\n if (!property) return null\n const valueTable = prefix === 'h' || prefix === 'min-h' || prefix === 'max-h' ? HEIGHT_KEYWORDS : SIZE_KEYWORDS\n const normalized =\n normalizeScalar(rawValue, prefix.startsWith('max-w') ? { ...WIDTH_SCALE, ...valueTable } : valueTable) ??\n normalizeFraction(rawValue) ??\n normalizeSpacing(rawValue, false)\n if (!normalized) return null\n return `${property}[${normalized}]`\n}\n\nconst convertBaseToken = (token: string): TailwindBaseTokenConversion => {\n const warnings: TailwindConversionWarning[] = []\n\n if (DIRECT_MAP[token]) {\n return {\n input: token,\n outputs: DIRECT_MAP[token],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n\n if (DIRECTIONAL_ROUNDED_MAP[token]) {\n return {\n input: token,\n outputs: DIRECTIONAL_ROUNDED_MAP[token],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n\n const colorPrefixes: Array<[RegExp, string]> = [\n [/^bg-(.+)$/, 'bgc'],\n [/^text-(.+)$/, 'c'],\n [/^border-(.+)$/, 'bdc'],\n ]\n for (const [pattern, property] of colorPrefixes) {\n const match = token.match(pattern)\n if (!match) continue\n const color = normalizeColor(match[1])\n if (color) {\n return {\n input: token,\n outputs: [buildValueToken(property, color)],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n const spacingPrefixes = ['p', 'px', 'py', 'pt', 'pr', 'pb', 'pl', 'm', 'mx', 'my', 'mt', 'mr', 'mb', 'ml', 'gap', 'gap-x', 'gap-y', 'top', 'right', 'bottom', 'left', 'inset', 'inset-x', 'inset-y']\n for (const prefix of spacingPrefixes) {\n const bare = token.startsWith('-') ? token.slice(1) : token\n if (!bare.startsWith(`${prefix}-`)) continue\n const value = token.startsWith('-') ? `-${bare.slice(prefix.length + 1)}` : bare.slice(prefix.length + 1)\n const built = buildSpacingToken(prefix, value)\n if (built) {\n return {\n input: token,\n outputs: built,\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n const sizePrefixes = ['w', 'h', 'min-w', 'min-h', 'max-w', 'max-h']\n for (const prefix of sizePrefixes) {\n if (!token.startsWith(`${prefix}-`)) continue\n const value = token.slice(prefix.length + 1)\n const built = buildSizeToken(prefix, value)\n if (built) {\n return {\n input: token,\n outputs: [built],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('size-')) {\n const value = token.slice(5)\n const normalized = normalizeSpacing(value, false)\n if (normalized) {\n return {\n input: token,\n outputs: [`w${normalized}`, `h${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('rounded-')) {\n const value = token.slice(8)\n const radius = normalizeScalar(value, RADIUS_SCALE)\n if (radius) {\n return {\n input: token,\n outputs: [`bdra${radius}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('font-')) {\n const value = token.slice(5)\n const weight = FONT_WEIGHT_SCALE[value]\n if (weight) {\n return {\n input: token,\n outputs: [`fw${weight}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('text-')) {\n const value = token.slice(5)\n const fontSize = FONT_SIZE_SCALE[value]\n if (fontSize) {\n return {\n input: token,\n outputs: [`fns${fontSize}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('leading-')) {\n const value = token.slice(8)\n const normalized = normalizeScalar(value, LINE_HEIGHT_SCALE)\n if (normalized) {\n return {\n input: token,\n outputs: [`lh${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('tracking-')) {\n const value = token.slice(9)\n const normalized = normalizeScalar(value, LETTER_SPACING_SCALE)\n if (normalized) {\n return {\n input: token,\n outputs: [`lts${normalized}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('opacity-')) {\n const raw = token.slice(8)\n const amount = Number(raw)\n if (!Number.isNaN(amount)) {\n return {\n input: token,\n outputs: [`opc${String(amount / 100)}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('z-')) {\n const raw = token.slice(2)\n if (/^-?\\d+$/.test(raw)) {\n return {\n input: token,\n outputs: [`z${raw}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('shadow')) {\n const suffix = token === 'shadow' ? 'DEFAULT' : token.slice(7)\n const shadow = SHADOW_SCALE[suffix]\n if (shadow) {\n return {\n input: token,\n outputs: [`bxsh${shadow}`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('basis-')) {\n const raw = token.slice(6)\n const normalized = normalizeBasis(raw)\n if (normalized) {\n return {\n input: token,\n outputs: [`fxb[${normalized}]`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('order-')) {\n const raw = token.slice(6)\n const normalized = normalizeOrder(raw)\n if (normalized) {\n return {\n input: token,\n outputs: /^-?\\d+$/.test(normalized) ? [`ord${normalized}`] : [`ord[${normalized}]`],\n status: 'converted',\n exact: true,\n warnings,\n }\n }\n }\n\n if (token.startsWith('transition')) {\n warnings.push({\n token,\n message: `Tailwind transition utility \\`${token}\\` converted approximately to 200ms transition`,\n })\n return {\n input: token,\n outputs: ['tran0.2s'],\n status: 'converted',\n exact: false,\n warnings,\n }\n }\n\n if (token.startsWith('duration-') || token.startsWith('ease-') || token.startsWith('delay-')) {\n warnings.push({\n token,\n message: `Tailwind motion utility \\`${token}\\` requires manual review in x-css migration`,\n })\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n exact: false,\n warnings,\n }\n }\n\n warnings.push({\n token,\n message: `Tailwind utility \\`${token}\\` is not mapped yet`,\n })\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n exact: false,\n warnings,\n }\n}\n\nconst splitVariants = (token: string): { variants: string[], base: string } => {\n const parts = splitOutsideBrackets(token, ':')\n if (parts.length === 1) {\n return { variants: [], base: token }\n }\n return {\n variants: parts.slice(0, -1),\n base: parts[parts.length - 1],\n }\n}\n\nconst looksLikeTailwindBase = (base: string): boolean => {\n if (!base) return false\n if (TAILWIND_EXACT_UTILITIES.has(base)) return true\n\n const bare = base.startsWith('-') ? base.slice(1) : base\n if (TAILWIND_EXACT_UTILITIES.has(bare)) return true\n if (TAILWIND_PREFIXES.some((prefix) => bare.startsWith(prefix))) return true\n\n return /^(?:[a-z0-9]+-)+\\[[^\\]]+\\]$/i.test(bare)\n}\n\nexport const classifyTailwindToken = (token: string): TailwindTokenClassification => {\n const { variants, base } = splitVariants(token)\n const tailwindLike = looksLikeTailwindBase(base) || variants.some((variant) => TAILWIND_ONLY_VARIANTS.has(variant))\n const parsed = parseClassName(token)\n const hasExplicitXcssBoundary =\n /[A-Z[#0-9!@]/.test(token) ||\n token.includes('--') ||\n (parsed !== null && (parsed.selector.length > 0 || parsed.layer.length > 0 || parsed.mq.length > 0)) ||\n (parsed !== null && parsed.val.length > 0)\n const parseableAsXcss = parsed !== null && hasExplicitXcssBoundary\n\n if (tailwindLike && parseableAsXcss) return 'ambiguous'\n if (tailwindLike) return 'tailwind'\n if (parseableAsXcss) return 'xcss'\n return 'unknown'\n}\n\nexport const convertTailwindToken = (\n token: string,\n options?: TailwindConversionOptions,\n): TailwindTokenConversion => {\n const normalized = normalizeOptions(options)\n const classification = classifyTailwindToken(token)\n\n if (classification === 'xcss') {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification,\n exact: true,\n warnings: [],\n }\n }\n\n const { variants, base } = splitVariants(token)\n const converted = convertBaseToken(base)\n\n if (converted.status === 'converted') {\n const withVariants = appendVariants(converted.outputs, variants)\n\n if (withVariants.warnings.length > 0) {\n const warnings = [\n {\n token,\n message: `Tailwind token \\`${token}\\` uses variants that are not mapped safely`,\n },\n ...converted.warnings,\n ...withVariants.warnings,\n ]\n\n if (normalized.preserveUnknown) {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification: 'ambiguous',\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n classification: 'ambiguous',\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: withVariants.tokens,\n status: 'converted',\n classification,\n exact: converted.exact,\n warnings: converted.warnings,\n }\n }\n\n const warnings = [...converted.warnings]\n if (classification === 'ambiguous') {\n warnings.unshift({\n token,\n message: `Tailwind token \\`${token}\\` is ambiguous with x-css syntax and requires review`,\n })\n }\n\n if (classification === 'unknown') {\n warnings.unshift({\n token,\n message: `Token \\`${token}\\` is neither recognized Tailwind nor confirmed x-css`,\n })\n }\n\n if (normalized.preserveUnknown) {\n return {\n input: token,\n outputs: [token],\n status: 'passthrough',\n classification,\n exact: false,\n warnings,\n }\n }\n\n return {\n input: token,\n outputs: [],\n status: 'unsupported',\n classification,\n exact: false,\n warnings,\n }\n}\n\nexport const convertTailwindClasses = (\n input: string,\n options?: TailwindConversionOptions,\n): TailwindConversionResult => {\n const tokens = input.split(/\\s+/).map((item) => item.trim()).filter(Boolean)\n const details = tokens.map((token) => convertTailwindToken(token, options))\n const outputTokens = details.flatMap((item) => item.outputs)\n const warnings = details.flatMap((item) => item.warnings)\n\n return {\n input,\n output: outputTokens.join(' '),\n details,\n converted: details.filter((item) => item.status === 'converted').flatMap((item) => item.outputs),\n passthrough: details.filter((item) => item.status === 'passthrough').flatMap((item) => item.outputs),\n unsupported: details.filter((item) => item.status === 'unsupported').map((item) => item.input),\n ambiguous: details.filter((item) => item.classification === 'ambiguous').map((item) => item.input),\n warnings,\n }\n}\n\nexport const tailwindToXcss = convertTailwindClasses\n","import {\n type TailwindConversionOptions,\n type TailwindConversionResult,\n type TailwindTokenConversion,\n convertTailwindClasses,\n} from './tailwind'\n\nexport type TailwindCoverageSupport = 'exact' | 'partial' | 'manual'\n\nexport interface TailwindCoverageEntry {\n group: string\n support: TailwindCoverageSupport\n examples: string[]\n notes: string\n}\n\nexport interface TailwindMigrationReadinessOptions extends TailwindConversionOptions {}\n\nexport interface TailwindMigrationReadinessReport {\n input: string\n conversion: TailwindConversionResult\n autoApplyOutput: string\n exactConverted: string[]\n approximateConverted: string[]\n passthroughXcss: string[]\n reviewRequired: string[]\n blocked: string[]\n safeToAutoApply: boolean\n releaseDecision: 'safe' | 'review' | 'blocked'\n}\n\nexport const TAILWIND_COVERAGE_MATRIX: readonly TailwindCoverageEntry[] = [\n {\n group: 'layout-core',\n support: 'exact',\n examples: ['flex', 'inline-flex', 'grid', 'block', 'hidden', 'relative', 'absolute'],\n notes: 'display, position, flex-direction, flex-wrap, and core layout helpers map 1:1 to x-css tokens.',\n },\n {\n group: 'spacing-size',\n support: 'exact',\n examples: ['p-4', 'gap-4', 'mx-auto', 'w-1/2', 'max-w-7xl', 'inset-x-4', 'inset-y-2'],\n notes: 'spacing scale, fractions, width/height keywords, auto margins, and axis inset helpers are safe to auto-apply.',\n },\n {\n group: 'color-border-shadow',\n support: 'exact',\n examples: ['bg-white', 'text-slate-900', 'border', 'border-slate-200', 'shadow-lg'],\n notes: 'core color, border, rounded, and shadow utilities are exact when the target token is supported in the built-in dictionary.',\n },\n {\n group: 'typography',\n support: 'exact',\n examples: ['font-semibold', 'text-sm', 'leading-6', 'tracking-wide', 'uppercase', 'truncate'],\n notes: 'font family, weight, size, line-height, letter-spacing, casing, whitespace, and overflow text helpers are mapped directly.',\n },\n {\n group: 'alignment-placement',\n support: 'exact',\n examples: ['items-baseline', 'justify-between', 'place-items-center', 'content-between', 'justify-self-end'],\n notes: 'align, justify, place, self, and content helpers are safe to auto-apply.',\n },\n {\n group: 'object-appearance',\n support: 'exact',\n examples: ['appearance-none', 'object-cover', 'object-center', 'aspect-video', 'basis-1/2', 'order-last'],\n notes: 'appearance, object-fit/object-position, aspect-ratio, flex-basis, and order helpers are mapped exactly.',\n },\n {\n group: 'state-variants-safe',\n support: 'exact',\n examples: ['hover:bg-slate-50', 'focus:text-blue-600', 'before:bg-slate-50', 'placeholder:text-slate-400'],\n notes: 'responsive variants and safe pseudo/pseudo-element variants are supported directly: hover, focus, active, visited, disabled, checked, before, after, placeholder, selection, first, last, odd, even.',\n },\n {\n group: 'motion-basic',\n support: 'partial',\n examples: ['transition'],\n notes: 'transition currently degrades to a generic 200ms x-css transition and should be reviewed before release.',\n },\n {\n group: 'motion-detailed',\n support: 'manual',\n examples: ['duration-200', 'ease-out', 'delay-150'],\n notes: 'timing-specific motion helpers are not auto-mapped safely and should block blind migration.',\n },\n {\n group: 'contextual-variants',\n support: 'manual',\n examples: ['group-hover:bg-slate-50', 'peer-focus:text-blue-600', 'dark:bg-slate-900'],\n notes: 'group, peer, and dark-mode variants need product-specific rewrite strategy and should not be auto-applied.',\n },\n {\n group: 'generated-content-and-dividers',\n support: 'manual',\n examples: ['divide-x', 'before:content-[\\\"\\\"]'],\n notes: 'divide helpers and arbitrary generated-content flows need manual implementation review.',\n },\n {\n group: 'transform-effects',\n support: 'manual',\n examples: ['translate-x-4', 'scale-95', 'rotate-45', 'ring-2', 'outline-none', 'bg-gradient-to-r'],\n notes: 'transforms, rings, advanced outlines, and gradients are not mapped safely enough for production auto-migration.',\n },\n] as const\n\nconst DEFAULT_READINESS_OPTIONS: Required<TailwindMigrationReadinessOptions> = {\n mode: 'safe',\n preserveUnknown: false,\n}\n\nconst isSafeDetailForAutoApply = (detail: TailwindTokenConversion): boolean => {\n if (detail.status === 'converted') return detail.exact\n return detail.status === 'passthrough' && detail.classification === 'xcss'\n}\n\nexport const getTailwindCoverageMatrix = (): readonly TailwindCoverageEntry[] => {\n return TAILWIND_COVERAGE_MATRIX\n}\n\nexport const assessTailwindMigrationReadiness = (\n input: string,\n options?: TailwindMigrationReadinessOptions,\n): TailwindMigrationReadinessReport => {\n const normalizedOptions: TailwindMigrationReadinessOptions = {\n ...DEFAULT_READINESS_OPTIONS,\n ...options,\n }\n\n const conversion = convertTailwindClasses(input, normalizedOptions)\n const exactConverted = conversion.details\n .filter((detail) => detail.status === 'converted' && detail.exact)\n .flatMap((detail) => detail.outputs)\n const approximateConverted = conversion.details\n .filter((detail) => detail.status === 'converted' && !detail.exact)\n .flatMap((detail) => detail.outputs)\n const passthroughXcss = conversion.details\n .filter((detail) => detail.status === 'passthrough' && detail.classification === 'xcss')\n .flatMap((detail) => detail.outputs)\n\n const reviewRequired = conversion.details\n .filter((detail) => !isSafeDetailForAutoApply(detail))\n .map((detail) => detail.input)\n\n const blocked = conversion.details\n .filter((detail) => {\n if (isSafeDetailForAutoApply(detail)) return false\n if (detail.status === 'converted') return false\n return detail.status === 'unsupported' || detail.classification === 'ambiguous' || detail.classification === 'unknown'\n })\n .map((detail) => detail.input)\n\n const autoApplyOutput = conversion.details\n .flatMap((detail) => (isSafeDetailForAutoApply(detail) ? detail.outputs : []))\n .join(' ')\n\n const safeToAutoApply = reviewRequired.length === 0\n const releaseDecision =\n blocked.length > 0\n ? 'blocked'\n : safeToAutoApply\n ? 'safe'\n : 'review'\n\n return {\n input,\n conversion,\n autoApplyOutput,\n exactConverted,\n approximateConverted,\n passthroughXcss,\n reviewRequired,\n blocked,\n safeToAutoApply,\n releaseDecision,\n }\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 * from './tailwind'\nexport * from './tailwind-readiness'\nexport default $$\nexport type { XCSSConfig, BootloaderScriptOptions }\n"],"mappings":"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","names":["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","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","BUILTIN_DICTIONARY","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","resolveCacheConfig","config","styleId","version","compression","debounceMs","sizeLast","loadOnInit","createCacheKey","cache","createKeySyncKey","createKeySyncChannelName","createKeyRegistryKey","createKeyRegistryLockName","readKeyRegistry","storage","key","raw","parsed","sizeSource","entries","entry","writeKeyRegistry","registry","canUseWritableLocalStorage","canUseWebLocks","canUseCacheRuntime","isCacheEnvelopeLZW","value","obj","isCacheEnvelopeStream","canUseCompressionStream","canUseDecompressionStream","bytesToBase64","bytes","binary","i","chunk","j","buff","base64ToBytes","base64","compressDeflateRawBase64","input","stream","compressed","decompressDeflateRawBase64","payload","normalized","isStreamCacheEnvelopeRaw","compressLZW","dictionary","codes","dictSize","phrase","currentChar","phraseWithChar","code","decompressLZW","result","char","previous","current","resolveDictionaryData","mod","moduleObj","source","short","common","specific","normalizeKeySyncPayload","entriesSource","skipWhitespace","start","index","findMatchingBrace","depth","quote","escaped","lineComment","blockComment","next","extractExportedObjectLiteral","marker","objectStart","objectEnd","skipWhitespaceAndComments","parseQuotedString","parseIdentifierToken","first","end","parsePlainObjectLiteral","expression","parseValue","parseObject","objectValue","keyToken","valueToken","parseExternalDictionarySource","sourceCode","shortLiteral","commonLiteral","specificLiteral","defaultLiteral","readDictionarySourceFromNode","nodeProcess","isFileUrl","isPathLike","fs","readExternalDictionarySource","nodeSource","response","loadExternalDictionary","data","DICTIONARY_MODULE_ERROR","setupCssLayers","docRoot","id","layers","_","styleElement","layerRule","hashConfig","excludes","str","hash","chr","parseCacheDataSync","expanded","parseCacheDataAsync","unwrapCachedCssText","mediaKey","text","match","normalizeBaseCssText","base","mergeRootCssText","baseText","cachedText","xcss","modules","cssDefault","mediaQuery","groupValues","valueExt","excludeNames","excludePrefixes","prefix","hashClassName","dictionaryImport","cacheOptions","shouldHashOutputClassName","cacheConfig","cacheKey","keySyncKey","keySyncChannelName","mergedExcludes","normalizedExcludePrefixes","x","globToRegex","pattern","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","error","lastKnownCacheData","buildCss","doc","isBrowser","browserWindow","browserStorage","cacheSupported","cacheEnabled","cacheStorage","baseCssText","CSS_KEYS","CSS_KEY_SOURCES","CSS_VALUES","registerCssKey","resolveSourceClassName","keyRegistryKey","keyRegistryLockName","pendingKeyAssignments","keyAssignmentScheduled","keyAssignmentInFlight","isFirstRenderBatch","syncSourceId","pendingKeySyncEntries","pendingKeySyncScheduled","keySyncBroadcastChannel","mergeSizeLast","nextSizeLast","mergeKnownKeys","currentValue","mergeKeySyncPayload","flushPendingKeySyncEntries","scheduleKeySync","allocateLocalKey","allocatePersistentKeySync","registryMap","registryValues","existing","allocateKeyBatch","sources","commit","newEntries","assignedEntries","processObservedItems","triggerSave","runPendingKeyAssignments","batch","scheduleKeyAssignment","event","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","rulesSetObj","cssTextForCache","mqStr","applySheetText","media","removeBootloaderStyle","blStyle","scheduleNextPaint","callback","hydrateCacheAfterInit","currentRules","cachedRules","mergedRules","cachedRoot","txt","textFromRules","fallbackText","existingSheets","newSheets","sheet","safeInsertRule","cssText","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssExts","cssName","txtCss","cssStyleSheetSet","applyObservedItems","items","sourceClassName","item","classToProp","run","clsArrs","lsCss","shouldHashClass","parseTarget","parseClassName","selectorStr","v","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","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","loadOnInitValue","cacheKey","script","DEFAULT_OPTIONS","RESPONSIVE_VARIANTS","SELECTOR_VARIANTS","TAILWIND_ONLY_VARIANTS","SPACING_SCALE","RADIUS_SCALE","FONT_SIZE_SCALE","FONT_WEIGHT_SCALE","LINE_HEIGHT_SCALE","LETTER_SPACING_SCALE","SHADOW_SCALE","SIZE_KEYWORDS","HEIGHT_KEYWORDS","WIDTH_SCALE","encodeBracketValue","value","encodeXcssValue","first","buildValueToken","property","COLOR_SCALE","DIRECT_MAP","DIRECTIONAL_ROUNDED_MAP","TAILWIND_EXACT_UTILITIES","TAILWIND_PREFIXES","NEGATIVE_PREFIXES","AUTO_VALUE_PREFIXES","normalizeOptions","options","merged","splitOutsideBrackets","delimiter","parts","depth","current","char","normalizeColor","match","inner","normalizeScalar","table","normalizeSpacing","raw","allowNegative","negative","scaled","normalizeFraction","numerator","denominator","appendVariants","tokens","variants","media","selectors","warnings","variant","selector","selectorSuffix","token","withSelector","buildSpacingToken","prefix","negativeAllowed","normalized","properties","normalizeBasis","rawValue","normalizeOrder","buildSizeToken","valueTable","convertBaseToken","colorPrefixes","pattern","color","spacingPrefixes","bare","built","sizePrefixes","radius","weight","fontSize","amount","suffix","shadow","splitVariants","looksLikeTailwindBase","base","classifyTailwindToken","tailwindLike","parsed","parseClassName","hasExplicitXcssBoundary","parseableAsXcss","convertTailwindToken","classification","converted","withVariants","convertTailwindClasses","input","details","item","outputTokens","tailwindToXcss","TAILWIND_COVERAGE_MATRIX","DEFAULT_READINESS_OPTIONS","isSafeDetailForAutoApply","detail","getTailwindCoverageMatrix","assessTailwindMigrationReadiness","input","options","normalizedOptions","conversion","convertTailwindClasses","exactConverted","approximateConverted","passthroughXcss","reviewRequired","blocked","autoApplyOutput","safeToAutoApply","releaseDecision","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"]}
|