@fwkui/x-css 1.0.4 → 1.0.6
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 +447 -599
- package/README.md +132 -80
- package/dist/index-auto.d.mts +6 -0
- package/dist/index-auto.d.ts +6 -0
- package/dist/index-auto.js +10 -0
- package/dist/index-auto.js.map +1 -0
- package/dist/index-auto.mjs +10 -0
- package/dist/index-auto.mjs.map +1 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +32 -8
- package/README2.md +0 -77
- package/index.d.ts +0 -37
- package/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/events.ts","../src/parser.ts","../src/dictionary.ts","../src/core.ts","../src/index.ts"],"sourcesContent":["export type EventType = string | symbol\nexport type Handler<T = any> = (event: T) => void\nexport type WildcardHandler<T = any> = (type: keyof T, event: T[keyof T]) => void\nexport type EventHandlerList<T = any> = Array<Handler<T>>\nexport type WildCardEventHandlerList<T = any> = Array<WildcardHandler<T>>\nexport type EventHandlerMap<T = any> = Map<\n keyof T | '*',\n EventHandlerList<T[keyof T]> | WildCardEventHandlerList<T>\n>\n\nexport interface Emitter<T = any> {\n all: EventHandlerMap<T>\n on<Key extends keyof T>(type: Key, handler: Handler<T[Key]>): void\n on(type: '*', handler: WildcardHandler<T>): void\n off<Key extends keyof T>(type: Key, handler?: Handler<T[Key]>): void\n off(type: '*', handler?: WildcardHandler<T>): void\n emit<Key extends keyof T>(type: Key, event: T[Key]): void\n}\n\nexport const mitt = <T = any>(\n all?: EventHandlerMap<T>,\n): Emitter<T> => {\n all = all || new Map()\n\n return {\n all,\n\n on<Key extends keyof T>(type: Key | '*', handler: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n handlers.push(handler as any)\n } else {\n all!.set(type, [handler] as any)\n }\n },\n\n off<Key extends keyof T>(type: Key | '*', handler?: Handler<T[Key]> | WildcardHandler<T>) {\n const handlers = all!.get(type)\n if (handlers) {\n if (handler) {\n handlers.splice(handlers.indexOf(handler as any) >>> 0, 1)\n } else {\n all!.set(type, [])\n }\n }\n },\n\n emit<Key extends keyof T>(type: Key, evt: T[Key]) {\n let handlers = all!.get(type) as EventHandlerList<T[Key]> | undefined\n if (handlers) {\n handlers.slice().forEach((handler) => {\n handler(evt)\n })\n }\n const wildcardHandlers = all!.get('*') as WildCardEventHandlerList<T> | undefined\n if (wildcardHandlers) {\n wildcardHandlers.slice().forEach((handler) => {\n handler(type, evt as any)\n })\n }\n },\n }\n}\n","export type ParsedClass = {\n mq: string // Media Query prefix (sm, md, lg...)\n layer: string // Layer priority (0-9...)\n prop: string // Property name (m, p, fx...)\n val: string // Value part (10px, Red, #fff...)\n selector: string // Selector modifier (&:hover, @...)\n}\n\n/**\n * 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}\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 // 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/**\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\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 },\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 } = 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 // Init sheets\n if (isBrowser) {\n // Only init CSSStyleSheet in browser environment\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 cssStyleSheetsText[k] = ''\n cssStyleSheetsPending[k] = []\n cssStyleSheetsPendingScheduled[k] = false\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 }\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 if (parseClassName(l)) {\n let key = 'D' + CSS_KEYS.size.toString(32).toUpperCase()\n CSS_KEYS.set(l, key)\n item = key\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) {\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 // Normalize camel? Parser already returns exactly what user typed.\n // If user typed dF -> v=F. v0=F.\n // Dictionary keys are single char or camel?\n // Dictionary lookup needs strict match or loose?\n // Existing code did: `vx = vx[0].toLowerCase() + ...`\n // Let's keep that normalization for dictionary lookup\n if (vx.length > 0) {\n // Try sensitive first (for cases like exact case needed?)\n // Actually our dict is all lowercase.\n // But parser preserves case.\n // Let's 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 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 parsed = parseClassName(txtClass)\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 return { buildCss }\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"],"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","xcss","modules","PropertiesCss","SHORT_PROPERTIES","ValueExts","SPECIFIC_VALUES","cssDefault","mediaQuery","groupValues","valueExt","exNames","exts","COMMON_VALUES","getValueMap","prop","buildCss","doc","isBrowser","CSS_KEYS","emitter","mitt","mqDfAll","mqDf","f","fi","keysCssStyleSheetsDom","m","cssStyleSheetsSet","cssStyleSheetsDom","cssStyleSheetsText","cssStyleSheetsPending","cssStyleSheetsPendingScheduled","k","media","updateRules","txtCls","d","property","selector","layer","className","cssTextStore","cssPending","cssPendingScheduled","cssExts","cssName","txtCss","cssStyleSheetSet","pending","sheet","items","cls","item","classToProp","clsArrs","lsCss","lsClassNew","l","parseClassName","key","observeDom","css","mediaQueryStr","propsValueExt","txtProps","REGEX_CSS","p","cssProp","resolvedProps","isAllValidUtilities","res","propToValue","v","gvalue","c","propertyName","v0","vx","lookupKey","val","lowerKey","vxx","x","txtClass","e","parsed","cssPropItems","valStr","selectorStr","escapeCssIdentifier","checkSupport","str","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"]}
|
package/package.json
CHANGED
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fwkui/x-css",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "A fast, modular CSS-in-JS library with utility-first approach and static extraction support.",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md",
|
|
11
|
+
"DICTIONARY.md",
|
|
12
|
+
"ROADMAP.md",
|
|
13
|
+
".cursorrules",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
5
16
|
"scripts": {
|
|
6
|
-
"
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"dev": "tsup --watch",
|
|
19
|
+
"test": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"lint": "eslint src/",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
7
23
|
},
|
|
8
24
|
"keywords": [
|
|
9
25
|
"css",
|
|
10
|
-
"
|
|
26
|
+
"css-in-js",
|
|
27
|
+
"utility",
|
|
28
|
+
"atomic-css",
|
|
29
|
+
"typescript"
|
|
11
30
|
],
|
|
12
|
-
"author": "
|
|
13
|
-
"license": "
|
|
14
|
-
"
|
|
15
|
-
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^20.0.0",
|
|
35
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
36
|
+
"tsup": "^8.0.0",
|
|
37
|
+
"typescript": "^5.0.0",
|
|
38
|
+
"vitest": "^4.0.18"
|
|
39
|
+
}
|
|
16
40
|
}
|
package/README2.md
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# @fwkui/x-css
|
|
2
|
-
|
|
3
|
-
## Mục tiêu (AI)
|
|
4
|
-
- Thu vien tao CSS tu class viet tat, tu dong sinh rule theo DOM.
|
|
5
|
-
- Ho tro observer de cap nhat CSS khi class thay doi.
|
|
6
|
-
- Su dung constructable style sheets (`adoptedStyleSheets`).
|
|
7
|
-
|
|
8
|
-
## API
|
|
9
|
-
- `xcss(modules?) -> { buildCss }`
|
|
10
|
-
- `buildCss(doc?) -> { clsx, observe } | null`
|
|
11
|
-
- `cssObserve(dom, options?)`
|
|
12
|
-
- `cssClsx(dom, options?) -> (...classNames) => string`
|
|
13
|
-
|
|
14
|
-
## Cấu hình `modules`
|
|
15
|
-
- `css`: string | string[] (CSS mac dinh duoc nap vao layer root)
|
|
16
|
-
- `gValue`: Record<string, string[]> (nhom gia tri tuy chinh)
|
|
17
|
-
- `exNames`: string[] (loai bo class, ho tro wildcard `*`)
|
|
18
|
-
- `mQuery`: Array<Record<string, string>> (bo sung breakpoint, moi object 1 key)
|
|
19
|
-
- `valueExt`: Record<string, string> (mo rong map gia tri viet tat)
|
|
20
|
-
|
|
21
|
-
## Cu phap class (day du)
|
|
22
|
-
Dang co ban: `[prefix:][layer][prop][value][@selector]`
|
|
23
|
-
|
|
24
|
-
- `prefix`: `xs:` `sm:` `md:` `lg:` `xl:` `2xl:` `sma:` `mda:` `lga:` `xla:`
|
|
25
|
-
- `layer`: so sau prefix (vd `sm:2...` => layer 2)
|
|
26
|
-
- `prop`: viet tat theo bo tu dien (hoac dung ten CSS day du)
|
|
27
|
-
- `value`: gia tri rut gon, gia tri CSS, hoac map theo valueMap
|
|
28
|
-
- `@selector`: selector phu (vd `@::before`, `@:hover`)
|
|
29
|
-
- `&`: ghep nhieu cap `prop+value` trong 1 class (vd `p10&bgc#fff`)
|
|
30
|
-
|
|
31
|
-
## Quy tắc gia tri (value)
|
|
32
|
-
- `p10px` -> `padding:10px`
|
|
33
|
-
- `bgc#fff` -> `background-color:#fff`
|
|
34
|
-
- `cRed` -> `color:red` (tu dong lower-case ky tu dau)
|
|
35
|
-
- `p!10px` -> `padding:10px !important` (ky tu `!` dung dau value)
|
|
36
|
-
- `w--size` -> `width:var(--size)` (gia tri bat dau bang `--`)
|
|
37
|
-
- `bg{linear-gradient(...)}` -> dung gia tri thuc trong `{...}`
|
|
38
|
-
- `mx10px` -> `margin-left:10px` + `margin-right:10px`
|
|
39
|
-
- `my10px` -> `margin-top:10px` + `margin-bottom:10px`
|
|
40
|
-
- `px10px` -> `padding-left:10px` + `padding-right:10px`
|
|
41
|
-
- `py10px` -> `padding-top:10px` + `padding-bottom:10px`
|
|
42
|
-
- `bdx1px` -> `border-left` + `border-right`
|
|
43
|
-
- `bdy1px` -> `border-top` + `border-bottom`
|
|
44
|
-
- `[group]` -> dung `gValue` (vd `gValue: { btn: ["padding:8px 12px", "border-radius:6px"] }`)
|
|
45
|
-
|
|
46
|
-
## Value ext mac dinh
|
|
47
|
-
```txt
|
|
48
|
-
n:none
|
|
49
|
-
nm:normal
|
|
50
|
-
a:auto
|
|
51
|
-
i:inherit
|
|
52
|
-
in:initial
|
|
53
|
-
is:inline-start
|
|
54
|
-
ie:inline-end
|
|
55
|
-
tr:transparent
|
|
56
|
-
c:center
|
|
57
|
-
cl:collapse
|
|
58
|
-
l:left
|
|
59
|
-
r:right
|
|
60
|
-
h:hidden
|
|
61
|
-
v:visible
|
|
62
|
-
s:start
|
|
63
|
-
e:end
|
|
64
|
-
t:top
|
|
65
|
-
b:bottom
|
|
66
|
-
bs:block-start
|
|
67
|
-
be:block-end
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Ví dụ nhanh
|
|
71
|
-
- `bgct` -> `background-color:transparent` (tu map `bgc ... t:transparent`)
|
|
72
|
-
- `aiC` -> `align-items:center` (value `C` -> `c` -> `center`)
|
|
73
|
-
- `sm:2p10px@::before` -> padding o media `sm`, layer 2, selector `::before`
|
|
74
|
-
|
|
75
|
-
## Tu dien viet tat thuoc tinh (dễ tra cứu)
|
|
76
|
-
Để tài liệu nhẹ và dễ nhìn, **bảng từ điển đầy đủ đã được tách riêng**:
|
|
77
|
-
- Xem tại: `DICTIONARY.md`
|
package/index.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
type ClassInput = string | string[];
|
|
2
|
-
type MediaQueryMap = Record<string, string>;
|
|
3
|
-
|
|
4
|
-
interface XcssModules {
|
|
5
|
-
css?: string | string[];
|
|
6
|
-
gValue?: Record<string, string[]>;
|
|
7
|
-
exNames?: string[];
|
|
8
|
-
mQuery?: MediaQueryMap[];
|
|
9
|
-
valueExt?: Record<string, string>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface XcssBuildResult {
|
|
13
|
-
clsx: (...clsArrs: ClassInput[]) => string;
|
|
14
|
-
observe: () => void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface Xcss {
|
|
18
|
-
buildCss(doc?: Document | ShadowRoot | HTMLElement): XcssBuildResult | null;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function xcss(modules?: XcssModules): Xcss;
|
|
22
|
-
export function cssObserve(
|
|
23
|
-
d: Document | ShadowRoot | HTMLElement,
|
|
24
|
-
options?: XcssModules,
|
|
25
|
-
): void;
|
|
26
|
-
export function cssClsx(
|
|
27
|
-
d: Document | ShadowRoot | HTMLElement,
|
|
28
|
-
options?: XcssModules,
|
|
29
|
-
): (...classNames: ClassInput[]) => string;
|
|
30
|
-
|
|
31
|
-
declare const _default: {
|
|
32
|
-
css: typeof xcss;
|
|
33
|
-
cssObserve: typeof cssObserve;
|
|
34
|
-
clsx: typeof cssClsx;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export default _default;
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var R="AFsAIgB3AGwAYwBcAHQALQB3AGUAYgBrAGkBBgBsAGkAbgBlAC0AYwBsAGEAbQBwACIALAEBAHQAZgEEAQYBCAEKAQwALQB0AGUAeAEGAGYAaQBsAGwBEgBvAGwAbwByARgBGgBzAQUBBwEJAQsBBgEjASUALQBzAHQAcgBvAGsAZQEwAHcAdABzAR0BNAEgATcBJAEGATsBPQE/ASsBLQEvARkBQgBzAHcBMwEfATYBIgFJAToBPAE+AREAdwBpAGQAdABoAQUAbQA6AG0AZQBkAGkAdQBtAHwAdAA6AWEAaQBjAGsBMABhAGMBHQF0AGMAZQBuAQYAYwEsAS4BBQB1ADoAdQBuAHMAZQB0AXMBdgEOAGcAbgErAXoBeQB0AQUAcwA6ATsAYQByAHQAfABlADoBeQBkAHwAZgGRAGYAbAEkAVoBlAGWAGYBmAGfAaEBmgB8AG4AOgBuAS4AbQBhAGwAfABiADoAYgBhAYQBDgEQAZwBswEnAHIBOwAgAbUBtwEPAGUAfABsAbMBFAG+AcAAZQG4AcMAcwBwAZIAcAF0AREAYgGFAQgBeQB8AHMAYQHPAdEALQGUAG8BggGbAYQB2gF4AC0AZQB2AXkAbAB5AdcBbQFLAYUAYwBoAdcAYwGSAGEBpQAgAXgBjQByAHwAdQHxAYIB2AH0AfYBIwFQACIAYQBpAQUBsABpAYoALQEMAGUAbQEyAHQBqwGtAHIBrwGxAfEB/wBlAfgBkQGTAZUBlwGZAG4BmwGdADoBpwB4AaICGgGlAiABoAIiAakAcwIYAcoAZgIjAZYB4QG3Ai0BqQGzAckBywG6AiAAaQG9AHQBvwG2AcoBwgHEAcYBtgI7AjUCPwFEAfIB/gGOAhYB+QH7AYMB8wBlAfUCSQIBAbYCBQGJAYsCMQEFAg8BrgGwAHwCFAJRAdcBkgB0AaMCGwIpAisAbAItAhkCLwGYAjEB5AIdAZwBngInAi4BnAGmAnACMwG0Aj0CNgBmAbsCOQHIAncCPwHFADoBxwJDAn0BuQE7AmAAcgHtAe8CRgH9Ak8CFQH4AfoBgQJNAkgB9wFzAlQAbAFzAG4CBAJhApgBrwB0AGkAbwBuApcBcAIFApsAYQKdAp8BKwEWAG8AcwEMAp4AbgEFAHIAOgKHAHABFAF4AHwB2QBhAGQBmwF0ADoBdwFqAHUBFAEjAHwAcgHZArICtABlACwAIAK4AroCuwLKAsgCvQBtAr8CpQHDAsMCuwLFAdECzgK5As4BdQK+AsABQAEZAGECmABkAGUCowBpApwCrQAtAuIBFAB5AqEBaALkAuYCpwFoAocAYwKmAq4BPAKxAeUCFgGEArYCvABsAgAAbgLSArYCsAGwAv4C0gAtAocB5gG9AcMAbgKwAhACEgLIAwcC+QHDAZQBqwMDAhYC/wEjAw8C+AMJAsgDDQGwAuwAdQLuAqUC5wBkAHUCwwL0AqEAZgBtAyEC9AAtAScBKQAtAG0AbwLiAQUAZgIgAS4AdwGUAGQAcwGyAnYBcQM4AHIDOgGqAbMBrQEQAsgBtQM+AzkDOwJ5AasAYgBvAWECyABmAzcDSQMcAp8C3gICApgCogKaAuUDIgKnAgoDJgLnAXwBggGGAt8CmAL1AuADWwMsAv8BZgGQAZIBDgLiAqEAcAINA2cC7wGLArMAYQB5AaIBIwEFAc4B0AB1AYQBmwKwAHIBggNlAGcCoQEbAysC5wKdAG0BDwBnAy0BggLzAq0BBQBlAGkBmQI9AgkAbgGXAG8DlQGEAC0B3gGWA5MDmgBlA5YBDwOdAHUBlgBsAoABwgGUAdcCGAEjAHACcQIwA64CbABkAXMAcAIFAHAAcAOiAsMAbgF4AWMBswFmAG4CvwBpATsALQBiA6YAdAKfAWwDNQE4ARsAaQHKAZsCNAPHA8kCFABoAGUBcQNNAHgBcwByAgUBzQPWAQYDXwBvA2wAMQAgAC8AIAAxAHwAdgA6ADEANgPkACAAOQEwAQoAZABmAQUDRwBrAGQBPQOvAy4CAAPwAGsAZgB2A/QBdAP9AdsAdgPDAGkAYgEoAQwC6wEZAGIAZwQAAXEAZwE9Ad8D8ABnAGEEDgBrBBAB3gIdAdwAdAJhAe4DwAGPAUMBkgBjAT0BKQGcAjgAeAFnAcQCgABvAGMDHgQLAGcAYgMqAHQD9QQYAd8DxQGgBBoDMQMzAg4BrAJaAbEBZALQAv0AaQKzAekCGAQjAGUB1gOaAG8DCALqAHwAZAA6AGQBlAE/A5gDqAGJAGgBIwOYAGMETwF8AU8C6AMyAGcBwwOUBFwBLgPFAyUDmABoA6gAaAM5AC0EVgIvA6gAcwBvAGYBDQIHBFcETgOUAWgAZgGlAocDvAHDAZgBJAETA34CrQB8AGgAOgBoAHUBzAHZAdgAdAMlA1wEWQA6BGMB+ABsAYAEkgOLAa0CqwB0BAoAIgQMARMEFgQ1BBoBEwRDA/QCNAEuAuIAcgPFAG8AeAB8AHABswHQArkDjASnBKkAYwGzAXwBjQF6BLABbAFuAUkEEwEdBDQEEQSfAX0D2wQcAW4DuwHNAZQBjgJcBI8DJQR7AHQEkAQTApkEvQQZAGQCCQGvBGAEEwPhBDMEAQSeBNIBLgIHAQ8EogG0BKQCFgS3BKsAOgStAWgAbgONA9gCXASzAp8EWAEGA9gEEwO2BNgEDwS+BNIAcAKqAqwCnwEFAW0DyABwAzwDTQQcAG8BawRVAGUEcgLCArEEdAGWAl0B9wHEAW0BoARyACAE/QJcAW0CjQURAG8E/gGVBQgAZwRXBRYE/gEDAoAFBQI7Ao0CXAULAgACUAUMAHIB8QByBQkFJwIAAkAFIAUQBQADyAFrBLIEjwJRAb8DTgUzAsIBswUrBRsCQwU5BQIE8QB4BJ0E9QAtBPcElwLnBUMAdAUEBQYDgQUJBMgCjQTxAHkFRATRBUYE+AMsBVMEwgUSBKMFAQU0BTYCkwQvBMEE0AQ2ArIDogQgA4EAZQO5AqUAfAB4AvcFagEGBKkAeQVuBWYALQRFAeIC0wGrBPUBqgQ9AwYFaQVmAsIBkQAgBWUCpQAgBMUCtQByBWgFbwWCBX4FawMLBXwFgwI7BPUEEwINBWMEGgKrAHoC4wTMBI8E7QIDAqAECwBsAGsFlAEtAXEBOgBpBZgD8ABkA/QE4QTBBE8AZAU5BCkDOgRQAbYD1QGbAGQBswWuAHUAYgGgAHwAZwA6BBgESwLTBQgAZARgAHwDlAEPAYQBlgRKA6YFyAWoBboAawWqA0AE4gW6BCwBcgQLBbYBAwXQBKUENwXUAU4BLgXNAaAF2QXSBaMAawOzBd8D1gXhBKYF0wWkAZoF3QIBAGIF1wBlBZQFqwXbBesFlgSYBeAAdAWtBa8FtQGRBFEAcwW0BE4FtwHeBboBwwW9Bb8B5gUHBSsFwwRhADoFxwGFAHwFygFDAYUF5gFUBDMF8wXqBeQF7AFeAWAAaAXfBfIF0QXpBeMCLgYeBLwGFwYiAmgF7QYeBh8F2gYYAi4BWgB5BfgF+gQcBbAF/QWzBbAGAgW5BbsGBgE9BcAGCQFfBcQFxgGDBg8GEQXMBdYFugFTBegF9AXkBigGGwFhBh4EIANNBiAGSgYvBjEEUAX7BE4GNQX/BjcGVgY5BgUFvgY8BggFTgYLBcUGDQZCBckAOgOeBkUEmgXXAV4GSQYtBk0GHQZGBm4FQABtBc0GJQZSBTIFAgYpBkYAbAViBhcGdARsBSEDBgK4AWkAcwXNBYgGcwVdAwYFCQaDAWgDfgXNATsGiQUzBlQFmQYyASMF/AWyBloFtQY4BgQFvAZfAG8GPQZiBkAGZQXIBhAGaAXLBhMGRgYVBlEGLAaABnAE+wFuAGgBDwB8BEABZwFpAWsBYQaxAXAF1QZrBJwGFgZSBFwBFANxBZkCKwHQAyYBwwIUASwGwgGEBagGdwXaBM0F1gRIBn4GUgXsBewCwwaOBoYG0QBzBtMF2gXsBigG1waFBagC5QQNBr8F2gNbBNUF1gKeBkkG5wERBmkGqQZrAjkG6wTUAREFkAGQAesBPAKIBgkFjAGWAHIFeQTRAl8FhgNWBe8DwwbyAGEEYAE6AQ4BeAbiBtsGzgTiBuwBOgHeBSkHAgFoBqsF8wcPBnAG4gbrAG4BywbiBw0EpgEPAcsGewbwBZkGrAcOBxsBwgXlBukF5wblByYHIQXsBtAHIwYrBy0HKAbeBfcHEwPOBxUGUgcgBzQEGgcYBukBkwcaByECaAcLBx4DlwdCAmEBlQciBwMCKgdBBygGKAE7BjAHNwZIBywHHwcnARAGLgc+BvABOwBsB00HVwdQAaAG4gBuBzkG5gdWAV0BXwZOBdYHXAdUBoEEcgWoBdgHawUPAXsEwAduBzIEpgdxBpQHbgdjBOIHdwavBVoGsgOYBrUGjga4BIQBbwFxBagEFQdrBuAGjwXWAsMGSQeKBtkGawbcBOIFPQRXBagFKQeOBowHMAXvAb0HmAU+BpQBBQFgBlYGMwaYBf4GAAIYASwBXwYBBlwGnQY7BqAGYQXCBkABqwYOBckDpganBhIDYweRB3oEpgeUAR4HZwFiB34GsweBBrcBbAeEBrIHhgXWAc0GSQWGA4wFqAGEB5IEpgYoBtYGhAeLBmsCKgfPBi4G3wfTB5AF7wd1B58F+QFtBa4HowZYBpkHpgGSB6gGmwerBjoGnwahB7AEYQeyBmYGEAe1Bu4HuAXvBlAF8wT9BagEzAZJBP0HSgFgBn0H+wUXB2wD3wfaB/kGiAdrB/wHvAaNBuEF1gFDCAADrwdfBpUH4AZXBbEHpQQpB6cDbgeqBbgHrAfrB68GCgexBqQGQwfyBqgH9AFgB7oBIggBB30E/Ad/BrQBZQa2AWoHxAa6B8cGawgmCCkGugeACC0HgggwB4UGvABiBaoFXQaHBaoCIgLiAXwD4AGLAGIChwBhBc8FmgETA1UHAAcJBwIAeAX/BakGFgIiBf8CuABvAHcD8AhRB78D2AE6BGoFrghZBAsIUQB6CEEFpQB6B8wECwByAGsHiAhHA6IF5AHzA/sIaQBrCD0EMwhIBeQB0wNRAocD8AhqBM8IdgOXAqsDbwEZBC0DcQEFCIMDLAiAA1YEIwf6BMwExgdyAU8BMAETBMEBEwO6CJAAbAO4CIUBDgOvAdAHaAAiAR0EkAEFBkED1QUrAZYE/ATEBsYBjgiQBKEEzATAA5cCAAT3AsACrQiQAUQHvwSQAToB7gILCIkBLAieASwBagGLA2EBegiQASwD8wirBJQBiwMuApYIggEsBuQEXAi9AC0EFAEXCMkH/wjECM0DggdgCNEHlwjTAG0BiwjVAREHMARcB5wI2QjbAr8BEQgQCMEGfQYVCMwI2gMGCOMBBwe+COYCDQjpAlYB0AWeCJ0BLAjoCLwI6gdZBFwIhQj4AYMIkAF6CPwBegWdCP8CnQBiCPAFnAOkAQ8BPAXHAXAGUwWXCIkBegBpCLQJCAGLCQoFKwGDCQ0D1QUJCQQAaQcECKsJAgkJAXoJFwKrAGMHRgdOBaYJEAKdCQcJIAkVCSIJDAklCQ8IqQj3CSwIrQkjCQ0I+gE8CQECYQHCAgEC8wb9CToFnQTiA2oIiQE8BCAEtAk7ARAEpgSYA7kIkAQcCToIqAiCCS4I/ANiByYERwQfCQQIBgi/AgAFfQZqAGMJIgkHCVQH0AbvBCMIhQMlBHAEwQN8AG8JCgJKBa0FBQBhAr8FCgFkCUcBWQPAAHUEgwSFAcoE/gBwBb0AcAE9BBAF8QM7AHcAOgM4AQwFUAHKAbEE/AFJA+gBbQMIAp0ELQEqA8wCtgOoAgYBtgJcAc4BfABwAekDMQFlBj0CHQV8A/cFFwGqAdkBrQEGAbABLQEIAZsEEAZfAGEAYgW8AbMEEAmsBAcE6AK2AZEJpgi2BCQCEwEsArAEXAlcCSgCwgOBCFgJvQWYAaoDDAnCBH0CsAb0BfEJvgbbAZIJxgB8AHcCsAB3Cc4JSQGsCckJDwHXAhYBkgnWCcsJ0AGSCdIChwnXAGUJ3QniCdMJzAGDCdMF8QmCARABUwnTAHcB4QdiA5wJ4Am+CGcAOgB6BqAAbQOXAHwJ9gn1CfcDpQe4AvEHoAI5A94IsQEZCFMBaAHNAuoD9AG0BeMFxQGzBzsHVwYYBmQKDwHDAzUCIQXFAzUKEwMtAicEuAJhBp0BDAZlByEKHQW7BMwBzgoiCN0AYQBwAvQBbAF4ASkBbgmsAaABEgmHCisBLAouBgQBTgi9CjMAbAW9CiYKNwjqBDUE/gEbCjsKLwERA1EDTgTiCj8HxApCCjYD1QK4CkcEEQpAAHIKSgowAT0J0gpIAvYKPApUAZwCsAGfCcEGPAGWBjsHqQIHCiAHKAQQB6kGyQS1AUMBxAOUAQ4DxAIKBnUBGQILAHABHQpxBJgKMQEpB5ABnwQgA/oCFgEwAGYFSgIhCKAAOgAwA+YCyQOmAG8C+wPjA+MJbwPICn0AeAh0AiEDxQG2A8MKjQhTCpAC8QoDBPoC9gpZBYgCsQpdAxoC+gbJCMUCXAm7CP0FfQMIBswBGQp+CMMKkApcCGEAIgp+BuQKkAQYCq4KfgINCpAF/wkXBrwKfgYVCpAJ0AooAQUJggq+BP4J3QrCCqYDEQV7Aa0Kwgp9B2oKXAKlCKABkQoZAmgFxQGYChkBqQVOBT4EKgdxCn0C9QNRCMAKqQqrBO0DLQEVASgFWQHZAHUAaQE6AuAAcwE6AhYAaQBmAsgAcwB5ATsCCwAtCucK8ArqCuwFKwrvACAAJwBBA7gBoAAgAEMEwAAgAEUDMQBqAGkAJwLIACcAUwBlAGcAbwJPAFUASQsECwYLCAsKCwwLDgsQCxIAUwB5AG0DTQBsCwkK/ABOA04AbwsBCwMLBQBvCwcAJwJfCucK+QruAsgARwBlAS4AZwBpAGECyABDARUIRws0CwoAVALlBfEAIABOCeIAIABSBQIC4AsgCzwBZgBzCvAK7QBmCCwLLAMxBJYB0AF4AsgAUwBGAE0CnwBvAC0AUgsNAtEAcgLIAE0B5wBvC14CnwF0C2ELJQGDASwBtgsKAEwEBgIWBI0AIAtWAa0LIAAnCwIDJQPOAHILPwniCyALTwKqC1EDVgBmAG4K4AS2AGYK4wHoCtsBnQM0CuEBpQKlAyUI5AGFAp0E6Ap4AG4ISgrdAQYBPwb9CGgKrwcbBNcLlARsAuAAZwB1BwYG7QMIBgoLfgSWC4gEtgUXCY4BsAhmC5gLfwTyC5wB0AGgBjMK2wq2CuEJMQqpAk0LpwFKCSgB3ABkAGoDfge4C38BSwu6AVoChwTMBnELmQdQC8QI5Qu4CvEK3Au2AHkBegPVAqsLkQfJARsL0AvSCcoK6wVHBPkI9AvCAUQLywvRAWEL2gE6AhIBKgiDC9ULtQS2C84L4wvUB3gLzQq8C9gL7QPDATQJGwu4A/8L1wS2AHYBlAs0Ct4LmQv7C8QL+wUrAuAJpQL9AxYC0guRAHYBHQucDAIL/QF7CigMCQOiDAEL/AwEAeQCQgHcAqsC4ArbAeYMEwwDBLYCCwsoAGkMGwrMCuEMDQwVAYkLiwngDBsLzwv6DBQEtgPBAWYFKwBjDBsLrwwlDC4BBgvcAycL9wvqAQYMJgiHC44DjAp4C/EEtgEIC/YLmQxDAR4DkwU+Cn0ELQuIBxIE0gi1ArgLvwE7ATAIzwEFCM8MVQxXBgoMVQeICmUE0gTGAGEMXAEdDF4B3AqGCj0BgwFjAXABZQOkCXMBega0ArsBrwIiDG0BlgBtBEABDwxxACgAMALIADEAZgByACkMXAjDDGQKiwtYCq0CrwqdAHcFUAj9BE4EUAF5AvoDQAyHACAC4gZCAlwEWwj9DJEMjQNWBBQEwQyCDGYKVAINA4sB8QSVAYwE7gxvDKEAYQxyBO0Exwx1DGsAbgx4DHoD5gx9DH8BGQBnDGMGCgxnAzQD6gPtAC0AMQxVA70AdAxkCPEHKQAiDLQCDQzACqUHQwyzDJsMtgpUDLgD4wPlDLsMVQKHDFoBXwMGCcEBmgzRDMUMywnBDMgMwwQgDGQBIwEWAt0MVQJhDNME0gzgA3YBIwHcCEgHkABnCIsM3wpxAt0MZwINAhgFuQxeDOMMygzUDOcM8QyeA2wAcwz1DFsBGQBoBPIEagToBK8AcAOPBIsEjQEwB78JGgU+DGkMoQxsDKkMbgGvDKYMqApoAZwB8QEnB3IKaA0LAR0AaAB5AHAD1QMXCN0EagLDAvMKfA0BB28NHw0hAXkDBQEOA4sBew0lB5ANKwEFDSsNIgyfAWUC4AugCMgAIgbjBNcHDwTcAY4NCgEZBuMEwQcPBHsEpQuYBccIoAdlCGYDVgKZB7MBMAQGBaANTAXIBkoNUgHTDVUBhQZTDNcNRAkGDOQLjw1WBi0M3AkdDVoBBgoTDVIDzg1mCSYHVw1dDT0JHgezDWwI5AdIB7gNcARwCLAKmQXGDXcC0gEwAGoBHQxTAp0AZgN4DHMIhQVfBS4DrQJiBH4CbQIfCrcNdAJyAiYBqAJtBUwG/AUaBHUCWQIRAlsBzQV3A8UB1ARIA5gB2A2bAd0B3wnYDZsC+AcbBEUG9wvGAe4B8AJHAowCXgKPAfwCTgUtDSgAIgsHAQUNgAruA3gKbgINDZcCEgHqAoYG+QUlAkoNiAIaDYoCHgJvAaEK0gIlCpACZAnaAmYDsAJqAiwDswrZBSEGPgrYAjQCgwoUAnoCOgI8AcEBuQJ/AoEN3QI+Dd8CsAGgBBQAYwB5BYIFTwotDeYBdA3pB3EBxAHxDe0N6A2zAhcB8QKLDfUCSwKQDfgFUQEZAGoCDQ24DYIK7AJmAlgEPQ2YAbEChQHsC8cJhgUMDcQDnwIcDccNkAhVDY4NywJ0Am0CKg3OAmcNjgIwDdIBqQ2TDdYEdQ3YDd4BzA33DbIFIw2wApENrgVgACIHagraARkC/QINC7IJWwfLBOgOBQMdDTwBxQhqAQUHIQhtCEkBMABsB78HIQ0NB5UOLw4xA8MBSgc2CoEJDALiBHYEUAPDAGMFUAI5CJMHAABxC6AChwROAZgIQwNbAbEGBgsxClEL/QorA5QBPAK4ARIHfwXxAREBDwh5Db4AawA6CGsAbgL/BFEOPwKrDjsORwaUBNMLoQ4/A8ME8gpsDkgHUQVWBUgNeQakAV8BwwZEDoMOcgQgDnwOdglLBpUEdw5PDlEFKQW7AhgOVQTGDlgMjABjDlsGngRgCzIOYATMDmIG1w5lAcIDnA5pBD4AfA5sDm4OcAxhARkEMgGvDl8I9AsdDVQAdA6sCzMIRgXjATALHQWZDrIDpAYtDW4LHQdADrEBlA6zCQ4NdA62CHQOuQhGBnQOtgTeDr8OrQ1yDskOuA7ACSEHLgIdDskOvg7GDXIGIw6qB2oO1g4uACIAbQTBDtYHvA62BCAO1gf4DqoAcwhKAa8O5w62DucOxQG2CHcFqw7rCHMOqw7uBKcGUgQ6A1YCDAhzBNcO6Q7vBlIH8w7xCEcBYw70ByUHuwb7DwAMnw8DBfMAcwhPDwcI2A78DvUF2gRwAyUHCg7mCHMGFQ8PDwQI7QYcDvEBHQ8PBKAI0A7dDucAYwTyDx4FAgw5DvgO5wKZDw8G7A7xDvMO5wMwAzIPKABrDvsO9ATcDrMO8Q8kDvQMOQoEDyEAaw7fDvQFkA7xDwgPLwu3Dz0O4w70DosO4ghTApwAaALoBWkInABtCA0OvwFhC+8O3QkGDwICIg1jCSgOtge/DHEALQ5DB7gDiw8IAiIK0Q9bDqoPFwynDxoPUAB4D2gCIgdZA4sPVw6xDroGJw9mDt0JEgxpAYsPYAzNADAAMAAlBrQMagyiDHMMpQ05DRYMpAEcAjgNGwTuDtQIZA9yCS0HQg91A4sPFwOkB30DNQAxD3wPfgygDKwMowyqDHAPaQ+CD4cNGg+bC/4LHQ9LAGkPWQQ4BNIO9w42DqQEQAlwBEMB6AcABEcESQZoBEwDdwyLBFEIagHWBFUFCQHWBFoFmwRdBa4GYwRiCKwDxgb9BIMEaQRrBG0B1wRvBHEEcwrYAWgOTgR5AhYBeQK1BH4AeASAAqsDyQSEBIYEiAHyBIsIRQyJAU8BxASTAWoBDwVXBJkEcQEFAG8AYgBqA94DLQEMDYUJRwWdAlwD6QF8AwgEJgjHAdcETwFEAbABEQhgCPQFFw/qD+wP7g87CpkFXAU6DcIEkQUwDZQHvAocCaEN4AUhBTgFXQUNEAsFHQU7DZUFPxATBRkHvAUdATAEcQINBHEBnQbvBHEHiBAhDVYC4AHuBd4BGQRxCFMQJg1bCgcCmg8UACIEcQTyEC4MOAKlC8gQNATXEDYOfwvdEB4MfQ/qBHkNVgE9AmEBIxAeCnIP6gtRBAkQHgNAD+oGIBBMEDUAcg0hCuoQHgEOD+oDpgccECsHbwOeByEInwKdBmUIogmFAhQEygGOCwIP4gilCuoIpwv+AX0QVwVLBygQNhBVECAQWAdODkkH3weiBpcH4wgVAeAH5ggYBbYH6QZeBgcFwQgeB+4IIAe0AW0O/xBaBhUQXAcoCDUBbwg3AWYIOQa5CDsQPwdqBcAAcgqtEJQQJQMICq0B3AO8AGgQKhAzAZ8IdBCWEJwGGBCUAGMEMhCkCacBEgiZAzAO0BAAAZ8CmRCqCcENaBArAZ8QihCbEKsKwg/xCJkPsQm4EJQFShCzCdIFSgIUEL0ERhC/ELYB6A/qELkJwQVZEMUEQxC+BsoQHgbbAGIHvxCWAUQJuA2cBGoEBAF+CEsJFBDTAHIAYhCjCqcEIwbKENoAYRDcBiEF1A/xEN8QKxDUELIQ5BDZAdMQ2wKeB1UByxDsCSwQ4ABiEMEQ8RDmEPMQ6BD1AC0QxAWbEPkQKwG9AGIFWRDXEOUDLxD/EOkFdRD4CUgBMATyBOYLmASrDrARFAToDVcBGQSrBZkRGATpBiINbgSrAg0RHg7CAaMREgh0ESQGeQpvACIAcAKZESQKEwz9DY4QCQJjAm0OIg3jAcwNqQKIERINagB0ES8NTREhCR4RPgdHESYRGwdqESQO3Al9A3sCygSvDuERGwQgESQO5REsBuQB0AboEVIBtRFKBwcOPQhvBHINtAl7EOIRWAHSCH4IeAEuA1YRXhEuC6EDxQh+DksRZQPIEUoJCgOdEE8RGwvWA7kBvQO5A5AB5hESBHADewL5EXYCnQHmEXAE3Qj0ArMBHQN2AeMMcxESEFYRPQLGAgkM4AeQArMRIxGLAjEREhEdCWoB9wHkAeYBehGOAqoDewVXA5EEIQGTCY4P+A+mBCkCtwkGCLwCwQVoCLAGCA4JCY4AawSZCX0MTRE9CRcIjgRkDFILwAEwAHEPUg5VCkYHkAG9D4wJ8gWYCgoFAAHvD9sE3An2CQIBsQPpCY0BcAQuACIEwRFNEc4DTgKvA04NfAEZClEKvwFbClUKKAEwEOEE8gOCEQgQPQw6ACIM8wmPA1YQ2Ah0ENgQ/gBlEPQQoBDYBDIR6QMvDsYBMBHuBc4BkBELASoO1hCmARkR9AbEEfcQrg7MDrsO0xH7BCMOvRH2ENkR+QYnDsMSAwIREegR/hH5DsgSCwOLEgYQ5g7WELUR4xIEETwR8BH4EK8O1w1uEe4JHhIaEf8OwQrREgoSFwIRB2oSIQ7bBSER8xIEBMESKRIcEdAR7gQgEi8OzBFRENgE8hIhER4SLBBSEfUBQxH+ESkOtRH7BSkRHBITAy8SQAXcEh4EIxEiEkUBKhJHBaQM3BI3Eg0Q2REpEhASJhEtEkwFRhFLERkSFhI3EhkSPxJaA40K1RICElYSIBJfBK4SWw1NElASShIoEmYE5wONDtwSNxIuEm0RTAxGEjcSMxJzERkSNgQjAdgSWABzAv8DrwIGAYoSOwdMEj4Q2RJ+CigBWgUXEoMSdxKGEn8BIg0gEeYAYgEdEhoBtQSmBzAAcwQMEkwSlQjOA8cNtBKYBhUSlAGUD2oLyAQzAg0KHQ1OEfMGshIzBGoDuQ53BwcBYQngEJ8AbAO0EfsAaBHvEqwBERHyErUE1whWEq0GaQ6GARkOYwT7BMQOagEwDmMIdA5jAYMOagSwEsYCwwTXEskAcxLLDzYBDxLNAlMEHBLEAa4PVRLJEsMK6hA+EsEDuxLIBMQL3RDnEOkS1QIdEtwJGAMsAukDdxLmAyQEwRLQEuMS7g1DACISyQTyEvADLAl9BRcCFgSYEuYDhxLXEt0DLAOKBK8AZg0IDzwEMwdqCjwC6gOeEsYHiAPMAdwCVRExDYkOEA3UBU0QGA4MBS4AagA6DgEJmgHOApwB7hJZBMsGtAHxDzAAegoxBQwAdxMjAVYBIQ39EvQBsAT7AVkSgQGLAoETEQ3FExMOHwrXBHURMxMZExsSxgBjAyAGMwE5AXwLHQcoAHUJfQxGBfkTLwE5CEMBLgSNAX8CkASlEFkS9ABkAR0TDhNLCEUHIgX5EwgBWRNWBI0EbAHCE04B3wIWAjYESgRMAn4FDgcoErAB3gUbBP8BuAa8BfkOcxNAAQYTXAiHAQsDrwEPE24DOhNJE3ID1hNMCIcQdRB+CBoFuwehB+EQeAgUBjYBmwrBEOgEmQffE3oPTghEE10IOwnrCrYKFQE9CfgLlBLGBWkHvxMOCnEEagvUE5gTVAFZE5wKkgrrBzADrhONE6IL7hAFAvUBLg+0AhYN6grYCjQQlgAgDfADJRNPE64QDQK/E7YLdw3wAS0QFRCWAsIBgBAcE2EEkQSTEBETwxOYEqYToQEWE50L9AvMEvQCmRMOAQ8Mkge4AHQAahONExsIoAmCCWsEpgB3BKQFxQHxE9sOZQGUAXQFLgWtDkcFKwPGEEYSwRDdEw4NQQkCAvQBYwxrBCgBmwGAE0UQDQnMCIgDOAryBosK2A8LAZIOgxP6CusN8AIYFAADdwM7AHULDgGBA5wAZwHoDSERgA1CEeIDyBNaATkQwhC8ENAEfgEpBEMTnhLfCFMTDg1ICu0ONQT9BmgKKQLlCSgAUwO5BCkTsRQkA4sFmABMCw0EBgQIBJgOmQsxAWYJCwBjAFAC8gQFAp8SxgX/E40IVghgEsYJORNxASIS2AIRD/EKKAEMAgYJwxP1A7gCFgQtAvoEVQhYFE4CPQGcCYITBAMvBnACbg5sFFcBKgkPAC0Obg6pEvQAdRLPAVkTwwchEHASwRNFE40UZgcoE6oTYAIdAkoTNxMWE7kTwxOzDdUDghAYACATxxLBBhUTDhC7AHQKwQLDBP4CWQrCBP8BsBAoAcMDfAvGEvwSwQT7EooT6xMNAd4THxPkEZ4DfALgEQIEqgVyCPMFdQSqAWQUmwB4ACAUmwHpES0E5QEPEx8J9gVBEt8TCATEDOIBGQGCBAYBfwKYAXwC4gPFAV8MIhSuAg0DfgTiAbcD3gawCZEJpgL8AhMRBBERARkMAAB0EcsJjxMPAgcC9QW6AnYOIxAOBP4MdgK5BbsQBwUCAWwJiQE5BRIEMwS5ATkRKgHXAbMM/gmtDZoM/hF0ATAL+AQEAqsEBwEOBJgQ7AEpDBADVgnuCsASqgjkC30BQQvgFIAU8wE6C30BTgbLFPAIUwYbCFgHkAYVB30PmQ+BDRIMdA+dD4UExw+gEysVBwQmD5YPfQFBAR0BXgMvAe4LngbEAc4SORGdA9MUwwGOAzsQaBLKAa4BQRDhCsAEpBFpCG4VIwINE90DQBT6AXQLmAnQDrEKwAijBK8O9wEwD4wTJRPSASQVNgTXFKgGdQBd",K=A=>({all:A=A||new Map,on(B,g){let Q=A.get(B);Q?Q.push(g):A.set(B,[g])},once(B,g){let Q=(...Q)=>(A.get(B)&&A.delete(B),g(...Q)),w=A.get(B);w?w.splice(0,w.length,Q):A.set(B,[Q])},off(B,g){let Q=A.get(B);Q&&(g?Q.splice(Q.indexOf(g)>>>0,1):A.set(B,[]))},emit(B,g){let Q=A.get(B);Q&&Q.slice().forEach(A=>{A(g)}),Q=A.get("*"),Q&&Q.slice().forEach(A=>{A(B,g)})}});function V(A){try{let B=atob(A);return Uint8Array.from(B,A=>A.charCodeAt(0))}catch(A){throw new Error(`Failed to convert base64 to buffer: ${A.message}`)}}function y(A){try{let B=z(A);return new TextDecoder("utf-8").decode(B)}catch(A){throw new Error(`Failed to decompress to string: ${A.message}`)}}function z(A){try{let B=V(A),g=[];for(let A=0;A<B.length;A+=2)g.push(B[A]<<8|B[A+1]);let Q=new Map,w=256;for(let A=0;A<256;A++)Q.set(A,String.fromCharCode(A));let E=Q.get(g[0])||"",e=E;for(let A=1;A<g.length;A++){let B=g[A],C=Q.get(B);C||(C=E+E[0]),e+=C,Q.set(w++,E+C[0]),E=C}return(new TextEncoder).encode(e)}catch(A){throw new Error(`Failed to decode and decompress to buffer: ${A.message}`)}}var T=new RegExp(["^((?<m>xs|sm|md|lg|xl|2xl|sma|mda|lga|xla):)?","(?<l>[0-9]*)?","(?<p>",["(",["(\\[([a-zA-Z]+)\\])"],"|",["(","((-w|[a-z])((-)?[a-z])*)","(([A-Z#!])|((-)?[.0-9])|(--|{|'))","([^&@]+)?",")"],")"],["(&","((-w|[a-z])((-)?[a-z])*)","(([A-Z#!])|((-)?[.0-9])|(--|{|'))","([^@]+)?",")?"],["(&","\\[([a-zA-Z]+)\\]",")?"],")","(@(?<s>.*))?$"].flat(1/0).join("")),$=new RegExp("^(\\[(?<p>[a-zA-Z]+)\\])$"),_=new RegExp(["^(?<p>(-w|[a-z])((-)?[a-z]+)*)","(?<v>(([A-Z#!.{'])|((-)?[0-9])|--)(.+)?)$"].join("")),AA={n:"none",nm:"normal",a:"auto",i:"inherit",in:"initial",is:"inline-start",ie:"inline-end",tr:"transparent",c:"center",cl:"collapse",l:"left",r:"right",h:"hidden",v:"visible",s:"start",e:"end",t:"top",b:"bottom",bs:"block-start",be:"block-end"},N=A=>typeof Document<"u"&&A instanceof Document,v=A=>typeof ShadowRoot<"u"&&A instanceof ShadowRoot,BA=A=>typeof HTMLElement<"u"&&A instanceof HTMLElement,gA=A=>{let B={},g={};for(let Q of A){let[A,w,E]=Q.split("\t");if(B[A]=w,E){let B=Object.fromEntries(E.split("|").map(A=>{let[B,g]=A.split(":");return[B,g]}));g[A]=B}}return{properties:B,values:g}},eA=JSON.parse(y(R)),{properties:QA,values:EA}=gA(eA),wA=A=>A&&"function"==typeof A.getRootNode?A.getRootNode():null,P=(A,B)=>{if(Array.isArray(A))return void A.forEach(A=>P(A,B));let g="string"==typeof A?A:A instanceof String?A.valueOf():null;g&&g.split(/\s+/g).forEach(A=>{A&&B.push(A)})},f=A=>{let B=[];return P(A,B),B},sA=(A,B="fwkui")=>{if(!A||"function"!=typeof A.querySelector||A.querySelector(`style[id="${B}"]`))return;let g=N(A)?A:A.ownerDocument;if(!g)return;let Q=g.createElement("style");if(Q.id=B,v(A))A.prepend(Q);else{let A=g.head||g.documentElement;if(!A)return;A.append(Q)}let w=`@layer ${Array.from({length:24},(A,B)=>`l${B}`).join(", ")};`,E=setInterval(()=>{Q.sheet&&(clearInterval(E),Q.sheet.insertRule(w,Q.sheet.cssRules.length))},0)},k=(A={css:"",gValue:{},exNames:[],mQuery:[],valueExt:{}})=>{let{css:B=null,mQuery:g=[],gValue:Q={},valueExt:w={},exNames:E=[]}=A||{};Array.isArray(g)||(g=[]),Array.isArray(E)||(E=[]),Object.getPrototypeOf(Q)!==Object.getPrototypeOf({})&&(Q={}),Object.getPrototypeOf(w)!==Object.getPrototypeOf({})&&(w={});let e={...AA,...w},C=A=>{if("string"!=typeof A||!A||E.length>0&&E.some(B=>B.includes("*")?new RegExp("^"+B.replace(/\*/g,".+")+"$").test(A):B===A))return null;let{m:B="default",l:g=0,p:Q,s:w=""}=T.exec(A)?.groups??{};if(!Q)return null;let e=Q.split("&").map(A=>t(A)).filter(A=>A);if(0===e.length)return null;let C=w.replace(/(';|;)/g,A=>"';"===A?";":" "),s=CSS.escape(A),r=`selector(${s}${C})`;return C&&!CSS.supports(r)?null:{media:B,layer:g,className:s,property:e.join(";"),selector:C}},t=A=>{let B=(A=>{let{p:B=""}=$.exec(A)?.groups??{};if(B&&Q[B]&&Array.isArray(Q[B])){let A=Q[B];if(A.every(A=>CSS.supports(A)))return A.join(";")}return null})(A);if(B)return B;let{p:g,v:w=""}=_.exec(A)?.groups??{};if(!g||!w)return null;let E=QA[g]||g,C=w[0],t=w.substring(1),s="!"!==C?w:t,r="!"===C;if(!s)return null;s=s[0].toLowerCase()+s.substring(1),s=s.startsWith("--")?`var(${s})`:s.startsWith("{")&&s.endsWith("}")?s.substring(1,s.length-1):EA[g]?.[s]||e[s]||s,s=s.replace(/(';|;)/g,A=>"';"===A?";":" ");let D=s+(r?" !important":""),o=[`${E}:${D}`];switch(E){case"mx":o=[`margin-left:${D}`,`margin-right:${D}`];break;case"my":o=[`margin-top:${D}`,`margin-bottom:${D}`];break;case"px":o=[`padding-left:${D}`,`padding-right:${D}`];break;case"py":o=[`padding-top:${D}`,`padding-bottom:${D}`];break;case"bdx":o=[`border-left:${D}`,`border-right:${D}`];break;case"bdy":o=[`border-top:${D}`,`border-bottom:${D}`]}return o.every(A=>CSS.supports(A))?o.join(";"):null},s=A=>{let B=[...A?.classList||[]].filter(A=>{if(A){let B=45===A.charCodeAt(0)?A.charCodeAt(1):A.charCodeAt(0);return B>=97&&B<=122||B>=48&&B<=57}return!1});return A?.children?.length>0&&Array.from(A?.children).forEach(A=>{B.push(...s(A))}),B.flat(1/0)},r=(A,B)=>{if("function"!=typeof B)throw new Error("Callback is not a function");if(!A)return;let g=null;N(A)?g=A.documentElement:(v(A)||BA(A))&&(g=A),g&&(B(s(g)),new MutationObserver(A=>{for(let g of A)if("attributes"===g.type&&"class"===g.attributeName){if(1===g.target.nodeType){let A=String(g.target?.className??""),Q=String(g?.oldValue??"");if(A||Q){let g=f(A),w=f(Q);g=g.filter(A=>!w.includes(A)),B([...new Set(g)])}}}else if("childList"===g.type&&g.addedNodes.length>0){let A=[...g.addedNodes].filter(A=>1===A.nodeType).map(A=>s(A)).flat(1/0);B([...new Set(A)])}}).observe(g,{attributes:!0,attributeOldValue:!0,attributeFilter:["class"],childList:!0,subtree:!0}))};return{buildCss:(A=(typeof document>"u"?null:document))=>{let Q=wA(A);if(!Q||typeof CSSStyleSheet>"u"||!("adoptedStyleSheets"in Q))return null;let w=new Map;sA(Q);let E=K(),e=[{default:""},{xs:"screen and (max-width: 575px)"},{sm:"screen and (min-width: 576px)"},{md:"screen and (min-width: 768px)"},{lg:"screen and (min-width: 992px)"},{xl:"screen and (min-width: 1200px)"},{"2xl":"screen and (min-width: 1400px)"},{sma:"screen and (max-width: 768px)"},{mda:"screen and (max-width: 992px)"},{lga:"screen and (max-width: 1200px)"},{xla:"screen and (max-width: 1400px)"},...g],t=e.filter((A,B)=>e.findLastIndex(B=>Object.keys(B)[0]===Object.keys(A)[0])===B),s=t.map(A=>Object.keys(A)[0]),D={},o={root:new CSSStyleSheet},c={root:""},G={root:[]},I={root:!1};s.forEach(A=>{D[A]=new Set,o[A]=new CSSStyleSheet({media:t.find(B=>Object.keys(B)[0]===A)?.[A]||""}),c[A]="",G[A]=[],I[A]=!1});let a=Array.isArray(B)?B.join("\n"):B||"";c.root=a,o.root.replaceSync(a),["root",...s].forEach(A=>{Q.adoptedStyleSheets.includes(o[A])||(Q.adoptedStyleSheets=[...Q.adoptedStyleSheets,o[A]])});let l=(A,B)=>{let{media:g,property:Q,selector:E,layer:e,className:C}=B,t=o[g],s=D[g],r=Number(e)||0,a=w.get(A),l=`@layer l${r}{${a?`.${a}${E}`:`.${C}${E}`}{${Q}}}`;s.has(l)||(s.add(l),G[g].push(l),I[g]||(I[g]=!0,queueMicrotask(()=>{let A=G[g];A.length>0&&(c[g]+=(c[g]?"\n":"")+A.join("\n"),t.replaceSync(c[g]),G[g]=[]),I[g]=!1})))};return E.on("observeDom",A=>{A.length>0&&A.forEach(A=>{let B=C(A);B&&l(A,B)})}),{clsx:(...A)=>{let B=f(A);B=[...new Set(B)];let g=B.map(A=>{if(w.has(A))return w.get(A);if(T.test(A)){let B="D"+w.size.toString(32).toUpperCase();return w.set(A,B),B}return A});return queueMicrotask(()=>E.emit("observeDom",B)),g.join(" ")},observe:()=>{r(Q,A=>{A.length>0&&A.forEach(A=>{let B=C(A);B&&l(A,B)})})}}}}},tA=(A,B)=>{let g=k(B).buildCss(A);g&&g.observe()},CA=(A,B)=>{let g=k(B).buildCss(A);return g?g.clsx:(...A)=>f(A).join(" ")},iA={css:k,cssObserve:tA,clsx:CA};export{CA as cssClsx,tA as cssObserve,iA as default,k as xcss};
|