@fwkui/x-css 1.0.9 → 1.0.11
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/DICTIONARY.md +3 -3
- package/README.md +93 -14
- package/dist/index-auto.js +11 -11
- package/dist/index-auto.js.map +1 -1
- package/dist/index-auto.mjs +9 -9
- package/dist/index-auto.mjs.map +1 -1
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index-auto.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/events.ts","../src/parser.ts","../src/dictionary.ts","../src/core.ts","../src/index.ts","../src/index-auto.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 * 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\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 // Quick scan for @ from right to left, stopping if we hit ] (end of arbitrary value)\n let selector = ''\n let atIndex = className.lastIndexOf('@')\n if (atIndex > 0) {\n // Ensure @ is not inside []\n const closeBracket = className.lastIndexOf(']')\n if (closeBracket === -1 || atIndex > closeBracket) {\n selector = className.substring(atIndex + 1)\n end = atIndex\n }\n }\n\n // 2. Extract Media Query / Layer Prefix\n // Look for first ':' \n let mq = ''\n let layer = ''\n const colonIndex = className.indexOf(':', start)\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 // Check for nested selector syntax &...\n if (className.charCodeAt(start) === 38) { // '&'\n // This is a direct selector rule like &span or &[attr]\n // In this case, prop is empty, value is the rest?\n // Regex groups:\n // Group 2: & followed by property-like -> &p-10px\n // Group 3: & followed by [something] -> &[data-x]\n // Currently treating as special Prop '&'\n return {\n mq,\n layer,\n prop: '&',\n val: className.substring(start + 1, end),\n selector\n }\n }\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 // 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'\n\n\nexport type XCSSConfig = {\n base?: string\n aliases?: Record<string, string[]>\n exclude?: string[]\n breakpoints?: Record<string, string>[]\n theme?: Record<string, string>\n prefix?: string\n}\n\ntype CssPropertyMap = Record<string, string>\ntype CssValueMap = Record<string, Record<string, string>>\n\nimport { parseClassName } from './parser'\n\nconst setupCssLayers = (docRoot: Document | ShadowRoot | null, id?: string) => {\n if (!docRoot || typeof document === 'undefined') return\n id = id || 'fwkui'\n\n // Tạo danh sách các layer\n const layers = Array.from({ length: 24 }, (_, i) => {\n return 'l' + i\n })\n\n // Check if style exists\n // If it exists but we cleared it (because cache mismatch), treat as if it doesn't exist?\n // Actually, logic below handles creation.\n // If we want to reuse existing style (e.g. bootloader's which we decided to REMOVE in buildCss),\n // then this logic is fine as it creates a fresh one.\n // If we kept bootloader style, we would need to modify this.\n // Since we decided to REMOVE bootloader style in buildCss, this function will naturally create a new property structure.\n // This is safer.\n\n // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n // docRoot.appendChild(styleElement);\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\n\n // Chèn quy tắc @layer\n const layerRule = `@layer ${layers.join(', ')};`\n // Use requestAnimationFrame or setTimeout instead of setInterval for cleaner approach if possible,\n // keeping setInterval to match original logic but with clear logic.\n let iterval = setInterval(() => {\n if (styleElement.sheet) {\n clearInterval(iterval)\n try {\n styleElement.sheet.insertRule(\n layerRule,\n styleElement.sheet.cssRules.length,\n )\n } catch (e) {\n // ignore error if insertRule fails\n }\n }\n }, 10) // 10ms check\n }\n}\n\n// Helper to hash config\nconst hashConfig = (config: XCSSConfig): string => {\n const str = JSON.stringify({\n base: config.base || '',\n aliases: config.aliases || {},\n breakpoints: config.breakpoints || [],\n theme: config.theme || {},\n prefix: config.prefix || '',\n exclude: config.exclude || []\n })\n\n let hash = 0\n if (str.length === 0) return hash.toString()\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash.toString()\n}\n\ninterface XCSSCacheData {\n configHash: string;\n cssText: Record<string, string>;\n rulesSet: Record<string, string[]>;\n keys: [string, string][];\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nimport { SHORT_PROPERTIES, COMMON_VALUES, SPECIFIC_VALUES } from './dictionary'\n\nconst CACHE_KEY = 'xcss_cache_v1'\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 exclude: [],\n breakpoints: [],\n theme: {},\n prefix: '',\n },\n) => {\n // OLD: LZW parsing Logic removed\n // let CSS_PV: string[] = []\n // try {\n // CSS_PV = JSON.parse(decompressLZW(cssText))\n // } catch (e) { ... }\n\n // Use dictionary directly\n let PropertiesCss: CssPropertyMap = SHORT_PROPERTIES\n let ValueExts: CssValueMap = SPECIFIC_VALUES\n\n let {\n base: cssDefault = null,\n breakpoints: mediaQuery = [],\n aliases: groupValues = {},\n theme: valueExt = {},\n exclude: exNames = [],\n prefix = '',\n } = modules || {}\n\n if (!Array.isArray(mediaQuery)) mediaQuery = []\n if (!Array.isArray(exNames)) exNames = []\n if (!groupValues || typeof groupValues !== 'object') groupValues = {}\n if (!valueExt || typeof valueExt !== 'object') valueExt = {}\n\n // Combine default extensions with COMMON_VALUES and config valueExt\n var exts: Record<string, string> = {\n ...COMMON_VALUES,\n ...valueExt,\n }\n\n // Helper to get property specific map if needed\n const getValueMap = (prop: string) => {\n return ValueExts[prop] || {}\n }\n\n\n\n const buildCss = (doc: Document | ShadowRoot | Element | undefined = typeof document !== 'undefined' ? document : undefined) => {\n // If running in non-browser environment without a doc, we can still simulate for extraction\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n let docRoot: Document | ShadowRoot | null = null\n\n if (doc) {\n docRoot = 'getRootNode' in doc ? (doc.getRootNode() as Document | ShadowRoot) : (doc as any)\n }\n\n const CSS_KEYS = new Map<string, string>()\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot)\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 cacheLoaded = false\n\n const saveCache = (data: XCSSCacheData) => {\n if (!isBrowser || !window.localStorage) return\n try {\n localStorage.setItem(CACHE_KEY, JSON.stringify(data))\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const triggerSave = () => {\n if (!isBrowser) return\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(() => {\n const rulesSetObj: Record<string, string[]> = {}\n for (const k in cssStyleSheetsSet) {\n rulesSetObj[k] = Array.from(cssStyleSheetsSet[k])\n }\n\n // Prepare CSS Text with @media wrapping for Bootloader\n const cssTextForCache: Record<string, string> = {}\n Object.keys(cssStyleSheetsText).forEach(k => {\n if (k === 'root') {\n cssTextForCache[k] = cssStyleSheetsText[k]\n } else {\n const mqStr = mqDfAll.find(m => Object.keys(m)[0] === k)?.[k]\n // Only wrap if meaningful content\n if (mqStr && cssStyleSheetsText[k]) {\n cssTextForCache[k] = `@media ${mqStr} {\\n${cssStyleSheetsText[k]}\\n}`\n } else {\n cssTextForCache[k] = cssStyleSheetsText[k] || ''\n }\n }\n })\n\n const data: XCSSCacheData = {\n configHash: currentConfigHash,\n cssText: cssTextForCache,\n rulesSet: rulesSetObj,\n keys: Array.from(CSS_KEYS.entries())\n }\n saveCache(data)\n }, 1000)\n }\n\n // Load Cache Logic (Sync)\n if (isBrowser && window.localStorage) {\n try {\n const raw = localStorage.getItem(CACHE_KEY)\n if (raw) {\n const data = JSON.parse(raw) as XCSSCacheData\n if (data && data.configHash === currentConfigHash) {\n // Restore Keys\n if (data.keys) {\n data.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n // Restore Text (Unwrap for internal use)\n if (data.cssText) {\n for (const k in data.cssText) {\n let txt = data.cssText[k]\n if (k !== 'root') {\n const match = /@media[^{]+\\{\\n?([\\s\\S]+)\\n?\\}/.exec(txt)\n if (match && match[1]) {\n cssStyleSheetsText[k] = match[1].trim()\n } else {\n cssStyleSheetsText[k] = txt\n }\n } else {\n cssStyleSheetsText[k] = txt\n }\n }\n }\n\n // We do NOT restore rulesSet here because we need to initialize Sets in loop below first.\n // We will populate them after generic init.\n cacheLoaded = true\n } else {\n localStorage.removeItem(CACHE_KEY)\n }\n }\n } catch (e) { console.error(e) }\n }\n\n // Init sheets & Finish Hydration\n if (isBrowser) {\n cssStyleSheetsDom['root'] = new CSSStyleSheet()\n }\n\n keysCssStyleSheetsDom.forEach((k) => {\n cssStyleSheetsSet[k] = new Set()\n if (isBrowser) {\n const media = mqDf.find((m) => Object.keys(m)[0] == k)?.[k] || ''\n cssStyleSheetsDom[k] = new CSSStyleSheet({ media })\n }\n // If NOT loaded from cache, ensure empty.\n if (!cacheLoaded) {\n cssStyleSheetsText[k] = ''\n }\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n // Post-Init Hydration: Populate Sets\n if (cacheLoaded && isBrowser && window.localStorage) {\n // Re-read or just assume consistent if we had rulesSet in memory earlier?\n // Since we didn't save `data` variable to outer scope, we need to read again or move `data` up.\n // Optimize: Read once.\n const raw = localStorage.getItem(CACHE_KEY)\n if (raw) {\n const data = JSON.parse(raw) as XCSSCacheData\n if (data.rulesSet) {\n for (const k in data.rulesSet) {\n // Ensure set exists (it was created in loop above)\n if (cssStyleSheetsSet[k]) {\n // Add all rules\n data.rulesSet[k].forEach(r => cssStyleSheetsSet[k].add(r))\n }\n }\n }\n }\n\n // Cleanup Bootloader Style if it exists\n // logic: Bootloader (style#fwkui) + Lib (Adopted Sheets) = Duplicate.\n // Remove Bootloader style to let Adopted Sheets take over.\n // NOTE: 'setupCssLayers' not yet called.\n if (docRoot) {\n const blStyle = docRoot.querySelector('style[id=\"fwkui\"]')\n if (blStyle) {\n blStyle.remove()\n }\n }\n }\n\n if (cssDefault && Array.isArray(cssDefault)) {\n cssStyleSheetsText.root = cssDefault.join('\\n')\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n } else {\n cssStyleSheetsText.root = (cssDefault as string) || ''\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n }\n\n if (isBrowser && docRoot) {\n ['root', ...keysCssStyleSheetsDom].forEach((k) => {\n if (cssStyleSheetsDom[k] && docRoot?.adoptedStyleSheets) {\n if (!docRoot.adoptedStyleSheets.includes(cssStyleSheetsDom[k])) {\n docRoot.adoptedStyleSheets = [\n ...docRoot.adoptedStyleSheets,\n cssStyleSheetsDom[k],\n ]\n }\n }\n })\n }\n\n const updateRules = (txtCls: string, d: any) => {\n let { media, property, selector, layer, className } = d\n\n let cssTextStore = cssStyleSheetsText\n let cssPending = cssStyleSheetsPending\n let cssPendingScheduled = cssStyleSheetsPendingScheduled\n\n layer = Number(layer) || 0\n // let classNameStr2 = className\n let cssExts = CSS_KEYS.get(txtCls)\n let cssName = cssExts\n ? `.${cssExts}${selector}`\n : `.${className}${selector}`\n\n var txtCss = `@layer l${layer}{${cssName}{${property}}}`\n\n if (!cssStyleSheetsSet[media]) {\n // Fallback or init if missing\n cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Add valid media/pending arrays if missed\n if (!cssPending[media]) cssPending[media] = []\n\n cssPending[media].push(txtCss)\n\n // If not in browser, we can just sync immediately or keep it pending\n // But for SSR extraction, we want it in cssTextStore\n if (!isBrowser) {\n const pending = cssPending[media]\n if (pending.length > 0) {\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n cssPending[media] = []\n }\n } else {\n if (!cssPendingScheduled[media]) {\n cssPendingScheduled[media] = true\n queueMicrotask(() => {\n const pending = cssPending[media]\n const sheet = cssStyleSheetsDom[media]\n if (pending.length > 0) {\n cssTextStore[media] +=\n (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n if (sheet) {\n sheet.replaceSync(cssTextStore[media])\n }\n cssPending[media] = []\n triggerSave() // TRIGGER SAVE CACHE\n }\n cssPendingScheduled[media] = false\n })\n }\n }\n }\n }\n\n emitter.on('observeDom' as any, (items: string[]) => {\n if (items.length > 0) {\n items.forEach((cls) => {\n let item = classToProp(cls)\n item && updateRules(cls, item)\n })\n }\n })\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 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 const isMatch = !prefix || l.startsWith(prefix)\n const parseTarget = isMatch && prefix ? l.slice(prefix.length) : l\n\n if (isMatch && parseClassName(parseTarget)) {\n\n let key = 'D' + CSS_KEYS.size.toString(32).toUpperCase()\n CSS_KEYS.set(l, key)\n item = key\n triggerSave() // TRIGGER SAVE CACHE\n }\n }\n // console.log(\"item\", item);\n return item\n })\n\n // Emit event to update styles\n // In SSR/Non-browser, we might want to sync immediately?\n // Emit event to update styles\n // In SSR/Non-browser, sync immediately for extraction support\n if (!isBrowser) {\n emitter.emit('observeDom' as any, lsCss)\n } else {\n queueMicrotask(() => emitter.emit('observeDom' as any, lsCss))\n }\n\n return lsClassNew.join(' ')\n }\n\n const observe = () => {\n if (!isBrowser || !docRoot) return\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n if (items.length > 0) {\n items.forEach((cls) => {\n let item = classToProp(cls)\n item && updateRules(cls, item)\n })\n }\n })\n }\n\n const getCssString = () => {\n return Object.entries(cssStyleSheetsText).map(([media, css]) => {\n if (!css) return ''\n if (media === 'root' || media === 'default') return css\n // Wrap in media query\n const mediaQueryStr = mqDfAll.find(m => Object.keys(m)[0] === media)?.[media]\n if (mediaQueryStr) {\n return `@media ${mediaQueryStr} {\\n${css}\\n}`\n }\n return css\n }).join('\\n')\n }\n\n return { clsx, observe, getCssString }\n }\n\n\n function propsValueExt(txtProps: string) {\n const REGEX_CSS = new RegExp('^(\\\\[(?<p>[a-zA-Z]+)\\\\])$')\n let { p = '' } = REGEX_CSS.exec(txtProps)?.groups ?? {}\n if (p && groupValues[p] && Array.isArray(groupValues[p])) {\n let cssProp = groupValues[p]\n\n // Try to resolve as utility classes first\n let resolvedProps: string[] = []\n let isAllValidUtilities = true\n\n // To avoid infinite recursion, we might need depth control, but simple mutual recursion \n // works if there are no cycles.\n for (const cls of cssProp) {\n const res = classToProp(cls)\n if (res && res.property) {\n resolvedProps.push(res.property)\n } else if (typeof CSS !== 'undefined' && CSS.supports(cls)) {\n resolvedProps.push(cls)\n } else {\n // If strict check fails, we might still include it if node env?\n // Similar to original logic:\n if (typeof CSS === 'undefined') {\n resolvedProps.push(cls)\n } else {\n isAllValidUtilities = false\n }\n }\n }\n\n if (resolvedProps.length > 0 && (typeof CSS === 'undefined' || 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 function classToProp(txtClass: string) {\n if (prefix && !txtClass.startsWith(prefix)) return null\n\n let checkEx =\n exNames.length > 0 &&\n exNames.every((e) =>\n e.includes('*')\n ? new RegExp('^' + e.replace(/\\*/g, '.+') + '$').test(txtClass)\n : e == txtClass,\n )\n if (checkEx) return null\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const parsed = parseClassName(parseTarget)\n if (!parsed) return null\n\n let { mq: m = 'default', layer: l = '0', prop: p, val: v, selector: s = '' } = parsed\n\n // Construct properties string. \n // If prop='&', it mimics old behavior where multiple props could be chained with &.\n // But in new parser, prop is single unless we handle logic differently.\n // Old regex split p by &. New parser handles single P:V\n // Wait, does old syntax allow `m10px&p20px`?\n // Old regex `(& ...)?` group 2 allows chaining? \n // Logic `p.split('&')` suggests chaining is supported.\n // New parser stops at first prop. \n // If we want to support chaining `prop1val1&prop2val2`, the parser needs to be loop based or recursive.\n // However, standard utility usage usually one class one prop.\n // Chaining `&` in class name is rare and bad practice?\n // Let's assume P:V is single for now based on Implementation Plan.\n\n // Reconstruct \"Property + Value\" string for propToValue\n // let pvString = p + v // Deprecated: No longer need concatenated string\n let cssPropItems: string[] = []\n\n let valStr = propToValue(p, v)\n if (valStr) cssPropItems.push(valStr)\n\n if (cssPropItems.length == 0) return null\n\n let selectorStr = s.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n let className = typeof CSS !== 'undefined' ? CSS.escape(txtClass) : escapeCssIdentifier(txtClass)\n\n let checkSupport = `selector(${className}${selectorStr})`\n if (typeof CSS !== 'undefined' && selectorStr && !CSS.supports(checkSupport)) {\n return null\n }\n\n /* \n Old logic used `p.split('&')`. If we need chaining support, we should parse the rest?\n But typical usage is single atomic class.\n */\n\n let objrs = {\n media: m || 'default', // parser returns empty string if no mq\n layer: l || '0',\n className: className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n return objrs\n }\n\n // polyfill for CSS.escape in node\n const escapeCssIdentifier = (str: string) => {\n // Basic escape for Node environment\n return str.replace(/([^\\w-])/g, '\\\\$1');\n }\n\n const getClassAttrs = (el: Element): string[] => {\n var clsRoot = [...(el?.classList || [])].filter((f) => {\n if (f) {\n let c = f.charCodeAt(0) == 45 ? f.charCodeAt(1) : f.charCodeAt(0)\n return (c >= 97 && c <= 122) || (c >= 48 && c <= 57)\n }\n return false\n })\n\n if (el?.children?.length > 0) {\n Array.from(el?.children).forEach((itm) => {\n clsRoot.push(...getClassAttrs(itm))\n })\n }\n return clsRoot.flat(Infinity) as string[]\n }\n\n const observeDom = (dom: Document | Element | ShadowRoot, cb: (items: string[]) => void) => {\n if (typeof cb != 'function') {\n throw new Error('Callback is not a function')\n }\n if (!dom) return\n let docx: Element | ShadowRoot | undefined = undefined\n\n // Type guards\n if ('documentElement' in dom) {\n docx = dom.documentElement\n } else if (dom instanceof Element || ('tagName' in dom)) { // Basic check for Element\n docx = dom as Element\n } else if ('host' in dom) { // Basic check for ShadowRoot\n docx = dom as ShadowRoot\n }\n\n if (!docx) return\n\n if (docx instanceof Element) {\n cb(getClassAttrs(docx))\n }\n\n // Tạo MutationObserver để theo dõi thay đổi class\n if (typeof MutationObserver !== 'undefined') {\n new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (\n mutation.type == 'attributes' &&\n mutation.attributeName == 'class'\n ) {\n if (mutation.target.nodeType == 1) {\n let className = String((mutation.target as Element)?.className ?? '')\n let oldValue = String(mutation?.oldValue ?? '')\n\n if (className || oldValue) {\n let vClass = className\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n let vClassOld = oldValue\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n vClass = vClass.filter((f) => !vClassOld.includes(f))\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n } else {\n if (mutation.type == 'childList' && mutation.addedNodes.length > 0) {\n let vClass = [...mutation.addedNodes]\n .filter((f) => f.nodeType == 1)\n .map((m) => getClassAttrs(m as Element))\n .flat(Infinity) as string[]\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n }\n }).observe(docx, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n })\n }\n }\n\n // Public API to export cache for manual build\n const exportCache = () => {\n if (typeof localStorage === 'undefined') return null\n return JSON.parse(localStorage.getItem(CACHE_KEY) || 'null')\n }\n\n return { buildCss, exportCache }\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","import $$ from './core'\nimport { XCSSConfig } from './core'\n\nconst GLOBAL_KEY = '__FWXCSS_SHARED__'\n\ninterface CssInit {\n clsx: (...args: any[]) => string\n observe: () => void\n getCssString: () => string\n}\n\nconst createSharedInstance = () => {\n const cssInitMap = new WeakMap<Document | ShadowRoot, CssInit>()\n // Also store a global instance for non-DOM usage or global fallback\n let globalInstance: CssInit | null = null;\n\n let currentCssRoot: Document | ShadowRoot | null = typeof document !== 'undefined' ? document : null\n\n const isCssRoot = (value: any): value is Document | ShadowRoot => {\n if (!value) return false\n const hasDocument = typeof Document !== 'undefined'\n const hasShadowRoot = typeof ShadowRoot !== 'undefined'\n const isDoc = hasDocument && value instanceof Document\n const isShadow = hasShadowRoot && value instanceof ShadowRoot\n return isDoc || isShadow\n }\n\n const getFallbackInit = (): CssInit => {\n // Create a standalone instance if not exists\n if (!globalInstance) {\n globalInstance = $$.css().buildCss(undefined)\n }\n return globalInstance\n }\n\n const createCssInit = (root: Document | ShadowRoot) => {\n // Default config with basic normalize\n return $$.css({\n base: `html,body{font-size:16px;padding:0;margin:0;}`\n }).buildCss(root)\n }\n\n const getCssInit = (root: Document | ShadowRoot | undefined | null): CssInit => {\n if (!root) return getFallbackInit()\n let cssInit = cssInitMap.get(root)\n if (!cssInit) {\n cssInit = createCssInit(root)\n cssInitMap.set(root, cssInit)\n }\n return cssInit\n }\n\n const setClsxRoot = (root: Document | ShadowRoot) => {\n currentCssRoot = root || (typeof document !== 'undefined' ? document : null)\n }\n\n const clsx = (...args: any[]): string => {\n let root: Document | ShadowRoot | undefined | null = undefined\n const last = args[args.length - 1]\n if (isCssRoot(last)) {\n root = last\n args = args.slice(0, -1)\n }\n\n const classes: string[] = []\n const push = (value: any) => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n classes.push(String(value))\n return\n }\n if (Array.isArray(value)) {\n value.forEach(push)\n return\n }\n if (typeof value === 'object') {\n Object.keys(value).forEach((key) => {\n if (value[key]) classes.push(key)\n })\n }\n }\n\n args.forEach(push)\n\n // Resolve helper\n // If explicit root provided, use it\n // If not, use currentCssRoot (e.g. document in browser)\n // If both null (e.g. Node env), use fallback global instance\n const resolvedRoot = root || currentCssRoot\n\n // Pass the combined class string to xcss engine\n return getCssInit(resolvedRoot).clsx(classes.join(' '))\n }\n\n // New API: Get the generated CSS string from the default/global instance\n // Useful for SSR\n const getCss = () => {\n return getFallbackInit().getCssString()\n }\n\n return { clsx, setClsxRoot, getCss }\n}\n\nconst globalScope = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : global) as any\nconst shared = globalScope[GLOBAL_KEY] || createSharedInstance()\n\nif (!globalScope[GLOBAL_KEY]) {\n globalScope[GLOBAL_KEY] = shared\n}\n\nexport const clsx = shared.clsx\nexport const setClsxRoot = shared.setClsxRoot\nexport const getCss = shared.getCss\nexport default $$\nexport type { XCSSConfig }\n","import fwxcss from './index'\n\n// Auto-init logic\nif (typeof document !== 'undefined') {\n // Wait for DOMContentLoaded to ensure body exists if script is in head?\n // cssObserve handles existing DOM + changes.\n // If script is in head, body might not be parsed yet.\n // But cssObserve observes documentElement (html) or body?\n // core.ts: observeDom takes dom. cssObserve passes document.\n // observeDom checks documentElement. So it's safe to run immediately.\n \n fwxcss.cssObserve(document)\n console.log('🚀 fwxcss Auto-Observer Activated')\n}\n\nexport * from './index'\nexport default fwxcss\n"],"mappings":"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","names":["mitt","all","type","handler","handlers","evt","wildcardHandlers","isLowerAlpha","code","parseClassName","className","start","end","selector","atIndex","closeBracket","mq","layer","colonIndex","prefix","digitEnd","closeIndex","propEnd","nextCode","prop","val","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","setupCssLayers","docRoot","id","layers","_","i","styleElement","layerRule","iterval","hashConfig","config","str","hash","chr","CACHE_KEY","xcss","modules","PropertiesCss","SHORT_PROPERTIES","ValueExts","SPECIFIC_VALUES","cssDefault","mediaQuery","groupValues","valueExt","exNames","prefix","exts","COMMON_VALUES","getValueMap","prop","buildCss","doc","isBrowser","CSS_KEYS","emitter","mitt","mqDfAll","mqDf","f","fi","keysCssStyleSheetsDom","m","cssStyleSheetsSet","cssStyleSheetsDom","cssStyleSheetsText","cssStyleSheetsPending","cssStyleSheetsPendingScheduled","currentConfigHash","debounceTimer","cacheLoaded","saveCache","data","e","triggerSave","rulesSetObj","k","cssTextForCache","mqStr","raw","v","txt","match","media","r","blStyle","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssPending","cssPendingScheduled","cssExts","cssName","txtCss","cssStyleSheetSet","pending","sheet","items","cls","item","classToProp","clsArrs","lsCss","lsClassNew","l","isMatch","parseTarget","parseClassName","key","observeDom","css","mediaQueryStr","propsValueExt","txtProps","REGEX_CSS","p","cssProp","resolvedProps","isAllValidUtilities","res","propToValue","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","x","txtClass","parsed","s","cssPropItems","valStr","selectorStr","escapeCssIdentifier","checkSupport","getClassAttrs","el","clsRoot","itm","dom","cb","docx","mutationList","mutation","oldValue","vClass","vClassOld","cssObserve","options","cssClsx","core_default","GLOBAL_KEY","createSharedInstance","cssInitMap","globalInstance","currentCssRoot","isCssRoot","value","hasDocument","hasShadowRoot","isDoc","isShadow","getFallbackInit","core_default","createCssInit","root","getCssInit","cssInit","args","last","classes","push","key","globalScope","shared","clsx","setClsxRoot","getCss","index_default","index_default","index_auto_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/events.ts","../src/parser.ts","../src/dictionary.ts","../src/core.ts","../src/index.ts","../src/index-auto.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 * 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\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 // Quick scan for @ from right to left, stopping if we hit ] (end of arbitrary value)\n let selector = ''\n let atIndex = className.lastIndexOf('@')\n if (atIndex > 0) {\n // Ensure @ is not inside []\n const closeBracket = className.lastIndexOf(']')\n if (closeBracket === -1 || atIndex > closeBracket) {\n selector = className.substring(atIndex + 1)\n end = atIndex\n }\n }\n\n // 2. Extract Media Query / Layer Prefix\n // Look for first ':' \n let mq = ''\n let layer = ''\n const colonIndex = className.indexOf(':', start)\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 // Check for nested selector syntax &...\n if (className.charCodeAt(start) === 38) { // '&'\n // This is a direct selector rule like &span or &[attr]\n // In this case, prop is empty, value is the rest?\n // Regex groups:\n // Group 2: & followed by property-like -> &p-10px\n // Group 3: & followed by [something] -> &[data-x]\n // Currently treating as special Prop '&'\n return {\n mq,\n layer,\n prop: '&',\n val: className.substring(start + 1, end),\n selector\n }\n }\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 DEFAULT_SHORT_PROPERTIES,\n COMMON_VALUES as DEFAULT_COMMON_VALUES,\n SPECIFIC_VALUES as DEFAULT_SPECIFIC_VALUES,\n} from './dictionary'\n\n\nexport type XCSSConfig = {\n base?: string\n aliases?: Record<string, string[]>\n exclude?: string[]\n breakpoints?: Record<string, string>[]\n theme?: Record<string, string>\n prefix?: string\n dictionaryImport?: boolean | string\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\nconst resolveDictionaryData = (mod: unknown): XCSSDictionaryData | null => {\n if (!mod || typeof mod !== 'object') return null\n\n const moduleObj = mod as DictionaryModuleShape\n const source =\n moduleObj.default && typeof moduleObj.default === 'object'\n ? moduleObj.default\n : moduleObj\n\n const short = source.SHORT_PROPERTIES\n const common = source.COMMON_VALUES\n const specific = source.SPECIFIC_VALUES\n\n if (!short || !common || !specific) return null\n if (\n typeof short !== 'object' ||\n typeof common !== 'object' ||\n typeof specific !== 'object'\n ) {\n return null\n }\n\n return {\n SHORT_PROPERTIES: short,\n COMMON_VALUES: common,\n SPECIFIC_VALUES: specific,\n }\n}\n\nconst loadExternalDictionary = async (source: string): Promise<XCSSDictionaryData> => {\n const mod = await import(/* @vite-ignore */ source)\n const data = resolveDictionaryData(mod)\n if (!data) {\n throw new Error(\n 'XCSS: dictionary module must export SHORT_PROPERTIES, COMMON_VALUES and SPECIFIC_VALUES',\n )\n }\n return data\n}\n\nconst setupCssLayers = (docRoot: Document | ShadowRoot | null, id?: string) => {\n if (!docRoot || typeof document === 'undefined') return\n id = id || 'fwkui'\n\n // Tạo danh sách các layer\n const layers = Array.from({ length: 24 }, (_, i) => {\n return 'l' + i\n })\n\n // Check if style exists\n // If it exists but we cleared it (because cache mismatch), treat as if it doesn't exist?\n // Actually, logic below handles creation.\n // If we want to reuse existing style (e.g. bootloader's which we decided to REMOVE in buildCss),\n // then this logic is fine as it creates a fresh one.\n // If we kept bootloader style, we would need to modify this.\n // Since we decided to REMOVE bootloader style in buildCss, this function will naturally create a new property structure.\n // This is safer.\n\n // Tạo <style> element\n if (!docRoot.querySelector('style[id=\"' + id + '\"]')) {\n const styleElement = document.createElement('style')\n styleElement.id = id\n if (!(docRoot instanceof ShadowRoot)) {\n document.head.append(styleElement)\n } else {\n // docRoot.appendChild(styleElement);\n try {\n docRoot.prepend(styleElement)\n } catch (e) {\n docRoot.appendChild(styleElement)\n }\n }\n\n // Chèn quy tắc @layer\n const layerRule = `@layer ${layers.join(', ')};`\n // Use requestAnimationFrame or setTimeout instead of setInterval for cleaner approach if possible,\n // keeping setInterval to match original logic but with clear logic.\n let iterval = setInterval(() => {\n if (styleElement.sheet) {\n clearInterval(iterval)\n try {\n styleElement.sheet.insertRule(\n layerRule,\n styleElement.sheet.cssRules.length,\n )\n } catch (e) {\n // ignore error if insertRule fails\n }\n }\n }, 10) // 10ms check\n }\n}\n\n// Helper to hash config\nconst hashConfig = (config: XCSSConfig): string => {\n const str = JSON.stringify({\n base: config.base || '',\n aliases: config.aliases || {},\n breakpoints: config.breakpoints || [],\n theme: config.theme || {},\n prefix: config.prefix || '',\n exclude: config.exclude || [],\n dictionaryImport: config.dictionaryImport ?? true,\n })\n\n let hash = 0\n if (str.length === 0) return hash.toString()\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash.toString()\n}\n\ninterface XCSSCacheData {\n configHash: string\n cssText: Record<string, string>\n rulesSet: Record<string, string[]>\n keys: [string, string][]\n}\n\n/**\n * Hàm factory chính để khởi tạo và cấu hình engine xcss.\n */\nconst CACHE_KEY = 'xcss_cache_v1'\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 exclude: [],\n breakpoints: [],\n theme: {},\n prefix: '',\n dictionaryImport: true,\n },\n) => {\n // OLD: LZW parsing Logic removed\n // let CSS_PV: string[] = []\n // try {\n // CSS_PV = JSON.parse(decompressLZW(cssText))\n // } catch (e) { ... }\n\n let {\n base: cssDefault = null,\n breakpoints: mediaQuery = [],\n aliases: groupValues = {},\n theme: valueExt = {},\n exclude: exNames = [],\n prefix = '',\n dictionaryImport = true,\n } = modules || {}\n\n if (!Array.isArray(mediaQuery)) mediaQuery = []\n if (!Array.isArray(exNames)) exNames = []\n if (!groupValues || typeof groupValues !== 'object') groupValues = {}\n if (!valueExt || typeof valueExt !== 'object') valueExt = {}\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 rebuildExts()\n return\n }\n\n PropertiesCss = dictionary.SHORT_PROPERTIES\n ValueExts = dictionary.SPECIFIC_VALUES\n CommonValues = dictionary.COMMON_VALUES\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({\n SHORT_PROPERTIES: DEFAULT_SHORT_PROPERTIES,\n COMMON_VALUES: DEFAULT_COMMON_VALUES,\n SPECIFIC_VALUES: DEFAULT_SPECIFIC_VALUES,\n })\n }\n\n\n\n const buildCss = (doc: Document | ShadowRoot | Element | undefined = typeof document !== 'undefined' ? document : undefined) => {\n // If running in non-browser environment without a doc, we can still simulate for extraction\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n let docRoot: Document | ShadowRoot | null = null\n\n if (doc) {\n docRoot = 'getRootNode' in doc ? (doc.getRootNode() as Document | ShadowRoot) : (doc as any)\n }\n\n const CSS_KEYS = new Map<string, string>()\n\n // Setup layers if in browser\n if (isBrowser && docRoot) {\n setupCssLayers(docRoot)\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 cacheLoaded = false\n\n const saveCache = (data: XCSSCacheData) => {\n if (!isBrowser || !window.localStorage) return\n try {\n localStorage.setItem(CACHE_KEY, JSON.stringify(data))\n } catch (e) {\n console.warn('XCSS: Failed to save cache', e)\n }\n }\n\n const triggerSave = () => {\n if (!isBrowser) return\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(() => {\n const rulesSetObj: Record<string, string[]> = {}\n for (const k in cssStyleSheetsSet) {\n rulesSetObj[k] = Array.from(cssStyleSheetsSet[k])\n }\n\n // Prepare CSS Text with @media wrapping for Bootloader\n const cssTextForCache: Record<string, string> = {}\n Object.keys(cssStyleSheetsText).forEach(k => {\n if (k === 'root') {\n cssTextForCache[k] = cssStyleSheetsText[k]\n } else {\n const mqStr = mqDfAll.find(m => Object.keys(m)[0] === k)?.[k]\n // Only wrap if meaningful content\n if (mqStr && cssStyleSheetsText[k]) {\n cssTextForCache[k] = `@media ${mqStr} {\\n${cssStyleSheetsText[k]}\\n}`\n } else {\n cssTextForCache[k] = cssStyleSheetsText[k] || ''\n }\n }\n })\n\n const data: XCSSCacheData = {\n configHash: currentConfigHash,\n cssText: cssTextForCache,\n rulesSet: rulesSetObj,\n keys: Array.from(CSS_KEYS.entries())\n }\n saveCache(data)\n }, 1000)\n }\n\n // Load Cache Logic (Sync)\n if (isBrowser && window.localStorage) {\n try {\n const raw = localStorage.getItem(CACHE_KEY)\n if (raw) {\n const data = JSON.parse(raw) as XCSSCacheData\n if (data && data.configHash === currentConfigHash) {\n // Restore Keys\n if (data.keys) {\n data.keys.forEach(([k, v]) => CSS_KEYS.set(k, v))\n }\n // Restore Text (Unwrap for internal use)\n if (data.cssText) {\n for (const k in data.cssText) {\n let txt = data.cssText[k]\n if (k !== 'root') {\n const match = /@media[^{]+\\{\\n?([\\s\\S]+)\\n?\\}/.exec(txt)\n if (match && match[1]) {\n cssStyleSheetsText[k] = match[1].trim()\n } else {\n cssStyleSheetsText[k] = txt\n }\n } else {\n cssStyleSheetsText[k] = txt\n }\n }\n }\n\n // We do NOT restore rulesSet here because we need to initialize Sets in loop below first.\n // We will populate them after generic init.\n cacheLoaded = true\n } else {\n localStorage.removeItem(CACHE_KEY)\n }\n }\n } catch (e) { console.error(e) }\n }\n\n // Init sheets & Finish Hydration\n if (isBrowser) {\n cssStyleSheetsDom['root'] = new CSSStyleSheet()\n }\n\n keysCssStyleSheetsDom.forEach((k) => {\n cssStyleSheetsSet[k] = new Set()\n if (isBrowser) {\n const media = mqDf.find((m) => Object.keys(m)[0] == k)?.[k] || ''\n cssStyleSheetsDom[k] = new CSSStyleSheet({ media })\n }\n // If NOT loaded from cache, ensure empty.\n if (!cacheLoaded) {\n cssStyleSheetsText[k] = ''\n }\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\n })\n\n // Post-Init Hydration: Populate Sets\n if (cacheLoaded && isBrowser && window.localStorage) {\n // Re-read or just assume consistent if we had rulesSet in memory earlier?\n // Since we didn't save `data` variable to outer scope, we need to read again or move `data` up.\n // Optimize: Read once.\n const raw = localStorage.getItem(CACHE_KEY)\n if (raw) {\n const data = JSON.parse(raw) as XCSSCacheData\n if (data.rulesSet) {\n for (const k in data.rulesSet) {\n // Ensure set exists (it was created in loop above)\n if (cssStyleSheetsSet[k]) {\n // Add all rules\n data.rulesSet[k].forEach(r => cssStyleSheetsSet[k].add(r))\n }\n }\n }\n }\n\n // Cleanup Bootloader Style if it exists\n // logic: Bootloader (style#fwkui) + Lib (Adopted Sheets) = Duplicate.\n // Remove Bootloader style to let Adopted Sheets take over.\n // NOTE: 'setupCssLayers' not yet called.\n if (docRoot) {\n const blStyle = docRoot.querySelector('style[id=\"fwkui\"]')\n if (blStyle) {\n blStyle.remove()\n }\n }\n }\n\n if (cssDefault && Array.isArray(cssDefault)) {\n cssStyleSheetsText.root = cssDefault.join('\\n')\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n } else {\n cssStyleSheetsText.root = (cssDefault as string) || ''\n if (isBrowser && cssStyleSheetsDom.root) {\n cssStyleSheetsDom.root.replaceSync(cssStyleSheetsText.root)\n }\n }\n\n if (isBrowser && docRoot) {\n ['root', ...keysCssStyleSheetsDom].forEach((k) => {\n if (cssStyleSheetsDom[k] && docRoot?.adoptedStyleSheets) {\n if (!docRoot.adoptedStyleSheets.includes(cssStyleSheetsDom[k])) {\n docRoot.adoptedStyleSheets = [\n ...docRoot.adoptedStyleSheets,\n cssStyleSheetsDom[k],\n ]\n }\n }\n })\n }\n\n const updateRules = (txtCls: string, d: any) => {\n let { media, property, selector, layer, className } = d\n\n let cssTextStore = cssStyleSheetsText\n let cssPending = cssStyleSheetsPending\n let cssPendingScheduled = cssStyleSheetsPendingScheduled\n\n layer = Number(layer) || 0\n // let classNameStr2 = className\n let cssExts = CSS_KEYS.get(txtCls)\n let cssName = cssExts\n ? `.${cssExts}${selector}`\n : `.${className}${selector}`\n\n var txtCss = `@layer l${layer}{${cssName}{${property}}}`\n\n if (!cssStyleSheetsSet[media]) {\n // Fallback or init if missing\n cssStyleSheetsSet[media] = new Set()\n }\n\n let cssStyleSheetSet = cssStyleSheetsSet[media]\n\n if (!cssStyleSheetSet.has(txtCss)) {\n cssStyleSheetSet.add(txtCss)\n\n // Add valid media/pending arrays if missed\n if (!cssPending[media]) cssPending[media] = []\n\n cssPending[media].push(txtCss)\n\n // If not in browser, we can just sync immediately or keep it pending\n // But for SSR extraction, we want it in cssTextStore\n if (!isBrowser) {\n const pending = cssPending[media]\n if (pending.length > 0) {\n cssTextStore[media] += (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n cssPending[media] = []\n }\n } else {\n if (!cssPendingScheduled[media]) {\n cssPendingScheduled[media] = true\n queueMicrotask(() => {\n const pending = cssPending[media]\n const sheet = cssStyleSheetsDom[media]\n if (pending.length > 0) {\n cssTextStore[media] +=\n (cssTextStore[media] ? '\\n' : '') + pending.join('\\n')\n if (sheet) {\n sheet.replaceSync(cssTextStore[media])\n }\n cssPending[media] = []\n triggerSave() // TRIGGER SAVE CACHE\n }\n cssPendingScheduled[media] = false\n })\n }\n }\n }\n }\n\n const applyObservedItems = (items: string[]) => {\n items.forEach((cls) => {\n let item = classToProp(cls)\n item && updateRules(cls, item)\n })\n }\n\n const processObservedItems = (items: string[]) => {\n if (items.length === 0) return\n\n const run = () => applyObservedItems(items)\n if (dictionaryReady) {\n run()\n } else {\n dictionaryReadyPromise.then(run)\n }\n }\n\n emitter.on('observeDom' as any, processObservedItems)\n\n const clsx = (...clsArrs: any[]) => {\n let lsCss = clsArrs\n .map((m) => (Array.isArray(m) ? m : [m]))\n .flat(Infinity)\n .map((m) => (typeof m === 'string' ? m.split(/(\\s|\\t)+/g) : []))\n .flat(Infinity) as string[]\n\n lsCss = lsCss.filter((m) => typeof m === 'string' && m.trim())\n\n lsCss = [...new Set(lsCss)]\n\n 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 const isMatch = !prefix || l.startsWith(prefix)\n const parseTarget = isMatch && prefix ? l.slice(prefix.length) : l\n\n if (isMatch && parseClassName(parseTarget)) {\n\n let key = 'D' + CSS_KEYS.size.toString(32).toUpperCase()\n CSS_KEYS.set(l, key)\n item = key\n triggerSave() // TRIGGER SAVE CACHE\n }\n }\n // console.log(\"item\", item);\n return item\n })\n\n // Emit event to update styles\n // In SSR/Non-browser, we might want to sync immediately?\n // Emit event to update styles\n // In SSR/Non-browser, sync immediately for extraction support\n if (!isBrowser) {\n emitter.emit('observeDom' as any, lsCss)\n } else {\n queueMicrotask(() => emitter.emit('observeDom' as any, lsCss))\n }\n\n return lsClassNew.join(' ')\n }\n\n const observe = () => {\n if (!isBrowser || !docRoot) return\n observeDom(docRoot as Document | Element | ShadowRoot, (items) => {\n processObservedItems(items)\n })\n }\n\n const getCssString = () => {\n return Object.entries(cssStyleSheetsText).map(([media, css]) => {\n if (!css) return ''\n if (media === 'root' || media === 'default') return css\n // Wrap in media query\n const mediaQueryStr = mqDfAll.find(m => Object.keys(m)[0] === media)?.[media]\n if (mediaQueryStr) {\n return `@media ${mediaQueryStr} {\\n${css}\\n}`\n }\n return css\n }).join('\\n')\n }\n\n return { clsx, observe, getCssString }\n }\n\n\n function propsValueExt(txtProps: string) {\n const REGEX_CSS = new RegExp('^(\\\\[(?<p>[a-zA-Z]+)\\\\])$')\n let { p = '' } = REGEX_CSS.exec(txtProps)?.groups ?? {}\n if (p && groupValues[p] && Array.isArray(groupValues[p])) {\n let cssProp = groupValues[p]\n\n // Try to resolve as utility classes first\n let resolvedProps: string[] = []\n let isAllValidUtilities = true\n\n // To avoid infinite recursion, we might need depth control, but simple mutual recursion \n // works if there are no cycles.\n for (const cls of cssProp) {\n const res = classToProp(cls)\n if (res && res.property) {\n resolvedProps.push(res.property)\n } else if (typeof CSS !== 'undefined' && CSS.supports(cls)) {\n resolvedProps.push(cls)\n } else {\n // If strict check fails, we might still include it if node env?\n // Similar to original logic:\n if (typeof CSS === 'undefined') {\n resolvedProps.push(cls)\n } else {\n isAllValidUtilities = false\n }\n }\n }\n\n if (resolvedProps.length > 0 && (typeof CSS === 'undefined' || 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 function classToProp(txtClass: string) {\n if (prefix && !txtClass.startsWith(prefix)) return null\n\n let checkEx =\n exNames.length > 0 &&\n exNames.every((e) =>\n e.includes('*')\n ? new RegExp('^' + e.replace(/\\*/g, '.+') + '$').test(txtClass)\n : e == txtClass,\n )\n if (checkEx) return null\n\n const parseTarget = prefix ? txtClass.slice(prefix.length) : txtClass\n const parsed = parseClassName(parseTarget)\n if (!parsed) return null\n\n let { mq: m = 'default', layer: l = '0', prop: p, val: v, selector: s = '' } = parsed\n\n // Construct properties string. \n // If prop='&', it mimics old behavior where multiple props could be chained with &.\n // But in new parser, prop is single unless we handle logic differently.\n // Old regex split p by &. New parser handles single P:V\n // Wait, does old syntax allow `m10px&p20px`?\n // Old regex `(& ...)?` group 2 allows chaining? \n // Logic `p.split('&')` suggests chaining is supported.\n // New parser stops at first prop. \n // If we want to support chaining `prop1val1&prop2val2`, the parser needs to be loop based or recursive.\n // However, standard utility usage usually one class one prop.\n // Chaining `&` in class name is rare and bad practice?\n // Let's assume P:V is single for now based on Implementation Plan.\n\n // Reconstruct \"Property + Value\" string for propToValue\n // let pvString = p + v // Deprecated: No longer need concatenated string\n let cssPropItems: string[] = []\n\n let valStr = propToValue(p, v)\n if (valStr) cssPropItems.push(valStr)\n\n if (cssPropItems.length == 0) return null\n\n let selectorStr = s.replace(/(';|;)/g, (v: string) => (v == \"';\" ? ';' : ' '))\n let className = typeof CSS !== 'undefined' ? CSS.escape(txtClass) : escapeCssIdentifier(txtClass)\n\n let checkSupport = `selector(${className}${selectorStr})`\n if (typeof CSS !== 'undefined' && selectorStr && !CSS.supports(checkSupport)) {\n return null\n }\n\n /* \n Old logic used `p.split('&')`. If we need chaining support, we should parse the rest?\n But typical usage is single atomic class.\n */\n\n let objrs = {\n media: m || 'default', // parser returns empty string if no mq\n layer: l || '0',\n className: className,\n property: cssPropItems.join(';'),\n selector: selectorStr,\n cssRules: `.${className}${selectorStr}{${cssPropItems.join(';')}}`,\n }\n return objrs\n }\n\n // polyfill for CSS.escape in node\n const escapeCssIdentifier = (str: string) => {\n // Basic escape for Node environment\n return str.replace(/([^\\w-])/g, '\\\\$1');\n }\n\n const getClassAttrs = (el: Element): string[] => {\n var clsRoot = [...(el?.classList || [])].filter((f) => {\n if (f) {\n let c = f.charCodeAt(0) == 45 ? f.charCodeAt(1) : f.charCodeAt(0)\n return (c >= 97 && c <= 122) || (c >= 48 && c <= 57)\n }\n return false\n })\n\n if (el?.children?.length > 0) {\n Array.from(el?.children).forEach((itm) => {\n clsRoot.push(...getClassAttrs(itm))\n })\n }\n return clsRoot.flat(Infinity) as string[]\n }\n\n const observeDom = (dom: Document | Element | ShadowRoot, cb: (items: string[]) => void) => {\n if (typeof cb != 'function') {\n throw new Error('Callback is not a function')\n }\n if (!dom) return\n let docx: Element | ShadowRoot | undefined = undefined\n\n // Type guards\n if ('documentElement' in dom) {\n docx = dom.documentElement\n } else if (dom instanceof Element || ('tagName' in dom)) { // Basic check for Element\n docx = dom as Element\n } else if ('host' in dom) { // Basic check for ShadowRoot\n docx = dom as ShadowRoot\n }\n\n if (!docx) return\n\n if (docx instanceof Element) {\n cb(getClassAttrs(docx))\n }\n\n // Tạo MutationObserver để theo dõi thay đổi class\n if (typeof MutationObserver !== 'undefined') {\n new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (\n mutation.type == 'attributes' &&\n mutation.attributeName == 'class'\n ) {\n if (mutation.target.nodeType == 1) {\n let className = String((mutation.target as Element)?.className ?? '')\n let oldValue = String(mutation?.oldValue ?? '')\n\n if (className || oldValue) {\n let vClass = className\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n let vClassOld = oldValue\n .split(' ')\n .map((m) => m.trim())\n .filter((f) => f)\n vClass = vClass.filter((f) => !vClassOld.includes(f))\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n } else {\n if (mutation.type == 'childList' && mutation.addedNodes.length > 0) {\n let vClass = [...mutation.addedNodes]\n .filter((f) => f.nodeType == 1)\n .map((m) => getClassAttrs(m as Element))\n .flat(Infinity) as string[]\n\n typeof cb == 'function' && cb([...new Set(vClass)])\n }\n }\n }\n }).observe(docx, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n })\n }\n }\n\n // Public API to export cache for manual build\n const exportCache = () => {\n if (typeof localStorage === 'undefined') return null\n return JSON.parse(localStorage.getItem(CACHE_KEY) || 'null')\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","import $$ from './core'\nimport { XCSSConfig } from './core'\n\nconst GLOBAL_KEY = '__FWXCSS_SHARED__'\n\ninterface CssInit {\n clsx: (...args: any[]) => string\n observe: () => void\n getCssString: () => string\n}\n\nconst createSharedInstance = () => {\n const cssInitMap = new WeakMap<Document | ShadowRoot, CssInit>()\n // Also store a global instance for non-DOM usage or global fallback\n let globalInstance: CssInit | null = null;\n\n let currentCssRoot: Document | ShadowRoot | null = typeof document !== 'undefined' ? document : null\n\n const isCssRoot = (value: any): value is Document | ShadowRoot => {\n if (!value) return false\n const hasDocument = typeof Document !== 'undefined'\n const hasShadowRoot = typeof ShadowRoot !== 'undefined'\n const isDoc = hasDocument && value instanceof Document\n const isShadow = hasShadowRoot && value instanceof ShadowRoot\n return isDoc || isShadow\n }\n\n const getFallbackInit = (): CssInit => {\n // Create a standalone instance if not exists\n if (!globalInstance) {\n globalInstance = $$.css().buildCss(undefined)\n }\n return globalInstance\n }\n\n const createCssInit = (root: Document | ShadowRoot) => {\n // Default config with basic normalize\n return $$.css({\n base: `html,body{font-size:16px;padding:0;margin:0;}`\n }).buildCss(root)\n }\n\n const getCssInit = (root: Document | ShadowRoot | undefined | null): CssInit => {\n if (!root) return getFallbackInit()\n let cssInit = cssInitMap.get(root)\n if (!cssInit) {\n cssInit = createCssInit(root)\n cssInitMap.set(root, cssInit)\n }\n return cssInit\n }\n\n const setClsxRoot = (root: Document | ShadowRoot) => {\n currentCssRoot = root || (typeof document !== 'undefined' ? document : null)\n }\n\n const clsx = (...args: any[]): string => {\n let root: Document | ShadowRoot | undefined | null = undefined\n const last = args[args.length - 1]\n if (isCssRoot(last)) {\n root = last\n args = args.slice(0, -1)\n }\n\n const classes: string[] = []\n const push = (value: any) => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n classes.push(String(value))\n return\n }\n if (Array.isArray(value)) {\n value.forEach(push)\n return\n }\n if (typeof value === 'object') {\n Object.keys(value).forEach((key) => {\n if (value[key]) classes.push(key)\n })\n }\n }\n\n args.forEach(push)\n\n // Resolve helper\n // If explicit root provided, use it\n // If not, use currentCssRoot (e.g. document in browser)\n // If both null (e.g. Node env), use fallback global instance\n const resolvedRoot = root || currentCssRoot\n\n // Pass the combined class string to xcss engine\n return getCssInit(resolvedRoot).clsx(classes.join(' '))\n }\n\n // New API: Get the generated CSS string from the default/global instance\n // Useful for SSR\n const getCss = () => {\n return getFallbackInit().getCssString()\n }\n\n return { clsx, setClsxRoot, getCss }\n}\n\nconst globalScope = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : global) as any\nconst shared = globalScope[GLOBAL_KEY] || createSharedInstance()\n\nif (!globalScope[GLOBAL_KEY]) {\n globalScope[GLOBAL_KEY] = shared\n}\n\nexport const clsx = shared.clsx\nexport const setClsxRoot = shared.setClsxRoot\nexport const getCss = shared.getCss\nexport default $$\nexport type { XCSSConfig }\n","import fwxcss from './index'\n\n// Auto-init logic\nif (typeof document !== 'undefined') {\n // Wait for DOMContentLoaded to ensure body exists if script is in head?\n // cssObserve handles existing DOM + changes.\n // If script is in head, body might not be parsed yet.\n // But cssObserve observes documentElement (html) or body?\n // core.ts: observeDom takes dom. cssObserve passes document.\n // observeDom checks documentElement. So it's safe to run immediately.\n \n fwxcss.cssObserve(document)\n console.log('🚀 fwxcss Auto-Observer Activated')\n}\n\nexport * from './index'\nexport default fwxcss\n"],"mappings":"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","names":["mitt","all","type","handler","handlers","evt","wildcardHandlers","isLowerAlpha","code","parseClassName","className","start","end","selector","atIndex","closeBracket","mq","layer","colonIndex","prefix","digitEnd","closeIndex","propEnd","nextCode","prop","val","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","resolveDictionaryData","mod","moduleObj","source","short","common","specific","loadExternalDictionary","data","setupCssLayers","docRoot","id","layers","_","i","styleElement","layerRule","iterval","hashConfig","config","str","hash","chr","CACHE_KEY","xcss","modules","cssDefault","mediaQuery","groupValues","valueExt","exNames","prefix","dictionaryImport","PropertiesCss","ValueExts","CommonValues","exts","rebuildExts","applyDictionary","dictionary","dictionaryReady","dictionaryReadyPromise","error","SHORT_PROPERTIES","COMMON_VALUES","SPECIFIC_VALUES","buildCss","doc","isBrowser","CSS_KEYS","emitter","mitt","mqDfAll","mqDf","f","fi","keysCssStyleSheetsDom","m","cssStyleSheetsSet","cssStyleSheetsDom","cssStyleSheetsText","cssStyleSheetsPending","cssStyleSheetsPendingScheduled","currentConfigHash","debounceTimer","cacheLoaded","saveCache","e","triggerSave","rulesSetObj","k","cssTextForCache","mqStr","raw","v","txt","match","media","r","blStyle","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssPending","cssPendingScheduled","cssExts","cssName","txtCss","cssStyleSheetSet","pending","sheet","applyObservedItems","items","cls","item","classToProp","processObservedItems","run","clsArrs","lsCss","lsClassNew","l","isMatch","parseTarget","parseClassName","key","observeDom","css","mediaQueryStr","propsValueExt","txtProps","REGEX_CSS","p","cssProp","resolvedProps","isAllValidUtilities","res","propToValue","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","x","txtClass","parsed","s","cssPropItems","valStr","selectorStr","escapeCssIdentifier","checkSupport","getClassAttrs","el","clsRoot","itm","dom","cb","docx","mutationList","mutation","oldValue","vClass","vClassOld","cssObserve","options","cssClsx","core_default","GLOBAL_KEY","createSharedInstance","cssInitMap","globalInstance","currentCssRoot","isCssRoot","value","hasDocument","hasShadowRoot","isDoc","isShadow","getFallbackInit","core_default","createCssInit","root","getCssInit","cssInit","args","last","classes","push","key","globalScope","shared","clsx","setClsxRoot","getCss","index_default","index_default","index_auto_default"]}
|